Skip to content

QA run · approvals.approver-resolution-matrix (1/1) · fb82f9b1 · 2026-10-16 · 1 PASS / 0 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #23997

Closed

Description

@objectstack-fleet

Run record for the re-run #23950 asks for, after its six stale clauses were re-pointed. Runner: an os-dev subagent dispatched by the domain:devx seat 2 PM (session session_016PVjjuVPte5XEJvaQx1E4t). Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md. Executed sequentially (no subagent tool in this runner).

Environment fingerprint

  • framework: fb82f9b180bcc6af04ce8d36153fd52d2eb6845c, the tip of branch claude/issue-23950-checklist-stale-clauses at run time. Its product tree is origin/main 022c6e799; the branch adds docs/qa/platform-checklist/areas/*.json only. Built with pnpm install --frozen-lockfile && pnpm build (75/75 tasks green).
  • .objectui-sha: daeb77fc84dd824e74c95b87cdede85afdb248e7 (API-only item).
  • boot: OS_PORT=47312 objectstack dev --ui --seed-admin -p 47312 -d file:(run dir)/appr/data.db from examples/app-showcase.
  • identities: the dev admin, who owns the organization; Ada Auditor (usr_showcase_auditor_demo) and Mei Phone (usr_showcase_phone_demo) from the seeded demo personas.
  • directory rows, written through the doors the revised fixtures name: POST /api/v1/auth/admin/set-user-manager (admin to Mei) 200; POST /api/v1/auth/organization/create-team 200, then add-team-member for Mei and Ada, 200 each (sys_team_member reads back both); POST /api/v1/data/sys_business_unit_member for Mei in bu_field_ops and Ada in its descendant bu_west_coast, 201 each. The controls for the doors the fixtures retired: data-API PATCH sys_user.manager_id answers 403 (manager_id not editable via the data API, ADR-0092), and data-API POST sys_team answers 405 OBJECT_API_METHOD_NOT_ALLOWED.
  • flows: one scratch active autolaunched flow per leg, qa_appr_LEG, triggered by a showcase_field_zoo create whose name starts qa_LEG_. Requests are matched by record id AND process_name flow:qa_appr_LEG.
  • timestamps: 2026-10-16, 16:34Z to 16:39Z.

Scope

Selector approvals.approver-resolution-matrix resolves to 1 runnable item: approvals.approver-resolution-matrix at revision 3, P1, surface api. The item text was read at branch head c4bf2ba4e. No pin is declared. The supporting suite pnpm --filter @objectstack/plugin-approvals exec vitest run --maxWorkers=2 src/admin-rescue-named-slate.integration.test.ts passed 11 of 11.

Who the organization's administrators are: of the organization's three sys_member rows (admin owner, Ada member, Mei member), only the admin's resolved permission sets hold an organization-admin grant (organization_admin_no_bypass, read via GET /api/v1/security/explain?userId=…). So the administrators' slate is exactly the admin.

Per-clause verdicts

item # clause (short) verdict evidence
approvals.approver-resolution-matrix 0 each type resolves the slate it declares pass pending_approvers: user Ada → [Ada]; field f_users = [Ada, Mei] → [Ada, Mei]; manager → [Mei], the submitter's manager; team → [Ada, Mei]; department bu_field_ops → [Ada, Mei]; org_membership_level owner → [admin]; position manager → [admin], the position's only holder; expression current.created_by → [admin]. Every request is pending
approvals.approver-resolution-matrix 1 department = unit + every active descendant pass parent bu_field_ops slate [Ada, Mei], where Ada is a member only of the descendant bu_west_coast; after PATCH sys_business_unit/bu_west_coast {active: false} a re-trigger opens on [Mei]; the unit was re-activated afterwards
approvals.approver-resolution-matrix 2 multi-value field fans out per id pass two entries [usr_showcase_auditor_demo, usr_showcase_phone_demo], never one comma-joined literal; __resolvedFrom {"field:f_users": [both ids]}
approvals.approver-resolution-matrix 3 deprecated role warns and resolves like org_membership_level pass WARN [approvals] approver type 'role' is deprecated (ADR-0090 D3) — author 'org_membership_level' instead; role owner slate [admin] = org_membership_level owner slate [admin] on the same org
approvals.approver-resolution-matrix 4 empty-slate fork per policy; admin_rescue opens on the administrators pass admin_rescue (key absent, and declared): pending, pending_approvers [admin], with no position:qa_nobody entry; __resolvedFrom {"admin_rescue:abandoned": ["position:qa_nobody"], "admin_rescue:reason": "position 'qa_nobody' has no holder"}; the actions carry one comment with null actor, Routed to this organization's administrators because the approver slate named no one: position 'qa_nobody' has no holder.; WARN … resolved to no concrete approver (position 'qa_nobody' has no holder) — opening on this organization's administrators per onEmptyApprovers: 'admin_rescue'. …. fail: no request from the flow, run failed, NO_APPROVERS: approval node 'review' … its onEmptyApprovers policy is 'fail'. auto_approve: no request from the flow, run completed down the approve edge (an update_record there wrote approve edge: decision=approve autoApproved=true, read back from review.decision / review.autoApproved), WARN … auto-approving per onEmptyApprovers: 'auto_approve' (no request opened). fallback to Mei: pending [Mei], no literal slot, WARN … opening on the declared fallbackApprovers per onEmptyApprovers: 'fallback'. fallback to nobody: WARN … AND its declared fallbackApprovers resolved to nobody either — falling back to admin_rescue, request on [admin] with reason …; the declared fallbackApprovers resolved to no one either
approvals.approver-resolution-matrix 5 queue: dead slot, loud, never a fake approval pass WARN [approvals] approver type 'queue' is not implemented — the slot resolves to nobody, …; request pending, pending_approvers [admin] with no queue:support entry; __resolvedFrom {"admin_rescue:abandoned": ["queue:support"], "admin_rescue:reason": "queue 'support' resolved to no one"}; the routed-to-administrators comment is on its actions

Each graph expansion to nobody (position:qa_nobody, position:qa_nobody2) carried the … expanded to nobody — the slot names no one … warn that names its type and value.

Derived item verdict

approvals.approver-resolution-matrix r3: pass (6 of 6 clauses).

Fixture note: the stock showcase flow showcase_approver_bindings is status: 'draft' and triggers on showcase_field_zoo record-after-update. Draft flows still fire their triggers (the automation plugin says so at boot), so the auto_approve leg's approve-edge update_record fired it. It opened its own admin_rescue request (flow:showcase_approver_bindings, node by_user) on the same record. Matching requests by process_name keeps it out of every verdict above. The flow's docblock says draft keeps it out of the runtime. That defect is handed to the dispatching seat for its own card.

Timing: about 5 minutes of legs, on the build shared across this re-run's five records.

Checklist-accuracy findings, if any, close out on the wave anchor #23878.

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out (domain:devx seat 2): every clause PASS; nothing to extract. The re-pointed item landed with #24000 (e18b23fac5), Fixes #23950.


    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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions