2026-08-12

Semantic coherence and the harness plane

Kind: research note (PROCESS §1.1 — exploratory, pre-plan). Not a Gate 1 artifact. Date: 2026-08-12. All counts re-derived at write time; none carried forward. Origin: one working session that began as a defect report on docs/userstories and ended as a methodology finding. Organized by finding, not chronology.

Provenance key — applied per section, per the rule this session adopted:

MarkMeaning
MEASUREDmechanically established this session; command or file:line cited
OPERATORthe operator's position, stated by them
SESSIONanalysis produced in this session by the assistant
CHATGPT-ORIGINconcept originating in a prior ChatGPT discussion, per the operator
CONCURRENTlanded by another session during this one; cited, not re-derived

Related, and authoritative where they overlap this note: ADR 0041 · ADR 0040 · Palantir harvest · `language-as-archetecture.md` · `primitive-vs-architectural-usage.md` · `algorythm-design-for-agentic-coding-language-theory.md`

---

1. The originating defect

MEASURED. docs/userstories/ holds 245 story files, 112 in the 3.x series, of which 33 carry the since-retired suffix now spelled -sprint-doc. The 33rd (sprint-3.96-corpus-db-sprint-doc.md, 04a260cf) landed from a concurrent session during the session that produced this note — the convention is still propagating, because nothing defines it and nothing stops it.

Conformance against the canonical story template (~/.claude/workflow/templates/docs/userstories/README.md):

Template requirement3.x files carrying it (of 112)
**Period:**0
**Commits:**0
## US-N.x + AS A / I WANT / SO THAT + AC + Technical Decisions15 — the f48c4d00 batch (3.72–3.86) only
Indexed in docs/userstories/README.md0 (the index stops at sprint 1.0)

MEASURED. Header status contradicting the same file's body, confirmed by reading:

FileHeader saysIts own body says
sprint-3.71-party-detail-page-sprint-doc.md"Gate 1 draft. No code written"line 146: "Gate 2 (TDD build): done (5ec7e0d2). Gate 3: done (e3f49e76)"
sprint-3.76-lead-crm-dto-profile-sprint-doc.md**Status:** PLANNEDboth its stories shipped in 055e532e
sprint-3.83-contact-channels-sprint-doc.md"standing at Gate 1.5 (REQUIRED)""Backend build status — the repository/router built this session"; 9b56e62f on master
sprint-3.94-...-ui-sprint-doc.md**Status:** Gate 1contains a ## Delivered 2026-08-12 section

~10 further headers say PLANNED/draft over delivery language in the body. Candidates, not verified — the grep that found them was loose and is not evidence.

OPERATOR, 2026-08-12, this session: the suffixed convention is not to be used. New sprint docs follow the template name sprint-N-<theme>.md. This settles the artifact question; what remains is disposition of the 33 existing files (fold into their sprint doc, or define the class retroactively) — see §14. CONCURRENT: the same decision landed independently in ba5067e8 ("drop [the] state-in-name [suffix]") from another session the same hour, which is itself an instance of §6.4 — the fix had to be applied in two places because no single artifact declared the class.

---

2. Root cause: a conflict inside one instruction file

MEASURED. The instruction that produces these documents is /handoff §5 (.claude/commands/handoff.md:148), added e06979da, 2026-08-03 — the same day the first suffixed sprint-doc file appeared. It specifies the exact eight sections the files carry.

/handoff §6, the next section, says: "Route by `docs/PROCESS.md` §16 — never invent a new artifact type", and routes "Plan / AC / status → the sprint userstory doc."

§5 invents an artifact type and files it in the userstory directory; §6 forbids inventing one. Adjacent sections, same file. Neither is wrong alone. They cannot both be satisfied.

MEASURED. Three conditions let it spread rather than be caught:

