Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

yoyo evolve Integration

yoyo evolve is the first serious use case for yoagent-state.

It needs to grow a project while preserving why each change exists.

Growth loop

The intended loop is:

record goal
create task
observe project
record snapshot reference
run agent task or eval
observe failure
create hypothesis
propose patch
attach artifacts
apply patch in branch or worktree
run eval
record eval result
decide approve or reject
promote if approved
record lineage
flowchart LR
  goal["goal"]
  task["task"]
  snapshot["project snapshot"]
  failure["failure"]
  hypothesis["hypothesis"]
  patch["patch"]
  artifact["diff artifact"]
  eval["eval result"]
  decision["decision"]
  promoted["promoted patch"]

  task -- serves --> goal
  snapshot -- references --> task
  failure -- blocks --> goal
  hypothesis -- explains --> failure
  patch -- addresses --> failure
  patch -- advances --> goal
  patch -- references --> artifact
  patch -- validated_by --> eval
  patch -- approved_by --> decision
  decision --> promoted

What yoagent-state tracks

For a project yoyo is improving, the state layer should track:

  • why a module exists
  • why a dependency was added
  • what goal and task the change served
  • what test validates behavior
  • what failure caused a patch
  • what decision approved it
  • what assumptions became stale
  • what version introduced behavior

Concrete project diffs remain external. Reference them with ArtifactRef and ProjectRef.

Demo

Run:

cargo run --example yoyo_evolve_demo

The demo records:

  • a retry failure
  • a base project reference
  • a diff artifact
  • changed file relations
  • an eval result
  • a human approval decision
  • a promoted patch status

The resulting lineage includes:

patch_retry_timeout
addresses -> failure_retry_timeout
modifies -> file:crates/yoagent-runtime/src/tool.rs
modifies -> file:crates/yoagent-runtime/tests/retry.rs
validated_by -> eval_retry_timeout
approved_by -> decision_promote_retry_timeout
flowchart LR
  patch["patch_retry_timeout"]
  failure["failure_retry_timeout"]
  source["file:crates/yoagent-runtime/src/tool.rs"]
  test["file:crates/yoagent-runtime/tests/retry.rs"]
  eval["eval_retry_timeout"]
  decision["decision_promote_retry_timeout"]

  patch -- addresses --> failure
  patch -- modifies --> source
  patch -- modifies --> test
  patch -- validated_by --> eval
  patch -- approved_by --> decision

Implementation rule

Do not hide mutation.

Every meaningful project change should have:

  • a patch
  • an artifact reference
  • evidence or expected effect
  • an eval or approval decision before promotion

That makes yoyo’s project growth inspectable instead of magical.