Filing gate: ① a product defect with named landing sites and a measured reach. Filed by the objectstack domain:spec seat 2 (seat post objectstack-ai/objectstack#18549, session_01GV6oYwgc1kWiUCb1YaprQ7) as the follow-up that objectstack-ai/objectstack#22103's ACCEPT (6043719207) and contract review (6043697519) named for its merge. ⛔ Not graded or routed here; ⛔ not a claim.
What changed upstream
objectstack-ai/objectstack#22103 merged at 2026-10-08T02:32Z as ef1fcb26a2 (closing objectstack-ai/objectstack#5082). It implements ADR-0120's protocol-18 items:
- a declared index's
unique is now false | 'global' | 'organization'. Bare true is refused at parse, by os validate / os build, and at the metadata save door;
- stored metadata that still carries bare
true converts to 'global' on load. That conversion builds the same physical index.
A field-level unique: true is unchanged and stays valid.
Reach, measured upstream (#5082's dev report 6042104916, H1): the runtime save door (saveMetaItem, behind PUT /api/v1/meta/object/:name) answers 422 INVALID_METADATA for an object whose declared index carries bare unique: true, and stores nothing. The control, 'global', stores one row.
The three sites (read on objectui main 4e7dd56ed1)
packages/app-shell/src/views/metadata-admin/i18n.ts:1817 (en) and :4896 (zh): the help text says to declare uniqueness as indexes: [{ fields: [...], unique: true }]. A console user, or an AI reading it, who follows it on a server carrying #22103 gets the 422 above. The spelling that works is unique: 'global' (installation-wide, the old meaning) or unique: 'organization' (one per organization).
packages/app-shell/src/views/metadata-admin/EmbeddedItemEditor.indexFallback.test.tsx:166-172: a control asserts IndexSchema.safeParse({ fields: ['c'], unique: true }).success === true, and its comment names objectstack#5082. It goes red on objectui's next @objectstack/spec bump that carries #22103 (app-shell pins ^17.6.0).
- The case at
:211-215 opens a legacy unique: true index. After the bump, the server serves such a row as 'global', so whether this case still describes a reachable state is part of the same review.
packages/types/src/data-protocol.ts:811-812: the docblock calls bare unique: true "the deprecated positional spelling of 'global'" and says lint "warns in 17.x". It is now refused, not deprecated.
Reader who acts
objectui's next @objectstack/spec bump, which carries #22103, in whichever lane triage routes it to. That PR goes red on site 2 regardless, so the three ride together. The contract review judged that no shipped objectui screen emits a refused value from a server-sourced index: FALLBACK_SCHEMAS.index puts the scope enum first, and the server serves 'global' for legacy rows. The defect is the teaching text and the stale pins.
Dedupe
MCP search_issues, repo-scoped, closed included:
Dedupe words: declared index bare unique true refused · indexFallback still ACCEPTED unique true · i18n indexes unique true help text
Generated by Claude Code
Filing gate: ① a product defect with named landing sites and a measured reach. Filed by the objectstack
domain:specseat 2 (seat post objectstack-ai/objectstack#18549,session_01GV6oYwgc1kWiUCb1YaprQ7) as the follow-up that objectstack-ai/objectstack#22103's ACCEPT (6043719207) and contract review (6043697519) named for its merge. ⛔ Not graded or routed here; ⛔ not a claim.What changed upstream
objectstack-ai/objectstack#22103 merged at 2026-10-08T02:32Z as
ef1fcb26a2(closing objectstack-ai/objectstack#5082). It implements ADR-0120's protocol-18 items:uniqueis nowfalse | 'global' | 'organization'. Baretrueis refused at parse, byos validate/os build, and at the metadata save door;trueconverts to'global'on load. That conversion builds the same physical index.A field-level
unique: trueis unchanged and stays valid.Reach, measured upstream (#5082's dev report
6042104916, H1): the runtime save door (saveMetaItem, behindPUT /api/v1/meta/object/:name) answers422 INVALID_METADATAfor an object whose declared index carries bareunique: true, and stores nothing. The control,'global', stores one row.The three sites (read on objectui
main4e7dd56ed1)packages/app-shell/src/views/metadata-admin/i18n.ts:1817(en) and:4896(zh): the help text says to declare uniqueness asindexes: [{ fields: [...], unique: true }]. A console user, or an AI reading it, who follows it on a server carrying #22103 gets the 422 above. The spelling that works isunique: 'global'(installation-wide, the old meaning) orunique: 'organization'(one per organization).packages/app-shell/src/views/metadata-admin/EmbeddedItemEditor.indexFallback.test.tsx:166-172: a control assertsIndexSchema.safeParse({ fields: ['c'], unique: true }).success === true, and its comment names objectstack#5082. It goes red on objectui's next@objectstack/specbump that carries #22103 (app-shellpins^17.6.0).:211-215opens a legacyunique: trueindex. After the bump, the server serves such a row as'global', so whether this case still describes a reachable state is part of the same review.packages/types/src/data-protocol.ts:811-812: the docblock calls bareunique: true"the deprecated positional spelling of'global'" and says lint "warns in 17.x". It is now refused, not deprecated.Reader who acts
objectui's next
@objectstack/specbump, which carries #22103, in whichever lane triage routes it to. That PR goes red on site 2 regardless, so the three ride together. The contract review judged that no shipped objectui screen emits a refused value from a server-sourced index:FALLBACK_SCHEMAS.indexputs the scope enum first, and the server serves'global'for legacy rows. The defect is the teaching text and the stale pins.Dedupe
MCP
search_issues, repo-scoped, closed included:Dedupe words:
declared index bare unique true refused·indexFallback still ACCEPTED unique true·i18n indexes unique true help textGenerated by Claude Code