docs: record founder approval of PR #7; promote arm (f) — WRITE_LOST - #8
Merged
Merged
Conversation
PR #7 merged as e7e89dc on explicit founder approval, quoted in the entry. That closes the invariant 9 requirement: the change can convert phantom missing_current_fact FAILs into passes, so it needed sign-off before merge. The retry-vs-single-shot deviation was ratified. Promotes the first live namespace-arm result, reported not observed here: arm (f) came back WRITE_LOST — a swallowed write never became retrievable across 25 reads over 120s. That localises the mechanism to delete_all. Per-key delete followed by an immediate write landed at 0s in arms (a), (b) and (c); the namespace-wide delete_all that reset() performs loses the write for at least two minutes. Content dedup and same-scope reaping stay ruled out. The per-key substitution in the earlier arms is confirmed as why they all passed. Flags a sizing risk rather than leaving it to be discovered on a metered run: the shipped sentinel loop is bounded at 30s, while (f) shows the condition persisting for at least 120s under single-write polling. Re-issuing may converge far sooner — that is the difference the retry loop exploits and (f) cannot measure — but it is unmeasured, so _CONVERGE_TIMEOUT stays at 30s until the empty_to_writable_s series sizes it from data. Records what is still missing for the promotion rule: (g)'s outcome and the results filename for the (f) run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqxND2pAdrMMubjBnp3VLR
YinkaMetrics
marked this pull request as ready for review
August 4, 2026 11:29
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
HANDOFF.mdonly. Internal tier — self-merges.e7e89dc), closing the invariant 9 requirement.WRITE_LOST.Arm (f) failed — the mechanism is real and it is
delete_allReported, not observed here: a swallowed write never became retrievable across 25 reads over 120s — the diagnostic's full
CONFIRM_TIMEOUTwindow. Acknowledged, then gone for two minutes.Read against the arms already run:
delete_allThe mechanism is specific to
delete_all— the deletereset()performs, and the one no arm tested until now. Content-level dedup stays ruled out by (b); same-scope reaping by (a)/(c). The per-key substitution in the earlier arms is confirmed as the reason they all passed.It also validates the retry design empirically: polling a swallowed write for 120s produced nothing, which is the measured form of the argument made on PR #7 before this result was known here. Single-shot would have converted this into an aborted run.
The shipped sentinel loop is bounded by
_CONVERGE_TIMEOUT= 30s, 5s per attempt. Arm (f) shows the condition persisting at least 120s under single-write polling.If the reaping window really exceeds 30s,
reset()will exhaust its budget and raise — the safe outcome, and far better than silently losing facts, but it would abort runs at every reset that deletes.Re-issuing may converge much sooner, since each new write is a fresh attempt rather than a wait on a dead one — that's exactly the difference the retry loop exploits, and (f) cannot measure it because it never re-issues. But it is unmeasured, so I left
_CONVERGE_TIMEOUTat 30s rather than raising it on the strength of a number measured under a different procedure. Theempty_to_writable_sseries now emitted on every deleting reset is what should size it.Still open
(g) has not been reported. Without it, transient vs persistent stays open, and the pre-stated readings diverge sharply:
delete_allunusable as a reset primitive and mean the sentinel loop cannot converge either.Missing for the promotion rule: no results filename was supplied for the (f) run, so this entry cites none — contrary to the rule added 2026-08-03. Also unknown: whether (a)–(e) re-ran in the same execution, and the SEARCH spend.
Verification
pytest -q: 71 passed, 4 skipped.External launch remains HELD.
Generated by Claude Code