Skip to content

Commit 05d9a81

Browse files
leifericfclaude
andcommitted
chore(release): bump version to 0.8.1
Patch bump for the three data-quality fixes diagnosed against the live noumenon db: - MCP server now follows daemon-port changes per call instead of capturing the URL once at startup, so a daemon bounce on a port-0 install no longer leaves the MCP wedged until Claude Code restarts. - `synthesize` filters merged components with empty `:files` so hallucinated `:source-components` names can't produce phantom components that pollute `component-dep-drift`. - Cost telemetry survives undated provider model ids and 0-cost GLM/Tencent runs; cost queries use `get-else` so they don't silently exclude txes that legitimately cost nothing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8ea8da1 commit 05d9a81

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

CHANGES.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## Unreleased
44

5+
## 0.8.1
6+
7+
### Fixes
8+
9+
- **MCP server follows daemon-port changes**`serve!` captured `(or (load-connection-config) (detect-local-daemon))` once at startup, so an MCP server spawned while the daemon was on one OS-assigned port (the `noum daemon --port 0` path) kept proxying to that address forever. After a daemon restart on a new port, every tool call surfaced as `Cannot reach daemon at <stale host>` until Claude Code itself was restarted. The connection is now resolved per `tools/call` via the same expression, so daemon.edn is re-read each request and a daemon bounce no longer requires a client restart. Both reads are cheap EDN slurps; explicit remote setups via `load-connection-config` still win over auto-detect.
10+
- **`synthesize` no longer creates "zombie" components** — the hierarchical-merge step resolves a merged component's `:files` by looking up each `:source-components` name in `part-comp-index`. When the LLM hallucinates source-component names that don't exist in the partition results, every lookup returns `[]` and the merged component went downstream with empty `:files`. `components->tx-data` then wrote the component entity (and any `:component/depends-on` edges) but emitted no file attribution, producing a phantom component visible in `component-dep-drift` (which joins on `:component/name`) but invisible in `components` (which joins on `:arch/component`). Adversarial diagnosis on the live noumenon db: 19 visible components vs 19 zombies, 84 of 107 dep-drift edges involving a zombie, inflating the over-declared count and making synthesis quality look ~88% wrong when the real signal among real components was 13/23 (~57%) import-grounded — a healthy synthesis ratio. Merged components with empty `:files` are now filtered out before tx-data, and the dropped names are logged so the rate stays observable.
11+
- **Cost telemetry survives non-Anthropic models** — `llm-cost-by-model` and `llm-cost-total` returned empty against a fully analyzed db with 358 analyze txes. Three compounding bugs: (1) `llm/model-pricing` keyed by date-stamped ids (`claude-sonnet-4-6-20250514`) while provider responses now carry undated names (`claude-sonnet-4-6` from the LevelInfinite/Tencent gateway, `glm-4.6` from Z.ai), so prefix-only lookup missed every response and `estimate-cost` returned 0.0; (2) `:tx/cost-usd` was guarded by `(pos? cost)` and never written for 0-cost runs (which, after bug 1, was every run); (3) the cost queries used bare `[?tx :tx/cost-usd ?cost]` clauses that silently excluded txes without the attr. Switched `model-pricing` to undated keys with prefix-match (so both bare and date-stamped ids hit the same entry), added `claude-opus-4-7`, dropped the `(pos? cost)` guard so 0.0 is written explicitly, and switched `llm-cost-by-model` / `llm-cost-total` to `get-else` defaults. `llm-cost-total` also gained a `:tx/op #{:analyze :synthesize}` anchor so it doesn't pull in import/enrich/seed rows that never had token attributes. Both providers were probed directly: neither GLM nor Tencent return cost in `usage` — the fix is local pricing and local query hygiene, nothing provider-side.
12+
513
## 0.8.0
614

715
### Added

resources/version.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{:version "0.8.0"}
1+
{:version "0.8.1"}

0 commit comments

Comments
 (0)