docs(corpus): standard for taxonomy (#1324) - #1519
Conversation
…ed at (#636) Rebased onto `launchpad` and reduced to one file. #1468, #1469 and #1477 merged while this PR sat on CHANGES_REQUESTED, and each carried the shared #636 base, so two of this branch's three files -- the #636 plan and test_validate.py -- are now byte-identical on `launchpad` and no longer belong in this diff. What is left is the fix itself. The consequence worth stating plainly: those merges landed the UNFIXED corpus AGENTS.md on `launchpad`, including the line this commit removes -- "Do not take that on this document's word -- the command is the check". The High finding is on the default branch now, which is why this is a defect fix rather than a pre-merge correction. HIGH -- the provenance-update shortcut could certify stale evidence. Two passages said an empty `git diff --name-only <recorded-sha> -- <ledger paths>` established that every cited source was unchanged and every claim still stood. Both are false for citation forms this document itself permits. Measured, not argued. A file that DOES differ reports as changed with a bare path and reports empty output with exit status 0 once `:127` or `:219-221` is appended -- no error, no warning. So an unnormalized `path:line` citation makes a changed file indistinguishable from an unchanged one, which is the worst available failure shape for a provenance check. Recorded as a new FACT entry with the tool-result citation that demonstrates it. The rule now states its reach: normalize positions off the path first; only bare path, file line and file range are in scope; graph edge, tool result, commit and the two URL forms are excluded explicitly, so the branch is simply unavailable when a ledger contains one. The conclusion is narrowed to what a diff can support -- those files are unchanged -- with re-verification left as the only thing that establishes a FACT still holds. MEDIUM -- the one-node rule had no supporting ledger entry. "One node is one independently maintainable idea" is a substantive instruction and the ledger's only #636 entry backed the recorded-revision requirement instead. Added as TEAM_KNOWLEDGE attributed to #636's definition of done, which states it near-verbatim, matching the existing entry's classification for the same source. Also corrected a wrong-direction cross-reference: "*Updating a node* below" in Scope and omissions, where that section is above it. The recorded revision stays at 0052f5a, re-checked against the NEW base after the rebase rather than assumed to still hold: the two non-file citations were excluded, the nine normalized file paths were passed to `git diff` against 0052f5a from `launchpad` tip 0ffc1c9, and the result was empty. The second Medium is not addressed because it is stale -- the citation table was already corrected by ebe2daf and says outright that it is seven rows and is not a summary of CONTRACT.md section 3. The remaining cross-document disagreement is tracked as #1478. Evidence is in the PR thread. Validated against the full four-node corpus now on `launchpad`, not just this node: PASS, 5 non-fatal UNVERIFIED notices, all commit or tool-result citations that name no openable file. Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
Adds launchpad/docs/corpus/standards/taxonomy.md, the policy node governing the type field's closed 13-value surface enum: where the values originate (PRD #602's success criteria, quoted from node.schema.json's own description), how to choose one when a node's subject could plausibly fit more than one, and what to do if none of the 13 fit (COMPATIBILITY.md's schema-change process, linked not restated). Verified before writing that corpus-standard-status (#1323) and corpus-standard-identifiers (#1317) are not actually merged to origin/launchpad despite being described as merged at dispatch time -- they exist only on unmerged task branches -- so no relationship targets them. Declares one relationships edge, references -> corpus-readme, justified by corpus-readme.md's own worked example of an imperfect type fit ("governance is the closest true fit, not an exact one"), which this document cites directly. Closes #1324 Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
tucktuck101
left a comment
There was a problem hiding this comment.
Review — standard for taxonomy (#1324)
The vocabulary is exactly right: the 13 type values match node.schema.json's closed enum
precisely — in order, nothing added, nothing missing, nothing renamed. For a taxonomy standard
that is the thing that had to be correct, and it is. The defect is structural.
Medium — no ## MUST section and no ## SHOULD section
The document's top-level headings, verbatim from grep -n '^## ':
Scope and authority / Where the 13 values come from / Choosing a value /
If none of the 13 fit / Enforcement, and where it stops /
Exceptions and escalation / Relationships / Scope and omissions
There is no ## MUST and no ## SHOULD. #1324's own definition-of-done carries the
MUST/SHOULD-split checkbox, and the meta-standard requires the two as separate sections — one
list with mixed modal verbs does not satisfy it however clearly the verbs are written. This is
the same remedy #1507 records against the sibling nodes and that #1508 is landing in this very
batch for confidence.md, so it is an established fix rather than a judgement call.
"Choosing a value" and "If none of the 13 fit" carry the normative content; splitting them into
## MUST / ## SHOULD preserves every identifier and cross-reference.
Batch correction — the AGENTS.md hunk is not an index registration
launchpad/docs/corpus/AGENTS.md at this head is byte-identical to the launchpad tip
(verified with git diff --quiet). The hunk is the task/636 change inherited through a stale
merge base (919886b41), not a registration this PR adds — merging produces no net AGENTS.md
change and there is no cross-standard conflict there. No standards index exists to register in.
What is correct
- 13-value
typeenum reproduced exactly from the schema — verified value by value. - "If none of the 13 fit" routes to the schema's
COMPATIBILITY.mdchange process rather than
inventing a local escape, which is the right answer. - The enforcement section states where the check stops instead of overstating it.
- CI green at head (latest run per check); node validates clean.
Reviewed by tucktuck101's review lane. Every failing claim reported above was reproduced by me against this PR head before posting.
Summary
Adds
launchpad/docs/corpus/standards/taxonomy.md, the canonical policy node for thetypefront-matter field: where its 13 closed-enum values originate, how to choose among them when a node's subject could plausibly fit more than one, and what to do if none of the 13 fit. Links toCOMPATIBILITY.mdfor the enum-addition procedure rather than restating it.Related issue
Closes #1324
Issue type
Task
Agent provenance
Objective
Create the one hand-authored canonical corpus document
launchpad/docs/corpus/standards/taxonomy.md, governing thetypefield's 13-value closed enum.Impacted components
Approach and rejected alternatives
Modeled the document's shape directly on the two already-merged sibling standards (
confidence.md,decision-references.md): Scope and authority / where the field's values come from / a MUST-numbered choosing procedure / enforcement table / exceptions and escalation / scope and omissions. Traced the enum's 13 values to PRD #602's own success-criteria bullet (confirmed by direct read, not by trusting the schema's paraphrase alone), rather than inventing a second, independently authored definition of each surface — the schema's own field description explicitly warns against that.Rejected alternative: writing a one-line definition for each of the 13 enum values (
architecture,layers,capabilities, etc.). No document in the repository defines these individually beyond the schema's shared one-line description, and manufacturing 13 new definitions would itself be the "second, independently invented taxonomy" the schema's description warns against. Instead the document gives a decision procedure grounded in how the enum has actually been used by the four nodes merged toorigin/launchpadso far (threegovernance, oneagent), and requires disclosing an imperfect fit in the node's own scope-and-omissions section — following the worked example already incorpus-readme.md.Rejected relationship targets: the task brief suggested
corpus-standard-status(#1323) as a plausible edge since both standards govern closed-enum fields. Checkedgit ls-tree -r --name-only origin/launchpad -- launchpad/docs/corpusdirectly rather than trusting the dispatch-time claim that #1323 and #1317 (corpus-standard-identifiers) were already merged — neither is. Both exist only on unmerged task branches (confirmedcorpus-standard-status's commit is not an ancestor oforigin/launchpadviagit merge-base --is-ancestor). PerAGENTS.mdstep 9, a relationship target must exist on the branch being merged into, so neither is used. Declared one relationship instead:references→corpus-readme, justified becausecorpus-readme.md's own scope-and-omissions section is the concrete worked example this document cites (type: governanceas "the closest true fit, not an exact one").Verification
Command run:
Raw output:
Exit status: 0
Also ran, as the local pre-commit
verify-gatehook requires:Raw output (tail):
Not verified
type— no generator exists yet in this corpus, so how a projection would render or rank an imperfect-fit disclosure is untested.governancenodes, oneagentnode).corpus-standard-status(task: document corpus standard for status #1323) orcorpus-standard-identifiers(task: document corpus standard for identifiers #1317), once actually merged tolaunchpad, will contain content that changes this document's reasoning — confirmed neither is merged at the checked revision, but their eventual content was not read for this document's purposes.Security implications
None. This is a documentation-only change under
launchpad/docs/corpus/standards/; it does not touch runtime code, secrets, or deployment configuration.Escalations
None. The one open question flagged in the task brief — whether an edge to
corpus-standard-statuswas warranted — resolved itself on verification: that node is not merged toorigin/launchpad, soAGENTS.md's own rule rules it out without needing a judgment call.