Allocate the ticket T-1124 was told to file, and give it the measurements - #325
Merged
Conversation
…ents
T-1124 set out to verify a containment property on Windows and found the hook
broken instead: the recorded install root is written by node as a win32 path, the
stub reads it under Git for Windows' sh where `pwd -P` answers in POSIX form, and
the comparison therefore fails for every value including the installer's own
bundle. Control falls through to a walk that `${dir%/*}` cannot terminate once no
`/` remains, and a real commit does not return.
Its stop condition says to record that as its own issue and stop, which is #321.
This allocates the ticket that #321 needs, because none of the three files
involved belongs to T-1124: it owns a CI job and a unit test, not the hook, the
recorder, or doctor's mirror.
Six acceptance conditions rather than "fix the hang". The hang and the dead
comparison are one causal chain, so a change that ends the hang without
reconciling the path forms leaves containment unenforced -- and the two obvious
shortcuts are exactly the ones that must not be taken: loosening the match to make
the baseline pass trades #71's property for a working hook, and normalising one
side only moves the mismatch. Condition 5 exists because doctor's mirror uses
node:path, which is path.win32 on Windows and gets the backslashed pair right, so
it reports no problem in precisely the state where the hook is dead; a stub-only
fix leaves the check that should have warned still reporting healthy.
Condition 6 is the one this ticket would have shipped without. A wedged repository
cannot commit at all, so "new installs work" is not a fix for the people already
affected. Whether installing the corrected version is enough, or whether
`commitlore hooks install` has to be re-run, is a question with an executed answer
and it belongs in the release note.
P0, and sequenced ahead of the remaining documentation work. T-1124 is marked
blocked on it; #320 stays draft and red as the platform gate this has to clear.
Record-Id: r-winfix1127
Limit: the fix has to reconcile the writer in hooks.ts with the reader in the stub; normalising either side alone relocates the mismatch rather than removing it
Limit: doctor's mirror is path.win32 and the stub is MSYS sh, so a stub-only fix leaves the mirror green while the hook is dead
Ruled-out: Amending T-1124 to own the three source files | its stop condition exists for this fork, and voiding it to let a measurement ticket absorb a platform fix teaches that stop conditions are optional when the failure is interesting
Ruled-out: Merging #320's measurement step alone to keep CI green | it preserves the observation and discards the executable definition of done, and the hang would remain
Ruled-out: Marking the containment assertions skipped until the fix lands | a skip looks like coverage and encodes surrender; the honest place for a red assertion is a draft pull request, not the mainline
Ruled-out: Treating "new installs work" as the fix | a wedged repository cannot commit, so the recovery path is the part that matters to anyone already affected
Certainty: firm
Blast: local
Undo: easy
Verified: every measurement quoted in the ticket is from a windows-latest runner and reproduced across two runs -- the recorded triple, the containment case not matching, both guards passing, commitlore not resolvable by bare name, the commit killed at a 90s bound with an orphan sh surviving into cleanup, and a probe hook reporting $PWD as C:/... while pwd -P answers /c/... in the same invocation
Unverified: everything the six conditions ask for; no fix is written here, and this commit allocates the ticket rather than executing it
This was referenced Jul 31, 2026
CommitLore — record lintTrailers: clean — 1 commit in Active constraints for the paths this PR touchesLimits (4)
Ruled out (31)
Warnings (3)
Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
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.
Allocates T-1127 for #321. Ticket-doc change only — no source is touched here.
Why a new ticket rather than widening T-1124
T-1124 (#283) set out to verify #71's install-root containment on Windows. The measurement found the hook broken, not merely unverified, and its stop condition is explicit:
None of the three files that need to change belongs to T-1124 — it owns a CI job and a unit test, not the hook, the recorder, or
doctor's mirror. Amending its Owns after the fact would void the stop condition to let a measurement ticket absorb a platform fix.The ownership map row and the order note are updated in the same commit, and T-1124 is marked blocked on this.
The defect, from the runner
Both guards on the containment line pass. Only the comparison fails — for every value, the installer's own bundle included — so the check neither contains nor permits, and that is what lets control reach a walk
${dir%/*}cannot terminate once no/remains.Severity
P0 availability. A Windows user who runs
commitlore initcannot commit again in that repository. The hook does not refuse; it does not return. Sequenced ahead of the remaining documentation work.Six acceptance conditions, not "fix the hang"
The hang and the dead comparison are one causal chain, and the two obvious shortcuts are the ones that must not be taken.
hooks.tsand the reader in the stub agree on the form. Normalising one side only relocates the mismatch.doctorand the hook agree on one state.isInsidePackageusesnode:path—path.win32on Windows — so it handles the backslashed pair correctly and reports no problem in exactly the state where the hook is dead. A stub-only fix leaves the check that should have warned still reporting healthy.commitlore hooks installmust be re-run, needs an executed answer and belongs in the release note.The RED already exists
PR #320 is draft and red on
windows-latest: its baseline step fails and the two attack steps behind it never execute. It stays that way as the platform gate this fix must clear — not merged green, not skipped, not madecontinue-on-error. T-1127 adds POSIX-level coverage for conditions 1, 2 and 5 that must fail before the fix.Related: #321 (defect), #283 (blocked on this), #320 (the gate).