{"path":"research/taxonomy-gaps-and-the-closed-enum.md","content":"# Three Taxonomy Gaps in Three Runs, and What They Actually Are\n\n*August 13, 2026. Runs 5, the deep-descent experiment, and run 6 each found a case the ontology could not classify. Three gaps in three consecutive investigations is a rate, not a coincidence, and the question is what to do about it. The short answer: they are not the same kind of gap, \"add a slot each time\" is right for two of them and a category error for the third, and the fix that matters is not a schema change at all.*\n\n## The three cases\n\n| Run | Taxonomy | The case it could not hold |\n|---|---|---|\n| Run 5 (referee report) | **claim type** — empirical / definitional / normative / value_premise | A reviewer pre-empting the objection that he is being pedantic. Not about the world, not a definition, not a verdict — and dropping it loses real anticipated-objection work |\n| Deep descent | **residue type** — fittingness / structural / axiom_choice / permissive_zone | \"Pain is bad\" walked to bedrock hits a hard-problem terminus none of the four name. The four were induced from value debates and are ought-biased |\n| Run 6 (self-defence) | **epistemic status** — observed / causal_hypothesis / prediction / counterfactual / feasibility / normative_assertion | \"Article 2(4) does not say force is prohibited *except* in self-defence, therefore self-defence is not an exception to it.\" A claim about what a text entails. Roughly a third of both legal texts |\n\n## They are not the same gap, and the difference decides the fix\n\n**Two are missing values on an existing dimension.** The residue taxonomy classifies *what kind of bottom a branch reached*, and an is-bedrock terminus is a genuine member of that set which the ought-biased induction never had to name. The epistemic-status taxonomy classifies *how a claim is warranted*, and \"follows from an authoritative text\" sits perfectly well beside \"observed\" and \"predicted\". Both of these are ordinary slot-shaped holes.\n\n**One is a missing dimension, and adding it as a value would be a category error.** The four claim types classify a claim by its **subject matter**: the world, language, or value. A speaker-attitude hedge is classified by its **role in the exchange**. Adding it as a fifth type would make `type` mean two incompatible things at once, and the graph already has a worked example of what that costs — `long-form-sources-and-meta-analysis-weighing.md` found methodology assigned at the source level when evidential quality is a property of a claim, and the resulting flattening is exactly this shape of error one layer down. Argumentative role wants its own field or nothing.\n\nSo the answer to \"grow a slot each time?\" is: for two of the three, yes eventually. For the third, never.\n\n## Why it keeps happening\n\nEach taxonomy was **induced from the register the corpus happened to contain**, and so carries exactly the distinctions that register needed. Value debates produced ought-biased residue types. Empirical and policy argument produced epistemic statuses with no slot for doctrinal inference. Object-level argument produced claim types with no slot for a move about the exchange itself.\n\nThis is not a defect that gets fixed once. For a project whose stated ambition covers all knowledge and decision-making, new registers arrive indefinitely, and each one imports distinctions the taxonomy never had to make. Legal doctrine was the register that broke `epistemic_status`; the next unfamiliar register will break something else.\n\n## The part the project's own philosophy already decides\n\nDeliberus holds that nothing in the graph is permanently atomic, that the principle applies to **the system's own representations** and not only to user claims, and — since dogfood run 1 — that *a system with no way to tell you it failed will tell you it succeeded.*\n\n**A closed enum with no \"does not fit\" value is a copout axiom in the schema layer.** It has no way to report that it lacked a slot. It returns the nearest fit and reports success. That is structurally the same failure as `except Exception: return empty`, and the resemblance is not loose: the April 2026 outage that gave seven users zero extractions for fifteen days lived in precisely this layer, an enum where a `Literal` was needed, silently swallowed.\n\nForced nearest-fit is the classification layer's silent failure mode. On that reading the first move is not which slots to add. It is that **every classification enum in the ontology needs a confession channel.**\n\n## The design, and the part that would bite if skipped\n\nThree parts, and the second is what makes it more than an escape hatch:\n\n1. **An explicit \"does not fit\" value on each enum.** Named honestly rather than as `other`.\n2. **A required free-text reason whenever it is used.** This raises the cost of reaching for it lazily, and more importantly it converts the escape hatch into an accumulating corpus of *taxonomy pressure* — the evidence base for which slots are real.\n3. **An explicit decision per downstream consumer.** This is the part that would bite. `compute_confidence` falls to a 0.50 default for an unrecognised status; the weighing detector reads `type` against `{value_premise, normative}`; the completeness oracle counts unsupported value premises by type. Each would degrade silently and plausibly, which is the exact failure the change exists to prevent.\n\nThe known risk is worth stating plainly rather than discovering later: this is the highest-risk layer in the codebase by track record. Any change needs the `*Lit` alias discipline and a round-trip test asserting a plain string validates, per the standing CLAUDE.md rule.\n\n## The reason to do it, which is better than tidiness\n\n**The unclassified rate is an instrument, and it can score against us.**\n\nMeasured per source and per register, it says how register-biased the ontology is. A new domain arriving at thirty percent unclassified means the ontology does not fit that domain and the graph is quietly distorting it. That is a falsifiable claim about the ontology's generality — and right now that generality is *asserted and untestable*, because forced nearest-fit makes every claim look classified whether or not it was.\n\nThis also fills a gap the frontier already names. Every shipped instrument measures structure: completeness, hinge, residue map, disagreement preservation. None measures the **ontology itself**. This one would, at the cost of two fields, and it obeys the wager's own accounting rule that an instrument which can only confirm is decoration.\n\n## Recommended sequence\n\n1. **Ship the confession channel first**, on all three enums, with the per-consumer decisions made explicitly rather than left to defaults.\n2. **Accumulate the reasons.** Let the unclassified corpus say which patterns recur, rather than adding a slot per register as it shows up — the project's own \"pain-point-driven iteration, not speculative rewrites\" discipline, applied to the schema.\n3. **Then decide value-versus-dimension, case by case.** Doctrinal-interpretive is already the strongest candidate for a genuine new value, evidenced at roughly a third of two texts — though that is still one register, and one register is how each of these taxonomies got over-fitted in the first place. Argumentative role, if it is ever added, is a new field and not a fifth claim type.\n\nThe honest summary is that the recurrence is not three problems. It is one property of induced taxonomies, plus a schema layer that currently cannot admit to meeting something new.\n\n**Where this generalises (2026-08-22).** If induced taxonomies necessarily carry their register's distinctions, then *thinking harder before building* cannot fix it either — a thinker's registers are also whatever they have met, so up-front analysis produces the same bias just as invisibly. That closes \"settle the ontology first\" as a path and makes the confession channel the load-bearing response rather than a fallback. It also generalises past enums: the same argument applies to every commitment the schema holds without saying so. [what-belongs-in-the-ontology.md](what-belongs-in-the-ontology.md) runs the sorting test over the live schema and finds two more.\n\n**See also**: [depth.md](../depth.md) (no copout axioms) · [self-similar decomposition and claim ontology](self-similar-decomposition-and-claim-ontology.md) · [peer review and the reasoning layer](peer-review-and-the-reasoning-layer.md) § Run 5 · [deep-descent experiment](deep-descent-experiment.md) · [dogfood run 6](dogfood-run-6-israel-palestine-cross-domain.md)\n\n\n## Plain-terms gloss (founder-endorsed 2026-08-19 — \"very good explaining\", kept verbatim near the QC machinery)\n\nThe three-runs law without jargon: **when you design a sorting system by staring at one pile of stuff, your boxes memorize that pile's quirks — and the next pile, from a different world, contains something your boxes can't hold.** A silverware organizer designed in your own kitchen has perfect slots for forks, knives and spoons; then a friend brings chopsticks, there is no slot, they get wedged diagonally across the fork compartment, and the drawer looks \"all sorted.\" A bird field guide written entirely in Sweden meets a penguin. The categories aren't wrong — they are a perfect photograph of the examples they were built from, and only those. The three actual runs: claim-type boxes (built on essays) met a referee report's \"the author hedges about their own confidence\"; residue-type boxes (built on ought-questions) met \"pain is bad\" bottoming out in what-is bedrock; epistemic-status boxes met legal-doctrinal inference. And the dangerous half: a menu with no \"other\" box never says *doesn't fit* — it files the penguin under \"large flightless duck\" and reports success. That is why every closed menu in the pipeline needs a confession slot; the scheme enum got its `does_not_fit` value 2026-08-19, and its RATE is itself an instrument (rising = the taxonomy just met a register it was not induced from).\n\n## The founder's two horses on scheme exhaustiveness (2026-08-19, verbatim position)\n\n*\"I have hope in the generative factorial basis. But I also believe in simply letting the system/LLM-prompting act like a five year old and ask 'Why?' recursively all the way down to philosophical/phenomenological bedrock, for each branch in the deliberation graph.\"* These are complementary, not rivals: the generative basis is the TYPED route (a small closed set of primitive moves generating the surface schemes — under research in scheme-set-exhaustiveness.md), while recursive-Why is the UNTYPED universal move that needs no taxonomy at all — it is depth.md's universal acid stated as a mechanism, and it is what the descent already does. A scheme classifies an inference; recursive-Why survives every register change BECAUSE it classifies nothing. Design consequence worth holding: whenever the typed route hits does_not_fit, the untyped route still works — the taxonomy is an accelerator on top of the acid, never the acid itself.\n"}