Docs IA & Onboarding Overhaul — Terminology Sweep & Closing Report
This is WP10's closing record for mission docs-ia-onboarding-overhaul-01KY02JB — the final
work package, run only after WP01–WP09 were all approved. It covers T040–T044: the mission-wide
terminology/glossary sweep (FR-014), the NFR-005 Divio frontmatter coverage check, and the C-003
follow-up issue filing. See also
docs-audit.md for the
per-WP disposition tables and findings this report summarizes.
Mission diff scope
WP10's lane (lane-a) depends on all 8 sibling lanes (lane-b through lane-i, covering
WP02–WP09). Those dependency-lane tips were merged into lane-a's worktree (idempotent, via the
lane allocator's standard dependency-merge step) before this WP's checks ran, so T040–T044
operated on the full combined mission output, not just WP01's own commits. The mission's diff
against its merge-base with main touches 86 files total, of which 76 are under docs/
(70 Markdown pages + 6 non-Markdown nav/config files: toc.yml, docfx.json,
3-2-page-inventory.yaml, and per-zone child TOCs).
Pages moved / merged / removed / created
Pulled from docs-audit.md
and confirmed against git diff --name-status -M for the full mission diff:
| Action | Count | Detail |
|---|---|---|
| Moved | 13 | docs/guides/ → docs/development/ (WP01), confirmed contributor-only content. docs/development/ grew from 7 pre-existing pages to 20 (18 Markdown pages + the generated inventory lockfile + one pre-existing doctrine tactic YAML). |
| Renamed | 1 | docs/guides/your-first-feature.md → docs/guides/your-first-mission.md (WP03, FR-014's explicit retitle requirement). |
| Created | 4 new pages | docs/context/mission-types.md, docs/context/ops-vs-missions.md (WP04); docs/doctrine/doctrine-kinds.md, docs/doctrine/create-a-doctrine-artifact.md (WP06). Plus 2 new nav files: docs/development/toc.yml (WP02's new contributor-zone child TOC) and this report itself. |
| Removed | 0 | No page was deleted. Content consolidation (WP05's charter how-to work) rationalized overlapping content across existing pages rather than deleting files — confirmed via git diff --name-status: zero D (delete) entries anywhere under docs/ for the full mission diff. |
| Content-edited (accuracy/terminology/nav) | ~50 pages | The remainder of the 70 touched Markdown pages: WP02's nav rebuild, WP05's charter consolidation, WP07's reference-accuracy fixes (8 confirmed inaccuracies across docs/api/, docs/migrations/, docs/adr/, docs/operations/ — see docs-audit.md's WP07 section), WP08's glossary-anchor activation, and this WP's own terminology-casing and Divio-frontmatter fixes. |
Final navigation entry counts per zone
docs/toc.yml (WP02's two-zone rebuild, verified live against the current file):
| Zone | Unexpanded top-level entries |
|---|---|
| Using Spec Kitty (end-user) | 6 — Home, Guides, Core Concepts, Reference, Migrations, Project Updates |
| Contributing (contributor) | 5 — Architecture, ADRs, Plans, Operations, Development |
The Using Spec Kitty zone is at 6 unexpanded entries and Contributing at 5 (both within NFR-003's
<=6 ceiling; "Mission Runs" is nested under Project Updates in the Using zone, not a Contributing
top-level entry), down from the prior 16-entry flat list, and FR-015 (hierarchical grouping via
nested items:) is satisfied. Development is the one
genuinely new top-level entry, closing the pre-existing gap WP01 flagged (docs/development/ had
zero docs/toc.yml entries before WP02, despite holding 20 pages after WP01's relocation).
Terminology / glossary check status
Two architectural checks were run against the full mission diff (.venv/bin/pytest tests/architectural/test_no_legacy_terminology.py tests/architectural/test_glossary_canonical_terms.py -v):
test_no_legacy_terminology.py — clean, 3/3 passed
The hardcoded two-term legacy denylist defined in test_no_legacy_terminology.py (both terms
canonicalize to "status commit" per .kittify/glossaries/spec_kitty_core.yaml) has zero
occurrences anywhere this mission touched. No fixes were needed.
test_glossary_canonical_terms.py — mission scope clean; pre-existing drift outside scope remains
This test (added by WP09) scans all of docs/**/*.md for the 104-term live glossary seed's
multi-word surfaces (.kittify/glossaries/spec_kitty_core.yaml) in non-canonical casing. On the
full docs/ tree it initially reported 274 flagged occurrences. Cross-referencing every
flagged file against this mission's own diff (git diff --name-only vs. the mission's
merge-base with main) split the findings:
- 74 occurrences, across 21 files this mission genuinely touched (real content edits, not
incidental) — all fixed in this WP. Files:
docs/api/{charter-commands,cli-commands, configuration,environment-variables,file-structure,missions,supported-harnesses}.md,docs/changelog/CHANGELOG.md,docs/doctrine/doctrine-kinds.md,docs/guides/{accept-and-merge, create-plan,generate-tasks,implement-work-package,merge-feature,multi-agent-workflow, review-work-package,troubleshoot-merge,use-dashboard,your-first-mission}.md,docs/plans/3-2-doc-publication/{3-2-information-architecture,3-2-navigation-plan}.md. Each fix was a minimal casing correction — a title-case or PascalCase rendering of a multi-word glossary term (per.kittify/glossaries/spec_kitty_core.yaml) brought back to its canonical all-lowercase surface form — applied at the exact file:line the check flagged. - 200 occurrences, across ~70 files this mission never touched (e.g.
docs/context/orchestration.md,docs/architecture/kanban-workflow.md,docs/archive/2x/runtime-and-missions.md, most ofdocs/plans/engineering-notes/anddocs/plans/investigations/) — left untouched, per this mission's DIR-013 discipline (pre-existing findings outside a WP's own diff are noted, not silently absorbed into scope). These are genuine casing drift that predates this mission;test_glossary_canonical_terms.pyitself remains red at the repository level until a future pass (or the C-003 follow-up work, see below) addresses them.
Re-run confirmation: after the fixes, zero of the remaining 200 flagged occurrences fall
inside this mission's diff (comm -12 between the flagged-file list and the mission's
touched-file list returns empty). Both checks were re-run clean for mission scope; the
glossary-casing test still fails at the whole-repo level solely due to the 200 pre-existing,
out-of-scope occurrences.
Success Criterion 7 ("a terminology/glossary-canonical-form check runs clean across all mission-touched docs at completion") is met: zero flagged occurrences remain within files this mission touched or created.
NFR-005 — Divio frontmatter coverage
Every Markdown page this mission touched or created under docs/ was checked for a type:
frontmatter field with a value in {tutorial, how-to, reference, explanation}.
Scope decision: NFR-005's acceptance criterion text specifically targets "100% of pages in
docs/guides/ (post-restructure) and newly authored pages." That is also the only zone where the
existing repository convention actually applies type: frontmatter — a spot-check across
docs/api/, docs/adr/, docs/changelog/, docs/plans/, docs/operations/,
docs/architecture/, and index/nav pages throughout the tree (including ones this mission did
not touch) confirms none of them carry type:; they use a distinct, consistent title/
doc_status/date-style frontmatter for process/reference artifacts (ADRs, changelog, planning
notes) that Divio classification doesn't fit. Retrofitting type: onto only the handful of such
files this mission happened to touch, while leaving hundreds of untouched siblings in the same
directories without it, would create inconsistency rather than close a real gap. This WP
therefore applied the NFR-005 fix precisely where the acceptance criterion — and the established
convention — actually target it: docs/guides/ and newly authored pages.
Findings and fixes:
22
docs/guides/*.mdpages were touched by this mission. 3 already had validtype:(charter-governed-workflow.md,setup-governance.md,troubleshoot-charter.md— WP05). 3 are index/nav pages (index.md,how-to-index.md,tutorials-index.md), excluded per the same convention every otherindex.mdin the tree follows (none carrytype:, confirmed spot-check againstdocs/api/index.md,docs/development/index.md,docs/operations/index.md,docs/doctrine/index.md,docs/planning/index.md). The remaining 16 pages were missingtype:entirely — fixed in this WP, classified from actual page content (several self-declare "Divio type: Tutorial" in their body, confirming the classification):Page Type added getting-started.md,missions-overview.md,multi-agent-workflow.md,orchestrator-quickstart.md,your-first-mission.mdtutorialaccept-and-merge.md,create-plan.md,create-specification.md,generate-tasks.md,implement-work-package.md,install-claude-code-plugin.md,merge-feature.md,review-work-package.md,troubleshoot-merge.md,use-dashboard.md,use-retrospective-learning.mdhow-to4 newly authored pages (
docs/context/mission-types.md,docs/context/ops-vs-missions.md,docs/doctrine/doctrine-kinds.md,docs/doctrine/create-a-doctrine-artifact.md) already carried validtype:frontmatter (explanation,explanation,explanation,how-torespectively) — added by WP04/WP06 at authoring time, no fix needed.docs/development/3-2-page-inventory.yaml(the generated frontmatter lockfile) was regenerated viascripts/docs/inventory_lockfile.py --writeafter these frontmatter changes, per the same canonical-tooling convention WP01 and WP07 used.--strictre-run confirms zero drift (generated=639 committed=639).
Result: 100% of this mission's touched/created pages within NFR-005's actual scope
(docs/guides/ non-index pages + newly authored pages) now carry valid Divio type:
frontmatter. Pages outside that scope (ADRs, changelog, plans, API reference, operations,
migrations, architecture) retain the repository's separate, pre-existing, intentional
frontmatter convention and are not part of the Divio-classification gap NFR-005 targets.
Follow-up GitHub issues filed
Two follow-up issues were filed as part of this WP, per C-003 and an additional scope-boundary finding surfaced by WP06:
- #2822 — "Glossary: add
alias/banned-synonym governance (full canonical-term enforcement)". Tracks C-003's deferred
scope: the glossary schema (
.kittify/glossaries/spec_kitty_core.yaml) has noaliasesor banned-synonym field, andtest_glossary_canonical_terms.pyonly checks casing of known terms, not alias/banned-synonym resolution. References this mission, C-003, the schema gap, and the narrower test it would extend. - #2823 — "CLAUDE.md: Canonical Kind
Vocabulary table is stale (lists 'template' instead of 'procedure')". WP06 found that root
CLAUDE.md's doctrine-kind table liststemplateas one of the 8 charter-activatable kinds; the actual 8th kind isprocedure(verified againstsrc/doctrine/artifact_kinds.py'sCHARTER_KIND_TOKENS,src/charter/kind_vocabulary.py, and a livefrom doctrine.artifact_kinds import CHARTER_KIND_TOKENScheck).template/assetare distinct, non-charter-activatableArtifactKindmembers.CLAUDE.mdis outside this mission'sdocs/-scoped remit to edit directly, so it is tracked as a follow-up instead. This mission's owndocs/doctrine/doctrine-kinds.md,data-model.md, andresearch.mdalready use the correct 8-kind list.
Residual note, corrected post-mission-review: an earlier draft of this report claimed
spec.md (lines 109, 128, 194) still listed the stale template-inclusive doctrine-kind set at
WP10 authoring time. Re-verified during mission review: spec.md was already corrected to the
accurate procedure-inclusive 8-kind list before WP10 ran (commit eb88fa336, merged into this
WP's lane before implementation started) — the claim was stale/inaccurate, not a real finding.
spec.md, data-model.md, research.md, and docs/doctrine/doctrine-kinds.md are all
consistent on the corrected 8-kind list as of mission completion.
Verification commands
# Terminology checks (both clean for mission scope; glossary-casing check still red
# repo-wide due to 200 pre-existing, out-of-scope occurrences):
.venv/bin/pytest tests/architectural/test_no_legacy_terminology.py -v
.venv/bin/pytest tests/architectural/test_glossary_canonical_terms.py -v
# Relative-link integrity (unaffected by this WP's edits):
PYTHONPATH=src .venv/bin/python3 -m scripts.docs.relative_link_fixer --check
# Page-inventory lockfile freshness (zero drift after this WP's frontmatter fixes):
PYTHONPATH=src .venv/bin/python3 -m scripts.docs.inventory_lockfile --strict