Files
rune/scripts/gen_drift_fama_truth.py
T
Nick 6d2fb5edea feat(go): factory batch 12 — FAMA scoring (contract BUILDER-2026-10-08T02:01:32Z-236bbf-unknown)
Forgetting-Aware Memory Accuracy ported to drift-core: valid = active
AND (wash>0 OR rock/established); missing rows skipped; empty = 0.0.
5-case battery from the live oracle incl. the missing-row path.
First-run green.
2026-10-08 03:01:43 +01:00

52 lines
1.9 KiB
Python

"""gen_drift_fama_truth.py — factory batch 12 truth battery (live oracle)."""
import json
import sqlite3
import sys
import tempfile
from pathlib import Path
REPO = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(REPO / "src"))
sys.path.insert(0, str(REPO / "src" / "rune"))
import drift_core as dc # noqa: E402
def main():
tmp = Path(tempfile.mkdtemp(prefix="fama-truth-"))
db = sqlite3.connect(str(tmp / "t.db"))
db.row_factory = sqlite3.Row
db.execute("CREATE TABLE entries (id INTEGER PRIMARY KEY, status TEXT, rock_status TEXT, wash_count INTEGER)")
rows = [
(1, "active", "washable", 5), # valid (wash>0)
(2, "active", "established", 0), # valid (established)
(3, "active", "rock", 0), # valid (rock)
(4, "active", "washable", 0), # INVALID (active, no wash, washable)
(5, "superseded", "washable", 9), # invalid (not active)
]
db.executemany("INSERT INTO entries VALUES (?,?,?,?)", rows)
db.commit()
cases = []
for name, ids in [("all_valid", [1, 2, 3]), ("mixed", [1, 2, 4]),
("with_missing", [1, 999]), ("empty", []),
("all_invalid", [4, 5])]:
fetched = []
for eid in ids:
r = db.execute("SELECT status, rock_status, wash_count FROM entries WHERE id=?", (eid,)).fetchone()
if r:
fetched.append(dict(r))
cases.append({
"fn": "fama", "name": name,
"input": {"rows": fetched, "count": len(ids)},
"expected": {"fama": dc.compute_fama(db, "q", ids)},
})
out = {"oracle": "drift_core.compute_fama (live)", "generated": "2026-10-08", "cases": cases}
(REPO / "src/go/drift-core" / "truth_fama.json").write_text(json.dumps(out, indent=1) + "\n")
print(f"wrote {len(cases)} cases")
if __name__ == "__main__":
main()