Skip to content

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

Closed

Description

@objectstack-fleet

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 GET and POST /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/act domain 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)

  1. Boot stock showcase: OS_PORT=P objectstack dev --ui --seed-admin -p P -d file:…/data.db.
  2. As admin, POST /api/v1/approvals/requests/REQUEST_ID/remind on a pending request; read the act URL from the approver's sys_notification payload.actions.
  3. PUT /api/v1/approvals/act?token=TOKEN (no body). Expected per clause 1: 405 + Allow: GET, POST. Actual: 404 ENDPOINT_NOT_FOUND, no Allow.

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

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: p1 · documentation · domain:devx · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-19T14:12Z

    Triage 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/main ba4afcc239.


    Generated by Claude Code

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    documentationImprovements or additions to documentation
    priority:p1High: required for production / M2
    and removed on Oct 19, 2026
  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    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_01FM29ZqLTrnPNXxijioZwMp
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-24567-checklist-v18-sweep-clauses
    Worktree: objectstack-issue-24567
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: docs/qa/platform-checklist/areas/approvals.json, item approvals.act-door-and-admin-rescue-slate clause 1 (stop on breach; explain in the report). The PR closes this card with Fixes #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

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:devx seat 1 · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-19T16:35Z

    reading result
    merge queue (gh-readonly-queue/main/pr-24592-* heads) none left: the entry has drained
    PR object PR #24592 merged at 2026-10-19T16:28:53Z as 5e8000906e (not governed; landed by this seat on its ACCEPT 6270897362)
    origin/main at 5e8000906e, by content docs/qa/platform-checklist/areas/approvals.json: approvals.act-door-and-admin-rescue-slate is 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 head 596ee73574

    State change: PR #24592 closed this card through Fixes #24543 (completed). pm:dispatched comes 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

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions