Stop a process on the machine from failing a repository command (#750) - #757
Conversation
Six cases in `test/init.test.ts` failed for every developer with an editor session open and passed on CI runners. The cause was one warning: `live MCP runtime identity` reporting two CommitLore servers answering MCP, from installs `<data-root>` keeps by design. `init`'s final step is stricter than `doctor` on purpose -- any check needing attention makes the step incomplete, because `init` is the command that was supposed to take care of everything at once. That reasoning does not reach a finding about the machine. A server another session left running, from an install that may since have been deleted, is not something a checkout can act on. The check already argued this for its own status: it is `warn` rather than `fail` because "what this observes is the machine, not this repository", and because making it fail "made this suite's result depend on what happened to be running while it ran". The same sentence applies one level further, and `check()` already has the parameter for it -- the two existing overrides clear attention for the no-remote refspec warn and the ENOENT inject fail on exactly this test, that neither is something the user can act on here (#192, #221). So all three `warn` rows here clear it. They stay in the report, which is where a machine-scoped observation belongs; they stop deciding whether a repository-scoped command completed. The test pins the property rather than the symptom, by driving the check with an injected scan. Reproducing the symptom needs a stale server actually running, which is the dependency being removed -- a test that needed one would have the defect it is testing for. Limit: this is one check's classification, not a scope field -- another machine-scoped check added later will default to claiming attention again, and nothing here would notice Blast: local Undo: easy Certainty: firm Record-Id: r-machinescope Provenance: authored Verified: removing the override fails three of the four new cases; with it, 108 tests across init, doctor and the new file pass on a machine that has two stale MCP runtimes -- the same machine where those six init cases failed against origin/main CommitLore-Version: 2.0.0
CommitLore — record lintTrailers: clean — 2 commits in Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
|
One place this is broader than the precedent it cites, recorded rather than left to be noticed. The two existing overrides each turn attention off for one branch of their check: So the shape is the same and the reach is not, and it is worth saying why that is not a wider principle arriving by the back door. This check has no And the line is drawn at the observer, not at the subject. The default is untouched. The residual is the one named in the PR's Limit: a machine-scoped check added later defaults to claiming attention again, and nothing here would notice. That is a scope field's job, and this is not one. |
Closes #750.
Six cases in
test/init.test.tsfailed for every developer with an editor session open, and passed on CI runners. One warning caused it:<data-root>keeps old versions by design, so that is the ordinary state of a developer machine rather than a misconfiguration.Why it reached the exit code
init's final step is stricter thandoctoron purpose — any check needing attention makes the step incomplete, becauseinitis the command that was supposed to take care of everything at once.That reasoning does not reach a finding about the machine. The check already made this argument for its own status, and the comment is still there:
The same sentence applies one level further, and
check()already has the parameter. The two existing overrides clear attention for the no-remote refspec warn and the ENOENT inject fail on exactly this test — "neither is something the user can act on here" (#192, #221).All three
warnrows here now clear it. They stay in the report, which is where a machine-scoped observation belongs; they stop deciding whether a repository-scoped command completed.The test pins the property, not the symptom
Reproducing the symptom needs a stale server actually running — which is the dependency being removed. A test that needed one would carry the defect it tests for. So the check is driven with an injected scan:
warnwarnwarnokNegative control: removing the override fails three of the four.
Why this mattered beyond a red suite
Twice in one session I attributed this failure to a change of my own before checking
origin/main, where it failed identically. A file that is usually red stops carrying information, and that is how a real regression gets waved through.Limit
This is one check's classification, not a scope field. Another machine-scoped check added later will default to claiming attention again, and nothing here would notice.