1. PROCESS.md §1.1 — the artifact map whose own header reads "When confused, reread this before inventing a new convention" — has no row for the invented doc class. There was no place to check that would have said no. 2. PROCESS.md §2.2 binds a closed Status: enum to docs/userstories/sprint-NN-*.md. The suffixed files match that glob, so the enum governs them. /handoff §5 instead asks for "Process state — which gates are done," free prose. Zero of the suffixed files' headers use the enum. 3. tools-doc-truth then ratified the token in its filename grammar (crates/tools/doc-truth/src/numbering.rs:38) and wrote it an exemption (src/main.rs:957: "[suffixed sprint] docs share their sprint's number by convention — nothing to repair"), removing the one check that would have flagged the duplicate-numbering symptom. SPRINT-CURRENT.md independently records that D3 missed the 3.87 collision for exactly this reason.

SESSION. The lifetime ambiguity is why they go stale: a handoff-entry doc is written at a session boundary to be true at handoff; a userstory Status: is maintained through Gate 6. Nothing says who updates it after the build lands, so nobody does.

---

3. What generalizes

SESSION. Every finding above is a missing or contradictory edge in one graph. Nodes: instruction files · declared artifact classes (glob → required sections → status vocabulary) · enforcement sites (checker source, hooks) · produced artifacts. Edges: declares · routes-to · enforces · exempts · instantiates.

RuleEdge defectWould have caught the case on
A1 unrouted artifacta skill names a write path with no declares edge in §1.12026-08-03, day one
A2 prohibition vs practicefile carries "never invent an artifact type" and fails A1same day
B1 vocabulary bindingartifact matches a glob bound to an enum; field is off-enumfirst suffixed sprint doc
C1 tool ahead of processgrammar token live in checker source, zero hits in the instruction corpuswhen tools-doc-truth ratified it
C2 exemption with no owneran exempts edge whose exempted class has no declares edgesame
D1 non-monotonic self-claimheader status ordinal < a gate-completion claim in the same bodyat Gate 3

A1/A2/C1/C2 are set diffs. B1 is a field parse against a table. D1 is a status→gate-ordinal map plus a body scan for Gate N: done + sha. All decidable; no model in the verdict. A seventh (D2: doc says PLANNED, a commit names its sprint/US) is evidence-only and must never block — its precision is too low.

SESSION. Gate 0.5 result: this is not a new crate. tools-doc-truth already owns the library crate — class.rs::layout_diff is A1's declared-vs-actual diff applied to docs/ top-level entries; commands_diff is the same shape for commands; numbering.rs parses the sprint filename grammar; report.rs formats findings. This is D9–D13 inside `tools-doc-truth`, plus one registry input. Building a second tool alongside it would be the duplication Gate 4.5 exists to stop.

---

4. The shard pipeline: where a model is allowed to act

SESSION. Seven stages; the model touches one.

#StageWho
1parse corpus → section nodes (file, heading path, line span, content hash)code
2extract referents: write-paths, §-citations, gate ids, globs, field names, deontic verbscode
3deterministic rules A1/B1/C1/C2/D1code
4candidate pairing — sections sharing a referent, minus anything stage 3 decidedcode
5adjudicatemodel
6cache by hash(a)+hash(b)+prompt_version; recordcode
7ratchet against baseline — new blocks, resolved shrinkscode

MEASURED. Stage 4 is the critical path — every later stage is sized by it. The instruction corpus is ~121 files and ~1,383 headings (~/.claude/commands 812 · repo .claude 447 · both PROCESS.md 106 · CLAUDE.md 8 · WORKFLOW.md 10; global and repo-local copies overlap and dedupe by hash). Naive pairing is ~950k pairs. Keying on a shared referent collapses that to hundreds. The §5/§6 pair surfaces because both name docs/userstories/ and the artifact-type concept.

Three shard types, and only these:

The family with no token to grep: nothing in /handoff says who updates a handoff-entry doc after the build lands, and no pattern finds a missing sentence. Highest value, lowest precision — baseline it hard.

human-ratified.

The boundary, stated once: the model proposes, code counts, the repo records. It never counts findings, never sets baseline membership, never re-decides a section whose hash is unchanged, and never overturns a stage-3 set diff.

---

5. Recording, and what must be captured live

SESSION. operations-test-results (crates/operations/test-results) is the sink and was built test-type-agnostic in sprint 0.41. test_run / test_case / test_case_alias / test_result / metric_sample / test_finding, where TestFinding{kind, severity, rule, target, detail: Json} already fits: rule = A1…D1, target = file:line-span, detail = the adjudication with model and prompt hash. flake.rs and budget.rs are pure and already present — pointed at rules instead of tests, flake.rs answers the question that matters: a rule whose verdict flips across runs on unchanged input is a defective rule. application-test-results (0.42) exposes it; /staff/test-reports (0.43) renders it.

One real change: TestKind is a closed 7-variant enum (UnitUsability) and none fit. Adding a variant is a Gate 4.5 lift — correct here, since this is the library crates repo.

CHATGPT-ORIGIN, via algorythm-design-...md §L, and it corrects an assumption made earlier in this session: the harness must identify which measurements are captured during execution rather than reconstructed afterward. The recorder as first proposed was reconstruction-shaped. That discussion's own analysis rule 8 exists precisely because post-hoc reconstruction could not bound an experiment window inside a longer session. Correct split:

captured live        Run · ProcessRun · TaskRun · AgentRun · ModelRequest · ToolInvocation
derived after        Observation · Attribution · VerificationResult · SemanticConflict

SemanticConflict in that entity list is the same row D9–D13 emits. The harness entity list and the finding schema are one table.

---

6. Findings against the thesis

Section numbers refer to `language-as-archetecture.md`.

6.1 A degradation form the taxonomy lacks

SESSION. §3 names seven forms — semantic rot, specification drift, architectural drift, ontology rot, oracle rot, process rot, confidence amplification. All seven describe artifacts degrading downstream of intent, and §2's failure chain begins human intent → model interpretation, making intent the fixed point.

The suffixed-sprint-doc case is not drift. Both instructions were authored deliberately, are correct in isolation, and are mutually unsatisfiable. The corpus was born inconsistent.

Proposed addition — intent incoherence: a governing corpus containing mutually unsatisfiable directives, where generative speed propagates both faithfully. Its diagnostic property inverts the usual framing:

**A more obedient model makes this failure worse.** The 32 malformed artifacts existed *because* §5 was followed correctly. Model error was zero.

This matters because every anti-entropy mechanism in §38 assumes fidelity is protective. Here fidelity is the propagation vector.

6.2 Mechanism capture — missing from §38 and §45

MEASURED. Nine days after the contradiction was authored, the enforcement layer both encoded the token and exempted it (§2.3 above). §38 asks which rot each mechanism prevents or detects; this shows a third relation — a mechanism can be recruited by the rot it should detect. The word "convention" in that exemption is the tell: the checker asserted a definition that existed nowhere. Belongs in §45 as counterargument 21, and it is the strongest empirical support in the document for §29 — the harness was captured through an ordinary, well-intentioned commit.

6.3 A precondition for §8

SESSION. The ratchet fired on the retired suffix — filename grammar is a real click. But §8's stated precondition is "once an interpretation has been sufficiently verified," and no interpretation existed; there was repeated usage. §8 asks when ratcheting becomes harmful and answers "premature formalization" — this is distinct. Premature formalization freezes a contested meaning; this froze an absent one.

**A ratchet click requires a citable definition, not observed frequency.** Frequency-triggered ratcheting converts habit into law.

CONCURRENT. Independently adopted the same day in ADR 0041, final consequence: "Unsettled vocabulary (taxonomy class names, the word 'harness') is deliberately excluded from this ADR and from any DDL CHECK constraint; allowed values live in git-tracked seed data keyed by vocabulary version." That is this precondition, encoded, and it supersedes the weaker guard this session first proposed (an unclassified enum value).

6.4 The missing first gate

SESSION. §36's candidate gates run intent → requirement → ontology → architecture → acceptance contract → implementation plan → verified behavior. There is no gate before the first arrow. The contradiction was present at intent, and every downstream gate transmitted it faithfully.

The missing gate is corpus self-consistency: `intent → intent`. It is also the clearest case in the document for machine assistance being necessary rather than cheaper: detecting that §5 contradicts §6 requires holding pairs from ~1,383 sections in mind simultaneously. A person cannot. That argument is not currently in the thesis.

CHATGPT-ORIGIN, via primitive-vs-architectural-usage.md, reaches the same structural conclusion on a different axis — insert CLASSIFY THE ASK before recon, and evolve "workspace first" into CLASSIFY → DISCOVER → REUSE → COMPOSE → EXTEND → CREATE. The two are complementary axes of one missing preflight: `intent → intent` (self-consistency) and `intent → kind` (classification). Build as one stage, not two.

---

7. The two incorporated discussions

7.1 Ontology arm — primitive-vs-architectural-usage.md

CHATGPT-ORIGIN. Six architectural classes (domain_type, primitive, archetype, component, domain_module, application, plus support), with the critical rule primitives-* crate prefix != architectural Primitive.

MEASURED. This supplies §3's canonical semantic-rot example with a live instance: identity-parties holds Party (a domain type under those classes); infrastructure-transcription holds WhisperRsTranscriber (a component). The namespace asserts a class its contents do not have. The thesis should cite this rather than a hypothetical.

MEASURED, and it blocks that document's Phase 1 as written: it proposes adding architectural_role to the capability index, but docs/reference/capability-index.tsv (10,478 lines) is stamped "GENERATED by `tools-gen-ai-context` — do not hand-edit" and "text scan, not a parse: over-inclusive by design." It cannot be hand-edited, and the value cannot be derived — architectural role is an attribution, not an observation. It needs a separate hand-authored overlay joined on crate/symbol, with its own coverage number.

CONCURRENT. ADR 0041 §6 settles the general form: model-asserted rows carry provenance_class (operator | model | mechanical) and confidence, and a model assertion never silently overrides an operator- or git-derived value. The overlay is an instance of that rule, not a new decision.

7.2 Empirical arm — algorythm-design-for-agentic-coding-language-theory.md

CHATGPT-ORIGIN. TEST-001 (Sonnet coordinator, Haiku workers, 384 crate records) vs TEST-002 (dynamic workflow, observe → independent verify → reconcile, 388 records) over the same unchanged repository, with an adversarial framing — "the purpose is to find out whether the methodology actually helped, not to confirm the theory" — and a confounder list that includes same-model-family verification bias, which is thesis counterargument 11 made operational.

SESSION. This is a better §46 than §46: the thesis states H1–H12 with no experimental design, and this supplies one. It should be subordinated to it rather than kept in parallel.

MEASURED. The mechanical evidence engine for this experiment already exists in the working tree as crates/tools/crate-capability-audit (untracked, owned by a concurrent session at time of writing). Its own doc comment states the same intelligence boundary independently: "no LLM calls, no estimation … deliberately stops at what is mechanically countable … judgment calls belong in a synthesis pass that reads this report's output." It emits envelope(command, data) with SCHEMA_VERSION, which is the recording contract — one recorder, N evidence engines, each staying pure, no edits to their crate.

---

8. Nomenclature

MEASURED. "Harness" has three live meanings, none of them the operator's:

SenseWhereEvidence
test apparatusthis repo986 occurrences in docs/; the defining ones are foundation-test-support ("Postgres test harness"), desktop-gui-harness, tools-research-sweep ("research harness")
eval harnessMLlm-evaluation-harness and successors
agent harnessAI-assisted developmentthe dominant practitioner sense — the scaffolding that turns a model into an agent; every agentic coding CLI in this category is one

SESSION. The third is the damaging collision: a reader in this field hears "he built an agent loop," which is the opposite of the claim. And "harness" undersells the thing — a harness never rules a result invalid, whereas §27–29 describe something that owns state, evaluates transition predicates, grants tool authority, and owns the definition of verified. That is an authority.

Mapping to recognized terms:

