Skip to content

Bench

Supervisory review

Tier: Motion · Requirement module: Supervisory Review · Status: ✅ Prototyped

Purpose

Bench is where a supervisor sits to decide. It owns the triage queue, reviewer assignment, the checklist a reviewer must clear, the query loop with the firm, and the outcome that closes a review.

The engine's job is to make the decision structured and gated: a reviewer cannot approve a return while a validation failure stands or a query is open, and every outcome carries a reason into the audit trail.

Scope

Capability Status Notes
Triage queue Risk-ordered register with filters by status
Reviewer assignment Assigned reviewer per return; unassigned is itself a risk driver
Checklist review Completeness, consistency, thresholds, evidence, outcome
Queries to firms Threaded, bound to a field, returns the submission to the firm
Approval and rejection Gated on cleared checklist and no standing failures
Risk flags Raises a flag into Prism without opening a case
Management signoff Second supervisor above a configured materiality
Audit history Rendered from Seal on the return

The checklist and its gate

Five items, taken directly from the requirement's reviewer checklist:

Item Reviewer action
Completeness Confirm all mandatory sections, schedules, and attachments are present
Consistency Compare figures against prior periods and linked returns
Thresholds Review automated alerts, ratios, breaches, and exceptions
Evidence Check supporting documents and management explanations
Outcome Approve, reject, request clarification, raise a risk flag, or open an enforcement case

Approval requires all items cleared and zero standing FAIL results from Assay. The gate is enforced in the engine, not merely disabled in the UI — the approve endpoint re-evaluates it, because a control that only exists in the front-end is not a control.

ADVISORY results do not block. That is the point of the severity distinction.

Outcomes

                    ┌──► APPROVE ──────► obligation ACCEPTED, archived for the period
                    ├──► CLARIFY ──────► query raised, submission returns to firm,
review decision ────┤                    prior version retained
                    ├──► REJECT ───────► obligation reopened, reason cited to firm
                    ├──► RISK_FLAG ────► driver into Prism, review continues
                    └──► ENFORCE ──────► case opened in Docket with this return as evidence

Every outcome requires a reason. REJECT, CLARIFY, and ENFORCE require it before the action can be confirmed; APPROVE and RISK_FLAG accept an optional supervisory note. All five are sealed with actor, timestamp, and prior state.

The query loop

A query is not a comment. It is a state change on the obligation:

  1. Reviewer raises a query against a field, citing the rule or directive
  2. The obligation returns to the firm as answerable; the submitted version stays immutable
  3. The firm responds in the thread, optionally with an amendment (Strata v1.1)
  4. The query is answered; the reviewer closes it or presses further
  5. Approval remains blocked while any query is open

This is why the query thread and the version history are the same story viewed twice. A resubmission that answers a query carries respondsTo and the reviewer sees both together.

Owns

  • Review assignments and queue state
  • Checklist state per review
  • Queries, threads, and their status
  • Outcomes and the reasons attached to them
  • The approval gate

Does not own

  • Validation results — Assay
  • Submission versions — Strata
  • Risk scores — Prism, which Bench feeds with flags
  • Cases — Docket, which Bench opens but does not run

Open questions

  • Reviewer capacity and reassignment. Round-robin, risk-weighted, or manual? Unresolved, and it determines whether the triage queue is a work list or a dashboard.
  • Four-eyes on approval. The requirement asks for management signoff without specifying a threshold. Materiality is likely a function of firm risk band and reported value, and should be Return Studio configuration rather than code.