Commit 2bc1876
`inferCubeFromQuery`'s measure mint dropped the first segment of ANY dotted
entry, so `owner.region_count_distinct` minted a Metric over the BASE table's
own `region` column: `SELECT COUNT(DISTINCT region) AS
"owner.region_count_distinct" FROM "crm_account"` — no JOIN, no error, and a
response column labelled with a relation attribute whose number came from the
base table. Where the object had no same-named column it degraded to #4437's
`400 INVALID_FIELD` naming the STRIPPED tail, about a string the caller had
never written.
`measures` is the fourth mint site of the punctuation #5739 sorted out on the
three dimension-shaped ones, and it is ruled the other way: `lookupMember`'s
relation-traversal tier is dimension-only, so a dotted measure has no correct
traversal answer to converge on. Maintainer ruling 2026-08-07 — refuse it, with
the caller's own spelling in the envelope (`INVALID_FIELD` / 400 / `member` /
`param: 'measures'`, the #4437 family's shape, via `invalidMemberError`).
The rule lives in one place (`mintableMeasureKey`) and both measure mints call
it: the ad-hoc one and `ensureCube`'s suffix-augmentation loop. Measured: the
ad-hoc path REGISTERS what it infers, so from the second request onwards the
same query reaches the augmentation loop instead — refusing at one site only
would have left every warm service exactly as it was. A measure the cube
DECLARES is authored, not minted, and is checked verbatim first so a cube's own
dotted key still resolves and still compiles its JOIN.
Unchanged: the `<cube>.` qualifier, bare measures, and the dimension traversal
#5739 ruled the other way.
Claude-Session: https://claude.ai/code/session_015a5qkLzpGXhLL2F5gvJ7dD
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 7330c1d commit 2bc1876
5 files changed
Lines changed: 673 additions & 32 deletions
File tree
- .changeset
- packages/services/service-analytics/src
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
0 commit comments