ConceptRecognized term
§27–29 state ownership + owns "verified"control plane
§28 tool authority by process statepolicy engine; guardrails (weaker)
§26 independent oracleverifier; evals
§34 prompt compilation from statecontext engineering
§7 intelligence boundaryworkflow vs agent
§30 model routingmodel routing (already correct)
§8 semantic ratchetratchet (established in CI/lint)
the process halfspec-driven development
§31 judgment densityno established equivalent — likely original

SESSION. `control plane` is better but not clean. In networking the control plane is the smart, slow layer and the data plane is dumb and fast. Here the gradient inverts: the governing layer is deterministic code exercising no judgment, and the executing layer is a frontier model exercising all of it. A careful reader notices.

OPERATOR. Working term: harness plane. CONCURRENT: ADR 0041 explicitly leaves the word unsettled and out of any CHECK constraint pending a definition — consistent with §6.3 above. The term needs one definition line before anything encodes it. Proposed contrast, unratified:

**Process harness / harness plane** — the authority that owns development state, evaluates gate transitions, and defines what counts as verified. Distinct from an **agent harness** (scaffolding that turns a model into an agent) and a **test harness** (apparatus that executes tests). A process harness *contains* agent harnesses as replaceable components; an agent harness never contains a process harness.

That last sentence is a falsifiable structural claim rather than a naming preference.

---

9. The measurement opportunity

SESSION. crates/application/wiki/src/research.rs is transcript-harvest: it extracts ideas from research videos, parses YouTube URLs, content-hashes sources, and its ledger already refuses self-confirmation — an already-do row must cite evidence outside session transcripts, with a test pinning the spaced-spelling bypass. So term usage in practitioner discourse is measurable, not a matter of impressions:

corpus     harvested research-video transcripts, dated
extract    every occurrence of a term + N-word window                 (code)
classify   sense: agent-scaffolding | test | eval | process-authority | unqualified   (model)
cache      by content_hash                                            (code)
record     distribution, date-stamped                                 (code)

Same pipeline as §4, different corpus. It decides the naming question with a number rather than two opinions, and it generalizes:

1. The token tax, made visible. Models are trained on the public lexicon; where an internal binding diverges, every model arrives with the wrong prior and the correction is paid per session, forever. primitives-* is a measured instance. Output: per term, the gap between internal binding and dominant public sense, ranked and actionable. Pays on the next session. 2. A leading indicator. Whether rising sense-divergence precedes artifact divergence — testable retrospectively against the retired-suffix timeline using the 1,718 harvested sessions / 36,966 turn chunks already indexed. Either outcome is publishable; only one is a mechanism. 3. A wedge that generalizes off this repo. Any team with a governing corpus — CLAUDE.md, AGENTS.md, .cursorrules, skill files — has contradictions it cannot see, for the reason in §6.4. Nothing currently checks governance; linters, evals, and guardrails all check the product. 4. Positioning. A dated, reproducible term-sense corpus is citable. Low cost, real option value, no business model required.

Limits, stated plainly. Method novelty is not available — diachronic semantic change detection is an established subfield with published methods and shared tasks; the contribution would be the corpus and the application, and claiming otherwise fails §50. Video transcripts are a biased sample (popular, monetizable, English, recent) and ASR mangles technical terms — the specific failure mode that would corrupt a term-frequency study. Sense classification is an attribution per §6, so without an independent verify pass and a measured agreement rate the distributions are decoration. Item 2 is the valuable claim and the most likely to fail; test it before building on it.

---

10. The program: drift-origin

SESSION. Rule 14 — this session traced one contradiction to its source by hand in roughly fifteen tool calls. That procedure is repeatable, so it becomes a tested, registered Rust program rather than an agentic ritual repeated per incident.

The program has two halves that face opposite directions in time. Both are needed; only the first was described in §3–§4.

        HALF A — prospective                    HALF B — retrospective
   "what in the corpus cannot both be true"   "what produced this quirk"

        instruction corpus                        observed anomaly
               |                                         |
        parse + referents                         first-occurrence bisect
               |                                         |
        rules A1..D1  ------------------------->  origin instruction
               |            new rule learned            |
        findings                                  still-live check

