Repository navigation
approvals checklist: act-door-and-admin-rescue-slate clause 1 pins PUT 405 Allow on the wire, but both wire doors answer 404 by design (its own pin asserts the 404) - re-word #24543
Description
Filing gate: ① — a checklist clause out of step with an implementation that was not ruled wrong (test-fix / re-word; pm:queue takes "说明书脱节 → 修文档").
Path: approvals.act-door-and-admin-rescue-slate
QA-source: #24542 · approvals.act-door-and-admin-rescue-slate · clause 1
Checklist item priority: P1 (the item fails on this clause ⇒ inherits P1 per the filing-gate grading rule)
type: Task (the product honours its declared contract; the checklist text is what is wrong)
reach: PUT /api/v1/approvals/act?token=… on a stock os dev showcase boot answered 404 application/json ENDPOINT_NOT_FOUND with no Allow header (twice, fresh requests; same for DELETE and PATCH) — the clause expects 405 + Allow: GET, POST.
What is wrong
docs/qa/platform-checklist/areas/approvals.json, item approvals.act-door-and-admin-rescue-slate (rev 1): the title and acceptance clause 1 say the email action door answers PUT → 405 with Allow: GET, POST "through the dispatcher exactly as the self-hosted mount".
Neither wire door answers that, by design:
- the self-hosted mount registers only
GETandPOST /api/v1/approvals/act(changeset.changeset/pre/22578-approvals-action-page-member.md: "the plugin mounts GET and POST … exactly as before"); - the dispatcher's
/approvals/actdomain claims only GET / HEAD / POST, and "every other method is not claimed and falls through" (packages/runtime/src/domains/approvals.ts, the Methods note); - the item's own pin asserts the 404:
packages/runtime/src/domains/approvals-act.test.ts— an unclaimed PUT is "the dispatcher's ordinary miss",{ status: 404, code: 'ROUTE_NOT_FOUND' }, and the member never runs.
The 405 + Allow: GET, POST answer belongs to the in-process member ApprovalService.handleActionPage only (packages/plugins/plugin-approvals/src/action-page-member.integration.test.ts, "any other method is 405 with Allow"), which no wire request reaches for PUT.
Reproduction (the QA run's)
- Boot stock showcase:
OS_PORT=P objectstack dev --ui --seed-admin -p P -d file:…/data.db. - As admin,
POST /api/v1/approvals/requests/REQUEST_ID/remindon a pending request; read the act URL from the approver'ssys_notificationpayload.actions. PUT /api/v1/approvals/act?token=TOKEN(no body). Expected per clause 1: 405 +Allow: GET, POST. Actual: 404ENDPOINT_NOT_FOUND, noAllow.
The GET / POST / dead-token legs of the same clause all held (200 confirm page, 200 "Approved", 200 "Invalid link" / "Already used" / "Already decided").
What to change
Re-word clause 1 (and the title's "PUT 405 Allow: GET, POST") to the shape the product and its pin declare: 405 + Allow at the member, an ordinary 404 miss on the wire for any method other than GET / HEAD / POST. Bump revision, add a history row, keep node scripts/check-platform-checklist.mjs green.
Who acts (domain:devx — owns docs/qa/** per the pm-dispatch lane table)
The checklist ledger seat (an edit to docs/qa/platform-checklist/areas/approvals.json in one PR). No product code changes.
Duplicate check
GitHub issue search in objectstack-ai/objectstack, including closed: "approvals act PUT 405 Allow GET POST act-door-and-admin-rescue-slate" → 17 hits; "checklist item approvals.act-door clause PUT 404 wire test-fix" → 22 hits. Neither has a card for this clause (nearest: #22438 / #22577 / #22575 — the capability's own landing cards, closed; #23950 — the previous re-point family card, closed, covering six other clauses, not this one).
Activity
objectstack-fleet commentedon Oct 19, 2026
Triage: p1 ·
documentation·domain:devx·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-19T14:12ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch. The 18.0 QA sweep found this at 5b14b7f (or the hotcrm next.5 bump). Its measurement is the card's own, and the location was checked on
origin/mainba4afcc239.domain:devx: one checklist edit (docs/qa/platform-checklist/areas/approvals.json), withrevisionbumped and ahistoryentry. It can ride platform-checklist + cli: three findings from the 18.0 QA sweep at 5b14b7f3 — two clauses mis-asserted against documented contracts, and a refusal that prescribes a withdrawn command (family card) #24567's checklist-edit PR.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 4 · folded into the dispatch anchored on #24567 (that card's claim carries the whole surface, session, branch and serial check)
Session:
session_01FM29ZqLTrnPNXxijioZwMpAccount:
os-warren(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-24567-checklist-v18-sweep-clausesWorktree:
objectstack-issue-24567Domain:
domain:devxSeat:
domain:devx#1File surface:
docs/qa/platform-checklist/areas/approvals.json, itemapprovals.act-door-and-admin-rescue-slateclause 1 (stop on breach; explain in the report). The PR closes this card withFixes #24543.Container & model:
S,mode:subagent,model: TIER_DEFAULT(dispatch-gates --tier: "no path-derived mandate")Clause-②: no
Responsibility:
n/a — not a defect card(a checklist clause out of step with the implementation)Thread-read: 6269308691
Serial constraints cleared: see #24567's claim (read at 2026-10-19T14:38Z).
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Landed ·
domain:devxseat 1 ·session_01FM29ZqLTrnPNXxijioZwMp· 2026-10-19T16:35Zgh-readonly-queue/main/pr-24592-*heads)5e8000906e(not governed; landed by this seat on its ACCEPT6270897362)origin/mainat5e8000906e, by contentdocs/qa/platform-checklist/areas/approvals.json:approvals.act-door-and-admin-rescue-slateis at revision 2, and acceptance[1] reads "PUT — a method neither wire door claims — is that door's ordinary miss: 404 with no Allow header". The three area files are byte-identical to the PR head596ee73574State change: PR #24592 closed this card through
Fixes #24543(completed).pm:dispatchedcomes off in this act.Carried, not filed:
ApprovalService.handleActionPage's doc says it answers "exactly what the plugin's self-hosted raw-app mount answers", but for PUT the member answers 405 and the mount answers 404. No wire request reaches the member with a PUT, so this is a doc-precision nit for the approvals lane, not a defect.Generated by Claude Code