Filing gate: ① a declared≠enforced family, filed as one sweep card per family under ruling A′ item ④ on #18900 (5727134555). This is triage's standing request 5857165909 on the seat post. Family analytics-cube-identity, seat verdict RETIRE.
reach: the declared authoring door. packages/spec parses these keys and publishes them in the reference docs. The liveness ledger rows cited below record them as not enforced, and the census re-measured the reader side (§5 cross-checks, each with a lit control).
- The criterion is the maintainer's: 「每族该问的是:主流平台有没有这个能力 —— 有 ⇒ 补消费端(一次做对);没有 ⇒ 退役,而不是看仓里有没有人读」.
- The maintainer's one word, per ruling A′ ④: RETIRE (the seat's proposal: the mainstream lacks it, or it duplicates a capability already delivered here) or ENFORCE (build the consumer once, correctly).
Census by the domain:spec execution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017), 2026-09-27. Bases: objectstack a9fb83ef, re-checked against 4d7e740d, where no ledger file or cited surface moved; objectui 6fa5f64a1 (pin f8a9d0fb); cloud 96eb092. Ledger instrument: check-liveness.mts --json, whose byStatus equals the committed state-counts.md row for row. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. The ranking is by value, user-visible risk × keys. This family's rank is 11 of 16. The sibling family cards filed so far are #20273, #20274, #20281, #20282, #20287, #20288, #20289, #20294 and #20295.
Capability: A second, disagreeable copy of a member's identity inside a keyed record
| key |
ledger status |
ledger row |
what the ledger cites |
analytics_cube.measures.name |
dead (verified 2026-09-17) |
packages/spec/liveness/analytics_cube.json:33 |
note: The RECORD KEY is the identity, not this field. measures is z.record(z.string(), MetricSchema), and every consumer resolves a measure by its key: analytics-service.ts#getMeta publishes ${cube.name}.${key}, native-sql-strategy.ts#lookupMember looks… |
analytics_cube.dimensions.name |
dead (verified 2026-09-17) |
packages/spec/liveness/analytics_cube.json:73 |
note: Same shape and same verdict as measures.name: dimensions is a z.record, every consumer resolves by the record KEY (getMeta publishes ${cube.name}.${key}, lookupMember indexes the bag, memory-analytics.ts reads cube.dimensions[fieldName]), an… |
Mainstream evidence:
- Cube.dev (JS model) and LookML key a member by its declared name; there is no second inner name that can disagree with the key.
- Here every consumer resolves by the record key (analytics-service.ts#getMeta, native-sql-strategy.ts#lookupMember), so the capability "name a member" is already delivered by the key.
Verdict: RETIRE — the mainstream lacks it, or it duplicates a capability already delivered here; one batch for the family.
Reader that must exist / disposition: none; this is a retirement (derive from the key). The ADR-0087 conversion drops the inner name, and dataset-compiler.ts stops writing it.
User-visible risk (2): An authored name that disagrees with the key is silently ignored and the key wins everywhere.
Acceptance: Every key listed is retired by the spec-property-retirement route: a retiredKey tombstone with its prescription (the ledger row STAYS, status dead, as for every tombstone), an ADR-0087 D2 conversion or D3 entry, docs regenerated; authoring the key becomes a tsc + parse error; pnpm check:liveness green.
Lane: domain:spec (objectstack), plus one line in service-analytics dataset-compiler.ts
File surface: packages/spec/src/data/analytics.zod.ts:191,230 · packages/services/service-analytics/src/dataset-compiler.ts · packages/spec/liveness/analytics_cube.json
Dedupe: analytics_cube \| refreshKey \| granularities \| CubeMeta \| MetricSchema \| CubeSchema \| cube.{0,30}\bpublic\b \| measures\.format \| measures\.name → 6 open hits. None carries a key of this family:
四轴:
- 实际业务需求: 没有作者需要「键名与内部 name 不一致」。这是纯粹的冗余。
- 项目长远合理性: 身份只有一个来源(记录键),与 view.name 的处理方向一致。
- 防 AI 写错: AI 常把两处写得不一致。退役后只剩一个地方可写,不一致从源头消失。
- 创业阶段不扩散: 2 个键,一次转换,零新机制。
Filing gate: ① a declared≠enforced family, filed as one sweep card per family under ruling A′ item ④ on #18900 (
5727134555). This is triage's standing request5857165909on the seat post. Familyanalytics-cube-identity, seat verdict RETIRE.reach:the declared authoring door.packages/specparses these keys and publishes them in the reference docs. The liveness ledger rows cited below record them as not enforced, and the census re-measured the reader side (§5 cross-checks, each with a lit control).Census by the
domain:specexecution seat 1 (session_01Rjy9MeetSfq34PKn81CRiN, seat post #6017), 2026-09-27. Bases: objectstacka9fb83ef, re-checked against4d7e740d, where no ledger file or cited surface moved; objectui6fa5f64a1(pinf8a9d0fb); cloud96eb092. Ledger instrument:check-liveness.mts --json, whosebyStatusequals the committedstate-counts.mdrow for row. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. The ranking is by value, user-visible risk × keys. This family's rank is11of 16. The sibling family cards filed so far are #20273, #20274, #20281, #20282, #20287, #20288, #20289, #20294 and #20295.Capability: A second, disagreeable copy of a member's identity inside a keyed record
analytics_cube.measures.namepackages/spec/liveness/analytics_cube.json:33measuresisz.record(z.string(), MetricSchema), and every consumer resolves a measure by its key:analytics-service.ts#getMetapublishes${cube.name}.${key},native-sql-strategy.ts#lookupMemberlooks…analytics_cube.dimensions.namepackages/spec/liveness/analytics_cube.json:73measures.name:dimensionsis az.record, every consumer resolves by the record KEY (getMetapublishes${cube.name}.${key},lookupMemberindexes the bag,memory-analytics.tsreadscube.dimensions[fieldName]), an…Mainstream evidence:
Verdict: RETIRE — the mainstream lacks it, or it duplicates a capability already delivered here; one batch for the family.
Reader that must exist / disposition: none; this is a retirement (derive from the key). The ADR-0087 conversion drops the inner
name, and dataset-compiler.ts stops writing it.User-visible risk (2): An authored
namethat disagrees with the key is silently ignored and the key wins everywhere.Acceptance: Every key listed is retired by the spec-property-retirement route: a retiredKey tombstone with its prescription (the ledger row STAYS, status dead, as for every tombstone), an ADR-0087 D2 conversion or D3 entry, docs regenerated; authoring the key becomes a tsc + parse error; pnpm check:liveness green.
Lane: domain:spec (objectstack), plus one line in service-analytics dataset-compiler.ts
File surface: packages/spec/src/data/analytics.zod.ts:191,230 · packages/services/service-analytics/src/dataset-compiler.ts · packages/spec/liveness/analytics_cube.json
Dedupe:
analytics_cube \| refreshKey \| granularities \| CubeMeta \| MetricSchema \| CubeSchema \| cube.{0,30}\bpublic\b \| measures\.format \| measures\.name→ 6 open hits. None carries a key of this family:triggers.interval,circuitBreaker.monitoringWindow, cube sub-day granularities); does not carry any open keyconnector,sharing_rule,analytics_cube#18582 connector/analytics_cube ledger seeding (landed), carries no keyrefreshKeyremount counter, not the cube keyrefreshKeyremount counter, not the cube keyrefreshKeyremount counter, not the cube key四轴: