docs: withdraw the "Superset / OpenMetadata are OUT" rows — both are canonical #32

Merged
admin merged 1 commits from docs/bi-canonical-stack-correction-opus5 into main 2026-09-06 07:50:54 +00:00
Owner

What this changes

docs/02-architecture.md is a legacy doc from when 0pt was planned as a standalone SaaS
product. Its "Stack decisions — OUT (do not add)" table still says:

Rejected Reason
Superset Metabase already covers BI — one tool, not two
DataHub / OpenMetadata enterprise-heavy; catalog = a Postgres table in Next.js + NocoDB

and the "IN" table names | BI | **Metabase** |.

That contradicts the SIAX Cloud analytics decision: 0pt is the canonical
Analytics/Data/Semantic owner
— no BI0/Analytics0 repo, no separate Superset platform,
no product-specific BI backend as a parallel capability owner. Apache Superset is the
canonical BI engine
(Apache-2.0 with an official embed SDK + guest tokens, so embedding never
needs a commercial tier) and OpenMetadata is the canonical catalog, default ahead of DataHub.
Metabase, DataHub, Lightdash, Rill and Grafana are optional App Catalog apps, never the default.

Why this is a contradiction inside the repo, not just against an external decision

The strongest argument for the change is that 0pt already shipped both "rejected" tools:

  • src/metadata/openmetadata-adapter.ts and tests/contracts/metadata-features.contract.test.ts
    — the OpenMetadata projection adapter, with projectAll() as the rebuild path.
    STATUS.md line 47 classifies it IMPLEMENTED ("projection, never canonical").
  • services/infra/docker-compose.data-stack.yml line 99 defines a superset service on
    apache/superset:latest, with its own metadata Postgres.
  • docs/compliance/OSS-INVENTORY.md line 74 already inventories
    superset | Apache-2.0 | services/infra/data-stack.
  • docs/architecture/ARCHITECTURE.md line 275 lists superset in the engine-deploy compose.

So the OUT table was telling a future contributor to remove things this repository ships.

The change itself

  • docs/02-architecture.md
    • IN table: BI row changed from Metabase to Apache Superset, with the licence reasoning.
    • OUT table: the Superset and DataHub/OpenMetadata rows are struck through and marked
      WITHDRAWN rather than deleted, so the reversal stays auditable; one new row records what
      is non-canonical (Metabase/Lightdash/Rill/Grafana/DataHub as canonical BI or catalog) and
      why — Metabase OSS is AGPL with app-/SSO-embedding behind Pro/Enterprise, Lightdash gates
      embedding and caching behind an enterprise self-host licence, Rill's documented deployment
      is bound to Rill Cloud (breaks zero-SaaS), Grafana is AGPLv3 and is the operational
      analysis tool, AUD0-owned.
    • A correction callout above the OUT table, in the same voice as the existing
      "SUPERSEDED 2026-08-11" hosting block, including the governing principle: one definition
      of every metric
      — 0pt Metric Catalog → MetricFlow → {Superset, Cube, native API, INF0}.
      Point a product at a BI engine directly and every surface invents its own "average price".
    • The Components bullet that called embedded Metabase "the target" now says Metabase is not
      the canonical BI lens.
  • docs/07-dependencies.md line 77 repeated the same rejection list and pointed here; Superset
    and OpenMetadata are removed from it with an inline correction note.

Verification

Docs only — no workflow files, no .gitignore, no source. So instead of a unit test, a
falsifiable check on the doc itself (asserts the OUT table no longer rejects either tool, and
that the IN table's BI row names Superset):

origin/main                                -> FAIL  (4 findings)
  - OUT table still rejects Superset: | Superset | Metabase already covers BI — one tool, not two |
  - OUT table still rejects OpenMetadata: | DataHub / OpenMetadata | enterprise-heavy; ...
  - IN table BI row does not name Superset: **Metabase**
  - IN table BI row is still Metabase
this branch                                -> PASS
mutation 1: IN row reverted to Metabase    -> FAIL (2 findings)
mutation 2: OUT rows un-struck             -> FAIL (2 findings)

Each mutation independently turns the check red, so it is not a gate that cannot fall.

node scripts/siax-doctor.mjs: 39/40 on this branch, 39/40 on main — identical. The single
failure (P1-15 CODEOWNERS exists -- missing: CODEOWNERS) is pre-existing on main and is
exactly what PR #19 supplies.

prettier --check already fails on both files on main, so no reformatting was done here — that
would have buried a 31-line change under a whole-file rewrite. format is not part of CI.

Generated with Claude Code

## What this changes `docs/02-architecture.md` is a legacy doc from when 0pt was planned as a standalone SaaS product. Its **"Stack decisions — OUT (do not add)"** table still says: | Rejected | Reason | |---|---| | Superset | Metabase already covers BI — one tool, not two | | DataHub / OpenMetadata | enterprise-heavy; catalog = a Postgres table in Next.js + NocoDB | and the **"IN"** table names `| BI | **Metabase** |`. That contradicts the SIAX Cloud analytics decision: **0pt is the canonical Analytics/Data/Semantic owner** — no `BI0`/`Analytics0` repo, no separate Superset platform, no product-specific BI backend as a parallel capability owner. **Apache Superset is the canonical BI engine** (Apache-2.0 with an official embed SDK + guest tokens, so embedding never needs a commercial tier) and **OpenMetadata is the canonical catalog**, default ahead of DataHub. Metabase, DataHub, Lightdash, Rill and Grafana are optional App Catalog apps, never the default. ## Why this is a contradiction inside the repo, not just against an external decision The strongest argument for the change is that **0pt already shipped both "rejected" tools**: - `src/metadata/openmetadata-adapter.ts` and `tests/contracts/metadata-features.contract.test.ts` — the OpenMetadata projection adapter, with `projectAll()` as the rebuild path. `STATUS.md` line 47 classifies it **IMPLEMENTED** ("projection, never canonical"). - `services/infra/docker-compose.data-stack.yml` line 99 defines a `superset` service on `apache/superset:latest`, with its own metadata Postgres. - `docs/compliance/OSS-INVENTORY.md` line 74 already inventories `superset | Apache-2.0 | services/infra/data-stack`. - `docs/architecture/ARCHITECTURE.md` line 275 lists superset in the engine-deploy compose. So the OUT table was telling a future contributor to remove things this repository ships. ## The change itself - `docs/02-architecture.md` - IN table: BI row changed from Metabase to Apache Superset, with the licence reasoning. - OUT table: the Superset and DataHub/OpenMetadata rows are struck through and marked WITHDRAWN rather than deleted, so the reversal stays auditable; one new row records what *is* non-canonical (Metabase/Lightdash/Rill/Grafana/DataHub as canonical BI or catalog) and why — Metabase OSS is AGPL with app-/SSO-embedding behind Pro/Enterprise, Lightdash gates embedding and caching behind an enterprise self-host licence, Rill's documented deployment is bound to Rill Cloud (breaks zero-SaaS), Grafana is AGPLv3 and is the *operational* analysis tool, AUD0-owned. - A correction callout above the OUT table, in the same voice as the existing "SUPERSEDED 2026-08-11" hosting block, including the governing principle: **one definition of every metric** — 0pt Metric Catalog → MetricFlow → {Superset, Cube, native API, INF0}. Point a product at a BI engine directly and every surface invents its own "average price". - The Components bullet that called embedded Metabase "the target" now says Metabase is not the canonical BI lens. - `docs/07-dependencies.md` line 77 repeated the same rejection list and pointed here; Superset and OpenMetadata are removed from it with an inline correction note. ## Verification Docs only — no workflow files, no `.gitignore`, no source. So instead of a unit test, a falsifiable check on the doc itself (asserts the OUT table no longer rejects either tool, and that the IN table's BI row names Superset): ``` origin/main -> FAIL (4 findings) - OUT table still rejects Superset: | Superset | Metabase already covers BI — one tool, not two | - OUT table still rejects OpenMetadata: | DataHub / OpenMetadata | enterprise-heavy; ... - IN table BI row does not name Superset: **Metabase** - IN table BI row is still Metabase this branch -> PASS mutation 1: IN row reverted to Metabase -> FAIL (2 findings) mutation 2: OUT rows un-struck -> FAIL (2 findings) ``` Each mutation independently turns the check red, so it is not a gate that cannot fall. `node scripts/siax-doctor.mjs`: **39/40 on this branch, 39/40 on `main`** — identical. The single failure (`P1-15 CODEOWNERS exists -- missing: CODEOWNERS`) is pre-existing on `main` and is exactly what PR #19 supplies. `prettier --check` already fails on both files on `main`, so no reformatting was done here — that would have buried a 31-line change under a whole-file rewrite. `format` is not part of CI. Generated with [Claude Code](https://claude.com/claude-code)
admin added 1 commit 2026-09-06 07:47:09 +00:00
docs: withdraw the "Superset / OpenMetadata are OUT" rows — both are canonical
CI (SIAX Cloud) / integration (push) Successful in 36s
CI (SIAX Cloud) / quality (push) Successful in 1m3s
CI (SIAX Cloud) / security (push) Successful in 23s
Security Scan (SIAX Cloud) / security (push) Successful in 31s
CI (SIAX Cloud) / integration (pull_request) Successful in 32s
CI (SIAX Cloud) / security (pull_request) Successful in 29s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 27s
CI (SIAX Cloud) / quality (pull_request) Successful in 55s
4bc79c25d3
`docs/02-architecture.md` was written when 0pt was planned as a standalone SaaS
product. Its "Stack decisions — OUT (do not add)" table rejects Apache Superset
("Metabase already covers BI") and DataHub/OpenMetadata ("enterprise-heavy"),
and the "IN" table names Metabase as the BI choice.

Under the SIAX Cloud analytics decision, 0pt is the canonical
Analytics/Data/Semantic owner — there is no BI0/Analytics0 repo and no separate
Superset platform. Superset is the canonical BI engine (Apache-2.0, official
embed SDK + guest tokens) and OpenMetadata the canonical catalog, default ahead
of DataHub. Metabase, DataHub, Lightdash, Rill and Grafana are optional App
Catalog apps, never the platform default.

This repository had already shipped both of the "rejected" tools, which is what
makes the old rows self-contradicting rather than merely stale:

  * src/metadata/openmetadata-adapter.ts + tests/contracts/metadata-features.contract.test.ts
    (STATUS.md classifies the OpenMetadata projection IMPLEMENTED)
  * services/infra/docker-compose.data-stack.yml defines a `superset` service
    (apache/superset:latest), and docs/compliance/OSS-INVENTORY.md line 74
    already inventories `superset | Apache-2.0 | services/infra/data-stack`

Falsifiable check used (asserts the OUT table no longer rejects either tool and
that the IN table's BI row names Superset):

  origin/main            -> FAIL (4 findings)
  this branch            -> PASS
  mutation: BI row back to Metabase        -> FAIL
  mutation: OUT rows un-struck             -> FAIL

Docs only. No workflow files, no .gitignore, no source. `node scripts/siax-doctor.mjs`
gives 39/40 on this branch and 39/40 on main — the one failure (P1-15 CODEOWNERS
missing) is pre-existing and is what PR #19 supplies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
admin merged commit into main 2026-09-06 07:50:54 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/0pt#32