Skip to content

spec: version the toolkit as a unit (Toolkit-Version anchored to /VERSION)#10

Merged
richbodo merged 5 commits into
mainfrom
spec/toolkit-versioning
May 31, 2026
Merged

spec: version the toolkit as a unit (Toolkit-Version anchored to /VERSION)#10
richbodo merged 5 commits into
mainfrom
spec/toolkit-versioning

Conversation

@richbodo
Copy link
Copy Markdown
Owner

What

Versions the toolkit as a unit, anchored to the spec version — so "which toolkit am I building against?" resolves to a name, not just a git SHA. Per the discussion, the version is called Toolkit-Version (not Spec-Version): it covers the whole toolkit — spec, contracts, skill, lint, templates — and every contribution shape is a PR against that versioned unit.

Stacked on #9 (base docs/toolkit-dx-improvements); merge order #8#9 → this.

Changes

  • /VERSION = 0.1.0-draft — single source of truth (precise/pre-release version).
  • Toolkit-Version: 0.1 stamp (the minor series, so it doesn't churn during draft) on every versioned artifact, in its native format:
    • markdown blockquote — the 4 spec/*.md, SKILL.md, CONTRIBUTING.md, README.md, both templates;
    • comment line — tools/lint-spec-ids.py (#), SQL (--), OpenAPI (#), TypeScript (//);
    • JSON $comment — the 8 schema contracts (kept valid JSON; all re-parsed).
  • Lint enforcementlint-spec-ids.py now reads /VERSION and fails any versioned artifact missing the stamp or whose minor mismatches. This is the check we re-run to validate against the named version.
  • CONTRIBUTING.md § Versioning — the version is the toolkit unit; the three contribution shapes (reference design / new AC-exception-solution / spec-doc change) are all PRs against it; releases git-tagged; designs declare the Toolkit-Version they built against.
  • ARCHITECTURE_TEMPLATE.md — design version field relabeled Toolkit-Version.

The chicken-and-egg, resolved

#8/#9 validated against the un-named spec (lint green). This PR introduces the named 0.1 + the version-stamp check, and the lint is green across the whole chain — i.e. fellows_local_db and the contribution now validate against the named Toolkit-Version 0.1:

lint-spec-ids: OK
  toolkit version 0.1 (/VERSION: 0.1.0-draft)
  spec defines 25 AC IDs
  12/12 contract files declare a 'Realizes:' header
  exceptions.md defines 1 exception ID(s)

One point for the maintainer

spec/PNA_Spec.md now carries both the new Toolkit-Version stamp and its pre-existing Spec-Version: 0.1 (draft) block (with explanatory prose). They're the same number. Keep both (spec doc's own version + the unit stamp), or reconcile to a single Toolkit-Version? I left the existing Spec-Version block intact rather than churn the preamble — easy follow-up either way.

🤖 Generated with Claude Code

…xceptions prior art

- users-guide.md: expand per-repo skill install (symlink for dev vs
  vendored-copy-with-pinned-commit for a contributing design) + the
  'skills load at session start, restart to invoke' caveat.
- PNA_Spec.md § Building a PNA: promote 'validation, not certification' to
  a first-class framing statement (cross-links CONTRIBUTING + SKILL; ties
  in exceptions reported by AC/EX ID, not graded).
- prior_art.md: new § 9 — behavioral exceptions, consent propagation
  (TCF/UMA/Kantara/macaroons), graded assurance (EAL/ASVS/SLSA/EARL), and
  legible labeling (nutrition labels/model cards/datasheets); finding that
  the mechanics have precedent but the exception-as-class-concept is novel.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@richbodo richbodo force-pushed the docs/toolkit-dx-improvements branch from d6f1ff5 to 393bd08 Compare May 31, 2026 09:47
richbodo and others added 4 commits May 31, 2026 21:48
…RSION)

The whole toolkit — spec, contracts, skill, lint, templates — is now
versioned as one unit, equal to the spec version, so 'which toolkit am I
building against?' resolves to a name, not just a git SHA.

- /VERSION = 0.1.0-draft (single source of truth).
- Every versioned artifact carries a 'Toolkit-Version: 0.1' stamp in its
  native format (md blockquote; # / -- / // comments; JSON $comment).
- lint-spec-ids.py enforces presence + minor-match against /VERSION.
- CONTRIBUTING § Versioning: the version covers the toolkit as a unit and
  all contribution shapes (reference design / AC-exception-solution /
  spec-doc change); releases git-tagged; designs declare the
  Toolkit-Version they built against.
- ARCHITECTURE_TEMPLATE: design version field relabeled to Toolkit-Version.

Revalidated against the now-named version: lint green across the chain
(25 AC IDs, 12/12 contracts, 1 exception, toolkit 0.1).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the duplicate Spec-Version: metadata field now that the toolkit is
versioned as a unit. PNA_Spec/axes/use_cases keep one version block
(Toolkit-Version + prose); the version a design *declares* is
Toolkit-Version everywhere (SKILL, CONTRIBUTING, users-guide,
ARCHITECTURE_TEMPLATE, llms.txt). Generic 'spec version' evolution prose
(CHANGELOG, future-spec-version notes) and the design-side fellows
Architecture copy are intentionally left for a separate pass.

Lint green: toolkit version 0.1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Repo-wide once-over removing dangling 'spec version' language in favor of
'toolkit version' (the toolkit is what's versioned as a unit; the PNA Spec
is a document within it). Covers CONTRIBUTING, README, llms.txt,
users-guide, plans, reference-design records + the fellows Architecture
copy, the spec files' future-version prose, three contract description
strings, and retitles CHANGELOG to 'PNT Changelog'. Document references to
'the spec' and the JSON contract $id URIs are intentionally preserved.
Also refreshes the users-guide status note (the contribute flow has now
been exercised end-to-end). Lint green; all contracts parse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
egress-lint.py and evaluate-report.schema.json (landed on main via #6)
are toolkit artifacts too — stamp them and add them to the lint's
versioned set, so 'the entire toolkit is versioned as a unit' actually
holds after the merge with main.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@richbodo richbodo force-pushed the spec/toolkit-versioning branch from 567820f to ec01074 Compare May 31, 2026 09:51
@richbodo richbodo changed the base branch from docs/toolkit-dx-improvements to main May 31, 2026 09:53
@richbodo richbodo merged commit 4c7d8c9 into main May 31, 2026
2 checks passed
@richbodo richbodo deleted the spec/toolkit-versioning branch May 31, 2026 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant