docs: post-architecture-deepening audit — trim PLAN.md, fix CLAUDE.md drift#143
Merged
Conversation
Follow-up to the architecture-deepening squash that merged as 50c7dbf. Three concerns bundled into one commit since they're all documentation/housekeeping with no code impact. **PLAN.md trim (259 → 172 lines, -87).** - Header rewritten — was pointing at 1.13 / "1.14 in flight"; both shipped, 1.15 is current. Stops re-asserting per-release detail that belongs in git history + CLAUDE.md §19/§20. - Score table updated for the deepening pass: Discovery 8.5→9, Type safety 9→9.5, aggregate 8.7→8.8 (Result<T> switch is now the only way to get a pipeline outcome, enforced by the compiler). - "Developer-ergonomics — 1.14 in flight" section collapsed to just the deferred-decisions list — the part that still has forward signal. Shipped items live in commits + §16/§19. - "Strengths to preserve" section deleted — 100% verbatim duplication of CLAUDE.md core invariants + §3-§14. Two sources of truth for the same content always drift. - Per-module contents table deleted — restated package contents already recoverable from settings.gradle + CLAUDE.md §9. Kept the ASCII dep diagram and the "Still planned" mini-table. - Open question #3 ("Confluent SR scope... schedule for 1.14?") removed — answered, shipped, doctrine in §19. **CLAUDE.md audit + fixes.** Three parallel Explore agents audited §7/§8/§17, §10/§11/§12, §18/§20 + invariants against current code. Eight substantive drift items fixed: - §7 vs §8 helper-name inconsistency. §7 said the public helpers are on MessageProcessorRegistry; §8 said RegistryFunctions with `withConsumerErrorHandling` for sinks. Verified public face is on MessageProcessorRegistry; rewrote §8 to match and note the internal delegation as a historical artifact. - §11 unpark sources. Bullet still named processRecord()'s finally as the third unpark site; it moved to afterRecordComplete() (the dispatcher's onComplete callback) in 1.15. - §11 markOffsetProcessed-before-errorHandler invariant. Added the one real exception (handleParallelRejection during shutdown). - §12 byte-level entry points bullet. Said `apply` / `processToSink` / `processToValue` "preserve pre-1.13 contracts." Methods are gone; replaced with an inverted bullet explaining WHY they're gone. - §12 real-world burn paragraph. Dropped the stale processTypedRecord method name. - §17 capability table. Four rows had wrong method names: withConsumerProvider → withConsumer; withDeadLetterBundle → withDeadLetterQueue(String, KPipeProducer); withOffsetManager(Provider) → withOffsetManagerProvider(Function<Consumer, OffsetManager>); withRebalanceListener → doesn't exist as a public Builder method (lives on OffsetManager.createRebalanceListener()). - §18 offset-commit bullet. Generalized from batch-only to ALL offset bookkeeping — the deepening pass extended what was a 1.12-batch-only optimization to every processing mode. - §18 shutdown drain order. Updated to point at the four named phases of the split close() instead of a flat sequence that no longer matches the code structure. - Coding standards. Added the accumulator-pattern exception to "final var for locals" — one site in the codebase legitimately needs reassignment. Verified accurate and left untouched: §10 OTel metric table, top-level Core invariants, §13, §14, §15, §16, §19, §20. **Housekeeping.** - Removed plans/2026-05-24-fastjson2-migration.md — that migration shipped as 70cb470; the plan file was scratch state. - Gradle wrapper bump pulled in by the rebase.
1e7dba8 to
e9a4e49
Compare
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to the architecture-deepening squash (#141 /
50c7dbf). Three concerns bundled into one commit since they're all documentation/housekeeping with no code impact.PLAN.md trim (259 → 172 lines, -87)
Result<T>switch is now the only way to get a pipeline outcome, enforced by the compiler).settings.gradle+ CLAUDE.md §9. Kept the ASCII dep diagram and the "Still planned" mini-table.CLAUDE.md audit + fixes
Three parallel Explore agents audited §7/§8/§17, §10/§11/§12, §18/§20 + invariants against current code. Eight substantive drift items fixed:
MessageProcessorRegistry; §8 saidRegistryFunctionswithwithConsumerErrorHandlingfor sinks. Verified public face is onMessageProcessorRegistry; rewrote §8 to match and note the internal delegation as a historical artifact.processRecord()'s finally as the third unpark site; it moved toafterRecordComplete()(the dispatcher'sonCompletecallback) in 1.15.handleParallelRejectionduring shutdown).apply/processToSink/processToValue"preserve pre-1.13 contracts." Methods are gone; replaced with an inverted bullet explaining WHY they're gone.processTypedRecordmethod name.withConsumerProvider→ actuallywithConsumer(Supplier<Consumer<K,byte[]>>)withDeadLetterBundle(...)→ actuallywithDeadLetterQueue(String, KPipeProducer)withOffsetManager(Provider)→ actuallywithOffsetManagerProvider(Function<Consumer<K,byte[]>, OffsetManager<K>>)withRebalanceListener(...)→ doesn't exist as a public Builder method; lives onOffsetManager.createRebalanceListener()close()instead of a flat sequence that no longer matches the code structure.Verified accurate and left untouched: §10 OTel metric table, top-level Core invariants, §13, §14, §15, §16, §19, §20.
Housekeeping
plans/2026-05-24-fastjson2-migration.md— that migration shipped as70cb470; the plan file was scratch state.Test plan
./gradlew spotlessMarkdownCheck— greenmainconfirmed: only the two doc files + wrapper + the plan deletion