Version: 1.3 (2026-08-15: §10 telemetry — DB query results, per-agent usage, agent-loop diagram, improvement findings incl. the S4 "first data point" correction; 1.2 added §9b–d verbatim prompts/one-liners/rationale; 1.1 added §8 diagrams, §9 transcript) Date: 2026-08-14 Status: study article. Research document only: no lexicon/DDL/code changes ride on it. Every number is from a committed artifact, cited; nothing is re-derived. The three retired coinages appear only via their lexicon rows (docs/reference/lexicon.tsv, ratified-vocabulary section), never as live vocabulary.
---
Abstract
<!-- Generated by the skeleton backfill (batch-3 pilot, 2026-08-16) from this document's own content; claude-sonnet-5, verbatim. --> This study measured how well people (or AI systems reading documents) agree on the words used to describe software architecture, and found that agreement is something you can actually count and improve. Using panels of independent reviewers, the team tested different vocabularies and found that adopting a more standard, well-defined set of terms produced much stronger agreement than the original draft wording, including one added term that resolved a previously unclear gap. The study also found that a few problem words had actually been used to mean two different things, and separating them into two distinct terms fixed the confusion. Once the improved vocabulary was adopted, it was locked in through the project's tools so the old, confusing terms are now automatically flagged. This matters because it shows that choosing clearer, more consistent language isn't just a stylistic preference — it measurably improves how reliably both people and AI systems understand the same documentation, and that improvement can be tracked over time.
1. The study
Thesis: vocabulary choice is measurable, and measurement changed the vocabulary. In one day this repo went from an unratified draft taxonomy to a ratified, measured, hook-enforced vocabulary — not by argument, but by inter-agent agreement runs whose losing terms are now lexicon rows. The wider claim this evidences: for a reader that is a model, word choice is an engineering parameter with a measurable consistency effect, and the cure for a contested word is a panel run, not a debate (harness-design-notes-2026-08-12.md:44-47).
Evidence, by evidentiary class (language-as-archetecture.md §50)
ESTABLISHED (measured this session, artifacts committed):
- Vocabulary agreement (S1/S1b). 540 votes, 18 independent sonnet panelists, 30-crate
deterministic sample. Draft vocabulary κ 0.889/0.787 (prose/typed); DDD/hexagonal κ 0.774/0.857 — a statistical tie resolved by the standing established-term rule, then settled outright by amendment: adding one measured-gap role (tooling) lifted the established set to κ 0.854/0.914, the study's best cell, with tooling taking 30/30 votes (s1-vocabulary-agreement-results.md; votes: s1-.tsv, s1b-.tsv).
- The two-referent term split. The draft term that covered both a reviewer-gated
state machine and a staged acquisition ladder resolved to aggregate (6/6) and pipeline (5/6) respectively — one word had been two kinds (s1-vocabulary-agreement-results.md, "The … split — confirmed").
- Panel never abstains. In 540 votes,
unclassifiedwas chosen zero times despite
being legal and instructed — "never guess past the evidence" does not survive contact with a closed enum unless abstention is structurally forced.
- Drift is now a time series (S4). Mechanized points: userstories 251 (08-13) →
268 (08-14), 08-12 hand count (248) as pre-series baseline; 52 duplicate sprint numbers stable across both runs; 257/268 files missing front matter (s4-s5-results-2026-08-14.md, incl. the 2026-08-15 correction — an 08-13 audit run predated the "first data point" claim, found by querying run_measurement, not by recall; daily cron: docs/runbooks/corpus-audit-cron.md).
- Oracle derivation varies with AC form (S5, n=6). Enumerated ACs produced more
semantically similar test oracles than manner-adverb ACs (Jaccard 0.559 vs 0.479); the worst item (0.329) was "renders correctly walking up parent_ids." Confound stated: count-spread reversed (1.67 vs 1.00) because compound/redundant enumerations diverge on assertion atomicity. And on one adverb AC, all three panelists identically derived a negative assertion the line never states — a dense shared prior masks the defect until the prior is not shared.
- Adverb profile. The hypothesized vague adverbs are nearly absent from 268
userstories (properly 10, quickly 4, significantly 0); the dominant adverbs are constraints (only 2,395, exactly 327, silently 317) — the category hypothesis was falsified and replaced with a residue rule (WORD-CHOICE.md §5).
- Prohibition fails where mechanism holds. The lexicon hook caught a banned phrase
in the very document arguing for the ban, under maximal salience and motivation (rule-decay.md:85-98).
SOURCE-DERIVED (graded external precedent):
- Against the Palantir harvest: 11 claims CONFIRMED, 0 CONTRADICTED, 3
IMPLEMENTED-DIFFERENTLY, 4 ABSENT (prior-art-evaluation-vocabulary-ontology.md). Strongest: identity-vs-observation as production doctrine — the same continuant/occurrent cut that diagnosed the two-referent term (palantir-foundry-aip-ontology-harvest.md:82,115).
- The ten-layer measurement model: a stage sequence ending in cause-assignment is
layers 1–6 plus a layer-9 attribution step, never one flat pipeline (docs/planning/MEASUREMENT-LAYERS-DECOMPOSITION.md; carried into architectural-vocabulary-ontology.md §3).
INFERENCE (stated as such):
- Structure is an interaction, not a main effect: typed presentation raised the
established vocabulary (+0.083 κ) and lowered the draft (−0.102). One 2×2 at n=30; the WorkerPacket investment proceeds on precedent, with this held as a caution.
- The S5 direction plus the rule-decay mechanism evidence together predict that the
word-choice rules will eventually earn a mechanism — but n=6 does not license one now.
Limits
One repo, one panel model (sonnet), 30 of 392 crates, 6 AC lines, one day. κ across different category counts is only roughly comparable (stated in the S1 doc). The S5 metric does not isolate atomicity. Every "always" above means "in this sample."
2. Incorporation plan
Landed this session (mechanism live, nothing to do):
1. Ratified vocabulary ddd-hexagonal-v2 — seed TSV row set + lexicon rows banning the three losing coinages + KEEP-listed roles (lexicon.tsv; architectural-role-vocabulary.tsv). 2. S4 drift series — daily 06:00 cron, runbook committed. 3. 90 classification rows + 22 metrics in corpus_sourcecode (git artifacts are the source of truth per ADR 0041).
Proposed and waiting — each names its deciding mechanism; the operator ratifies:
4. CHECK constraint on crate_classification.architectural_role for v2 — mechanism: migration; blocked only on the operator's go. 5. Operator rows for the two stable ambiguities — the geo crate (bounded_context vs value_object) and the API platform crate (application vs infrastructure) — mechanism: crate-classifications.tsv operator overrides; until then they stand as model rows at 0.67 confidence. 6. Forced abstention — add a per-item confidence field (and an explicit "abstain" path) to every future panel schema, so never-guess is checkable; motivated by 540/540 non-abstentions. 7. Crate/module renames onto v2 terms — mechanism: Gate 1 sprint per rename batch; deliberately sequenced after classification evidence (harness-design-notes-2026-08-12.md:199-202). 8. Larger S5 with an atomicity-controlled metric before any word-choice hook; until then WORD-CHOICE.md stays review guidance. 9. Audit tool gaps #240 (session-entry-suffix metric), #241 (vocabulary_size per version) — mechanism: issues already filed. 10. Rule-14 conversions — the S1/S5 extraction, agreement, and SQL-emission scripts become tools-org-knowledge corpus subcommands (ledger: s1-vocabulary-agreement-results.md).
3. From hand-run to compiled process
Every judgment this session performed by hand maps to a typed Action in the intake pipeline (harness-design-notes-2026-08-12.md §4), keyed to mechanisms the harvest already graded FACT-A:
| Done by hand this session | As a typed Action | Palantir precedent (harvest) |
|---|---|---|
| Panel invocation (18+3 subagents, prompts composed ad hoc) | ScorePanel { sample, vocabulary_version, arms, n } → AgreementReport | model proposes, harness executes under caller identity (:45,:108) |
| Consensus + DB insert (scripts) | RecordClassification { report } → rows with provenance_class enforced | all writes through typed Actions; staged by default (:36,:107) |
| Ratification recording (doc edits) | Ratify { decision, evidence } → seed-TSV row + doc entry, operator-only permission | per-action permissions; humans merge (:33,:107) |
| Payload construction (facts-only crate summaries) | packet compiler with per-kind context projection | property-level allowlist, configured not prompted (:46,:111) |
| Agreement metrics (scripts) | eval asserting on intermediate outputs, results to run_measurement | AIP Evals intermediate parameters (:50,:113) |
Avoid-list carried verbatim from the harvest's top-5 failure modes: source-schema mirroring; ontology rot (the S4 series is the countermeasure); edits-always-win + AI infill eroding trust (provenance_class + confidence, never silent override); curation cost landing on humans (derive mechanically, ratify semantically); lock-in (repo files + plain Postgres, open serialization). The one unclaimed novelty, exactly as sourced: no published SDLC ontology schema exists (harvest:132) — this repo's is repo-native and open by construction.
4. Addendum — the working reference tables
Every row traces to a ratification or a measurement; rows with neither are omitted, and the omissions are stated.
4a. Vocabulary (ratified ddd-hexagonal-v2)
| Term | Definition (as given to the S1b panel) | Evidence | Enforcement |
|---|---|---|---|
| entity | identity-bearing domain object type | no sampled crate resolved to it (sample gap, stated) | seed TSV; lexicon KEEP |
| value_object | immutable domain value, equality by attributes | money crate 6/6 | seed TSV; lexicon KEEP |
| aggregate | consistency cluster under one root | approval-workflow typed 3/3 (prose split — typed fields needed) | seed TSV; lexicon KEEP |
| bounded_context | domain module with its own model + language boundary | agreements crate 6/6 | seed TSV; lexicon KEEP; lexicon prefer target |
| capability | reusable technical capability offered as a service | audit-log, knowledge-index, prompts 6/6 each | seed TSV; lexicon KEEP |
| port | interface/contract at a boundary | 1 vote total in 540 (near-unused at crate granularity, stated) | seed TSV; lexicon KEEP |
| adapter | binds a port/capability to a technology | all nine forge wrappers + two protocol crates, 30/30 in v2 | seed TSV; lexicon KEEP |
| pipeline | ordered multi-stage transformation | prose-shard 6/6; acquire 5/6 | seed TSV; lexicon KEEP; lexicon prefer target |
| application | end-user application / composition root | split on the API crate (0.67) — see plan item 5 | seed TSV; lexicon KEEP |
| infrastructure | technical substrate the running system stands on | API crate's rival label (0.67) | seed TSV; lexicon KEEP |
| tooling | developer/operator tool for working ON the system | 30/30, closed v1's whole gap | seed TSV; lexicon KEEP |
| unclassified | none fits confidently; legal answer | chosen 0/540 times — needs forced abstention (plan item 6) | seed TSV |
4b. Ontology classes (four dimensions + the layer correction)
The full table is architectural-vocabulary-ontology.md §2 — referenced, not restated (STYLE.md §4). What it binds: each v2 term's kind (continuant/occurrent), identity, boundary role, direction. Correction in force: a pipeline whose final stage assigns a cause is layers 1–6 plus a layer-9 attribution step (ten-layer model); the tier boundary stays explicit. Open: nothing else — the table is complete over v2.
4c. Graph relations (typed edges over v2)
bounded_context CONTAINS aggregate | entity | value_object | capability
aggregate COMPOSES entity + value_object (root IS-AN entity)
capability USES entity | value_object
pipeline COMPOSES capability (ordered; final attribution stage is layer 9)
port EXPOSES capability
adapter IMPLEMENTS port
application COMPOSES bounded_context (via port + adapter)
policy CONSTRAINS aggregate | pipeline (OPEN: policy's home — rule set vs
submission criterion vs domain service —
goes to a scoring run, not decided here)
Not a hierarchy (language-as-archetecture.md:688-690): only CONTAINS/COMPOSES edges are even partially ordered.
4d. Phrases (operator-facing, by grammatical category)
| Category | The one check |
|---|---|
| names | reuse = same referent; coinage = no established term + defined at birth + hook-recorded |
| common nouns | established? single-referent (grep)? entails ≥3 checkable consequences? |
| verbs | "X the ___, producing ___" — both blanks forced, or sharper verb |
| adjectives | in an AC: enum variant or threshold, else delete; in prose: the fact underneath |
| adverbs | manner adverb in an AC = unwritten enumeration; only/exactly/never stay; deliberately stays |
Full rules: WORD-CHOICE.md. Phrase-level substitutions already in force: the ADR-0028 vocabulary table and harness-design-notes §3's working-name → established-term table — cited, not restated.
4e. Procedures (which decision runs through which mechanism)
| Decision | Mechanism |
|---|---|
| score a contested term | panel run per the h8 method (independent agents, closed enum, agreement metric) |
| ratify a winner | operator, recorded in the results doc + seed TSV row set |
| enforce a ratified term | lexicon row (prose/code substring) · ingest validation (enum) · CHECK constraint (pending, plan item 4) |
| measure drift | corpus audit daily cron (runbook: corpus-audit-cron.md) |
| retire a rule vs keep it | evidence from the S4/S5 series + rule-decay tells; operator ratifies |
4f. Policies (invariant · mechanism · or honestly a convention)
| Invariant | Mechanism |
|---|---|
never guess past the evidence (unclassified legal) | convention — 0/540 abstentions prove it; plan item 6 is the owed mechanism |
| model rows never override operator rows | PK (crate, vocabulary_version, provenance_class) — mechanism |
| derived DBs never authoritative | ADR 0041; git artifacts committed first — mechanism by procedure, hook-checked partially |
| burden of proof on the coinage | lexicon header + Gate 1.3 hook — mechanism at the word level, convention at the concept level |
| no attribution in artifacts | pre-commit hook — mechanism |
5. Sharding to AI — semantic mediation as the projection discipline
The principle (language-as-archetecture.md:520): local software observes, analyzes, and transforms private data, disclosing to AI only the smallest semantic representation sufficient for one narrowly defined problem. The unit is the structural shard (:477): counts, types, heading levels, opaque identities, state transitions — never source content.
This repo already builds them: domain-prose-shard (heading LEVEL and per-paragraph statistics, body text never in the shard), domain-table-shard, domain-transcript-shard (the ADR 0035 family), and infrastructure-dom-reduce (two jobs at once: fit a large page into a small model's context AND keep page content out of whatever reads the result — its own crate description).
The eleven-step mediation process (:524-536) is the recipe for every AI-bound packet: observe locally → normalize deterministically → apply known rules → isolate the residue → fix the exact question → define the allowed answer type → remove what cannot affect the answer → request the inference → verify locally → preserve the accepted interpretation → compile repeated behavior into mechanism.
S1 was a live worked example of exactly this, and it is why the anti-hallucination property held by construction: panelists received only {name, path, purpose, dependencies} (step 7 — nothing else could affect a role choice), a fixed question and a closed enum (steps 5–6), no repo access (step 1 stayed local); agreement was computed locally (step 9), consensus preserved as provenance-stamped rows (step 10), and the repeatable parts are ledgered for compilation into tools-org-knowledge (step 11, rule 14). The same shape is Palantir's property-level context projection (harvest:46,:111) — "configured, not prompted" — arrived at independently from the privacy side.
How to break work down for AI, stated as a rule: never hand the model the artifact; hand it the shard that the fixed question needs, with the answer type closed. If the shard cannot be defined, the question is not yet narrow enough to delegate — narrowing it is the human's (or the intake harness's) job, not the model's.
6. Proposed harnesses across the development states, intake → deployment
One row per state; established names per harness-design-notes §3. "Exists" cites a live mechanism; "proposed" names its dependency.
| State | Exists today (mechanism) | Proposed harness (dependency) |
|---|---|---|
| intake | lexicon normalization at commit (Gate 1.3 hooks) | structured intake form: dumb normalization + residue-only typed interview (§4 dumb/smart split) |
| requirements (user stories) | sprint-doc convention; S4 measures its drift (257/268 missing front matter) | scaffolder emitting typed front matter + kind→path+name function (#240 closes the metric gap) |
| kind classification | v2 vocabulary + panel procedure (this study) | ScorePanel/RecordClassification Actions (§3 table above) |
| capability lookup | capability-index.tsv | index query inside packet compilation (no architectural_role column yet — noted in harness notes §3) |
| pattern selection | — (registry missing, harness notes artifact map) | pattern registry, build-order item 4 |
| plan / work packages | prose handoffs; WorkerPacket shape specified (language-as-archetecture.md:1028-1039) | packet compiler with shard-based context projection (§5) |
| implementation | Gate 2 TDD (/tdd) | step-runner: temporal injection, typed wireframes, probe-owned done (harness notes §5); substrate infrastructure-agent |
| verification | Gate 3 CONTRACT_DIFF + tools-browser-test | evals asserting on intermediate typed outputs, results to application-test-results (harvest:50) |
| review | Gate 4 reviewer agent | adversarial verify panels where a finding can fail more than one way |
| deployment | push gates (migration-lineage pre-push, observed live) | constraint-solver gates: manifest-declared dependency ranges; suppression-window-on-failure, rollback exempt (harvest:72-75); deployment contract artifact (missing, harness notes §3) |
| retrospective / knowledge capture | run_measurement + daily audit cron; /retro | estimate-vs-actual calibration curve → mechanical routing (S6; blocked on the step-runner emitter) |
The through-line: each state's harness is the same three moves — type the artifact, project the shard, own "done" with a probe — applied at a different tier. The states where all three exist are already calm (commit, verify); the states still running on prose (intake, plan, deploy contract) are where this session's drift numbers come from.
7. Reading path for a newcomer (five documents, in order)
1. docs/reference/WORD-CHOICE.md — five checks before writing your next story; the only page you need before contributing prose. 2. docs/research/s1-vocabulary-agreement-results.md — why the vocabulary is the one it is: the measurement, the ratification, the residual ambiguities. 3. docs/research/architectural-vocabulary-ontology.md — what kinds of things exist and how they relate; the continuant/occurrent split that diagnosed the failure. 4. docs/research/study-programme-handoff.md — what is measured, what is ratified, what is still owed (S6), and which decision each study gates. 5. docs/research/prior-art/palantir-foundry-aip-ontology-harvest.md — the graded industrial precedent: ten mechanisms to steal, five failures to avoid, and the unclaimed territory this programme is walking into.
8. Diagrams — signal flow and graph model, as done vs as recommended
8a. Signal flow as actually done this session (the measured loop)
Every arrow below was exercised at least once on 2026-08-14; none is aspirational.
operator ask (free prose)
│
│ human-side rewrite: WORD-CHOICE five checks
│ (forced verbs · closed nouns · no unbacked adjectives)
▼
typed prompt ────────────────► research document (git, committed)
│ │
│ ▼
│ operator RATIFIES ──────────────┐
▼ ▼
panel run mechanism lands:
shard payload (facts only) lexicon row
closed answer enum seed-TSV row set
n independent agents daily audit cron
│ │
▼ ▼
agreement metrics ──► run_measurement (time series) ◄── corpus audit
│ │
└──── git artifacts ◄──────┘
(votes TSV, results doc = source of truth, ADR 0041;
DB rows are derived, provenance-stamped)
The loop's one manual jump — the operator-side rewrite at the top — is exactly the input the harness cannot fix (operator-word-choice-handoff.md's founding premise), and it is the step §8c moves into the control plane's dumb/smart intake.
8b. Graph model of the ratified ontology (v2 terms, typed edges)
application
│ COMPOSES (wired via port + adapter)
┌───────────────┴────────────────┐
▼ ▼
┌─ bounded_context ──────────────┐ ┌─ bounded_context ─┐
│ │ │ … │
│ aggregate │ └───────────────────┘
│ ├── entity (root, IS-AN) │
│ └── value_object │
│ │
│ capability ◄── USES ── entity │
│ │ │
└──────┼─────────────────────────┘
│ EXPOSES (across the boundary)
▼
port ◄── IMPLEMENTS ── adapter ── stands on ── infrastructure
▲
│ COMPOSES (ordered stages;
│ a final cause-assigning stage is layer-9 attribution,
│ outside the stage tier — ten-layer model)
pipeline
tooling ── works ON the system, not part of it (30/30 measured)
policy ─── CONSTRAINS aggregate | pipeline (home still OPEN → scoring run)
Not a hierarchy: only COMPOSES/CONTAINS edges are even partially ordered (language-as-archetecture.md:688-690).
8c. Signal flow as recommended — the control plane the research points at
The same loop with the manual jump absorbed and every judgment slot fenced (harness-design-notes-2026-08-12.md §4-§5; Palantir mechanisms per harvest grades):
operator ask (free prose — the ONLY untyped input left)
│
│ [dumb] lexicon normalization — every substitution logged as a row
│ [dumb] residue detection — undefined terms flagged mechanically
▼
[smart] typed interview — asks ONLY about residue, typed answer sets
▼
[dumb] intent record — versioned row; this IS the oracle
▼
[dumb] packet compiler — per-kind shard projection (§5):
fix the question → close the answer type →
strip everything that cannot affect the answer
▼
[smart] judgment slots only — difficulty class, ordering, subagent split
▼
[dumb] step-runner — temporal injection · typed wireframes ·
done owned by a probe, never by the model's claim
▼
[dumb] deployment gates — manifest-declared dependency ranges,
suppression-window-on-failure, rollback always exempt
▼
run_measurement ── estimate-vs-actual calibration ──► routing
compiles from
judgment into
fitted mechanism
Reading the two flows against each other: 8a already has the right SHAPE (typed input, independent scoring, human ratification, mechanism, measurement) — what 8c adds is that no smart step ever touches an unprojected artifact, and no smart step ever owns "done."
8d. Recommendations (each cites where the articles already establish it)
1. Absorb the operator rewrite into intake. The five WORD-CHOICE checks ran in the operator's head this session; 8c's two dumb steps + residue-only interview make them mechanical (§2 plan; harness-design-notes §4). Kills: ambiguity entering at the top. 2. Force abstention structurally. 0/540 unclassified votes proves an instruction cannot hold it; every panel schema gets a confidence field and an abstain path (§2 item 6). Kills: guessed classifications hardening into rows. 3. Every AI-bound packet is a shard. S1's payload discipline (§5) becomes the packet compiler's contract — if the shard cannot be defined, the question is not yet delegable. Kills: content leakage AND prior-driven invented assertions (the S5 unforced-negative finding). 4. Probe-owned done at every state. §6's through-line applied to the states still running on prose (intake, plan, deployment contract) — the states where the S4 drift numbers come from. Kills: the apology loop (harness-design-notes §5). 5. Ratify only through the recorded path. ask → doc → operator → seed/lexicon row — the path §9's transcript shows working five times in one day; make it the only write path for vocabulary (typed Ratify Action, §3). Kills: silent re-coinage.
9. Appendix — the session transcript that produced these documents
Operator messages verbatim (spelling as sent); responses compressed to the artifact produced. Full responses are in the session record; every artifact is committed.
| # | Operator (verbatim) | Response → artifact (commit) |
|---|
<!-- NAMING-ALLOW: the rows below quote the operator's prompts verbatim, including the repository path as it was typed at the time --> | 1 | "read and output the full prompt here rust-primitives/docs/research/operator-word-choice-handoff.md" | prompt reproduced in chat | | 2 | "run it" | WORD-CHOICE.md — five-category word-choice guide; adverb hypothesis falsified by count (3f3d4924) | | 3 | "convert this to unambiguous model language: What words structure architecture ontology semantics taxonomies should I switch to and refactor my code accordingly" | four-step score→ratify→plan→apply rewrite, in chat | | 4 | "do no run this do not replace any files only create it as a research document that shows what words we should be using. re-output the previous as a prompt before engaging" | recommended-architectural-vocabulary.md — predicted B-term mapping (75e2de25) | | 5 | "now reproduce the prompt this time examining the ontological dimensions" | architectural-vocabulary-ontology.md — continuant/occurrent diagnosis, four dimensions, typed edges (99a5911b) | | 6 | "output a prompt per our findings for 'What other studies should we conduct in order to get to the future me place of correct development processes with fixed naming and meanings that conform to unambiguous understanding by the model'" | study-programme prompt, in chat | | 7 | "run it" | study-programme-handoff.md — S1–S6 with typed fields + dependency graph (2bf706ca) | <!-- NAMING-ALLOW: the row below quotes the operator's prompt verbatim --> | 8 | "write a prompt for this following our model communication hypothesis 'and add this into the context /home/nwheelo/projects/rust-primitives/docs/research/prior-art/palantir-foundry-aip-ontology-harvest.md and evaluate" | evaluation prompt with closed verdict enum, in chat | | 9 | "run it" | prior-art-evaluation-vocabulary-ontology.md — 18 claims: 11 CONFIRMED / 0 CONTRADICTED (3d67fe19) | | 10 | "ratify the S2/S3 fast path" | ratification recorded; S2→confirmation arm, S3→telemetry (46250ac3) | | 11 | "run S1" · mid-turn: "remember document all steps in this session for rule 14" | S1 2×2 panel, 360 votes, statistical tie + rule-14 ledger (a804d624) | | 12 | "ratify B plus tooling role and rerun the panel" | S1b: ddd-hexagonal-v2, κ 0.914 study-best, tooling 30/30 (05cc3b2d) | | 13 | "enter the v2 terms into lexicon.tsv" | lexicon ratified-vocabulary section; three coinages banned, twelve roles KEEP (b8898a22) | | 14 | "thre are still studies" · mid-turn: ten-layer model shared ("consider this we just added it to the original session…") | S4 first mechanized data point + S5 n=6 run + layer-9 correction (9639980a) | | 15 | "schedule the audit cron" | daily 06:00 crontab + runbook (6248599b) | | 16 | "create a correct prompt following the research data: 'create a study article from a consolidation of the facts found in our research. create a plan and make suggestions on how to incorporate the data into our process. And discuss how this could become programmatic with fixed words and meanings across a future perfect ideal process that can create a harness to develop software better like palantir'" | study-article prompt, in chat | | 17 | "add this: create an addendum of the perfect phrases ontologies semantics taxonomies graph relationsihops and proceedures policies to use" | addendum spec (tables a–f) appended to the prompt | | 18 | "proceed to run this. Also us mm to send me the pdfs to my email accuont" · interrupts: "can you also include a section 5 on sharding to ai and how to break it down using semantic mediation" · "and maybe section 6 proposed harnesses through the states of development from intake to deployment" | this article, sections 1–7 (74eae670); six PDFs emailed (mm 1a0024fae30e2edb) | | 19 | "did you include attache them ? send the included also" | yes (6 attached); eleven cited-source PDFs emailed (mm 1a00251b228bef25) | | 20 | "Edit this. Add the transcript from me and your responses that lead to the creation of the documents. In the articles include signal flow and graph model diagrams…" | this version: §8 diagrams + recommendations, §9 this transcript |
The transcript is itself evidence for §8a: twenty turns, five ratifications, zero re-litigated decisions — the ask→doc→ratify→mechanism loop held for a full working day with the operator in the tiebreaker seat and every decision landing in a committed artifact.
9b. The authored prompts, verbatim
The assistant-side half of the loop: each operator ask was converted into a typed prompt before execution. Reproduced exactly as output in the session.
P1 — turn 3, the unambiguous-model-language rewrite:
1. Score, don't argue: run H8 per docs/research/h8-vocabulary-scoring-handoff.md —
vocabulary A (draft: domain_type/primitive/archetype/…) vs B (DDD/hexagonal:
entity/aggregate/bounded_context/port/adapter), 2×2 with presentation structure,
over the ~300-crate estate. Output: agreement rate per vocabulary + disagreement cases.
2. I ratify the winners into lexicon.tsv (terms enter as prefer-rows; losers as banned synonyms).
3. Emit a rename plan from the classification rows: each crate/module/symbol named with a
losing term → current name, ratified name, citers. No renames before ratification.
4. Apply the plan in dependency order, one crate per PR, Gates 1–6 each.
P2 — turn 4, the research-document narrowing:
Create docs/research/recommended-architectural-vocabulary.md — a research document ONLY.
Do not run H8. Do not edit lexicon.tsv, any DDL, or any existing file. No renames.
Content: for each vocabulary-A draft term (domain_type, primitive, archetype, component,
domain_module, application, support), the recommended established replacement from
vocabulary B (DDD / hexagonal), reasoned per docs/reference/WORD-CHOICE.md's three-question
check (established? single-referent? entailment-dense?). Split `archetype` into its two
senses per h8-vocabulary-scoring-handoff.md:56-82 before mapping. Point to, don't restate,
the harness-design-notes §3 pipeline-stage table for the phrase-level substitutions.
Status header: proposal, unratified — predictions from the training-data-density rule;
H8 is the experiment that tests them; the operator ratifies. Commit the one new file.
P3 — turn 5, the ontological dimensions:
Create docs/research/architectural-vocabulary-ontology.md — a research document ONLY.
Do not run H8. Do not edit lexicon.tsv, DDL, or any existing file. No renames.
This extends recommended-architectural-vocabulary.md one level down: not WHICH word, but
WHAT KIND OF THING each recommended class predicates. For each B-term (entity, aggregate,
value_object, bounded_context, capability, port, adapter, pipeline, application,
infrastructure): state its ontological dimensions — identity (id-bearing vs value),
temporality (static structure vs staged sequence), boundary (owns a consistency/language
boundary or lives inside one), directionality (offers vs requires), and the is-a /
part-of / depends-on relations between the classes. Ground it in
language-as-archetecture.md §15 (ontology before architecture), §17 (architectural
ontology), §19 (lexicon vs taxonomy vs ontology vs grammar), and STYLE.md §2
(classification is attribution — defeasible, assigned from evidence, never given).
Status header: proposal, unratified; same falsifiers as the vocabulary doc.
P4 — turn 6, the study programme:
Create docs/research/study-programme-handoff.md — a research document ONLY. Do not run any
study, edit lexicon.tsv, or touch existing files.
Question: working backward from the end state already assumed in
operator-word-choice-handoff.md (harness perfected, naming fixed, meanings stable,
model interpretation unambiguous), enumerate the studies still required to get there —
the gap between what is measured today and what that end state requires proven.
Ground in what exists; cite, don't re-derive: H8 pending (h8-vocabulary-scoring-handoff.md,
including its 2x2 vocabulary-x-structure axis) · the empirical_hypotheses and
falsification_conditions sections of language-as-archetecture.md (~:2147, :2163) ·
measured drift (harness-design-notes-2026-08-12.md §8) · rule-decay.md (which written
rules survive) · the adverb frequency count (WORD-CHOICE.md §5) · run_measurement +
crate_classification (corpus/0001_corpus_init.sql) as the storage every study writes to.
For EACH proposed study, five typed fields, none omitted:
hypothesis — one falsifiable sentence
method — panel/corpus/A-B design; independent agents where agreement is the metric
metric — the number produced, and the threshold that decides
data source — a file/table that exists in this repo today (file:line), else state
"requires new instrumentation" explicitly
decision gated — which ratification the result unlocks, and that the operator ratifies
Order the studies by dependency (which unlocks which), not importance. Name each study by
an established experimental term (agreement study, ablation, longitudinal drift measurement,
calibration curve) — no coinages. An area where no study is needed because the mechanism
already enforces the property is a finding: list those separately as "closed by mechanism".
Status header: proposal, unratified. End with the dependency graph in one text block.
P5 — turn 8, the prior-art evaluation:
Read docs/research/prior-art/palantir-foundry-aip-ontology-harvest.md in full FIRST — it
is the required context for everything below: the graded industrial precedent whose design
consequences harness-design-notes-2026-08-12.md §9 already distilled (cite that section,
don't re-derive it).
Create docs/research/prior-art-evaluation-vocabulary-ontology.md — a research document
ONLY. Do not run any study, edit lexicon.tsv, or touch existing files.
"Evaluate" means, concretely: for each claim in this session's four documents —
docs/reference/WORD-CHOICE.md, docs/research/recommended-architectural-vocabulary.md,
docs/research/architectural-vocabulary-ontology.md,
docs/research/study-programme-handoff.md — classify its relation to the Palantir
precedent into exactly one of a closed enum:
CONFIRMED — they built the equivalent and it held in production; cite where
CONTRADICTED — they tried it and it failed; cite the failure and its cause
IMPLEMENTED-DIFFERENTLY — same problem, different mechanism; name both mechanisms
ABSENT — no precedent exists; state whether that strengthens the
novelty claim or just leaves the idea untested
Every classification cites file:line on BOTH sides (our doc and the harvest doc).
An absence is a finding, never a gap to paper over.
Output: one table per evaluated document (claim | verdict | our cite | their cite | one-line
reasoning). End with the delta to study-programme-handoff.md's dependency graph: which of
S1-S6 the precedent answers or reprioritizes without running, and which it cannot answer
because Palantir published no SDLC ontology schema (harness-design-notes-2026-08-12.md:222-225).
Status header: proposal, unratified; the operator ratifies any reprioritization.
P6 — turn 16, the study article (this document's own commission):
Create THREE artifacts, in this order, each grounded in the session's measured record —
cite file:line, never re-derive, never invent a number:
1. docs/research/language-harness-study-2026-08-14.md — a study article consolidating
what was MEASURED, separated by evidentiary class (per language-as-archetecture.md §50:
ESTABLISHED / SOURCE-DERIVED / INFERENCE): the S1/S1b agreement results (κ per cell,
the two-referent split, tooling 30/30 — s1-vocabulary-agreement-results.md), the S4
drift series first point + 08-12 baseline (s4-s5-results-2026-08-14.md), the S5
oracle-derivation result WITH its stated atomicity confound, the adverb frequency
finding (WORD-CHOICE.md §5), the prior-art verdict counts (11 CONFIRMED / 0
CONTRADICTED — prior-art-evaluation-vocabulary-ontology.md), and the rule-decay
mechanism evidence (rule-decay.md:85-98). An article, not a log: thesis first
("vocabulary choice is measurable, and measurement changed the vocabulary"), then
evidence, then limits (n=30 crates, n=6 ACs, one model, one repo).
2. In the same file, a numbered incorporation plan: for each measured finding, the
process artifact it lands in (lexicon row · seed TSV · gate text · WORD-CHOICE rule ·
corpus metric), what is ALREADY landed this session (ratified v2 vocabulary, lexicon
entry, S4 cron) versus what is proposed-and-waiting (CHECK constraint · renames ·
operator rows for the geo/api ambiguities · forced confidence field · larger S5),
each proposal with its deciding mechanism and "operator ratifies" stated.
3. A final section: the path from here to a compiled process — how each judgment this
session performed by hand (panel invocation, consensus, ratification recording,
metric insertion) becomes a typed Action in the harness-design-notes §4 intake
pipeline, keyed to the Palantir mechanisms already graded in the harvest (all writes
through typed Actions · model proposes, harness executes · property-level context
projection · evals on intermediate outputs) AND its top-5 failure modes as the
avoid-list. State the one unclaimed novelty exactly as sourced: no published SDLC
ontology schema exists (harvest:132) — ours is repo-native and open by construction.
Constraints: research document only; no lexicon/DDL/code changes; the three banned
coinages appear only via their lexicon rows, never as live vocabulary; evaluative
adjectives only where a measured number backs them; end with a one-page reading path
for a newcomer (which five documents, in what order, and why).
P7 — turn 17, the addendum spec (appended to P6):
4. In the same file, an ADDENDUM — the working reference tables, one per kind, every row
traceable to a ratification or a measurement (no aspirational rows; a row with neither
is omitted, and the omission is stated):
a. Vocabulary — the ratified ddd-hexagonal-v2 role set, one row per term: term ·
one-line definition (as given to the S1b panel) · measured agreement evidence ·
the lexicon/seed-TSV row that enforces it.
b. Ontology classes — the four-dimension table from
architectural-vocabulary-ontology.md §2 (kind: continuant/occurrent · identity ·
boundary role · direction), updated to v2 terms and carrying the ten-layer
correction (a stage sequence ending in cause-assignment = layers 1-6 + a layer-9
attribution step, MEASUREMENT-LAYERS-DECOMPOSITION.md).
c. Graph relations — the typed edge set (CONTAINS · COMPOSES · USES · EXPOSES ·
IMPLEMENTS · CONSTRAINS) restated over v2 terms, with §15's not-a-hierarchy
caution and the open policy-edge question carried as open.
d. Phrases — the operator-facing phrasing rules by grammatical category
(WORD-CHOICE.md's five checks, compressed to one row each) plus the ADR-0028-style
phrase substitutions already in force, cited not restated (STYLE.md §4).
e. Procedures — which decision runs through which mechanism: score → panel run
(h8 method) · ratify → operator, recorded in the results doc + seed TSV · enforce
→ lexicon hook / ingest validation / CHECK (pending) · measure → corpus audit cron
(runbook cited).
f. Policies — the standing invariants with their mechanism named per Gate 1.3
(a policy with no mechanism is labeled convention, honestly): never guess past
the evidence (unclassified is legal) · model rows never override operator rows
(provenance_class PK) · derived DBs never authoritative (ADR 0041) · burden of
proof on the coinage (lexicon header).
Format: tables a-f are the machine-facing half (fixed columns, one row per term/edge/
rule); each carries a two-sentence prose preamble saying what the table binds and what
it deliberately leaves open. This addendum is the seed of the ontology-as-repo-file
the Palantir-harvest STEAL list calls for (harvest:26, :109) — say so, and state that
compiling it into Postgres is a later, separate step.
9c. The one-line plans, verbatim
Before each execution the assistant emitted a single-sentence plan (the operator's standing narration rule). Reproduced exactly:
- turn 2 — "Plan in one line: verify branch currency, read the five required sources,
grep real before-examples from docs/userstories/ and the lexicon, then write the operator-facing style guide as one page and commit it."
- turn 7 — "Plan in one line: read the three unread grounds (empirical_hypotheses +
falsification_conditions, rule-decay.md, run_measurement DDL), then write the study-programme doc and commit it."
- turn 9 — "Plan in one line: read the Palantir harvest doc in full, classify each claim
of the four session docs against it with the closed enum, write the evaluation doc, commit with its contract check."
- turn 11 — "Plan in one line: build the S1 panel run — stratified crate sample with
mechanically extracted facts, 3 independent agents per cell across the 2×2 (vocabulary × presentation), agreement computed by script, rows stored to the corpus DB if reachable, results doc committed — per h8-vocabulary-scoring-handoff.md."
- turn 12 — "Plan in one line: record the ratification (seed TSV gains
ddd-hexagonal-v2 = B + tooling), rerun the B panel (6 fresh agents, both arms) on the amended vocabulary, measure, store, commit."
- turn 13 — "Plan in one line: add a ratified-vocabulary section to lexicon.tsv banning
the three losing coinages (safe, low-collision substrings only), record why primitive/component/support are deliberately not banned, note the v2 terms as approved, update the results doc's now-false 'not done' line, contract check, commit."
- turn 14 — "Plan in one line: run the two remaining runnable studies — S4 (drift time
series first data point via the corpus audit tooling) and S5 (oracle-derivation agreement panel over real AC lines); S6 stays blocked on the step-runner."
- turn 15 — "Plan in one line: install the
tools-org-knowledgebinary, add a daily
user-crontab entry running corpus audit with the DB DSN inline, verify one run through the installed path, record the schedule in the repo, commit."
- turn 18 — "Plan in one line: write the four-part study article, commit with its
contract check, then find mm, produce the PDF, and email it to your account."
- turn 20 — "Plan in one line: extend the article (v1.1) with §8 — signal-flow and
graph-model diagrams (as-is, ontology graph, to-be control plane) plus recommendations — and §9 — the verbatim operator transcript mapped to each artifact; commit, re-render, resend the updated PDF."
- push turn — "Plan in one line: read B-017 and the pre-push hook to see which migration
versions diverge from the applied lineage, reconcile per the documented procedure, then push."
9d. Why the prompt compresses to one line
Three reasons, one per audience and one structural:
1. It is the operator's standing rule — "narrate: plan in one line before the first change" — and its function is a veto point: the plan is announced while it is still reversible, before the first side effect. 2. The two texts serve two readers. The full prompt is written for the model: complete, typed, closed enums, every constraint spelled out — the packet. The one-liner is written for the human: the cheapest possible check that the model's INTERPRETATION matches the operator's INTENT. Those are the first two nodes of the generative-entropy failure chain (language-as-archetecture.md:96-98, intent → interpretation), and the one-liner surfaces the interpretation for inspection at exactly the boundary where drift enters first — before it propagates into specification, code, and tests. 3. Compression is the comprehension test (language-as-archetecture.md §21). A plan that cannot compress to one sentence of forced verbs with named deliverables is not yet understood; the failure to compress is the signal to stop and narrow, the same way §5's rule works for delegation ("if the shard cannot be defined, the question is not yet narrow enough"). The one-liner is the plan's shard: the minimal projection that lets its reader verify the one thing they need to verify — is this the task I asked for — while the full typed prompt stays the executable artifact.
10. Telemetry — what the runs cost and what the database says
Queried 2026-08-15 from corpus_sourcecode (:5432) and from the session's own task-notification records (per-agent usage; hand-transcribed to s1-agent-usage-2026-08-14.tsv — see finding 1 for why that transcription is itself a defect).
10a. Runs recorded in run_measurement
| run_id | metrics | started | what |
|---|---|---|---|
02cc975f… | 49 | 2026-08-13 11:24 | corpus audit — predates this session (finding 5) |
s1-2026-08-14 | 8 | 2026-08-14 21:28 | S1 2×2 agreement metrics |
s1b-2026-08-14 | 4 | 2026-08-14 21:40 | S1b v2 rerun metrics |
d8e6102c… | 49 | 2026-08-14 21:47 | corpus audit (session run) |
s5-2026-08-14 | 10 | 2026-08-14 21:50 | S5 oracle-derivation metrics |
e18e2396… | 49 | 2026-08-14 21:53 | corpus audit (installed-binary verify, pre-cron) |
10b. Classification consensus, mechanically derived from crate_classification
| vocabulary_version | rows | mean consensus confidence |
|---|---|---|
| draft-v1 | 30 | 0.912 |
| ddd-hexagonal-v1 | 30 | 0.945 |
| ddd-hexagonal-v2 | 30 | 0.967 |
Monotone improvement across the three vocabulary generations — the DB's own one-line summary of the whole programme.
10c. Panel-agent usage (21 subagents, all sonnet, fresh context each)
| Run · cell | Agents | Mean tokens | Wall clock (min–max) |
|---|---|---|---|
| S1 · A prose / A typed | 3 / 3 | 30,782 / 32,800 | 59–152 s |
| S1 · B prose / B typed | 3 / 3 | 30,852 / 32,871 | 51–85 s |
| S1b · v2 prose / v2 typed | 3 / 3 | 30,900 / 32,917 | 57–120 s |
| S5 · oracle derivation | 3 | 26,651 | 17–26 s |
| Total | 21 | 653,318 tokens; mean 31,110 | 25.4 min summed |
Every agent made exactly one tool call (the payload Read) — "make exactly one tool call" held 21/21 times, in contrast to the prose-rule decay classes rule-decay.md catalogues: a structurally checkable instruction with nothing pulling against it.
10d. The agent loop, as instructed
main session (orchestrator)
│ compiles the shard payload (facts only, §5)
│ + closed-enum prompt (definitions inline, abstention legal)
│
├─ fan-out ──► agents 1..n (sonnet, fresh context, no shared state)
│ │ ONE Read: the payload file
│ │ zero other tools; no repo access
│ ▼
│ final message IS the data (30 lines / strict JSON)
│◄── task-notification: result + tokens + duration ──┘
▼
tabulate (script) ──► agreement metrics ──► run_measurement
│ │
▼ ▼
consensus rows ──► crate_classification git evidence TSVs = truth (ADR 0041)
loop instances: S1 (12 agents) ─► operator ratifies ─► S1b (6 agents)
─► operator ratifies ─► lexicon entry
S5 (3 agents) ─► hook decision held at n=6
10e. Improvement findings (measured here, against the design goals)
1. `harness_event` is empty — the largest gap this section exposes. The table built for exactly this telemetry (corpus/0001_corpus_init.sql:70, hook + OTel sources) captured none of the session's 21 agents; their tokens and durations survived only in chat notifications and were hand-transcribed to a TSV — a rule-14 breach, recorded as such. Improvement: a notification→harness_event ingester so agent telemetry lands mechanically, the way audit metrics already do. 2. The typed-output overhead is now a number: +6.5% tokens (typed-cell mean 32,862 vs prose 30,844). Against S1b's agreement gain that price is negligible — the WorkerPacket direction is cheap, and now quantified. 3. No timeout policy existed: 9× duration spread (17s–152s) across identical prompts. The future ScorePanel Action should carry a per-agent timeout + retry budget, recorded as predictions vs actuals (feeding the S6 calibration curve). 4. Payload size dominates cost. S5 agents (six AC lines) ran 19% cheaper than S1 agents (thirty crate summaries) at the same instruction shape — §5's smallest-sufficient-shard rule is a cost rule, not only a privacy rule. 5. The DB falsified the prose. The session's results doc claimed a "first mechanized data point"; querying run_measurement surfaced an 08-13 run that predates it (corrected in place, s4-s5-results-2026-08-14.md). Deriving claims from the database instead of session memory is ADR 0041 working as designed — and the correction happened only because a query was run. Improvement: a results doc asserting a series fact quotes a query, never a recollection.