# Changelog

## Score

- CAI 63 → 63 (+0.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

## Lenses

- Code Health 94 → 99 (+5.4)
- Architecture 99 → 77 (-21.9)
- Maturity 75 → 80 (+4.6)
- Readiness 50 → 50 (+0.0)
- Security 62 → 65 (+3.7)
- Domain Modelling 100 → 100 (+0.0)

## Resolved (81)

- Change coupling: ConditionConverter.java ↔ ConditionToCriteriaConverter.java (common/mongodb/native/filter-bsonfilter-conversion/src/main/java/org/occurrent/mongodb/spring/filterbsonfilterconversion/internal/ConditionConverter.java)
- Change coupling: DocumentCloudEventReader.java ↔ DocumentCloudEventWriter.java (eventstore/mongodb/common/src/main/java/org/occurrent/eventstore/mongodb/cloudevent/DocumentCloudEventReader.java)
- Change coupling: FilterToBsonFilterConverter.java ↔ FilterConverter.java (common/mongodb/native/filter-bsonfilter-conversion/src/main/java/org/occurrent/mongodb/spring/filterbsonfilterconversion/internal/FilterToBsonFilterConverter.java)
- Change coupling: ReactorCheckpointStorage.java ↔ ReactorMongoSubscriptionModel.java (subscription/mongodb/spring/reactor-position-storage/src/main/java/org/occurrent/subscription/mongodb/spring/reactor/ReactorCheckpointStorage.java)
- Change coupling: SpringMongoCheckpointStorage.java ↔ SpringMongoSubscriptionModel.java (subscription/mongodb/spring/blocking-position-storage/src/main/java/org/occurrent/subscription/mongodb/spring/blocking/SpringMongoCheckpointStorage.java)
- Change coupling: SpringMongoCheckpointStorage.java ↔ SpringRedisCheckpointStorage.java (subscription/mongodb/spring/blocking-position-storage/src/main/java/org/occurrent/subscription/mongodb/spring/blocking/SpringMongoCheckpointStorage.java)
- Consequences are thin ('This should have any noticeable effects...') and trade-offs (complexity vs. restart resilience) not stated (doc/architecture/decisions/0005-mongodb-subscription-implementation.md)
- Coverage not included — suite not readable by the collector
- DcbCatchupSubscriptionModel.startDcbCatchupSubscription (cognitive 17) (subscription/util/blocking/catchup-subscription/src/main/java/org/occurrent/subscription/blocking/durable/catchup/DcbCatchupSubscriptionModel.java)
- Decision is 'None yet' with no consequences and no context (why CloudEvent serialization matters for Occurrent) (doc/architecture/decisions/0002-mongodb-cloudevent-serialization.md)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- DocumentCloudEventReader.convertJsonData (cognitive 16) (eventstore/mongodb/common/src/main/java/org/occurrent/eventstore/mongodb/cloudevent/DocumentCloudEventReader.java)
- DocumentCloudEventReader.read (cognitive 23) (eventstore/mongodb/common/src/main/java/org/occurrent/eventstore/mongodb/cloudevent/DocumentCloudEventReader.java)
- Duplicated block (10 lines × 2) (subscription/util/blocking/stream-catchup-subscription/src/main/java/org/occurrent/subscription/blocking/durable/catchup/StreamCatchupSubscriptionModel.java)
- Duplicated block (10 lines × 2) (subscription/util/reactor/durable-subscription/src/main/java/org/occurrent/subscription/reactor/durable/ReactorDurableSubscriptionModel.java)
- Duplicated block (11 lines × 2) (subscription/util/blocking/stream-catchup-subscription/src/main/java/org/occurrent/subscription/blocking/durable/catchup/StreamCatchupSubscriptionModel.java)
- Duplicated block (13 lines × 2) (subscription/util/blocking/stream-catchup-subscription/src/main/java/org/occurrent/subscription/blocking/durable/catchup/StreamCatchupSubscriptionModel.java)
- Duplicated block (13 lines × 2) (subscription/util/reactor/durable-subscription/src/main/java/org/occurrent/subscription/reactor/durable/ReactorDurableSubscriptionModel.java)
- Duplicated block (15 lines × 3) (subscription/util/blocking/stream-catchup-subscription/src/main/java/org/occurrent/subscription/blocking/durable/catchup/StreamCatchupSubscriptionModel.java)
- Duplicated block (16 lines × 2) (framework/spring-boot-starter-mongodb/src/main/java/org/occurrent/springboot/mongo/blocking/OccurrentBlockingAnnotationBeanPostProcessor.java)
- …and 61 more

## New (80)

- ADR not followed: 69. Programmatic snapshot API: global facade plus per-aggregate spec (doc/architecture/decisions/0069-programmatic-snapshot-facade-and-per-aggregate-spec.md)
- Change coupling: FlowSagaImpl.java ↔ SagaFlowExtensions.kt (dsl/saga-dsl/common/src/main/java/org/occurrent/dsl/saga/flow/FlowSagaImpl.java)
- Change coupling: SpringMongoCheckpointStorage.java ↔ ReactorCheckpointStorage.java (subscription/mongodb/spring/blocking-checkpoint-storage/src/main/java/org/occurrent/subscription/mongodb/spring/blocking/SpringMongoCheckpointStorage.java)
- Change coupling: SpringMongoCheckpointStorage.java ↔ SpringMongoSubscriptionModel.java (subscription/mongodb/spring/blocking-checkpoint-storage/src/main/java/org/occurrent/subscription/mongodb/spring/blocking/SpringMongoCheckpointStorage.java)
- Consequences are one sentence and trade-offs (complexity) are not detailed (doc/architecture/decisions/0005-mongodb-subscription-implementation.md)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no architecture or design documentation (eventstore/migration/update-event-repair/README.md)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (10 lines × 2) (example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/dcb/autoconfig/features/wordhint/RevealInitialCharactersInWordHintAfterGameIsStarted.kt)
- Duplicated block (12 lines × 2) (dsl/subscription-dsl/reactor/src/main/kotlin/org/occurrent/dsl/subscription/reactor/Subscriptions.kt)
- Duplicated block (12 lines × 3) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/gameplay/website/Website.kt)
- Duplicated block (12 lines × 3) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/gameplay/website/Website.kt)
- Duplicated block (14 lines × 2) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/GameCloudEventConverter.kt)
- Duplicated block (14 lines × 2) (example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/dcb/autoconfig/features/dcb/GameEventTagGenerator.kt)
- Duplicated block (14 lines × 3) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/gameplay/views/endedgamesoverview/EndedGameOverviewMongoDTO.kt)
- Duplicated block (17 lines × 2) (application/service/blocking/src/main/kotlin/org/occurrent/application/service/blocking/ExecuteFilterExtensions.kt)
- Duplicated block (17 lines × 2) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/GameCloudEventConverter.kt)
- Duplicated block (18 lines × 2) (dsl/subscription-dsl/blocking/src/main/kotlin/org/occurrent/dsl/subscription/blocking/Subscriptions.kt)
- Duplicated block (18 lines × 2) (example/domain/word-guessing-game/mongodb/spring/dcb-autoconfig/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/dcb/autoconfig/features/pointawarding/AwardPointsToPlayerThatGuessedTheRightWord.kt)
- Duplicated block (19 lines × 2) (example/domain/word-guessing-game/mongodb/spring/blocking/src/main/kotlin/org/occurrent/example/domain/wordguessinggame/mongodb/spring/blocking/features/GameCloudEventConverter.kt)
- …and 60 more

