Releases: francescofioredev/accreta
Release list
v0.1.3 — the published version stops being the weakest one
Twenty-three commits since 0.1.2, and the reason to ship them is that the version on npm was the weakest one: it accepted a source path that climbed out of the root, injected a quote into a single-quoted frontmatter value, and let two concurrent rebuilds race on the same staging filename.
bun add -g accretaBreaking: the MCP responses changed shape
check_drift, get_page, search_pages, find_canonical and find_consumers returned core records untouched, so canonicalSource and lastVerifiedRevision arrived beside pages_checked and target_exists. A model reading four tools' JSON should not have to switch conventions between them. Everything is snake_case now (#64, #75).
Five tools that relay page text also carry a _provenance block naming which fields a page author wrote (#78). Values are byte-identical — the block names fields rather than delimiting them, because a delimiter is a string a page author can write too.
Hardening
- A source read that climbs out of the root is refused (#74)
- A single-quoted frontmatter value no longer has a quote injected into it (#67), and a plain scalar containing a wikilink is quoted whole rather than at the wikilink (#76)
- The server README says plainly that pages are untrusted input to the model (#77)
Provenance
- Every adapter's citations name the revision they were checked against (#53)
- A citation is checked against something that actually exists (#72)
- A quoted wikilink no longer discards the whole frontmatter (#54), and a page with no frontmatter is told why, not just that (#56)
- Changed paths are reported once per revision, not once per page (#55)
Index and concurrency
- The server reopens the index when a rebuild swaps it underneath (#68)
- Two concurrent rebuilds no longer race on one staging filename (#66)
Measured, not asserted
The scaling curve and the MCP response budgets were finally weighed (#61), a six-lens adversarial review was run against the project and what survived recorded (#62), and ADR-0001's headline percentages gained the confidence intervals they never had — 3 of 20 queries change rank, McNemar exact p = 0.25. The decision stands; the confidence it projected did not. The constitution and the setup skill now ship the mechanism instead of the numbers (#88).
Also accreta --version (#63), and the server reading its own version rather than restating it (#52).
v0.1.2 — published by the workflow
The first release published by CI rather than by hand, and the first carrying provenance attestations — every package signed with its source and build information, no long-lived token involved.
bun add -g accretaGetting here took two attempts. The first published three packages and stopped on the one package that sits outside the @accreta scope and so needed its own trusted publisher; re-running then died on the packages that had already succeeded. Publishing five packages is not atomic, so the workflow now skips whatever is already at the tag's version and a re-run finishes what a partial release started. See #36.
Also: the README now tells you to install the thing rather than run it out of a checkout.
v0.1.1 — the first installable release
The first version on npm. accreta and the four @accreta/* packages, published by hand — a trusted publisher cannot be configured on a package that does not exist yet, so no first release can have OIDC in place.
bun add -g accreta
accreta init --preset researchFixes the bug that would have made this release unusable: the CLI read its constitution templates from outside the package, which npm cannot pack. See #31.
v0.1.0 — the first working version
A knowledge base an agent writes and maintains, with provenance back to the sources and drift detection when they change.
All six roadmap phases complete. 176 tests. MIT.
Try it
git clone https://github.com/francescofioredev/accreta && cd accreta
bun install
cd examples/climate
bun run ../../packages/cli/src/main.ts reindex # 10 pages, 27 links, ~20ms
bun run ../../packages/cli/src/main.ts lint # clean
bun run ../../packages/cli/src/main.ts drift # up to date, both sourcesWhat works
packages/core— frontmatter parsing, wikilink resolution, link graph, SQLite index (FTS5 + links), search, lint, drift detection.packages/adapters/{fs,git}— a source is four methods. The core imports no adapter and never branches on which one it holds.packages/cli—init,reindex,lint,drift,search,show,consumers,canonical.packages/mcp-server— seven read tools plus one write tool that is not registered unless writes are explicitly enabled.templates/constitution/— the method, pluscodebaseandresearchpresets.examples/climate/— a worked knowledge base over scientific reports.
Three things worth reading about
A bug that failed silently in both directions. [[../modules/foo]] rendered and navigated correctly on GitHub while the graph quietly omitted the edge — so find_consumers under-reported with no symptom, and a shorter list of consumers is indistinguishable from a correct one. Two more defects with the same shape turned up in the YAML preprocessing pass. That pattern is why unresolvable links are a table, not a log line.
The benchmark found a bug in our own index before it answered its question. Alias queries scored 40% — ECS and thermal inertia returned nothing despite being names the pages declared in frontmatter. pages_fts was dropping aliases on the floor. One column later: 40% → 100%, overall 70% → 85%.
That number reads exactly like evidence that lexical search cannot handle synonyms, which is the standard argument for reaching for embeddings. ADR-0001 decides against building semantic search on the corrected numbers, records that paraphrase recall at 50% is a real weakness, and lists three concrete triggers that reopen the question.
Verifying the demo before tagging showed every page drifting. A git source was the whole repository rather than its own documents, so any commit to anything drifted everything. Fixed with path scoping (#29) — re-pinning would have hidden it and left every future commit to re-break it. A drift report that cries wolf is one people stop reading.
Deliberately not built
Both serve a deployment story that does not exist yet. Building them now would encode guesses about transport, identity and distribution that become load-bearing before anyone has tested them.
Not stable
The API will change. examples/climate and bench/ are the best guides to what the tool actually does.