Files
HIPs/vocabulary.json
zeekay ad5a010f79 Three words for what a proposal is, and a generator that refuses
The same fact lived in nine hand-kept places and they disagreed about 58
proposals. This makes the file the only authority and everything else a
projection of it.

ONE VOCABULARY, in vocabulary.json, read by the lint, the generator and the
doc site. Three words, each answering "can I rely on this?" and nothing else:

    Draft    nothing implements it yet, or its own text says the work is ahead
    Final    the thing it specifies exists in the code
    Living   governance and process: amended in place, never finished

Eight spellings folded in. `Active` was the one doing real damage: on four Meta
and Process HIPs it meant living, on 48 others it meant shipped, and one word
doing two jobs is why nothing agreed. `Review` and `Last Call` described a
queue rather than a document, and a proposal under review is still one you
cannot build against.

STATUS IS EARNED, not declared. Every Standards Track proposal was checked
against the estate: 235 have their implementation, and eight do not and say so.
HIP-0095 carries a twelve-week plan ending at "mainnet launch" and has no code.
HIP-0525 specifies an all-machine meeting while apps/meet refuses a machine a
seat. HIP-0078 names a prover at a "planned location" that does not exist.
HIP-0114 is the cog.* procedure set, and that procedure set returns nothing.
HIP-0003, HIP-0102, HIP-0305 and HIP-0901 likewise: looked, found nothing.

SIXTEEN TOMBSTONES DELETED rather than statused. A dead document kept alive in
the index is one concept wearing two names. Each successor exists and carries
the text, and the 90 references that pointed at a tombstone now point at it --
whole markdown links at once, so link text cannot outlive its target. Three of
the sixteen were pure compatibility: HIP-0028 specified a migration off a
Bitnami chart, HIP-0029 dual-engine MySQL, HIP-0030 a schema-deprecation
policy. We ship no backwards compatibility, so we do not specify it.

Nine links were already broken and had been since the corpus was renumbered:
short-form ./hip-5.md paths that never existed. Two named the wrong proposal --
one cited "HIP-1: Hanzo Multimodal Models" where multimodal is HIP-0003.

THE GENERATOR REFUSES more often than it writes, because a short table looks
exactly as authoritative as a complete one. Rows must equal files; a shrinking
index must say by how much; a section whose input is missing is an error, not
an omission; nothing is written until all of it validates. Its self-test breaks
the corpus eleven ways and requires each to refuse AND leave README byte-
identical -- a guard that reports after half-writing has protected nothing.
The lint's second implementation of the same comparison is gone.

The site rendered 52 proposals with a fallback grey badge and counted them
toward none of its three stat tiles, because docs/lib/source.ts declared a
status union by hand: it admitted a `Stagnant` no file has ever carried and
omitted the one 52 files did. Five components each kept their own copy of the
colours. All six now read vocabulary.json.
2026-08-28 18:05:41 -07:00

67 lines
2.4 KiB
JSON

{
"$comment": [
"The closed vocabularies of this corpus, in ONE place.",
"",
"Python reads it (scripts/lint.py, scripts/index.py). TypeScript imports it",
"(docs/lib/status.ts). Before this file the same lists were written out by",
"hand in nine places -- the linter, the README prose, a status union in",
"docs/lib/source.ts, and badge colours hard-coded in five page components --",
"and they disagreed. docs/lib/source.ts admitted a 'Stagnant' no file has",
"ever carried and omitted the status 52 files DID carry, so every one of",
"those rendered with the fallback badge and counted toward nothing.",
"",
"A value is only in this file because a proposal needs it. Adding one is a",
"decision about the corpus, not about a renderer."
],
"status": {
"Draft": {
"means": "Proposed. Nothing implements it yet, or the document itself describes work still ahead. Argue with it; do not build against it.",
"tone": "amber"
},
"Final": {
"means": "The thing it specifies exists in the code. The spec is settled -- changing it takes a new HIP.",
"tone": "green"
},
"Living": {
"means": "A document that never finishes: governance and process, amended in place rather than replaced.",
"tone": "blue"
}
},
"type": {
"Standards Track": "describes a thing we build and maintain",
"Process": "how we work: numbering, branch names, what is public",
"Meta": "governance, principles and commitments",
"Informational": "guidance that normatively requires nothing"
},
"category": [
"Core",
"Interface",
"Infrastructure",
"Security",
"Cryptography",
"Operator",
"Bridge",
"Governance",
"Meta",
"Application",
"Platform"
],
"folded": {
"$comment": "Every spelling this corpus has carried, and the value it is now. Kept so a reader of an old commit, an old PR or an external link can tell what happened. Nothing may be written back into a HIP from this map.",
"Proposed": "Draft",
"Review": "Draft",
"Last Call": "Draft",
"Accepted": "Final",
"Implemented": "Final",
"Active": "Final for a Standards Track spec; Living for Meta and Process",
"Superseded": "deleted -- the successor carries the text",
"Retired": "deleted",
"Withdrawn": "deleted",
"Stagnant": "never written in a HIP; existed only in the site's type"
}
}