docs(assessment): fold in the external-assessment triage — H-13, H-14, H-8e; six proposals cleared

Two external first-principles assessments of CORE were verified against code
line-by-line at 8f0ccfe3. What survived is entered; what failed is recorded in
the audit's negative space with the refuting file named, per the register's own
discipline.

Entered:

  H-13 — the speculative-marker cache over-evicts shared tokens: promoting one
  proposal to COHERENT pops tokens regardless of owner (pipeline.py:736-739,
  :1045-1055), so a sibling proposal's still-SPECULATIVE material is served
  without its marker. Honesty regression, served direction. Remedy: refcounted
  cache, failing test first. (The source assessment described this seam with
  the direction inverted — under-eviction; the code over-evicts. The check
  that caught the inversion is what confirmed the bug.)

  H-14 — _run_turn is 759 lines (pipeline.py:189-947) under a thin-wrapper
  docstring, with finalize_turn_trace_hash x2 / finalize_turn_surface x1
  back-stamps as the measured symptom. H-4's sibling: refactor ADR, PR-10's
  byte-identical-trace bar, and the learn stage named stateful.

  H-8e — inductive_closure.py's docstring claims a path-based cycle skip the
  code does not perform (:106 vs :189-193) — and the code is the right side:
  the monotone fixed point needs no path check, and adding one would refuse
  sound derivations. path records only (a,b,c) for longer chains (:198), so
  trace provenance is incomplete. Docstring fix is mechanical; extending path
  changes operator_invocation bytes -> trace_hash, held to the trace-change bar.

  PR-9 widened — the logos-authority bare except (pipeline.py:555) and the
  three OOV-probe swallows (:605-657) join the count-the-swallow scope; same
  remedy shape (record repr(e), keep the backstop), explicitly not the
  narrow-catch alternative.

  R-4 packet addition — first collapse candidate: composed_surface +
  transitive_surface + transitive_max_depth -> chain_depth:int, justified by
  ADR-0083's own docstring ladder; ruled in-lineage, not ad-hoc.

  R-12a note — lived_life.json staleness recorded as a question; the proposed
  PID-attestation fix rejected (refuses every reboot resume; PID reuse).

Cleared, with the refuting file named: EpistemicState compression
(vault/store.py, policy.py's ADR-0206 partition), the EpistemicState x
NormativeClearance product type (erases refusal evidence — H-3 rebuilt as a
type), PID attestation, path-based cycle skipping, the depth-enrichment cache
(pack_resolver.py:19 already lru_caches the cost), and the unified reasoning
engine as-refactor (trace_hash change + capability widening + discards the
ROBDD engine one merge after ADR-0265 ratified denial).

Register ranges updated to G-1..G-21 / H-1..H-14. Docs only; no runtime
behavior, no flag, no test changed.

[Verification]: uv run pytest tests/test_adr_index.py
tests/test_adr_status_governance.py tests/test_adr_0252_s5_blindness.py -q —
327 passed at this tree.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
This commit is contained in:
Claude 2026-07-28 03:17:54 +00:00
parent 8f0ccfe317
commit e025de7ad4
No known key found for this signature in database
4 changed files with 29 additions and 6 deletions

View file

@ -6,6 +6,7 @@
Ranked by leverage (cognitive/structural load removed ÷ effort), per the AGENTS.md protocol — not by ease.
**Amended:** 2026-07-27 at `ed06dd64` (Opus 5, Phase 6) · **re-verified 2026-07-28 at `797ebad5`** (H-12's ten-file delta re-measured and unchanged; H-8d's wording corrected on re-verification — see the entry). **H-12 added** (the two smoke gates have diverged). **H-8 gains a fourth instance**, located inside the source rather than the documents. **H-1 gains a note**: its exposure is already pinned. Derivations in [`50-execution-plan.md`](50-execution-plan.md) §0.
**Amended again:** 2026-07-28 at `8f0ccfe3` (Fable 5, external-assessment triage). Two external first-principles assessments were verified against code line-by-line; two of their observations survived and are entered as **H-13** and **H-14**, **H-8 gains a fifth instance (e)**, and six of their proposals were examined and cleared (see the closing section). Every rejected proposal failed on evidence one file-read away from its claims — the third recurrence of the N-1 scan-artifact class.
---
@ -63,7 +64,9 @@ Ranked by leverage (cognitive/structural load removed ÷ effort), per the AGENTS
**Verdict:** `wrong-solution` as *record-keeping* — divergence that reasoners inherit · **Layers:** governance
**Evidence:** (a) ADR-0146 rejects the daemon shape and places *"cross-process file locking, daemon synchronization, and signal handling"* out of scope; `chat/always_on_daemon.py` ships all three (`fcntl.flock` single-instance lock, SIGINT/SIGTERM, load-time identity guard) and is unowned. (b) ADR-0252's headline "34 organs" has no reproducible basis (18 `resolve_promotable_*` entry organs at the ratification commit *and* at `ed06dd64`; ~32 modules). (c) `architecture-assessment-verification-2026-07-25.md` asserts accrual "is enabled by the production L10 process"; the flag set says otherwise. **(d) — added Phase 6, and it is inside the code.** `core/config.py`'s docstring for `accrue_realized_knowledge` states *"the production L10 process enables it alongside `persist_session_state`"*, and the docstring for `consolidate_determinations` states the same about *"`accrue_realized_knowledge` + `persist_session_state`"*. `CONTINUOUS_LIFE_CONFIG_FLAGS` (`chat/always_on_daemon.py:45-49`) forces `persist_session_state`, `consolidate_determinations`, `strict_identity_continuity`, and **not** `accrue_realized_knowledge` — so the first docstring is false outright, and the second is false in its *"alongside `accrue_realized_knowledge`"* clause. *(Stated precisely on the 07-28 re-verification: an earlier draft of this entry said the flag set "contains neither claim's subject," which is wrong — it does contain `consolidate_determinations`. The false clause, in both docstrings, is the one naming the accrual flag as co-enabled. A third comment, on `persist_session_state:283`, makes the same shape of claim and is **true**.)*
**Why it hinders:** demonstrated, not hypothetical — this assessment's own Phase 0 inherited a stale-record error, and the 2026-07-25 doc (itself a *corrective* document) introduced one. Every divergence is a future wrong analysis. Instance (d) is the sharpest: it is one layer *below* the documents, where a reader checking the code against the docs would stop and believe.
**Better home:** four amendments — ADR-0146 addendum owning the daemon (drafted in `50-rulings.md` R-12a); ADR-0252 basis footnote (drafted, R-12b); a correction note on the 07-25 doc; and the two docstrings corrected or the flag added, per R-3.
**(e) — added 2026-07-28 (external-assessment triage), and it is inside the code again.** `core/cognition/inductive_closure.py`'s docstring rule *"Cycle: if path would revisit a node, skip"* (`:106`) describes a check the implementation does not perform — it checks `a == c` and known-triple membership only (`:189-193`), **which is sufficient**: the fixed point is monotone over a finite triple set, so no path-based check is needed for termination, and adding one would *refuse sound transitive derivations* (a witness path that revisits a node still proves a true fact). Separately, `path` records only `(a, b, c)` even for derivations whose chain is longer (`:198`), so the provenance serialized into `operator_invocation` is incomplete for multi-step derivations. The remedy splits: the **docstring correction is mechanical** and belongs with the amendment batch; extending `path` to full provenance **changes `operator_invocation` bytes and therefore `trace_hash`**, so it is held to the trace-change bar and must not land silently.
**Better home:** five amendments — ADR-0146 addendum owning the daemon (drafted in `50-rulings.md` R-12a); ADR-0252 basis footnote (drafted, R-12b); a correction note on the 07-25 doc; the two docstrings corrected or the flag added, per R-3; and the inductive-closure docstring correction (e), mechanical.
**Authority:** docs PRs + ruling signatures (R-12 for the two ratified ADRs, R-3 for the docstrings).
## H-9 · Dead instruments still standing as if live
@ -95,6 +98,20 @@ Ranked by leverage (cognitive/structural load removed ÷ effort), per the AGENTS
**Better home:** the gate-parity pin in G-7 — the drift is only invisible because nothing measures it. Measured parity cost: **429 tests in 46s** on the Act runner's own hardware (`ubuntu-latest:host` = native macOS host).
**Authority:** R-14 sets the direction (raise CI, or lower local, or keep them different and correct the comment); the pin itself is mechanical.
## H-13 · The speculative-marker cache un-marks a sibling proposal's material on promotion
**Verdict:** defect — honesty regression on a served marker · **Layers:** M4/M5
**Evidence:** `_speculative_subjects` is a flat token `OrderedDict` with no owner tracking (`core/cognition/pipeline.py:161`). A SPECULATIVE proposal seeds its subject plus every ≥4-char non-stopword token (`:726-729`); on COHERENT promotion, `_forget_speculative_subject` pops the subject and each token **regardless of which proposal added it** (`:736-739`, `:1045-1055`). Promoting "practical wisdom" therefore evicts the shared token "wisdom" while an independent "wisdom" proposal is still SPECULATIVE — and that proposal's material is then served **without its marker**.
**Why it hinders:** the marker is the honesty surface for unreviewed material, and the failure direction is served-unhedged — the direction this architecture treats as the expensive one. *(Provenance: surfaced by an external assessment that described this seam with the direction inverted — it claimed under-eviction; the code over-evicts. The verification that caught the inversion is what confirmed the real bug.)*
**Better home:** a reference-counted cache (token → count of live proposals; decrement on promotion, evict at zero), with the LRU cap retained as a size valve. **Failing test first:** promote one proposal, assert the sibling's marker survives — red before green.
**Authority:** mechanical PR + red-then-green test; flag at review whether ADR cover is wanted, since served-marker behavior changes (in the honest direction).
## H-14 · The cognitive spine's turn method is 759 lines, with back-stamp repairs as the symptom
**Verdict:** `strained` — structure debt on the highest-traffic path; H-4's sibling · **Layers:** M3/M4
**Evidence:** `_run_turn` spans `core/cognition/pipeline.py:189-947` (759 lines) under a module docstring still describing a thin delegating wrapper ("delegates to ChatRuntime internals… clean plug-in surface"). Trace-hash inputs accumulate across the whole span, and two explicit back-stamp calls exist (`finalize_turn_trace_hash` ×2, `finalize_turn_surface` ×1) because those values cannot be computed atomically where first needed.
**Why it hinders:** prospectively, H-4's mechanism — each landing phase is added inline, and the contributor must manually audit every prior phase for trace determinism. The back-stamps are the measured symptom, not the disease.
**Better home:** staged decomposition — deterministic pre-turn context → the delegated `runtime.chat()` call → post-turn resolution → **a stateful learn stage** (the teach step mutates the teaching store and the speculative cache, so a pure-tripartite framing is wrong and would mislead its own implementer). Zero-delta bar: byte-identical trace on the live lanes, PR-10's discipline.
**Authority:** refactor ADR, sequenced with or after PR-10 (H-4); not before Wave 2.
---
## Explicitly examined and cleared
@ -106,3 +123,4 @@ For symmetry with the Candidate Register's "considered and not registered" — h
- **Pure-Python-by-default algebra** — measured as the correct posture: determinism is the product, `versor_condition` is 0.22% of turn time, and the urgency argument for Rust-by-default dissolved under measurement. The open parity question (blocked on network) is a question, not a hindrance.
- **The five unreconciled articulations** — dissolved by the taxonomy (D1), not a standing hindrance; the residue is one stale Draft banner (folded into H-8's amendment batch).
- **Flag-gated conservatism itself** — seventeen dark flags is not inherently hindrance; *unregistered* darkness is (G-8). The posture may be exactly right; the register exists so that judgment can be made deliberately.
- **Six proposals from two external assessments (2026-07-28)** — each verified against code and cleared, with the refuting file named: **EpistemicState compression** (the "unused" states are the vault's refuse-forcing states and the serving path's `UNVERIFIED_POSSIBLE``vault/store.py:99-103`, `chat/runtime.py:1329`; ADR-0206 already partitions the taxonomy per-state in `core/response_governance/policy.py:64-100`); **an EpistemicState×NormativeClearance product type** (forbidding DECODED+SUPPRESSED at the type level erases the refusal's evidence — H-3's failure rebuilt as a type constraint; the coupling already exists as policy, where the legitimate combinations are decided); **PID attestation on `lived_life.json`** (a reboot-resumed life's writer PID is dead by definition, so the check refuses every legitimate resume, and PID reuse defeats attestation — the same pid-file pitfalls the lock's own comment derives against); **path-based cycle skipping in the inductive closure** (would refuse sound transitive derivations; see H-8e — the docstring, not the code, is the wrong side); **a depth-enrichment session cache** (the cost it targets is already `@lru_cache`d at the pack layer, `chat/pack_resolver.py:19`; measure first — the 0.22% Rust precedent); **a unified reasoning engine presented as refactor** (changes `operator_invocation` bytes → `trace_hash`, silently widens capability by letting compose see closure-derived triples, and reduces entailment to set membership one merge after ADR-0265 ratified denial representation — the underlying facts are real and are recorded as design considerations under H-4/H-14). Triage rule kept from this round: **no external lead folds in without the one-more-file check** — every rejected proposal above failed on a file its author did not open.

View file

@ -1,7 +1,7 @@
# The Execution Plan
**Planner:** Opus 5 · 2026-07-27 · verified at `forgejo/main` @ `ed06dd64`
**Governs:** everything in `30-gap-register.md` (G-1…G-20) and `31-hindrance-audit.md` (H-1…H-12), sequenced by `40-assessment.md` §6.
**Governs:** everything in `30-gap-register.md` (G-1…G-21) and `31-hindrance-audit.md` (H-1…H-14), sequenced by `40-assessment.md` §6.
**Method:** `docs/conceptualizing_engineering_mastery.md` — scrub → **delete** → simplify/enforce → accelerate → automate last. Nothing is automated that Waves 03 have not proven.
**Status (2026-07-28):** Wave 0's builds are **done** — PR-0 merged (#140), PR-1 landed, R-10 discharged by merging #138. **Track A is run and returned NO-GO** (`docs/research/sme-experiment-verdict-797ebad5.md`), awaiting ratification. R-1…R-14 remain PENDING and gate Waves 14; Tracks BE are unstarted behind them.
@ -197,9 +197,11 @@ Formation's six-boundary standard written for `ingest/gate.py` in `runtime_contr
### PR-8 · Materialise the typed refusal · **M** · H-3/G-20 — *needs a small ADR (the ADR-0024 chain reserved the seam)*
`InnerLoopExhaustion`'s reason/region/rejected-attempt evidence reaches `ChatResponse.refusal_reason` and a minimal honest served surface, instead of `""`. **Verification:** a refusing turn serves a non-empty, typed, replayable refusal, and `trace_hash` behavior is unchanged for non-refusing turns.
### PR-9 · Count the swallow · **S** · H-11
### PR-9 · Count the swallow · **S** · H-11 — *scope widened 2026-07-28*
A telemetry field on the turn/idle accrual result when `_accrue_in_turn`'s broad guard fires. **Behavior unchanged by construction** — the backstop stays; it stops being invisible.
**Widened to the same failure class elsewhere on the spine** (external-assessment triage): the logos-authority block's bare `except Exception` (`core/cognition/pipeline.py:555`) and the three layered OOV-probe swallows (`:605-657`) get the same remedy shape — record `probe_error = repr(e)` in the telemetry, keep the backstop. Observability that fails silently cannot distinguish "probe ran, found nothing" from "probe crashed first," which poisons the very roadmap data the OOV block exists to produce. **Explicitly not the narrow-catch alternative** (catching only `ImportError`/`OSError`): that converts a malformed decision object into a turn-spine crash — trading silent failure for served-surface failure.
### PR-10 · Extend declared precedence to the composer arms · **L** · H-4 — *refactor ADR*
Lift `core/cognition/surface_resolution.py`'s declared-precedence pattern to arm selection in `chat/runtime.py`. **Do this while one arm is live** — the cost triples after the next three arms. Carries an in-code prospective sabotage note in the `surface_resolution.py` style. **Verification:** byte-identical serving on the full deduction + curriculum + register lanes; this refactor may not change a single served surface.
@ -293,8 +295,8 @@ Hard gates, non-negotiable:
The arc closes when:
1. Every G-1…G-20 entry is CLOSED, or DEFERRED-WITH-RULING with the ruling recorded in-register.
2. Every H-1…H-12 entry is resolved, relocated to its better home, or explicitly accepted with a reason.
1. Every G-1…G-21 entry is CLOSED, or DEFERRED-WITH-RULING with the ruling recorded in-register.
2. Every H-1…H-14 entry is resolved, relocated to its better home, or explicitly accepted with a reason.
3. ADR-0252 §5 has a recorded verdict and the §6 question is settled either way.
4. A **committed** L10 soak artifact exists with a **pinned `deterministic_digest`**, and its pins run on a ruled cadence.
5. `smoke.yml` and `TEST_SUITES["smoke"]` are mechanically identical, and no test file hides in `full`.

View file

@ -93,6 +93,8 @@ Two flags' documentation describes a production profile the production profile d
**Recommendation: A.** The pattern already exists in-repo, is already correct, and is already applied to the wrong subset (H-6). B does the expensive half (classifying 32 flags) and skips the cheap half that prevents recurrence. The pin is what makes A permanent: after it, a new flag *cannot* land unregistered — which is the same mechanical-enforcement move as PR-4, applied to configuration instead of tests.
**Packet addition (2026-07-28, external-assessment triage).** The register work should carry the first *collapse candidate* alongside the classification: `composed_surface` + `transitive_surface` + `transitive_max_depth` → a single `chain_depth: int = 0`. The byte-identity ladder justifying it is documented in the flag's own ADR-0083 docstring (`core/config.py:80-86`: depth 0 ≡ single-chain, depth 1 ≡ ADR-0062's composed surface, `transitive_surface=True` already "supersedes `composed_surface`"). Ruled here, within the ADR-0062/0083 lineage — not ad-hoc: the same proposal arrived from an external assessment claiming it needed no ruling, which is exactly the path this register exists to close.
**What follows.**
- **A**`docs/specs/flag_register.md` + three profile constants + one pin (PR-5).
- **B** → the register without profiles or constants; H-6 stays open.
@ -273,6 +275,7 @@ Two flags' documentation describes a production profile the production profile d
- **Option A** — apply as written. **Option B** — a new short ADR owning the daemon instead, with a one-line pointer here. **Option C** — leave; H-8a stays open.
- **Recommendation: A.** The reasoning was never wrong; only the scope sentence went stale. A new ADR for a shape already shipped adds a document without adding a decision.
- *Note (2026-07-28, external-assessment triage): a related open question was surfaced and is recorded here as a question only — `lived_life.json` (the workbench-facing evidence artifact, distinct from the identity-guarded checkpoint) carries no staleness or authorship stamp tying it to the run that wrote it. The proposed fix from that assessment — PID attestation with a refuse-on-mismatch load check — is rejected: a reboot-resumed life's writer PID is dead by definition, so the check refuses every legitimate resume, and PID reuse defeats attestation. If the question ever matters, the answer is a run-id or digest stamp, not a PID.*
### R-12b · ADR-0252 — the "34 organs" headline

View file

@ -15,7 +15,7 @@ A read-only, evidence-bearing assessment of CORE's cognitive-cycle design versus
| [`20-component-cards/`](20-component-cards/) | 3 | Eight component cards: the four zero-subsystem zones + always-on, derivation organs, surface selection, attention |
| [`05-phase3-findings.md`](05-phase3-findings.md) | 3 | Corrections C-1…C-5; findings F-6…F-10; the consolidated Phase-4 seed list |
| [`30-gap-register.md`](30-gap-register.md) | 4 | **The live gap register** — 20 entries, 4 tiers, each with evidence + deciding authority (proposes superseding `docs/gaps.md`); four entries amended in Phase 6 |
| [`31-hindrance-audit.md`](31-hindrance-audit.md) | 4 | Twelve hindrances with fitness verdicts and better homes; five candidates examined and cleared |
| [`31-hindrance-audit.md`](31-hindrance-audit.md) | 4 | Fourteen hindrances with fitness verdicts and better homes; eleven candidates examined and cleared (five in Phase 4, six in the 2026-07-28 external-assessment triage) |
| [`40-assessment.md`](40-assessment.md) | 5 | The synthesis |
| [`50-execution-plan.md`](50-execution-plan.md) | 6 | **The execution plan** — five waves + five frontier tracks over every G/H entry, with the dependency gates and the risks. §0 carries seven corrections to the assessment found while sizing it |
| [`50-rulings.md`](50-rulings.md) | 6 | **The ruling packet** — R-1…R-14, each with evidence, options, a recommendation, and the exact diff that follows from each choice. Wave 0's deliverable |