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

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