docs/adr: a sunset rule for @deprecated tombstones — 574 tags (504 in packages/types, 640 'never' members) with no rule for when a tombstone leaves the authoring face #25912
Description
Ruled: 6392108885 · letter A · 2026-10-25T01:47Z
Filing gate ③: a maintainer-directed task. Maintainer, 2026-10-24, verbatim: 「同意:建议新建:与合并无关、独立成卡的产品/契约项(可现在建)」, approving the review's list of independent product / contract cards. Batch-of: 13 (this review batch; the per-fire quota is overridden by the maintainer's direction).
维护者速读
@deprecated 574 处,504 在 packages/types,绝大多数是 key?: never 墓碑(640 行)——这是契约按设计在工作(#0.1:退役键留处方),不是死代码。缺的是一条日落规则:「spec 退役后 N 个 major,墓碑离开授权面」。没有它,授权面只增不减,每个墓碑都是永久义务(北极星「声明了但不兑现的键按发布批量退役」)。建议写成一篇 ADR(受管面 docs/adr/**),不做横扫。
Measured (2026-10-24, HEAD 7981384)
@deprecatedtags outside tests, dist and changelogs: 574; by package: types 504 (objectql.ts93,data-display.ts69,form.ts55), react 18, core 17, plugin-timeline 8, plugin-calendar 5, components 4.?: nevermembers inpackages/types/src: 640 lines; sample shape:/** @deprecated RETIRED (objectui#11533) … */ field?: never;onConditionalFormattingRuleinpackages/types/src/objectql.ts.- Age of the tombstones is 未实测 here (the review clone was shallow to 2026-09-05;
git log -Son a full clone settles it). - The zod side keeps 16 retired keys as
z.nevertombstones with remedies across the mirrored pairs — the right shape under #0.1; the missing half is the exit. - Business reason: an AI author reading the published
.d.tssees hundreds of refused keys beside the live ones; the longer the list, the more the face teaches what not to write instead of what to write. - Dedup (
@deprecated|tombstone … sunset|sunset rule): 10 hits, 0 open, all individual retirements (e.g. objectui#12293, fix(types,plugin-form,plugin-detail): field metadata members FieldSchema refuses retire as never, and their readers follow the spec keys (objectui#12242) objectui#12257, feat(types)!: UnifiedViewConfig.chart retires with a tombstone naming the spec's list chart block; the object-chart legacy-axis refusals stop calling the keys a list-view spelling (objectui#12063) objectui#12065, feat(types)!: ObjectGridSchema.defaultFilters and the flat gantt / map filter follow their @objectstack/spec rows by reference (objectui#6152, round 10) objectui#11993); no card proposes the rule.
Task
- An ADR (docs/adr, governed) stating: a tombstone leaves the authoring face one major after the spec retirement it names (or after the spec's own retirement window closes, whichever the maintainer picks), and the changeset that drops it is
minorwith a breaking note per AGENTS 版本号策略. - A one-line pointer from AGENTS.md #0.1 to the ADR (governed; can ride the AGENTS merge card objectui#13455).
- No sweep in this card; the first batch to apply the rule is its own card once the ADR lands.
Who acts: objectui domain:ui seat drafts the ADR; maintainer approves (governed surface). Effort S.
Filed by the read-only whole-repo review session https://claude.ai/code/session_01BDtwYUWhLGyWLzYQjZ95Cf on 2026-10-24, written through the maintainer's own account token (the session holds no fleet-bot credential). Evidence files: that session's scratchpad (objectui-review-report.md, findings-*.md). ⛔ Not a claim; triage grades and routes; suggested labels are suggestions only. Ruled; see the first line.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
documentation·priority:p3·domain:ui·area:devpath·needs-user-decision· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T17:07Z⛔ Not a claim, ⛔ not a dispatch.
findingcomes off.key?: nevertombstones, so the authoring face stops only growing. An ADR is a rules surface (docs/adr/**, Tier H).Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Director increment · batch objectstack-ai/objectui#391 item 5 · 2026-10-25T01:38Z
Director seat, summon objectstack-ai/objectui#49 (session
session_0162wFwDdLFGhaSvDdSnZ9Sx, accountos-zhuang, inGOVERNED_APPROVERS— this seat submits no review and clicks nothing; written asobjectstack-fleet[bot]through the relay; ledger #12708). ⛔ Not a ruling. The card carries no four-facet block; the block below is the seat's.Premise re-check (objectui
origin/main, 2026-10-25): the tombstone shape is as filed —packages/types/src/objectql.ts:496"retired keys declared?: never, so each is refused BY NAME",:524/** @deprecated RETIRED (objectui#11533) … */— a compile-time refusal that carries its remedy. objectuiAGENTS.md:102#0.1 (contract-first; a typed literal refuses an unknown key) and:280版本号策略 (nomajorin a changeset; the fixed group follows objectstack's cadence) hold. The 574 / 504 / 640 counts and the tombstones' ages were not re-measured by this seat (the filer's shallow clone could not date them either).Governing text found, and it already answers the window. objectstack ADR-0087 (
docs/adr/0087-metadata-protocol-upgrade-contract.md:143–147,:382): each retirement conversion is applied by the loader for one major; the runtime carries one major of it; entries expire after one major; the window is deliberately not longer. The spec therefore already sunsets its own tombstones one major after retirement. The objectui tombstone mirrors the spec's, so the rule this card asks for is the same window read on the authoring face: the?: nevermember leaves the.d.tsin the first objectui release that follows the spec major in which the key's conversion expires. No new window is invented; the triage leaning (one major) and ADR-0087 coincide.Options:
docs/adr/**, Tier H): a?: nevertombstone leaves the authoring face one major after the spec retirement it names, in step with ADR-0087's one-major conversion window; the changeset that drops it isminorwith a Breaking note (版本号策略); AGENTS.md #0.1 gains a one-line pointer (riding the #25919 AGENTS.md PR). No sweep in this card; the first application batch is its own card after the ADR landsSeat's recommendation: A. On ①, one rule aligned to the window the spec already runs, so the two faces (zod and
.d.ts) retire together and the authoring face stops growing. On ②, the pull is the face itself: hundreds of refused keys beside the live ones teach an AI author what not to write; no customer is blocked today, which is why there is no sweep. On ③, the tombstone IS the loud refusal with a remedy; B removes the remedy at the moment authors on the previous major still need it, A keeps it for exactly the window ADR-0087 keeps the conversion. On ④, the skill's default is immediate retirement with no staged windows — but this is not a staged transition of a capability (the key is already dead and refused); it is how long the prescription stays printed, and ADR-0087 has already ruled that length at one major. Confidence gap: the ADR must say what "one major after" means for a tombstone whose spec retirement predates ADR-0087's window (the oldest of the 640 are undated) — the seat suggests the first application batch dates them withgit log -Son a full clone and treats any already past the window as due.Workload:
domain:uilane · 1 ADR PR (S, Tier H, the maintainer merges) + 1 pointer line riding #25919's AGENTS.md PR. Precedent: objectuidocs/adr/0036(a single-key tombstone record) — no sunset ADR has landed.os-decision-facets
Prior rulings read: ADR-0087 (one-major conversion window,
:143–147,:382), objectui AGENTS.md #0.1 and 版本号策略, objectui ADR-0036, objectui#11533 / refactor(types,fields,app-shell): field metadata stops declaring host-written and field-level regex keys; geolocation leaves the union (objectui#12242) objectui#12293 / fix(types,plugin-form,plugin-detail): field metadata members FieldSchema refuses retire as never, and their readers follow the spec keys (objectui#12242) objectui#12257 / feat(types)!: UnifiedViewConfig.chart retires with a tombstone naming the spec's list chart block; the object-chart legacy-axis refusals stop calling the keys a list-view spelling (objectui#12063) objectui#12065 / feat(types)!: ObjectGridSchema.defaultFilters and the flat gantt / map filter follow their @objectstack/spec rows by reference (objectui#6152, round 10) objectui#11993 (individual retirements) → 9 hits; thread: 6387089490维护者速读
objectstack 的 ADR-0087 已经规定退役键的转换只保留一个 major,所以 objectui 的
?: never墓碑也按同一个窗口退场就行:spec 退役后的下一个 major,墓碑离开.d.ts,changeset 写 minor 加 Breaking 注。写成一篇 ADR(S,Tier H 等您合),不横扫,先批应用另立卡。席位意见 A。回13467 A即可。Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Ruling: batch objectstack-ai/objectui#391 item 5 · letter A · maintainer 「A」 2026-10-25T01:46Z
Director seat, summon objectstack-ai/objectui#49 (session
session_0162wFwDdLFGhaSvDdSnZ9Sx, accountos-zhuang, inGOVERNED_APPROVERS— this seat submits no review and clicks nothing; written asobjectstack-fleet[bot]through the relay; ledger #12708). The maintainer answered batch objectstack-ai/objectui#391 in the summon chat with the single letter 「A」; this card is the batch's only lettered item (the other four items are governed PRs awaiting the maintainer's Approve), so the letter is this card's. Increment 6392036429; triage grade 6387089490.Governing text: objectstack ADR-0087 (
docs/adr/0087-metadata-protocol-upgrade-contract.md:143–147,:382— each retirement conversion is applied by the loader for one major; entries expire after one major; the window is deliberately not longer); objectuiAGENTS.md:102#0.1 (contract-first; a typed literal refuses an unknown key by name) and:280–284版本号策略 (a changeset never declaresmajor); the maintainer's standing 「协议变更直接处理」 posture.What the ruling binds (letter A):
docs/adr/**(Tier H, the maintainer merges) states the sunset rule: a?: nevertombstone leaves the authoring face (packages/typesand any mirrored.d.ts) in the first objectui release that follows the spec major in which the retirement it names has its ADR-0087 conversion expire — one major after the spec retirement, the same window the spec itself runs, never a longer one. The remedy JSDoc ships for exactly that window.minorwith a Breaking note naming the key and the remedy, per 版本号策略.AGENTS.md#0.1 gains a one-line pointer to the ADR; it rides the docs: narrative cost — 42.5% of source lines are comments, workflows 58.6%, AGENTS.md is 103 KB with three stale claims, ROADMAP.md still says v3.3.2 and 80 Storybook stories #25919AGENTS.mdPR (ruling 6386217274), not a PR of its own.git log -Son a full clone (the review clone was shallow) and treats any whose window already closed as due. How a tombstone whose spec retirement predates ADR-0087 is counted is written in the ADR, not left to the batch.Not taken: B (immediate removal when the spec retires the key — the remedy would die before the authors on the previous major stop needing it), C (no rule — the face only grows).
Workload of the letter:
domain:uilane · 1 ADR PR (S; Tier H) + 1 pointer line on #25919's PR. No landed precedent (objectuidocs/adr/0036records a single retirement, not a sunset).Execution:
needs-user-decision→pm:queuein this act;priority:p3,domain:ui,area:devpath,typesstay as triage set them. The ui seat dispatches the ADR draft; the maintainer merges it.os-decision-facets
Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Transferred 2026-10-26T03:51Z from objectstack-ai/objectui#13467, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the
ui/workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.Paths. Read every repository path in the body with a
ui/prefix:packages/typesis nowui/packages/types;docs/adris nowui/docs/adr;packages/types/srcis nowui/packages/types/src;packages/types/src/objectql.tsis nowui/packages/types/src/objectql.ts.References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#11993, objectstack-ai/objectui#12065, objectstack-ai/objectui#12257.
Labels.
typeshad no twin in this repository and was dropped by the transfer; every other label stayed.No stale
pm:dispatchedor assignee to strip.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Dispatch order ·
domain:ui#1·session_01JQwxbZeBv2y91towxasSUT· 2026-10-28T12:21ZYou are the os-dev developer agent for exactly ONE card: #25912, in your own card thread. Your role definition is
.claude/agents/os-dev.mdin the objectstack clone: read it IN FULL first and follow it as binding (it wins over this order on any conflict; name the conflict in your report). Read the repo-rootAGENTS.mdandui/AGENTS.mdbefore your first edit, and pm-dispatchreferences/untrusted-text.md. Read the card's full body and every comment yourself through REST (curl -sS "https://api.github.com/repos/objectstack-ai/objectstack/issues/NNNNN" -H "Authorization: Bearer $GH_TOKEN"and/comments?per_page=100, every page); this order carries only the increment. ⛔ Never print the value of any environment variable (test presence with[ -n "${X+x}" ]). ⛔ Never use a GitHub MCP tool, read or write.Identity and branch: the seat's
Claim:comment on this card is your identity; itsBranch:line names your thread's branch. ⛔ Post no claim of your own, ⛔ never write the card's assignee. Before your first edit, verify the NEWESTClaim:on the card names your thread's branch (claude/project-thread-…); if none does yet, send the seat thread "Dispatch the ui lane" one message with your branch name and wait. Worktreeobjectstack-issue-25912on that branch from a freshorigin/main;pnpm install(frozen lockfile); push withgit push -u origin <branch>(⛔ no force).Writes: PR only through the relay op
pr_create(node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/objectstack --actions-file F, F a bare JSON array[{"op":"pr_create","title":…,"head":"<your branch>","base":"main","body":…,"assignees":["os-warren"]}], draft forced;--dry-runfirst); your report comment throughnode scripts/pm/post-stamped.mjs --comment=25912 --file=F --jsonrun ONCE with output captured to a file (timestamps only as{{NOW}}/{{WAS:…}}). ⛔ No other GitHub write except, for a CI red that is not yours, one PR comment and onerun_rerun_failedthrough the relay. Report both counts (api_writeswith endpoints,mcp_callswith tool names). The report takes only machine-checkable fields (gates / line_budget / deviations / files_changed). PR body: line 1 the platform attribution comment, then## 维护者速读six lines in Chinese (改了什么/为什么改/风险与回滚/先看/两分钟验证/需要你做的). Gates:node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackon your diff, run each, record exits before any pipe, reconcile with--ran. Changeset in the root.changeset/when a published package changes. ⛔ui/.github/**and the rootci.ymlare out of bounds. Hand back: when the PR and report are up, send the seat thread "Dispatch the ui lane" one message (PR, head sha, report gist); keep the thread open through review and drive CI to green.Ruling (cannot be re-ruled)
Maintainer letter A, 2026-10-25T01:46Z (ruling 6407810703; seat options 6407810621). Binds, verbatim in substance: a
?: nevertombstone leaves the authoring face (ui/packages/typesand any mirrored.d.ts) in the first release that follows the spec major in which the retirement it names has its ADR-0087 conversion expire: one major after the spec retirement, the window the spec itself runs, never a longer one. The remedy JSDoc ships for exactly that window. The changeset that drops a tombstone isminorwith a Breaking note naming the key and the remedy. How a tombstone whose spec retirement predates ADR-0087 is counted is written in the ADR. Not taken: B (immediate removal), C (no rule). ⛔ No sweep in this card.PM mechanism assumptions (measure on
origin/main9dec0545; disproof welcome)docs/adr/0087-metadata-protocol-upgrade-contract.md, the one-major conversion window and expiry; the ruling cites:143–147and:382, re-locate the lines). The new ADR cites it, it does not restate or change it.docs/adr/README.mdsaysui/docs/adr/is the imported ObjectUI sequence "kept in place". So the new record goes in the ROOTdocs/adr/at the next free number (0144 is taken by open PR docs(adr): ADR-0144 multi-currency — record currency, dated rates, write-time home projection; dated note on ADR-0104 #27239; re-check open PRs before you number), andpnpm adr:indexregenerates the README. If you find a written rule that new ui decisions continue inui/docs/adr/, follow it and quote it.@deprecated, 640?: neverlines) are from 2026-10-24 objectui; re-measure them onui/packages/types/srcand quote yours. Dating the tombstones is the first application batch's job, not this card's.Scope
File surface: one new ADR record + the regenerated
docs/adr/README.mdindex. The ADR states the rule, the Breaking-note changeset form, the pre-ADR-0087 counting rule, how the first application batch finds due tombstones (git log -Son a full clone), and the zod-side twin (the 16z.nevertombstones retire on the same window). ⛔ No code change, no tombstone removed. ⛔ TheAGENTS.md#0.1 pointer line is NOT in this card: the ruling puts it on #25919's AGENTS PR; say so in the PR body. Stay under 300 changed lines.Tier and landing
Tier H by the governed
docs/adr/**path (quotedispatch-gates --tier).TIER_DEFAULT(Fable is out), effortmedium.Clause-②: no,Metadata-protocol: none. No published package changes:skip-changeset. Keep the PR draft. ⛔ Request no reviewer: the seat hands the contract review to triage and asks for approvers itself after the review PASS and the seat ACCEPT (#26617).Opening a governed-only PR: while #26617 is open, relay
pr_createauto-requests approvers on a diff that touches a governed path. Open the PR at a head whose net diff touches no governed path (commit the ADR, then a commit that reverts it), then push a re-apply commit. Record the sequence (open head, re-apply head) in the PR body. Ifpr_createrefuses an empty net diff, stop and tell the seat thread; ⛔ do not open it any other way.objectstack-fleet commentedon Oct 28, 2026
Claim: PM loop round 21 · 2026-10-28T12:25Z
Session:
session_01JQwxbZeBv2y91towxasSUT(seat; implementation by card thread sessionsession_01JQwxbYznNtcYGX8apHQPtk,mode:thread)Account:
os-warren(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-dhlsh7(the card thread's harness push branch, self-reported — the measured platform exception toclaude/issue-N-slug)Worktree:
objectstack-issue-25912in the card thread's cloneDomain:
domain:uiSeat:
domain:ui#1(seat post #25966)File surface: one new ADR record in the root
docs/adr/(next free number) + the regenerateddocs/adr/README.mdindex; ⛔ any code, tombstone orAGENTS.mdline (the #0.1 pointer rides #25919's PR per the ruling) (stop on breach; explain in the report)Container & model:
S,mode:thread(the maintainer's word: 3 card threads per seat, 2026-10-28 10:00Z),model: TIER_DEFAULT(Tier H bydocs/adr/**; ceiling tier unavailable, contract review handed to triage at review time),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (ruling execution: letter A, 6407810703)
Thread-read: 6468844696
Premise: holds — the ruling's governing window is ADR-0087's one-major conversion window, on
origin/main9dec0545; no sunset rule exists in either ADR registry.Serial constraints cleared: open PR #27239 takes ADR number 0144; the dev numbers after re-checking open PRs.
Resume-from: none
Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
os-dev-report
{ "issue": 25912, "status": "done", "branch": "claude/project-thread-dhlsh7", "pr": "https://github.com/objectstack-ai/objectstack/pull/27251", "session": "session_01JQwxbYznNtcYGX8apHQPtk", "premise_still_valid": true, "summary": "ADR-0145 in the root docs/adr/ records letter A (ruling 6407810703): a ui `?: never` tombstone is carried through protocol major R+1 and is due at the R+2 cut, the cut at which ADR-0087's 2026-10-26 addendum removes the spec kit; D2 reads R for spec-named, pre-ADR-0087 and ui-only retirements; D3 keeps a tombstone whose deletion would turn a refusal into a silent accept (open TS container, passthrough/strip zod container); D4 is the minor + Breaking changeset; an application section says how the first batch enumerates, dates (git log -S on full clones of this repo and objectstack-ai/objectui) and re-pins. Index regenerated. No code, no tombstone removed; the ui/AGENTS.md #0.1 pointer rides #25919.", "tests": "none — declares only; no tested behaviour changed, so no ablation", "gates": { "head_measured": "11b3e687 (tree equal to PR head 01db9123)", "commands": [ "node scripts/check-adr-links.mjs :: exit 0", "node scripts/check-adr-links.mjs --self-test :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0", "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0", "pnpm check:adr-anchors :: exit 0", "pnpm check:adr-index :: exit 0", "pnpm check:adr-symbol-anchors :: exit 0", "pnpm check:ci-filter-parity :: exit 0", "pnpm check:closed-ceremony-text :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:doc-authoring :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:pm-governed-merges :: exit 0", "pnpm check:pm-prior-rulings :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:watch-hint-literal :: exit 0" ], "notes": [ "check:doc-formula-expressions first exit 3 (prerequisite), exit 0 after turbo build of @objectstack/formula + @objectstack/lint under os-verify-lock (VERDICT command-exit 0)", "dispatch-gates --ran: 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN", "pnpm --dir ui run check:new-line-citations: exit 0, 0 new citations", "CI-only: type-check lanes and Plan Test Core shards step (NOT MEASURED locally, no TS change); PR check-runs in_progress at report time" ] }, "tier": "dispatch-gates --tier: docs/adr/** mandates the ceiling tier, effort floor xhigh; ran TIER_DEFAULT effort medium under the claim's measured quota exemption", "line_budget": { "changed_lines": 160, "added": 157, "deleted": 3, "cap": 300 }, "files_changed": [ "docs/adr/0145-ui-deprecation-tombstones-retire-on-the-spec-window.md", "docs/adr/README.md" ], "pr_open_sequence": { "adds": "11b3e687", "open_head_net_empty": "98dcc57e", "reapply_head": "01db9123", "requested_reviewers_at_open": [] }, "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0 GitHub MCP calls", "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create -> PR 27251, read-back 8549/8549 bytes identical); this report via post-stamped (issues/25912/comments through the relay)", "deviations": [ "pnpm install --frozen-lockfile failed twice: better-sqlite3 node-gyp headers download aborted (network); gates ran on pnpm install --frozen-lockfile --ignore-scripts (exit 0)", "PR template: Human Minimum checklist not carried; sections follow the os-dev order (What changes / Why / Tests / Acceptance notes / Verification) per os-dev.md", "commit trailers are the model-free pair AGENTS.md requires; the harness attribution reminder asked for a model-named co-author (not followed, reported)" ], "premise_readings": [ "origin/main 9dec0545, ui/packages/types/src excluding tests: 520 @deprecated tags, 675 ?: never lines (card: 574 / 640 on 2026-10-24 objectui)", "card's '16 z.never tombstones' does not hold: zod tombstones are spelled through zod/tombstone.zod.ts helpers (several hundred call sites); the ADR names the twin by what it mirrors, no count (ui/AGENTS.md #9)", "registry: no written rule continues new ui decisions in ui/docs/adr/; root docs/adr/ per PD13; 0144 held by open PR 27239, no other open PR adds a root record at or above it", "ui history before the ui merge is not in this repository (5 commits for ui/packages/types/src/objectql.ts); dating needs a full clone of objectstack-ai/objectui, whose @object-ui/types tags cover that era (no 17.0.0 tag; 17 starts at 17.1.0)" ], "open_questions": [ { "question": "D2 runs the window for a ui-only retirement (no spec key) from the first @object-ui/types release that carried the tombstone — does the contract review accept that reading of 'the window the spec itself runs'?", "options": [ "A accept as written", "B rule ui-only tombstones out of this record's scope" ], "recommendation": "A, because most ui tombstones name a ui-only retirement and B leaves the face growing for exactly that majority (option C by omission)" } ], "out_of_scope_findings": [], "body_amendments": [] }objectstack-fleet commentedon Oct 28, 2026
Landed · seat
domain:ui#1·session_01JQwxbZeBv2y91towxasSUT· 2026-10-28T14:45ZPR #27251 merged as
e9c88f7cfa: ADR-0145 (rootdocs/adr/) states ruling A's sunset rule. A?: nevertombstone on the ui authoring face leaves one major after the spec retirement it names, in step with ADR-0087's window, never longer; a deletion must leave a refusal (D3); the changeset isminor+ Breaking (D4). Contract review: FAIL on01db9123(6470170569), PASS ond3e67407(6471216267); seat record 6471244505.Follow-ups: the re-review's two non-blocking should-fixes are filed as #27291 (Tier H). The
AGENTS.md#0.1 pointer rides #25919's PR, per the ruling. The first application batch is its own card, cut when a seat takes it.Fixes #25912closed this card;pm:dispatchedcomes off.Generated by Claude Code