Harden the i472 trajectory storage-contract gate: finiteness/type-check the 6 raw-logit leaf fields + AST gate-before-write ordering pin
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Follow-up capture from #576 round-2 reconciler (epm:review-reconcile v2, deferred concern trajectory-gate-presence-only-validation).
The storage-contract gate added in #576 r2 (assert_trajectory_slot_records_meet_storage_contract, src/explore_persona_space/experiments/contrastive_neg_geometry_472/eval_trajectory.py) is presence-only (leaf.get(k) is None): a NaN raw-logit value (corrupted adapter/forward pass) survives float(tensor.item()) and persists in the final canonical artifact. Non-numeric strings are unreachable (single producer emits float(...item())), so this is the NaN half only — adjudicated real-but-non-blocking, low recoverable cost (adapters persist on HF).
Asks (reconciler standing recommendations 1-2, ~3 lines + 1 test):
- Extend the gate to require each of the 6
TRAJECTORY_LOGIT_LEAF_KEYSbe a finite, non-bool float (mirror_is_finite_numberineval/marker_logprob.py). Alternative one-line backstop noted:allow_nan=Falseon the finaljson.dumps. - Extend the AST pin in
tests/test_marker_slot_contract.pyto assert the gate call precedesout_path.write_textinsiderun_trajectory_eval(currently pins call count only). - Optional minors carried from review:
assert checkpointsagainst degenerate empty input.
Constraint: validate_marker_slot_record semantics stay untouched (live consumers #542/#597).