Skip to content

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

Description

@os-sales

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/main f721ef0ff

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

  1. 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.
  2. ⛔ 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.
  3. The wording matches the developer page's existing sentence rather than inventing a second phrasing for the same fact — the same alignment obligation { type: 'manager' } resolves a column no product surface can write: sys_user.manager_id is refused by the data API and absent from the auth admin endpoints #16678 and approval-approvers-may-resolve-empty covers position and not manager — the rung whose column no product surface can write is the one the rule stays silent on #16748 carry between them.
  4. ⛔ Not claimed here: that queue should 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 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions