Skip to content

docs(adr): ADR-0146 amended in place — an upgrade plan may report a .custom override that hides a vendor change, as advice only - #30899

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-30881-adr0146-advisory-drift
Nov 6, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/issue-30881-adr0146-advisory-drift

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #30881
Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:只改 ADR-0146 的文字(就地修订,状态行加一条 2026-11-06 的「Amended in place」):允许基础包的升级预览(upgrade plan)给出一条提示,列出「这个 .custom 覆盖挡住了本次升级对同名项的修改」,以及 basedOn 与已安装版本不一致的覆盖。
  • 为什么改:执行你在 cloud#3652 上对 D2 的裁决「修订为允许只提示(推荐)」;原文写死了「不产出升级差异、basedOn 不被读取」,挡住了后续的漂移提示卡(On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886)。
  • 风险与回滚:零运行时风险,没有代码、spec 或文档站改动;basedOn 仍然「只记录、永不拦截」,不拒绝安装、不自动合并、不自动 rebase。回滚 = revert 这一个提交。
  • 先看:docs/adr/0146-…md 的 D2 段(basedOn 那一句,风险最高:它定义了提示的两种情形 a/b);其次 D6 的「Not done」一条和 Consequences 第三条。
  • 两分钟验证:git diff origin/main -- docs/adr/0146-* 应只见 7 处文字改动 + 1 条 Refs;pnpm check:adr-index 应打印 docs/adr/README.md is current。
  • 需要你做的:审阅后亲手合并(Tier H,草稿状态,席位不会转 ready、不入队、不开 auto-merge)。

What changes

ADR-0146 is amended in place for decision D2 on epic objectstack-ai/cloud#3652 (ruling record 6681380041, maintainer, verbatim: 「修订为允许只提示(推荐)」). A base's upgrade plan may list, as advisory findings, (a) a .custom item whose declared override names a base item the upgrade changes, and (b) an override whose basedOn is not the installed base's manifest.version. basedOn stays recorded and never gates: no refusal, no token, no automatic merge, rebase or rewrite. Whole-document replace, ADR-0141 D3's deferral and merge question 1's ^MAJOR reasoning are unchanged.

The diff touches only docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md. pnpm adr:index was regenerated and wrote a byte-identical docs/adr/README.md (the index shows a truncated status prefix, which this amendment does not reach), so the README is not in the diff.

Before / after of each amended sentence

Passage (line on d55acb78) Before After
Status line (:23, appended) (no 2026-11-06 note) "· Amended in place (2026-11-06, decision D2 on epic objectstack-ai/cloud#3652, ruling record 6681380041, maintainer, verbatim: 「修订为允许只提示(推荐)」): a base's upgrade plan may report, as advice, each .custom override that hides a vendor change; basedOn still never gates, and nothing is refused, merged or rebased on the finding (D2, D6, the Supersede table's §9 row, Consequences, merge question 2). It lands by the maintainer's hand-merge of the PR cut from #30881."
D2 (:210-212) "basedOn is recorded, not judged: no door compares it with the installed base's version, no upgrade diff is produced, and nothing is refused on it (epic #28236, …recorded only)." "basedOn is recorded and never gates (epic #28236, …recorded only). One reader is admitted, as advice (amended 2026-11-06, …): a base's upgrade plan … may list as advisory findings (a) a .custom item whose declared override names a base item the upgrade changes between the installed and the new version ("this override hides a vendor change"), and (b) an override whose basedOn is not the installed base's manifest.version. On either finding no door refuses, no token is asked, and nothing is merged, rebased or rewritten automatically; the upgrade proceeds as it would without it, and re-basing stays the customer's act. The plan carries both findings in an advisory class that its refusal never reads and that no finding-set token covers, so neither becomes a gate by sharing a response with a refusing finding. The finding is not the base-upgrade interception ADR-0141 D3 defers, because it refuses nothing, and D3's ^MAJOR reasoning (merge question 1) is unchanged."
D2, §9 lift (:262) "Diff-vs-base and the upgrade skip-report stay deferred" "The advisory upgrade finding above is chartered; a field-level diff-vs-base view and the upgrade skip-report as a merge tool stay deferred (amended 2026-11-06)"
D6 "Not done" (:393) — not named by the card "No clone lineage, no upgrade diff, no basedOn judgement (D2, D4)." "No clone lineage, no field-level upgrade diff, no gate on basedOn (D2, D4) — the upgrade plan's advisory finding (D2, amended 2026-11-06) refuses, merges and rebases nothing."
Supersede table, ADR-0126 §7.4/§9 row, Rule now (:563) "badge, customization list and revert are chartered on served facts, diff-vs-base and the skip-report stay deferred (D2)." "badge, customization list and revert are chartered on served facts; the upgrade plan's advisory finding is chartered (amended 2026-11-06); a field-level diff-vs-base view and the skip-report as a merge tool stay deferred (D2)."
Consequences, third bullet (:600-601) "…until the customer re-bases it, and the platform computes no diff to help (D6)." "…until the customer re-bases it. The base's upgrade plan names each override that now hides a change, as advice (D2, amended 2026-11-06); re-basing stays the customer's act, and the platform computes no field-level diff and merges nothing (D6)."
Merge question 2 (:679-681) "basedOn is recorded and never judged — … no card reads basedOn as a gate (D2)." "basedOn is recorded and never gates — … no card reads basedOn as a gate (D2). One reader is admitted, as advice (amended 2026-11-06, …): the upgrade plan's finding of D2, which lists an override whose base item the upgrade changes or whose basedOn is not the installed base version, and refuses nothing."
Refs (appended) — a bullet naming card #30881, the ruling record, and the finding's own card #30886 on the upgrade plan of #30884.

