You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec(dataset): a dataset dimension/measure field admits a SQL expression at author time; narrow it to a column reference, as #20943 did for a cube member's sql #21220
Filing gate: ② enforce-or-remove (ADR-0049) on an authorable spec key whose runtime now refuses part of its accept set. Landing site: packages/spec/src/ui/dataset.zod.ts. Out-of-scope finding carried by the PM from #21177 / PR #21190 (merged ce4e205e2b). Dedupe: searched "dataset field expression / column reference / retirement". The siblings are #20943 (closed: an authored cube member's sql narrowed to a column reference) and #21000 (open: retire the cube metric types that only carried an expression). No card covers the dataset's own field.
DatasetDimensionSchema.field (dataset.zod.ts:125) and DatasetMeasureSchema.field (:189) are z.string(). They are documented as "Base field, or relationship[.relationship].field path" and "Aggregated field", but they parse any string, including a SQL expression.
Since PR fix(service-analytics)!: refuse a caller-supplied analytics member that is not a column reference at the door #21190, the runtime refuses a non-column field at the analytics dataset door, with PERMISSION_DENIED / 403, for every caller and in every tier, whether the dataset arrives inline or saved. So the authoring surface accepts a value the runtime always refuses. That is a declared-but-unenforced split of exactly the kind ADR-0049 asks to close at the declaration.
Measured by the PM: no shipped dataset carries a non-column field (examples/app-crm, examples/app-showcase, examples/app-todo, packages/platform-objects). The showcase done_rate is a derived measure (derived: { op: 'ratio', … }), which has no field.
Acceptance
DatasetDimensionSchema.field and DatasetMeasureSchema.field admit exactly the CUBE_MEMBER_SQL accept set: one shared pattern, not a copy. A non-column value is refused at parse, at dimensions.N.field / measures.N.field, with a prescription that names the ADR-0021 form (a derived measure, or a column on the object).
Pins cover both sides: a column, a relationship path and * (on a measure) parse byte-identically to today, and an expression is refused at the right path.
Filing gate: ② enforce-or-remove (ADR-0049) on an authorable spec key whose runtime now refuses part of its accept set. Landing site:
packages/spec/src/ui/dataset.zod.ts. Out-of-scope finding carried by the PM from #21177 / PR #21190 (mergedce4e205e2b). Dedupe: searched "dataset field expression / column reference / retirement". The siblings are #20943 (closed: an authored cube member'ssqlnarrowed to a column reference) and #21000 (open: retire the cube metric types that only carried an expression). No card covers the dataset's ownfield.QA-source: #21056 (P0 run) → #21177
What is true on
mainnowDatasetDimensionSchema.field(dataset.zod.ts:125) andDatasetMeasureSchema.field(:189) arez.string(). They are documented as "Base field, orrelationship[.relationship].fieldpath" and "Aggregated field", but they parse any string, including a SQL expression.sqlis an expression — keep the stand-down, judge its identifiers, refuse it, or retire expressions #20943, a cube member'ssqlis held toCUBE_MEMBER_SQL(data/analytics.zod.ts:240: a bare identifier, a dotted identifier path, or*), and anything else is refused at parse with an ADR-0021 prescription. The dataset'sfieldis the one remaining authorable spelling of the same thing, and it is not held to it.fieldat the analytics dataset door, withPERMISSION_DENIED/ 403, for every caller and in every tier, whether the dataset arrives inline or saved. So the authoring surface accepts a value the runtime always refuses. That is a declared-but-unenforced split of exactly the kind ADR-0049 asks to close at the declaration.field(examples/app-crm,examples/app-showcase,examples/app-todo,packages/platform-objects). The showcasedone_rateis a derived measure (derived: { op: 'ratio', … }), which has nofield.Acceptance
DatasetDimensionSchema.fieldandDatasetMeasureSchema.fieldadmit exactly theCUBE_MEMBER_SQLaccept set: one shared pattern, not a copy. A non-column value is refused at parse, atdimensions.N.field/measures.N.field, with a prescription that names the ADR-0021 form (a derived measure, or a column on the object).yes (narrowing), with the matching changeset level and an ADR-0087 disposition. Follow the precedent of [Decision] analytics field gate (#20917): an authored cube member whosesqlis an expression — keep the stand-down, judge its identifiers, refuse it, or retire expressions #20943's PR feat(spec)!: an analytics cube member's sql is a column reference, and the showcase done rate moves to its dataset (#20943) #20998, and thespec-property-retirementskill for the gates such a narrowing owes (liveness ledger, generated baselines, forms, docs, pins).*(on a measure) parse byte-identically to today, and an expression is refused at the right path.Generated by Claude Code