Repository navigation
Commit 80b561b
docs(adr): rewrite ADR-0146 as the package-level override record — paired
<!-- 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><base>.custom, one declared override shared by code and Studio; dated pointers on six Status lines (#28295)1 parent e01edb2 commit 80b561b
10 files changed
Lines changed: 652 additions & 280 deletions
File tree
- docs/adr
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
| 3 | + | |
7 | 4 | | |
8 | 5 | | |
9 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments