It did one more weird thing where it seemed to lose the ability to count in order: =====
You're right that hard per-action gating causes loops. So rather than block the model, make the harness own the critical structure deterministically, leave a git trail, and use soft guidance:
- (2) Commit breadcrumbs: /new commits the scaffold immediately (before discovery), then commits discovery progress. This gives the trail you want and a recovery path — a rogue rewrite becomes a visible git diff you can revert, instead of an invisible clobber. This is better than gating for your concern. - (4) Deterministic, verified seed: finalize re-asserts the kanban (writes TASK-001 directly, ignores any model mangling), verifies it landed, reports honestly. The harness guarantees structure regardless of what the model did. - (3) Soft-constrain discovery: prompt says "the .fractal files exist — never recreate them or write them via shell; read_file before edit_file; only edit intent.md/constraints.md." Guidance, not a hard gate. - (1) Fix command routing: the discovery > loop recognizes cancel/exit/:q and refuses a re-entrant /new — a routing fix, not a model gate. This alone would have prevented Run 2's disaster.
I'm not going to start coding until you steer — I've burned enough trust guessing. My recommendation is to do (1) + (2) first (they're the highest-leverage and lowest-risk: command routing stops the trigger, breadcrumbs give traceability + recovery), then (4), then (3).
=====
After that it seemed to behave itself and then did a compaction and since then it seems to be working properly again. Very odd. (and disconcerting)