You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
content/docs/capabilities/approvals.mdx sells "a shared queue (first responder claims it)" as one of eight shipped approver styles — the runtime refuses queue and the slot resolves to nobody #17573
Found while landing #16678 (qualifying the manager approver on the same two pages). It is a second, independent false claim on the same line, with the same harm shape, and it is not#16678's scope — that card is about manager.
The claim
content/docs/capabilities/approvals.mdx — the page a buyer or a new author reads first:
frontmatter description: "Eight ways to pick approvers, …"
:9 heading: ## Who approves — eight resolution styles
:11, the eighth item in the list: "· a shared queue (first responder claims it)."
Nothing on that page qualifies it.
The measurement, on origin/mainf721ef0ff
The runtime does not implement it, and says so in its own voice:
packages/plugins/plugin-approvals/src/approval-service.ts:1714 if (type === 'queue') {
packages/plugins/plugin-approvals/src/approval-service.ts:1716 `[approvals] approver type 'queue' is not implemented — the slot resolves to nobody (#3508)`
Firing control, same file, same scan shape: 'position' → 4 hits, so the grep discriminates and the two 'queue' hits are a reading rather than an artefact.
The spec grades it the same way:
packages/spec/src/automation/approval.zod.ts:178 queue: { source: 'unsupported' },
packages/spec/src/automation/approval.zod.ts:278 queue: false,
packages/spec/src/automation/approval.zod.ts:96 `queue`, declared-but-unenforced in the runtime (#3508) — offering it
And the developer page already carries the correct sentence, which is what makes the capability page's silence a drift rather than an open question — content/docs/automation/approvals.mdx:
queue still parses so stored flows keep loading, but it is not implemented by the runtime and is no longer offered for authoring (#3508) — a queue entry resolves to nobody. Route to a team, department, or position instead.
Why this is a defect and not a doc nit
An author who takes the capability page at its word and writes { type: 'queue' } gets a node that parses, passes validate, passes lint, and then opens its first request with an empty pending_approvers — and with the default lockRecord: true the record is locked behind it. That is the same stranded-record failure #3424 and #16678 describe, reached by copying a sentence this repo publishes. The page also states a count ("Eight ways", "eight resolution styles") that the runtime does not back.
Acceptance
The capability page no longer offers queue as a shipped style without qualification. Either route works and the choice is editorial, so it is stated here rather than assumed: drop the item and correct the count in both the ## Who approves heading and the frontmatter description, or keep it and qualify it in place the way the developer page does.
⛔ The count is not left at "eight" while one of the eight is withdrawn — the heading and the description move together with the list, or the gates read fine while the page still misleads.
#16678's declared file surface does include this page, and the in-place-fix exemption was checked against it and declined on one limb: the fix is not mechanical. It changes a buyer-facing page's headline count and its frontmatter description, which is an editorial decision about the page's framing rather than a forced repair with a pinned shape. #16678's PR therefore words its own addition so that it asserts nothing about the other styles or their number, leaving this claim exactly as it found it.
Successor: the docs/capability-page owner — whichever seat owns content/docs/capabilities/**. No one is carrying it today; it is filed unassigned and unlabelled so triage grades and lanes it.
Related: #16678 (the manager half of the same line, in flight) · #16748 (closed; the lint rule that now warns on manager-only slates) · #3508 (queue not implemented) · #3424 (closed; the empty-slate dead-end this failure shape belongs to).
Filed by the domain:services os-dev agent while landing #16678, via Claude Code, session session_01ToDPcx9AESFubJkDiFMtKW.
Found while landing #16678 (qualifying the
managerapprover on the same two pages). It is a second, independent false claim on the same line, with the same harm shape, and it is not #16678's scope — that card is aboutmanager.The claim
content/docs/capabilities/approvals.mdx— the page a buyer or a new author reads first:description: "Eight ways to pick approvers, …":9heading:## Who approves — eight resolution styles:11, the eighth item in the list: "· a shared queue (first responder claims it)."Nothing on that page qualifies it.
The measurement, on
origin/mainf721ef0ffThe runtime does not implement it, and says so in its own voice:
Firing control, same file, same scan shape:
'position'→ 4 hits, so the grep discriminates and the two'queue'hits are a reading rather than an artefact.The spec grades it the same way:
And the developer page already carries the correct sentence, which is what makes the capability page's silence a drift rather than an open question —
content/docs/automation/approvals.mdx:Why this is a defect and not a doc nit
An author who takes the capability page at its word and writes
{ type: 'queue' }gets a node that parses, passesvalidate, passeslint, and then opens its first request with an emptypending_approvers— and with the defaultlockRecord: truethe record is locked behind it. That is the same stranded-record failure #3424 and #16678 describe, reached by copying a sentence this repo publishes. The page also states a count ("Eight ways", "eight resolution styles") that the runtime does not back.Acceptance
queueas a shipped style without qualification. Either route works and the choice is editorial, so it is stated here rather than assumed: drop the item and correct the count in both the## Who approvesheading and the frontmatterdescription, or keep it and qualify it in place the way the developer page does.descriptionmove together with the list, or the gates read fine while the page still misleads.{ type: 'manager' }resolves a column no product surface can write:sys_user.manager_idis refused by the data API and absent from the auth admin endpoints #16678 andapproval-approvers-may-resolve-emptycoverspositionand notmanager— the rung whose column no product surface can write is the one the rule stays silent on #16748 carry between them.queueshould be implemented. 审批节点「处理人 Value」应改为记录 lookup(现查 metadata 端点→只能手填);附 approver value 语义核实 + queue 未实现 #3508 owns that question and this card is satisfied either way; it is about the page describing what ships today.Why it was not fixed inside #16678's PR
#16678's declared file surface does include this page, and the in-place-fix exemption was checked against it and declined on one limb: the fix is not mechanical. It changes a buyer-facing page's headline count and its frontmatter
description, which is an editorial decision about the page's framing rather than a forced repair with a pinned shape. #16678's PR therefore words its own addition so that it asserts nothing about the other styles or their number, leaving this claim exactly as it found it.Successor: the docs/capability-page owner — whichever seat owns
content/docs/capabilities/**. No one is carrying it today; it is filed unassigned and unlabelled so triage grades and lanes it.Related: #16678 (the
managerhalf of the same line, in flight) · #16748 (closed; the lint rule that now warns on manager-only slates) · #3508 (queuenot implemented) · #3424 (closed; the empty-slate dead-end this failure shape belongs to).Filed by the
domain:servicesos-dev agent while landing #16678, via Claude Code, sessionsession_01ToDPcx9AESFubJkDiFMtKW.