Skip to content

docs(corpus): add procedure corpus template - #1539

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

docs(corpus): add procedure corpus template#1539
tucktuck101 merged 1 commit into
launchpadfrom
task/1345-corpus-template-procedure

Conversation

@serina-mcfall

Copy link
Copy Markdown

Summary

Adds launchpad/docs/corpus/templates/procedure.md, the how-to/procedure corpus template for parent Feature #605, grounded in Diátaxis's How-to guide form and the Good Docs Project's fillable How-to template. States the reference/how-to boundary from the procedure side, coordinating with the sibling corpus-template-reference node (#1346, PR #1534) rather than restating it from scratch.

Related issue

Closes #1345

Issue type

Task


Agent provenance

Field Value
Harness / provider Claude Code
Model claude-sonnet-5
Session reference N/A - harness does not expose a session URL
Initiating human @serina-mcfall

Objective

Create launchpad/docs/corpus/templates/procedure.md as the canonical corpus node stating the required sections, evidence expectations, and industry model for a how-to/procedure-shaped corpus document.

Impacted components

  • launchpad/docs/corpus/templates/procedure.md

Approach and rejected alternatives

Modeled the node's structure on the already-open sibling corpus-template-reference (#1346, PR #1534) for internal consistency across the batch (Scope and authority / Industry model / Boundary / A note on type / Required sections + skeleton / Evidence expectations / Relationships / Note on Definition of Done / Scope and omissions).

