3.2 Version Taxonomy
Source of truth for how every page under
docs/,architecture/, and the rootREADME.mdis classified for the 3.2 documentation refresh.Mission:
spec-kitty-3-2-docs-01KS4KSZ· Requirement: FR-001 · Constraint: C-008 (bulk-edit guardrail required before frontmatter rollout)
This document defines the five-tag version-relevance taxonomy that the
3.2 docs rollout uses as its single classification axis. Every docs page
that appears in docs/development/3-2-page-inventory.yaml maps to exactly
one tag from this list. The taxonomy is the canonical surface for:
- The version-tag frontmatter rollout (workstream A2 / WP02).
- The archive/migration moves for
docs/1x/**anddocs/2x/**(workstream C / WP09). - The version-leakage validation check
(
contracts/version_leakage_check.md, FR-005 / NFR-002). - The navigation plan that separates 1.x archive, 2.x archive, 3.1 supported, 3.2 current, and migration content (FR-004).
The canonical enum lives at kitty-specs/spec-kitty-3-2-docs-01KS4KSZ/data-model.md
§"VersionTag (enum)". The taxonomy below is the operator-facing
description of that enum.
The five tags
The terms below are reproduced verbatim from
spec.md §"Domain
Language" so that this document and the spec stay in lock-step.
current
Definition (verbatim from spec.md Domain Language): Version-relevance tag for pages that describe 3.2 behaviour.
Avoid: "latest", "the new docs".
Adoption rule. Apply current to every page that documents 3.2 surface
area — installed CLI behaviour, charter doctrine as it ships in 3.2, the
3.2 mission workflow, harness pages that match the 3.2 generated tree, and
the 3.2 reference. New pages authored during this mission default to
current.
Banner requirement. None. current pages must not carry an archive
or migration banner; the version-leakage check
(contracts/version_leakage_check.md, rule LEAK-CURRENT-LINKS-ARCHIVAL)
flags current pages that link to archival pages without a migration
banner on the destination.
Example pages.
docs/context/charter-overview.mddocs/context/index.mddocs/guides/install-macos.md(target page set by FR-017 once landed)
supported
Definition (verbatim from spec.md Domain Language): Version-relevance tag for 3.1-relevant pages still useful but not 3.2-complete.
Avoid: "old current", "previous-but-ok".
Adoption rule. Apply supported to a 3.1-era page that still describes
behaviour the 3.2 user is likely to invoke unchanged, but which has not yet
been re-audited and rewritten for 3.2 completeness. The plan phase decides
whether 3.1 content gets a separate nav group or folds into 3.2 as migration
notes (deferred decision 01KS4KTGTN4DBE60JFWKEA2FJB); until that lands,
supported is the holding tag for those pages.
Banner requirement. None required by the leakage check, but supported
pages should carry a short header noting "Last audited against 3.1 — see
the 3.2 migration note when behaviour differs." A current-tagged page may
link to a supported-tagged page without triggering the leakage check.
Example pages.
- Any page that today lives under
docs/architecture/ordocs/api/describing 3.1 surface still in 3.2 without revision (assigned by the WP02 page inventory).
archival
Definition (verbatim from spec.md Domain Language): Version-relevance tag for 1.x or 2.x material kept for historical record.
Avoid: "deprecated docs", "legacy" (without qualification).
Adoption rule. Apply archival to every page under docs/1x/** and
docs/2x/**. Per C-004, these directories move to docs/archive/1x/** and
docs/archive/2x/** as part of WP09; WP01 only declares the mapping in
occurrence_map.yaml.
Banner requirement. Mandatory. Each archival page must include an
archive banner within the first 20 non-empty lines that matches the regex
defined in
contracts/version_leakage_check.md:
^>\s*(?:Archive notice|Migration note)\b
Pages missing the banner produce the LEAK-MISSING-BANNER finding at
publication gate.
Example pages.
docs/1x/index.mddocs/1x/artifacts-and-commands.mddocs/2x/glossary-system.md
migration
Definition (verbatim from spec.md Domain Language): Version-relevance tag for pages explaining how to move from an earlier version to 3.2.
Avoid: "transition guide" (without tag).
Adoption rule. Apply migration to a page whose primary purpose is to
walk a reader from an earlier-version state to a 3.2 state. Pages in
docs/migration/** are the canonical home; a current page may also be
re-tagged migration if it consists primarily of upgrade instructions.
Banner requirement. Mandatory. Same banner regex as archival:
^>\s*(?:Archive notice|Migration note)\b
A current page may link to a migration page without triggering
LEAK-CURRENT-LINKS-ARCHIVAL; the banner on the migration page is what makes
the cross-link legal.
Example pages.
docs/migration/from-charter-2x.mddocs/migration/charter-ownership-consolidation.mddocs/migration/feature-flag-deprecation.md
internal
Definition (verbatim from spec.md Domain Language): Version-relevance tag for development-only or non-public material.
Avoid: "dev notes", "private".
Adoption rule. Apply internal to every page under
docs/development/** and architecture/** — material aimed at maintainers
and contributors, not at end users running Spec Kitty. internal pages are
excluded from the public 3.2 navigation; they live in the repo and are
discoverable to anyone reading the source, but they are not part of the
published docs site index.
Banner requirement. None. The leakage check ignores internal pages on
both sides of a link: a current page may link to an internal page (it
counts as a developer-reference link, not a version leak), and an internal
page may link anywhere.
Example pages.
docs/development/3-2-version-taxonomy.md(this file)docs/development/local-overrides.mddocs/adr/3.x/2026-04-25-1-shared-package-boundary.md
Reference: VersionTag enum
The canonical Python enum lives in
data-model.md
§"VersionTag (enum)":
class VersionTag(StrEnum):
CURRENT = "current" # 3.2-current
SUPPORTED = "supported" # 3.1-relevant, not 3.2-complete
ARCHIVAL = "archival" # 1.x or 2.x
MIGRATION = "migration" # version transition guidance
INTERNAL = "internal" # dev-only / non-public
The serialized form (the string value of each enum member) is what appears
in page frontmatter and in docs/development/3-2-page-inventory.yaml.
Reference: PageInventoryEntry schema
Each page's tag is recorded in docs/development/3-2-page-inventory.yaml as
a PageInventoryEntry row — see
data-model.md
§"PageInventoryEntry". Key invariants relevant to this taxonomy:
- Every inventoried page maps to exactly one
VersionTag. tag == archivalimpliescurrent_target == false.tag == currentimpliescurrent_target == true.tag == migrationimplies the file body contains the migration banner regex fromcontracts/version_leakage_check.md.- Pages tagged
internalare excluded fromcurrent_targetvalidation entirely (they do not appear in 3.2-current nav).
These invariants are enforced by the inventory validator that WP02 introduces (per FR-002) and by the leakage check at publication time (per FR-005 / NFR-002).
How filtering works
Adapted from research note R-006 — Version-tag mechanism in
research.md.
The 3.2 docs apply version filtering through a two-source cross-check, not a single mechanism:
YAML frontmatter on each page is authoritative for what the page claims it is:
--- version_tag: current ---The frontmatter is what the version-leakage check reads at publication time to decide whether a link from page A to page B is legal.
The page-inventory manifest at
docs/development/3-2-page-inventory.yamlis the source of truth for what each page should be tagged and where it should sit in nav. The inventory is onePageInventoryEntryrow per page.The leakage check cross-references the two. If a page's frontmatter says
version_tag: currentbut the inventory row saysarchival, the check fails withLEAK-FRONTMATTER-INVENTORY-DRIFT. If a page taggedarchivalormigrationis missing the banner from the leakage-check contract, it fails withLEAK-MISSING-BANNER. If acurrentpage links to anarchivalpage and the destination has no migration banner, it fails withLEAK-CURRENT-LINKS-ARCHIVAL.Navigation grouping is independent of the tag. Where the site generator does not surface frontmatter natively, the navigation plan (FR-004) adds explicit nav groups for "3.2 current", "3.1 supported", "Archive (2.x)", "Archive (1.x)", and "Migration". The tag stays the single classification axis; the nav grouping is a presentation layer over it.
This two-source design means the bulk-edit guardrail for the frontmatter
rollout (WP02) and the bulk move of 1.x/2.x pages (WP09) can run
independently: the inventory rows can be authored before the frontmatter
lands on every page (the deferred-frontmatter exception list in the
inventory covers the gap), and the leakage check still gates publication.
Annex: docs/ inventory snapshot (2026-05-21)
Read-only survey of every markdown / YAML / JSON file under docs/,
architecture/, and the root README.md at base commit
6e81c2b186131633253426a3485ebfeebc343d8b. Captured by running:
git ls-files docs/ architecture/ README.md \
| grep -E '\.(md|yml|yaml|json)$' \
| sort > /tmp/wp01-docs-survey.txt
Total inventoried files: 413
Bucket counts by top-level directory (sorted by file count, descending):
| Bucket | Count | Notes |
|---|---|---|
architecture/2.x/ |
110 | Internal — 2.x architectural intent |
docs/adr/3.x/ |
67 | Internal — Architecture Decision Records |
docs/guides/ |
39 | Mostly current / supported (WP02 will tag) |
docs/development/ |
32 | Internal — maintainer-facing |
architecture/3.x/ |
27 | Internal — 3.x architectural intent |
architecture/1.x/ |
18 | Internal — historical architectural intent |
docs/api/ |
17 | Mostly current (CLI reference + harness reference) |
docs/architecture/ |
16 | Mostly current / supported |
docs/context/audience/ |
13 | Internal — audience-targeted architecture notes |
docs/migration/ |
12 | All migration |
docs/2x/ |
9 | All archival — move to docs/archive/2x/ per WP09 |
docs/ (root files) |
8 | Mostly index pages and top-level explanation |
docs/guides/ |
8 | Mostly current (3.2 first-mission tutorial lives here) |
docs/architecture/audits/ |
7 | Internal — audit records |
docs/1x/ |
6 | All archival — move to docs/archive/1x/ per WP09 |
architecture/ (root files) |
5 | Internal — index pages |
docs/architecture/calibration/ |
5 | Internal — calibration notes |
docs/architecture/ |
4 | Internal mirror of architecture intent |
docs/context/ |
4 | All current |
docs/doctrine/ |
2 | current — doctrine surface |
docs/architecture/assessments/ |
1 | Internal |
docs/operations/ |
1 | current |
README.md (root) |
1 | current |
Sanity totals. docs/** accounts for 159 files;
architecture/** accounts for 253 files; the root README.md accounts for
1 file. The sum (412) matches the line count of the survey output (less the
architecture/glossary/ residual reconciled away per mission 01KTNWFC).
Provisional tag-distribution forecast (subject to per-page review during WP02):
| Tag | Expected count | Source |
|---|---|---|
current |
~85 | docs/context/ + docs/guides/ + docs/guides/ + docs/api/ + docs/doctrine/ + docs/operations/ + root README.md + the 3.2-relevant subset of docs/architecture/ |
supported |
~25 | Remaining 3.1-era pages in docs/architecture/ and docs/api/ pending re-audit |
archival |
15 | docs/1x/ (6) + docs/2x/ (9) |
migration |
12 | docs/migration/ |
internal |
276 | All of architecture/** (254) + all of docs/development/ (32) + docs/architecture/ (4) — minor double-counting reconciled during inventory |
The exact counts land in docs/development/3-2-page-inventory.yaml once
WP02 runs the bulk-edit guardrail gate. The forecast here exists so the
WP02 implementer has a known target order-of-magnitude before they start
classifying.
No files were modified by this survey. Verification:
git status # working tree clean before survey + after survey
See also
spec.md§"Domain Language" — verbatim definitions reproduced in this document.data-model.md§"VersionTag (enum)" and §"PageInventoryEntry" — canonical schema.research.mdR-006 (version-tag mechanism) and R-008 (bulk-edit blast radius).contracts/version_leakage_check.md— banner regex and leakage rule definitions.occurrence_map.yaml— bulk-edit guardrail for the frontmatter rollout and the archive moves.