Skip to content

Commit 80b561b

Browse files
docs(adr): rewrite ADR-0146 as the package-level override record — paired <base>.custom, one declared override shared by code and Studio; dated pointers on six Status lines (#28295)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DUA7RHH6LE2bbZbMvczDLPh)_ domain:skills#2 · os-elon-musk · session_016WV4czTS5hqnBm8k5vxKq9 Fixes #28237 Part of #28236 Clause-②: no · Metadata-protocol: none ## 维护者速读 - **改了什么:** ADR-0146 原地改写为「包级覆盖」记录:已安装软件包(如 HotCRM)的一切定制——改原有的、加新的、扩展对象——都进配对的可写包 `<base>.custom`;「改原有的」= 在 `.custom` 同名项正文里显式声明 `overrides: { package, basedOn }`,整份替换;写代码和 Studio 用同一机制,定制随包导出、进 git、跨环境部署。D1/D5/D6/D7 的 Studio/Setup 边界保留,「Studio 项工具栏」(N-05)排在所有定制卡之前。 - **为什么改:** 10-30 走查的四个问题(Studio 改不了只读包;Setup 写的是不随包走的无包覆盖行;克隆即双跑;依赖包的同名视图静默盖掉基础包)在一条规则下一起关闭。您 10-30/10-31 的裁定逐条原文引用,八个拍板问题各落在对应决定里。 - **推翻了什么:** 七条旧条款——ADR-0126 D1 与 D4 墙 1、ADR-0131 D6、ADR-0005 五型、ADR-0048 §3.3、ADR-0009 的恢复读法、ADR-0141 D3 卸载项——在「取代表」里逐条原文引用,并写明各自改动的门与钉测试(`path#symbol` 锚点,门禁全部可解析)。六份记录只在 Status 行加带日期的指针,正文一字未动。 - **风险与回滚:** 只改 `docs/adr/`(ADR-0146、六条 Status 行、重新生成的 README),不含代码、不含 changeset;一切机制都是 epic #28236 合并后再切卡。回滚 = revert 本 PR。 - **先看:** ADR-0146 末尾「Decided here where the rulings were silent」七条——合并即接受,反对请点编号。其中两条是我补的空白:配对包的依赖范围取基础包的大版本(`^major`);卸载拒绝沿用 `uninstallPackage` 现有的 409 形状。 - **需要您做的:** 契约复审由席位出具(尚未出具);本记录为 Tier H,需您亲手合并。PR 保持 draft,不会自动 ready/arm/merge。 ## What changes - `docs/adr/0146-…paired-customize-package.md` — rewritten in place as the package-level override record (N-01 of epic #28236). D1, D5, D6, D7 of the 2026-10-30 draft stand; D2 (in-place overlay editing) and D3 (`<base>.customize`) are replaced by the declared override and the paired `<base>.custom` package; D4 keeps the ledger switch and reduces clone to "new similar"; D8 (one effective read), D9 (flows: served over the code package, rebound in one reload, ledger identity inherited, real version pinning first), D10 (`__c` extension fields reserved to `.custom`, display-property whitelist) and D11 (migrate package-less overlay rows, then close the write; retire the stopgaps) are new. A supersede table quotes each superseded clause verbatim and names the gate and pin test that change, as `path#symbol` anchors. The eight agreed questions are tabled. Rollout follows the epic's N-numbered plan, item toolbar first. - PR #28145's S13–S15 are folded: the four load-bearing symbols are anchored (`deriveNamespaceFromPackageId`, `refuseUngrantedActivationWrite`, `useTenancyPosture`, `walledCatalogReadOnly` with its posture-and-rung caveat), D7 counts the two Setup pages and places queue membership under ADR-0142, and the Rollout opener carries no label snapshot. - Status lines of ADR-0005, 0009, 0048, 0126, 0131 and 0141 — one dated pointer each, `· **Superseded in part by [ADR-0146](…)** (2026-10-31) — CLAUSE`, in ADR-0005's amendment style. Nothing else in those records changes (Prime Directive #13). ADR-0048 and ADR-0141 had a wrapped Status paragraph; it is joined onto one physical line so `scripts/adr-index.mjs` reads the pointer (words unchanged). - `docs/adr/README.md` — regenerated by `node scripts/adr-index.mjs`: ADR-0146 reads Accepted with its six "Supersedes" refs; the six records gain "Superseded by: ADR-0146". ## Why Maintainer rulings of 2026-10-30 and 2026-10-31 on epic #28236, verbatim in the record: 「方向定为包级覆盖:代码和 Studio 用同一机制,定制都进 .custom。」 · 「同意 后缀改成 .custom」 · 「等我拍板的 8 个问题,全部同意」 · 「扩展字段用 __c 后缀,只有 .custom 包能用。」 · 「adr 146还没开始开发,可以直接改」. The 2026-10-30 walkthrough measured the four defects the record's Context lists (#28238, #28148, #28149 at `d6c0a75f1a`). ## Verification | Check | Base (`origin/main` 69ce01d) | Head | |---|---|---| | `node scripts/adr-index.mjs --check` | OK | OK (README regenerated and committed) | | `node scripts/check-adr-links.mjs` | 944 link destinations resolve | 959 resolve | | `node scripts/check-adr-symbol-anchors.mjs` | 2852 anchors / 148 records (632 symbol: 604 declaration, 28 literal; 2173 file-level) | 2930 anchors / 148 records (673 symbol: 645 declaration, 28 literal; 2210 file-level) | Every quote in the record was re-checked against its source: the epic body and checklist comment, #28148, the six superseded records (each superseded clause is a verbatim substring of its record) and the 2026-10-30 draft's row rulings. `node scripts/pm/dispatch-gates.mjs --commands` derived the gate families for this change set; each was run in a fresh worktree after `pnpm install --frozen-lockfile --ignore-scripts`, exit codes recorded and reconciled with `--ran` (see the report in the project files). All 21 derived families ran to exit 0 and `--ran` reconciles 21 of 21, before and after the commit (the `check:doc-formula-expressions` gate first exited 3 — prerequisite, the `@objectstack/formula` and `@objectstack/lint` workspace packages not built — and ran to 0 after `pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint`). No code, no changeset (`skip-changeset`). ## Human Minimum - [ ] The Status line of ADR-0146 reads as the acceptance you intend; the hand-merge is the acceptance act. - [ ] Each of the seven superseded clauses in the supersede table is the clause you meant to supersede, and no more. - [ ] The six Status-line pointers name the right clause and nothing else in those records moved. - [ ] The seven "Decided here where the rulings were silent" items are acceptable, or an objection names the number. - [ ] D2's type list ("at least …; the spec card closes it") is the intended scope. - [ ] D9 item 4: flow customization waits for real version pinning (N-12) with no interim publish gate, as ruled. - [ ] The Rollout's N-numbers match epic #28236's plan of record. - [ ] Contract review by the skills seat is recorded before the governed approvers are requested. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016WV4czTS5hqnBm8k5vxKq9 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent e01edb2 commit 80b561b

10 files changed

Lines changed: 652 additions & 280 deletions

‎docs/adr/0005-metadata-customization-overlay.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
> **Protocol 18 update (2026-10-12, ADR-0131 C5, #22340):** The per-type overlay opt-in on `MetadataTypeRegistryEntry` is spelled `allowEnvironmentOverlay` from protocol 18 (`packages/spec/src/kernel/metadata-plugin.zod.ts#allowEnvironmentOverlay`). [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D6 retired the per-organization overlay axis, so the key now names the one scope it governs — whether an environment may overlay an item of this type that a managed package ships. The old key `allowOrgOverride` stays on the registry entry schema only as a tombstone that refuses at parse with the new name in its prescription: no second key, no alias, no conversion. The lines below that name `allowOrgOverride` describe the field as it was spelled when they were written and are preserved verbatim.
66
77

8-
**Status**: Accepted (2026-05-16) · **Amended** (2026-05-22, see "Amendment: post-ADR-0006 v4 scope") · **Amended** (2026-04-13, branch concept removed — see [ADR-0008 §0](./0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref)) · **Amended** (2026-08-09, #6825 — the Phase-1 overlay-index migration is deleted; see "Amendment (2026-08-09, #6825): overlay-index delivery after the Phase-1 migration was deleted") · **Amended** (2026-09-04, [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D6 — the per-organization overlay axis is **retired for now**: `sys_metadata` carries no organization column, org-scoped writes of the five tier-A types are refused, and the environment layer is the whole ledger; the environment → code layered resolution and the "no overlay row = the registry" reading are unchanged) · **Amended** (2026-09-30, #20051 ruling 甲 — in "Addendum — 2026-05-16 (c)", which code cites as appendix (c), the persisted document is the **parsed body** once every round-trip key is declared, reversing the verbatim `request.item` save; a stored `view` row's round-trip keys are declared, and the storage switch itself, the ruling's last stage, is in force for `view` since PR #20868 (`9905e61ca2`) — see the amendment notes under that addendum's persisted-document bullet) · **Amended** (2026-09-30, #20051 ruling B — the parsed body a `view` stores is the parsed value of every key its request body carried, not the whole parse output: undeclared keys dropped, schema defaults not materialised, a moved key stored under its canonical spelling; every other type still stores its request body — see the second amendment note under that bullet) · **Amended** (2026-10-12, #22877 ruling A — the overlay uniqueness key gains a fifth part, `bundle_member`: the member of a bundled type, such as an `email_template`'s locale, so two members of one item are two overlay rows; NULL is the canonical member, so every row of a type whose identity is `name` alone is unchanged. In force since `5677add93f` (PR #22954) — see "What delivers overlay uniqueness today")
8+
**Status**: Accepted (2026-05-16) · **Amended** (2026-05-22, see "Amendment: post-ADR-0006 v4 scope") · **Amended** (2026-04-13, branch concept removed — see [ADR-0008 §0](./0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref)) · **Amended** (2026-08-09, #6825 — the Phase-1 overlay-index migration is deleted; see "Amendment (2026-08-09, #6825): overlay-index delivery after the Phase-1 migration was deleted") · **Amended** (2026-09-04, [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D6 — the per-organization overlay axis is **retired for now**: `sys_metadata` carries no organization column, org-scoped writes of the five tier-A types are refused, and the environment layer is the whole ledger; the environment → code layered resolution and the "no overlay row = the registry" reading are unchanged) · **Amended** (2026-09-30, #20051 ruling 甲 — in "Addendum — 2026-05-16 (c)", which code cites as appendix (c), the persisted document is the **parsed body** once every round-trip key is declared, reversing the verbatim `request.item` save; a stored `view` row's round-trip keys are declared, and the storage switch itself, the ruling's last stage, is in force for `view` since PR #20868 (`9905e61ca2`) — see the amendment notes under that addendum's persisted-document bullet) · **Amended** (2026-09-30, #20051 ruling B — the parsed body a `view` stores is the parsed value of every key its request body carried, not the whole parse output: undeclared keys dropped, schema defaults not materialised, a moved key stored under its canonical spelling; every other type still stores its request body — see the second amendment note under that bullet) · **Amended** (2026-10-12, #22877 ruling A — the overlay uniqueness key gains a fifth part, `bundle_member`: the member of a bundled type, such as an `email_template`'s locale, so two members of one item are two overlay rows; NULL is the canonical member, so every row of a type whose identity is `name` alone is unchanged. In force since `5677add93f` (PR #22954) — see "What delivers overlay uniqueness today") · **Superseded in part by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — the five-type tier: binding principle 5's whitelist-by-type, the 2026-05-22 amendment's render-time tier and addendum (d)'s registry opt-in no longer open a write door; what a customer may override is a declaration in the item's own body, judged against the dependency closure, from the paired `<base>.custom` package or a dependent package that declares it (ADR-0146 D2, D11). The whole-document rule, the `id`-stripping rule and the storage shape stand.
99
**Deciders**: ObjectStack Protocol Architects
1010
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (Package as first-class citizen), [ADR-0004](./0004-cloud-multi-kernel.md) (Cloud + per-project kernels)
1111
**Amended by**: [ADR-0006 v4](./0006-project-environment-split.v4.md) (drops `sys_project` entirely), [ADR-0008](./0008-metadata-repository-and-change-log.md) (re-expresses overlay as `LayeredRepository`; subsequently drops `project`/`branch` from `MetaRef`), [ADR-0029 D9](./0029-kernel-object-ownership-and-platform-objects-decomposition.md#amendment-2026-08-09-6853-a-tenant-overlay-of-an-object-is-its-own-contributor-layer-not-a-second-own) (for `object` only: the overlay is a registry contributor LAYER over the packaged owner, resolved as `base = overlay ?? own`, instead of a destructive in-place overwrite), [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) C5 / D6 (the per-organization overlay axis is retired and the per-type opt-in is spelled `allowEnvironmentOverlay` from protocol 18 — the note at the top of this record)

‎docs/adr/0009-execution-pinned-metadata.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0009: Execution-Pinned Metadata
22

3-
**Status**: Accepted
3+
**Status**: Accepted · **Amended by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — the resume reading of `executionPinned` for `flow` is made real: a suspended run resumes on the version it started on, not on HEAD by name, which is what §2.1 promised and the engine never delivered (ADR-0146 D9, card N-12). Nothing in this record is reversed; the flag, the triple and `getByHash` are unchanged.
44
**Date:** 2026-05-22
55
**Supersedes:** —
66
**Builds on:** ADR-0008 (Metadata Repository & Change Log)

‎docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0029: Kernel Object Ownership — First-Party Capabilities as Plugins That Own Their Data, and Decomposing the `platform-objects` Monolith
22

3-
**Status**: Accepted — K0/K1/K2/D7 implemented; K3 (pending ADR-0030/storage) + K4 cleanup remaining (proposed 2026-06-01 · calibrated 2026-06-12) · **Amended** (2026-08-09, [#6853](https://github.com/objectstack-ai/objectstack/issues/6853) — **D9**: a tenant `sys_metadata` overlay of an `object` registers as its own `overlay` contributor layer instead of taking the packaged `own` slot and splicing the packaged definition out. D3's single-owner invariant is unchanged. **Design only — nothing is implemented yet**; see **"Amendment (2026-08-09, #6853)"** at the end for the measurement, the semantics, the blast radius, and what is deliberately left open.) · **Amended** (2026-10-14, [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D3/D13 — two security objects in D1's `plugin-sharing` row, `sys_permission_set` and `sys_position_permission_set` (one of the `sys_*_permission_set` tables), are retired as row objects by #15204 stage 8 (`66949b7729`, 2026-10-13); see the note under D1.)
3+
**Status**: Accepted — K0/K1/K2/D7 implemented; K3 (pending ADR-0030/storage) + K4 cleanup remaining (proposed 2026-06-01 · calibrated 2026-06-12) · **Amended** (2026-08-09, [#6853](https://github.com/objectstack-ai/objectstack/issues/6853) — **D9**: a tenant `sys_metadata` overlay of an `object` registers as its own `overlay` contributor layer instead of taking the packaged `own` slot and splicing the packaged definition out. D3's single-owner invariant is unchanged. **Design only — nothing is implemented yet**; see **"Amendment (2026-08-09, #6853)"** at the end for the measurement, the semantics, the blast radius, and what is deliberately left open.) · **Amended** (2026-10-14, [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D3/D13 — two security objects in D1's `plugin-sharing` row, `sys_permission_set` and `sys_position_permission_set` (one of the `sys_*_permission_set` tables), are retired as row objects by #15204 stage 8 (`66949b7729`, 2026-10-13); see the note under D1.) · **Amended by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — D7's contributed items, when the base package they contribute to is open in Studio, are drawn greyed with their source package named (ADR-0146 D3); the contribution model is unchanged.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (package as first-class citizen), [ADR-0019](./0019-app-as-consumer-unit.md) (app as the consumer-facing unit), [ADR-0025](./0025-plugin-package-distribution.md) (plugin package distribution + dependencies)
66
**Related**: [ADR-0028](./0028-metadata-naming-and-namespace-isolation.md) (metadata naming & namespace isolation) **depends on** this ADR — its D5/D6 (reserved `sys` namespace, single-owner-per-object, apps-cannot-define-kernel) assume the kernel is properly owned. This ADR is sequenced **first** and is independently valuable; ADR-0028 owns the naming model, this ADR owns kernel object *ownership*.

‎docs/adr/0048-cross-package-metadata-collision.md‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# ADR-0048: Cross-package metadata collision — package-id identity, namespace install gate, package-scoped resolution
22

3-
**Status**: Revised (2026-06-13) — supersedes the original *per-item collision
4-
detection* framing. The runtime guard shipped under the original proposal is
5-
**retained as a same-package authoring backstop**; the strategic direction for
6-
the app-marketplace era is revised below.
3+
**Status**: Revised (2026-06-13) — supersedes the original *per-item collision detection* framing. The runtime guard shipped under the original proposal is **retained as a same-package authoring backstop**; the strategic direction for the app-marketplace era is revised below. · **Superseded in part by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — §3.3's sentence that a context-free read "is best-effort: it returns the first match": a read of a name a code package ships has an owner — that package, or the declared override a package in its dependency closure publishes — and a same-named item of a package outside that closure is served only under its own address (ADR-0146 D8); and §3.4's coexistence "by construction", for a base's dependency closure only: a dependent package's item bearing a base item's name is a declared override (one declarer per item) or is refused at publish — declare or rename (ADR-0146 D2, ruled 2026-10-31 on #28364). Packages with no dependency relation keep §3.3 and §3.4 as written; qualify-to-cross, the same-package overwrite and the 2026-10-08 addendum stand.
74
**Deciders**: ObjectStack Protocol Architects
85
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (package as first-class citizen), [ADR-0005](./0005-metadata-customization-overlay.md) (artifact vs runtime overlay precedence), [ADR-0008](./0008-metadata-repository-and-change-log.md) (metadata repository, `MetaRef` identity), [ADR-0010](./0010-metadata-protection-model.md) (package provenance / `_packageId` stamping)
96
**Consumers**: `@objectstack/objectql` (`SchemaRegistry.registerItem`, `ObjectQL.registerApp`, install path), `@objectstack/console` / `objectui` (routing + metadata resolution), package authors, CLI/CI install path, the app marketplace registry.

‎docs/adr/0070-package-first-authoring.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0070: Package-first authoring — every runtime-authored item lives in a writable package (base); no orphans
22

3-
**Status**: Accepted (2026-06-24) — P1–P3 implemented, merged & live-verified (see *Implementation status*); D4–D6 remaining
3+
**Status**: Accepted (2026-06-24) — P1–P3 implemented, merged & live-verified (see *Implementation status*); D4–D6 remaining · **Superseded in part by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — D3's prompt to create a base, for the paired case only: a customer's first customization of an installed base lands in the auto-created `<base>.custom` package without a prompt (ADR-0146 D3); D5's destination for a package-less overlay row of a packaged item: the base's `<base>.custom`, as a declared override, after which the package-less write closes (ADR-0146 D11). D1, D2, D4 and D6 stand; D3's prompt stands everywhere else.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0005](./0005-metadata-customization-overlay.md) (`allowOrgOverride` / runtime overlay model; one Zod source per type), [ADR-0048](./0048-cross-package-metadata-collision.md) (one app per package; package id is the addressing unit), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (AI authors metadata as drafts), [ADR-0067](./0067-commit-history-and-rollback-for-ai-authoring.md) (commit history & rollback for AI authoring)
66
**Consumers**: `@objectstack/objectql` (`protocol.saveMetaItem` write path), `@objectstack/spec` (metadata-type registry), `../objectui` (Studio create flow, package scope selector, `PackagesPage`), `../cloud` (`service-ai-studio` — `create_metadata` / `resolvePackageId` / `apply_blueprint`)

‎docs/adr/0126-packaged-metadata-customization-model.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0126: The platform customization model for packaged metadata — three regimes, one activation ledger
22

3-
**Status**: **Amended** (2026-09-04) by [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D6 — maintainer, verbatim: 「所以 ADR-0126 不能简单的关掉」「hotcrm 是标准的软件包,客户安装之后能根据业务需求实现具体的定制」「同意」. The three regimes stand at **environment scope only**: O's per-organization reading is retired (ADR-0005 amended), C's activation ledger stays as tenant-less deployment state (D3's reserved `organization_id`, written NULL, is withdrawn — ADR-0131 D1 forbids a nullable tenant column), E stands; the unreleased implementation (#12185, #12190, #12296, #12348, #12419, framework half of #12491) ships in 17.3 with that column dropped. The install mode ADR-0131 D6 adds (managed = sealed definitions + these regimes; template = copied once, fully editable, refused on shared-DB multi-tenant) is the frame the regimes now sit in. · **Amended** (2026-10-14, ADR-0131 D2/D3/D13): the permission projection §4 and §8 name is retired by #15204 stage 8 (`66949b7729`, 2026-10-13), which unwired the ADR-0094 projector and retired the `sys_permission_set` row object; see the notes in §4 and §8. Original status line follows.
3+
**Status**: **Amended** (2026-09-04) by [ADR-0131](./0131-total-organization-ownership-no-null-organization-id.md) D6 — maintainer, verbatim: 「所以 ADR-0126 不能简单的关掉」「hotcrm 是标准的软件包,客户安装之后能根据业务需求实现具体的定制」「同意」. The three regimes stand at **environment scope only**: O's per-organization reading is retired (ADR-0005 amended), C's activation ledger stays as tenant-less deployment state (D3's reserved `organization_id`, written NULL, is withdrawn — ADR-0131 D1 forbids a nullable tenant column), E stands; the unreleased implementation (#12185, #12190, #12296, #12348, #12419, framework half of #12491) ships in 17.3 with that column dropped. The install mode ADR-0131 D6 adds (managed = sealed definitions + these regimes; template = copied once, fully editable, refused on shared-DB multi-tenant) is the frame the regimes now sit in. · **Amended** (2026-10-14, ADR-0131 D2/D3/D13): the permission projection §4 and §8 name is retired by #15204 stage 8 (`66949b7729`, 2026-10-13), which unwired the ADR-0094 projector and retired the `sys_permission_set` row object; see the notes in §4 and §8. · **Superseded in part by [ADR-0146](./0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md)** (2026-10-31) — D1 (§2 Regime C's "never an overlay read path", for a declared override), D4 wall 1 (§6 item 1's corollary against name-redirection, for the declared case only) and §7.1's "⛔ No same-name clone in a second package" (for a declared override from a package in the base's dependency closure only): customization of a packaged item is a declared override in the paired `<base>.custom` package (or in a dependent package that declares it), served at the base's name once real flow version pinning exists (ADR-0146 D2, D9); the lock, the ledger switch and the walled operator gate stand. §7.4's Setup surface moves to the item in Studio; of §9's first bullet the badge, the customization list and revert are chartered, diff-vs-base and the skip-report stay deferred. Original status line follows.
44
**Original status**: Proposed (2026-08-25) — awaiting the maintainer's hand-merge, which is itself the
55
acceptance act for a governed surface (Prime Directive #14) **and the ruling that settles the
66
tentative flow-instance directions in §7** (chartered on

0 commit comments

Comments
 (0)