Skip to content

The #3424 admin override has no Console control: a record stranded behind an unstaffed approval is releasable only through the API #16679

Description

@hotlong

Symptom

A pending approval routed to an unstaffed position strands its record, and on 17.3.0 the only way out is a raw API call. The Console renders no override control anywhere.

Measured on the objectstack-ai/hotclm app, by unstaffing clm_general_manager and driving a routed contract into that rung:

Observation Result
The request opens pending_approvers: ['position:clm_general_manager'] — an unresolved slate, not an error
The record PATCH409 RECORD_LOCKED, including for the platform admin
The former position holder's inbox "You're all caught up"
Platform admin POST /approvals/requests/<id>/approve 200, the run resumes, the contract reaches approved
A non-approver, non-admin doing the same 403 FORBIDDEN — correct
Console: approvals inbox All tab no approve / reject / reassign control for the override actor
Console: the sys_approval_request record page same — nothing rendered

So the service-side override from #3424 works exactly as designed. What is missing is any way to reach it without a shell.

Why this reads as a regression rather than a duplicate

Two closed issues already cover this ground, which is why this is filed as a report rather than a new feature request:

Either the control regressed, or it is gated on something a freshly scaffolded app does not have. Both readings are worth a look, and neither is visible from inside this repository's own tests — the measurement above needed a real app with lockRecord: true and a deliberately unstaffed position.

Impact

For a tenant whose administrators have API access this is an inconvenience. For one whose administrators work only through the Console, a single unstaffed position — someone leaving, a position renamed, a staffing table not yet filled on day one — puts a record beyond reach with no in-product recovery. Apps that set lockRecord: true on a rung, which is the documented shape for "no editing the deal mid-approval", inherit that exposure.

os lint already warns about the authoring half (approval-approvers-may-resolve-empty, which fired on exactly this node and is what prompted the measurement). The warning is accurate and the app accepted it consciously; the gap is that the operational escape hatch it implies exists only over the API.

Expected capability

An override affordance in the Console for an actor the service already admits — on the approvals inbox and/or the sys_approval_request record page — distinguished from an ordinary approve, and carrying the via_override marker #9464 asked for.

Where it was found

objectstack-ai/hotclm card 06 (approval ladder, PR #17), during browser verification. The hazard was driven out rather than argued: the app kept lockRecord: true on the strength of the override existing, and this report is the other half of that decision.

Filed from the hotclm PM seat, via Claude Code.

Activity

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

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions