/** * What a `unitDistributed` frame says about the council that produced it, in the reader's words * (F-4R2-007). * * The engine convenes every roster seat and benches the ones that fail (`councilSeatFailed`: * `non_zero_exit`, `timed_out`, `benched`); the assignment then rides on `unitDistributed` with * `seated` (seats convened) and `returned` (ballots that came back). On the fresh rig four of five * seats were signed out: every council routed to claude on one or two ballots of five while the * thread still read "Convening a 5-seat council…" and `degradedReason` stayed `null` — the engine * sets it only for its `Degraded` routing (no vote at all), never for a council that held on a * fraction of its seats (`wicked-core/src/pipeline.rs`, `apply_distributions`, the `Council` arm). * * Crew does not own that field, so it is not set here (the rule is filed as a wicked-core * follow-up). What crew DOES own is the narration, and the frame already carries enough to be * honest: when fewer ballots returned than seats were convened, say so; when the engine names a * reason, quote it. The engine's wire spelling is camelCase (`CoreEvent::to_json`); the snake_case * spellings are read too so a normalising relay cannot silence the line. */ import type { CoreEvent } from '../core/types.js'; /** The council's agreement as the wire carries it, or `null` when the frame has none. */ export declare function councilAgreementPct(event: CoreEvent): number | null; /** * A suffix for the "Council picked X…" line — empty when the council was whole and the engine * named no degradation. `" (1 of 5 seats answered — 4 benched)"`, plus `"; "` * when the engine says why. Since wave 6 the engine sets `degradedReason` on EVERY routing arm * whenever the eligible set is smaller than the configured roster (`"4 of 5 seats benched: codex * (signed out — launcher), …"`), so a benched council reads as degraded in the thread even when * every convened ballot came back. */ export declare function councilOutcomeSuffix(event: CoreEvent): string; export declare function unitDistributedLine(event: CoreEvent, task: string): string; /** * `gateEvaluated.ungated` (wave 6, F-7R2-005): `true` when NOTHING gated the unit — no * deterministic floor, no agent judge, an empty evaluator-policy selection — the exact default-allow * shape run b86c14c1 passed seven times. The line a thread must show instead of "approved": * `"UNGATED — "`. `null` when the frame is not an ungated gate (an older engine never * sends the field; a gated unit sends `false`). */ export declare function ungatedGateNote(event: CoreEvent): string | null; /** * `workerToolCallDenied` (wave 6, F-7R2-012): a worker seat asked to run a REMOTE-WRITING command * (`git push`, `gh pr create`, a `gh api` mutation, …) and the engine refused it — delivery is the * run's deliver phase's job. One line naming who, what, and the remedy the seat was handed. */ export declare function workerToolCallDeniedLine(event: CoreEvent): string; /** The `acpFallback` kinds that mean the seat's ACCOUNT, not its transport, is the problem (wave 6 * adds `auth_failed` / `unauthenticated` beside the older `auth_required`). */ export declare const AUTH_FALLBACK_KINDS: ReadonlySet; /** The `acpFallback` kind for a REFUSAL (wicked-core#925): the unit is governed, its seat is admitted * to ACP input governance, and its ACP carrier could not carry it, so no fallback ran. */ export declare const GOVERNED_REQUIRES_ACP = "governed_requires_acp"; /** * The `acpFallback` line, by `fallbackKind`: an authentication failure benches the seat for the run * (the wave-6 engine never retries the single-shot carrier for it — it fails the same way); a * deliberate `*_requires_wrapped` reroute is routing, not a drop; `governed_requires_acp` is a refusal * (nothing ran single-shot); anything else is the classic * "live session dropped — continuing in single-shot mode". */ export declare function acpFallbackLine(event: CoreEvent): string; //# sourceMappingURL=council-outcome.d.ts.map