CommitLore v1.0.0
CommitLore v1.0.0
Every behaviour change below was verified present in the code on main, not taken from a plan.
If you are already running CommitLore
Five things behave differently. Two of them change JSON a client reads.
A timeout is no longer a verdict. The MCP probe's budget moved from five
seconds to fifteen, because a passing probe on Windows consumed 4478ms of the
old one. initialize-timed-out now reports could not verify this time rather
than this registration is broken. A closed input, an early exit, or a foreign
identity still say unhealthy.
A cached signature verdict is bound to the keyring that produced it. In
signature mode the index records which keys its verifier could see. A reader
whose keys differ rebuilds instead of serving a verdict about a keyring that is
gone.
Every answer names the build that produced it. runtime.version and
runtime.build_id — a digest of the bundle, not a path. Four generations of
this product were found installed at once, three of them reporting the same
version, so a version alone could not tell them apart. This adds two fields to
the JSON contract.
A partial answer says it is partial. coverage is complete or partial.
The consumer routes stop scanning after three seconds so a large repository
costs a pause rather than four minutes; until now the shorter answer looked
exactly like a whole one, and history and notes both reported healthy
because the sources were healthy. This adds one field to the JSON contract.
No commit can add an agent session identifier to this repository's history.
Checked against a baseline of the three already published, matched on the value's
shape rather than a list of vendor key names.
Upgrading
The three added JSON fields are additive. A client that ignores unknown fields is
unaffected; a client that pins an exact key set will see three it does not know.
If this is the first thing you have read
CommitLore keeps the decisions behind your code in git itself — commit trailers
and notes — so an agent editing a path is handed what the repository already
decided about it. There is no service, no database, and nothing to keep in sync:
the repository is the record, and a clone carries the whole thing.
What it does automatically: delivery. A record reaches the agent before it
edits a path.
What it assists with: capture. Recording a decision runs through
prepare → verify → stage, where the record is checked against the diff it claims
to describe.
What it does not do: deterministic autocapture. No host is certified to turn
every eligible commit into a terminal assessment on its own, and nothing in this
release claims otherwise. commitlore auto status now says so in its first line
instead of contradicting itself three lines later.
What a trust grade means, exactly
[directive] is a claim whose strength depends on how the repository is
configured, and the two modes are not the same promise:
| mode | [directive] means |
someone who can commit |
|---|---|---|
| author string (default) | the author matched this repository's allowlist | can produce one |
| signed | git verified a signature on this repository's fingerprint allowlist | cannot, without the key |
[claim] means unverified provenance. [blocked] means the content matched an
injection pattern and was withheld. SECURITY.md states which failures are
vulnerabilities against which mode.
The measured result
On a preregistered comparison (bench/PREREGISTRATION-M5.md, frozen before the
run), an agent handed the repository's active records re-proposed a ruled-out
approach in 2.8% of runs (16/580) against 18.8% (109/579) without them.
bench/VERDICT-M5.md is the authority for those numbers and CI fails if any
README drifts from it.
Guard — the ruled-out matcher — is experimental and advisory: precision 44.8%,
recall 22.0%. An empty guard result is not a guarantee.
The protocol is Stable
spec/SPEC.md is 2.0 Stable. Within 2.x the grammar, the meaning of every
key, Record-Id's format and the X-<Name> extension slot do not change
incompatibly. Nothing in §3 is removed in 2.x; a key that must go is deprecated
first and removed no earlier than 3.0.
A record already committed stays readable regardless. The repository is the
record, and a reader that cannot read old commits has broken the one promise this
product makes.
Known limits, named
- A launcher whose interpreter does not exist reports as a timeout on
Windows.cmd.exeexits silently and nothing speaks the protocol, so a slow
registration and a missing interpreter arrive as one report. Distinguishing
them would mean reimplementing the host's command resolution, where being
subtly wrong produces a confident false diagnosis. - A release reaches the CLI wrapper but not the Claude plugin cache. After
installing, update the plugin and start a new session, then read
runtime.build_idback to confirm which generation is answering.