harn-cli 0.10.154

CLI for the Harn programming language — run, test, REPL, format, and lint
use super::*;

fn policy_context(dir: &Path, supports_effort: bool) -> LlmCheckContext {
    let modes = if supports_effort { "effort" } else { "enabled" };
    let levels = if supports_effort { "\"high\"" } else { "" };
    std::fs::write(
        dir.join("harn.toml"),
        format!(
            "[[capabilities.provider.test-provider]]\nmodel_match = \"configured-model\"\n\
             thinking_modes = [\"{modes}\"]\nreasoning_effort_supported = {supports_effort}\n\
             reasoning_effort_levels = [{levels}]\n"
        ),
    )
    .unwrap();
    LlmCheckContext::load(&dir.join("main.harn"))
}

fn effort_admission() -> Result<(), String> {
    harn_vm::llm::admit_reasoning_literals("test-provider", "configured-model", Some("high"), None)
}

#[test]
fn project_policy_scopes_restore_and_cache_keys_follow_edits() {
    let dir = tempfile::TempDir::new().unwrap();
    let accepted = policy_context(dir.path(), true);
    let refused = policy_context(dir.path(), false);
    assert_ne!(accepted.cache_key([0; 32]), refused.cache_key([0; 32]));
    accepted
        .with(|| {
            assert!(effort_admission().is_ok());
            let refusal = refused.with(effort_admission).unwrap().unwrap_err();
            assert!(refusal.contains("user capability overlay"), "{refusal}");
            assert!(effort_admission().is_ok(), "nested policy leaked");
        })
        .unwrap();
}

#[test]
fn malformed_project_policy_never_runs_the_check() {
    let dir = tempfile::TempDir::new().unwrap();
    std::fs::write(dir.path().join("harn.toml"), "[capabilities.provider").unwrap();
    let context = LlmCheckContext::load(&dir.path().join("main.harn"));
    assert!(context
        .with(|| panic!("invalid policy reached check"))
        .is_err());
}