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.
62 lines
1.8 KiB
Python
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()
|