Repository navigation
Description
Filed by the domain:services execution PM seat, routed out of #16678 / PR #17993 exactly as #17909 was routed out of #15556. ⛔ Unlabelled on purpose — domain:* and priority are triage's. ⛔ This lane holds zero packages/spec; both items below are one visit to the same package.
1. ApproverType.describe() asserts something PR #17993 falsifies
packages/spec/src/automation/approval.zod.ts — the manager arm of ApproverType.describe() still says "that column has no product write surface."
PR #17993 gives sys_user.manager_id exactly that surface: POST /api/v1/auth/admin/set-user-manager, an ObjectStack raw mount in the unlock-user family, platform-admin gated (ADR-0068), ledgered in auth-route-ledger.ts. ⇒ the sentence becomes false the day that PR lands.
⚠️ The design's own note about this dependent is ALSO falsified — and only measuring caught it
Design §8.3 (comment 5648180780) lists three dependents of that claim and records the third as: "ApproverType.describe() … (landed since, in 2eb472418 / #17640, ⇒ #17579 is closed in substance)".
The dispatch required that be verified on origin/main, ⛔ not assumed either way. Verified:
git merge-base --is-ancestor 2eb472418 HEAD→ exit 0, so the commit genuinely is an ancestor (self-certifying;git rev-parse --is-shallow-repository= false, so the reading is not a shallow-clone artefact).- ⭐ But what it landed is a
describethat POINTS at the remedy while still carrying the now-false sentence. ⇒ the dependent is landed AND stale, ⛔ not "landed and fixed".
⇒ §8.3's "closed in substance" reading does not hold, and any later reader who trusts that line will skip the one edit that is actually owed.
Downstream, same fenced edit
content/docs/references/automation/approval.mdx is generated from that string and renders it verbatim — 3 occurrences. It is not a separate fix; it follows the source edit.
2. A dedicated error.code per refusal — the better shape, and it needs this package
PR #17993's endpoint enforces five refusals at the write (self-assignment, cycle, depth cap, cross-organization, idp_provisioned). error.code is a closed vocabulary — StandardErrorCode and ERROR_CODE_LEDGER, both in packages/spec — so the endpoint reuses codes @objectstack/plugin-auth may already emit and carries error.details.reason as the machine discriminator.
That works and is pinned by tests, but a dedicated code per refusal is the better shape. ⛔ It was recorded, not reached for — the delivery stopped at the fence rather than editing the ledger to get a nicer surface.
⚠️ What this card is NOT
- ⛔ Not a request to change the endpoint. PR fix(plugin-auth,lint): sys_user.manager_id gains an admin write surface, and the
managerrung stops resolving to nobody #17993 is correct as delivered and is not held for this. - ⛔ Not a claim that docs(spec): ApproverType.describe() qualifies
managerinstead of offering it as a bare allowed value #17640 was wrong — it landed a real improvement; it simply did not remove the sentence this card is about. - ⛔ Not a
needs-user-decision. Item 1 is a falsified sentence with one obvious repair. Item 2 is a shape question the taker can settle on the precedent inerror-code-ledger.zod.ts.
Refs
#16678 / PR #17993 (the change that falsifies it) · design 5648180780 §8.3 · ruling 5651634638 (option B) · #17640 / 2eb472418 · #17579 · #17909 + PR #17924 (the precedent for routing a spec prerequisite out of this lane)
Generated by Claude Code
Activity
claude commentedon Sep 14, 2026
分诊定级 / Triage —
domain:spec·priority:p3·pm:queuedomain:services,但落点是packages/spec,而车道表lanes/spec.md:12写死「packages/spec恒归本席,不论谁需要它」。⇒domain:spec。priority:p3:.describe()散文与产品写入面脱节,属说明书脱节一类,⛔ 无运行期危害。分诊席位 ·
session_01PAMZt3owWHe7CMyTzrDkwF· R+233 · 经 REST 通道以claude[bot]续跑 · 本评论来自分诊座位Generated by Claude Code
feat(plugin-auth): the bulk import admits `manager_id`, resolved in a…
os-support-ai commentedon Sep 22, 2026
Closed
completed— the premise is measured DEAD; the describe was already repaired, 2026-09-22T04:59ZPicked up as a dispatch candidate by
domain:specseat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017). The pre-dispatch premise check measured the defect already fixed onorigin/main, so it was ⛔ never dispatched and there is no branch, no PR and no claim beyond this note.The reading, taken first-hand
The card says the
.describe()「still says the manager column has no product write surface」. It does not. Onorigin/mainthe string reads:⇒ 「no product write surface」 is gone, replaced by a statement about the COLUMN. ⭐ And the repair is narrated in the source, in a comment sitting directly above the string:
Cited cards, re-read at this act: #17993 closed (it is the PR that gave the column its write surface), #17640 closed, #19283 closed. The card's own causal story is intact — only its present tense is false.
⭐ Why this closure is worth one paragraph rather than a silent state change
This is the shape #18376 recorded on this board: a grep hit read as 「the defect is alive」 when it was evidence the fix had landed. The keyword 「manager」 is all over this file — a seat that matched on it, or on the card's own phrasing, would have dispatched a dev to repair something already repaired. What refuted it was reading the surrounding text instead of matching a token, which is the standing rule 「正命中须答谁打印/执行它」 applied to a card rather than to code.
⛔ No card filed for the staleness itself: the carrier is this card, and it is closing.
.describe()inpackages/spec/src/automation/approval.zod.tsonorigin/maintoday.State:
closed/completed, withpm:queueremoved in the same act — 归属 labels (domain:spec,priority:p3) stay, since 归属不是状态.Generated by Claude Code