Session Handoff [engineering]: Write Guard Line-Continuation Reads and Windows Self-Test Skip Merged, Promotion #3359 Stalled on GitHub Incident #3364
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
Next steps, in priority order
- Finish promotion Promote the Write Guard Line-Continuation and Escaped-Pair Reads, Windows Self-Test Skip, and Subprocess Failure Rule to Main #3359, which stalled on a GitHub incident. Its head must first read develop's tip, which was
075ec57aat this close. Then confirm CI is green on that head, get a Copilot round covering it (pr_review.py wait 3359 --request), and confirm zero unresolved threads. Ask the maintainer to merge and release throughmerge-and-release. The promotion changeshost-setup/agent-safety/, so the release report ends with the one-line kit install command. Read the PR body first: it lists Skip the Invalid-Byte Selftest Probe When Windows Git Cannot Add the Name #3350 and Read a Backslash-Newline by Its Quoting in the Write Guard #3357, but not the follow-up Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360. Done means main merged and released, on the maintainer's go-ahead. - Tighten the Backslash-Newline Narrowing's Wording and Over-Denials in the Write Guard #3358, the leftovers of Read a Backslash-Newline by Its Quoting in the Write Guard #3357. It has two README and docstring wording gaps, readings that drop backslash pairs (an over-denial only), and one residual over-denial. That over-denial is a Markdown body that names git or gh, holds quotes or backticks, and has a hard line break. It is the one guard item this round introduced, so it goes ahead of the long-standing lanes in step 3, under the same zero-unexplained-flip differential and revert proof.
- The guard's remaining allow gaps, one lane at a time, all in
gh-write-guard.py. Done means a merged PR into develop, a develop-versus-branch differential with every deny-to-allow flip explained, and a revert proof.- Exports, xargs, env and launcher residuals: Read Words xargs Appends to a gh Write in the Write Guard #3336, Read Every Export Form for Git Config and Wrapper Environment in the Write Guard #3339, Read Reassigned Exports, Rerun Exports, and Clustered xargs Options in the Write Guard #3340, Fail Closed on a Run-Time GIT_DIR Value in the Write Guard #3343, Close Env, Launcher, and Xargs Cluster Gaps in the Write Guard #3347, Read the Config-Change Scan's Remaining Run-Time, Eval, and Xargs Forms in the Write Guard #3307's two remaining items, and Read Commands an Outer Variable Adds to a Double-Quoted Wrapper Body in the Write Guard #3337 under the maintainer's ruling recorded on it.
- Shells, case and encoding: Decode a PowerShell -EncodedCommand Body in the Write Guard #3056, Match push.default Case-Sensitively in the Write Guard or Say It Is Folded #3061, Read Git's Environment Variable Names Without Case on Windows in the Write Guard #3086, Read cmd and PowerShell Run-Time Words as Run-Time Words in the Write Guard #3091, Close Four Hidden-Command Allow Gaps the Promotion's Third Review Found in the Write Guard #3088, Close the Write Guard's Remaining Push Detection Gaps Found Reviewing the #2936 Fix #2943's non-POSIX shell and stdin-script items, and the new Read a Subshell's Trailing Comment and a Tab-Stripped Heredoc as Bash Does in the Write Guard #3353 and Read Text Piped Into a Shell as Its Script in the Write Guard #3356.
- Commit option clusters and bypass routes: Read a Commit Cluster With an Attached Value as Taking No Next Word in the Write Guard #3068, Read Short-Option Clusters Through One Primitive in the Write Guard #3071, Deny the Remaining core.hooksPath and no-verify Bypass Routes in the Guard #2177's alias item, Read a Hook-Bypass Flag an Alias Expansion Carries in the Write Guard #3305, Read Persisted Config a Command Writes Before an Alias or Commit in the Write Guard #3303, Close the Write Guard's Remaining Push Detection Gaps Found Reviewing the #2936 Fix #2943's remaining items, and the new Read a trap Action String as a Command in the Write Guard #3352.
- Push-target and rule 6 residuals: Read a Matching Push Without Relying on Remote-Tracking Refs in the Write Guard #3315, Read a Drive-Letter Push Target as Local Only on Windows in the Write Guard #3317, Fail Closed on a Source-Only Push After an Upstream Change in the Same Command in the Write Guard #3322, Read Every Branch a Persisted Mirror Push Writes in the Write Guard #3326, and the new Read a cd After an Earlier Command for Rule 6 in the Write Guard #3351 and Read a Comment-Ending Backslash-Newline and an eval Body for Rule 6 in the Write Guard #3355.
- The guard's over-denials, after step 3: the list in Session Handoff [engineering]: Write Guard Launcher and Tokenizer Reads Released as 2.0.1130, Introduced Over-Denials Next #3349's step 4 (Narrow Three Write-Guard Reads That Deny More Broadly Than Git Pushes #2953 through Match the Subcommand Position in the Write Guard's Overflow Fail-Closed #3348), plus the rest of Narrow the Write Guard's Launcher Assignment and Nesting-Cap Over-Denials #3341 and Read Quoting Around a Backslash-Newline and Bare xargs Runs in the Write Guard #3344. Then Consolidate the Write Guard's Flag-Value Argv Walks #3285, Share One Command-Position Walker Across the Write Guard's Readers #3308, Move the Write Guard's Option-Prefix, Eval-Reading, and Cluster Sites Onto One Helper Each #3008, and the new Consolidate the Write Guard's Shell Context Scanners Into One Walker #3354 (one shell-context walker), all helper consolidation, last.
- Classify a Subprocess Failure by Its Command, Not Its Message Text #3363, a proposed
CODESTYLE.mdGeneral rule from this round's lesson. It touches no guard file, so it can run beside any guard lane.
External blockers
- GitHub incident "Errors loading Issues, Pull Requests, and search results", which affects Pull Requests and Actions, was still investigating at this close. It stalled every pull request head sync this round: Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360 for about 25 minutes, and Promote the Write Guard Line-Continuation and Escaped-Pair Reads, Windows Self-Test Skip, and Subprocess Failure Rule to Main #3359 for over 90 minutes without recovering. Nobody here can act on it. Check
https://www.githubstatus.com/api/v2/incidents/unresolved.jsonand the PR'sheadRefOidbefore resuming step 1. Steps 2 to 5 are safe to start meanwhile, but their PRs will stall the same way until it clears.
Internal dependencies
- Steps 2, 3 and 4 each edit
gh-write-guard.pyand claim all ofhost-setup/agent-safety/, so they run one lane at a time. - Step 4 waits for step 3. Narrowing a deny while allow gaps are open has repeatedly opened a new allow in the same reader.
- A guard lane merged into develop while Promote the Write Guard Line-Continuation and Escaped-Pair Reads, Windows Self-Test Skip, and Subprocess Failure Rule to Main #3359 is open moves the promotion head. That needs a new review round, and the release then carries that lane too.
State
- Promotion Promote the Write Guard Line-Continuation and Escaped-Pair Reads, Windows Self-Test Skip, and Subprocess Failure Rule to Main #3359 (develop -> main) is open, with its head stuck at
e0a6dfcf(13/13 green). Its one Copilot thread is replied to with the Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360 fix SHA and resolved. No release was dispatched this round. - Merged into develop: Skip the Invalid-Byte Selftest Probe When Windows Git Cannot Add the Name #3350, Read a Backslash-Newline by Its Quoting in the Write Guard #3357, Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360. Develop was at
075ec57a, main at43b1f49f. - Every lane worktree and branch was cleaned with
pr_review.py cleanup. The primary checkout is on develop and clean. - Other tracks' open handoffs are untouched: Session Handoff [windows]: #2578 Landed for #694, Closing Through Promotion #2580, #1171 Next #2581 (windows), Session Handoff [host-instructions]: Hardening Rule and Merge Guard Released as 2.0.867 and 2.0.868, #2499 Docstring Next #2514 (host-instructions), Session Handoff [default]: Four Follow-Ups Landed and Released as 2.0.826, Downstream Adoption Next #2361 (default), Session Handoff [python-contract]: Escaped and Folded python-directories Values Refused, Released as 2.0.738 #2014 (python-contract).
The parked decision queue
There are 0 open decision issues at this close. The maintainer chose this round to write the handoff while #3359 waits on GitHub, rather than keep waiting or close and reopen it.
What the last round did
- Read a Backslash-Newline by Its Quoting in the Write Guard #3357 (Opus lane). The write guard reads a backslash-newline inside single quotes or quoted heredoc data as text, and a continuation right after a shell operator as no word split. Refs Read Quoting Around a Backslash-Newline and Bare xargs Runs in the Write Guard #3344.
- Differential over 10,560 distinct commands: 78 deny-to-allow, each classified as an intended form, a direct sibling, or a command whose plain form develop already allows. 2 allow-to-deny.
- 6 local passes, the cap. A safety classifier stopped passes 5 and 6 before their probes, so the lane ran 294 constructed probes itself.
- Skip the Invalid-Byte Selftest Probe When Windows Git Cannot Add the Name #3350 (Sonnet lane) closes Audit Self-Test Aborts on Windows at the Invalid-Byte Filename Probe #3338 on the promotion. The audit self-test skips its invalid-byte probe on Windows when git cannot add the file. It also removed the Windows skip in
tests/test_git_env.py. - Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360, a promotion finding (Copilot P1): Skip the Invalid-Byte Selftest Probe When Windows Git Cannot Add the Name #3350's skip caught every
git addfailure. Its fix adds a control file first, fatal everywhere, then adds the probe file alone. The Windows job passed on that head. - Filed: Read a cd After an Earlier Command for Rule 6 in the Write Guard #3351, Read a trap Action String as a Command in the Write Guard #3352, Read a Subshell's Trailing Comment and a Tab-Stripped Heredoc as Bash Does in the Write Guard #3353, Read a Comment-Ending Backslash-Newline and an eval Body for Rule 6 in the Write Guard #3355, Read Text Piped Into a Shell as Its Script in the Write Guard #3356 (pre-existing allow gaps), Consolidate the Write Guard's Shell Context Scanners Into One Walker #3354 (walker consolidation), Tighten the Backslash-Newline Narrowing's Wording and Over-Denials in the Write Guard #3358 (introduced leftovers), Classify a Subprocess Failure by Its Command, Not Its Message Text #3363 (the CODESTYLE rule). A comment on Narrow the Write Guard's Launcher Assignment and Nesting-Cap Over-Denials #3341 records that its
command -vitem no longer reproduces.
What not to repeat
- Telling a skip apart from a real failure by matching stderr text. The first Skip the Windows Self-Test Probe Only on Git's Invalid-Path Error #3360 head matched "invalid path", and Git for Windows printed something else, so the skip never fired and the Windows job failed. Split the command so that only the expected failure has a command of its own (Classify a Subprocess Failure by Its Command, Not Its Message Text #3363).
- Waiting out a stalled PR head sync in a lane. Two lanes each spent about 20 minutes in bounded waits on
headRefOidduring the incident. When the head lags the pushed branch, check githubstatus first and wait from the orchestrator seat. A push re-attaches the head only once the incident eases. - Briefing a guard lane with "zero deny-to-allow flips". On a corpus that includes the lane's own probes this is unreachable, since every intended allow is a flip. Brief instead: every flip explained and classified, and zero on develop's own self-test corpus.
New learnings
- The stderr-text lesson is filed as a proposed rule in Classify a Subprocess Failure by Its Command, Not Its Message Text #3363.
- The PR head-sync stall under a GitHub incident is recorded in the maintainer's machine memory, being environment state rather than a fleet rule.
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 Oct 22, 2026
Continued in #3374, round 36 on track
engineering.