SaaS.Dev

Admin actions: Verbs, refusals and Approvals

How the Admin turns a Noun's custom Verbs into buttons, what a button runs, how a refusal shows, and where blocked Verbs and Approvals stand.

In the Admin, each Verb a Noun declares beyond the standard five is a button. The button runs the Verb on its record, and the Verb's rules decide whether the call completes or the Verb refuses.

Custom Verbs become actions

The standard five, create, get, list, update and delete, run through the list, the record page and the two forms. Every other Verb gets a button by verb-action, and Admin: derivation rules and edge cases covers the rest.

The label comes from the Verb's name: renew reads Renew, and markWon reads Mark won. A list with any custom Verb gains an Actions column. A button in a row runs its Verb without opening the record.

VerbButtonOnSendsWhen it completesWhen the Verb refuses
Lease.renewReneweach list row, the record page, the edit formthe record, no inputsRenew done, then the lease reloadsthe Verb's reason; the lease as it was
Lease.terminateTerminateeach list row, the record page, the edit formthe record, no inputsTerminate done, then the lease reloadsthe Verb's reason; the lease as it was

A button sends the record alone. A Verb declared with inputs still gets a button, but no form for them, as Verb inputs: what a form needs explains.

What a button runs

  1. A person presses Renew on the lease of Maya Ortiz. Every Verb button on that record turns off, and the pressed one reads Renew….
  2. The Admin runs the Function of Lease.renew with the record and no inputs.
  3. The Function completes or refuses. Nothing on the screen adds a rule.
  4. On completion, the Admin shows Renew done and reloads the record, by verb-result.
  5. On a refusal, it shows the reason the Verb gives and leaves the screen as it was, by refusal-message.

The pinned Admin build runs the Function in the browser, over the Startup's records. So the Verb refuses, with the rule its own Function holds.

Save and Delete run no Function

Only the Verb buttons run a Function. The Save button of a form and the Delete button write the record directly, so a Function the Startup gives create, update or delete does not run from them.

How a refusal shows

A Lease renews only from active. Press Renew once and the lease of Maya Ortiz moves to renewed. Press it again, and the Verb refuses with its reason:

Admin notice
Lease.renew moves a lease only from active; lease_1 is renewed.

The notice holds the reason the Function gives, word for word. The record page keeps its values, and every button turns back on.

PlanThe same refusal over the API

In the design, the same call over the API ends in a Refused Action. Its problem document has the shape of the API spec's Refused error, and its detail is the sentence the notice shows.

{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Lease.renew moves a lease only from active; lease_1 is renewed.",
  "fix": "Read the record, run the Verb that moves it to an allowed state, then retry.",
  "instance": "https://api.sb/leaseclock.com/actions/action_3"
}

The SDK, CLI and MCP server return the same document, because each calls the one Verb.

Blocked Verbs and access

No Noun-file key blocks a standard Verb. So every Noun gets all four screens, and every edit form has a Delete button. Every person who opens the Admin sees every button.

PlanBlocked standard Verbs and access

In the design, a standard Verb the definition blocks takes its part of the screens with it, by blocked-action. Blocking create drops the create form, and blocking delete drops every Delete button, the bulk Delete on the list included.

In the design, a button for a Verb the person's Access Level lacks never renders, by omit-by-access. The Permission still decides at the call, so a missing button never stands in for the rule.

Approvals

The pinned Admin has no wait state. A button's call completes or the Verb refuses before the notice shows.

PlanApprovals in the Admin

In the design, a call past its Limit neither completes nor refuses at once. Its Action waits pending for an Approval, and the notice says it waits.

Approved, the Action runs. Refused, it ends refused with the limit-exceeded problem, and unanswered by its deadline it ends canceled.

Approval is a Noun with the Verbs Approval.approve and Approval.refuse. So the team answers from an Approvals list with one button per Verb, derived by the same rule as Renew.

Contents