Conversation
…e, verdict guard Burst 3 of the autonomous correctness hunt — 4 low-severity bugs, each with a watched-to-fail regression test. Several are second-order refinements of the burst 1 fixes. - validate rejected a finding at t<0, but an imported recording whose creation_time predates the manifest t0 yields legitimately-negative session-relative utterance times; a faithfully-anchored finding then failed the whole transactional ingest. The lower bound is now derived from the earliest timeline entry (min(0, idx.start)), symmetric with the upper bound; a normal session still floors at 0. - appendLines could still persist a newline-less line on a full disk: os.File.Write gives no atomicity, so ENOSPC lands a truncated prefix. New appendRecords records the file length and Truncates back on any write error, so no partial line survives. Corrects the earlier comment's false atomicity claim. - ingesting an empty findings array silently truncated a prior good findings.jsonl (O_TRUNC write) — a model that finds nothing, or a truncated answer file, wiped real data. Ingest now refuses an empty answer instead of overwriting. - the overwrite guard counted only enum-valid verdicts, so a hand-edited findings.jsonl whose only verdicts carried a foreign value was clobbered on re-ingest. The guard now counts raw kind:"verdict" lines. Docs (analyze surface, schemas, CLI/session references) and DECISIONS.md updated in step. Gates green. Assisted-by: Claude:claude-fable-5
Burst 4 of the autonomous correctness hunt — 2 distinct low-severity bugs, both boundary conditions. - validate seeded idx.end from the zero value 0 and grew it only via end > idx.end, while idx.start was correctly seeded on the first entry. For a fully-negative timeline (an external recording predating manifest t0), idx.end stayed 0, so a finding anchored after the real (negative) session end was accepted. idx.end is now seeded on the first entry, symmetric with idx.start. This is the sibling of burst 3's lower-bound fix — the same function's other half. - merge silently produced a nonsense timeline (events ~55 years after the speech) when a hand-edited/exchanged manifest omitted t0_epoch_ms, because BuildEntries anchored interactions to t0=0. Merge now rejects a manifest missing t0_epoch_ms when interactions are present; transcript-only sessions (already session-relative) are unaffected. Both fixes make the code match its documented contract. Docs (merge surface, CLI reference) and DECISIONS.md updated in step. Gates green. Assisted-by: Claude:claude-fable-5
Fix validation upper bound and missing-t0 merge (burst 4)
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.
Why
PRs #17, #18 and #19 all report as merged, but only #17 reached
main.The three PRs formed a stack (
bughunt-4→bughunt-3→bughunt-2→main) and each merged into its parent branch rather than intomain. Because #18 merged seventeen seconds before #19, the cascade never propagated upward:main(8e5474e)bughunt-2(59e53bb)bughunt-3(89a3262)mainis therefore missinga8efef2(burst 3 — ingest/capture edge cases) and1a86362(burst 4 — validation upper bound, missing-t0 merge).What
Merges
bughunt-3, which contains all three fix commits, intomain.No new code — every commit here has already been reviewed and CI-gated under #17, #18, or #19.
After this lands
bughunt-2,bughunt-3andbughunt-4become safe to delete. Until then they hold the only refs for bursts 3 and 4.Assisted-by: Claude:claude-opus-4-8