why tasks live in the past

Today's skills, yesterday's problems

When you run /evolve (or /prune), it does not test your latest code. It rewinds to the exact moments things were broken and asks: can my skills solve these now? Here's why that's the only thing worth measuring.

The code travels back to each bug  ยท  the skills stay fixed at today.

Your history, and the bugs you saved

Every time you fixed something, /harvest pinned a task to the commit just before the fix: the last moment the bug was alive.

git history time โ†’ Mar ๐Ÿ› broker, before fix Task 01 "fix the broker" replay starts at: โ†‘ this commit (broken) the bug is alive here Jun ๐Ÿ› parser, before fix Task 02 "fix the parser" replay starts at: โ†‘ this commit (broken) a different point in time Sep ๐Ÿ› calc, before fix Task 03 "fix the calculator" replay starts at: โ†‘ this commit (broken) another point again TODAY = HEAD your skills + rules every bug here is already fixed: nothing to solve โ—† you are here
Three bugs, fixed months apart, became three tasks, each pinned to the last commit where that bug was still alive (its base_sha: the commit right before the fix). At HEAD (today) they're all already fixed, so there's nothing left to solve there.

What /evolve actually does

It carries today's skills backwards to each bug, and checks whether they can fix it.

time โ†’ Mar ยท broker broken code Jun ยท parser broken code Sep ยท calc broken code TODAY'S SKILLS base (as-is) cand (+ new) frozen at today rewind โ†’ drop today's skills onto the bug
Each dot carries today's skills back in time to a bug and tries to fix it: base without the new skill, cand with it (in /prune: cand is today's set minus one item). The code is old; the skills are today's. That's the whole experiment. Any skills, rules or CLAUDE.md that were committed at the old commit are replaced by today's before every run, so the old code never runs old instructions. All of it happens in throwaway clones: your working copy is never touched.

Why not just test at HEAD?

Because you are not checking your code. You are checking whether Claude can solve problems.

โœ— testing at HEAD

Everything's already fixed

At today's commit, every past bug is gone. Claude is handed a working repo and has nothing to do, so every task "passes" and you learn nothing about your skills.

at HEAD (today): task 01โœ“ already fixed task 02โœ“ already fixed task 03โœ“ already fixed

Result: a perfect score that means nothing.

โœ“ rewinding to each bug

Real problems to solve

At each bug's own commit, the problem is live again, and every run proves it first: the task's check must fail before Claude starts, or the run is thrown out. Now the score is real: it shows whether your skills actually help Claude fix things it couldn't before.

rewound to each bug: task 01โœ— broken โ†’ try task 02โœ— broken โ†’ try task 03โœ— broken โ†’ try

Result: a score you can actually trust.

The optional judge: quick advice, never the verdict

Optionally, Cortex can ask a calibrated model (Jev) what to try. It never asks it what the result was, and the two live on very different time scales.

PROPOSE · optional · changes WHICH candidate is tried session filter ~0.2 s cortex scope: under 1 s theme census: tens of seconds time (log) → 0.1s1s 10s1 min 10 min1 h one rollout ~1 min a sweep: minutes to tens of min MEASURE the cost DECIDE · cortex score · gates 0–5 · check.sh · preflight: no model of any kind, in either mode
Every dashed box is a proposal: it changes which candidate, theme or ordering is tried, and it is skipped when Jev is off: each step falls back to what it did before the judge existed, and the flow continues to the same place. The times are orders of magnitude, not measurements. The solid boxes are where the money goes. The bottom lane is the verdict, and it contains no model at all: bin/score.sh, preflight.sh and sweep.sh have no Jev import, no Jev field and no Jev flag, and the test suite asserts it. Turning the judge on cannot change a KEEP into a KILL.

Cortex isn't asking "does my code work today?"
It's asking "do my skills help Claude solve real problems?"

So it re-opens old, already-solved problems as fresh challenges, each at the moment it was hard, and measures how today's skills cope.