|
| 1 | +# ADR Prioritization Review |
| 2 | + |
| 3 | +> **Date:** 2026-06-12 |
| 4 | +> **Scope:** All 49 ADRs in `docs/adr/`, cross-checked against actual code on `main`. |
| 5 | +> **Method:** Every unfinished ADR was read in full and its `Status:` header was |
| 6 | +> verified against the shipped code (git log + source grep), not taken at face |
| 7 | +> value. This document records the calibrated status and a ranked next-step plan. |
| 8 | +
|
| 9 | +--- |
| 10 | + |
| 11 | +## 0. Headline finding — the `Status:` headers are systematically stale |
| 12 | + |
| 13 | +The single most important result of this sweep: a large fraction of ADRs marked |
| 14 | +**Proposed** or **Draft** are in fact **substantially or fully shipped** on the |
| 15 | +framework (backend) side. What remains for most of them is the **ObjectUI** |
| 16 | +surface (sibling `../objectui` repo) or **cloud** control-plane work — neither of |
| 17 | +which is owned by this repo. |
| 18 | + |
| 19 | +Consequence: prioritizing off the headers alone overstates the remaining |
| 20 | +framework workload and hides where the real gaps are. The headers should be |
| 21 | +refreshed (see §4). |
| 22 | + |
| 23 | +--- |
| 24 | + |
| 25 | +## 1. Status calibration — header vs. real (framework side) |
| 26 | + |
| 27 | +| ADR | Header | Real framework status | Remaining (and where) | |
| 28 | +|---|---|---|---| |
| 29 | +| 0034 transactional writes | Proposed | **Shipped** (v8.0.0 — ambient `AsyncLocalStorage` tx, batch `$ref`) | UI wiring (objectui) | |
| 30 | +| 0032 unified expression layer | Proposed | **Shipped** (CEL, no silent-swallow, build-time validate) | designer builders (objectui) | |
| 31 | +| 0039 concurrent durable pause | Proposed | Track A **shipped** (incl. A2 `map` node) | Track B deferred by design | |
| 32 | +| 0042 approval SLA escalation | Proposed | **Shipped** (jobs-backed scanner, `system:sla`) | — | |
| 33 | +| 0043 actionable approval links | Proposed | **Shipped** (single-use tokens, GET-confirm/POST-exec) | v1 non-goals only | |
| 34 | +| 0044 approval send-back | Proposed | **Shipped** (`returned` status, typed back-edges) | designer (objectui) | |
| 35 | +| 0041 flow trigger family | Proposed | **Shipped** (trigger-api HMAC + queue) | rename deprecation stubs (S) | |
| 36 | +| 0015 datasource federation | Proposed | **Shipped** (3 gates + REST + CLI) | Studio UI, extra drivers | |
| 37 | +| 0023 OpenAPI→connector | Proposed | **Shipped** (library) | CLI, examples | |
| 38 | +| 0024 MCP connectors | Proposed | **Shipped** (library) | examples | |
| 39 | +| 0036 app = REST + MCP | Proposed | **Shipped** framework (api-key, `/api/v1/mcp`) | cloud Integrations page | |
| 40 | +| 0007 settings | Draft | **Shipped** backend (sys_setting, resolver, 7 manifests) | entire UI (objectui) | |
| 41 | +| 0033 AI authoring | Accepted | A–C **shipped** | Phase D = enterprise/cloud | |
| 42 | +| 0019 app = consumer unit | Proposed | **Shipped** (schema-enforced) | Console fills field | |
| 43 | +| 0029 kernel object ownership | Proposed | **Substantially shipped** (K0/K1/K2/D7) | K3 (waits on 0030/storage) + K4 cleanup | |
| 44 | + |
| 45 | +> Note on 0029: `sys` being a **shared** namespace with single-owner-per-object |
| 46 | +> enforcement (not a reserved namespace) is the **intended** K0 design, not a gap. |
| 47 | +
|
| 48 | +--- |
| 49 | + |
| 50 | +## 2. Genuinely unbuilt framework gaps (the real candidate work) |
| 51 | + |
| 52 | +| ADR | What | Real status | Effort | Value | |
| 53 | +|---|---|---|---|---| |
| 54 | +| **0025 install side** | plugin package install / registry / consent | build/sign/publish shipped; **install half missing** | L | high | |
| 55 | +| **0027 authoring lifecycle** | openDraft→stage→diff→publish(seal)→promote→rollback orchestrator | package absent; only contract stubs | L | high | |
| 56 | +| **0013 bidirectional messaging** | Slack inbound receiver / sessions / multi-account | **~zero code** (messaging is outbound-only) | L | high | |
| 57 | +| **0010-nl-to-flow** | natural language → runnable Flow | **not started** (substrate ready) | L | high | |
| 58 | +| **0028 namespace isolation** | `(namespace,type,name)` identity + physical-name derivation | **still the old prefix model** | L | med | |
| 59 | +| **0026 client-UI plugin dist** | `runtime:'ui'` variant + iframe sandbox | unbuilt, **blocked on 0025** | L | med | |
| 60 | +| 0046 package docs as metadata | `src/docs` → `manifest.docs` | unbuilt, but P0/P1 cheap | S–M | med | |
| 61 | +| 0010 protection L4 / unlock | `frozenPaths` evaluator + unlock RBAC | L3 + audit shipped; **no escape hatch** | M | med | |
| 62 | +| 0017 view Phase 5 | view RLS backend + designer | RLS still **client-enforced**; designer in objectui | S (backend) | med | |
| 63 | +| 0040 unified assistant | tool-scoping enforcement + blueprint scale gate | still advisory; scale gate **not implemented** | M | med-high | |
| 64 | +| 0029 K4 | remove migration-era empty barrels | cleanup only | S | low-med | |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## 3. Recommended next-step priority |
| 69 | + |
| 70 | +### P0 — GA blockers (not ADRs, but they gate launch) |
| 71 | +From `docs/launch-readiness.md`: **P0-5** (realtime/feed are in-memory only, no |
| 72 | +cluster coordination) and **P1-2** (execution logs / job runs / event log grow |
| 73 | +unbounded). Decide single-instance vs HA and land retention/coordination |
| 74 | +**before** any new feature ADR. These outrank everything below for GA. |
| 75 | + |
| 76 | +### P1 — Complete the distribution loop: `0025 install` + `0027 lifecycle` |
| 77 | +Recent momentum is almost entirely in distribution (package-install command, |
| 78 | +local-manifest-source, marketplace-nav, cloud-connection). The build/publish half |
| 79 | +already shipped; the install / registry / promotion half is the natural join, and |
| 80 | +it is the keystone that unblocks **0026** and subsumes **0016**'s deferred cloud |
| 81 | +publish. Highest value-to-effort coherent line. |
| 82 | + |
| 83 | +### P1.5 — Distribution safety prerequisites |
| 84 | +- **0029 K4** finish (small): drop the empty re-export barrels so the |
| 85 | + plugin-owned architecture is clean before third-party packages arrive. |
| 86 | +- **0028 namespace isolation** (large): its hard prerequisite (0029) is now |
| 87 | + largely satisfied, so it is **no longer blocked**. Needed before opening up |
| 88 | + multi-package third-party co-install, otherwise silent table-name collisions. |
| 89 | + |
| 90 | +### P2 — Outward differentiator: `0013 Slack bidirectional messaging` |
| 91 | +The only one of the five integration ADRs with essentially zero code, and the |
| 92 | +only outward-facing headline gap ("operate ObjectStack from Slack"). ADR-0022 |
| 93 | +already routes the human-notification story into it. Promote to P1 if |
| 94 | +conversational Slack is a near-term product goal. |
| 95 | + |
| 96 | +### P3 — Cheap, high-leverage fill-ins (interleave) |
| 97 | +- **0046 package docs** (S) — directly feeds AI grounding. |
| 98 | +- **0010 L4 + unlock escape hatch** (M) — without it a lock can never be lifted. |
| 99 | +- **0017 view RLS backend** + **0040 tool-scoping enforcement** — both are |
| 100 | + security-shaped (today: client-enforced / advisory); worth elevating near GA. |
| 101 | + |
| 102 | +### P4 — Explicitly deferred |
| 103 | +0039 Track B (token-tree rewrite, demand-gated), 0031 BPMN XML plugin, 0026 |
| 104 | +(waits on 0025), 0010-nl-to-flow (high "wow" but pure net-new — after the |
| 105 | +distribution loop). |
| 106 | + |
| 107 | +--- |
| 108 | + |
| 109 | +## 4. Status-header corrections to apply |
| 110 | + |
| 111 | +These ADR headers should be updated to reflect shipped reality (framework side). |
| 112 | +Listed here rather than edited in place, since changing an ADR's recorded status |
| 113 | +is a governance act best ratified deliberately. |
| 114 | + |
| 115 | +| ADR | Current header | Suggested | |
| 116 | +|---|---|---| |
| 117 | +| 0007 | Draft | Accepted — backend implemented; UI pending (objectui) | |
| 118 | +| 0032 | Proposed | Accepted — implemented (designer pending, objectui) | |
| 119 | +| 0034 | Proposed | Accepted — implemented (v8.0.0) | |
| 120 | +| 0041 | Proposed | Accepted — Tier 1 implemented | |
| 121 | +| 0042 | Proposed | Accepted — implemented | |
| 122 | +| 0043 | Proposed | Accepted — implemented | |
| 123 | +| 0044 | Proposed | Accepted — engine + model implemented (designer pending) | |
| 124 | +| 0015 | Proposed | Accepted — backend/REST/CLI implemented (UI + drivers pending) | |
| 125 | +| 0023 | Proposed | Accepted — library implemented (CLI/examples pending) | |
| 126 | +| 0024 | Proposed | Accepted — library implemented (examples pending) | |
| 127 | +| 0036 | Proposed | Accepted — framework implemented (cloud surfacing pending) | |
| 128 | +| 0039 | Proposed | Accepted — Track A implemented; Track B deferred | |
| 129 | +| 0029 | Proposed | Accepted — K0/K1/K2/D7 implemented; K3/K4 remaining | |
| 130 | + |
| 131 | +--- |
| 132 | + |
| 133 | +_Generated from a five-cluster ADR sweep; file/commit evidence captured in the |
| 134 | +review session. Treat this as a planning input, not a frozen contract._ |
0 commit comments