Commit graph

16 commits

Author SHA1 Message Date
Claude
b823d85d28
docs(adr): R-12 — the two record amendments, the §5 verdict, and the §6 condition a NO-GO makes unsatisfiable
Rank 1 on the adopted docket, and the cheapest item on it: two ratified ADRs
whose records contradicted the code, plus the ADR-0252 obligation that Track
A's ratified NO-GO created. All four land in two files because they are two
files under one authority — splitting them would have bought two reviews of
the same document.

ADR-0146 (R-12a, option A) — the daemon it rejected, shipped.
The Shape-A rejection stands AS REASONING: a background daemon does require
process-supervision infrastructure that Shape B does not. That infrastructure
was subsequently built. chat/always_on_daemon.py implements the three items
"What is NOT in Scope" excludes, each mapped to where:
  - cross-process file locking -> advisory fcntl.flock(LOCK_EX|LOCK_NB) at :82,
    acquired BEFORE any signal or runtime setup so a second life fails fast
  - signal handling -> SIGINT/SIGTERM graceful stop at :145
  - daemon synchronization -> the load-time strict-identity guard; the flag is
    forced at :48 and a different-identity checkpoint is refused, so a restart
    is the same life or it is nothing
Shape B remains the persistence model and the CLI default; the daemon is an
additional shape layered on it, owned by this ADR. A new ADR for a shape that
shipped six weeks earlier adds a document without adding a decision.

The stale bullet gets an INLINE pointer, not only a trailing addendum. H-8's
mechanism is that an authoritative line converts "I should check" into "I
already checked" — the reader who stops at the excluded-scope list is exactly
the reader this gap is about, and they never scroll to the end.

ADR-0252 (R-12b, option A) — the "34 organs" basis footnote.
Footnote at the first use, marking the count as underived: the reproducible
figure is 18 resolve_promotable_* organs, ALL in generate/derivation/ and none
anywhere else, with exactly 32 modules in the package as the likely origin of
"34". The diagnosis, supersession plan and §4 conformance bar are unaffected —
none depends on the count. Option B (replace every "34" with "18") rejected: it
rewrites a ratified document's prose where a note at the point of use is all
that is owed.

ADR-0252 §5 — the verdict banner. NO-GO, ratified. Criterion pre-registered at
299c92be BEFORE the run, run at 797ebad5, artifact digest b3d9d275…, with the
mechanism stated in one measured sentence: the similarity quotient that
delivers attribute-invariance is the same quotient that annihilates structural
contrast. Scope held narrow on purpose — this refutes H1 for point-position
role encodings aligned under similarity, not every Cl(4,1) representation, and
not the symbolic lane. Also records N-8 (two prior GO verdicts on unmerged
branches, both unsound) and G-21.

ADR-0252 §6 — the amendment the NO-GO forces, and the load-bearing half.
§6 retired the surface organs "until the structure-mapper proves out" and named
no replacement for the NO-GO branch. Left alone that is a live instruction that
can never fire — an authoritative-looking dead instrument, the H-9 class
exactly. Amended: the organs are RETAINED, and that is the operative state
rather than a pause in a transition; the retirement condition is re-stated as a
demonstrated replacement passing the §5 criterion, which does not exist. The
"Build (gated on §5 GO)" bullet is marked NOT AUTHORIZED with the reason.
Retiring a working organ on the strength of a hypothesis ABOUT its replacement
is backwards; the hypothesis has now been tested.

