// Golden replay tests for PromptBuilder — Task 5.12
// Reads 6 golden files from contract/goldens/prompt/ and verifies invariants.
// Prefix: pgr_ (prompt goldens replay)
fn pgr_read_file(path : String) -> String {
(try? @fs.read_file_to_string(path)).unwrap_or("")
}
///| Extract a top-level string field from a JSON document. Mirrors the
///| prior JS behavior: non-string (or missing) values render as "".
fn pgr_json_field(json_str : String, field : String) -> String {
let root = try {
@json.parse(json_str)
} catch {
_ => return ""
}
match root {
Json::Object(obj) =>
match obj.get(field) {
Some(Json::String(s)) => s
Some(Json::True) => "true"
Some(Json::False) => "false"
Some(Json::Number(n)) => n.to_string()
_ => ""
}
_ => ""
}
}
// ---------------------------------------------------------------------------
// Section-presence tests
// ---------------------------------------------------------------------------
test "golden 01_empty_config: identity present" {
let raw = pgr_read_file("contract/goldens/prompt/01_empty_config.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("Ermes Agent"), true)
assert_eq(expected.contains("persistent memory"), true)
// No memory block, no context, no soul
assert_eq(expected.contains("MEMORY"), false)
assert_eq(expected.contains("Project Context"), false)
assert_eq(expected.contains("SOUL.md"), false)
}
test "golden 02_memory_only: memory block present" {
let raw = pgr_read_file("contract/goldens/prompt/02_memory_only.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("pnpm"), true)
assert_eq(expected.contains("MEMORY"), true)
}
test "golden 05_with_context_file: context present" {
let raw = pgr_read_file("contract/goldens/prompt/05_with_context_file.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("Project Context"), true)
assert_eq(expected.contains("just test"), true)
}
test "golden 06_with_soul_md: soul block present" {
let raw = pgr_read_file("contract/goldens/prompt/06_with_soul_md.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("SOUL.md"), true)
assert_eq(expected.contains("precise and thorough"), true)
}
// ---------------------------------------------------------------------------
// Assembly order test
// ---------------------------------------------------------------------------
test "golden 01 assembly order: identity before guidance" {
let raw = pgr_read_file("contract/goldens/prompt/01_empty_config.json")
let expected = pgr_json_field(raw, "expected")
let idx_id = pb_index_of(expected, "Ermes Agent")
let idx_mem = pb_index_of(expected, "persistent memory")
assert_eq(idx_id < idx_mem, true)
}
// ---------------------------------------------------------------------------
// Model-specific guidance goldens
// ---------------------------------------------------------------------------
test "golden 07_with_openai_guidance: OpenAI guidance present" {
let raw = pgr_read_file("contract/goldens/prompt/07_with_openai_guidance.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("Execution discipline"), true)
assert_eq(expected.contains("tool_persistence"), true)
assert_eq(expected.contains("mandatory_tool_use"), true)
}
test "golden 08_with_google_guidance: Google guidance present" {
let raw = pgr_read_file("contract/goldens/prompt/08_with_google_guidance.json")
let expected = pgr_json_field(raw, "expected")
assert_eq(expected.contains("Google model operational directives"), true)
assert_eq(expected.contains("Absolute paths"), true)
assert_eq(expected.contains("Parallel tool calls"), true)
}