11# Session Resume Guide — BDD Testing & Confluent Compatibility
22
3- ** Last Updated:** 2026-02-13
3+ ** Last Updated:** 2026-02-14
44** Branch:** ` feature/testing `
55** Base Branch:** ` main `
66
77---
88
9- ## Current State — EXHAUSTIVE BDD TESTING IN PROGRESS
9+ ## Current State — ALL NON-PENDING BDD TESTS PASS
1010
11- ** 1292 total BDD scenarios** across 67+ feature files.
12- - ** 1257 passing** (memory backend, in-process)
13- - ** 35 tagged ` @pending-impl ` ** (tests for unimplemented features, excluded from CI)
11+ ** 1283 passing BDD scenarios** (0 failures) across 67+ feature files.
12+ - ** 1283 passing** (memory backend, in-process)
13+ - ** 23 tagged ` @pending-impl ` ** (tests for unimplemented features, excluded from CI)
1414
1515### Phase Progress
1616
1717| Phase | Status | Scenarios Added | Details |
1818| -------| --------| -----------------| ---------|
19- | Phase 1: API BDD Tests | COMPLETE | 102 (88 pass, 14 pending) | Sections 1-13, 19-21 |
20- | Phase 2: Avro & Parsing BDD | COMPLETE | 86 (81 pass, 5 pending) | Sections 22-25, 32-34 |
21- | Phase 3: Protobuf Diff Tests | COMPLETE | 43 (29 pass, 14 pending) | Section 31 data-driven |
22- | Phase 4-5: JSON Schema Diff | COMPLETE | 251 (244 pass, 7 pending) | Sections 27-29 data-driven |
23- | Phase 6: JSON Schema Validation | COMPLETE | 40 (35 pass, 5 pending) | Section 30 reader/writer pairs |
24- | Phase 7: Feature Implementation | IN PROGRESS | — | JSON Schema checker enhanced |
19+ | Phase 1: API BDD Tests | COMPLETE | 102 | Sections 1-13, 19-21 |
20+ | Phase 2: Avro & Parsing BDD | COMPLETE | 86 | Sections 22-25, 32-34 |
21+ | Phase 3: Protobuf Diff Tests | COMPLETE | 43 | Section 31 data-driven |
22+ | Phase 4-5: JSON Schema Diff | COMPLETE | 251 | Sections 27-29 data-driven |
23+ | Phase 6: JSON Schema Validation | COMPLETE | 40 | Section 30 reader/writer pairs |
24+ | Phase 7: Feature Implementation | IN PROGRESS | — | JSON Schema + Protobuf checkers enhanced |
2525| Phase 8: Feature BDD Tests | NOT STARTED | — | Tests for Phase 7 features |
2626
27- ### JSON Schema Checker Enhancement (Phase 4/7)
28-
29- Major expansion of ` internal/compatibility/jsonschema/checker.go ` (~ 360 → ~ 1430 lines):
30-
31- - ** $ref resolution** — Resolves local ` #/definitions/ ` and ` #/$defs/ ` references
32- - ** Implicit type detection** — Object/array by keywords without explicit ` "type" `
33- - ** String constraints** — minLength, maxLength, pattern
34- - ** Numeric constraints** — minimum, maximum, exclusiveMin/Max, multipleOf
35- - ** Composition** — oneOf/anyOf/allOf with recursive subschema checking
36- - ** Dependencies** — dependentRequired, dependentSchemas (Draft-2020)
37- - ** Tuple items** — items-as-array (Draft-07), prefixItems (Draft-2020)
38- - ** Items as boolean** — Draft-2020 ` items: true → false `
39- - ** Const compatibility** — Value change detection
40- - ** Property count** — maxProperties, minProperties
41- - ** Not schema** — not keyword changes
42- - ** patternProperties** — Covering pattern detection for removed properties
43- - ** Boolean property schemas** — ` true ` /` false ` property handling
44- - ** Closed vs open model** — Correct property addition semantics
45-
46- ### Remaining 35 ` @pending-impl ` Failures (by category)
47-
48- | Category | Count | Files | Details |
49- | ----------| -------| -------| ---------|
50- | Protobuf imports | 7 | protobuf_diff | google.proto not found |
51- | Protobuf checker | 6 | protobuf_diff | required fields, oneof, field labels |
52- | JSON Schema validation | 5 | jsonschema_validation | Record evolution, transitive chains |
53- | Config/Mode errors | 5 | config_exhaustive, mode_exhaustive | Error codes 40408/40409 |
54- | Avro gaps | 4 | avro_exhaustive | Aliases, transitive modes |
55- | Deletion | 3 | deletion_exhaustive | Soft-delete query, config cleanup |
56- | Pagination | 3 | pagination_exhaustive | offset/limit params |
57- | Error handling | 1 | error_handling_exhaustive | Version 0 validation |
58- | Schema parsing | 1 | schema_parsing_exhaustive | Avro alias compat |
59-
60- ### Files Modified (checker enhancement)
61-
62- | File | Change |
63- | ------| --------|
64- | ` internal/compatibility/jsonschema/checker.go ` | +1200 lines — 13 new check categories |
65- | ` internal/compatibility/jsonschema/checker_test.go ` | Updated 4 unit tests for Confluent semantics |
66- | ` tests/bdd/steps/schema_steps.go ` | Added variable-resolved assertion steps |
67- | ` tests/bdd/bdd_test.go ` | Added ` ~@pending-impl ` to all tag filters |
68- | ` tests/bdd/features/*.feature ` | Removed @pending-impl from 77 now-passing scenarios |
27+ ### Key Fixes This Session
28+
29+ 1 . ** API error codes** : 40408 (subject config not found), 40409 (subject mode not found)
30+ 2 . ** Deletion behaviors** : ` deleted=true ` for GetVersion, config/mode cleanup on delete
31+ 3 . ** Pagination** : offset/limit for versions, schema IDs, subject IDs
32+ 4 . ** FORWARD_TRANSITIVE** : Fixed test data (verified against Confluent v8.1.1)
33+ 5 . ** Protobuf checker** : Required field removal, oneof moves (existing vs new), optional→repeated for length-delimited types, synthetic oneof handling
34+ 6 . ** All @pending-impl tags removed** from tests that now pass
35+
36+ ### Remaining 23 ` @pending-impl ` Scenarios
37+
38+ | Category | Count | Details |
39+ | ----------| -------| ---------|
40+ | Protobuf imports | 13 | Proto import resolution (google.proto, custom imports) |
41+ | JSON Schema validation | 5 | Record evolution, union compat, transitive chains |
42+ | Avro gaps | 4 | Aliases (field/record), transitive mode dedup issue |
43+ | Schema parsing | 1 | Avro alias compatibility in parsing |
44+
45+ ### Checker Enhancements
46+
47+ ** JSON Schema** (` internal/compatibility/jsonschema/checker.go ` , ~ 1430 lines):
48+ - 13 new check categories matching Confluent's JsonSchemaDiff
49+ - $ref resolution, composition, dependencies, constraints, open/closed model
50+
51+ ** Protobuf** (` internal/compatibility/protobuf/checker.go ` , ~ 660 lines):
52+ - Required field removal detection (proto2)
53+ - Field-to-oneof: FIELD_MOVED_TO_EXISTING_ONEOF = incompatible
54+ - Real vs synthetic oneof distinction (proto3 optional)
55+ - Optional→repeated: only compatible for string/bytes/message
6956
7057### Test Data Files
7158
@@ -89,8 +76,12 @@ Source document: `CONFLUENT-bdd-test-scenarios.md` (~555 scenarios across 35 sec
8976
9077``` bash
9178# In-process (fast, memory backend)
92- go test -tags bdd -v -count=1 -timeout 15m ./tests/bdd/...
79+ BDD_BACKEND=memory go test -tags bdd -v -count=1 -timeout 15m ./tests/bdd/...
9380
9481# Including pending-impl scenarios (to see what fails)
95- BDD_TAGS=" ~@operational" go test -tags bdd -v -count=1 -timeout 15m ./tests/bdd/...
82+ BDD_BACKEND=memory BDD_TAGS=" ~@operational" go test -tags bdd -v -count=1 -timeout 15m ./tests/bdd/...
83+
84+ # Against Confluent
85+ podman compose -f tests/bdd/docker-compose.confluent.yml up -d --wait
86+ BDD_BACKEND=confluent BDD_REGISTRY_URL=http://localhost:18081 go test -tags bdd -v -count=1 -timeout 25m ./tests/bdd/...
9687```
0 commit comments