Skip to content

spec(analytics): retire the inner name on cube measures and dimensions; the record key is the identity (2 keys) #20300

Description

@objectstack-fleet

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 个键,一次转换,零新机制。

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:reportsBusiness reporting — dashboards, reports, the numbers a manager readsbugSomething isn't workingdomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions