Skip to content

docs(corpus): add reference corpus template - #1534

Merged
tucktuck101 merged 1 commit into
launchpadfrom
task/1346-corpus-template-reference
Aug 28, 2026
Merged

docs(corpus): add reference corpus template#1534
tucktuck101 merged 1 commit into
launchpadfrom
task/1346-corpus-template-reference

Conversation

@serina-mcfall

@serina-mcfall serina-mcfall commented Aug 27, 2026

Copy link
Copy Markdown

Node

corpus-template-reference at launchpad/docs/corpus/templates/reference.md.

Note on this issue's definition of done

Issue #1346's own Definition of Done is byte-identical to the standards-track
boilerplate ("States scope and authority/source of the policy. Separates MUST
requirements from SHOULD guidance. Defines enforcement/checks and
exception/escalation process. Links decisions or higher-order policy instead of
duplicating them.") — the same text independently found copied across #1326-#1351.
That describes a policy/standard node, not a template. This node is instead
built against parent Feature #605's own acceptance criterion: "every template states
its purpose, required sections, evidence expectations and the industry model/standard
it adapts." The document's Required sections, Evidence expectations and
Industry model this template adapts sections answer that directly, and a
Note on Definition of Done section in the body states this explicitly for future
readers. The other generic DoD items (one hand-authored document, schema-valid front
matter, one independently maintainable idea, every claim traceable, links instead of
duplicates, checked against provenance revision, validator passes clean) apply as
written and are satisfied.

type chosen and why

type: governance. node.schema.json's type enum has no template or policy
value — it enumerates PRD #602's corpus-surface list. Of the corpus's four existing
nodes, AGENTS.md carries type: agent while README.md and both
standards/*.md nodes carry type: governance — the precedent for a node that
documents the corpus's own authoring rules rather than architecture/capability/etc.
subject matter. All five batch-1 template PRs (#1527-#1531) independently landed on
the same value. The document also adds a dedicated A note on type section
clarifying that this enum tracks corpus surface, not documentation form — a
node built from this reference template takes whichever type its own subject's
surface calls for (e.g. interfaces-events, capabilities), not governance;
governance applies only to this template node itself.

Relationships

None declared. Checked against origin/launchpad at commit
a44cf52fc740ebebbdd671427480d14f0bce0115
(git ls-tree -r --name-only origin/launchpad -- launchpad/docs/corpus): exactly
four nodes exist — corpus-agents, corpus-readme, corpus-standard-confidence,
corpus-standard-decision-references — all procedural/meta-documents about the
corpus itself, none reference-shaped subject matter this template would
references, depends-on, or sit part-of. Batch-1's five template PRs are open,
not merged, so they are not valid targets either. None of this batch's four siblings
(#1331, #1336, #1340, #1351) target this node or are targeted by it — the document's
Relationships section states this and why.

Research grounding

Primary sources fetched and read directly, not taken from Serina's unmerged research
note (launchpad-26/buzz#1466, launchpad/Research/project-documentation-templates.md
on docs/research-project-doc-templates, cited only as TEAM_KNOWLEDGE,
provided_by naming the issue):

  • Diátaxis (diataxis.fr/reference/, /explanation/, /compass/,
    /how-to-guides/, /colophon/) — Reference is "technical descriptions of the
    machinery and how to operate it," "information-oriented," with the explicit nuance
    that it "should not attempt to show how to perform tasks" but "can and often needs
    to include a description of how something works." The document states the boundary
    against sibling task: define the concept corpus template #1331 (concept/explanation) directly from Diátaxis's own contrast:
    explanation is "understanding-oriented" and reference is "information-oriented" —
    stated as opposites in the same source sentence. It also notes (does not resolve)
    the boundary against task: define the procedure corpus template #1345 (procedure/how-to, not in this batch).
  • The Good Docs Project — fetched the actual fillable template
    (gitlab.com/tgdp/templates/-/raw/main/reference/template_reference.md) and its
    guide (.../reference/guide_reference.md), not just the marketing page. Used for
    required-sections structure: Reference description, structured entries, optional
    Commands.

Two errors caught by verifying primary sources rather than trusting the note,
same discipline that caught the note's separate MADR-naming error in batch 1:

  1. License. The note calls the Good Docs Project's license "Zero-Clause BSD."
    The actual LICENSE file at the canonical gitlab.com/tgdp/templates (the
    archived GitHub mirror carries no usable SPDX license) is the MIT No
    Attribution License
    — materially the same no-attribution freedom, but a
    textually distinct instrument. The document's evidence ledger states this
    correction explicitly rather than repeating the note's claim.
  2. API Reference gap. The Good Docs Project's own guide draws an explicit line
    between a plain Reference article (for users "unfamiliar with the problem space")
    and a separate API Reference template (for "domain experts" wanting endpoint/
    parameter depth) — a distinction the research note doesn't surface and none of
    the 25 filed corpus template tasks (task: define the architecture component corpus template #1326-task: define the threat model corpus template #1351) appear to own. Filed as
    task: corpus templates do not distinguish plain Reference from API Reference #1532 (see Escalations).

Validator + verify-gate evidence

$ python3 launchpad/project-intelligence/corpus/validate.py
PASS  corpus validation found no errors; 19 item(s) reported unverified

19 UNVERIFIED notices are the expected non-fatal notices for commit/tool-result/
external-URL citation shapes per AGENTS.md's own citation-shape table (5 from the
three pre-existing nodes, 14 from this node's own commit/tool-result/external-URL
citations) — none are errors.

$ python3 -m unittest discover -s launchpad/docs/corpus/schema/tests -p "test_*.py" -v
...
Ran 27 tests in 0.045s

OK

Run as the literal last command before git commit, nothing piped or redirected
after it, per the batch dispatch brief.

Cross-model review

Codex (cross-model) is down, tracked as #1467. Same-model adversarial self-review
substituted: re-read the drafted document against its own evidence ledger and
Diátaxis/Good Docs Project sources for internal consistency, caught and fixed an
inconsistency between the Boundary section (three exclusions: concept, procedure,
API Reference) and the Required sections checklist (which had only named two),
before committing.

Escalations

Closes #1346

Issue type

Task

Ground the required-sections/evidence shape in Diátaxis's Reference
form (information-oriented, not task-oriented) and the Good Docs
Project's fillable Reference template, and state the explicit
boundary against the sibling concept/explanation template.

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>

@tucktuck101 tucktuck101 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — reference corpus template (#1346)

Every Diátaxis and Good Docs Project quotation in this node holds verbatim — I had them checked
individually, and the taxonomy is applied in Diátaxis's own information-oriented sense, not
loosely. One inverted repo fact that the body then spends on author-facing guidance.

High — references has an authored inverse, not a generated one

The ledger entry at :26 is FACT on relationships.schema.json and states the type's
directionality "...with a generated inverse named referenced-by."

The cited file says the opposite. relationshipMeta.references is:

{ "directionality": "source cites target as supporting context; no ownership or currency dependency implied",
  "inverse": "authored", "inverseType": "referenced-by" }

references is the only one of the five types whose inverse is authoreddepends-on,
supersedes, implements and part-of are all generated.

It is load-bearing because the body spends it at :352-354, telling an instance author they may
declare references at this template "if the author wants the generated referenced-by edge". No
generator produces that edge for this type, so the promised reverse edge silently never exists and
must be hand-authored on the other node. CI cannot catch it: the citation is a bare repo path, and
the validator only confirms the path resolves.

Both siblings in this batch state it correctly (concept.md:109 "with an authored (not generated)
inverse edge"; glossary-term.md:309-312 reasons through to "a generated back-edge that does not
exist for this type"), so this is an isolated inversion. Fix both sites and drop the
free-back-edge rationale.

Medium — two issue-sourced claims are classified FACT

:77-80 cites issues/605 and :81-84 cites issues/1346, both as FACT. The corpus
AGENTS.md rules on exactly this: "When the only source is an issue, a PR or a discussion, you
have no openable file and no way to pin one ... Do not force it into a FACT on a tool-result or
URL citation. Use TEAM_KNOWLEDGE with provided_by naming the issue." The quoted strings are
verbatim, so this is classification rather than truth — and it is invisible to CI, because an
issue URL is reported UNVERIFIED while the run exits 0, which AGENTS.md itself names as the
failure mode. Your own siblings record the identical #605 claim as TEAM_KNOWLEDGE, so merging
all three leaves two conventions for one claim.

Low — the archived mirror does have a usable SPDX license

The parenthetical says the archived thegooddocsproject/templates mirror "carries no usable SPDX
license". Its LICENSE.txt at the commit you cite is the verbatim Zero-Clause BSD text, whose
SPDX identifier is 0BSD. What is true is narrower: GitHub's automatic detection reports
NOASSERTION for that repo because the file is named LICENSE.txt with a non-canonical header.
Sibling concept.md:155 states the license text correctly as a FACT, so merging both leaves two
FACT-classed claims about one artifact that cannot both be right.

Low — one FACT carries reasoning that contradicts the node's own boundary

The compass entry correctly places reference at "informs cognition x application of skill" and
explanation at "informs cognition x acquisition of skill", then closes that the two "split on
acquisition versus application, which is the axis that does not apply to the concept/reference
boundary this template states in prose." That axis is precisely what the compass uses to separate
the two, and the information-versus-understanding language your own boundary section uses is
Diátaxis's name for the same split — so the clause denies the distinction the prose depends on. It
is also reasoning sitting inside a FACT entry. End the statement after the compass mapping, or
move the interpretation to an INFERENCE with a confidence.

Not findings, ruled out on evidence

  • Index registration: the corpus AGENTS.md and README.md both state that indexes are
    generated derived views, never hand-authored, and the ten-step "Creating a node" procedure has
    no registration step. All 26 template PRs leaving AGENTS.md untouched is correct.
  • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

task: define the reference corpus template

2 participants