Unchanged on purpose: D3's dependency-range bullet ("where basedOn is read by a human") and merge question 1 (the ^MAJOR reasoning), per the card's item 6; the Supersede row's Gate and pin column (the finding's code is card #30886's).

Acceptance notes

Verification

All on head 9647da16 (objectstack), gates from node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (the same 21 families as at 561b3b2d), exit codes captured before any pipe.

Derived gate families — 21 of 21 run locally, all exit 0; plus check:pm-governed-prose
0 | node scripts/check-adr-links.mjs            (991 relative link destination(s) under docs/adr/ resolve)
0 | node scripts/check-adr-links.mjs --self-test
0 | node scripts/check-closing-keyword-parity.mjs
0 | node scripts/check-closing-keyword-parity.mjs --self-test
0 | node scripts/check-comment-mask-corpus.mjs
0 | node scripts/ci/plan-test-core-shards.mjs --self-test
0 | pnpm check:adr-anchors
0 | pnpm check:adr-index                         (docs/adr/README.md is current, every record parsed)
0 | pnpm check:adr-symbol-anchors                (3163 anchors across 150 records resolve)
0 | pnpm check:ci-filter-parity
0 | pnpm check:closed-ceremony-text
0 | pnpm check:cross-package-test-inputs
0 | pnpm check:doc-authoring
0 | pnpm check:driver-memory-census
0 | pnpm check:gitlink-declared
0 | pnpm check:nul-bytes                         (no raw ASCII control bytes)
0 | pnpm check:pm-governed-merges
0 | pnpm check:pm-prior-rulings
0 | pnpm check:refd-timer-probe
0 | pnpm check:watch-hint-literal
0 | pnpm check:pm-governed-prose                 (card acceptance; 13 registered governed surfaces named)
0 | pnpm --filter @objectstack/lint run check:doc-formula-expressions
    (first run exit 3, PREREQUISITE NOT MET; re-run after building @objectstack/formula and
    @objectstack/lint under the verify lock: VERDICT command-exit 0, Tasks 4/4)

dispatch-gates --ran: 21 derived famil(ies) accounted for — 21 run, 0 NOT-MEASURED
(a DERIVED zero — all 21 recorded an exit code and none of them is 3).

No tests, typecheck or dogfood: the diff touches no package, and the title carries no !.


Generated by Claude Code

…custom override that hides a vendor change, as advice only

Decision D2 on epic objectstack-ai/cloud#3652 (ruling record 6681380041).
basedOn stays recorded and never gates; nothing is refused, merged or
rebased on the finding. Amends D2, D6, the Supersede table's section 9
row, Consequences and merge question 2; adds the dated status note and
a Refs entry. pnpm adr:index regenerated: the index is unchanged.

Claude-Session: https://claude.ai/code/session_01Q4EjjRhUZjdy8VXs6Kkur2
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 6, 2026
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Nov 6, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2

Contract-review-claim: session_01Q4EjjRhUZjdy8VXs6Kkur2 · head 561b3b2 · 2026-11-06T10:04Z

