Skip to content

docs(corpus): standard for diagrams in corpus nodes (#1312) - #1490

Merged
tucktuck101 merged 8 commits into
launchpadfrom
task/1312-corpus-standard-diagrams
Aug 28, 2026
Merged

docs(corpus): standard for diagrams in corpus nodes (#1312)#1490
tucktuck101 merged 8 commits into
launchpadfrom
task/1312-corpus-standard-diagrams

Conversation

@serina-mcfall

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

Copy link
Copy Markdown

Summary

Adds launchpad/docs/corpus/standards/diagrams.md, the canonical policy node for diagrams
inside corpus nodes: what form one may take, when a node carries one, what evidence it
owes, and what enforces it. The shape is forced by measurement rather than taste — a
corpus diagram cannot be an image file, because validate.py rejects every non-.md file
under the corpus root including one placed under generated/. Nine sections, 31 evidence
entries, no other corpus file touched.

Related issue

Closes #1312. Part of #605.

Issue type

Task


Agent provenance

Field Value
Harness / provider Claude Code
Model claude-opus-5[1m]
Session reference N/A - harness does not expose a run id
Initiating human @serina-mcfall

Objective

One hand-authored corpus node at launchpad/docs/corpus/standards/diagrams.md stating the
diagram policy for the documentation corpus.

Impacted components

launchpad/docs/corpus/standards/diagrams.md          (new — the deliverable)
launchpad/plans/2026-08-26-issue-1312-corpus-standard-diagrams.md   (new — the plan)

No other file is touched. validate.py, node.schema.json, the ADRs and
launchpad/docs/corpus/AGENTS.md are all unchanged, per the issue's out-of-scope list.

Approach and rejected alternatives

The question the task turns on: a diagram asserts relationships, relationships are
substantive claims, and substantive claims need ledger entries — but the body is discarded
before anything is checked, so a claim whose only home is a diagram is unevidenced by
construction.

Chosen: a diagram projects what the node already establishes, and is never the only
place a claim appears. It gets no ledger entry of its own.

Rejected — one ledger entry per drawn edge. It invents a granularity the schema does
not describe (the schema says one entry per claim and gives diagrams no hook), and it
does not survive contact with the checker, which cannot tell the two versions apart.
Between two unenforced rules, the one worth having keeps every claim on the surface that
is checked. Section 5 states plainly that this is a choice rather than a fact and defers
to #1314 if the evidence standard settles it otherwise.

Also rejected — citing launchpad/docs/corpus/AGENTS.md, the instruction node that
governs this work. It has not merged, so a bare-path citation to it resolves on this branch
and hard-fails on launchpad. That is open bug #1473. Every claim is sourced to a primary
file that exists on the merge target instead; section 9 records the cost.

Verification

Command run:

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

# merge-target proof: origin/launchpad tree with ONLY this node added
git archive origin/launchpad | tar -x -C $MT
cp launchpad/docs/corpus/standards/diagrams.md $MT/launchpad/docs/corpus/standards/
cd $MT && git init -q && python3 launchpad/project-intelligence/corpus/validate.py

# negative control: same tree, plus a node citing the unmerged AGENTS.md
cd $MT && 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-standard-diagrams: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 16, citation 1: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 16, citation 2: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 20, citation 2: is a graph-edge or tool-result citation, which names no openable file
PASS  corpus validation found no errors; 5 item(s) reported unverified
EXIT=0

Ran 79 tests in 0.298s
OK

Ran 27 tests in 0.032s
OK

--- merge-target proof (origin/launchpad + this node only) ---
UNVERIFIED  corpus-standard-diagrams: evidence entry 1, citation 1: is a commit reference, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 16, citation 1: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 16, citation 2: is a graph-edge or tool-result citation, which names no openable file
UNVERIFIED  corpus-standard-diagrams: evidence entry 20, citation 2: is a graph-edge or tool-result citation, which names no openable file
PASS  corpus validation found no errors; 4 item(s) reported unverified
EXIT=0

--- negative control: same tree + a node citing the unmerged AGENTS.md ---
FAIL  control-node: evidence entry 1, citation 1: does not resolve to a real file in the repository
FAIL  1 corpus validation error(s)
EXIT=1

The merge-target run is the one that matters, and the negative control is why it is worth
anything: it proves the check can actually fail rather than passing vacuously. The
cross-model reviewer reproduced that probe independently and got the same result.

The two FAIL messages quoted in section 3 of the node are verbatim output of the same
validator against a scratch corpus containing generated/arch.png and topology.svg.

  • 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

  • The mandatory cross-model review gate is NOT discharged. Codex recovered from task: the mandatory cross-model review gate has a single provider, and it is unavailable #1467
    and a real pass ran — it reproduced the merge-target probe and independently confirmed
    one finding — but it ran out of credits mid-review and never reached a verdict. The
    gate was genuinely attempted and genuinely did not complete. This PR is a draft for that
    reason.
  • Nothing establishes that a Mermaid fence renders for any consumer of this corpus. No
    CI step, config or statement in the tree says so. The node's preference for Mermaid rests
    on reviewability in a PR diff, which is verified, not on rendering, which is not.
  • The knowledge crate's rendering capability was not inspected. It is the question most
    likely to change the node's preference between fence languages.
  • Image rejection was measured with --root against scratch corpora, not by committing
    a knowingly-invalid file into this branch's history.
  • One FACT rests only on UNVERIFIED tool-result citations — the measured diagram
    counts (1 Mermaid fence, 20 box-drawing files). Disclosed in section 9, since no check
    holds that convention.
  • .superpowers/ step ledger is gitignored, so it records the build locally only; the
    durable record of the merge-target check is this PR body.

Security implications

None. The change adds two Markdown documents and no executable path, no dependency, no
configuration and no network surface. Nothing in the diff is read by any runtime component;
the only consumer is validate.py in CI, which parses front matter and never executes it.

Escalations

Two review findings are filed rather than fixed, because they concern other artefacts:

Six further findings from review-final were fixed in d3e737f rather than deferred,
because each was a defect inside this deliverable: four issue-ownership claims asserted in
the body with no ledger entry (a finding the cross-model pass reached independently); a
MUST in section 5 that the node's own worked example could not satisfy; a ledger entry that
overclaimed; a missing #1478 caveat; and the plan's now-stale GATES paragraph, corrected by
appending what happened rather than rewriting what was true when written.

Left as a draft for your call, since the cross-model gate did not complete. To approve:

gh pr review 1490 --repo launchpad-26/buzz --approve

…STEP 1)

Plans launchpad/docs/corpus/standards/diagrams.md against the constraint that
decides its whole shape: ADR-0028 makes Markdown-with-front-matter the one
canonical authored representation, and find_ownership_violations rejects every
non-.md file under the corpus root -- including one placed under generated/.
Measured with validate.py --root against a scratch corpus rather than assumed.

Fixes three review-plan findings before building: an uncounted "two existing
diagram-as-text sites" claim (git grep measures 20 box-drawing files and one
mermaid fence), a done-when grep that returns 12 rather than 1 when run against
a real ledger, and a GATES line that disclaimed the undischarged cross-model
gate without naming the --draft mechanism that keeps it visible.

