Repository navigation
rc.5 cannot load a requirements ledger rc.3 accepted: @verifiedBy unregistered, and abandoned/superseded dropped from @status #337
Description
Activity
Status, so this issue is not read as untouched:
Both reported causes are addressed and shipped in
0.24.0. The retirements were
deliberate (FR-038), the loader now EXPLAINS them instead of reading as a broken install
(retired-vocabulary.tscovers all seven), the CLI no longer consumes@verifiedBy, the
migration guide isdocs/features/migrations/verified-by-retirement.md, andmeta upgrade
rewrites the mechanical part — including YAML estates as of0.24.1(#339).Staying open for the last paragraph, which is the durable fix and has now fired three
times:A conformance check that every attr and enum value appearing in the shipped docs and
fixtures actually loads under strict mode would catch this family.- rc.5 cannot load a requirements ledger rc.3 accepted: @verifiedBy unregistered, and abandoned/superseded dropped from @status #337 — agent-context docs described
@verifiedByas live after retirement. - index @expr is unreachable: @fields is required on both index.lookup and identity.secondary, and @fields+@expr silently drops the fields #342 —
metaobjects-authoringgave{"@fields": [...], "@expr": ...}as a worked
example, the exact spelling that release made a load error. Five byte-gated copies. - docs/llms: the AI-facing index still teaches @verifiedBy and the pre-0.24.0 @status enum, both of which now fail the loader #343 —
docs/llms/*taught@verifiedByand the pre-0.24.0@statusenum a full
release after retirement.
Each was found by an adopter or a review, never by a gate, and each was fixed by hand in a
different file — which is why the family recurs rather than converging.meta upgrade's
retirement map already exists and is the natural source of truth for "what must no longer
appear in an example".The hard part is not extraction but classification: many doc blocks are deliberately
partial fragments, and some are intentional counter-examples showing what fails. Those need
a convention before the gate can tell a real drift from an illustration.- rc.5 cannot load a requirements ledger rc.3 accepted: @verifiedBy unregistered, and abandoned/superseded dropped from @status #337 — agent-context docs described
- added a commit that references this issue
on Aug 23, 2026 The last open piece — the gate — landed on
mainin 1ebd82c, shipping in0.24.1. (Both reported causes shipped in0.24.0; this closes the durable fix your final paragraph asked for.)scripts/check-doc-examples.tsloads every fenced JSON example underdocs/and the agent-context skills against the strict registry, in thegateslane.The hard part was the classification, as noted above — and the resolution is that no marker convention was needed for the ordinary case. The rule is the kind of error:
- fail on errors about vocabulary the block uses — an attribute that no longer exists, a value outside its enum, an illegal combination. Wrong at any size.
- allow errors about what it omits or references — an elided required attribute, an
extendstarget defined in the next code block. That is fragment-ness.
A fragment gets wrapped in a synthetic host, and the fields its
@fieldsnames are synthesised alongside it, so the scaffolding can't manufacture a finding the document never made. An error code in neither list stops the gate as unclassified rather than defaulting — one default widens the blind spot silently, the other floods hundreds of fragments. That fired on its first run, onERR_ENUM_INT_VALUE_MAP_ARRAY, which isn't in the main error ledger.docs/superpowers/anddocs/features/migrations/are deliberately out of scope: they are records, not instructions, and a migration guide's purpose is to show the retired spelling next to its replacement. Editing one to satisfy a gate would falsify it — the same argument that makes deleting an@status: abandonednode data loss rather than a migration.scripts/test-doc-examples.tsreplays all three incidents (#337, #342, #343) and asserts the gate rejects each, plus that a partial fragment, an unresolved reference and a plain config block stay quiet — a gate that flags illustrations gets switched off, and then catches nothing.- added 2 commits that reference this issue
on Aug 23, 2026 - added 5 commits that reference this issue
on Sep 1, 2026 - added a commit that references this issue
on Sep 21, 2026
Summary
0.24.0-rc.5cannot load a requirements ledger that0.24.0-rc.3loaded without complaint. Bothmeta verifyandmeta genfail at metadata load, so the RC is a hard block for this adopter — nota warning, not a gate failure, a refusal to read the model.
Two independent root causes, both in the requirement metamodel, both cases where the shipped
documentation still describes what the loader now rejects. Happy to split into two issues if you'd
rather track them separately.
1.
@verifiedByis rejected as undeclared, but it is your attribute@verifiedByis not something this project invented. In the rc.5 tarball itself:@metaobjectsdev/sdk/agent-context/skills/metaobjects-verify/references/requirements.md— "
@verifiedByasked you to name a test, andverifychecked that the name …"@metaobjectsdev/cli/dist/src/commands/verify.js(andsrc/commands/verify.ts)So strict-attr enforcement landed without registering an attribute that the tool documents and its
own
verifycommand consumes. Any ledger that followed the documentation now fails to load.Used 12 times in this project's ledger.
2.
@status: abandonedandsupersededare no longer allowed valuesWith
--lax(which gets past #1) the load fails differently:abandonedandsupersededare gone from the enum. But your shipped docs in the same tarball stillreference both (
abandoned` and `superseded`,abandoned`/`superseded), and rc.3 countedthem without issue — its own summary line read:
This one has a semantic cost beyond the load error.
abandonedrecords that a requirement wasretired on purpose. The alternative — deleting the node — destroys exactly the history the status
exists to preserve, so "just remove them" is not a migration, it is data loss. This project has three,
each with a recorded reason.
Reproduction
Any project with a requirements ledger using
@verifiedByor@status: abandoned:Same project on rc.3:
meta verifyexit 0,meta genclean, 877 tests green.Suggested fix
@verifiedByon the requirement provider, alongside whatever registration@trackedBy/
@disposition/@notesalready have.abandonedandsupersededto the@statusenum — or, if their removal is deliberate,say so in the CHANGELOG with a migration path that preserves the retirement record, and update
the agent-context docs that still name them.
Worth noting the class: both are cases where ADR-0023's strictness outran the metamodel's own
registrations and its documentation. A conformance check that every attr and enum value appearing in
the shipped docs and fixtures actually loads under strict mode would catch this family.
Environment
0.24.0-rc.5; clean on0.24.0-rc.3meta migrate-owned schema, 75-node requirements ledgermeta gen, not justverify