Rejected alternatives:

  • Citing the research note's Diátaxis quote as FACT. The note's exact phrasing ("A how-to guide's purpose is to help the already-competent user perform a particular task correctly") does not appear verbatim on the live diataxis.fr/how-to-guides/ page today (the page's own words are "A how-to guide helps the user get something done, correctly and safely; it guides the user's action" plus "serves the work of the already-competent user"). Rejected citing the note's phrasing as a direct Diátaxis quote; instead fetched the live page directly for FACT-class quotes and cited the note's paraphrase separately as TEAM_KNOWLEDGE.
  • Reusing "Zero-Clause BSD" for the Good Docs Project's license, as the research note states. Rejected after opening gitlab.com/tgdp/templates/-/raw/main/LICENSE directly: it is the MIT No Attribution License, not 0BSD. Two prior corpus-template batches independently caught this same error; verified it again from the primary source rather than trusting either the note or the prior batches' restatement.
  • Inventing a template/procedure value for type. Rejected — node.schema.json's type enum has no such member; used governance, the confirmed precedent across all ten batch-1/batch-2 template nodes.
  • Declaring a references relationship to corpus-template-reference (task: define the reference corpus template #1346), since the two templates discuss each other in prose. Rejected — task: define the reference corpus template #1346 is not yet merged into origin/launchpad, and AGENTS.md requires relationship targets to resolve against the merge-target branch, not the author's own worktree.

Verification

Command run:

python3 launchpad/project-intelligence/corpus/validate.py

Raw output:

UNVERIFIED  corpus-agents: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-agents: evidence entry 20, citation 1: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-readme: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-standard-confidence: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-standard-decision-references: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-template-procedure: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-template-procedure: evidence entry 5, citation 1: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-template-procedure: evidence entry 6, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 7, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 8, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 9, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 10, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 10, citation 2: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 11, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 12, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 13, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 14, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 15, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 18, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 19, citation 1: is an external URL this validator can neither pin nor open
UNVERIFIED  corpus-template-procedure: evidence entry 20, citation 1: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-template-procedure: evidence entry 20, citation 2: is a graph-edge or tool-result citation, which names no openable file
PASS  corpus validation found no errors; 22 item(s) reported unverified

The 22 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, 17 from this node's own commit/tool-result/external-URL citations) — none are errors.

Command run (verify-gate, run as the literal last command before git commit, nothing piped or redirected):

python3 -m unittest discover -s launchpad/docs/corpus/schema/tests -p "test_*.py" -v

Raw output:

...
Ran 27 tests in 0.033s

OK
  • Tests or checks were run and the raw output is pasted above
  • The diff is confined to the scope of the linked issue
  • No secrets, keys, tokens or hostnames were added to tracked files

Not verified

  • No node has yet been authored from this template. Every claim about what a how-to-shaped node needs (required sections, the 8-10-step guidance, the execute-and-re-test evidence discipline) is grounded in the Diátaxis/Good Docs Project primary sources, not in a worked instance.
  • Whether #1346's eventual merged text draws the reference/how-to boundary identically to how this node draws it from its own side. Checked against PR docs(corpus): add reference corpus template #1534's current (unmerged) body only; neither task: define the reference corpus template #1346 nor this node had merged as of this writing, so the merged text could differ.
  • Whether a corpus node built from this template will actually need the Tutorial-form boundary called out in practice, versus the reference/concept boundaries being the only ones that matter day to day — untested until real instance nodes exist.
  • Did not run just corpus-validate (the Hermit-wrapped form) — ran the direct python3 launchpad/project-intelligence/corpus/validate.py invocation instead, per AGENTS.md's own statement that the two are equivalent and the direct form needs no environment activation.

Security implications

None — this is a documentation-only change to a Markdown corpus node with no executable code, secrets, or configuration affecting runtime behavior.

Escalations

Cross-model review unavailable: Codex is down, tracked as #1467. Same-model adversarial self-review substituted — re-read the drafted document against its own evidence ledger and the Diátaxis/Good Docs Project primary sources for internal consistency, and caught two issues before committing: (1) a markdown bullet under Evidence expectations was accidentally nested one level under the previous bullet rather than being its own top-level item; (2) the Required sections item on the Boundary statement claimed "three exclusions" while the Boundary section actually lists four (the fourth, about AGENTS.md itself, is specific to this template node's own self-awareness and doesn't recur in an instance node) — reworded to make that distinction explicit rather than leave an uncorrected miscount, the same class of drift bug AGENTS.md itself warns about.

Adds launchpad/docs/corpus/templates/procedure.md, the how-to/procedure
template for PRD #605, grounded in Diataxis's How-to guide form and the
Good Docs Project's How-to template (verified as MIT-No-Attribution, not
the Zero-Clause BSD an unmerged research note claims). States the
reference/how-to boundary from this side, coordinating with the sibling
corpus-template-reference node (#1346, PR #1534) rather than restating it.

Closes #1345

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 — procedure corpus template

Diátaxis how-to grounding is accurate — eleven passages quoted verbatim and correctly applied. Three
findings, one of which would make the template reject a legitimate how-to.

Medium — references has an authored inverse, and the body promises a generated one

The FACT at :26-29 says references has "a generated inverse named referenced-by", and
:400-404 tells an instance author it may declare references toward the template "if the author
wants the generated referenced-by edge".

relationships.schema.json sets relationshipMeta.references to
{"inverse": "authored", "inverseType": "referenced-by"} — the only one of the five whose
inverse is not generated. schema/README.md:64-67 defines the distinction: authored means "a
human writes both directions", generated means "tooling derives the reverse edge; never write it
by hand". So an author following :400-404 declares the forward edge and waits for a reverse edge
no tooling produces. Sibling #1534 has the same inversion; #1533 and #1537 state it correctly.

Medium — required section 3 forbids the forking how-to Diátaxis explicitly allows

Section 3 mandates "One numbered task sequence per logical goal ... numbered in the order they must
be performed". diataxis.fr/how-to-guides/, under "What how-to guides are not", says:

"solving a problem or accomplishing a task cannot always be reduced to a procedure. Real-world
problems do not always offer themselves up to linear solutions. The sequences of action in a
how-to guide sometimes need to fork and overlap, and they have multiple entry and exit-points.
"

This node quotes eleven other passages from that same page and omits this one — in a template named
procedure. As written it rejects a legitimately branching how-to as malformed. Add the
fork/branch/judgement allowance to section 3, quoting the passage.

Medium — four templates, four answers for the instance-to-template edge

This node says an instance "may declare references" toward its template.
relationships.schema.json gives "a template instance of a standard" as the worked example for
implements, and two siblings in this wave use it: runbook.md:252-255 ("should declare ...
{type: implements, target: corpus-template-runbook}") and threat-model.md ("must declare
implements"). deployment.md is silent entirely.

My ruling for the wave: implements, stated as a SHOULD. It matches the schema's own example,
and #607's criterion ("every node ... uses the assigned template") argues for the stronger form.
Aligning is worth one line in each.

Low — a FACT the body then contradicts

The entry asserts "No open or closed launchpad-26/buzz issue matches a search for a corpus template
task covering Diátaxis's Tutorial form", backed by two tool-result citations returning []. The
body at :225-226 and the omissions table at :459 then say the gap was "filed as #1538" — and
#1538 is open, "task: corpus templates do not cover Diátaxis's Tutorial form", opened the same day.
The two are reconcilable in sequence (searched, found none, then filed one) but the FACT is false at
the PR's own head. Append "...at the time of the search; #1538 was then filed to own it."

Boundary ruling

"Cut a relay release" -> procedure. "Relay is 5xx-ing, what do I do" -> runbook. Genuinely
distinct, no duplication — but your Boundary section omits runbook (#1347) entirely, and runbook's
overflow pointer sends the general-operations case to a nonexistent node shape rather than here. One
bullet each.

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

by:agent Filed or authored by an AI agent, not a human

Projects

None yet

Development

Successfully merging this pull request may close these issues.

task: define the procedure corpus template

2 participants