tascan_create_fanout
Create a fan-out: 1-30 seats (RESEARCH by default, or LOCAL subagent seats) plus one synthesizer under ONE cycle root (POST /coord/fanouts). No Decision cards, Parked cards or pages per seat: only a control action or the closing roll-up reaches a human. Needs an API key with agent:dispatch:code (an admin session has no dispatch budget: key_required). dry_run true runs the same validation and ceiling/cap pre-check and returns dry_run, plan_sha256, seats and problems without spending budget or creating anything. Otherwise it consumes seats + 1 dispatch units BEFORE the create; a refusal only the database can see (cap_below_plan, fanout_open_limit, bad agent_id, reserve_floor_unset) still consumes them, by design. Fails fanout_ceiling_unset until the owner sets a ceiling, over_ceiling when cap exceeds it. idempotency_key replays a duplicate within 24h on the same plan, else idempotency_body_mismatch. Every seat, the synth and the roll-up leave a signed completion. Track with tascan_get_fanout.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cap | Yes | This fan-out's total micro-USD budget, synth reserve included. Refused over_ceiling if it exceeds the org's fan-out spending ceiling. | |
| seats | Yes | 1-30 seats. Each names the agent that runs it; brief/role fall back to seat_defaults when omitted. | |
| synth | Yes | The synthesizer that runs once the barrier closes, reading every done seat's stored output as DATA. | |
| title | Yes | Short human title (1-200 chars). T_F becomes "FANOUT: <title>"; seats become "RESEARCH: [seat-NN] <title>"; the synth becomes "RESEARCH: [synth] <title>". | |
| canary | No | How many seats release immediately; the rest stay held on T_F until the first canary settles done. Default min(2, seats.length). | |
| min_ok | No | Minimum seats that must finish done before the synth barrier can close. Default ceil(seats.length / 2). | |
| dry_run | No | true runs the same validation plus the ceiling/cap pre-check and returns {dry_run:true, plan_sha256, seats, problems:[]} WITHOUT consuming budget or creating a fan-out -- a real preflight, not a real create. | |
| breaker_k | No | Paid (non-infrastructure) seat failures before the breaker pauses the fan-out (2-5, default 2). An expired run never counts. | |
| project_id | Yes | Working project (UUID). The fan-out root T_F is minted on its Questions list (coord_ensure_lists). | |
| seat_review | No | per_seat mints one review per seat (allowed for at most 10 seats); none skips seat review. Default per_seat for <=10 seats, none above that. | |
| deadline_min | No | Minutes before an idle seat is dropped and the barrier re-evaluated, and before a stuck synthesizing fan-out closes deadline (10-1440, default 240). | |
| seat_defaults | No | Shared defaults applied when a seat names no brief of its own. | |
| idempotency_key | No | Optional replay key (<= 200 chars). The same key within 24h on the same plan returns duplicate:true with the existing fanout_id; on a different plan it is refused idempotency_body_mismatch. |