Skip to content

Consolidated gaps register

#GapOwning subsystemSeverityHonest status
1No template→fork re-sync / live inheritance — fleet-wide config change does not reach already-forked tenants; contradicts "author once" thesisprovisioning-planes (also authoring-surfaces, surface-widgets, reports-analytics)HighBy design today (copy-on-create); biggest unaddressed lifecycle edge
2Per-app read-path flip SHIPPED + decommissioned (#424/#431, flags retired). Residual: engine resolving under a consumer app-id is gated on one upstream change (resolver.py:67); BFF compilation stays by design (ADR-0001, Pattern A)authz-umsLowNot platform debt — upstream + irreducible-by-design
3tenant_scoped default divergence — sheet grammar requires it explicit, but engine repo default is False (repo.py:208,245) vs docs' trueontology-core (also sheets-import re identity.features)HighConfirmed divergence; API re-default not traced this pass
4Live is_service / is_superuser enforcement bypass still present; control plane partly convention-derived (no stored root_org_id)authz-ums (also provisioning-planes)HighPermanent cold-start seam vs must-close — unresolved
5Creator-baked-ACL footgun — a view authored by an over-privileged principal leaks to all readers; X-Tenant-Id never narrows a viewontology-coreMed-HighAccepted contract today; no per-reader re-scope or lint
6source_kind:view public surfaces bypass both Gate A and Gate B — trust concentrated on one operator-authored public_fields rowreports-analyticsHighNo second guard (e.g. output-column allowlist at import)
7Fail-open boot importer not in CI; manifest guards advisory-only — fatal sheets silently produce "nav blank / citizen 404"sheets-importHighGates exist but rot; no check_sheet --applied in main CI
8No fleet-wide view-collision guard — divergent duplicate view silently keeps whichever applied firstsheets-importMedType- and route-collision guards exist; view does not
9Shared Martha — no per-tenant isolation; dormant per-tenant secret matching + #441 Vaultworkflows-marthaMed-HighPermanent-vs-revive decision pending; dead-code risk
10Best-effort CloudEvents offload, no outbox/retry — swallowed emit_cloud_event silently drops a submitted create while ledger row persistsworkflows-marthaHighNo reconciliation path
11admin_entity_config.actions JSONB dead but compile.py header still claims it live (doc-debt); two sibling-fetch paths diverge — compile._fetch_siblings caps at 500 → silent row loss >500action-engineMedLatent correctness bug + stale doc
12UMS apply gate fails OPEN without UMS (dev)_check_action_apply_grantaction-engineMedAcceptable in dev; must flip fail-closed before prod-on-every-target
13/actions/submit is a placeholder — citizen submission actually flows through /public/submit; schema advertises an unimplemented affordanceaction-engineLow-MedRemove or implement; affects whether citizen submit unifies onto execute_action
14action_side_effect.event FK dead at runtime; string is load-bearing; event lookup unscoped despite tenant_scoped:true; SMS selectable but no workflow adapter; in-app tray is BFF-Postgres not ontologynotificationsMedSlice 4f unfinished; SMS is a selectable no-op
15Admin uses converged renderer for charts only — KPI cards + Metabase embeds bespoke; kpi/stat-grid has no wired public read path; Block.children grid reserved; no single enumerable widget catalog (3 overlapping lists)surface-widgetsMed"One renderer drives admin" is charts-only today
16Fork copying __dashboard__ admin_entity_config + portal_page rows inferred from doctrine, not re-confirmed at file:line this passsurface-widgetsMedNeeds explicit verification
17m10 PRD diverged, unmarked as superseded by the shipped Block[]+WidgetKind+page_template modelsurface-widgetsLowShould be formally marked superseded in this freeze
18act-as authz predicate exercised only in live tests, not CI units — the single cross-tenant control-plane gateauthoring-surfacesMed-HighMove into CI unit coverage
19Branding/campaigns are runtime-tenant editors (no act-as) despite living under /settings — operators may assume act-as uniformityauthoring-surfacesLow-MedReclassify or document explicitly
20Per-app citizen ACL flip mid-migration (#409/#428/#433) — write path not yet flipped to match read-path namespace; dual-namespace fallback not retiredreports-analytics (also authz-ums)MedCutover gate undefined
21Reports have no delivery ledger; Metabase provisioned out-of-band (hand-wired dashboard_id)reports-analyticsLow-MedFork-time/import-time reconciliation unbuilt
22Saga compensation never raises and isn't retried — dangling cross-service state (Vault/Martha/KC) has no standing reconciliation passprovisioning-planesMedOwnership undefined
23identity.features:{map,calendar} in sheet vs #386 "map/calendar are DERIVED not stored, no tenant_feature entity"sheets-importMedReal divergence to reconcile
24Stale docstrings actively misleadcontrol_plane vs forkable, system vs binding plane, authoring-architecture.md's "BFF-Postgres" claimprovisioning-planes (cross-cutting)LowCorrect as part of this spec freeze
25action_placement.target_config pins a template occurrence_type UUID — fork-fidelity gap for UUID-bearing config blobsworkflows-martha (also provisioning-planes)MedFork must rewire target_config FKs; generalises
26Portal/form_definition tenancy scoped out (#75/#79) — citizen-form definitions not formally covered by the plane modelprovisioning-planesLow-MedKnown second-class config class

Atelier — Platform Specification. Internal canonical reference.