## Changes since last survey

- 300 commits — 276 feature/other, 24 fixes

## By area

- .context/epics — 91 commits
- .context/ORCHESTRATOR.md — 90 commits
- .context/lessons.md — 22 commits
- dsl/saga-dsl — 16 commits
- (repo) — 14 commits
- framework/spring-boot-autoconfigure — 11 commits
- (root) — 10 commits
- broker/rabbitmq — 9 commits
- dsl/projection-dsl — 7 commits
- broker/kafka — 5 commits
- doc/architecture — 4 commits
- subscription/util — 4 commits
- eventstore/migration — 3 commits
- common/filter — 2 commits
- eventstore/mongodb — 2 commits
- framework/spring-boot-starter-mongodb — 2 commits
- common/retry — 1 commit
- doc/runbooks — 1 commit
- dsl/dcb-dsl — 1 commit
- dsl/view-dsl — 1 commit

## Notable commits

- fix: Fix @Transactional silently ignored on subscription handler methods (#933)
- fix: Fix a Kafka pattern-subscription test racing its own consumer group rebalance
- fix: Fix a RabbitMQ bridge that stopped consuming for good after a connection recovery
- fix: Fix the name clash between the framework annotations and the types they mark (#924)
- fix: Fix updateEvent corrupting stored events' position and dcbTags (#901)
- fix: Three overstated claims left by the round-one recovery and quarantine fixes (#1068)
- fix: [ci skip] rel34: 933 held on a JDK-proxy defect my brief propagated
- fix: [ci skip] rel34: 941 failure is real event loss, U4 fixed all four
- fix: [ci skip] rel34: a confirmed defect on main is a CI tax, rerun versus rebase
- fix: [ci skip] rel34: backward pass found no shipped defect but two incomplete gates
- fix: [ci skip] rel34: rebase rather than rerun when a flake fix has landed
- fix: [ci skip] rel34: revert gating, U6 ruled, U19 delivered, brk finished
- fix: [ci skip] rel34: revert merged as 47e282805, R3 clear of both siblings
- fix: [ci skip] rel34: the round-N fix pattern, and instructions that name a mechanism
- fix: [ci skip] sdi: Copilot found the bare-prose form of the rename defect
- fix: [ci skip] sdi: U1 annotation-rename defect fixed and verified by content
- fix: [ci skip] sdi: ask-bar asymmetry fixed in the skill, standing practice recorded
- fix: [ci skip] sdi: dec-0004 superseded by dec-0005 after the caller-side read, release naming fixed
- fix: [ci skip] sdi: known monitor leak recorded and not fixed, corrected label verified in use
- fix: [ci skip] sdi: retract the premise-expired claim, the growth was the defect
- …and 280 more

## Architecture

- Containers 0 added · 0 removed · contexts 0 added · 1 removed · edges 0 added · 0 removed

## Removed bounded contexts (1)

- test-support
