> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vinmake.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Actions decision queue

> The human end of staged work: review the exact consequence, approve or reject it, and keep unavailable work visible.

# Actions decision queue

Actions at `/actions` is where assistant-prepared work waits for a person.
It is not the same as Audit → Actions, which is a worklist over Assurance findings.

The page asks the server three separate questions rather than filtering one loaded page in the browser.

| Lane                     | Server status          | Meaning                                                                              |
| ------------------------ | ---------------------- | ------------------------------------------------------------------------------------ |
| Awaiting your decision   | `ready_for_review`     | The linked workspace passed validation, but nothing has reached the book.            |
| Approved, not yet posted | `waiting_confirmation` | A person confirmed an exact revision and selection, but the change has not posted.   |
| All runs                 | no status filter       | Read-only, failed, blocked, stale, no-change, and consequential runs remain visible. |

Each lane receives its own server-owned total, pagination state, and empty result.
An unreadable response withholds both the count and the claim that nothing is waiting.

## Decide on what was shown

Opening a run reads its linked staged workspace.
Before approval, the UI freezes the workspace reference, revision, selection fingerprint, selected item keys, exact fixed-point amounts, currencies, and stated consequences.
If any selected item is missing, non-committable, omitted, or lacks readable money evidence, approval is not offered.

The approval request is built from that frozen consequence.
If a refresh shows that the workspace moved while the decision was open, the comparison fails instead of silently approving the new state.

Rejection requires a written reason of at most 500 characters.
The page reports that reason as recorded only after it finds the exact reason in the server-returned immutable history.

## Coverage limit

Actions lists staged work only when it has a linked `workflow_runs` row in the current server-derived organization, user, and conversation session.
A workspace created directly against a record may have no linked run, and the backend publishes no collection read over all staged workspaces.
Such work reaches a person through its own record-specific review link and is not evidence that the Actions lane is complete over every pending decision.

## Honest failures

A pre-workspace failure remains in All runs because the backend uses a left join from runs to workspaces.
A legitimate completed run may say **No changes proposed**; a failed run shows its terminal reason instead.
A lost commit response remains unknown until the exact workspace or durable receipt is reread.

<Warning>
  The queue and staged decision sequence are shipped in source but have not been exercised end to end for this release.
  This page documents the enforced contract, not a claim that a production decision has completed successfully.
</Warning>

## Verified at source

* `src/app/actions/page.tsx` and `src/lib/staged-decisions.ts` define the three server-filtered lanes, frozen-consequence gate, coverage disclaimer, and written rejection record.
* `langgraph_chat/devcenter/agent_runs_api.py` scopes runs and linked workspaces to the server-derived organization, user, and session and keeps pre-workspace failures listable.
* `langgraph_chat/greatbook_mcp/workspaces/service.py` owns immutable revisions, validation, confirmation, commit, and receipts.
