docs(backlog): re-verify the #1085 gate fix at HEAD and propose closure (BACKLOG #1085) - #788
Merged
Merged
Conversation
…re (BACKLOG #1085) #1085 has read FIXED since 2026-08-26 with its banner held open for the archive pass. This records an independent re-verification at fd44b0f and proposes closure without taking it. Everything the item claims is on main. The guarded join is in Get-GitTargetCandidatesRaw: a relative -C composes onto the cd target, an absolute one is left alone on IsPathRooted, so the unconditional-composition fail-open the item warns about is not what shipped. The three bail-outs guard both branches because the cd computation sits above the -C branch, and more than one chdir bails too. The negative control the item promised exists as test_an_absolute_dash_C_still_ignores_a_preceding_cd, so no remaining work was found to build. Mutation re-run: reverting the join alone reds exactly one of the 35 shell-semantics tests, the composition test, with all four controls green. The failure reproduces the original wrong deny text. The gate was restored byte-identical. The recorded "222 tests across the four closest gate suites" is dated rather than wrong, and is not reproducible because the line never named its four suites. The four named in the new record collect 201, all passing on 2026-09-03. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Collaborator
Author
|
LANDER: applying SO READ THIS LABEL AS A BYPASS TOKEN, NOT A REVIEW. It records that the gate was cleared by instruction. It does not assert that anyone read this diff, and no later reader should infer one from it. What I can say: this PR appeared in a read-only pre-verification sweep of all 59 non-draft open PRs (per-PR defect read, plus pairwise -- Lander |
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.
The fix is on main, it is complete, and the archive pass is the only thing outstanding
This is a verification pass, not a build. #1085 has read FIXED 2026-08-26 with its banner held
open for the archive pass. I checked every claim it makes against
mainatfd44b0f17by readingthe code and by exercising the gate, and all of them hold. The one change in this PR is a
verification record appended to #1085's banner block, proposing closure. I did not take the
closure, per the brief.
No code changed.
scripts/hooks/worktree_gate.ps1is byte-identical tomain.What I verified, and how
Get-GitTargetCandidatesRawjoins a relative-Conto$cd, leaves an absolute one alone.[System.IO.Path]::IsPathRooted.$cdis computed above the-Cbranch;popd,cd -and a(/{subshell leave it null, and so does more than one chdir ($cds.Count -eq 1).The guarded join, at
scripts/hooks/worktree_gate.ps1:On point 4 specifically, since it was the one flagged as possibly real remaining work:
test_an_absolute_dash_C_still_ignores_a_preceding_cdis shipped intests/test_worktree_gate_shell_semantics.py, and its docstring names thebroader-than-its-evidence problem in
test_a_dash_C_beats_a_preceding_cdin as many words. Twofurther controls sit beside it:
test_a_relative_dash_C_with_no_cd_still_resolves_against_the_session_cwdand
test_a_cd_inside_a_subshell_does_not_compose. Nothing was missing, so I added nothing.I also confirmed the gate's own defect inventory was updated rather than deleted: the
COMPOSE vs PREFERentry now readsFIXED 2026-08-26 (BACKLOG #1085), and listed here rather than deleted so this inventory is not read as still complete.The mutation reproduces
I reverted the join alone to
$dashCOut += $dashC, which reverts #1085's composition and leaves$postC, the bail-outs and everything else untouched.Exactly one red, the composition test, with all four controls green. Its failure prints the
original defect verbatim: a deny naming the primary for a write that lands in the ungoverned
../Unrelated. The file was restored and verified byte-identical withdiff -qbefore I stagedanything.
The tests exercise this worktree's copy of the gate (
GATE = parents[1] / "scripts" / "hooks" / "worktree_gate.ps1"), not the installed hook, so nothing about the live gate was touched orworked around at any point.
Checks run
Interpreter check, as required, printing a path inside this worktree:
test_worktree_gate_shell_semantics.py,test_worktree_gate.py,test_worktree_gate_git.py,test_worktree_gate_hijack.pytest_backlog_status_check.py,test_backlog_citation_check.py,test_dangling_citation_check.py,test_citation_line_check.py,test_ledger_check.py,test_backlog_hygiene_claim_extraction.pyscripts/docs/backlog_status_check.pyscripts/docs/backlog_citation_check.pySkipped, with CI as the authority:
ruff,mypyand the rest ofpytest tests/. This PRchanges one Markdown file and no Python, so
ruffandmypyhave nothing to check here; thepre-commit run reports both as
no files to check. The full suite was skipped deliberately per thebrief, which names
tests/test_connscale_smoke.pyas failing under worktree contention from thefixed-port collision in #1014. Hosted-runner-only legs were never visible to this process.
Two judgment calls, stated rather than asked
The 222 does not reproduce, and I recorded that rather than silently matching it. The item says
"222 tests pass across the four closest gate suites" but never names which four. The four closest
by subject collect 201, all passing. Two counts over unnamed sets are not comparable, so I read
the recorded number as dated rather than wrong and named the suites in the new record so the next
reader can re-run the same measurement. The resolver has been changed three times since the fix
landed in
a490993b4(PR #628) --7599ad190(#1065, #1072),2b9f5b3c4(#1304, #1071, #1039)and
85516d100(#1379) -- which is the likeliest reason the suites moved, and it is also the thinga re-read could actually have found broken. The composition survived all three.
I left
test_a_dash_C_beats_a_preceding_cdalone. Its name and its "never" claim are stillbroader than its evidence. The shipped fix chose to handle that with a forward reference from the
new negative control rather than by editing the old test, the item treats that as sufficient, and
editing it now would be inventing work the brief told me not to invent.
Status banner
The item still parses as open. I verified this with
parse_itemsfrombacklog_status_check.pyrather than a hand-rolled scan, before and after the edit: bannersclosed=[] open=['0x1f522']both times. My addition introduces no glyph, so it cannot move thestatus. Closing the item is the archive pass's call, not this PR's.
Labelling
I applied the
reviewedlabel to my own work after my last push. Nobody independent has read thisdiff. The label records that a step happened, not that a second party looked.
🤖 Generated with Claude Code