You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(adr): mark ADR-0086's three ADR-0094 D5 pointers as retired, pointing at D5-R (#8292) (#8385)
ADR-0086 carried three live-voiced, present-tense pointers at ADR-0094 D5's
2026-07-14 direction (an env overlay of a package-owned permission set is a
first-class ADR-0005 customization), which was RETIRED on 2026-08-09 by D5-R
(#6858 / PR #6962) after #6483 / PR #6608 rolled `permission` back to
`allowOrgOverride: false`:
- D7 status row: "an env edit of a package set is now a first-class overlay,
not a flat 403" — directly contradicted by the current 403 not_overridable.
- P2 status row: "Subtract layer landed as ADR-0005 first-class overlay".
- The superseded-mechanisms block, item 2 (the site named in #8292).
Each now names D5-R and marks the direction retired, following the idiom
PR #8291 used inside ADR-0094 D2. The upshot is recorded where it matters:
this ADR's own two-doors answer stands unsuperseded — edit the package and
re-publish. The narrow carry-overs D5-R preserves (data-door delete still
degrades to a reset; supportsOverlay unchanged, so a pre-rollback overlay row
still merges at read time) are stated so they are not mistaken for a re-route.
The historical record is deliberately kept as history, not rewritten.
A fourth D5 citation (D4 status row, composition anchored at the position) is
left untouched: D5-R does not withdraw that bullet.
Part of #8292
Claude-Session: https://claude.ai/code/session_01Jqe56GnYFddggeAyfkZFVz
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/adr/0086-authz-metadata-config-boundary-and-cross-package-composition.md
+21-9Lines changed: 21 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -377,10 +377,10 @@ flagged inline below.
377
377
|**D4** Shape B (packages ship own sets; union; shared slices env-only) |**Adopted, reinforced; subtract layer upgraded**| ADR-0090 D9 / Alt #6 reject package-written shared/builtin sets for the same reasons. Composition is now anchored at the **position** ("bind several packages' sets to one position"), ADR-0094 D5. **Subtract layer changed** — see ⚠️ below. |
378
378
|**D5**`bootstrapDeclaredPermissions`|**Implemented; `isDefault` semantics refined by ADR-0090 D5**|`plugin-security/src/bootstrap-declared-permissions.ts` (invoked at `kernel:ready`, `security-plugin.ts`); seeds `managed_by:'package'` + `package_id`, idempotent/upgrade-aware; closes the ADR-0078 inert-metadata smell the D5 header calls out. `isDefault` no longer means "profile fallback": app-level default sets **auto-bind to the `everyone` position**; package-level default sets materialize a `sys_audience_binding_suggestion` an admin confirms (new object). |
379
379
|**D6** package Access door under draft/publish |**Implemented**| objectui writes the package door as `mode:'draft', packageId` (`PermissionMatrixEditor.tsx`); env door stays live and, per ADR-0094 D3, that "live" save is itself redirected into a metadata overlay. |
380
-
|**D7** two doors |**Implemented; gate narrowed by ADR-0094 D5**| Package door edits the package slice (scoped, draft); env-admin door keeps the cross-package matrix + assignment (live). ADR-0094 narrows the two-doors *gate* to what stays structurally true: the admin door can never **forge** package provenance, and package-row lifecycle ops with no overlay translation stay refused — but an env edit of a package set is now a first-class overlay, not a flat 403. |
380
+
|**D7** two doors |**Implemented; ADR-0094 D5's gate narrowing is RETIRED (D5-R, 2026-08-09)**| Package door edits the package slice (scoped, draft); env-admin door keeps the cross-package matrix + assignment (live). ADR-0094 D5 had narrowed the two-doors *gate*so that an env edit of a package set became a first-class overlay "not a flat 403" — **that narrowing is retired as of 2026-08-09 (see ADR-0094 D5-R)**: `permission` rolled back to `allowOrgOverride: false`, so an env edit of an artifact-backed set is refused with `403 not_overridable` and this ADR's original two-doors channel stands — edit the package and re-publish. What ADR-0094 left standing either way: the admin door can never **forge** package provenance, package-row lifecycle ops with no overlay translation stay refused, and a data-door "delete" of a packaged set degrades to a reset rather than removing it. |
381
381
|**P0** objectui scope + slice-merge |**Done** (objectui #2505/#2508) |`permission-slice.ts` + `mergePermissionSlice`; matrix loads `client.list('object', { packageId })`, fields lazy per-object; save re-reads a fresh layered record and merges only the package slice, byte-for-byte preserving other packages. ⚠️ realized against the ADR-0094 store — see below. |
|**P2** two doors + overlay/subtract |**Largely done**| Two doors shipped (D6/D7). Subtract layer landed as **ADR-0005 first-class overlay** (ADR-0094 D5), not the Salesforce-muting/explicit-deny path this ADR sketched. The ADR-0066 precedence-step-4 explicit-deny layer remains deferred and **evidence-gated** — the whole-document overlay-wins customization covers today's need. |
383
+
|**P2** two doors + overlay/subtract |**Two doors done; the overlay subtract layer is RETIRED for `permission`**| Two doors shipped (D6/D7). The subtract layer had landed as an **ADR-0005 first-class overlay** (ADR-0094 D5) rather than the Salesforce-muting/explicit-deny path this ADR sketched — **retired 2026-08-09 (ADR-0094 D5-R)**, so for an artifact-backed set there is no overlay customization channel at all. The ADR-0066 precedence-step-4 explicit-deny layer remains deferred and **evidence-gated**; with the overlay channel withdrawn, a package set is customized by editing the package and re-publishing. |
384
384
385
385
### ⚠️ Two mechanisms in the original text are superseded by a better realization
386
386
@@ -397,13 +397,25 @@ flagged inline below.
397
397
a package's slice unambiguous still holds and underpins both slice-merge and overlay.*
0 commit comments