Step ② of the #9180 ruling (/meta type segment is ALWAYS singular), carved by the spec seat under the maintainer's direct reassignment (2026-08-19, verbatim: 「改派给 spec 席,现在就拆」; audit comment #9180 comment 5349687344).
The ruling being implemented (⛔ not re-litigable)
Maintainer re-weigh, 2026-08-17 (#9180 comment 5311434183), verbatim, untranslated:
「② 照原样做;只需要修正 objectstack objectui cloud 中错误的写法。」
Operative text from the ruling record: point meta.getLegalNextStates at the singular twin, delete the plural registration, delete the registration-order pin the collision required.
Measured anchors (2026-08-19, origin/main — re-verify at your branch point)
packages/rest/src/rest-route-ledger.ts:195 — GET /api/v1/meta/objects/:name/state/:field, disposition: 'sdk', client: 'meta.getLegalNextStates' (the plural row)packages/rest/src/rest-route-ledger.ts:197 — GET /api/v1/meta/object/:name/state/:field, disposition: 'server-only' (the singular twin — already mounted)packages/rest/src/rest-server.ts:6016-6040 — the mount (${metaPath}/${objectsSegment}/:name/state/:field)packages/client/src/index.ts:873 — the SDK method whose route string moves (one string in our own SDK)packages/rest/src/meta-route-registration-order.test.ts — the order pin that exists only to manage the collision; deleted with itpackages/runtime/src/route-ledger.ts:352 — the dispatcher-ledger mirror row for the plural spelling; measure whether it moves in the same stroke (ledgers must stay honest to what is mounted)
Constraints that ride verbatim
Dedup checked 2026-08-19: no existing step-② card (search: getLegalNextStates plural/singular registration — zero open or closed matches beyond the anchor).
Part of #9180.
Hold state
⚠️Appended 2026-08-20 by the domain:cli seat (session session_019bmVFqoQPq63zhKrxdYG1r) — everything above is the filing seat's text, unmodified. This section is the machine-readable exit for the pm:on-holdI applied, and belongs in the body: the H9 predicate reads issue.body only, so the Restart-when: I first wrote in comment 5349822290 could never fire. Rationale and full context stay in that comment.
Restart-when: claude-fable-5 capacity is available again — re-tested by the domain:cli seat every patrol (~60 min)
⛔ Do not dispatch this below the claude-fable-5 floor while held. The 2026-08-13 general quota accommodation (「fable 如果用完了,可以用 opus」) does not reach a floor set by a later card-specific ruling; if fable is unavailable, the card waits.
Step ② of the #9180 ruling (
/metatype segment is ALWAYS singular), carved by the spec seat under the maintainer's direct reassignment (2026-08-19, verbatim: 「改派给 spec 席,现在就拆」; audit comment #9180 comment 5349687344).The ruling being implemented (⛔ not re-litigable)
Maintainer re-weigh, 2026-08-17 (#9180 comment 5311434183), verbatim, untranslated:
Operative text from the ruling record: point
meta.getLegalNextStatesat the singular twin, delete the plural registration, delete the registration-order pin the collision required.Measured anchors (2026-08-19,
origin/main— re-verify at your branch point)packages/rest/src/rest-route-ledger.ts:195—GET /api/v1/meta/objects/:name/state/:field,disposition: 'sdk',client: 'meta.getLegalNextStates'(the plural row)packages/rest/src/rest-route-ledger.ts:197—GET /api/v1/meta/object/:name/state/:field,disposition: 'server-only'(the singular twin — already mounted)packages/rest/src/rest-server.ts:6016-6040— the mount (${metaPath}/${objectsSegment}/:name/state/:field)packages/client/src/index.ts:873— the SDK method whose route string moves (one string in our own SDK)packages/rest/src/meta-route-registration-order.test.ts— the order pin that exists only to manage the collision; deleted with itpackages/runtime/src/route-ledger.ts:352— the dispatcher-ledger mirror row for the plural spelling; measure whether it moves in the same stroke (ledgers must stay honest to what is mounted)Constraints that ride verbatim
model: claude-fable-5floor, no downward discretion — standing note on the ruling anchor ([Ruling] The/metatype segment is ALWAYS singular — retire every plural spelling, no exception, in three steps #9180 comment 5310450985): every step of this ruling is a contract accept/reject or published-surface change; ⛔ do not dispatch or execute below the floor.META_URL_TO_SINGULAR) stays as a compatibility tolerance for external callers; no new refusals beyond what step ① (PR fix(metadata): route the three read-side/metaverbs through the canonical type boundary (#9157) #9191) already shipped. This card moves a registration and an SDK string; it does not widen the refusal set. If your measurement shows the plural registration's deletion would newly refuse a spelling the fold currently accepts, STOP and report the fork — do not pick a side.Dedup checked 2026-08-19: no existing step-② card (search: getLegalNextStates plural/singular registration — zero open or closed matches beyond the anchor).
Part of #9180.
Hold state
domain:cliseat (sessionsession_019bmVFqoQPq63zhKrxdYG1r) — everything above is the filing seat's text, unmodified. This section is the machine-readable exit for thepm:on-holdI applied, and belongs in the body: the H9 predicate readsissue.bodyonly, so theRestart-when:I first wrote in comment5349822290could never fire. Rationale and full context stay in that comment.Restart-when:
claude-fable-5capacity is available again — re-tested by thedomain:cliseat every patrol (~60 min)⛔ Do not dispatch this below the
claude-fable-5floor while held. The 2026-08-13 general quota accommodation (「fable 如果用完了,可以用 opus」) does not reach a floor set by a later card-specific ruling; if fable is unavailable, the card waits.