forge-pilot 0.1.0

Closed-loop orchestrator over runtime advisories, kernel oracles, and canonical Forge export/import lanes
Documentation
use crate::bootstrap::types::{BootstrapManifestSnapshot, BOOTSTRAP_SOURCE_AUTHORITY};
use crate::error::PilotError;
use forge_memory_bridge::transform_envelope_v3;
use semantic_memory::{MemoryStore, ProjectionImportResult};
use semantic_memory_forge::{ExportEnvelopeV3, ExportRecordV3, EXPORT_ENVELOPE_V3_SCHEMA};
use stack_ids::{EnvelopeId, ScopeKey, TraceCtx};

pub(crate) fn build_source_envelope(
    namespace: &str,
    manifest: &BootstrapManifestSnapshot,
    records: Vec<ExportRecordV3>,
) -> Result<ExportEnvelopeV3, PilotError> {
    let scope_key = ScopeKey::namespace_only(namespace);
    let exported_at = chrono::Utc::now().to_rfc3339();
    let trace_ctx = Some(TraceCtx::generate());
    let content_digest = ExportEnvelopeV3::compute_digest(
        BOOTSTRAP_SOURCE_AUTHORITY,
        &scope_key,
        &records,
        None,
        None,
    )
    .map_err(|error| {
        PilotError::Other(format!(
            "failed to compute bootstrap envelope digest: {error}"
        ))
    })?;

    Ok(ExportEnvelopeV3 {
        envelope_id: EnvelopeId::new(format!(
            "workspace-source-envelope:{}",
            manifest.manifest_id
        )),
        schema_version: EXPORT_ENVELOPE_V3_SCHEMA.into(),
        content_digest,
        source_authority: BOOTSTRAP_SOURCE_AUTHORITY.into(),
        scope_key,
        trace_ctx,
        exported_at,
        export_meta: None,
        evidence_bundle: None,
        support_sets: vec![],
        contradiction_witnesses: vec![],
        retraction_records: vec![],
        claim_states_v13: vec![],
        intervention_bundles_v14: vec![],
        outcome_schemas_v14: vec![],
        cohort_contracts_v14: vec![],
        counterfactual_slices_v14: vec![],
        experiment_cases_v14: vec![],
        comparability_matrices_v14: vec![],
        decision_traces_v14: vec![],
        refuter_suites_v14: vec![],
        refuter_results_v14: vec![],
        experiment_budgets_v14: vec![],
        rollout_decisions_v14: vec![],
        rollback_decisions_v14: vec![],
        attestation_envelopes_v15: vec![],
        trust_root_sets_v15: vec![],
        artifact_admission_policies_v15: vec![],
        transparency_receipts_v15: vec![],
        attestation_revocations_v15: vec![],
        attestation_supersessions_v15: vec![],
        remote_oracle_leases_v15: vec![],
        remote_slice_requests_v15: vec![],
        remote_slice_results_v15: vec![],
        cross_runtime_replay_tickets_v15: vec![],
        dispute_bundles_v15: vec![],
        disclosure_policies_v15: vec![],
        disclosure_budgets_v15: vec![],
        records,
    })
}

pub(crate) async fn import_envelope(
    memory_store: &MemoryStore,
    envelope: &ExportEnvelopeV3,
) -> Result<ProjectionImportResult, PilotError> {
    let batch = transform_envelope_v3(envelope)?;
    Ok(memory_store.import_projection_batch(&batch).await?)
}