forge-pilot 0.1.0

Closed-loop orchestrator over runtime advisories, kernel oracles, and canonical Forge export/import lanes
Documentation
mod common;

use common::{base_loop_config, open_forge_store, open_memory_store, resources, tempdir};
use forge_pilot::{HaltReason, LoopRunner, PILOT_LOOP_RECEIPT_V1_SCHEMA};
use knowledge_runtime::Scope;

#[tokio::test]
async fn loop_runner_stops_when_time_budget_is_exhausted() {
    let dir = tempdir();
    let memory_store = open_memory_store(dir.path());
    let forge_store = open_forge_store(dir.path());
    let scope = Scope::new("pilot-time-budget");
    let mut config = base_loop_config(scope.clone());
    config.time_budget_secs = 0;

    let resources = resources(memory_store, forge_store, &config);
    let mut runner = LoopRunner::new(config, resources);
    let report = runner.run().await.unwrap();

    assert_eq!(report.halt_reason, HaltReason::TimeBudgetExhausted);
    assert_eq!(report.receipt.schema_version, PILOT_LOOP_RECEIPT_V1_SCHEMA);
    assert!(report.receipt.non_authoritative);
    assert_eq!(report.receipt.budget.workload_class, "orchestration");
    assert_eq!(report.receipt.budget.time_budget_secs, 0);
    assert_eq!(report.receipt.halt_reason, HaltReason::TimeBudgetExhausted);
    assert_eq!(report.receipt.iterations_completed, 0);
}