Commit 415549d
feat(requirements)!: the requirement vocabulary becomes prescriptive-only
BREAKING (metamodel), in every port. Four pieces of `requirement.*` vocabulary retire in
one change:
@Verifiedby -> ERR_UNKNOWN_ATTR
@supersededBy -> ERR_UNKNOWN_ATTR
@status: abandoned -> ERR_BAD_ATTR_VALUE
@status: superseded -> ERR_BAD_ATTR_VALUE
`@status` is now `planned | live | partial`. Under the sealed strict registry (ADR-0023)
there is no shim — affected metadata fails the LOAD. Migration:
`docs/features/migrations/verified-by-retirement.md`.
**The rule: a requirement is PRESCRIPTIVE.** It states what should be true; it is never a
journal of what happened. Retiring a capability is DELETING its requirement.
**What forced it — two SHIPPED statements contradicting each other about the same
vocabulary, both load-bearing.** The byte-gated registry justified the
dangling-`@implementedBy` exemption because those nodes "are meant to be gone, and that is
the entry doing its job"; the authoring guidance said deleting the entry "destroys the
record"; §4 says a requirement "is not a record of what happened". Only one could be the
rule.
**The deciding argument was second-order.** An adopting estate held 29 `@implementedBy`
refs that could never resolve, across 14 entries, every one INVISIBLE because verify is
silent on exactly those two statuses — zero dangling refs reported, true and incomplete at
once. Retiring the statuses DELETES that bug class rather than making it visible: the
exemption is the only thing that created it. Migration cost is measured, not estimated —
three estates (262/75/288 entries): 0, 15 and 88 edits, ~85% on one ledger.
**Where the record goes**, because deletion is the part adopters resist: version control,
plus `notes` on the entries that survive. One estate had already moved retirement history
out of `@implementedBy` into `notes` on its own initiative — this direction, reached
independently.
**Why `@verifiedBy` separately.** It asked you to name a test and checked only that the
NAME occurred somewhere in the test sources, never running anything. Auditing one ledger
(55 entries, 9 carrying it, 19 names) by opening each test found 4 of 19 did not verify
their claim: a COMMENT, a dependency-injection KEY, a real test of a DIFFERENT claim, and
a test of the entry's OUTPUT where the claim was about its SOURCE TEXT. verify reported
zero errors throughout. The author picks the string, so the cheapest way to satisfy the
check is to find a name that already exists. The scan tier goes with it — including
`verify.testFiles` and `VerifyConfig`, which 0.23.1 shipped FOR this scan days ago, and
`ERR_REQUIREMENT_TEST_MISSING` / `WARN_REQUIREMENT_TEST_COMMENT_ONLY`.
**The contract prose was rehomed BEFORE the descriptions were deleted.** "verify checks
each name EXISTS and is not skipped; it never runs them" was byte-gated only inside
`@verifiedBy`'s own description — `docs/CONFORMANCE.md` pre-registered this exact hazard.
It now lives in `spec/capability-ledger.md` and the migration guide, and CONFORMANCE.md
records that the trap fired once and was handled.
**No metamodelVersion move needed**, and that is the gate's design working: its baseline
is the last release TAG, so `0.10` — already moved this cycle for ADR-0052 — covers all
seven breaking classifications. The gate exits 0.
Gated by two new fixtures (`error-requirement-verified-by-retired`,
`error-requirement-status-retired`) in all five ports, plus a rewritten CLI e2e case
pinning the LOAD failure — the project it uses names a real, present test, so under the
old scan it exited 0. The `requirement-levels-and-nesting` fixture keeps its L5-sibling
and architectural-no-claims shapes by re-expressing them on `planned`.
Verified: TS 2408 · sdk 278 · C# four assemblies, 0 `error CS` · Python 1827 ·
Java ConformanceTest 572, RegistryManifest 3, RequirementTest 7.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhpswkF1NvwxhFWMmdAT151 parent 6223717 commit 415549d
57 files changed
Lines changed: 709 additions & 1391 deletions
File tree
- agent-context/skills
- metaobjects-audit/references
- metaobjects-authoring
- references
- metaobjects-fit-assessment
- metaobjects-verify/references
- docs
- features
- migrations
- superpowers/plans
- fixtures
- agent-context-conformance
- java-kotlin-react-tanstack/expected/.claude/skills/metaobjects-authoring
- java-react/expected/.claude/skills/metaobjects-authoring
- python/expected/.claude/skills/metaobjects-authoring
- ts-react-tanstack/expected/.claude/skills/metaobjects-authoring
- ts-requirements/expected/.claude/skills
- metaobjects-audit/references
- metaobjects-authoring
- references
- metaobjects-verify/references
- conformance
- error-requirement-status-retired
- input
- error-requirement-verified-by-retired
- input
- requirement-disposition-and-planned
- input
- requirement-levels-and-nesting
- input
- metamodel-docs/expected/types
- registry-conformance
- server
- csharp/MetaObjects
- Core/Requirement
- Meta
- SpecMetamodel
- java/metadata/src
- main/java/com/metaobjects
- loader
- requirement
- test/java/com/metaobjects/requirement
- python/src/metaobjects
- meta/core/requirement
- spec_metamodel
- typescript/packages
- cli
- src
- commands
- lib
- test
- unit
- codegen-ts/src
- metadata/src
- core/requirement
- spec
- metamodel
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 3 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
14 | | - | |
| 13 | + | |
15 | 14 | | |
16 | 15 | | |
17 | 16 | | |
18 | 17 | | |
19 | 18 | | |
20 | | - | |
| 19 | + | |
21 | 20 | | |
22 | 21 | | |
23 | 22 | | |
| |||
49 | 48 | | |
50 | 49 | | |
51 | 50 | | |
52 | | - | |
| 51 | + | |
53 | 52 | | |
54 | 53 | | |
55 | 54 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1007 | 1007 | | |
1008 | 1008 | | |
1009 | 1009 | | |
1010 | | - | |
| 1010 | + | |
1011 | 1011 | | |
1012 | 1012 | | |
1013 | 1013 | | |
| |||
Lines changed: 19 additions & 19 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | | - | |
9 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
10 | 11 | | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
20 | 19 | | |
21 | 20 | | |
22 | 21 | | |
| |||
108 | 107 | | |
109 | 108 | | |
110 | 109 | | |
111 | | - | |
112 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
| |||
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
128 | | - | |
| 128 | + | |
129 | 129 | | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | | - | |
| 31 | + | |
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| |||
Lines changed: 16 additions & 24 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
25 | | - | |
26 | | - | |
| 24 | + | |
| 25 | + | |
27 | 26 | | |
28 | 27 | | |
29 | 28 | | |
30 | 29 | | |
31 | 30 | | |
32 | 31 | | |
33 | 32 | | |
34 | | - | |
| 33 | + | |
35 | 34 | | |
36 | 35 | | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | 36 | | |
41 | 37 | | |
42 | 38 | | |
| |||
53 | 49 | | |
54 | 50 | | |
55 | 51 | | |
56 | | - | |
57 | 52 | | |
58 | 53 | | |
59 | 54 | | |
60 | 55 | | |
61 | 56 | | |
62 | 57 | | |
63 | 58 | | |
64 | | - | |
| 59 | + | |
65 | 60 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
70 | 68 | | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
| 69 | + | |
| 70 | + | |
79 | 71 | | |
80 | 72 | | |
81 | 73 | | |
82 | 74 | | |
83 | | - | |
| 75 | + | |
84 | 76 | | |
85 | 77 | | |
86 | 78 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
98 | 103 | | |
99 | 104 | | |
100 | 105 | | |
| |||
0 commit comments