Verification — every factual claim re-derived at ca5e614e rather than copied
from the packet: 18 organs, 0 outside generate/derivation/, exactly 32 modules
(tightening the draft's "~32"); lock, signals and identity guard each cited by
line; report digest read back from the artifact file.

Three things caught before landing, recorded because this commit is about
records being wrong.

1. The date. The addendum drafted "landed 2026-06-14". This container's clone
   was SHALLOW — 168 commits, roots grafted at 2026-07-19 — so git log
   reported 2026-07-20, which is the shallow boundary and not a fact. Neither
   figure was verifiable until the clone was deepened to 2340 commits, which
   confirmed the packet: 18e25580, 2026-06-14, the same commit introducing
   both the lock and the signal handling. The addendum now cites the SHA. A
   date that cannot be re-derived is testimony.
2. A wrong section reference — the amendment cited §9 for a sentence in §8.
3. A misquote — "the existing reader" for "the existing 34-organ reader".

Writing a misquote into a ratified document while amending that document for
accuracy would have been this ruling's own failure mode committed inside its
own fix. Both were found by re-reading the amendment against the source it
quotes, which is standing philosophy 7.

Records closed: H-8(a), H-8(b), G-15. Track A's outstanding obligation
discharged. H-8(c)/(d) remain open on R-3 and land with PR-5.

No runtime behavior. No test changes. Two ADR files and four register/plan
files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 06:25:06 +00:00
Claude
ca5e614ec8
feat(tests,assessment): G-23 — the domain/pack binding is stated twice and checked one way
core/capability/domains.py's DOMAIN_PACKS declares domain -> pack membership
for the capability ledger. Each packs/data/<pack>/manifest.json independently
declares domain_id. Two statements of one fact, and only one direction was
ever checked: domain_contract_predicates P3 validates domain_id -> a known
ledger domain. Nothing validated DOMAIN_PACKS -> the manifest agrees.

P3 passes VACUOUSLY on a manifest with no domain_id at all — the same shape as
its own test_pack_without_contract_reports_absent. So a pack that DOMAIN_PACKS
places in a domain, but whose manifest never says so, is invisible to every
check in the repository.

Measured: 7 of 9 bound, 0 contradictory, 2 absent — en_core_cognition_v1 and
en_core_meta_v1, both placed in philosophy_theology, which is one of the four
bands queued to earn a SERVE license behind R-8. The domain whose license is
next to be earned is the one whose binding exists in only one place.

Why nothing caught it: tests/test_domain_contract_predicates.py exercises
P1-P9 entirely against synthetic tmp_path manifests, never against the real
nine, and is itself in no curated suite. A predicate proven correct on
fabricated input and never run on the real input is this arc's defect class
stated precisely — its success state and "it never ran here" are
indistinguishable.

tests/test_domain_pack_binding.py, registered in smoke (on the gate):
  - every pack DOMAIN_PACKS names has a manifest on disk
  - a manifest that CONTRADICTS the table always fails
  - a manifest with NO domain_id fails unless the pack is in UNBOUND_BASELINE
  - the reverse direction: a pack may not self-assign a ledger domain the
    table does not grant (clean across all 30 packs today, pinned because a
    new manifest copying domain_id from a sibling is the obvious mistake and
    would silently widen a licensed domain)
  - both directions on the baseline: a pack that gains domain_id must leave it
  - the parse is guarded against vacuity (N-1 has produced three false
    conclusions in this repo)
  - the count is pinned so the gap moving is a reviewed decision

Four sabotages, each observed red, each caught by its intended pin.

PINNED, NOT FIXED, deliberately. Whether en_core_cognition_v1 is a
philosophy_theology domain pack or merely grouped under that domain for ledger
accounting decides what the license actually covers. That is
ratification-adjacent content, not engineering, and it is routed to R-8 /
PR-14 where that band's license is decided. Sealing that ledger without
answering it licenses a domain whose membership is asserted in one place and
denied by silence in the other.

How it was found, recorded because the method is the point. An external
assessment proposed collapsing the pack/domain machinery, stating its method
up front: "I have enough from the directory and CLAIMS.md to reason
seriously." That is the method AGENTS.md protocol rule 1 forbids, and five of
its six proposals are falsified by opening the file — recorded in full in
31-hindrance-audit.md, in short:

  - conftest.py "almost certainly" holds suite-membership logic: it holds two
    autouse fixtures and two data registries, and its collection hook stamps
    markers and never skips. Zero membership logic.
  - cli_test.py "almost certainly a nested conditional or a big dict": a flat
    dict, 17 keys, zero conditionals in the module body.
  - field/algebra/morphology as a peer triad needing a single serve(): 72, 15
    and 3 importers respectively, morphology is 97 lines, and no def serve(
    exists anywhere in core/, chat/ or generate/.
  - the grade space is richer than the serve layer consumes: all 15
    EpistemicState members have non-test consumers.
  - constraints: blocks in 314 ADRs: that is 314 new places that must be kept
    true, inside ratified immutable records, in the repository whose dominant
    defect class is records drifting from reality. The existing design puts
    the machine-readable half in the checker that reads the ADR, which is
    better on purpose.
  - a root contracts.toml as "the highest-leverage single change": the
    principle is already ADR-0263 Rule 5 and is implemented in the very file
    the assessment cites. Centralizing four tables with four authorities adds
    a fifth copy that must agree with four generators.

The seam it pointed at was real even though every specific was wrong. Bad
method, useful direction; both halves recorded, and the triage rule earns a
second demonstration — every rejected proposal failed on a file its author did
not open.

AGENTS.md — the standing philosophy revised to eleven, per Shay's review.
  - "be quick to be humble" -> "investigate yourself first". Speed is a
    consequence of reflex, not a criterion; writing it in makes velocity sound
    like the point. Examples replaced with three that are verifiable in-repo:
    the H-13 refcount claim, and the two rulings that were about to be
    recorded stronger than they were made.
  - the defect-class principle gains its prescriptive half as its own
    sentence, and gains this commit's instance: a predicate that passes
    vacuously on the input it was written for.
  - NEW #2: don't build a ratchet to guard a ratchet. Placed adjacent to
    "less is more" and named as its corollary so it does not read as
    duplication. The arc paid for it — a membership ratchet needed a
    reachability ratchet to mean anything, and what actually shrank the gap
    was deleting four suites nobody called.
  - NEW #10: a closed issue is not evidence the problem is gone. G-7 was
    CLOSED and REOPENED-PARTLY inside one arc; H-13 was closed with a fix that
    did not work.

Two review points were already satisfied in the file and are recorded as such
rather than re-applied: the defect-class principle already stood alone on its
first line, and already sat at position 3, not 8. The review was reading a
chat summary, not AGENTS.md — which is, exactly, reviewing the record instead
of the reality.

PR-5 additionally owes one page: an index of which declared tables exist and
what pin makes each true. That is the defensible residue of the contracts.toml
proposal, and explicitly not a fifth copy of four tables.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 06:13:10 +00:00
Claude
e6a3038335
docs(assessment,governance): record the adopted docket and the standing philosophy
Shay adopted twelve rulings, struck two, and ratified the ADR-0252 §5 NO-GO.
For several hours afterwards the packet still said PENDING fourteen times,
while PR-3 and PR-3b had already executed against R-7. That is precisely the
failure this arc is about — a record contradicting reality at a load-bearing
point — committed inside the arc whose subject is that failure, and it was
caught by a question rather than by any instrument. Fixing it is the first
item here; the rest of the commit exists so the same gap cannot reopen by
context loss.

50-rulings.md
  All fourteen statuses replaced. Twelve carry RULED <choice> with the date
  and the deciding authority; R-10 (discharged before the arc) and R-14
  (dissolved by N-9) are struck. An adoption block at the head records the
  choices, the strikes, the §5 ratification, and the corrected execution
  order, plus which rulings have already executed.

50-execution-plan.md
  New §2.1 — the adopted docket. The twelve choices, and the execution order
  as a ranked table stating why each item sits where it does. The packet
  ordered by register number, which interleaves cheap record repairs with
  expensive capability work and puts the two zero-risk ADR amendments last;
  the corrected order is by what each item unblocks, cheapest first in tier.

  Three things that lived only in conversation are now written down:
  - the claims register is HELD, deliberately, with its entry criterion —
    G-22 showed CLAIMS.md can publish a superseded digest for two days, and
    an index over untrustworthy indexed things is the H-9 pattern;
  - gate width is promoted from a parenthetical to PR-4b, sized, with
    `teaching` recommended alone and the reason being evidence (G-22) rather
    than taste — a parenthetical is how fifteen suites became unreachable
    without anyone choosing it;
  - Track A's ratification creates an obligation the verdict document cannot
    discharge: ADR-0252 §6 retires the surface organs "until the
    structure-mapper proves out," names no replacement for the NO-GO branch,
    and is an instruction rather than a research note. A live instruction
    that can never fire is a dead instrument.

  Two places where I was about to state a ruling more strongly than it was
  made, corrected rather than smoothed over:
  - R-11 B is "measure, then re-ask." It authorizes no gate. It owes a
    measurement AND a second ruling, and a ruled-but-inert item looks exactly
    like a settled one at a glance.
  - R-8 C was recommended "with a floor from A applied to the entailed
    capability only" and N was never named. PR-14 must carry a proposed N with
    its consequence, or land entailed as explicitly unlicensable-pending-N.
    Shipping without a floor would license entailment on nine cases through an
    omission — the exact outcome C exists to prevent.

  Also: §0 corrected from seven corrections to nine (N-8, N-9 were added
  during execution and the heading never moved); definition-of-done item 5
  struck, because N-9 killed both its halves — smoke.yml parity is not a goal
  under AGENTS.md:280, and "no test file hides in full" is unreachable at 747
  files without ceremony that changes nothing about what executes.

30-gap-register.md
  G-7's open half is 15, not 19: PR-3b took it there by deletion, which costs
  no gate time. Points at PR-4b.

AGENTS.md
  Nine standing philosophies under the reasoning protocol, per CLAUDE.md's
  rule that governance and memory live here. They are the generalization of
  what this arc actually cost: less is more; master the small details and the
  large ones do not form; a mechanism whose failure state is indistinguishable
  from its success state is not a guarantee; a record that contradicts nothing
  beats one that impresses; consecutive unclear problems mean the frame is
  wrong, not the fix; be quick to investigate yourself, and record the error
  next to the fix rather than overwriting it; volume of work is not a licence
  for lower diligence; fix what you find or name why not; let the tree settle,
  then run the gate once.

Documentation only — no runtime behavior, no test, no pin changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 05:57:11 +00:00
Claude
d0bedfc198
feat(wave-1): retire the dead instruments, delete the aliases nobody calls (PR-3, PR-3b, R-7)
Wave 1 — delete — run before more Wave 2 enforcement, correcting the method
inversion this arc had been committing: the plan sequences scrub -> DELETE ->
enforce, and Wave 1 was ruling-blocked while Wave 2 was not, so enforcement
landed first on structures deletion might have removed.

PR-3 (R-7 ruled A)
  docs/gaps.md and docs/audit/substrate-liveness-ratchet.md carry historical
  banners that name H-9's own mechanism as the reason they exist: an instrument
  that looks authoritative converts "I should check" into "I already checked".
  The ratchet's seven OPEN items — W-003, W-005, W-007, W-008, W-009, W-017,
  W-018, every one L10-chained — migrated into G-5 WITH their dependency
  chains, because that reasoning is the ratchet's lasting contribution and its
  status column is not.

  One deliverable could not be executed as written and is recorded rather than
  claimed: L12 has NO in-repo generator to drop it from. The system map is
  local and gitignored (D5 — a regeneratable index carrying no authority), so
  the phantom existed only there and in one taxonomy row. That row now records
  the ruling instead of the flag.

PR-3b — new, and it corrected its own author
  Added when PR-4's two ratchets made the question unavoidable: what exactly
  are they policing? Measured: 21 curated suites, 9 holding exactly ONE file,
  12 holding <=4, and 2 reachable from any gate.

  I proposed cutting ~11. The evidence supported FOUR. cognition, teaching,
  packs and algebra are named in AGENTS.md's own pre-merge-gate instruction;
  fast, pulse and proof in the CLI's help text; phase5, phase6, adr-0024, math
  and formation in READMEs and ADRs. Deleting those breaks documented commands
  — worse than the sprawl. Taking the 4 the evidence supports, rather than the
  11 I had already said out loud, is the whole point.

  Deleted: refusal, margin, rotor, inner-loop. Zero --suite references anywhere
  in code, docs, ADRs, workflows or CLI help. Per-phase ADR-0024 aliases
  offered so reviewers could run a phase independently; nothing ever did. All
  seven of their files remain covered by adr-0024 — verified BEFORE the cut —
  so nothing was orphaned and no coverage moved.

  21 -> 17 suites. Pin 3's gate-unreachable gap 19 -> 15 BY DELETION, which
  costs no gate time at all, versus promotion which costs it every run. An
  alias nobody calls is not a curation decision; it is one more name that has
  to be kept true, and two ratchets were policing these.

Registers: H-9 CLOSED, PR-3 and PR-3b marked LANDED, G-5 carries the seven
migrated items, the taxonomy's L12 row records the ruling.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 05:40:45 +00:00
Claude
065826c556
feat(tests): pin 3 — a curated suite no gate invokes is not a guarantee (PR-4, G-7)
PR-4's membership ratchet closed "no new orphans". Within the hour this arc's
first full-tree run found tests/test_ratification_ceremony.py RED, in the
curated suite `teaching`, invoked by NO gate tier. Membership was satisfied and
bought nothing — which is exactly the objection PR-4 itself raised against
G-7's original formulation: a curated suite nobody runs is the same
non-guarantee as `full` wearing a different name. The fix had the same blind
spot as the thing it fixed.

Measured: 21 curated suites, 2 gate-reachable (smoke, deductive). The gap is
NINETEEN, not the handful first estimated.

Shipped as baseline + ratchet, sized to the measurement rather than the rule:
19 `post-merge-only` justifications written in one sitting is the ceremony
failure already rejected for the 749-file membership baseline. The pin freezes
the gap, fails on growth, enforces both directions (a promoted suite must leave
the baseline), pins the count, and — critically — VERIFIES ITS DECLARED GATE
SET AGAINST THE SHELL (pre-push / local-ci.sh), so it cannot go vacuous the way
a scan that silently matches nothing does (N-1's class, three false conclusions
in this repo so far).

Two sabotages observed red: a new curated suite with no gate caller, and a
GATE_SUITES value drifted from the scripts it claims to describe. The second
correctly cascaded into two failures, which is the anti-vacuity guard working.

What pin 3 deliberately does NOT do: decide which of the 19 belong on the gate.
That costs gate time and is a decision, not an engineering task. Recorded as the
open half of G-7. `teaching` is the concrete first candidate — it just shipped a
red ratification pin that no gate ran.

Process note: a gate run was invalidated by editing the tree mid-run for the
third time today. Stopped with TaskStop rather than pkill this time, which
reaped cleanly instead of leaving the orphaned wait-loop that ran for 2h16m
earlier. All edits now land before any run starts.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 05:29:46 +00:00
Claude
913111c0dc
docs(assessment): main is red, was red before this arc, and membership was not the guarantee (G-22, G-7)
The arc's first full-tree run — 13,403 passed, 3 FAILED — and the three
failures reproduce identically at 797ebad5, the arc's starting commit. NOT
arc-caused. main has been red for an unknown period and nothing surfaced it.

  tests/test_ratification_ceremony.py::test_row_is_byte_compatible_with_the_committed_corpus
  tests/test_ratification_ceremony.py::test_unreviewed_status_is_refused
  tests/test_claims_md_is_current.py::test_claims_md_matches_generator_output

DIAGNOSIS — the code is right and the pins are stale, same class as H-8e.
ChainRecord.__slots__ gained "polarity" (ADR-0264 R1), and the serializer
DELIBERATELY OMITS it for affirmative rows (teaching/ratification.py:119:
"polarity is OMITTED when affirmative"). A test that rebuilds
ChainRecord(**{k: row[k] for k in __slots__}) therefore KeyErrors on a
CORRECTLY serialized row. Consequence: the ratification-corpus byte-
compatibility guarantee and the unreviewed-status refusal have been UNVERIFIED
since ADR-0264 R1 landed.

THE STRUCTURAL FINDING, which is bigger than the three tests. test_ratification
_ceremony.py IS in a curated suite — `teaching` — and no gate invokes it. The
pre-push gate runs smoke + the warmed_session lane + deductive. So a curated,
red, governance-path pin sat unrun.

That is this arc's own hollow-gate objection turned back on its own fix. PR-4's
ratchet closes MEMBERSHIP. It does not close EXECUTION, and I closed G-7 as
though it did. G-7 is reopened-partly and PR-4 now owes a third pin:

  PIN 3 — every curated suite must be reachable from a gate tier
  (scripts/hooks/pre-push / local-ci.sh), or be declared post-merge-only with a
  stated reason. Currently unreachable: teaching, packs, algebra, sensorium,
  cognition, runtime and the rest — they have members and no caller.

Membership was never the guarantee. Execution is.

Recorded as G-22 with the diagnosis; repair is test-side and mechanical, but
these guard governance-path behavior and a published artifact (CLAIMS.md), so
the disposition is Shay's rather than mine.

Docs only.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:58:21 +00:00
Claude
3650331b5b
docs(assessment): re-stamp the eight cards this arc touched, and post the board
§9.8 of the plan — "every card carries a verified_at no older than the last arc
that touched its layer" — is a maintenance contract this directory holds itself
to, and today's arc moved MV, M3, M4, M2, M6 and three component cards. A card
whose stamp falls behind a load-bearing arc is testimony, not evidence, which is
the failure mode the directory exists to replace.

Each card gains a Re-verified stamp at 39331dbc plus an arc note saying what
actually changed under it, not merely that something did:

  MV   PR-4 + PR-6 landed; G-7/G-9 closed. The layer's finding is sharper than
       the card stated: the recurring defect is not ABSENT pins but PINS THAT
       EXIST AND DO NOT RUN — four found this arc, each indistinguishable from
       coverage in any document.
  M3   §5 run to NO-GO, settling the successor-path question. New measurement
       G-21: the reader decides 5 of 500 holdout_dev/v1 cases. H-8e corrected.
  M4   H-13 fixed — the served-marker honesty contract held where it leaked.
  M2   PR-7's table: two boundaries already met, THREE CLOSED as category
       differences, one real delta (no audit record per rejection).
  M6   PR-9 — the accrual backstop counts and names what it absorbs.
  realize-phase / always-on-process / surface-selection — the component-level
       versions of the same three.

Plan §Status replaced with the actual board: what landed, what each remaining
item is blocked on, and the six findings this arc added that the assessment did
not have (N-8, N-9, G-21, H-13, H-14, H-8e). README carries the same summary at
the directory's entry point.

The status block says plainly what has NOT moved: comprehension breadth and
proof-of-life. The reader is still 19 constructions wide and decides 1.0% of the
held-out corpus; the 5000-beat soak is still prose with no pinned digest.
Everything landed this arc is enforcement and evidence machinery. Capability
moves in PR-11/PR-12/PR-14/Track B, all four ruling-gated.

Docs only.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:36:13 +00:00
Claude
39331dbce1
docs(specs): the M2 trust-boundary table — measured, and three boundaries CLOSED (PR-7, H-7)
formation/ declares its trust boundary explicitly (forge.py's five ordered
rules + hashing.py's content-addressing, no-floats, no-pickle, self-sealing).
ingest/gate.py — the PRODUCTION boundary, the only point where raw data enters
the versor manifold, facing untrusted user text every turn — had no comparable
table. H-7: asymmetric rigor invites the assumption that the un-tabled boundary
is the less important one, when it is the opposite.

Written per H-7's authority: documentation first, evidence decides whether code
follows. Every row measured against the code at edf6c2a4, not assumed — and the
measurement reframes the entry.

  ALREADY MET (2)   no floats in hashed payloads — _stable_digest hashes
                    salt + name, both UTF-8 strings, no float reaches a digest
                    no pickle — absent from all of ingest/

  CATEGORY          content-addressed artifacts, self-sealing, source
  DIFFERENCE (3)    allow-list. All three presuppose a PERSISTED ARTIFACT WITH
                    CITATIONS. formation validates artifacts it will store; the
                    gate transforms text it will not. Recording these as owed
                    obligations would have manufactured three hardening tasks
                    that cannot be done, and sent a future reader to do them.
                    Closing them is the load-bearing half of this table.

  REAL DELTA (1)    no audit record per rejection. The gate refuses with typed
                    exceptions (KeyError :235/:286, RuntimeError :318/:424) and
                    records nothing about what it refused;
                    vocab.record_unknown_token :331 records OOV observation,
                    which is not a rejection record.

On the delta, stated so it is not over-read: it is NOT a containment hole —
refusal is fail-closed and nothing unvalidated crosses into the manifold. It
costs forensics. It is the same failure class as H-11, which PR-9 closed on the
turn spine hours ago: a guard that works correctly and leaves no trace of having
worked. And it has a named downstream consumer — a widening program (G-3) must
be able to ask "what shapes is this boundary refusing, and how often", which
today it cannot.

Hardening for B6 is a separate PR per this entry's own authority, sized against
whether anything consumes gate-rejection telemetry today.

AGENTS.md §Security-and-trust-boundaries defaults also checked row by row for
completeness: four are n/a to a component that executes nothing, touches no
filesystem, and mutates nothing; the display/log default is met.

Docs only. Registers: H-7 CLOSED, PR-7 marked LANDED.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:30:00 +00:00
Claude
5f18b7e58f
feat(tests): three doctrine prohibitions enforced by test, not review (PR-6, G-9)
G-9's charge: "law-enforced-by-review is weaker than law-enforced-by-test." Its
stated method — verification pass first, then mechanical PRs — is what made this
worth doing, because the three prohibitions turned out to be in three different
states and only one of them was the state the register assumed.

(a) EXACT RECALL — the real gap, and worse than recorded. "Would a cosine
ranker actually fail a test?" answers NO across nearly the whole surface. The
only import ban in the repository covers exactly one file
(core/physics/wave_manifold.py, via test_third_door_cohesion.py — itself in no
curated suite). Meanwhile generate/realize/recall.py, which IS the recall path,
states the prohibition in its module docstring — "an exact, deterministic
equality scan (no cosine / HNSW / ANN)" — and nothing enforced it. Law asserted
where it executes, enforced nowhere: H-8's failure mode applied to a
prohibition rather than a record.

Now scanned across vault/, generate/realize/, generate/meaning_graph/, field/,
recognition/ for banned ANN libraries AND for hand-rolled cosine* definitions.
The second half matters: an import ban only stops the convenient version, and
ten lines of numpy is the realistic way a well-meaning contributor violates
this. A third pin ties the docstring claim to the scan, so the sentence and its
enforcement cannot drift apart.

(b) GOVERNANCE BYPASS — now exact. INV-07 proves governance works WHEN CALLED;
nothing proved it could not be skipped. Mechanism: no function in
chat/runtime.py may construct a TurnVerdicts without invoking
safety_check.check, and every such call must pass self.safety_pack — because a
bypass need not skip the call, it can substitute the pack. Measured at close:
two verdict-constructing functions, both governed.

(c) SAFETY-PACK NON-SWAPPABILITY — already well pinned; the gap was REACH, not
coverage. tests/test_safety_pack.py pins unratified-pack-refused-in-production,
missing-companion-report-refused, seal-failure-refused, path-traversal-rejected,
missing-pack-fails-closed — and ran in NO curated suite, so a fail-closed safety
contract was verified only after merge. Promoted onto the gate; the new pin
guards that placement rather than duplicating the substance.

FOUR SABOTAGES, EACH OBSERVED RED, each caught by its own pin: a banned library
imported on a recall path, a hand-rolled cosine ranker, a serving path
assembling verdicts without governing, the safety pack demoted off the gate.

Both new files registered in TEST_SUITES["smoke"] on creation (#136). Source
scans only — no runtime behavior, no flag, no serving path touched.

Registers: G-9 CLOSED with the per-item findings; PR-6 marked LANDED.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:13:42 +00:00
Claude
68e68589a2
feat(tests): curated-suite membership ratchet — and PR-4's parity pin withdrawn (PR-4, G-7, N-9)
N-9 is the finding, and it PREVENTS work rather than re-scoping it.

WHAT THE PLAN GOT WRONG. N-3 concluded the 23-vs-13 smoke delta was unintended
drift, on two in-repo comments asserting parity, and called that "the strongest
evidence available that the drift was never intended". H-12 repeated it; R-14
built three options on it recommending "raise CI, +46s measured"; PR-4
specified a bidirectional parity pin as deliverable one.

A third artifact answers all of it, and none of them read it.
tests/test_cli_test_suites.py::test_cli_smoke_suite_covers_ci_smoke_gate has
pinned smoke.yml SUBSET-OF TEST_SUITES["smoke"] since before this assessment —
which is why every measurement finds CI-only == 0; a pin, not luck — beneath a
comment headed "DELIBERATELY ONE-DIRECTIONAL — do not 'complete' this by also
asserting local_paths <= ci_paths". Its history is 50fa287d (2026-07-25):
"revert(tests): drop the local-to-CI smoke parity assertion — CI is not a
gate." An earlier agent read the same comment, drew the same inference, made
the assertion symmetric, and reverted it hours later: "That was wrong, and
AGENTS.md says so in a line I had already read."

AGENTS.md:280 — GitHub is "a mirror only; its Actions are billing-locked and
produce dead signals — never chase them." §277 — the workflows are "secondary
observability only." So the local suite is the SOURCE and is deliberately
broader; the delta is the design.

  - PR-4 pin 1: WITHDRAWN. It exists, in the direction that protects something.
  - R-14: premise corrected in the packet. Option A spends 46s on a workflow
    that does not gate; option B would delete real protection for a fiction;
    option C's live half is a two-line comment fix, done here.
  - N-3's exposure claim was too GENEROUS to CI: for a push that skipped the
    local gate there is no automatic check at all. Larger than stated, and not
    closable by editing smoke.yml.

WHAT LANDED. Measured: 749 of 877 test files are in no curated suite. The
plan's mechanism ("assign every orphan, or 749 exclusion reasons") is hollow at
that scale — glob topic-suites ("adr": tests/test_adr_*.py absorbs 172) satisfy
the assertion while changing nothing about what executes, which is precisely the
Third-Door objection the plan levels at G-7's own first formulation. All four
demonstrated incidents (#113, #136, negation-survives-articulation,
speculative-subject-lifecycle) were caused by a NEWLY LANDED orphan; none by a
legacy one.

So: a ratchet. tests/test_suite_membership.py + tests/full_only_baseline.txt.
New orphans fail. The baseline is enforced in BOTH directions — a promoted or
deleted file must leave it, so the list can only shrink — and its count is
pinned so bulk movement is a reviewed decision, in the discipline
test_volume_honesty.py uses.

Also: the gate-guarding pin now runs on the gate. test_cli_test_suites.py lived
in `fast`; the pre-push gate runs smoke + deductive. The pin guarding the gate
did not run on the gate.

Three sabotages, each OBSERVED RED: a new unregistered test file, a stale
baseline entry, the parity pin demoted out of smoke.

Note on the delta: now 12 (local 27, CI 15) because this session added three
pins locally. Under the corrected reading that is the design, not widening
drift — the invariant is CI-only == 0, and that is pinned. The registers now
say so; "ten files" was a measurement, never a target.

Process note: `git checkout --` during sabotage cleanup destroyed uncommitted
edits to core/cli_test.py, which were redone. Backups, not checkout, on files
with unstaged work.

Registers: G-7 CLOSED, H-12 amended, R-14 dissolved in the packet, PR-4
re-specified, N-9 added to plan §0.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:03:51 +00:00
Claude
98a6e8b439
feat(cognition): count the swallow — three silent backstops made visible (PR-9, H-11)
Wave 2's PR-9, whose authority is "mechanical PR" and which is gated on no
ruling. Widened by the 2026-07-28 triage from the accrual guard alone to all
three broad `except` blocks on the turn spine.

Each guard is DELIBERATE and stays: accrual is additive and must never crash a
turn; a pack/catalog failure must not take down logos authority; a probe
failure must not touch the served surface. Narrowing them to ImportError/
OSError — as an external assessment proposed — would convert a malformed
decision object into a turn-spine crash, trading silent failure for
served-surface failure. What was wrong is not the tolerance, it is that each
wrote a value INDISTINGUISHABLE FROM ITS HEALTHY CASE:

  - a raising read->realize->determine chain left the same None accrual a quiet
    turn leaves;
  - a logos decision that raised looked exactly like a turn where logos was
    never consulted (both: logos_decision_kind == "");
  - a crashed geometric probe recorded the same empty neighborhood as a probe
    that ran and found nothing — in the block whose entire job is producing the
    data that prices the anti-unification roadmap.

Silence, in the one layer whose constitution is "failures are typed, never
silent" (INV-34).

  chat/runtime.py         _accrual_swallows / _last_accrual_error, read via
                          accrual_swallow_telemetry(). _last_turn_accrual is
                          still None on failure, so _maybe_surface_determination
                          returns byte-identically — ADDITIVE BY CONSTRUCTION,
                          and pinned as such.
  cognition/result.py     logos_error on CognitiveTurnResult.
  cognition/pipeline.py   logos_error recorded; probe_error,
                          neighbor_scan_errors, graph_anti_unify_error on the
                          OOV telemetry.

tests/test_accrual_swallow_telemetry.py — 7 pins. The two behavioral ones were
OBSERVED RED against a build carrying the fields with the recording stripped,
so they discriminate rather than merely pass. Two test bugs of mine were fixed
along the way (wrong logos module path; CognitiveTurnResult has required
fields) — the tests were wrong, not the code.

Registered in BOTH TEST_SUITES["smoke"] and smoke.yml on creation, per #136.
Local/CI delta verified unchanged at exactly ten (local 25, CI 15, CI-only 0),
so this settles nothing R-14 has to rule.

Cleanup as found: three dead imports removed from chat/runtime.py
(_COGNITION_PACK_ID, _TEACHING_CORPUS_ID, engine_identity_for_config), each
confirmed to have no re-export dependence first — workbench/readers.py imports
engine_identity_for_config straight from core.engine_identity. ruff 4 -> 1 on
these paths; the survivor is a pre-existing structural E402.

Registers: H-11 CLOSED; PR-9 marked LANDED in the plan.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 03:50:42 +00:00
Claude
e025de7ad4
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
2026-07-28 03:17:54 +00:00
Claude
8f0ccfe317
docs(assessment): re-anchor the §5 provenance SHAs to the commits that landed
The branch was re-created with SSH signatures before landing, which changed my
commit SHAs. Four citations of the pre-registration commit — the verdict's
header and closing note, G-1, and the plan's Track A section — pointed at
dfc394d2, which is not in main's history. They now point at 299c92be, which is.

Same tree, same message, same ordering, signature added. The claim the verdict
rests on is unchanged and checkable at 299c92be: that commit contains the
thresholds and no results. Recorded as a note in the verdict document rather
than swapped silently, because a document citing a commit absent from its own
repository's history is precisely the failure mode its §1 catalogues — and this
one would have been self-inflicted.

Docs only.

[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.
2026-07-28 03:00:46 +00:00
Claude
7728a25dee
feat(rnd): ADR-0252 §5 run to a verdict — NO-GO, and the two prior GOs are void
Track A of docs/assessment/50-execution-plan.md §6, executed under its own
protocol. Criterion pre-registered at dfc394d2 (that commit carries the
thresholds as importable constants and NO results); this commit carries the run.

VERDICT: NO-GO. Full credit by ADR-0252 §5.4's own terms.
  docs/research/sme-experiment-verdict-797ebad5.md
  evals/structure_mapping/adr0252_s5/results/report-797ebad5.json
  deterministic_digest b3d9d27592e213104c51bcace7415fd819d722a1b06f7d0a5ca65bd5a234e4ec

53 cases, 1378 pairs, 0.0% non-convergence — no exception contributed to any
number. RS-A (structure-only) separates perfectly, AUC 1.0000, margin +0.0867,
and fails structure-sensitivity. RS-B (attribute-bearing) fails all three.

The mechanism, measured rather than argued: the similarity quotient that would
deliver attribute-invariance is the same quotient that annihilates structural
contrast. An add-vs-subtract minimal pair — one entity, identical numbers, one
relation kind changed — aligns at residual exactly 0.0, its two configurations
being related by a PROPER rotation about e1. Sweeping the attribute weight
(committed as diagnostic_sweep), structure-sensitivity fails at every setting,
and every regime where the SME property survives is a regime where attributes
contribute nothing: AUC 1.00 -> 0.97 -> 0.83 -> 0.69 as they begin to matter.

Scope stated narrowly: this refutes H1 for embeddings that encode role-structure
as point positions aligned by conformal Procrustes under similarity. The
argument is about the quotient, so it generalises across that class; it does not
refute every Cl(4,1) representation, and it does not touch the symbolic
structure-mapping lane already in evals/structure_mapping/.

Two findings that were on nobody's list:

N-8 — the experiment was NOT unrun. rnd/sme-experiment-v2 @ 96e5f468 is titled
"Verdict: GO" and rnd/structure-mapping-experiment @ fc9d0c14 carries an earlier
one. Neither survives inspection: attempt 1 leaked the S1-S4 label into the
embedding; attempt 2 was blind and then took its separability from
`except ValueError: res = 1000.0` — a solver exception counted as a distance —
on a corpus 46/51 of which is outside holdout_dev/v1 with nothing marked, with
duplicate graphs, colliding ids, and an extractor that was never committed. The
register, the plan and the ADR all read the same absence and inherited the same
error for nine days. A branch tip is not a record.

G-21 — the math reader returns a selected graph for 5 of 500 holdout_dev/v1
cases (1.0%), all one skeleton; 24/150 on the public lane. That is why §5.1's
four-structure corpus is not extractable, and it is a sharper measurement of the
comprehension frontier than G-3's construction count.

Registers updated: G-1 carries the verdict, H-10 confirmed and discharged, G-21
added, plan §0 gains N-8, Track A closed, synthesis frontier 2 rewritten.

Pins: tests/test_adr_0252_s5_blindness.py, each observed red before green
(label leak and duplicate-graph sabotage both caught).

Off-serving — evals/structure_mapping/adr0252_s5/ is imported by no serving
path, emits no answers, and changes no flag.

[Verification]: 797ebad5 + this branch — `uv run core test --suite smoke -q`
641 passed in 199.76s; `uv run ruff check` clean; report regenerated after lint
with an unchanged digest.
2026-07-28 02:55:31 +00:00
Shay
c3f1ddb643 docs(assessment): the pre-push hook makes the same parity claim (R-14, N-3)
scripts/hooks/pre-push — the automation of the AGENTS.md local-first protocol
— opens by describing its own step 1 as "the smoke suite — exact CI-gate
parity". It runs 23 files; the CI gate runs 13. That is the second in-repo
assertion of a parity that does not hold, the first being core/cli_test.py's
audio block, and it is the strongest evidence available that the drift was
never intended rather than a deliberate narrowing.
2026-07-27 17:37:58 -07:00
Shay
372bdf987d docs(assessment): Wave 0 — the execution plan and the ruling packet (R-1…R-14)
Phase 6 of the holistic assessment: what follows from it, and what it needs
ruled before anything else can be sequenced.

`50-execution-plan.md` — five waves (scrub/rule → delete → simplify/enforce →
accelerate evidence loops → automate last) plus five frontier tracks, covering
every G-1…G-20 and H-1…H-12 entry, with four hard dependency gates and nine
risks stated before they are incurred.

`50-rulings.md` — R-1…R-14. One decision per section: the evidence verified at
ed06dd64, the options enumerated, a recommendation with its reasoning, and the
exact diff that follows from each choice, so ruling costs one word. Nothing in
it recommends reversing a ratified decision; R-12 amends two ADRs' records
without touching either decision.

§0 of the plan carries SEVEN corrections to the assessment, all found by
reading code, workflows and ADR supersession banners — none by re-reading
documents. Four change planned work:

- N-3 (new) the local smoke suite (23 files) and smoke.yml (13) have diverged
  by 10 files. Severity is LOWER than this plan's first draft stated: AGENTS.md
  makes the in-worktree run the merge gate and CI secondary observability, and
  the local gate is the superset — so nothing is unguarded. What is real is one
  in-code comment claiming an equality that does not hold, and the push that
  skipped the local gate, for which CI is the only automatic check.
- N-4 the L10 soak HAS been run — 5000 beats, reboot at 2500, all four gates
  pass (contract.md, landed aed273b1). G-5's "never produced an artifact" is
  wrong. The debt is the ceremony: no committed report, no pinned
  deterministic_digest (the contract's own unmet closing instruction), no
  cadence. Prose with no pinned digest is testimony, not evidence.
- N-5 G-10's blocker does not exist. ADR-0264 §4.1 carries a self-supersession
  banner: R5 removed the 16-premise cap on 2026-07-26, and four bands would
  earn SERVE the moment a ledger is sealed. PR-13 is WITHDRAWN and the whole
  throughput frontier reduces to one ruling (R-8).
- N-7 the flag count is 28 of 32 RuntimeConfig booleans, not seventeen.

Plus N-1 (the orphan scan artifact: TEST_SUITES["full"] is a directory),
N-2 (the L10 pins run twice a day, post-merge and nightly), and N-6 (H-8 has a
fourth instance inside the code — two flag docstrings assert a production
profile the production profile does not have, which moves R-3 decisively
toward "incomplete flag set").

Docs only. No runtime behavior, no flag, no test changed.
2026-07-27 17:18:43 -07:00