iterion

Evoly (evolve) — bot run bilan

Strategic / architectural evolution partner. Surveys a mature repo, accumulates a long-horizon vision in per-bot memory across sessions, elicits operator context, and proposes evolutions as dispatch-ready backlog tickets + findings for Nexie. See bots/evolve/README.md. Append newest-first.


2026-06-22 — PARKED: gpt-5.5 forfait context-overflow in review fan-out (run 019ef05e-90ff)

2026-06-13 — mid-turn ask_user restored + validated (run 019ec2f6)

2026-06-13 — first dogfood: per-bot memory + full pipeline (runs 019ec1d5, 019ec1dc)

Headline feature PROVEN live: per-bot cross-session memory

Findings / engine hardening

  1. (ENGINE BUG, HIGH — FIXED) mid-turn ask_user failed on schema+tools interaction nodes. The bot’s first design used interaction: human on the investigate agent to ask mid-turn via the ask_user MCP tool. On claw+openai it failed: instead of pausing, the run hit openai 400: No tool output found / tool_call_ids did not have response messages.
    • Root cause (iterion, NOT claw-code-go). Reproduced minimally: ask_user pauses fine on a node WITHOUT an output schema, but FAILS on one WITH a schema. ClawExecutor (executor.go) ran schema validation BEFORE the _needs_interaction short-circuit. The pause Result ({_needs_interaction:true, …}) is a control signal, not schema data, so ValidateOutput failed → triggered the schema-validation backend RETRY → the retry replayed the unanswered tool_call into a fresh generation → orphaned function_call → 400. (My earlier “claw-code-go intercepts ask_user” hypothesis was wrong — instrumented logging showed errors.As matched and the pause Result was returned correctly; a higher layer re-invoked.)
    • Fixed in pkg/backend/model/executor.go (move the interaction short-circuit ahead of schema validation) + regression test TestDelegation_InteractionSignalSkipsSchemaValidation. Verified live: a schema+tools+interaction node now pauses on ask_user and resumes to a valid structured output. Commit e93ccc1b (on main).
    • Evoly impact: the ask_brief graph-level human node shipped as a workaround and still works; it can now optionally revert to the original mid-turn ask_user design (set interaction: human on investigate + restore the ask_user prompt).
  2. (BOT BUG, fixed) reviewers needed readonly: true. The two parallel judge reviewers had mutation-capable tools (bash) without readonly, so the workspace-safety guard rejected 2 mutating parallel branches. Added readonly: true to both (they only inspect). Lesson for any fan-out of tool-equipped judges: mark them readonly.
  3. (BOT BUG, fixed) review prompts referenced a whole-node output. The reviewers’ verdicts revealed they received the *literal unsubstituted ** token — so they reviewed nothing (and correctly withheld approval). Root cause: in a **prompt body**, (a whole node output) does NOT resolve — only does — whereas edge `with` mappings DO resolve whole-output refs (that's why human_review got the full vision via `carry_vision.vision`). Fixed: the review prompts now reference the edge-mapped. *Underlying engine asymmetry worth noting: whole-output `` resolves in an edge with but silently no-ops in a prompt body (and structured outputs render as Go map[...], not JSON, in prompts/forms).
  4. (BOT BUG, fixed) findings scope keyed off WorkDir, not RepoRoot. propose_evolutions wrote its 9 findings to projects/<WORKTREE-key>/memory/findings/, while the board tickets and Nexie’s inbox live at the stable <REPO-ROOT-key>. The per-bot vision scope (visibility: bot) correctly re-roots to RepoRoot; the findings scope used the bare legacy form (→ WorkDir), which diverges under a git worktree. In normal (non-worktree) use they coincide, but fixed by adding visibility: "project" to the findings block (re-roots to RepoRoot, matching the board + Nexie). Validated by analogy to the vision scope, whose RepoRoot keying is proven live.
  5. (NIT) iterion validate is more lenient than iterion run. A literal `` mention in a prompt body (documentation text) passed validate but failed run with C004 unknown reference namespace. Validate should catch C004 too. (Fixed in the bot by de-bracing.)

Dogfood side-effect: this validation created 9 real backlog tickets on the local main-repo board (gitignored .iterion/dispatcher/). They are genuine, useful iterion-evolution proposals, but their finding-file links point at the (ephemeral) worktree key — dispatch or delete them, then re-run Evoly from the main checkout for cleanly-keyed output.

Lessons for next run