Skip to content

feat(conformance): add normative clause inventory (021)#360

Merged
pofallon merged 1 commit into
mainfrom
021-normative-clause-inventory
Jul 24, 2026
Merged

feat(conformance): add normative clause inventory (021)#360
pofallon merged 1 commit into
mainfrom
021-normative-clause-inventory

Conversation

@pofallon

Copy link
Copy Markdown
Contributor

Summary

Adds the normative clause inventory (feature 021) — the prose companion to the schema constraint inventory (020). A machine-canonicalized inventory of every normative clause in the 18 ratified upstream devcontainers/spec prose documents (pinned at 113500f4), classified under deacon's consumer-only scope, with move-aware drift detection and a certify gate. No LLM or network in any CI-facing command.

What's included

  • Vendored pinned prose under conformance/spec/113500f4/ (14 consumer + 4 authoring docs) with a SHA-256-fingerprinted manifest.json; re-vendored only on a pin bump.
  • Machine-owned conformance/inventory/clauses.json (clu- units, substance-anchored ids: hash8 over document ‖ normalize_substance, location excluded so a pure move keeps its id/disposition).
  • Hand-authored clc- classifications: per-clause for consumer docs, document-scope not-applicable defaults for authoring docs, plus per-clause behavior-mapped overrides for the consumer install/apply clauses inside features/templates.
  • New prose model: deterministic ATX heading reader, substance normalizer, RFC-2119 strength detection.
  • New CLI subcommands (dev-only deacon-conformance): clause generate / check / diff / scaffold.
  • Validation: V11–V14 generalized from constraint units to inventory units; new V15 clause↔source integrity. Clause join wired into validate, certify, and report.
  • Source retirement: three redundant src-spec-* prose source units retired now that their behaviors back-trace through behavior-mapped clause classifications.

Notes

  • Includes a fix to clause diff's pair_changed: a removed + added clause under a shared heading are paired into a changed entry only on an unambiguous 1:1 match; multi-clause headings are left as distinct removed/new entries rather than mispaired (which would fabricate a spurious rewrite and hide genuine add/removes). Regression test added.

Verification (local, hermetic)

  • cargo fmt --all -- --check clean; cargo clippy --all-targets --all-features -D warnings clean.
  • deacon-conformance suite: 261/261 passing.
  • clause check byte-identical regeneration; validate clean; certify clean (0 blocking, 10 waived).

The parity / live-certification lane is not in scope here (dev-only-crate change; needs Docker + the pinned oracle, which don't run in the authoring workspace).

🤖 Generated with Claude Code

https://claude.ai/code/session_019vhr7Tcf8ybvSZSE1owqBT

The prose companion to the schema constraint inventory (020): a
machine-canonicalized inventory of every normative clause in the 18
ratified upstream devcontainers/spec prose documents (pinned at
113500f4), classified under deacon's consumer-only scope, with
move-aware drift detection and a certify gate. No LLM or network in any
CI-facing command.

- Vendor the byte-exact pinned prose under conformance/spec/113500f4/
  (14 consumer + 4 authoring docs) with a fingerprinted manifest.
- Machine-owned conformance/inventory/clauses.json (clu- units,
  substance-anchored ids: hash8 over document + normalize_substance,
  location excluded so a pure move keeps its id/disposition).
- Hand-authored clc- clause classifications: per-clause for consumer
  docs, document-scope not-applicable defaults for authoring docs plus
  per-clause behavior-mapped overrides for the consumer install/apply
  clauses inside features/templates.
- New prose model (ATX heading reader, deterministic substance
  normalizer, RFC-2119 strength detection) and clause generate / check /
  diff / scaffold CLI subcommands.
- Generalize validate V11-V14 from constraint units to inventory units
  and add V15 (clause-source integrity); wire the clause join into
  validate, certify, and report.
- Retire three redundant src-spec-* prose source units now that their
  behaviors back-trace through behavior-mapped clause classifications.

clause diff: pair a removed and an added clause under a shared heading
into a "changed" entry only on an unambiguous 1:1 match. When a heading
carries more than one removed or added clause the correspondence is
ambiguous, so leave them as distinct removed/new entries instead of
pairing positionally, which would fabricate a spurious rewrite and hide
the genuine add/remove of unrelated clauses that merely share a heading.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019vhr7Tcf8ybvSZSE1owqBT
@pofallon
pofallon merged commit b174af5 into main Jul 24, 2026
8 checks passed
@github-actions github-actions Bot added the feature New feature (alias) label Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature (alias)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant