Skip to content

Releases: francescofioredev/accreta

v0.1.3 — the published version stops being the weakest one

Choose a tag to compare

@francescofioredev francescofioredev released this 26 Aug 06:36
ed053cc

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 accreta

Breaking: 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

Choose a tag to compare

@francescofioredev francescofioredev released this 09 Aug 17:28
1749185

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 accreta

Getting 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

Choose a tag to compare

@francescofioredev francescofioredev released this 09 Aug 17:28
e2ca989

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 research

Fixes 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

Choose a tag to compare

@francescofioredev francescofioredev released this 08 Aug 00:24
829ccab

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 sources

What 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/cliinit, 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, plus codebase and research presets.
  • 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

  • #21 — hosted deployment auth and the sync loop
  • #26 — the five-state skill installer

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.