Document the remaining work as a handover - #24
Merged
Conversation
0.3.0 shipped four of the report's eight items plus two defects that were not on it. What is left is spread across a merged report, several PR threads, and a set of findings made while implementing — none of which survives a fresh context. docs/OPEN-WORK.md collects it with the evidence attached, so each item can be picked up without re-deriving why it matters: the probe output for the multi-tag version defect, the measured 43-vs-51 step count for Catalyst's live corruption, the mutation survivors that are worth killing and the two classes that are not. It records ordering rather than just a list, because some of it is sequenced: the fault-injection harness belongs before D2 since D2 is a partial-write problem and would be its first real customer, and the multi-tag version goes last because it is the only item carrying a log-migration cost. Two items changed rank against the report and the doc says why. A4 capabilities moves up: it was ranked as polish on the grounds that adapters did not meaningfully differ, and 0.3.0 made them differ — the same conditional append is fenced across processes on FoundationDB and within one writer on the file adapter, a difference that currently exists only in prose. D2 moves down: the directory lock means a second writer now fails loudly, so D2 is needed to make multi-writer usable rather than to stop it being dangerous. Also records the three process hazards that cost time: a stacked PR merged after its base leaves its content behind while reporting success, review comments arrive after replies, and a passing test is not evidence the test works — two here passed against the defect they were written for. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01May7agoupeXATCaWSDttAW
Greptile SummaryDocuments the remaining post-0.3.0 work and clarifies failure semantics.
Confidence Score: 5/5The documentation-only PR appears safe to merge. No blocking failure remains. Important Files Changed
Reviews (2): Last reviewed commit: "Correct the trim-purge guidance: name th..." | Re-trigger Greptile |
…lete it Review finding, and the advice was wrong twice over. It told a reader the trim index purge is redundant and worth deleting, without naming the adapter it was derived from. That claim came from FileBasedPersistenceAdapter, whose reads clamp to max(fromSeqnum, trimSeqnum). InMemoryPersistenceAdapter has no trim point at all — no trimSeqnum field, no read-time clamp — so there the removal *is* the enforcement, and following the guidance would make reads return trimmed entries. Deleting trim's implementation on the advice of a document about why a mutant survives is a bad way to lose data. The second error is that "delete it" is wrong even where it was derived. The purge is unobservable through reads on the file adapter, which is why no read-based test kills the mutant — but it bounds the in-memory index, and unbounded index growth is a listed cross-cutting concern. The mutant survives because it guards an invariant the tests do not assert, memory, not because the code does nothing. Those are different findings and only one of them means "delete". Both documents are corrected, since FAILURE_SEMANTICS.md carried the same sentence and is already on main. It also now records that InMemory's own surviving mutant on trim is a different one, a negated conditional, so nobody merges the two again. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01May7agoupeXATCaWSDttAW
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.
docs/OPEN-WORK.md— everything still open after 0.3.0, written to be picked up cold.0.3.0 shipped four of the report's eight items plus two defects that weren't on it. What's left is currently spread across a merged report, a dozen PR threads, and findings made while implementing — none of which survives a fresh context.
What it contains
Each item carries the evidence, so nobody has to re-derive why it matters:
next QUEUE-only append got localId=4 (expected 1))43 vs 51step count for Catalyst's live corruptionFileChannel::force, which no in-process test can distinguish, andtrim's index purge, which survives because the code is redundant rather than because the test is weakIt records ordering, not just a list, because parts are sequenced: the fault-injection harness belongs before D2 (D2 is a partial-write problem and would be its first customer), and the multi-tag version goes last as the only item carrying a log-migration cost.
Two items changed rank against the report, with reasons
A4 (capabilities) moves up from 7th. It was ranked as polish on the grounds that adapters didn't meaningfully differ — and 0.3.0 made them differ. The same
append(request, expectedVersion)is fenced across processes on FoundationDB and fenced within one writer on the file adapter. That distinction exists only in prose right now, which is precisely how D4 happened.D2 moves down. The directory lock from #7 means a second writer now fails loudly, so D2 is needed to make multi-writer usable, not to stop it being dangerous.
Also recorded
§0 is the release blocker: the
0.3.0tag isn't pushed, with the exact commands and the reason it couldn't be done from the session that cut the release. Plus a coordinate mismatch worth settling first —pom.xmlsayscom.cajunsystems, the README sayscom.github.CajunSystems, and Catalyst's existing0.2.0dependency therefore isn't resolving from JitPack.Three process hazards that cost real time here:
mainleaves its content behind while GitHub reports it merged (this happened to thestreamVersionrename and needed Land the streamVersion rename on main (#9 was merged into #8's branch, not main) #12 to recover)Doc only; no code changes. Linked from the README's Further reading.
Generated by Claude Code