BUG-007
ID:BUG-007Status:fixed

Plan entity attribute tables omit attributes the plan workflow requires

site/content/plan/docs/plan-entities.md documents the attributes of {% spec %}, {% work %}, {% bug %}, {% decision %}, and {% milestone %}. All five tables are incomplete, and two of the omissions are attributes the project's own mandatory workflow depends on.

Measured against refrakt reference <rune> --format json --site plan:

Severity:majorMilestone:v0.33.0
claude/content-author-docs-org-vps1un View source

Criteria completion

Criteria completion: 6 of 6 (100%) checked; history from Sep 10 to Sep 100%25%50%75%100%Sep 10Sep 10
Branches 2
claude/content-author-docs-org-vps1un current fixed
changeset-release/main fixedmain fixed
History 2
  1. 9f912a1
    • ☑ `spec` documents `released-in`, `created`, `modified`
    • ☑ `work` documents `pr`, `supersedes`, `created`, `modified`
    • ☑ `bug` documents `pr`, `created`, `modified`
    • ☑ `decision` and `milestone` document `created`, `modified`
    • ☑ `released-in` and `pr` are marked as required by the workflow, not merely listed
    • ☑ The page's prose does not contradict `CLAUDE.md` on when each is mandatory
    by bjornolofandersson
  2. 30680c4
    Created (confirmed)by bjornolofandersson

Expected

The page documenting plan entity attributes lists the attributes those entities accept, including the ones the workflow requires.

Actual

spec omits released-in. CLAUDE.md:365: "Flip after npm run release, paired with released-in="vX.Y.Z" (validate errors on a shipped spec with no released-in)." The reference page omits the one attribute plan validate refuses to ship a spec without.

work and bug omit pr. CLAUDE.md:335 makes it step 2 of the mandatory completion checklist — "the structured source of truth for traceability" — and CLAUDE.md:357 says "Never skip the --resolve summary or the pr attribute." Neither entity's table mentions it.

work omits supersedes, which CLAUDE.md documents as the pairing for a superseded work item ("validate warns if it's missing").

All five omit created / modified, the timestamp attributes packages/content/src/timestamps.ts reads.

The consequence is that the plan workflow is only fully documented in CLAUDE.md. A contributor reading the reference page — the page that exists to describe these attributes — cannot learn that pr or released-in exist, let alone that they are required.

Steps to reproduce

npm run build
node packages/cli/dist/bin.js reference work --format json --site plan
# → own: id, status, priority, complexity, assignee, milestone, source,
#        supersedes, pr, tags, created, modified
grep -c '^| `' site/content/plan/docs/plan-entities.md   # the work table lists 8

Note the --site plan flag: the plan runes come from @refrakt-md/plan, which is only in the plan site's plugin set. Without it the command reports "Unknown rune".

Root cause

Same as BUG-006 — hand-copied attribute tables with nothing checking them — but on a page outside /runes/. scripts/check-rune-docs.mjs only considers pages under the rune catalogue, so this page is invisible to the one guard that exists.

Acceptance Criteria

  • spec documents released-in, created, modified
  • work documents pr, supersedes, created, modified
  • bug documents pr, created, modified
  • decision and milestone document created, modified
  • released-in and pr are marked as required by the workflow, not merely listed
  • The page's prose does not contradict CLAUDE.md on when each is mandatory

Approach

Fix by hand, as with BUG-006 — the data is one CLI call away and the edit is mechanical.

Do not merely add rows for pr and released-in. Their significance is that they are required at a particular point in the lifecycle, and a bare row in a table does not convey "validate will error without this". Say so where the lifecycle is described.

created / modified are the opposite case: they are maintained by tooling rather than authored, so they should be listed as such rather than presented as fields to set by hand.

References

  • BUG-006 — the same class of drift on /runes/ pages
  • SPEC-128 — generating these tables; its scope is widened to cover pages like this one, which are not under /runes/
  • CLAUDE.md — the plan workflow that depends on the undocumented attributes

Resolution

Completed: 2026-09-10

Branch: claude/content-author-docs-org-vps1un

What was done

site/content/plan/docs/plan-entities.md — all five entity tables now cover every attribute the schema declares. Verified mechanically against refrakt reference <rune> --format json --site plan: spec 8/8, work 12/12, bug 10/10, decision 8/8, milestone 5/5, no attribute left undocumented.

Added, rather than merely listed:

  • released-in (spec) — noted as required once status="shipped", because plan validate errors without it.
  • pr (work, bug) — noted as the thing to set when marking an item done, since it is what links a spec to the code that delivered it and what plan status builds its PR rollups from.
  • supersedes (work) — paired with status="superseded", which validate warns about when the replacement is unnamed.
  • created / modified (all five) — described as tooling-maintained with a file-timestamp fallback, so they read as something you rarely set by hand rather than as fields to fill in.

Notes

  • The three lifecycle attributes were the point of this bug: a bare row does not convey "validate will refuse this", so each says where in the lifecycle it becomes mandatory. Checked against CLAUDE.md so the page and the workflow agree.
  • Every claim was measured, unlike BUG-006, where three of four original claims turned out to be false positives. All five tables here were genuinely incomplete.