10.1 Half A — corpus-static detection (tools-doc-truth D9–D13)

Described in §3–§4. Prospective: finds contradictions, off-enum fields, tool-ahead-of- process tokens, unowned exemptions, and non-monotonic self-claims before they produce artifacts. Lands inside tools-doc-truth, reusing class.rs::layout_diff, numbering.rs, report.rs. One new input: docs/reference/artifact-registry.tsv, not yet written.

10.2 Half B — drift-origin tracing (proposed tool, crates/tools/drift-origin, unbuilt)

Half A cannot find a quirk, because a quirk is by definition something noticed in output rather than predicted from the corpus. Half B runs the other direction: given an anomaly, name the instruction that caused it, and say whether that instruction is still live.

Anomaly taxonomy — the input kinds it accepts:

KindExample from this session
unsanctioned artifact classthe 33 suffixed sprint-doc files that no artifact map declares
off-vocabulary field valueStatus: headers outside the §2.2 enum
convention with no author"[suffixed sprint] docs share their sprint's number by convention"
recurring correctionthe operator repeating the same fix across sessions
silent scope changea doc whose body contradicts its own header

Pipeline:

#StageWhoMethod
1bound the anomalycodea matcher: filename glob, field pattern, or phrase
2first occurrencecodegit log --diff-filter=A across matches; earliest wins
3authoring windowcodecommit author-date ± window; identify concurrent instruction commits
4candidate originscodeinstruction-corpus commits in that window, plus sections whose referents match the anomaly (§4 stage 2 extractor, reused)
5session evidencecodetools-org-knowledge transcript corpus — sessions in the window whose context contained a candidate section
6attributemodelone shard: anomaly + candidate sections + session excerpt → `caused_by \
7still-live checkcodedoes the origin section still exist, unchanged, in the corpus
8promotecodeemit a proposed Half-A rule that would have caught it, plus a SemanticConflict row

Stage 8 is the point. Every traced origin becomes a new prospective rule, so the system's detection surface grows from its own incident history rather than from speculation. That is the thesis's §13 authoring → operating → repair triad, mechanized: repair produces the rule that makes the next occurrence an operating-mode catch.

Reuse position (Gate 0.5). No new corpus infrastructure. Stage 2–3 is git. Stage 4 reuses Half A's extractor. Stage 5 reuses tools-org-knowledge's transcript corpus (1,718 sessions / 36,966 turn chunks, already indexed and searchable). Stage 8 writes to operations-test-results per §5. Only the orchestration and the anomaly matchers are new.

Validation before it is trusted. The tool must reproduce this session's manual trace unaided: given the anomaly "files matching *-sprint-doc.md exist and no artifact map declares them," it must return /handoff §5, e06979da, 2026-08-03, still-live = true. That is the acceptance test, and it exists before the tool does.

What it must not do. Stage 6 is the only model stage, it is bounded to one shard, and insufficient_evidence must be a first-class verdict — a tracer that always names a cause is a confabulator. Blame attribution to a session or an author is out of scope permanently; the output names instructions, never people.

10.3 Sequence

1. Half A stages 1–4 run unarmed to measure the real candidate-pair count and the false-positive rate on the live corpus. No rule is armed until that number exists. 2. Half B built against the suffixed-sprint-doc trace as its fixture — the one case with a known, hand-verified answer. 3. Rules armed one at a time, each baselined shrink-only, per the mutation-gate precedent. 4. Term-sense measurement (§9) rides the same pipeline with a second corpus.

---

11. The standing contract

SESSION. Condensed from everything above into a reusable work contract. Full text proposed for a docs/reference/harness-plane-contract.md; summarized here so this note stands alone.

0  POSITION              mechanism owns state, counts, verdicts; you do not own "done"
1  CLASSIFY FIRST        kind before discovery; `unclassified` is legal and recorded
                         DISCOVER -> REUSE -> COMPOSE -> EXTEND -> only then CREATE
2  SPLIT EVERY CLAIM     OBSERVATION / ATTRIBUTION / INFERENCE / HYPOTHESIS
                         an unlabeled claim is a defect
3  INTELLIGENCE BOUNDARY code counts; decidable by grep/parse/set-diff -> write the check
                         recurring judgment is not judgment — propose the mechanism
4  SHARD THE UNRESOLVED  one bounded question + only evidence that could change it
                         narrow the question; never widen the shard to feel confident
5  RATCHET PRECONDITION  no encoding without a citable definition; frequency is not one
6  FRICTION AT MEANING   cheap: execution. expensive: intent->kind->architecture->
                         acceptance->oracle. never cross one silently
7  CORPUS CONSISTENCY    check an instruction set against itself before following it
                         two unsatisfiable instructions = a finding, not a judgment call
8  NON-SELF-CONFIRMATION name the independent check; tests prove behavior, never meaning
9  PROVENANCE            operator | this session | prior session | named source
10 RESEARCH AS BYPRODUCT every run emits measurements: counted, judged, cached,
                         unclassified, cost. work without measurement is half a run
11 STOP CONDITIONS       unclassified blocks the next step · instructions conflict ·
                         required field undefined · verification self-confirming ·
                         deterministic pass not yet written

---

12. Ambiguities found in this session's own output

Per the instruction that produced this note — scrutinized rather than smoothed.

1. `harness plane` is undefined. It is one day old, coined mid-session, and by §11 rule 5 nothing may encode it yet. §8 proposes a definition; it is unratified. ADR 0041 already excludes the word from any CHECK constraint, which is the correct holding position. 2. "The two discussions" was inferred, not confirmed. Three research files were newer than the thesis; two were read as the referents (§7). The third, research-prompt-anthropic-models-process-improvement.md, is a research prompt rather than a discussion and was excluded on that basis. If the intended pair differs, §7 is wrong. 3. The ~10 additional stale-header candidates in §1 are not evidence. The grep that produced them matched delivery language anywhere in a file, including in "out of scope" prose. They are listed as candidates and must not be counted. 4. `unclassified` vs `support` was proposed and then superseded. This session first proposed an unclassified enum value as the guard against forced classification; ADR 0041's vocabulary-version approach is the adopted mechanism. The earlier proposal is recorded here only so the reasoning survives, not as a live recommendation. 5. Convergence in this note is not independent evidence. TEST-002's shape, tools-crate-capability-audit's design, ADR 0041's provenance rule, and this session's shard pipeline are the same architecture — but they share an operator and overlapping model training corpora, across ChatGPT and Claude. That is thesis counterargument 11 applied to this note's own evidence. It shows the architecture is constructible, not that it is correct. 6. Novelty is not assessed here. Per §9's limits and the operator's disclosure that much of the thesis vocabulary is ChatGPT-originated, a model asked whether these concepts are novel is being asked about its own training distribution — the least reliable possible judge. §44's predecessor investigation must be a literature search. 7. Two source filenames carry typos (language-as-archetecture.md, algorythm-design-...md). tools-doc-truth D2 checks reference integrity; renaming before anything cites them is cheaper than fixing citers later. Not done here — they are not this session's files.

---

13. What would falsify the central finding

The central finding is §6.1: that a governing corpus can be born inconsistent, and that model fidelity propagates rather than corrects it.

It fails if any of these hold:

artifact type" is scoped only to findings-routing and never to §5's own instruction. This is the weakest joint in the analysis and deserves a direct reading before the finding is relied on.

against sessions that ran /handoff would establish or break the link.

number on the real corpus. Unmeasured; stages 1–4 should be run unarmed before any shard is sent to a model.

larger than the signal. Also unmeasured.

---

14. Open, and owed to the operator

fold each into its sprint doc, or define the class retroactively so the existing ones stop being unrouted. Either is a Half-A finding once the registry exists.

sprint (same pipeline, two corpora).

tools-crate-capability-audit, and therefore a cross-session agreement, not a unilateral one.

All research