Commit graph

4 commits

Author SHA1 Message Date
0xrsydn
bf41945ef9 fix(policy): reconcile session-owned action memory with game observations 2026-09-22 15:18:00 +07:00
0xrsydn
3f243eaeee fix(bot): correct combat estimates and enforce client and runner failures 2026-09-22 15:18:00 +07:00
0xrsydn
17cb02a147 feat(run): log every decision with the answers and the run outcome
`JEV_TRACE` alone cannot be joined to a decision: it records a time to the
second and the answers, with no run, step or action, so nothing in it can be
traced back to a run.

Wrap the client in `RecordingClient` so the last call's questions and answers
travel with the decision row they produced, and give each process a
`SESSION_ID` so rows from two sessions in the same second stay apart. Diff the
history directory before and after a session to attribute the run records it
produced.

What this supports is arm-level analysis: this decision belongs to this session,
and the session's outcome is the run file. It does NOT say whether an individual
answer was correct -- one run result attached to one step cannot label that
step. Per-decision accuracy needs replay, expert judgement, or ground truth the
code can verify on its own (lethal, legality, affordability).

A decision that asked nothing must carry no answers, so `client.last` is
cleared before each decide(); otherwise rows silently inherit the previous
step's answers.
2026-09-22 06:06:06 +07:00
0xrsydn
41e3ea4a2b Add run loop with decision trace logging
observe -> decide -> act loop: Timeline preflight, stuck detection,
duplicate-action suppression, deck snapshot persistence. Appends one
JSON line per decision and per rejected action to
capture/decisions.jsonl for tail -f.
2026-09-22 00:02:11 +07:00