You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
The rotation guard's narration reading stops at the bookmark's table, so growth below it is invisible #2746
scripts/check-memory-rotation.py reads a bookmark's per-cycle narration in narration_blocks(). Its loop abandons the rest of the file at the first markdown table row:
forlineintext.splitlines():
if_is_table_line(line):
break# the table is what the file exists for
The comment's premise is that below the table the file holds rows and no prose. Nothing enforces that, so a cycle that appends its note after the table instead of replacing the one before it moves the growth into the region the reader has already left — and the guard answers 0 faults.
358 lines, of which 29 runs holding 39,411 characters sat below the table's last row. 26 of those runs open on a cycle id in a code span — exactly the narration shape the reading matches.
39 distinct cycle ids appear below the table.
The guard answered, and exited 0:
structure: 0 cycle section(s) and 1 narration block(s) above the table - the file keeps at most one of each, replaced in place
This is the second time this file grew past a shape its guard could not see. The reading exists because of the first: 43 blocks over 729 lines and 94,482 characters (measured 2026-11-05) while the structure reading answered 0 cycle section(s). The remedy then put the boundary at the table instead of removing it, so the growth resumed on the far side of that line.
Expected
A table row ends a block, not the reading. A cycle's note after the table is a second narration block, and a second block is the fault the file's own rule forbids — "Update in place every cycle — never append a second entry".
The bookmark in this tree has been compacted by moving those 29 runs verbatim into cycle-archive-20260913-state.md, the file's designated append-only home; it now reads 115 lines with one narration block.
What the fix must satisfy
A note below the table is counted: one note above plus one below answers 2 blocks and exits 1.
Prose after the table that no cycle id opens stays out of the count. The bookmark states its own rules there, and a reader that counted every paragraph would fault the contract it was asked to read.
The verdict sentence stops claiming the blocks are "above the table", which is false for half the cases it would then cover.
The reading is armed in both directions: reverting the boundary to break must redden the new test, and dropping the cycle-id anchor must redden it too — otherwise the test would be measuring the file rather than the boundary.
Activity
argszero commentedon Nov 7, 2026
Handled by #2747