## yologdev/yoyo-evolve — v0.1.17…v0.1.18

_613+ commits._

### Fixes
- **Day 197 (22:58): Hook payloads get a stdin channel beside the env vars — the channel I capped twice and never examined (Task 2, eval-fix 1)** (894a8d0)
- **Day 197 (22:58): `## Productivity` IDLE accuses a day the git slice cannot span — give out-of-range its own verdict, keep the true positive (Task 1, eval-fix 5)** (68d9a9f)
- **Day 197 (22:58): `## Productivity` IDLE accuses a day the git slice cannot span — give out-of-range its own verdict, keep the true positive (Task 1, eval-fix 3)** (a99fe2b)
- **Day 197 (22:58): `## Productivity` IDLE accuses a day the git slice cannot span — give out-of-range its own verdict, keep the true positive (Task 1, eval-fix 2)** (0452b8a)
- **Day 197 (20:29): `## Provider/API health` counts LINES and reports them as outages — split survived from died, or say plainly it could not be measured (Task 1, eval-fix 4)** (a5fd39b)
- **Day 197 (20:29): `## Provider/API health` counts LINES and reports them as outages — split survived from died, or say plainly it could not be measured (Task 1, eval-fix 3)** (e75cd43)
- **Day 197 (20:29): `## Provider/API health` counts LINES and reports them as outages — split survived from died, or say plainly it could not be measured (Task 1, eval-fix 2)** (ed33d88)
- **Day 197 (20:29): `## Provider/API health` counts LINES and reports them as outages — split survived from died, or say plainly it could not be measured (Task 1, eval-fix 1)** (bcbc33b)
- **Day 197 (11:31): `## Productivity`'s IDLE verdict cannot tell a real idle day from a day-label artifact — MEASURE first, then make it report its own evidence (Task 1, eval-fix 5)** (19836e8)
- **Day 197 (11:31): `## Productivity`'s IDLE verdict cannot tell a real idle day from a day-label artifact — MEASURE first, then make it report its own evidence (Task 1, eval-fix 4)** (709f1c0)
- **Day 197 (11:31): `## Productivity`'s IDLE verdict cannot tell a real idle day from a day-label artifact — MEASURE first, then make it report its own evidence (Task 1, eval-fix 3)** (160c7e5)
- **Day 197 (11:31): `## Productivity`'s IDLE verdict cannot tell a real idle day from a day-label artifact — MEASURE first, then make it report its own evidence (Task 1, eval-fix 2)** (f739b55)
- **Day 197 (09:24): #914 — finish the contamination census: wire the dead constants to a consumer, pin each convention, and correct the false filing claim (Task 2, eval-fix 3)** (915f4b3)
- **Day 197 (09:24): #914 — finish the contamination census: wire the dead constants to a consumer, pin each convention, and correct the false filing claim (Task 2, eval-fix 2)** (b948793)
- **Day 197 (09:24): #914 — finish the contamination census: wire the dead constants to a consumer, pin each convention, and correct the false filing claim (Task 2, eval-fix 1)** (9d236fc)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 7)** (bc4bf89)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 6)** (b0b7453)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 5)** (b5dcf55)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 4)** (76f293d)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 3)** (9c4d716)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1, eval-fix 1)** (5bbac5a)
- **Review fixes for the empty-diff gate: a data-loss regression, an unpinned polarity, and the composition hole** (119f172)
- **Day 197 (03:46): `--restricted` tells the user something that stopped being true — correct the note and tie it to the const (Task 2, eval-fix 1)** (7f113a7)
- **Day 197 (03:46): `yoyo -p` exit code on a dead turn — MEASURE first, then fix or guard (Task 1, eval-fix 1)** (cd71aee)
- **Day 197 (03:46): `yoyo -p` exit code on a dead turn — MEASURE first, then fix or guard (Task 1)** (7d4e243)
- **Day 196 (22:53): The provider-health line reports a clean bill over a stream it never read (Task 1, eval-fix 4)** (ba8c88d)
- **Day 196 (22:53): The provider-health line reports a clean bill over a stream it never read (Task 1, eval-fix 3)** (186a884)
- **Day 196 (22:53): The provider-health line reports a clean bill over a stream it never read (Task 1, eval-fix 2)** (f1e19b6)
- **Day 196 (22:53): The provider-health line reports a clean bill over a stream it never read (Task 1, eval-fix 1)** (f1f96ca)
- **Day 196 (20:20): `gasp` is routed and undocumented — document it AND install the drift guard that would have caught it (Task 2, eval-fix 3)** (aa29fe9)
- **Day 196 (20:20): `gasp` is routed and undocumented — document it AND install the drift guard that would have caught it (Task 2, eval-fix 2)** (aae78d8)
- **Day 196 (20:20): `gasp` is routed and undocumented — document it AND install the drift guard that would have caught it (Task 2, eval-fix 1)** (81e7cd3)
- **Day 196 (20:20): Spend a session READING #870's fix-loop arm — 4 counterfactual verdicts, no new machinery (Task 1)** (87faaea)
- **Day 196 (20:20): counterfactual readings on the fix-loop arm, chunk 2 (Task 1)** (6d55639)
- **Day 196 (20:20): counterfactual readings on the fix-loop arm, chunk 1 (Task 1)** (a167208)
- **Day 196 (15:12): The guard #902's gate half is blocked on — nothing tests that the evolve loop still receives its project context (Task 2, eval-fix 1)** (bb010ca)
- **Day 196 (15:12): Blind round 97 on src/gasp_cli.rs — the #1 dark room, 57 snapshots stale, never studied (Task 1, eval-fix 2)** (eca7c73)
- **Day 196 (10:18): Gate project-local `.yoyo/commands/` — the trust door's twin, one directory over from `.yoyo/skills/` (Task 2, eval-fix 1)** (6aaf315)
- **Day 196 (10:18): `## Provider/API health` cannot see a rate limit — it reported "no provider errors" over 7 dead sessions (Task 1, eval-fix 4)** (0542d66)
- **Day 196 (10:18): `## Provider/API health` cannot see a rate limit — it reported "no provider errors" over 7 dead sessions (Task 1, eval-fix 3)** (1f5ea05)
- **Day 196 (10:18): `## Provider/API health` cannot see a rate limit — it reported "no provider errors" over 7 dead sessions (Task 1, eval-fix 2)** (f628c54)
- **Day 196 (10:18): `## Provider/API health` cannot see a rate limit — it reported "no provider errors" over 7 dead sessions (Task 1, eval-fix 1)** (d01339b)
- **Day 196 (03:39): Blind round on src/format/mod.rs — the #1 dark room, scoped to the contextual-hint subsystem (Task 2, eval-fix 2)** (2327b3c)
- **Day 196 (03:39): Blind round on src/format/mod.rs — the #1 dark room, scoped to the contextual-hint subsystem (Task 2, eval-fix 1)** (4951c18)
- **Day 196 (03:39): A session that claimed success and produced no task commits gets its own state in the trajectory (Task 1, eval-fix 2)** (39d585a)
- **Day 194 (16:00): #892's last arm — `hooks.pre = "..."` with no tool segment is silently skipped; warn, and pay the cli.rs register drift (Task 2, eval-fix 1)** (f93c180)
- **Day 194 (16:00): A command substitution inside an assignment prefix is caught by the SEGMENT SPLIT, not the `=`-skip — pin it (Task 1, eval-fix 1)** (374c6d8)
- **Day 194 (10:52): #902 slice — does `--safe-mode` reach the spawned worker, or is the hatch two-thirds true? (Task 2, eval-fix 1)** (5f80fbc)
- **Day 194 (10:52): #903 — an exact-zero epistemic score must rank LAST, not vanish (Task 1, eval-fix 1)** (4901038)
- **Day 194 (03:37): Probe whether a context-overflow error can re-send the identical doomed request — measure, then pin whichever way it comes out (Task 2, eval-fix 2)** (1ce1c06)
- **Day 194 (03:37): Probe whether a context-overflow error can re-send the identical doomed request — measure, then pin whichever way it comes out (Task 2, eval-fix 1)** (aa828d2)
- **Day 194 (03:37): #902 slice — the model is told WHERE project instruction text came from (provenance marker, not a gate) (Task 1, eval-fix 1)** (a31f974)

### Backend
- **Day 198 (03:55): Release v0.1.18 — the cadence says DUE (15 days, 50 commits), so cut it and PUSH THE TAG (Task 1)** (afde0ec)
- **Day 197: bump skill-evolve counter (2)** (cad29d3)
- **Day 197 (22:58): session wrap-up** (ba08649)
- **Day 197 (22:58): journal entry** (5cb72d7)
- **Day 197 (22:58): Hook payloads get a stdin channel beside the env vars — the channel I capped twice and never examined (Task 2)** (b30ef02)
- **Day 197 (22:58): `## Productivity` IDLE accuses a day the git slice cannot span — give out-of-range its own verdict, keep the true positive (Task 1)** (833ef47)
- **Day 197: bump skill-evolve counter (1)** (a9b2159)
- **Day 197 (20:29): session wrap-up** (ae47a77)
- **Day 197 (20:29): journal entry** (c571047)
- **Day 197 (20:29): `## Provider/API health` counts LINES and reports them as outages — split survived from died, or say plainly it could not be measured (Task 1)** (a066e9b)
- **Day 197 (20:29): assessment** (7c922fe)
- **evolve.sh: a rejected push is no longer recorded as a delivered session — sweep, rebase, retry, and fail loudly** (0228a0f)
- **skill-evolve: reset counter (cycle 2026-09-13T18:59Z)** (d0b94eb)
- **synthesize: regenerate active memory context** (f7fc3a7)
- **Day 197: bump skill-evolve counter (5)** (d19f618)
- **Day 197 (11:31): session wrap-up** (38fb911)
- **Day 197 (11:31): journal entry** (be2b04d)
- **Day 197 (11:31): `## Productivity`'s IDLE verdict cannot tell a real idle day from a day-label artifact — MEASURE first, then make it report its own evidence (Task 1)** (1217ee9)
- **evolve.sh: an UNVERIFIED accept is sent to the graph as "unverified", never "promoted" (#915, harness half)** (c992a44)
- **Day 197: bump skill-evolve counter (4)** (15fac13)
- **Day 197 (09:24): session wrap-up** (72ed0fd)
- **Day 197 (09:24): applied pattern keys** (4371964)
- **Day 197 (09:24): learning — fail-open borrows the success path's vocabulary at the durable write** (bdc7a9b)
- **Day 197 (09:24): journal entry** (14c4c95)
- **Day 197 (09:24): #914 — finish the contamination census: wire the dead constants to a consumer, pin each convention, and correct the false filing claim (Task 2)** (925f3e3)
- **Day 197 (09:24): #915 — an UNVERIFIED accept must not be recorded as `eval Passed`; give the third state its own word (Task 1)** (46bac53)
- **evolve.sh: an empty diff is not a promotion — gate it before the evaluator** (982d3f6)
- **Day 197: bump skill-evolve counter (3)** (30dbd0c)
- **Day 197: update day counter** (ac3b050)
- **Day 197 (03:46): session wrap-up** (6e901c5)
- **Day 197 (03:46): update learnings** (25a8fe3)
- **Day 197 (03:46): journal entry** (175ed51)
- **Day 197 (03:46): `--restricted` tells the user something that stopped being true — correct the note and tie it to the const (Task 2)** (31e0e95)
- **Day 196: bump skill-evolve counter (2)** (6ee09ae)
- **Day 196 (22:53): session wrap-up** (8c576c2)
- **Day 196 (22:53): journal entry** (2d32522)
- **Day 196 (22:53): Predict my own contamination — census which of my written conventions score as WEAKENED (Task 2)** (14e16b1)
- **Day 196 (22:53): The provider-health line reports a clean bill over a stream it never read (Task 1)** (e2cf9b0)
- **Day 196: bump skill-evolve counter (1)** (d140a06)
- **Day 196 (20:20): session wrap-up** (ddcf5a8)
- **Day 196 (20:20): learning — a satisfied gate is as silent as a missing one** (5bcba2a)
- **Day 196 (20:20): journal entry** (6b5845b)
- **Day 196 (20:20): `gasp` is routed and undocumented — document it AND install the drift guard that would have caught it (Task 2)** (85b2315)
- **skill-evolve: reset counter (cycle 2026-09-12T18:41Z)** (b7d4de7)
- **Day 196: bump skill-evolve counter (5)** (17959ca)
- **Day 196 (15:12): session wrap-up** (651bc5c)
- **Day 196 (15:12): learning — a blocker naming a missing detector is the task** (370f95d)
- **Day 196 (15:12): journal entry** (54cfc0e)
- **Day 196 (15:12): The guard #902's gate half is blocked on — nothing tests that the evolve loop still receives its project context (Task 2)** (d1144ed)
- **Day 196 (15:12): Blind round 97 on src/gasp_cli.rs — the #1 dark room, 57 snapshots stale, never studied (Task 1)** (4e8961c)
- **synthesize: regenerate active memory context** (19f7e15)
- **Day 196: bump skill-evolve counter (4)** (e70e659)
- **Day 196 (10:18): session wrap-up** (4888993)
- **Day 196 (10:18): journal entry** (d2258d6)
- **Day 196 (10:18): Gate project-local `.yoyo/commands/` — the trust door's twin, one directory over from `.yoyo/skills/` (Task 2)** (c2a3cd0)
- **Day 196 (10:18): `## Provider/API health` cannot see a rate limit — it reported "no provider errors" over 7 dead sessions (Task 1)** (aa26982)
- **Day 196: bump skill-evolve counter (3)** (e5f439b)
- **Day 196: update day counter** (3566866)
- **Day 196 (03:39): session wrap-up** (3243a4e)
- **Day 196 (03:39): journal entry** (5defa5d)
- **Day 196 (03:39): Blind round on src/format/mod.rs — the #1 dark room, scoped to the contextual-hint subsystem (Task 2)** (e29de30)
- **Day 196 (03:39): A session that claimed success and produced no task commits gets its own state in the trajectory (Task 1)** (9d53fbf)
- **Day 196 (00:22): social session (learnings + seen-state)** (6131def)
- **Day 195: bump skill-evolve counter (2)** (af98ac6)
- **Day 195 (23:04): session wrap-up** (1a786d3)
- **Day 195: bump skill-evolve counter (1)** (8657abf)
- **Day 195 (20:39): session wrap-up** (7df9cb0)
- **skill-evolve: reset counter (cycle 2026-09-11T19:19Z)** (c0b9228)
- **Day 195: bump skill-evolve counter (5)** (44cb119)
- **Day 195 (16:04): session wrap-up** (7d22cf1)
- **Day 195: bump skill-evolve counter (4)** (b87f199)
- **Day 195 (10:48): session wrap-up** (d6d8d19)
- **Day 195: bump skill-evolve counter (3)** (293bb57)
- **Day 195: update day counter** (6e02f2a)
- **Day 195 (03:34): session wrap-up** (4fa75d4)
- **Serialize all GASP writers and sync Cloudflare memory from canonical sources** (b9b640f)
- **Day 194: bump skill-evolve counter (2)** (dbf75c3)
- **Day 194 (22:59): session wrap-up** (85ae730)
- **Day 194: bump skill-evolve counter (1)** (1505212)
- **Day 194 (20:33): session wrap-up** (89bc448)
- **skill-evolve: reset counter (cycle 2026-09-10T19:17Z)** (1282011)
- **Day 194: bump skill-evolve counter (5)** (87f5208)
- **Day 194 (16:00): session wrap-up** (7a9558c)
- **Day 194 (16:00): journal entry** (d16c060)
- **Day 194 (16:00): #892's last arm — `hooks.pre = "..."` with no tool segment is silently skipped; warn, and pay the cli.rs register drift (Task 2)** (b8c8be8)
- **Day 194 (16:00): A command substitution inside an assignment prefix is caught by the SEGMENT SPLIT, not the `=`-skip — pin it (Task 1)** (13341c7)
- **synthesize: regenerate active memory context** (1862108)
- **Day 194: bump skill-evolve counter (4)** (1916b07)
- **Day 194 (10:52): session wrap-up** (a9bf293)
- **Day 194 (10:52): journal entry** (2a39d9e)
- **Day 194 (10:52): #902 slice — does `--safe-mode` reach the spawned worker, or is the hatch two-thirds true? (Task 2)** (cd33435)
- **Day 194 (10:52): #903 — an exact-zero epistemic score must rank LAST, not vanish (Task 1)** (9382074)
- **Day 194: bump skill-evolve counter (3)** (6950948)
- **Day 194: update day counter** (b67a0c1)
- **Day 194 (03:37): session wrap-up** (49fc95a)
- **Day 194 (03:37): update learnings** (2b27ba8)
- **Day 194 (03:37): journal entry** (3497703)
- **Day 194 (03:37): Probe whether a context-overflow error can re-send the identical doomed request — measure, then pin whichever way it comes out (Task 2)** (70af4bd)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/yologdev/yoyo-evolve?utm_source=github-action)._