Skip to content

Commit e81636c

Browse files
docs(adr): ADR-0150 keeps the scorer's prefix check on positions (review round 10) (#31676)
<!-- claude-projects-attribution: {"github_login":"os-project-manager"} --> _Requested by **Leehom** · [project thread](https://claude.ai/code/project/chan_01TenzsRopZj4jMbvjX8uz1X?thread=cmsg_01TenzsRopZj4jMbvjX8uz1XBsDxUffG35RvTHueTQ8ZGa)_ Refs #31527 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:把 #31586 进入合并队列时尚未推送的最后一轮审查(6727093622:S19 和 N26–N29)补进已合并的 ADR-0150。只改这一个 ADR 文件的三行文字,不改代码。 - 为什么改:S19 是实质修正:场景评分器的前缀检查对「职位」也要保留。职位在整个环境里同名只有一个槽位(D7),两个画廊应用的同名职位在安装时仍会冲突。其余是措辞:评分器保留检查的集合(view、doc、capability,capability 按 NS.SHORT 拼法);评分器的交接「与 P 同时或在 P 之前」落地;技能文字改为「不再给 2–4 档的名字加前缀」;ADR-0048 §5 的 lint 条目和 §3.4 的 lint 句子挂到子卡 A。 - 风险与回滚:只改文档,没有运行时风险。回滚即撤销这一个提交。 - 先看:ADR-0150 D9 的「Narrowed to bucket 1 and positions」一句。 - 两分钟验证:运行 pnpm check:adr-index 和 node scripts/check-adr-links.mjs,两条都应退出 0。 - 需要你做的:审阅后合并。 ## What changes - `docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md`, 3 lines: - D9: the scenario scorer's `bare-name` Build check and its build prompt are narrowed to bucket 1 types **and positions**. A position is one environment-wide slot (D7), so a bare position from two gallery apps still collides at install (S19). Of the collections the scorer walks, view, doc and capability keep the check, the capability by its `NS.SHORT` spelling, and an api item's name is bucket 2 (N26). The hand-off lands with or before P (N27). The skills stop prefixing bucket 2–4 names (N28). - The plan's hand-off line matches D9. - Child A's row names ADR-0048 §5's `[done]` lint bullet and §3.4's lint sentence, which go stale after P and the phase-3 withdrawal (N29). ## Tests None. This is a docs-only amendment (`skip-changeset`). ## Acceptance notes - This is review round 10 of #31586 (record 6727093622 on #31586). It was prepared before #31586 entered the merge queue, held while it was queued, and is landed here on a fresh branch from `main` (5d1382a). ## Verification At head bfc591f: - every family from `dispatch-gates --commands` was run, with exit codes captured before any pipe; - all 21 derived commands exited 0; - `dispatch-gates --ran` answered: 21 run, 0 NOT-MEASURED. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01FEkQ5psDxi37aZAzXB36TT <!-- signed: epic:#31527#1 · os-project-manager · session_01FEkQ5mLd7pR2PHjsPwiGkz --> Co-authored-by: Claude <noreply@anthropic.com>
1 parent bdfed89 commit e81636c

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

‎docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ This replaces #30806 S3's name rewrite. Nothing is renamed, so nothing is rewrit
253253
### D9 — What retires, and what stays
254254

255255
- **Narrows per type, in that type's own trailing child, last:** phase 1's one-holder refusal (`BARE_NAME_ONE_HOLDER_TYPES`). It narrows from one package holder per environment to one holder per namespace (D2), only after that type's indexes, doors and stored references all carry the package. Until then it stays in force, so every intermediate `main` behaves as today plus optional package coordinates (the card's decision 6 and red line 3).
256-
- **Withdrawn with this record:** #30806 phase 3 (S1 spec refusal, S5 HotCRM renames). **Retired by child P:** phase 2's `naming/namespace-prefix` bare-name warning for buckets 2–4 (the intra-package duplicate warning stays), and the authoring skills' and templates' instruction to prefix non-object names (#30805's text). Studio prefixes object names only (`prefixObjectName` in `ui/packages/app-shell/src/views/studio-design/packages-io.ts`), so child U retires no prefix. **Narrowed to bucket 1, outside this epic:** the scenario scorer's `bare-name` Build check and its build-prompt instruction to prefix every item. Today `gradeItemNames` in `packages/qa/scenarios/src/score/scenario-naming.ts` fails every non-object item named without `NS_`, and `src/runner/prompts.ts` tells the agent to prefix. Both are narrowed to bucket 1 types (object, field, view and the rest keep the literal prefix), so a bare name of a bucket 2–4 type passes. The cloud#3600 epic seat raised it as a dependent of ruling C ([`6726694021`](https://github.com/objectstack-ai/objectstack/issues/31527#issuecomment-6726694021) on #31527). That seat files it to the lane that owns the scorer, and it lands after P, so the skills and the scorer teach the same rule. It is a scoring rule, not a door: it narrows nothing and loosens no resolution.
256+
- **Withdrawn with this record:** #30806 phase 3 (S1 spec refusal, S5 HotCRM renames). **Retired by child P:** phase 2's `naming/namespace-prefix` bare-name warning for buckets 2–4 (the intra-package duplicate warning stays), and the authoring skills' and templates' instruction to prefix bucket 2–4 names (#30805's text). Studio prefixes object names only (`prefixObjectName` in `ui/packages/app-shell/src/views/studio-design/packages-io.ts`), so child U retires no prefix. **Narrowed to bucket 1 and positions, outside this epic:** the scenario scorer's `bare-name` Build check and its build-prompt instruction to prefix every item. Today `gradeItemNames` in `packages/qa/scenarios/src/score/scenario-naming.ts` fails every non-object item named without `NS_`, and `src/runner/prompts.ts` tells the agent to prefix. Both are narrowed to bucket 1 types and positions (D7: one environment-wide slot per name, so a bare position still collides at install). Of the collections the scorer walks, view, doc and capability keep the check, the capability by its `NS.SHORT` spelling; an api item's name is bucket 2. So a bare name of a bucket 2–4 type passes. The cloud#3600 epic seat raised it as a dependent of ruling C ([`6726694021`](https://github.com/objectstack-ai/objectstack/issues/31527#issuecomment-6726694021) on #31527). That seat files it to the lane that owns the scorer, and it lands with or before P. It is a scoring rule, not a door: it narrows nothing and loosens no resolution.
257257
- **Stays:** ADR-0129 and the object rule, unchanged; the one-holder rule for platform-requested bare names (D3) and, as ruled (Q2 = A), for positions (D7); the capability's `NS.SHORT` spelling (bucket 1); the ADR-0048 §3.2 namespace install gate, which stays and gains the G1 and K refusals.
258258
- **Names already prefixed stay as they are.** The examples renamed in phase 2 (#30927) and HotCRM's already prefixed names (email templates) are just names, and ⛔ nothing un-renames them.
259259

@@ -320,13 +320,13 @@ Each child PR proves it is releasable with four readings:
320320
| S3 | automation columns: R7, R8, R9, R10, R11, R14, R20 | server | service-automation, plugin-approvals, service-job, plugin-email | no | no |
321321
| S4 | the ambiguous-set upgrade report, the listing of package references whose only holder is the environment (D3 (a)), and the reviewed bind command (D10), with its ADR-0087 migration entry | server | cli (`os migrate`), metadata-protocol | no | no |
322322
| B1…B13 | **backstop narrowing, one child per type**, last: the one-holder refusal narrows from environment to namespace (D2), after that type's E, G and S children land | server, after each type's E/G/S | objectql `bare-name-one-holder.ts`, `security-catalog-namespace.ts` (permission sets) | no | **yes** for co-owners of one namespace (measured first-party: 0); a widening for everyone else |
323-
| A | ADR status lines (ADR-0048 addendum, ADR-0129 cross-reference) | epic seat | `docs/adr/` | no | no |
323+
| A | ADR status lines (ADR-0048 addendum, and §5's `[done]` lint bullet and §3.4's lint sentence, which go stale after P and the phase-3 withdrawal; ADR-0129 cross-reference) | epic seat | `docs/adr/` | no | no |
324324

325325
**Count:** D, R, N, K, P, A, U and C (8), 8 E, 3 G and 4 S make 23 build children, N and K included. That is one above the evaluation thread's estimate of 18–22, because of K, which carries the Q3 ruling.
326326

327327
The B children are one per covered type, 13 in all (phase 1's 12 types plus permission sets), and small. Several types of one family can ride one PR where their E, G and S children have all landed. The trailing B children are new, and come from red line 3.
328328

329-
**Hand-off outside this epic** (no child, so the count is unchanged): the scenario scorer's `bare-name` Build check and build prompt narrowed to bucket 1 (D9), filed by the cloud#3600 epic seat ([`6726694021`](https://github.com/objectstack-ai/objectstack/issues/31527#issuecomment-6726694021)) to the lane that owns the scorer, after P.
329+
**Hand-off outside this epic** (no child, so the count is unchanged): the scenario scorer's `bare-name` Build check and build prompt narrowed to bucket 1 types and positions (D9), filed by the cloud#3600 epic seat ([`6726694021`](https://github.com/objectstack-ai/objectstack/issues/31527#issuecomment-6726694021)) to the lane that owns the scorer, with or before P.
330330

331331
**Critical path, at fleet pace** (about 2–6 hours per medium PR, lanes in parallel):
332332

0 commit comments

Comments
 (0)