v1.18.0 — capture-anomaly alarm + identity-addressed ADR writes
v1.18.0 — the capture-anomaly alarm + identity-addressed ADR writes
- stop.sh now self-reports its six measured-zero silent-death reasons as
signal.capture_anomalycounter rows via POST/api/capture-anomaly(pure bash+curl helperum_signal_anomaly— a no-python client still reports; 429 carved ashttp-429ahead of theserver-too-oldresidual). skip=empty-deltasplit into-stalled/-filtered(exhaustive shape classification; pass-2 always emits EMPTY)./api/statsexposes an independentanomaliessection (fail-isolated toanomalies:null; always-presentsignalskey: absent ⇔ old server / null ⇔ degraded /{}⇔ healthy).- um-alert SIGNALS escalation (ABSENT/DEGRADED/ERROR/ALERT/OK; ALERT = any surface
count_7d>0) with print-all on every exit path — also fixed the pre-existing LAYERS-masks-LEDGER and the STALE arm's silent LEDGER drop. - Version skew is safe both orders: a new hook against an old server logs
signal=server-too-oldquietly. - Residual (crash-dead class) deliberately unalarmed pending its measured base rate — #283.
Identity-addressed ADR writes (#279, PR #281):
type:'adr'writes with a usableadr_idget a deterministic point id from(repo_path, adr_id, userId)— idempotent full-replace, dedup bypassed, verbatim title,createdAtpreserved, suppression-state carry-forward. A re-synced ADR no longer mints a duplicate point.
Also riding:
- ADR graph derived from decision files (#266, PR #270) + a corrected header rationale (#278).
- Memory link audit CLI (
cli/memory-audit.mjs, #273). - Safe half of the #258 dependency batch (#274); the three measured-bad majors stay ignored.
Registry verification (2026-08-24, pre-announce): both published arches pulled and booted from GHCR against a scratch qdrant — amd64 and arm64 (QEMU): 1 patch warn each, /health 200, in-image v22.23.2. Deployed same day: /health 200 with the full corpus intact.
Post-deploy checklist: #279 legacy cleanup (list-first, ≤8 expected; ungates #275) → #267 §14 ritual (mount probe → deliberate fire → D4 read → CLEANUP) → #283 measurement SQL → alarm-or-park decision.