Tell operators unattended capture still needs an initiator - #530
Merged
Conversation
MongLong0214
force-pushed
the
auto-truthful
branch
from
August 11, 2026 06:23
d54cedb to
c87498d
Compare
The unattended policy can authorise a host-driven capture, but it cannot produce the transcript that prepare hashes. The installed Git hooks apply and finalise only a staged transaction, so an ordinary Git commit never starts the pipeline. Reporting the policy as fully enabled concealed that boundary and left the operator no diagnostic when no record appeared. init and auto status now state the prerequisite, and doctor reports the enabled-but-uninitiated state instead of treating policy, lifecycle, or the pre-edit hook as evidence of an initiator. The capture documentation and host skill state the same boundary. Limit: a host integration may still be installed or selected outside the repository, so operators must ensure it supplies the session transcript before committing; the core cannot observe or enforce that host-side action Ruled-out: initiating capture from a Git hook with the staged diff | a diff cannot supply the host transcript or establish that a decision was made Warn: unattended policy consent only permits a capture after a host starts it; an ordinary Git commit remains intentionally recordless when no host call occurs Blast: module Undo: easy Certainty: firm Verified: npm ci, typecheck, deterministic double build, focused init auto capture doctor and hook suites, and a built-artifact reproduction where ordinary Git commit leaves no transaction while the new status and doctor warning name the missing initiator Record-Id: r-autotrue1
The check reported the missing prerequisite whenever unattended capture was on, and nothing could ever move it to ok. That is the correct verdict for a repository with no host wiring and the wrong one for a repository configured exactly as intended, and it cannot tell them apart -- so every correctly set up repository would carry a permanent warning. A warning that never clears trains people to stop reading the surface that carries the real ones, which costs more than the one it was raised about. The premise that there is no repository-owned registration surface is not true: the plugin ships `.mcp.json`, and that is precisely what a host reads to obtain the capture tool at all. So when it registers this server the check passes, and when it does not, or cannot be parsed, it warns as before. What it passes on is stated rather than implied. Registration is configuration, not observation -- nothing here proves a host has ever called the tool -- so the evidence field says `registration-only` and the message keeps saying that an ordinary commit outside that host still cannot start a capture. Limit: a host may be registered and never call the tool, or be configured outside the repository entirely, so this distinguishes wired from unwired and never observed from unobserved Blast: local Undo: easy Certainty: firm Verified: one hundred and fourteen cases pass across the doctor, snapshot, auto and init suites, including a repository with no registration, one that registers the server, and one whose registration is malformed; typecheck clean and two builds produce a byte-identical dist Provenance: authored Record-Id: r-autotrue2
MongLong0214
force-pushed
the
auto-truthful
branch
from
August 11, 2026 06:26
c87498d to
6cc5032
Compare
CommitLore — record lintTrailers: clean — 2 commits in Active constraints for the paths this PR touchesLimits (134)
Ruled out (302)
Truncated: 218 lines omitted — the comment hit GitHub's 65000 character limit. 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.
Closes #527 once this reaches
main.What was wrong
commitlore init --unattendedsaid unattended capture was enabled and described it as preparing, verifying and staging a record on every commit. An ordinarygit commitafterwards produced no pending transaction, no trailer, no note — and no diagnostic.The pipeline is not broken.
captureneeds a transcript, and the installed hooks cannot produce one:prepare-commit-msgapplies an already-staged transaction andpost-commitfinalises one. Neither sees the host conversation thatpreparehashes, and by ADR-0028 neither can. A human committing by hand has no transcript and never will.So what was broken was the claim. A repository saying unattended capture is on while ordinary commits produce no attempt and no diagnostic is in the one state this project treats as unacceptable: silently wrong rather than loudly limited.
init,auto statusanddoctornow separate consent from initiation.One correction to the report
The issue says MCP is the only initiator.
commitlore capture --transcript …is another. Neither is invoked by an ordinarygit commit, so the conclusion and the requested fix stand.The warning has to be clearable
The first pass warned whenever unattended was on, with no path to
ok. That is the right verdict for an unwired repository and the wrong one for a correctly configured one — and every repository running this as intended would have carried a permanent warning. A warning that never clears trains people to stop reading the surface that carries the real ones.The premise behind it was also false: the plugin ships
.mcp.json, which is exactly what a host reads to obtain the capture tool. So the check now passes when that registers this server, warns when it does not, and warns when the file cannot be parsed.What it passes on is stated, not implied — registration is configuration, not observation. The evidence field reads
registration-onlyand the message keeps saying an ordinary commit outside that host still cannot start a capture.Now
docs/SELF-AUDIT.md,docs/capture.mdand the commits skill now state the same boundary.114 cases pass across the doctor, snapshot, auto and init suites — including no registration, a valid registration and a malformed one; typecheck clean; two builds produce a byte-identical
dist.