Repository navigation
v0.1.8
Forgelore could not remember the errors of its own build day. This release
is what fixing that took.
Added
The extractor recognises CLI errors. Until now it knew compiler and
runtime diagnostics — a file with a line and a column, a panic, an
exception header, a test failure — because that is what all twenty-nine
corpus families are. A shell command that failed for any other reason
produced no fingerprint at all, so there was nothing to key a memory on and
the injection path never fired.
Four shapes join it, each written from captured output rather than from
memory:
- a package manager's code,
npm error code E403, and only that line: the
prose around it carries a log path with a timestamp, which would hash
differently on every run; - a line beginning
error:orfatal:, with rustc's bracketed code —
how git, cargo, rustc and clang report; Failed to …, which is all some tools give;- an exception behind a label. Gemini writes
Error authenticating: IneligibleTierError: …, and the label belongs to
whoever reported the error, not to the error: it is dropped, and both
forms now hash the same.
npm/registry-404 and git/not-a-repository join the corpus as captured
families.
Changed
A line beginning error: is now a failure, and for Claude Code that
changes behaviour: PostToolUse decides failure by asking the
fingerprinter (ADR-0022),
so a command that succeeded while printing such a line is now treated as
one that failed. Nothing is written to memory either way — the visible
effect is a lookup that probably misses.
The guarantee that survives is narrower and worth stating: the word in the
middle of a sentence still proves nothing. Every matcher is anchored at
the start of a line, which is the whole defence here, and a test holds both
halves.
Unable to reach the cache, continuing will now be read as a failure.
That is the cost of the loosest of the four matchers, and it was accepted
because the alternative is not seeing an entire class of error.
Some failures still have no shape. the working tree is not clean is a
sentence with nothing diagnostic about it; matching it would mean matching
any sentence.
Does this change existing records?
No. Every fingerprint that matched before still matches: the change adds
shapes, it does not alter how a recognised one is hashed. The one exception
is an exception behind a label, which now hashes as its bare form — if you
recorded one of those, forgelore dedupe finds the pair.
Upgrading
npm install -g forgelore # or
curl -fsSL https://raw.githubusercontent.com/forgeprint/forgelore/main/scripts/install.sh | bashNothing to migrate. The record schema is 1 and the mapping format is 2.
gh attestation verify forgelore_linux_amd64 -R forgeprint/forgelore
npm audit signaturesWhich agents this release supports
| Agent | Checked against a running agent | |
|---|---|---|
| Claude Code 2.1.290 | hooks, both MCP protocol eras, usage reader | A |
| Copilot CLI 1.0.91 | hooks only — its MCP client has never been connected | B |
| Gemini CLI 0.62.0 | hooks only — its MCP client has never been connected | B |
| Codex CLI | nothing; the mapping is a reading of the documentation | unverified |
| Cursor | researched, not started | — |