Rulvar API reference / @rulvar/rulvar / PreflightReport
Interface: PreflightReport
Defined in: packages/core/dist/index.d.ts
The machine-readable preflight report; JSON-serializable throughout.
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
admission | { admitted: number; ceilingHeadroomShare?: number; ceilingHeadroomUsd?: number; ceilingUsd?: number; denied: number; liveRootExposureTermUsd?: number; requiredMinimumCeilingUsd?: number; reservedForFinalizationUsd: number; reserveLineHeadroomUsd?: number; reserveLineUsd?: number; synthesisReserveUsd: number; wave: PreflightAdmissionRow[]; } | - | packages/core/dist/index.d.ts |
admission.admitted | number | - | packages/core/dist/index.d.ts |
admission.ceilingHeadroomShare? | number | The same headroom as a fraction of the ceiling (RV3208): the one-field read of the admission cliff (the 2026-08-11 experiment ran at 0.0286). Present beside ceilingHeadroomUsd on positive ceilings. | packages/core/dist/index.d.ts |
admission.ceilingHeadroomUsd? | number | The ceiling minus the required minimum (RV3208): the absolute dollars of drift the admission survives before the wave stops seating. Present beside requiredMinimumCeilingUsd whenever a ceiling is declared. | packages/core/dist/index.d.ts |
admission.ceilingUsd? | number | - | packages/core/dist/index.d.ts |
admission.denied | number | - | packages/core/dist/index.d.ts |
admission.liveRootExposureTermUsd? | number | The live-root-exposure term of the wave projection (RV2004): the orchestrator's own worst-case turn floor, the money coordination has ALWAYS already spent (and holds in flight) by the time any spawn tool runs. The parity rerun's fourth seat fit the plain wave (5.95 under 6.00) and was refused live by exactly this term; the embedded spawn gate and requiredMinimumCeilingUsd now carry it, so a seat that cannot admit live cannot admit in preflight either. Present on orchestrate waves whose coordination turn prices. | packages/core/dist/index.d.ts |
admission.requiredMinimumCeilingUsd? | number | The smallest run ceiling that seats the WHOLE declared wave (RV1907): every row's reserve plus the finalization and synthesis carve-outs. Children admit strictly below exact fill, so a viable ceiling must sit strictly ABOVE this figure; the four-role benchmark's $6.00 sat $0.98 below it and lost its third and fourth workers. Present whenever the wave has rows. | packages/core/dist/index.d.ts |
admission.reservedForFinalizationUsd | number | - | packages/core/dist/index.d.ts |
admission.reserveLineHeadroomUsd? | number | How far the admitted wave's steady state sits under the reserve line (RV2101). Child spend past the declared estimates consumes this headroom before the coordination loop is refused at the line; under two coordination turn floors the projection warns with reserve-line-headroom. Present beside reserveLineUsd. | packages/core/dist/index.d.ts |
admission.reserveLineUsd? | number | The reserve line (RV2101): the run ceiling minus the synthesis reserve, the boundary the budget chain fences every non-tail dispatch at while the promise is held. Present when a ceiling and a positive synthesis reserve are both declared. | packages/core/dist/index.d.ts |
admission.synthesisReserveUsd | number | The synthesis payload carve-out the projection holds against the run root, exactly the live commitSynthesisReserve mirror (RV1901): a capped orchestrator with budget.synthesisReserveUsd registers it on the root before any spawn admits, so the wave arithmetic must hold it too. Zero when the orchestrator is uncapped or declares no synthesis reserve, matching the runtime that then commits none. | packages/core/dist/index.d.ts |
admission.wave | PreflightAdmissionRow[] | - | packages/core/dist/index.d.ts |
budget | { ceilingUsd?: number; childBudgetFraction: number; flatReserveUsd: number; lifetimeSpawnCap: number; maxDepth: number; orchestrator?: { acceptanceReserve?: { declared: "warn" | "require" | "checkpoint"; effectiveCapUsd?: number; fits: boolean; requiredUsd: number; terms: AcceptanceTailTerms; }; effectiveCapUsd?: number; finalizeReserveUsd: number; finalizeTurns: number; projectedProviderTurns: number; repairPool?: { maxSemanticRepairRounds?: number; maxTotalRepairRounds?: number; mechanicalAllowance?: number; }; reserveCommitted: boolean; synthesis?: { projectedProviderTurns: number; servedBy?: `${string}:${string}`; }; }; } | - | packages/core/dist/index.d.ts |
budget.ceilingUsd? | number | - | packages/core/dist/index.d.ts |
budget.childBudgetFraction | number | - | packages/core/dist/index.d.ts |
budget.flatReserveUsd | number | - | packages/core/dist/index.d.ts |
budget.lifetimeSpawnCap | number | - | packages/core/dist/index.d.ts |
budget.maxDepth | number | - | packages/core/dist/index.d.ts |
budget.orchestrator? | { acceptanceReserve?: { declared: "warn" | "require" | "checkpoint"; effectiveCapUsd?: number; fits: boolean; requiredUsd: number; terms: AcceptanceTailTerms; }; effectiveCapUsd?: number; finalizeReserveUsd: number; finalizeTurns: number; projectedProviderTurns: number; repairPool?: { maxSemanticRepairRounds?: number; maxTotalRepairRounds?: number; mechanicalAllowance?: number; }; reserveCommitted: boolean; synthesis?: { projectedProviderTurns: number; servedBy?: `${string}:${string}`; }; } | - | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve? | { declared: "warn" | "require" | "checkpoint"; effectiveCapUsd?: number; fits: boolean; requiredUsd: number; terms: AcceptanceTailTerms; } | The acceptance-tail verdict (RV4001), present exactly when budget.acceptanceReserve is declared: the SAME acceptanceTailRequiredUsd arithmetic the RV3907 runtime gate holds the boot against, term by term, so fits here IS the gate's answer. The fifth comparison experiment ran a plan preflight passed green at a $4.54 cap into a typed runtime refusal at $4.82 because the two sides computed different formulas; they now compute one. | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve.declared | "warn" | "require" | "checkpoint" | - | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve.effectiveCapUsd? | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve.fits | boolean | - | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve.requiredUsd | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.acceptanceReserve.terms | AcceptanceTailTerms | - | packages/core/dist/index.d.ts |
budget.orchestrator.effectiveCapUsd? | number | min(capUsd, (capFraction ?? 0.2) x ceiling); absent when unresolvable. | packages/core/dist/index.d.ts |
budget.orchestrator.finalizeReserveUsd | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.finalizeTurns | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.projectedProviderTurns | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.repairPool? | { maxSemanticRepairRounds?: number; maxTotalRepairRounds?: number; mechanicalAllowance?: number; } | The run repair pool and its scoped semantic reserve (RV4705), present when either bound is declared: mechanicalAllowance is what finish-validation grants can actually draw (the total minus the unspent reserve), the figure the eighth comparison rerun needed before its mechanical repair ate the armed round's only token. | packages/core/dist/index.d.ts |
budget.orchestrator.repairPool.maxSemanticRepairRounds? | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.repairPool.maxTotalRepairRounds? | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.repairPool.mechanicalAllowance? | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.reserveCommitted | boolean | - | packages/core/dist/index.d.ts |
budget.orchestrator.synthesis? | { projectedProviderTurns: number; servedBy?: `${string}:${string}`; } | The separate synthesis invocation's projection, present when input.orchestrator.synthesis was declared and the role resolves: its turn ceiling (the repair turn reserve folded in when declared) and its serving model. | packages/core/dist/index.d.ts |
budget.orchestrator.synthesis.projectedProviderTurns | number | - | packages/core/dist/index.d.ts |
budget.orchestrator.synthesis.servedBy? | `${string}:${string}` | - | packages/core/dist/index.d.ts |
concurrency | { perProvider?: Record<string, number>; perRun: number; } | - | packages/core/dist/index.d.ts |
concurrency.perProvider? | Record<string, number> | - | packages/core/dist/index.d.ts |
concurrency.perRun | number | - | packages/core/dist/index.d.ts |
exposure | { maxInFlight: number; overshootOneTurnFloorUsd?: number; perProvider: Record<string, { inFlight: number; requestsPerWave: number; tokensPerWaveFloor: number; }>; requiredMinimumExposureUsd?: number; runCeiling?: { requests: number; tokens: number; }; } | - | packages/core/dist/index.d.ts |
exposure.maxInFlight | number | Concurrent in-flight turns the declared wave can hold. | packages/core/dist/index.d.ts |
exposure.overshootOneTurnFloorUsd? | number | The one-more-turn cost floor past a ceiling crossing: the sum of the maxInFlight most expensive declared turn floors. The documented overshoot bound is one turn per in-flight agent; real turns grow with the prompt, so this is the floor of that bound. | packages/core/dist/index.d.ts |
exposure.perProvider | Record<string, { inFlight: number; requestsPerWave: number; tokensPerWaveFloor: number; }> | - | packages/core/dist/index.d.ts |
exposure.requiredMinimumExposureUsd? | number | The smallest in-flight exposure cap under which the declared wave can breathe (RV1907): the finalization and synthesis carve-outs plus the turn floors of the maxInFlight most expensive declared dispatches, the orchestrator's own turn among them. Below it the root's next turn is refused beside a full child wave, the recovery arm's exact death; the RV1902 wait recovers the run, but only a cap at or above this floor avoids the stall entirely. Absent when no declared turn prices. | packages/core/dist/index.d.ts |
exposure.runCeiling? | { requests: number; tokens: number; } | The declared wave run to its derived turn ceilings, at the declared estimates (the second experiment report, rec 9): total provider calls (fan-out times per-spawn projected turns, before any retries) and the cumulative token demand with the context regrowing every turn (turn k re-sends the declared prompt plus the k-1 prior output bounds, so K turns cost K x est + outputBound x K(K+1)/2). Absent when nothing is declared. | packages/core/dist/index.d.ts |
exposure.runCeiling.requests | number | - | packages/core/dist/index.d.ts |
exposure.runCeiling.tokens | number | - | packages/core/dist/index.d.ts |
findings | PreflightFinding[] | - | packages/core/dist/index.d.ts |
finishValidation? | { contractHash?: string; selfTest: "failed" | "skipped" | "passed"; validators: string[]; } | Present when input.finishValidation was provided: the self test echo. selfTest reflects the golden fixture run alone ('skipped' = no fixture resolvable); containment drift between a contract and the validator set reports through findings either way. | packages/core/dist/index.d.ts |
finishValidation.contractHash? | string | - | packages/core/dist/index.d.ts |
finishValidation.selfTest | "failed" | "skipped" | "passed" | - | packages/core/dist/index.d.ts |
finishValidation.validators | string[] | - | packages/core/dist/index.d.ts |
quota | { configured: boolean; rules?: number; tenant?: string; } | - | packages/core/dist/index.d.ts |
quota.configured | boolean | - | packages/core/dist/index.d.ts |
quota.rules? | number | - | packages/core/dist/index.d.ts |
quota.tenant? | string | - | packages/core/dist/index.d.ts |
runLimits | EffectiveUsageLimits | The run-level merge an undeclared spawn would receive. | packages/core/dist/index.d.ts |
spawns | PreflightSpawnReport[] | - | packages/core/dist/index.d.ts |