Repository navigation
Session Handoff [default]: Three Units Driven to main and Released as 2.0.623, 2.0.624 and 2.0.625 #1591
Copy link
Copy link
Closed
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Description
What this round did
Three units, each driven feature to develop to main and released, in one session at the maintainer's direction. He ended it for system maintenance, so the stop is a planned pause rather than a blocker.
- prose_lint.py Decodes Git Output With the Locale Encoding, So a Windows Run Can Crash on a UTF-8 Diff #1538,
prose_lint.pyand the rest of the tree decoding subprocess output with the locale encoding. PR Name the Encoding on Every Text-Mode Subprocess Call #1574 merged as09a82e6, promotion Promote develop to main: Name the Encoding on Every Text-Mode Subprocess Call #1581 as32a0783, released 2.0.623. Every text-modesubprocesscall in the repository now pinsencoding="utf-8", and a review pass found a false clean in the production path while fixing it: git quotes a path holding any byte at or above 0x80, and the+++header was read as a literal path, so an ordinary non-ASCII filename left scope. - pr_review.py's scope probe reads another repository when GIT_DIR is inherited #1561 and wait's Copilot review request bypasses the in-process owner check #1562, the write boundary in
pr_review.py. PR Keep the Scope Probe Out of an Inherited Environment, and Route wait Through the Owner Check #1583 merged as7e39cb8, promotion Promote develop to main: Keep the Scope Probe Out of an Inherited Environment #1584 as262ce31, released 2.0.624.origin_ownernow strips the four git discovery variables and everyGIT_CONFIG*name from the probe's environment, andwaitrefuses a cross-owner target outright with exit 64, so all three write paths state one rule. - prose_lint.py Reads the Diff Prefix From Host Config, So Four Ordinary Settings Empty the Scope #1575, prose_lint.py Keeps the Tab Git Appends to a Header Whose Path Holds a Space, So That File Leaves Scope #1576 and prose_lint.py Reads an Added Content Line Beginning ++ as a Diff Header, So the Rest of That File Leaves Scope #1585, the prose gate losing a file from diff scope. PR Pin What the Prose Gate's Diff Parse Depends On, and Stop Losing a File From Scope #1588 merged as
3d13223, promotion Promote develop to main: Pin What the Prose Gate's Diff Parse Depends On #1590 as4dedf84, released 2.0.625. Six routes of one class closed: five host settings pinned on the invocation, a terminator tab truncated, the diff decoded from bytes rather than read in text mode, a header honored only after adiff --gitline, and an undiffable path named from--numstat -zrather than from git's prose.
Next steps, in priority order
- prose_lint.py Numbers Lines From Filtered Content While Reading the File on Disk, So a clean Filter Hides a Violation #1587, a
cleanfilter numbers lines from filtered content while the gate reads the file on disk. Nogit diffflag pins it, so the issue states the two candidate directions and neither is chosen. It is the most dangerous of the three open routes, because coverage still reads full while the wrong lines are linted. - prose_lint.py Adds Nothing to Scope for a Rename, So Prose Moved Out of a Generated Tree Is Never Read #1586, a pure rename adds nothing to scope, so prose moved out of a generated tree into a checked path is read by no run at all. The issue leaves open whether a rename should be read whole or only where it also changed.
- in_scope's no-owner refusal gives one remedy for several unrelated probe failures #1582,
in_scope's no-owner refusal gives one remedy for several unrelated probe failures, which matters more now thatwaitrefuses on the same terms and an absent git ends a read-only poll with advice that does not fit. - The backlog beyond these reads 236 open, counted with an explicit
--limit.
Blockers and dependencies
- None external. prose_lint.py Adds Nothing to Scope for a Rename, So Prose Moved Out of a Generated Tree Is Never Read #1586 and prose_lint.py Numbers Lines From Filtered Content While Reading the File on Disk, So a clean Filter Hides a Violation #1587 both touch
changed_linesin.github/actions/prose-gate/prose_lint.py, so they collide on one function and want one branch between them or a deliberate order, not two parallel lanes. chore/retire-the-scope-floor-clusteris still on the remote, one of the two stale branches each needing the maintainer's own decision. Untouched again this round.
State a resume re-reads
changed_linesandundiffable_pathsin.github/actions/prose-gate/prose_lint.py, before acting on prose_lint.py Adds Nothing to Scope for a Rename, So Prose Moved Out of a Generated Tree Is Never Read #1586 or prose_lint.py Numbers Lines From Filtered Content While Reading the File on Disk, So a clean Filter Hides a Violation #1587. That function changed in six commits this round and a fix written against the previous shape will not apply.- The open issue count, with an explicit
--limit, sincegh issue listcaps at 30 rows without one and that cap has been reported as the backlog size before.
Parked decisions
None outstanding. Six decisions were put to the maintainer this round and all six were answered in the same turn: how far to drive each of the three units, whether to close the config-injection vector inside PR #1583 or file it, whether to revert the --local probe after it inverted the boundary, and whether to spend another edit round on the prose gate after its budget was spent. The --text question was answered by dropping the flag entirely rather than bounding its cost.
What not to repeat
- Do not let the prose gate be the thing that finds a wrapped comment. Four edit-and-rerun cycles went on
comment-wrapthis round, every one on a comment written by this seat rather than by a subagent. The rule makes line length irrelevant, so break a comment line only at a sentence boundary and assert that before writing the file. - Do not use a background Bash command to wait for a review. Three were killed for "low memory" on a host with hundreds of gigabytes free.
Monitorsurvived every time. A memory already recorded this and it was not applied until after the third kill. - Do not assume a fix closes the route it was written for. Three times this round a fix opened a new instance of the class it closed: the
--localprobe inverted the boundary on a multi-url origin,--textwidened a header forgery by streaming binary bodies through the parse, andBINARY_NOTICEdropped a file whose name contained the substring it split on. None was caught by tests or gates.
What was learned
- Attack the fix's own mechanism. Every one of the three self-inflicted defects above was found by asking how the new line could fail in the same way as the old one, and none by any other means. For a change of this shape that question is the highest-yield review a round can run.
- A green gate set says nothing about whether the claims are true. Four consecutive review rounds on PR Pin What the Prose Gate's Diff Parse Depends On, and Stop Losing a File From Scope #1588 raised findings about claims rather than behavior: a mock parameter naming a capability it lacked, a skip guard naming a platform it did not exclude, a docstring asserting a limit nothing enforced, a comment justifying control flow that was not there. The code was correct for several rounds before the prose was.
- Measure the record shape rather than trusting the documentation. A rename in
git diff --numstat -zcarries no path in its own record, an empty field where one sits, with the old and new paths following as two further fields. A parser written from the description alone assigns the wrong one.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
handoffA link in the session handoff chain, one open issue per trackA link in the session handoff chain, one open issue per track
Activity
ptr727 commentedon Sep 14, 2026
Two stale remote branches deleted
Both were the maintainer's own unmerged commits from early August, and he authorized deleting both in the session that filed this handoff. Their object ids are recorded here rather than only in the deleted refs, so either commit can still be fetched by id while the server retains it.
chore/retire-the-scope-floor-cluster8d3be55400abd028666d5e4064334125120e24daTODO.mdalone, 4 insertions and 19 deletionsruleset-bypass-hands-off5c22b615d579ba4ca62df0ebdba87ac331e4b4b4registry/repos.json,repo-config/configure.sh,repo-config/develop.json,repo-config/main.json,repo-config/operational/develop.json,reports/Blog/audit.md,reports/divergences.mdThe remote now carries
mainanddevelopand nothing else, which closes the branch-cleanup thread that has been carried across several rounds.ptr727 commentedon Sep 15, 2026
Continued in #1643, round 11 on track
default.