Repository navigation
Description
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
Filing gate: ③ a task on the maintainer's word. Epic objectstack-ai/cloud#3652, coordinator session 2026-11-06, verbatim: 「我觉得先把受管软件包的开发循环走顺了」, then 「同意,然后第一步先解决我本地开发的软件包怎么能够方便地发布到云端」. Phase 2 lists ".custom drift: on a base upgrade, check each override's basedOn and list overrides that now hide a vendor change." Decision D2 on the epic (2026-11-06), the maintainer's selection verbatim: 「修订为允许只提示(推荐)」. Amend ADR-0146 to allow an advisory finding, "this override hides a vendor change", in the upgrade plan. It stays advisory: no blocking and no auto-merge. Ruling Q1 on cloud#3652, verbatim: 「a 本地 os dev(推荐)」.
Governed surface. docs/adr/** is Tier H (AGENTS.md Prime Directive 14, AGENTS.md:271-307; register GOVERNED_SURFACES in scripts/pm/check-governed-merges.mjs).
- Authoring is open to the claiming seat. The PR stays a draft for the maintainer's own merge.
- ⛔ No seat merges it, queues it, arms auto-merge, flips it out of draft, or submits an approving review.
- This is how ADR-0146's previous amendment landed: "by the maintainer's hand-merge of the PR cut from docs(adr): ADR-0146 amendment — only the paired
<base>.customdeclares an override; a dependent package adds under its own names (ruled A, withdraws rider 3) #28390" (docs/adr/0146-…:23).
Lane: domain:skills. The pm-dispatch lane table gives docs/adr/** to domain:skills (.claude/skills/pm-dispatch/SKILL.md:161). The previous ADR-0146 amendment card, #28390, carried domain:skills.
维护者速读
ADR-0146 现在写明「basedOn 只记录、不判断」「升级差异推迟」。按你刚才的裁决,这张卡只改 ADR 的文字:允许升级预览给出一条提示,「这个 .custom 覆盖挡住了本次升级对同名项的修改」。只提示,不拒绝安装,不自动合并。ADR 属于受管文件,PR 保持草稿,由你亲手合并。代码改动在另一张卡(03),等这张合并后再做。
Today (objectstack origin/main 8b9cc712; ADR-0146 unchanged since c50e0dfa)
The passages that rule the finding out, in docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md (measured):
- D2,
:209-212: "basedOnrecords which version of the base package …basedOnis 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 [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, Not in this epic: upgrade diff /basedOnchecking, recorded only)." - D2,
:262: "Diff-vs-base and the upgrade skip-report stay deferred". - Merge question 2,
:679-681: "basedOnis recorded and never judged … listed only so the declaration's contract carries the ruling and no card readsbasedOnas a gate". - Consequences,
:598-601: "an overridden item shadows the vendor's later change to that one item until the customer re-bases it, and the platform computes no diff to help". - Supersede table,
:563: §9's "diff-vs-base and the skip-report stay deferred". - Status line (
:3-23): the house form of an amendment is a dated "Amended in place (date, ruling …, verbatim …)" sentence on the status line. The index (docs/adr/README.md) is generated from that line bypnpm adr:indexand must not be hand-edited (README.md:3,:8).
The code carries the same sentence; it is changed by card 03, not here:
packages/spec/src/kernel/override-declaration.zod.ts:137,:141;packages/metadata-protocol/src/protocol-served-overrides.ts:46.
Expected
- A dated amendment on the status line: "Amended in place (2026-11-…, decision D2 on objectstack-ai/cloud#3652, maintainer, verbatim: 「修订为允许只提示(推荐)」): an upgrade plan may report an override that hides a vendor change, as advice; nothing is refused on it." It links the epic's ruling comment.
- D2 (
:209-212) reads:basedOnis recorded and never gates. One reader is admitted, the package upgrade plan, which may list as advisory findings:- (a) a
.customitem that declares an override of a base item the upgrade changes between the installed and the new version; - (b) an override whose
basedOnis not the installed base version. - No door refuses on either, no token is asked, and nothing is merged, rebased or rewritten automatically. Whole-document replace (ADR-0005 principle 3) is unchanged.
- (a) a
:262and the Supersede table row read: the advisory upgrade finding of D2 is chartered. A field-level diff-vs-base view and the skip-report as a merge tool stay deferred.- Merge question 2 (
:679-681) keeps "no card readsbasedOnas a gate" and adds the one advisory reader. - Consequences (
:598-601): "the platform computes no diff to help" becomes: the upgrade plan names each override that now hides a change; re-basing stays the customer's act. - One sentence keeps ADR-0141 D3 intact: the advisory finding is not the base-upgrade interception D3 defers, since it refuses nothing. Merge question 1's
^<major>reasoning is unchanged. pnpm adr:indexregenerated in the same PR. No other ADR is touched.
Acceptance
- The diff touches only
docs/adr/0146-…mdand the generateddocs/adr/README.md. - The ADR lint step and
pnpm check:pm-governed-prosepass. - Every passage listed under Today either admits the advisory finding or is shown unchanged on purpose.
- The PR is opened as a draft, says "Tier H — maintainer merges", and is never merged, queued or armed by a seat.
- Card 03's
Blocked-by:points here and is cleared when the maintainer merges.
Serial: no Phase 1 dependency. 03 waits on this; 01a does not.
Dedupe (2026-11-06), run as gh api -X GET search/issues -f q=…:
repo:objectstack-ai/objectstack ADR-0146 amendment is:issue is:open→ 3 hits: An overridden object's validation message never takes its .custom pair's translation, while the object's labels do #30245 (validation-message translation, unrelated), and two seat posts ([PM seat] domain:skills — 🟢 os-steve #7623, [PM seat] triage (objectstack-wide) — 🟢 hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH · trig_01377heGw9UoChYTLnz93qjo (hourly) · state = body + the round records newer than it #6015). None.repo:objectstack-ai/objectstack ADR-0146 basedOn advisory upgrade is:issue→ 1 hit: QA run · release-18.3.0-w5-studio (38/38) · 589049b0 · 2026-11-03 · 37 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #29893 (QA run). None.repo:objectstack-ai/objectstack basedOn is:issue→ 47 hits; the only open ones are QA runs QA run · adr-0146-new-items (7/7) · 322cf906 · 2026-11-02 · 6 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #29648 and QA run · adr-0146-new-items (7/7) · 128681f4 · 2026-11-02 · 4 PASS / 0 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #29560.
Suggested-grade: p2 · a short governed text change that unblocks 03. It is the ruling's own record.
Clause-②: no · ADR text only. No spec key, route or error code. The widening (a new finding kind in the plan) is card 03's, and is judged there.
🤖 Generated with Claude Code
Activity
objectstack-fleet commentedon Nov 6, 2026
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
Claim: PM loop round R5 · 2026-11-06T09:10Z
Session:
session_01Q4EjjRhUZjdy8VXs6Kkur2Account:
hotlong(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-30881-adr0146-advisory-driftWorktree:
/home/user/w30881/objectstack-issue-30881Domain:
domain:skills(claimed by the epic owner of objectstack-ai/cloud#3652 on the maintainer's word, verbatim, 「专题卡3652相关的任务你也都优先派发」)Seat:
repo:cloud#3File surface:
docs/adr/0146-*.md(the passages the card names, plus a dated "Amended in place" status note) and the regenerated ADR index (pnpm adr:index)Container & model:
M,mode:subagent,model: TIER_DEFAULT,effort: highClause-②: no — ADR text only
Metadata-protocol: none
Responsibility: ruling D2 on epic cloud#3652 (an upgrade plan may report a
.customoverride that hides a vendor change, as advice only) | none | the drift card that waits on itThread-read: none
Premise: holds — ADR-0146 today reads "
basedOnis recorded, not judged … no upgrade diff" and defers the skip-report (draft reading)Serial constraints cleared: no in-flight claim on ADR-0146 found.
Carrier: objectstack (governance text).
Governed face:
docs/adr/**(Tier H). The PR stays a draft for the maintainer's own merge; ⛔ the seat does not ready it, queue it or arm auto-merge.objectstack-fleet commentedon Nov 6, 2026
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
os-dev-report
{ "issue": 30881, "status": "done", "branch": "claude/issue-30881-adr0146-advisory-drift", "pr": "https://github.com/objectstack-ai/objectstack/pull/30899", "session": "session_01Q4EjjRhUZjdy8VXs6Kkur2", "premise_still_valid": true, "summary": "ADR-0146 amended in place for decision D2 on objectstack-ai/cloud#3652 (ruling record 6681380041, verbatim 「修订为允许只提示(推荐)」): a dated Amended-in-place note on the status line; D2 now says basedOn is recorded and never gates and admits one advisory reader, the base upgrade plan, with findings (a) override of a base item the upgrade changes and (b) basedOn not the installed base version; D2's section-9 lift, the Supersede table section-9 row, Consequences bullet 3 and merge question 2 follow; D3/merge question 1 unchanged on purpose, ADR-0141 D3 kept intact by one sentence. All card line hints re-located on d55acb78 at the same lines. One passage the card did not name was also amended: D6 'Not done' bullet (:393) 'No clone lineage, no upgrade diff, no basedOn judgement' would otherwise contradict the amended D2; it now reads 'no field-level upgrade diff, no gate on basedOn'. pnpm adr:index regenerated and wrote a byte-identical README (the index shows a truncated status prefix), so the diff is the one ADR file only; card acceptance said ADR + README, README is unchanged by construction. Draft PR #30899 stays draft for the maintainer's Tier H merge; not readied, no review requested, not queued.", "tests": "No package touched: no build closure, no tests, no typecheck, no dogfood (no ! in title, Clause-②: no). No ablation (ADR text only).", "gates": "Head 561b3b2d, objectstack. dispatch-gates --repo objectstack-ai/objectstack --commands: 21 families; all exit 0 captured before any pipe: check-adr-links (991 destinations resolve) + --self-test, check-closing-keyword-parity + --self-test, check-comment-mask-corpus, plan-test-core-shards --self-test, check:adr-anchors, check:adr-index ('README.md is current, every record parsed'), check:adr-symbol-anchors (3163 anchors resolve), check:ci-filter-parity, check:closed-ceremony-text, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes (no raw control bytes), check:pm-governed-merges, check:pm-prior-rulings, check:refd-timer-probe, check:watch-hint-literal, lint check:doc-formula-expressions (first run exit 3 PREREQUISITE NOT MET; after building @objectstack/formula + @objectstack/lint under os-verify-lock: VERDICT command-exit 0, Tasks 4/4; re-run exit 0). Plus check:pm-governed-prose exit 0 (card acceptance; outside the derivation). --ran reconciliation: '21 derived accounted for, 21 run, 0 NOT-MEASURED (a DERIVED zero — all 21 recorded an exit code)'. CI check-runs at report time (read once): Check Changeset success; Lint & Repo Gates lanes, Type Check lanes, Governed Surface Queue Guard, Check Documentation Links, PR-body guards in_progress; convergence is the PM's.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "3 — relay dispatch fw-20261106T094719Z-f8e577 (POST /repos/objectstack-ai/objectstack/dispatches) executing pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/30899/labels [skip-changeset], read back identical; post-stamped os-dev-report comment POST /repos/objectstack-ai/objectstack/issues/30881/comments. Two git pushes (empty branch, then 561b3b2d) are not REST writes.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: none (internal tool `pnpm adr:index`, no public door; producer named: scripts/adr-index.mjs) · evidence: HEADER_WINDOW = 40 in scripts/adr-index.mjs reads **Key**: header fields only from a record's first 40 lines; growing ADR-0146's status line by 7 lines moved its **Supersedes in part** line from 35 to 42 and the regenerated index silently emptied ADR-0146's Supersedes cell (ADR-0126, ADR-0131, ADR-0005, ADR-0048, ADR-0141, ADR-0070 to an em dash) with exit 0, and check:adr-index would have called it current; avoided here by keeping the note to 3 lines · dedupe words: adr-index HEADER_WINDOW, supersedes column dropped, header window 40 · carrier: none · noted, not filed; PR #30899 body does not carry it (written once before the finding was classified) — seat may add one line to its Acceptance notes", "carrier: #30886 · quotes of the old sentence that describe today's runtime and change with the finding's code, listed not edited: packages/spec/src/kernel/override-declaration.zod.ts:98, :137, :141 (and the content/docs/references/** pages generated from it), packages/metadata-protocol/src/served-override.ts:35, protocol-packaged-base-refusal.ts:1016, content/docs/api/metadata-api.mdx:105, content/docs/concepts/metadata-lifecycle.mdx:121", "carrier: maintainer · governed quotes listed, not edited: docs/adr/0126-packaged-metadata-customization-model.md:3 (status-line pointer 'diff-vs-base and the skip-report stay deferred'), skills/objectstack-platform/evals/config-plugins-ops.json:169 ('basedOn recorded and never judged')" ] }objectstack-fleet commentedon Nov 6, 2026
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
os-dev-report
{ "issue": 30881, "status": "done", "round": "follow-up on contract review 6682453235", "branch": "claude/issue-30881-adr0146-advisory-drift", "pr": "https://github.com/objectstack-ai/objectstack/pull/30899", "head": "9647da1619402557e32ae6fc07bcdcb7be14a1fa", "session": "session_01Q4EjjRhUZjdy8VXs6Kkur2", "summary": "Both wording should-fixes from contract review 6682453235 are folded into D2 in one normal commit (9647da16, no rebase, no force). (1) D2 names the carrier class: the plan carries both findings in an advisory class its refusal never reads and no finding-set token covers. (2) The three negations (no refusal, no token, no automatic merge/rebase/rewrite) moved off basedOn onto the per-finding sentence, so they cover findings (a) and (b) alike; basedOn keeps 'recorded and never gates'. The status note is unchanged in size and content: the Supersedes line is still at :38, inside HEADER_WINDOW = 40. pnpm adr:index produced zero diff against origin/main, and the ADR-0146 row still lists ADR-0126, ADR-0131, ADR-0005, ADR-0048, ADR-0141, ADR-0070. The PR stays a draft (Tier H).", "gates": "Head 9647da16. dispatch-gates derived the same 21 families as at 561b3b2d; all 21 exited 0 locally. check:doc-formula-expressions ran after building @objectstack/formula and @objectstack/lint under os-verify-lock (VERDICT command-exit 0; the first attempt timed out in the queue with 99 and was retried in the same slot). check:pm-governed-prose also exited 0. --ran: '21 run, 0 NOT-MEASURED (a DERIVED zero)'. CI check-runs on 9647da16, read once: 41 in total, 25 success and 16 skipped, none failed or pending. Lint & Repo Gates, TypeScript Type Check, Test Core, Governed Surface Queue Guard, Check Documentation Links and PR-body guards all succeeded.", "mcp_calls": "0", "api_writes": "1 — this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/30881/comments via the relay). One git push, which is not a REST write. The PR body was not patched; the replacement text goes back to the seat.", "security_findings": "none" }objectstack-fleet commentedon Nov 6, 2026
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
ACCEPT → PR #30899 comment 6683646742 · 2026-11-06T11:21Z · Tier H (governed
docs/adr/**): contract review PASS 6682453235 and delta PASS 6683623046 (head9647da16); PR left draft withneeds-user-decision, review requested fromos-zhuang. The maintainer merges by hand; the card closes on merge viaFixes #30881, and objectstack#30886 then waits only on #30884.