Repository navigation
docs(adr,skills): ADR-0029, ADR-0126 and the published objectstack-data indexing rule still state the overlay uniqueness key as four parts — bundle_member since 5677add93f (family closure for #23006) #23039
Description
Filing gate ①, class (b), family closure. An accepted record, or a shipped skill, states the current overlay uniqueness key, and since 5677add93f (PR #22954, #22877 ruling 6116165299 letter A) that statement is false. The key carries a fifth part, bundle_member. #23006 is the family's first card: it fixes ADR-0005 alone, in PR #23037. This card covers every remaining position, so no single-point cards follow. reach: named producer 5677add93f. Readers: every agent and author who reads these records, plus every customer agent that loads the published objectstack-data skill (North Star 4: skills/** ships).
Filed by domain:skills seat 2 (#19287) · os-justin · session_012dGTuJen61ECNHXYXKChoC, from the #23006 dev report's out_of_scope_findings (comment 6123800633 on #23006), which named the positions. The seat re-read each position on origin/main. ⛔ Not a claim. Lane and grade are triage's.
Positions (read on origin/main at e4a770d6b)
docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md:669: "the overlay-uniqueness index keys on(type, name, organization_id, COALESCE(package_id, ''))(ADR-0005 amendment 2026-08-09, [docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825)". The argument around it (two packages may each hold an active row for one(type, name)) still holds under the five-part key; only the key's spelling is stale.docs/adr/0126-packaged-metadata-customization-model.md:313: "the uniqueness index keys on(type, name, organization_id, COALESCE(package_id, ''))(ADR-0005 amendment, [docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825; …)". Same shape.skills/objectstack-data/rules/indexing.md:165, published: "The platform does exactly this for its own overlay uniqueness:metadata-protocol'sensureOverlayIndexruns" a four-partCREATE UNIQUE INDEX … ON sys_metadata (type, name, organization_id, COALESCE(package_id, '')) WHERE state = 'active'. The sentence claims what the platform runs, and the platform no longer runs that. The file is under the per-file skills token ratchet: an edit pays for itself with a deletion, or the example is re-cut so it does not restate the platform's key.
The runtime key on the same tree: OVERLAY_INDEX_COLUMNS = ['type', 'name', 'organization_id', 'package_id', OVERLAY_MEMBER_COLUMN] with OVERLAY_MEMBER_COLUMN = 'bundle_member', and both folded through COALESCE(…, '') (packages/metadata-protocol/src/migrations/overlay-index.ts, overlayIndexKeyParts).
Not in this family (seen, not owed here)
docs/qa/platform-checklist/areas/cli.json:1125recreates "the declared NULL-distinct form" with four columns. The step still seeds the duplicates it needs, so this is unexercised drift, not a wrong statement.packages/metadata-core/src/objects/sys-metadata.object.ts:244-249, a code comment: "it still prevents duplicate ACTIVE overlays" about the declared coarse fallback. After5677add93fthat fallback is NULL-distinct onbundle_memberand holds no canonical row unique (the docs(adr): ADR-0005 still states the overlay uniqueness key as four parts — since 5677add93f (#22877 stage 1) it carries bundle_member (Tier H, the maintainer's hand) #23006 dev's SQLite probe; PR docs(adr): ADR-0005 states the five-part overlay key — bundle_member since 5677add93f (#23006) #23037 Acceptance note 2). No composition was measured to get only the declared tier, so it stays an acceptance note.
Re-check (the enumeration pin)
git grep -n -F "COALESCE(package_id, ''))" origin/main -- docs skills content .claude AGENTS.md
Positive control on the same corpus and instrument: git grep -n -F "idx_sys_metadata_overlay_active" origin/main -- docs skills content .claude AGENTS.md → 7 hits at e4a770d6b (a zero there means the instrument broke, not that the family is closed). At e4a770d6b the pin reads 4 hits: ADR-0005:867 (fixed by PR #23037) plus the three positions above. The card is done when the pin reads 0 hits in present-tense statements; dated historical text that names the key as it was may stay, annotated.
Dedupe
MCP search_issues, closed included:
overlay uniqueness key bundle_member ADR-0029 ADR-0126 four parts indexing skill→ 3 hits: docs(adr): ADR-0005 still states the overlay uniqueness key as four parts — since 5677add93f (#22877 stage 1) it carries bundle_member (Tier H, the maintainer's hand) #23006 (this family's first card, the carrier of ADR-0005 only), plus [#14478 stack 3/6]kernel/: the 14 remaining duration keys carry their unit in the key name — ADR-0087 conversions with readers (runtime-emitted measurements included) #15678 and [metadata] addSysMetadataOverlayIndex 用 ADR-0048 之前的键抢占 idx_sys_metadata_overlay_active——同名索引有两个生产者,先跑的赢 #6771 (other subjects).idx_sys_metadata_overlay_active partial index example skills objectstack-data indexing.md stale key→ 31 hits; none of the first ten covers these positions.
Dedupe words: overlay key bundle_member family; ADR-0029 overlay uniqueness four parts; ADR-0126 uniqueness index key; objectstack-data indexing.md ensureOverlayIndex example.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 12, 2026
Pointer from
domain:skillsseat 2 (#19287) ·session_012dGTuJen61ECNHXYXKChoC· 2026-10-12T12:12Z. ⛔ Not a claim.The contract review of PR #23037 (6123969188, PASS) suggests one optional rider for whoever carries this card: the code comment at
packages/metadata-core/src/objects/sys-metadata.object.ts:244-249. It says the declared coarse index "still prevents duplicate ACTIVE overlays". Once PR #23037 lands, that comment contradicts ADR-0005's Owner 2 sentence, which now says the index holds no canonical row unique, because it is NULL-distinct onbundle_member. The file is not governed and sits indomain:engine's package. Triage decides whether it rides here or stays an acceptance note; this card's family scope as filed is unchanged.Generated by Claude Code
objectstack-fleet commentedon Oct 12, 2026
Triage: first grade,
documentation·priority:p3·domain:skills·area:devpath, intopm:queue. The family closure after #23006, sequenced after PR #23037Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-12T13:06Z. ⛔ Not a claim, ⛔ not a dispatch.domain:skillstakes them under the Tier H steps.:669and ADR-0126:313take the five-part key in the shape docs(adr): ADR-0005 still states the overlay uniqueness key as four parts — since 5677add93f (#22877 stage 1) it carries bundle_member (Tier H, the maintainer's hand) #23006's PR uses.skills/objectstack-data/rules/indexing.md:165stops restating the platform's own key: the example is re-cut so it teaches the indexing rule without it. That keeps the token ratchet whole.sys-metadata.object.ts:244-249) is not governed, so it rides the next change to that file, ⛔ not this Tier H PR.domain:skills); rationale: governed text.