Uh oh!
There was an error while loading. Please reload this page.
docs(adr-0021): revise after implementation scan — engine join gap, Cube reconciliation, task list - #1417
Merged
Merged
Conversation
…ube reconciliation, naming, task list A four-area code scan (spec/runtime/frontend/examples) found three things that change the plan: - Runtime != schema: groupBy/aggregations execute (single-object), but joins/having/windowFunctions are schema-only and NOT executed by IDataEngine or the SQL driver. The headline "revenue by account.region" cannot run via IDataEngine today — joins are the gating gap. - A parallel semantic layer already exists and is implemented (IAnalyticsService + CubeSchema); its NativeSQLStrategy is the only cross-object JOIN path but bypasses RLS/tenant. Don't build a third layer — reuse/compile-to Cube. - Naming collisions: Dataset/Dimension/Metric are already taken. Corrects the false "engine already does joins" premise, adds the Cube-reconciliation + naming decisions (D-A/B/C), and appends an implementation-scan section with a workstream task list and rough sizing (~6-8 weeks across both repos; rendering lives in sibling repo objectui).
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…view criterion - D-A: dataset is the ONE author-facing semantic type; compiles to the existing Cube runtime; retire/absorb the author-facing Cube DSL. - D-B: take high-prior names dataset/measure/dimension; rename seed Dataset -> Seed; Cube Dimension/Metric absorbed (collision dissolves). - D-C: reuse Cube NativeSQLStrategy join path but make RLS + per-joined- object tenant scoping mandatory; v1 joins only along declared relations. - Q1: derived measures first-class now, CLOSED (reference measures by name only; no raw fields/SQL). - Q2: deferred; runtimeFilter only in v1. - Q3: deferred; conformed dimensions in a follow-up ADR. Rewrites D1 schema to a declarative surface smaller than QuerySchema (object + include relationships + dims/measures + derived), no raw SQL, joins derived from the object graph. Adds the six AI-author principles that drive the decisions. WS2 drops XL->L; estimate ~4-6 weeks.
Uh oh!
There was an error while loading. Please reload this page.
os-steve pushed a commit
that referenced
this pull request
Aug 18, 2026
…old, not normalization (#9345) TenantPlanSchema's doc block claimed unrecognized plan codes fold to free via "the cloud distribution's normalization." That was wrong on the mechanism and the citation as of the cloud#1380 ruling (2026-08-16), landed in cloud PR #1417 (merged 2026-08-17): - The fold happens at the entitlement layer (isFreePlan), not in normalization -- sys_environment.plan keeps the raw value (case- normalized only), so an unrecognized tier stays distinguishable from the free tier to any reader, log line, or operator (cloud#1389's red line: normalize the spelling, never the vocabulary). - Before the ruling, only the control-plane planKey reader folded unknown to free; the tenant-runtime isFreePlan reader granted paid access. As of cloud PR #1417 both mirrors fold. - The two mirrors' vocabularies are not merged into one list (cloud#1380 lands over a pinned copy; unifying them is cloud#1418, ruled but not landed, and a SHA-pinned image can predate a vocabulary entry even after that lands). - Carries the ruling's operational premise -- new tiers are minted rarely, images roll before a new tier goes on sale -- consistent with cloud's isFreePlan docstring. Doc-block prose only. No schema, validation, or behaviour change -- TenantPlanSchema still accepts any string; acceptance is byte-identical. Fixes#9345 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #1415. A four-area code scan (spec / runtime / frontend / examples) surfaced three findings that change the plan, now folded into ADR-0021.
What changed in the ADR
Corrected the central premise. The original doc claimed "the engine already does joins/having/window, unused one layer down." The runtime scan shows that's false:
groupBy+aggregationsexecute (single-object only), butjoins/having/windowFunctionsare schema-only — not executed byIDataEngineor the SQL driver. "Revenue byaccount.region" cannot run viaIDataEnginetoday. Joins are the gating runtime gap.Reconcile with a pre-existing semantic layer.
CubeSchema+IAnalyticsServiceare already implemented (Cube.io-style measures/dimensions); itsNativeSQLStrategyis the only cross-object JOIN path, but it bypasses RLS/tenant. Recommendation: don't build a third layer — compiledataset→AnalyticsQuery/ reuse the Cube runtime and harden its RLS.Naming collisions.
Dataset(seed data),Dimension/Metric(Cube) are already taken — the ADR's literal names can't land.Added
objectui— every field change is a two-repo change).Status remains Proposed — discussion doc only, no code changes.