Face: governed path docs/adr/0146-*.md (Tier H) → CONTRACT_REVIEW_TIER, run by an isolated reviewer the seat starts now.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 561b3b2d97da18093d1a99947615801c5a173855
Local-runs: none
Scope: docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md + docs/adr/0141-inter-app-dependency-declared-checked-before-install.md (D3 table, the upgrade-interception row), docs/adr/0126-packaged-metadata-customization-model.md (status line, §9), docs/adr/README.md, scripts/adr-index.mjs (HEADER_WINDOW), packages/spec/src/kernel/override-declaration.zod.ts, packages/metadata-protocol/src/protocol-served-overrides.ts, packages/metadata-protocol/src/served-override.ts, content/docs/api/metadata-api.mdx, content/docs/concepts/metadata-lifecycle.mdx, skills/objectstack-platform/evals/config-plugins-ops.json

Read at 2026-11-06T10:12Z: card #30881 (body and both comments), the ruling record 6681380041 on objectstack-ai/cloud#3652 (D2, maintainer, verbatim 「修订为允许只提示(推荐)」), the PR body, its one-file list, the net diff d55acb78..561b3b2d (merge-base is d55acb78; origin/main at 98f640d5 has not moved ADR-0146, the index or scripts/adr-index.mjs since), ADR-0146 whole at main and at the head, ADR-0141 D3 and ADR-0126 §9 as cited, and the check-runs on the head. The dev's report and the PR body's verification block were not used as evidence. Nothing was built or run.

① Derived judgments

The amendment matches the ruling. The ruling is one sentence: the upgrade plan may report an override that hides a vendor change, as advice only, never a gate. The head delivers exactly that, in eight hunks of one file:

The D6 "Not done" bullet (:404-405, not named by the card). Required: yes. Left as "no upgrade diff, no basedOn judgement", finding (b) — a comparison of basedOn with the installed version — would be forbidden by D6 one screen below the D2 that admits it, and the card's own acceptance ("every passage … either admits the advisory finding or is shown unchanged on purpose") is about a record that stays consistent, not about the list being closed. Minimal: nearly. The bullet's rewording to "no field-level upgrade diff, no gate on basedOn" is the minimum; the appended em-dash clause ("the upgrade plan's advisory finding … refuses, merges and rebases nothing") restates D2 and could have been a bare (D2) cross-reference. Harmless; not a finding.

Gates. Every required context the head carries is green: Lint & Repo Gates (all lanes), TypeScript Type Check, Test Core, Governed Surface Queue Guard, Check Documentation Links, Check Changeset, Check PR Size, PR-body guards; the UI and dogfood contexts are skipped by the paths filter, which is right for a one-ADR diff. The Lint & Repo Gates success is the ADR link, anchor and index steps passing on this head.

② Semver level

