Skip to content

DR-149: The entity_type vocabulary opens as guided-open, and a type label is added, never re-labelled

DR-149 — The entity_type vocabulary opens as guided-open, and a type label is added, never re-labelled

Section titled “DR-149 — The entity_type vocabulary opens as guided-open, and a type label is added, never re-labelled”

The S554 entity-architecture review found the closed 12-value entity_type vocabulary (DB CHECK + extractor Literal + TS union — {449.1} added a fourth point, the producer lint, and a fifth column with no bound at all, entity_type_override) to be the same closed-taxonomy shape DR-141 withdrew one level up, and ruled (D11) that the direction is to open it, gated on the id-449 extraction spike because extraction had not been reviewed recently.

The spike ran (S555, {449.2}): a real-tier grid — bounded (A) vs open (B) vs guided-open (C) × 3 repetitions × the nine vendored Platform-corpus documents, scored against an owner-approved per-document reference — 108 calls, zero parse errors. C tied the bounded control on every metric (100% required recall, identical false-positive count, identical type distribution) and minted zero out-of-vocabulary labels; fully-open B minted a small semantically-reasonable tail (region, programme) but tripled source-label false positives. Every one of the 24 reference canonical groups received the same majority type in every lane, including all five contested groups.

  1. The emission contract is guided-open (variant C): the twelve values are preferred labels, and the extractor may mint a new short lower-case label only when none fits, using it consistently. Type is validated for shape (short, lower-case, machine-stable), never for membership — DR-141’s rule applied at the entity level.
  2. The type-stability rule (DR-147’s discipline extended to the type axis): a re-run may add labels to the corpus but may never re-label an existing entity’s type — entity_type is a component of the surrogate id and the natural key, so a flapping label is whole-corpus row churn through the type axis. A would-be re-label surfaces to the user as a suggestion (owner amendment, S555 board), exactly as DR-147 routes would-be canonical renames to curation; the pipeline never applies it silently. Probe as an AC.
  3. entity_type_override is bound by the same ruling — it carries no CHECK today and is the column curators write; whatever holds for the base column holds for it.
  4. The DB CHECK is replaced by a shape check, never silently dropped; the extractor Literal, the TS union and the producer lint move to the same shape contract in the same change (id-453).
  • Keep the closed set as a dated deviation. Measured quality cost on this corpus: zero (C ≈ A). Rejected for DR-141 inconsistency and because the B lane already showed a real vocabulary gap (region) that a closed menu silently refuses.
  • Fully open (variant B). Rejected on measurement: 3× the excluded-term false positives and a minted tail without the anchoring preference — the guided contract gets the openness without the noise.
  • id-453 implements: the C prompt contract, the five enforcement-point moves, the override binding, and the stability probe — sequenced with id-434 (the reshape’s uuid5(ns, "em:{sd_id}:{resolved}:{type}") identity and per-type resolution partitions are where a new label lands as a new partition).
  • The S551 standard-vs-certification divergence is closed as a mock artefact: the real tier types the ISO/FAS/SSCM family certification unanimously ({449.2} F2); id-451’s grain family should treat certification as this family’s real-tier label.
  • Resolution-partition effects of any minted label remain to be measured at the confirming /walk post-id-434 ({449.1} §6.5 metric 4) — owned by id-453.
  • Honest limits carried from {449.2}: one synthetic nine-document corpus, one model (claude-opus-4-6); the stability rule, not the vocabulary bound, is what protects identity if a model change shifts typing behaviour.