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)