Every citation this node will carry is checked to exist on origin/launchpad,
so it avoids #1473's class of failure: a bare-path citation to AGENTS.md
validates locally and hard-fails on the merge target, where AGENTS.md does not
exist yet.

Refs #1312

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
…ard (#1312 STEP 2)

Twenty-five ledger entries, one commit-only FACT (the revision), and no
relationships. The reason recorded for the absence is merge order rather than
an empty corpus: corpus-agents is loadable from this branch's base and absent
from origin/launchpad, where an unmatched relationship target is a hard error.

Every openable citation was checked to exist on the merge target before it was
written, so this node cannot reproduce #1473 -- it cites no file that resolves
here and fails there. That is why AGENTS.md, which governs this work, is cited
nowhere: it has not merged.

Issue-sourced claims about which sibling task owns a deferred subject are
TEAM_KNOWLEDGE attributed to the issue, never FACT. An issue URL cannot be
SHA-pinned and the validator's repository-link check matches only file and tree
views, so no openable citation form for one exists.

type is governance because the schema defines type as the corpus surface a node
documents and #1312 calls this the canonical policy node. audiences omits
developer deliberately; section 9 says why rather than leaving it silent.

Refs #1312

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
Nine sections answering #1312's definition of done clause by clause.

The constraint that shapes all of it: a corpus diagram cannot be an image file.
ADR-0028 makes Markdown-with-front-matter the one canonical authored form, and
find_ownership_violations rejects every non-.md file under the corpus root --
including under generated/, because no generator exists yet to reproduce it.
Section 3 quotes the validator's own two failure messages rather than
paraphrasing them.

Section 5 answers the question the task actually turns on. A diagram asserts
relationships, relationships are substantive claims, and substantive claims need
ledger entries -- but the body is discarded before anything is checked, so a
claim whose only home is a diagram is unevidenced by construction. The rule:
a diagram projects claims the ledger already carries and is never the only place
a claim appears; it gets no entry of its own. The rejected alternative -- one
entry per drawn edge -- is named with the reason, and the section says plainly
that this is a choice and defers to #1314 if the evidence standard settles it
otherwise.

The worked example is this node's own diagram, every edge of which is backed by
an entry in this node's own ledger, with the caption naming which.

Section 6 forbids path:line anchors (#1459 -- the line is never bounds-checked)
and requires bare paths, because that is what makes git diff --name-only against
the recorded revision a real staleness test until #556 lands. Section 9
discloses the one FACT resting on tool-result citations, why AGENTS.md is cited
nowhere, and three things that could not be verified -- starting with the fact
that nothing in the tree establishes a Mermaid fence renders for anyone.

Refs #1312

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
…rd (#1312)

review-final raised eight findings and the cross-model Codex pass independently
confirmed one of them before it ran out of credits. Six are fixed here; two are
filed.

Six ledger entries added. Four issue-ownership claims -- #1321, #1318, #1307 and
#1473 -- were asserted in the body with nothing backing them, breaking the
convention this node's own STEP 2 set and, worse, doing it in the node whose
subject is traceability. That is the finding both reviewers reached independently.
The other two entries carry the new #1478 caveat and the #1489 backfill.

Section 5's MUST could not be satisfied by this node's own worked example. It
required every diagram edge to trace to a ledger entry, but section 2 establishes
that a rule this standard authors carries no entry and names its own authority
instead -- and edge 3 of the example diagram ("a diagram lives inside the body")
is backed by exactly such a rule. The MUST now admits both, the caption walks all
five edges instead of three, and the reviewer checklist matches. A standard whose
own example fails its own rule is evidence the rule was wrong, not the example.

Two findings are filed rather than fixed, because they are about other artefacts:
#1488 records three defects in AGENTS.md's create procedure found by following it
literally -- including the one that causes #1473 -- and #1489 tracks the
relationships backfill that ten sibling branches are all deferring to nobody.

The plan's GATES paragraph is corrected, not rewritten: the original said Codex
was unavailable, which was true when written. The appended note records what
actually happened -- Codex recovered, ran, confirmed a finding, then ran out of
credits mid-review without reaching a verdict. The gate is still not discharged.

Refs #1312

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
@serina-mcfall serina-mcfall added the by:agent Filed or authored by an AI agent, not a human label Aug 26, 2026
@serina-mcfall serina-mcfall self-assigned this Aug 26, 2026
@serina-mcfall
serina-mcfall marked this pull request as ready for review August 26, 2026 21:08
@tucktuck101 tucktuck101 self-assigned this Aug 26, 2026

@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.

Request changes

Medium: permitted diagram forms never defined

launchpad/docs/corpus/standards/diagrams.md:185-186,211-212 makes every fenced diagram block legal; Mermaid and box-drawing are only preferences. Unknown fence languages, ASCII art, or an untagged code block all "comply." State the closed permitted set with exact fence-language handling, or explicitly declare any fenced diagram-as-text form permitted and make enforcement deliberate.

Medium: restates canonical citation/update policy as diagram-specific, with a self-contradicting example

:344-355 restates the general citation-prefer-bare-path. and update-ledger rules from the base AGENTS/CONTRACT as diagram-only MUSTs, while its own example (lines 325-327) cites a source under a self-authored edge rule with no credential (line 270). Reduce these to a diagram-specific application linking AGENTS.md/CONTRACT.md, and reconcile the example against the bare-path MUST.

What looks good

The section is otherwise concrete; the scope-and-omissions and enforcement sections read cleanly.
[panel: fable+codex]
Note: also unstack this after #1462 — it carries the same AGENTS.md/plan-636/test payload.

@tucktuck101 tucktuck101 removed their assignment Aug 26, 2026
…-standard-diagrams

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
…inst AGENTS.md (#1312)

Section 3's MUST left "any fenced code block" legal by omission while
Mermaid/box-drawing read as the only real options. Stated the open set as
a deliberate choice consistent with section 7's own admission that
nothing checks fence language, rather than closing it to a set this
standard has no enforcement basis for.

Section 6 restated AGENTS.md's citation-shape and ledger-update rules as
diagram-only MUSTs, and its own worked example (edge 3, backed by a
self-authored rule with no ledger entry) contradicted the MUST that every
edge's source get a bare-path citation. Narrowed section 6 to the
diagram-specific application -- citation follows the claim it projects,
a self-authored-rule edge has nothing to cite -- and linked the general
rules to AGENTS.md instead of restating them.

review-final finding (fable+codex panel), verified against branch head
before fixing: both gaps were still open.

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

Copy link
Copy Markdown
Author

Round-2 findings addressed

Both verified against branch head (d3e737fe7, which predated this review) before fixing — neither was already closed.

  • Medium (permitted diagram forms never defined): section 3 now states plainly that the permitted set is open by choice — any fence language, including untagged — because section 7 already admits nothing checks fence language; closing the set to Mermaid/box-drawing alone would claim an enforcement this standard doesn't have. The SHOULD narrows by preference, not permission.
  • Medium (restates AGENTS.md's citation/update policy, self-contradicting example): section 6 now links the citation-shape and ledger-update rules to AGENTS.md instead of restating them, and states only the diagram-specific application — an edge backed by a ledger claim inherits that claim's citation; an edge backed by a self-authored rule (section 5's second case) has nothing to cite. This reconciles the MUST against the worked example's edge 3, which is exactly such a case.

Merged origin/launchpad in (clean, no conflicts — AGENTS.md is byte-identical across branches). Validator passes clean (0 errors, 8 unverified/expected); full test suite green (79 tests).

Fixed at f9c6c4a4b. Requesting re-review.

@serina-mcfall
serina-mcfall dismissed tucktuck101’s stale review August 27, 2026 22:45

Fixed since this review by follow-up commit f9c6c4a: the permitted-diagram-forms gap is now explicitly closed (open set, any fence language legal, stated as a deliberate choice), and the restated citation MUSTs were replaced with an explicit deferral to AGENTS.md. Verified directly against current text. Dismissing as stale/resolved.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Reviewed commit d1b97acce0b56a86a7e3161028bd33630f299111 against merge base dea96f837690703b1298ab3f0e49e1b82fecb8cf.

Incomplete

This review is INCOMPLETE and must not be read as a full pass:

  • no dimension was actually reviewed: the pipeline ran the 'default_reviewer' stub reviewer, which reports every dimension clean without reading it (a real dimension reviewer is #116)

Containment

No containment findings.

Fetched and empty: pr_review_comments.

Automated containment covers the delimiter boundary and unambiguous injection tells only. It does not cover injection phrased as ordinary, unremarkable prose. The absence of a containment finding is not evidence that this pull request contains no injection attempt.

Per Serina's decision on #1486, this node reconciles to #1313's
documentation-standard before merging:

- D1: carries the six required sections in the required relative order.
- D3: MUST requirements and SHOULD guidance now occupy separate sections
  instead of being mixed through the narrative.
- D4: every requirement carries a stable identifier, DG1-DG10 and
  DGS1-DGS6.
- D5: every requirement names what enforces it, or states that nothing
  does.
- D10: H1 is now 'Standard: diagrams', matching the subject the id names.
- G4: top-level sections are no longer numbered; internal references name
  a section or a requirement identifier instead of a section number.

No normative content changed - every MUST and SHOULD in the previous
revision is preserved, relocated and identified. Explanatory prose is
retained in named sections between SHOULD and Enforcement.

Refs #1486
Refs #1312

Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
@tucktuck101
tucktuck101 merged commit e9a5b37 into launchpad Aug 28, 2026
25 checks passed
@serina-mcfall
serina-mcfall deleted the task/1312-corpus-standard-diagrams branch August 31, 2026 20:25
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: document corpus standard for diagrams

2 participants