Peripheral observations from every survey pass. Agents record patterns, anomalies, connections, tensions, and candidate concerns here when they notice something the phase structure does not ask for. The memory-auditor agent periodically reviews open notes for promotion to findings or dismissal.
§Tension (8)
- [OPEN] Reopening a done initiative has no clean representation across the two custody layers. Pecia refuses it at the substrate:
pecia edit --status in-progresson a terminal record returns E005, 'terminal is final; reopen = new record with discovered_from'. But dev/test-pecia-roadmap.mjs asserts exactlyOne head perroadmap:A<n>label and derives dependency edges fromblockspointers at those exact record ids, so a successor record forces relabelling the terminal one and rewiring blocks edges through other terminal records — which E012 may itself refuse. The two gates encode incompatible models of what an initiative is: pecia treats it as an append-only event whose closure is permanent, the correspondence test as a durable one-to-one handle. Encountered while reopening A1-A3 on 2026-08-27; the roadmap side was completed and validated, and the ledger side was left untouched pending a decision. @B-05· 2026-08-28 02:41 UTC - [OPEN] A baseline observation in dev/roadmap.json is falsified by finding B03-2 and needs correcting as part of any fix. The roadmap's Observed section states that change detection 'maps changed paths to file-ledger rows and marks every entry in directly affected subsystems stale; it does not compute transitive claim or seam impact', citing tools/git.ts and tools/stale.ts. The first clause is untrue at 5694080: the UPDATE marks zero rows because nothing populates entries. Because roadmap.json is the canonical source that render-roadmap.mjs validates and ROADMAP.md is generated from, a repair that touches only code would leave the project's own published baseline asserting behavior that does not exist. @
B-05· 2026-08-28 02:29 UTC - [OPEN] The staleness surface sits between two models and is served by neither. entries is projected as a legacy source under legacy_claim_projection, superseded in design by the typed temporal claims model of ADR-0002; but at 5694080 claims, claim_validity_events, and revalidation_obligations are all empty in this project's own conspectus, while detect_changes still writes to entries and get_dashboard still publishes stale_entries. The migration appears to have introduced the successor without either populating it or retiring the predecessor's public signal. Whether the claims surface is intended to be populated automatically or only by explicit agent use is not resolvable from the code alone. @
B-03· 2026-08-28 02:10 UTC - [→ dismissed] B-07 deliberately mixes authored research instruments and prose with frozen third-party fixtures and generated trial outputs; survey evidence must follow custody records and verification scripts without treating vendor/build artifacts as locally designed architecture. @
scholiast/**· 2026-08-23 06:13 UTC - [→ dismissed] The directory deliberately mixes authored contracts, model-panel readings, executable checks, captured production fixtures, and rendered screenshots; later concern review must not treat those witness types as interchangeable evidence. @
design/delightful-output-panel· 2026-08-23 05:51 UTC - [→ dismissed] The 2026-08-04 Chorusmith 'Build a report on everything' run is not a rejected research idea. It is an interrupted reorientation-surface study: 882 sessions scanned, 230 report/reorientation requests across 209 sessions, literature work, and an independent Codex conspectus existed before an unanswered location/render/scope question halted the run. Nothing was durably landed, but the raw transcript preserves the brief and portions of output. Use it as a longitudinal Amanuensis/Chorusmith intent case and custody-failure episode, not code-review ground truth. @
Claude session ffa1f3d7-8694-4095-9e81-17ee4530061f; research CONTEXT/learnings/persist-and-externalize.md· 2026-08-14 18:57 UTC - [→ dismissed] A16 already supplies preregistration, eight control roles, replicate identity, instrument clearance, alternative-explanation review, and no-pooling custody, but it does not execute historical repository fixtures or identify the marginal effect of multiple construction disciplines. Product-efficacy cases are now available; causal claims about roadmap/red-gate, catalog/rules, ADR, or Pecia still require prospective randomized or counterbalanced arms with model, budget, tools, permissions, and task fixed. @
dev/adr/0017-stratified-operating-envelope.md; external process histories· 2026-08-14 18:52 UTC - [→ dismissed] The materializer is intentionally incremental, but correctness depends on its page plan declaring every DB/prose dependency; an omitted source can leave a derived page apparently current. @
materializer/amanuensis_materializer/core.py:Materializer._plan;b8b566f· 2026-08-12 04:20 UTC
§Anomaly (3)
- [OPEN] The A25 runner captures host runs and adopts them into a receipt as separate steps, and the gap between them is silent. A run on 2026-08-28T22:31:07Z first deleted all 21 committed captures for the previous run id, then wrote 21 fresh ones — but left dev/activation-evidence/a25-activation-operating-envelope.json untouched, still naming the 2026-08-26 run id. Between the delete and the write the checker reported 'raw host log is absent' for evidence that was committed and recoverable, so an observer during that window sees destroyed evidence rather than work in progress. Two consequences worth addressing: the runner should not clear committed captures before it can replace them, and fresh captures that no receipt references should be visible as such rather than sitting untracked and unmentioned. Recovery is a plain git checkout of the run-id directory, which is what was done here. @
B-08· 2026-08-28 22:41 UTC - [OPEN] materialize_docs silently ignores an output_dir outside the bound storage root rather than refusing it. Called with output_dir='docs' during this session to refresh the GitHub Pages copy, it returned ok with output_dir '/Users/nfeldman/repos/amanuensis/.amanuensis/docs' and published there instead. A21 containment is doing the right thing, but the caller receives a success result naming a directory it did not ask for, and a caller that trusted the parameter would believe it had republished a surface it had not touched. Repo-root docs/ had to be synced by hand. Worth either refusing the call or naming the redirection in the result. @
B-03· 2026-08-28 04:56 UTC - [OPEN] upsert_subsystem defaults status to 'unmapped' when the field is omitted, and the monotonic guard then rejects the call. A metadata-only edit to a mapped subsystem — correcting a stale scope description or jump_in_reading — therefore fails with a message recommending reset_subsystem, which would discard the survey record. Observed while correcting B-01's scope during this refresh; the call succeeded only after restating status='mapped'. The guard is correct; the default is the hazard, because the error steers a caller toward a destructive operation to accomplish a non-destructive edit. @
B-03· 2026-08-28 02:10 UTC
§Candidate Concern (1)
- [→ Addressed at adc4ce0 — obligation-bearing filter applied across the dashboard rollup, stale backlog, detect_changes count, and staleness map; exempt drift reported separately as stale_exempt. See field note 28.] Staleness does not distinguish derived artifacts from source. Detecting changes across the single commit aba6d04..411821f raised stale_entries from 18 to 52; all 34 new rows are classification 'generated-ignore' under B-04 (the checked-in docs/ projection), and none is source. Evidence 88 and 89: the drift predicate in detect_changes selects on tracked/ref_sha/changed and never reads classification, and the stale_entries rollup in get_dashboard counts every stale=1 row unfiltered.
Consequence: republishing the projection makes the conspectus report itself as substantially staler, because the materializer's own output is ledgered and counted as drifted survey subject matter. The ratio is the concern rather than the absolute count — 34 of 52 stale rows now carry no survey obligation, so the metric that B03-2 and B04-1 repaired specifically to make freshness falsifiable is diluted by the one file class guaranteed to change on every publish. A reader watching stale_entries cannot tell source drift from regeneration noise, and the number rises fastest when nothing about the code has changed.
Candidate concern: a health metric aggregating over rows whose classification exempts them from the obligation the metric represents. Related to but distinct from B03-2 (which was zero-denominator) — this is denominator contamination in the same surface. Not dispositioned: no concern pass has run over this at 411821f, and whether generated-ignore rows should be excluded from the count, reported in a separate bucket, or left ledgered but unstaled is a design call for B-03/B-04 rather than an evident defect. @ mcp-server/src/tools/git.ts:detect_changes@411821f; mcp-server/src/tools/dashboard.ts:get_dashboard@411821f · 2026-08-29 04:34 UTC
§Connection (4)
- [OPEN] B03-2 is better read as an unfinished migration than as an isolated bug. Initiatives A1 (temporal claim model), A2 (change impact), and A3 (revalidation scheduler) are all marked done in dev/roadmap.json, and all 27 initiatives now carry status done. But the survey workflow was never moved onto that substrate: a search of .claude/skills/amanuensis/ finds only detect_changes and get_stale_backlog, and no reference to add_claim, predict_change_impact, or plan_revalidation_run. The successor tables are consequently empty in this project's own conspectus while the legacy entries surface remains wired to the dashboard and the published projection. Each initiative's unit tests pass, which is what 'done' rests on; nothing checks that the workflow actually invokes the substrate those initiatives built. This is the same failure CONTRIBUTING names under composition custody — unit success cannot imply system success — applied to the project's own roadmap. @
B-01· 2026-08-28 02:29 UTC - [→ dismissed] Practice write-backs and nightly distillation reports materially extend Git history with session IDs, provider/run dates, fan-in, reversals, interruptions, no-finding outcomes, cost fragments, and links to raw transcripts. They are provenance/process telemetry and corpus-discovery indexes, not independent truth labels. Join report session -> raw root and descendants -> observed Git SHA -> executable later regression; keep reports, catalog interpretations, and future transcript knowledge evaluator-private. @
/Users/nfeldman/research/practice-audit; /Users/nfeldman/research/CONTEXT/reports; raw Claude/Codex transcript stores· 2026-08-14 18:57 UTC - [→ dismissed] Natural historical cases can replace A16's synthetic-only outcome fixtures for bounded review-efficacy tests. Highest-quality cases have an exact pre-fix SHA plus a later regression that fails before and passes after: Chorusmith repair-scope inversion (0466e263 -> 576d574), cross-run artifact clobber (0466e263 -> fdd383d), inert governance gates (0466e263 -> 425adaf), and AxiomDB LL-SPEC-LINK vacuity (26ef48f -> de1c8f1), shadow-closure truncation (c5cc9cd -> 570ff3d), and semantic compaction identity loss (d2caa29 -> 17b7ad1). Later review prose and semantic commits must remain evaluator-private to prevent leakage. @
External evidence: /Users/nfeldman/repos/chorusmith and /Users/nfeldman/repos/axiomdb Git histories· 2026-08-14 18:52 UTC - [→ dismissed] The agent runtime talks to one stdio MCP server; the server owns SQLite WAL state and shells out to git and the Python materializer. Installer and package generation are separate CLI paths. @
mcp-server/src/index.ts:main;b8b566f· 2026-08-12 04:20 UTC
§Pattern (12)
- [OPEN] Field note 27's candidate concern is addressed at adc4ce0 and the design call it left open is answered: exempt classifications are excluded from the obligation count rather than left ledgered-but-unstaled or reported in a bucket the reader must reconcile. generated-ignore, vendor-ignore, and irrelevant are filtered out of the dashboard rollup, the stale backlog, the detect_changes count, and the published staleness map; their drift stays recorded and surfaces separately as stale_exempt so nothing is hidden. On this repository the rollup returns to 18 obligation-bearing stale files against 34 exempt, and the map again names only subsystems with outstanding work. Worth keeping in view: this defect and B03-2 are the same surface failing in opposite directions — first a count with no denominator, then a denominator padded with rows that carry no obligation. Both passed every existing test, and both were caught only by running the thing against real state rather than a fixture. @
B-03· 2026-08-29 04:42 UTC - [OPEN] First conspectus pass produced by the repaired engine, at aba6d04. The store had never been migrated: opening it applied the ledger staleness columns and created scope_gaps, and the first reconciliation reported 502 tracked paths against 435 ledger rows, 78 unclassified paths, 11 absent rows, and 29 stale files. Every one of those figures had read 0 under the previous build, because the signal was computed from a table nothing wrote. retire_ledger_file removed all 11 agents/** rows while B-01 kept its 17 dispositions and its registered survey artifact, which under the old tool surface would have required reset_subsystem and destroyed both. After classifying the remainder the ledger reconciles exactly, 502 against 502, with staleness_measured true and 18 files genuinely stale. The published staleness map now renders per-subsystem drift instead of the sentence claiming freshness. @
B-03· 2026-08-29 02:54 UTC - [OPEN] B-08 is the strongest verification design in the repository and a useful reference for the rest of it. Three properties combine: gates proven red-capable by executed sabotage suites rather than asserted; claims bound to content by off-disk re-hashing that walks the reference graph transitively; and evidence separated by provenance in the ledger, so captured host transcripts cannot be mistaken for authored instruments. The same three properties are exactly what B-03's staleness surface and B-04's freshness sentence lack — those gates have no denominator, assert health from absent data, and are checked by nothing. Where a fix for B03-2 or B04-1 is designed, this subsystem is the in-repository model. @
B-08· 2026-08-28 02:20 UTC - → [B07-1] Adversarial challenge of B07-1: downstream npm/registry clients may impose their own network deadlines, and all checked-in local verifiers currently pass; however the parent APIs have no caller-controlled deadline. Node spawnSync and Python check_output microprobes waited for child completion, and Python reports timeout=None by default. The low-severity finding is upheld; no linchpin-dependent disposition was present. @
scholiast/ai-primary-web-platform-landscape/*capture*; verify-*-snapshot.py· 2026-08-23 06:24 UTC - [→ dismissed] Adversarial probe of B-06/SI-2 recomputed both prototype SHA-256 values and found they match their recorded historical/current fixture hashes; no source/publication role conflation was found in the applicable disposition. @
design/delightful-output-panel/validation/report.md· 2026-08-23 06:04 UTC - [→ dismissed] Adversarial pass for B-05 found no evidence-backed confirmed bug; 1 competition(s) remain visible rather than being promoted from code shape. @
B-05· 2026-08-12 04:45 UTC - [→ dismissed] Adversarial pass for B-04 found no evidence-backed confirmed bug; 1 competition(s) remain visible rather than being promoted from code shape. @
B-04· 2026-08-12 04:45 UTC - [→ dismissed] Adversarial pass for B-03 found no evidence-backed confirmed bug; 3 competition(s) remain visible rather than being promoted from code shape. @
B-03· 2026-08-12 04:45 UTC - [→ dismissed] Adversarial pass for B-01 found no evidence-backed confirmed bug; 0 competition(s) remain visible rather than being promoted from code shape. @
B-01· 2026-08-12 04:45 UTC - → [B02-1] Adversarial probe for B02-1 found runtime WAL crash recovery but no mechanism that makes the named Git phase commit contain those WAL pages; finding upheld. @
B-02· 2026-08-12 04:41 UTC - [→ dismissed] The repository ships four coupled surfaces: agent/skill instructions, a TypeScript MCP server, a Python materializer, and generated/user documentation. Package-time mirrors are derived from root sources. @
README.md:Architecture;b8b566f· 2026-08-12 04:20 UTC - [→ dismissed] Durable state spans memory.db, git-backed prose artifacts, storage history, and the materialized docs manifest; active session identity is the principal process-local mutable state. @
mcp-server/src/project.ts:resolveProject;b8b566f· 2026-08-12 04:20 UTC