No changeset expected, and none present — correct. docs/adr/** publishes nothing from any released package; Clause-②: no is line-initial in the PR body; Metadata-protocol: none; the skip-changeset label is on the PR and Check Changeset is green. The widening (a new finding kind in the plan's response) is card #30886's and is declared there as Clause-②: yes (widening), which is the right place. The spec .describe() quotes that will change with #30886 are a published-docs change there, not here.

③ Boundary flags

  1. scripts/adr-index.mjs HEADER_WINDOW = 40 — the PR is safe as written, with two lines of headroom. Verified on the head: **Status** at :3, **Decided by** at :27, **Supersedes in part** at :38, **Amends** at :39, **Builds on** at :40; lines.slice(0, 40) covers lines 1–40, so the Supersedes cell is read and the committed docs/adr/README.md row for ADR-0146 is identical at main and at the head (ADR-0126, ADR-0131, ADR-0005, ADR-0048, ADR-0141, ADR-0070). The dev's finding is correct and under-stated in one respect: pnpm check:adr-index is --self-test && --report, and --report exits 0 whatever it finds, so a regenerated index with an emptied cell that is then committed passes with no warning at all. The next status-line amendment of three or more lines will empty the cell silently. Should-fix, as a follow-up card (not this PR): a producer fix on scripts/adr-index.mjs — read header fields up to the first ## heading instead of a fixed line count, or report a record whose **Key**: lines run to the window's last line — with a self-test case. The seat files it; it belongs to no governed path and must not ride a Tier H ADR PR. One visible cost of the workaround already in this PR: the three new status-note lines are 200–330 characters wide against a file wrapped at 120, to stay inside the window. Nit, not a finding.
  2. Quotes of the old sentence elsewhere — deferring to On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886 is right for every one of them; none is false today. Read at main: packages/spec/src/kernel/override-declaration.zod.ts:93-99 (basedOn's .describe(): "No door compares it with the installed base, no upgrade diff is produced from it, and nothing is refused on it (ADR-0146 D2)") and :137, :141; packages/metadata-protocol/src/protocol-served-overrides.ts:45-47 ("No diff against the base's document and no basedOn verdict (ADR-0146 D2, D6)"); served-override.ts:35; content/docs/api/metadata-api.mdx:105 and content/docs/concepts/metadata-lifecycle.mdx:121 ("recorded and never judged"); the content/docs/references/ui/*.mdx pages generated from the .describe(). Each describes the runtime as it is: nothing reads basedOn today, and the amended ADR charters a finding it does not deliver, so editing them now would advertise an undelivered capability (Prime Directive chore: version packages #10). The .describe() at :93-99 is the one that will be flatly wrong the day On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886 lands and is the one most likely to be missed: On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886's body lists :137, :141 and protocol-served-overrides.ts:46 as the sentences to change in its PR, not :93-99 nor the generated references pages. Should-fix, on card On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886's body, not this PR: add override-declaration.zod.ts:93-99 and the regenerated content/docs/references/** pages to that card's "in the same PR" list. The comments in protocol-served-overrides.ts and served-override.ts stay true after On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886 too — those reads still copy basedOn as recorded; the finding lives in the plan, not in them. Governed quotes: docs/adr/0126-…:3's pointer ("diff-vs-base and the skip-report stay deferred") remains true under ADR-0146's own amended vocabulary (a field-level diff-vs-base view and the skip-report as a merge tool are what stay deferred) and the card ruled "no other ADR is touched"; skills/objectstack-platform/evals/config-plugins-ops.json:169 carries "never judged" only in the free-text expected_output, and its must_contain asserts basedOn alone, so the eval does not pin the old wording. The dev's acceptance note cites protocol-packaged-base-refusal.ts:1016; that line is right on the merge-base tree (1276 lines) and has moved on main (893 lines) — a stale line number, not a wrong claim.

④ Design judgment

I tried to read the amended D2 as licensing a gate. Four attacks, none gets through; two leave wording that should be tightened.

Against its first consumer (#30886's plan finding, on #30884's plan) and its execution plan (the Refs bullet routes the code to #30886, blocked-by this card and #30884), the amendment holds: it charters exactly the advice the ruling asked for and nothing the ruling withheld, and it leaves every refusal where the other rulings (Q3) put it.

Findings: should-fix ×4 (follow-up card on HEADER_WINDOW; #30886's list gains :93-99 and the generated pages; two wording tightenings in D2). Must-fix: none.

Implemented-by: claude/issue-30881-adr0146-advisory-drift
Reviewed-by: session_01Q4EjjRhUZjdy8VXs6Kkur2

VERDICT: PASS

…e three negations on both findings

Contract review 6682453235 should-fixes: D2 names the advisory class the
plan's refusal never reads and no finding-set token covers, and the
no-refusal / no-token / no-automatic-merge negations move from basedOn
onto the per-finding sentence. Status note unchanged in size; the index
row for ADR-0146 is unchanged after pnpm adr:index.

Claude-Session: https://claude.ai/code/session_01Q4EjjRhUZjdy8VXs6Kkur2
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 9647da1619402557e32ae6fc07bcdcb7be14a1fa
Local-runs: none
Scope: docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md + docs/adr/README.md (the ADR-0146 index row), scripts/adr-index.mjs (HEADER_WINDOW)

Delta review of 561b3b2d..9647da16, read at 2026-11-06T11:19Z. The previous head 561b3b2d carries my PASS record 6682453235; this record judges only what moved since. Inputs: the compare (one commit, fast-forward, ahead_by 1 / behind_by 0, one file, +9/−8, all inside the D2 paragraph at :214-222), ADR-0146 whole at the new head, the current PR body, and the new head's check-runs read once. Nothing was built or run.

① Derived judgments

Both wording should-fixes from 6682453235 are folded in, and they land exactly where asked:

  1. The advisory class is named (:220-222): "The plan carries both findings in an advisory class that its refusal never reads and that no finding-set token covers, so neither becomes a gate by sharing a response with a refusing finding." That closes the severity-collapse reading and the token-hash reading in one sentence, with the mechanism an implementer of On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886 can be held to: the finding is outside the plan's refusal and outside any confirmSchemaUpgrade-style token set that Package upgrade plan: one framework comparison of installed vs new version (fields, types, renames, seeds) as a dry run; declared renamedFrom is planned, an undeclared rename or type change is refused unless confirmed (epic cloud#3652 Q3) #30884's Q3 refusal computes.
  2. The three negations now sit on the per-finding sentence and cover both findings (:218-220): "On either finding no door refuses, no token is asked, and nothing is merged, rebased or rewritten automatically; the upgrade proceeds as it would without it, and re-basing stays the customer's act." basedOn's own sentence is reduced to "basedOn is recorded and never gates (epic [Epic] Package-level override: every customization of an installed package lives in its paired <base>.custom package, one declared override shared by code and Studio (supersedes #28130) #28236, … recorded only)", which is right: finding (b) is basedOn's only reader, and the per-finding sentence now carries the negations for it. The card's Expected 2 ("no door refuses on either, no token is asked, and nothing is merged, rebased or rewritten automatically") is now met word for word.

Nothing else moved. The compare touches one hunk; the status note (:24-26), D6 (:405-406), the §9 lift, the Supersede row, Consequences, merge questions 1 and 2, the Refs bullet, D3 and the ADR-0141 D3 sentence are byte-identical to 561b3b2d. The provenance parenthetical "(epic #28236, Not in this epic: upgrade diff / basedOn checking, recorded only)" is kept, now directly ahead of "One reader is admitted", which reads correctly as the earlier ruling the 2026-11-06 amendment qualifies.

The status note without "no token" — acceptable as is, not a should-fix. The status line is a dated pointer, not the rule: it names what moved and sends the reader to D2, D6, the §9 row, Consequences and merge question 2, and D2 is where the three negations bind. Merge question 2 ("refuses nothing") and the D6 bullet ("refuses, merges and rebases nothing") are the same kind of pointer and were accepted at 561b3b2d on the same reasoning. "basedOn still never gates" in the note already excludes a token on finding (b); finding (a)'s token is excluded by D2's sentence, which the note cites. A one-word addition would cost nothing (the three note lines stay three), but it is not owed; if the status line is touched again for another reason, add "no token" then. Nit, recorded here so it is not re-raised.

Gates on the new head. Every required context the head carries is green: Lint & Repo Gates (all lanes), TypeScript Type Check, Test Core, Governed Surface Queue Guard, Check Documentation Links, Check PR Size, PR-body guards; the UI and dogfood contexts are skipped by the paths filter. Check Changeset is skipped on this head (both runs) — the skip-changeset label's job-level exemption, the textbook outcome for a diff that publishes nothing, and not one of the ten required contexts. My single read caught one PR-body guards run still in_progress beside its completed success twin; the completed run is the verdict.

② Semver level

Unchanged from 561b3b2d: no changeset owed or present; Clause-②: no and Metadata-protocol: none are line-initial in the body; skip-changeset is on. Correct.

③ Boundary flags

  1. HEADER_WINDOW = 40 — verified on the new head: **Status** :3, **Decided by** :27, **Supersedes in part** :38, **Amends** :39, **Builds on** :40; the delta is below the header and moves no header line. The docs/adr/README.md row for ADR-0146 is unchanged, and the compare of origin/main (98f640d5) to the new head lists the one ADR file only, so the index is byte-identical to main. The producer fix is now filed as scripts/adr-index.mjs reads header fields only from an ADR's first 40 lines, so a longer status note silently empties the Supersedes cell while check:adr-index still passes #30916 (open, pm:queue, domain:devx), which the PR body's acceptance notes cite — the follow-up card my first record asked for exists.
  2. Quotes of the old sentence elsewhere — unchanged since 561b3b2d; deferral to On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886 stands as judged there. The one open should-fix from 6682453235 that is not this PR's — adding override-declaration.zod.ts:93-99 and the regenerated content/docs/references/** pages to On a base package upgrade, list each <base>.custom override whose base item the upgrade changed — an override that now hides a vendor change (advisory; epic cloud#3652 D2, after the ADR-0146 amendment, card 06) #30886's "in the same PR" list — is the seat's, on that card's body, and is not re-judged here.

④ Design judgment

Re-run against the amended D2: the four attacks from 6682453235 (severity collapse, token hash, "door versus client", item-level diff by inference) now all fail at the text itself rather than by inference — the advisory class is named, the negations sit on the findings, and "proceeds as it would without it" still covers any client prompt. Against its first consumer (#30886 on #30884's plan) the text now says exactly what #30886's contract review has to hold the code to. No new reading opens: naming an "advisory class" does not charter a refusing class the ruling withheld — the only refusals in the plan remain Q3's, which this record does not touch. Must-fix: none. Should-fix: none remaining in this PR.

Implemented-by: claude/issue-30881-adr0146-advisory-drift
Reviewed-by: session_01Q4EjjRhUZjdy8VXs6Kkur2

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2

维护者速读

  • 改了什么:只改 ADR-0146 的文字,执行你在专题 cloud#3652 定的 D2「修订为允许只提示」。软件包升级预览可以列出两类提示:一是管理员的 .custom 定制改写了厂商这次升级要改动的项(「这个定制盖住了厂商的改动」);二是定制记录的 basedOn 版本和当前安装的基础版本对不上。两类都只是提示:不拒绝、不要令牌、不自动合并或改写,升级照常进行。basedOn 仍然只记录、从不拦截。
  • 为什么改:原文写着「basedOn 只记录不评判,不做升级对比」,与 D2 冲突。不先改 ADR,「定制冲突提示」那张卡(objectstack#30886)就不能开工。
  • 风险与回滚:纯文字。回滚即还原本 PR。D3 和合并问题 1 一字未动;同时保证 ADR-0141 D3 定下的「升级拦截」仍然延后。
  • 需要你做的:审阅并亲手合并本 PR(受治理面 docs/adr/**,Tier H)。

席位意见: 建议合并。完整复核 PASS 6682453235(head 561b3b2d),两处措辞改进并入后,增量复核 PASS 6683623046(head 9647da16),没有遗留待修项。

席位核对 · ACCEPT(Tier H,等维护者合并)· 2026-11-06T11:20Z

Head-sha: 9647da1619402557e32ae6fc07bcdcb7be14a1fa
Implemented-by: os-dev (session session_01Q4EjjRhUZjdy8VXs6Kkur2, branch claude/issue-30881-adr0146-advisory-drift) · Reviewed-by: repo:cloud#3

  • 形态: 1 个文件,docs/adr/0146-*.md。改动:状态行加一条注明日期的「就地修订」说明;D2、§9、D6 的「暂不做」一条、Supersede 表、Consequences、合并问题 2 相应调整。pnpm adr:index 跑过,目录零差异。GOVERNED,Tier H。PR 保持 draft,⛔ 席位不翻 ready、不入队、不挂 auto-merge。
  • 门禁 check-runs(head 9647da16):必需检查全部 success;UI 和 dogfood 因路径过滤被跳过;skip-changeset 按规则豁免。
  • 范围外去向:
    • ADR 目录脚本只读每份 ADR 的前 40 行(HEADER_WINDOW = 40),已立 objectstack#30916;
    • 届时要随代码一起改的几处文字,已写到 objectstack#30886 上;
    • 两处受治理文件里的引文(ADR-0126:3、skills eval)在新措辞下仍然成立,复核员判定不用改。
  • 落地条款: Tier H。席位同时挂 needs-user-decision,并请审批人 os-zhuang(hotlong 是本席自己的账号,按规则不请)。维护者亲手合并即为审阅记录。

@objectstack-fleet objectstack-fleet Bot added the needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR label Nov 6, 2026
@objectstack-fleet
objectstack-fleet Bot requested a review from os-zhuang November 6, 2026 11:21
@os-zhuang
os-zhuang marked this pull request as ready for review November 6, 2026 14:30
@os-zhuang
os-zhuang requested a review from hotlong as a code owner November 6, 2026 14:30
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 6, 2026
@os-zhuang
os-zhuang removed this pull request from the merge queue due to a manual request Nov 6, 2026
@os-zhuang
os-zhuang added this pull request to the merge queue Nov 6, 2026
Merged via the queue into main with commit 514a422 Nov 6, 2026
51 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-30881-adr0146-advisory-drift branch November 6, 2026 15:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision Blocked on a maintainer decision — do not dispatch; decision cards only, never on a PR size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants