Files
rune/scripts/gen_hook_placement_truth.py
T
Nick 4c1b13e61a feat(go): factory batch 4 — hook placement mechanics (contract BUILDER-2026-10-07T23:06:18Z-ec6208-unknown)
RecommendPlacement ported verbatim to hook-engine: the decision table
(hook points with append-order shape, the frequency ladder, cache
scopes, concurrency, failure modes, context budget) + the
HOOK_*/FREQ_*/SCOPE_* constants. 14-case factor-matrix battery from the
live oracle — first-run green. The factory continues.
2026-10-08 00:09:18 +01:00

62 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""gen_hook_placement_truth.py — factory batch 4 truth battery
(contract BUILDER-2026-10-07T23:06:18Z-ec6208).
The LIVE recommend_placement oracle over a factor matrix covering every
branch: hook-point combos, frequency ladder, cache scopes, concurrency,
failure modes, context budget.
Usage: python3 scripts/gen_hook_placement_truth.py (from repo root)
"""
import json
import sys
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 hook_engine as he # noqa: E402
def main():
factor_sets = [
{"output_dep": True},
{"input_dep": True},
{"input_dep": True, "output_dep": True},
{},
{"side_effects": "read-write"},
{"volatility": "session"},
{"volatility": "per-turn"},
{"scope": "persistent"},
{"scope": "session"},
{"concurrent": True},
{"failure": "fail-loud"},
{"context_budget": 500},
{"input_dep": True, "scope": "session", "concurrent": True,
"context_budget": 250},
{"side_effects": "read-write", "failure": "fail-loud",
"scope": "persistent"},
]
cases = []
for i, factors in enumerate(factor_sets):
cases.append({
"fn": "placement", "name": f"matrix_{i}",
"input": {"factors": factors},
"expected": he.recommend_placement(f"hook_{i}", factors),
})
out = {
"oracle": "src/rune/hook_engine.py recommend_placement (live)",
"generated": "2026-10-07",
"cases": cases,
}
target = REPO / "src/go/hook-engine" / "truth_placement.json"
target.write_text(json.dumps(out, indent=1, ensure_ascii=False) + "\n")
print(f"wrote {target} ({len(cases)} cases)")
if __name__ == "__main__":
main()