pending. Nothing is delivered to a consumer until a person accepts it — the raw answer, the structured form, and the provenance are all shown so a reviewer can catch a wrong or poisoned answer before it’s written back.
The one exception is a consumer that registered with
auto_accept: true, which delivers without review. It’s off by default precisely because skipping review is a real write-back-poisoning risk. See Consumers.The web approval UI
shtap serve serves a single-page approval queue at the server root, http://localhost:8776/. It lists pending proposals and lets a reviewer accept or reject each one. The page prompts for the bearer token so it can call the API on your behalf.
From the CLI
1
List pending proposals
Nothing pending.2
Accept a proposal
on_proposal_accepted to every subscribed consumer, and notifies the expert that their answer was accepted and attributed to them. --decided-by defaults to your OS username.3
Reject a proposal
on_proposal_rejected (with the reason) to the consumer. --reason is required; --decided-by defaults to your OS username.What acceptance does
Accepting a proposal:- Sets the proposal’s status to
acceptedand the request’s status toaccepted. - Delivers the accepted proposal to all subscribed consumers (including any attached by deduplication) via
on_proposal_accepted— this is where your consumer writes the answer to a system of record. - Sends the expert a notification that their answer was accepted, closing the loop on the attribution promise.
Over the API
The same actions are available on the HTTP API:GET /proposals?status=pending— the queue. See the Proposals endpoint.POST /proposals/{id}/acceptwith{ "decided_by": "alice" }.POST /proposals/{id}/rejectwith{ "decided_by": "alice", "reason": "not accurate" }.
GET /audit?request_id=.... See the Audit endpoint.