|
1 | 1 | # ADR-0060: Conformance Ledger as a Platform Pattern |
2 | 2 |
|
3 | | -**Status**: Proposed (2026-06-21) |
| 3 | +**Status**: Accepted — P1–P2 implemented; D5 landed-bar in force; D6 (CI aggregate) deferred (2026-06-21) |
4 | 4 | **Deciders**: ObjectStack Protocol Architects |
5 | 5 | **Builds on**: ADR-0049 (enforce-or-remove / no unenforced declaration), ADR-0054 |
6 | 6 | (runtime proof per enforced high-risk primitive), ADR-0056 D10 (Authorization |
@@ -171,8 +171,33 @@ shared invariants, independent ratchets, additive. |
171 | 171 | authz + expression ledgers onto it (tests stay green; proves reuse). |
172 | 172 | - **P2** — D3 validation-rule-surface ledger + ratchet; classify every rule type, |
173 | 173 | pin the ADR-0020 `state_machine` enforcement with a proof. |
174 | | -- **P3** — D5 as the documented "landed" bar; D6 CI aggregate; extend to the next |
175 | | - highest-risk surfaces (flow conditions, UI actions, connectors) as evidence warrants. |
| 174 | +- **P3** — D5 as the documented "landed" bar (**done** — see Implementation status); |
| 175 | + D6 CI aggregate **deferred** (each ledger self-gates); extend to the next highest-risk |
| 176 | + surfaces (flow conditions, UI actions, connectors) as evidence warrants. |
| 177 | + |
| 178 | +## Implementation status (2026-06-21) |
| 179 | + |
| 180 | +P1–P2 landed; the pattern is proven across **three** surfaces sharing one helper: |
| 181 | + |
| 182 | +| Surface | Ledger | Discover / ratchet | Enforcement | |
| 183 | +| :-- | :-- | :-- | :-- | |
| 184 | +| Authorization (ADR-0056 D10) | `authz-conformance.matrix.ts` | curated primitives | plugin-security / plugin-sharing | |
| 185 | +| Expression (ADR-0058 D7) | `expression-conformance.ledger.ts` | every `ExpressionInputSchema` field in spec | `@objectstack/formula` compiler | |
| 186 | +| Validation rules (ADR-0020) | `validation-conformance.ledger.ts` | every `validations` union rule type | `objectql` rule-validator | |
| 187 | + |
| 188 | +Helper: `@objectstack/verify` → `checkLedger(rows, opts)`. |
| 189 | + |
| 190 | +**D5 — the "landed" bar (in force).** A declaration surface is **landed iff it has |
| 191 | +a conformance ledger whose `checkLedger` ratchet is green.** Adding a new authorable |
| 192 | +surface (a new `ExpressionInputSchema`-style family, a new `validations` rule type, |
| 193 | +a new authz primitive) without a ledger row is, by construction, an unclassified- |
| 194 | +surface CI failure. This is ADR-0049's "enforce or remove" with a mechanical third |
| 195 | +leg: **ledger or it isn't landed.** |
| 196 | + |
| 197 | +**D6 — CI aggregate: deferred.** Each ledger already gates itself in CI, so a single |
| 198 | +aggregate meta-test adds little beyond a registry of registries. It is deferred until |
| 199 | +the surface count makes a one-call "is the whole conformance surface green?" worth the |
| 200 | +indirection. |
176 | 201 |
|
177 | 202 | ## References |
178 | 203 |
|
|
0 commit comments