51dfe71a2b
The rulespec compiler was writing serde_yaml::to_string(&compiled) into rulespec.compiled.dl files — just YAML, not datalog at all. Added format_datalog_program() that produces proper Soufflé-style datalog: - .decl relation declarations (claim_value, claim_length, predicate_pass, predicate_fail) - Fact assertions from the envelope - Rules for all 9 predicate types (exists, not_exists, equals, contains, greater_than, less_than, min_length, max_length, matches) - .output directives for query results Updated verify_envelope() to call the new function instead of serde_yaml::to_string(). Added 8 unit tests covering all rule types, edge cases, and the butler rulespec example.