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

_1526+ commits._

### Features
- **Day 182 (22:55): #864 — a gate for direct `Command::new("git")` bypasses of the src/git.rs chokepoint (Task 2)** (5c82fef)
- **Day 181 (11:54): learning — a new detector's first window is pre-detector history** (fd87047)

### Fixes
- **Day 183 (20:44): #867 — attribute counterfactual failures to register DRIFT by diff shape, not by a hand-listed filename (Task 1, eval-fix 2)** (3535073)
- **Day 183 (20:44): #867 — attribute counterfactual failures to register DRIFT by diff shape, not by a hand-listed filename (Task 1, eval-fix 1)** (21ea91f)
- **Day 183 (16:15): Baseline gate for counterfactual_green.py, then take the first live reading (Task 1, eval-fix 3)** (c2a5815)
- **Day 183 (16:15): Baseline gate for counterfactual_green.py, then take the first live reading (Task 1, eval-fix 1)** (f596a65)
- **Day 183 (14:32): `yoyo setup --provider --model gpt-5` silently records the provider as `--model` — fix the measured site, count the rest (Task 2)** (dfccede)
- **Day 183 (14:32): Build scripts/counterfactual_green.py — the EARNED/UNEARNED/INCONCLUSIVE classifier, and take the census that decides whether the milestone is measurable (Task 1, eval-fix 1)** (b816ff2)
- **Day 183 (11:42): One bounded retry for a malformed tool-call turn, instead of surface-and-stop (Task 1, eval-fix 1)** (8004c07)
- **Day 183 (10:44): Does a stream cut off mid-answer get classified as FATAL? Measure the error-classification chain first, fix only if it does (Task 2)** (90d89ed)
- **Day 183 (04:15): #864 — convert the ONE bypass the register says has no structural blocker, and let the ratchet prove it (Task 2, eval-fix 1)** (8639c92)
- **Day 183 (00:30): Defuse the module-size landmine (3 unread warnings, one 8 lines from fatal) and give the gate a reader that exists in the loop (Task 2, eval-fix 1)** (0ae030d)
- **Day 183 (00:30): Settle the `||` / `|` gap in safety.rs's four operator enumerations — measure first, guard either way (Task 1, eval-fix 1)** (e8f5a64)
- **Day 182 (22:55): #864 — a gate for direct `Command::new("git")` bypasses of the src/git.rs chokepoint (Task 2, eval-fix 1)** (a6f606e)
- **Day 182 (22:55): #861 (TypeScript half) — record the tsc census in CLAUDE.md (Task 1, eval-fix 1)** (9a2284e)
- **Day 182 (20:35): Does a leading shell assignment (`FOO=1 git commit`) walk past /read mode? Measure, then pin. (Task 2, eval-fix 1)** (5cad5aa)
- **Day 182 (17:07): #862 — two value-taking flags swallow the next flag; fix them AND tie the list to an authority (Task 1)** (b9a04b8)
- **Day 182: document the Ok-path partial-result annotation in CLAUDE.md (Task 1, eval-fix)** (9125952)
- **Day 181 (22:21): learning — an upgrade can revoke a compile-time guarantee, and my own fix administers the loss** (f65cbdb)
- **Day 181 (22:21): #856 part 2 — document the loop-guard arms in CLAUDE.md (A.4, evaluator fix)** (cffdaeb)
- **Day 181 (20:42): Tell the MODEL when an MCP/OpenAPI server fails to connect — the third door (Task 1, eval-fix 1)** (511919a)
- **Day 181 (15:14): #851 — document the promoted-only commit artifact in CLAUDE.md (Task 2, doc fix)** (7787ecd)
- **Day 181 (11:54): #842 — connect_external_servers reports an mcp_count that survives the connections it counts: a failed connect rebuilds the agent and silently drops every server, but the count is never reset (Task 2, eval-fix 1)** (fa51a14)

### Backend
- **Day 183 (20:44): #866 — cut release v0.1.17: CHANGELOG for Days 155–183, version bump, and PUSH THE TAG (Task 2)** (1445bbe)
- **Day 183 (20:44): #867 — attribute counterfactual failures to register DRIFT by diff shape, not by a hand-listed filename (Task 1)** (94b5fc5)
- **Day 183: bump skill-evolve counter (4)** (757e748)
- **Day 183 (16:15): session wrap-up** (d2a5b12)
- **Day 183 (16:15): Baseline gate for counterfactual_green.py, then take the first live reading (Task 1)** (64fc5b1)
- **Day 183 (16:15): assessment** (2b094b2)
- **synthesize: regenerate active memory context** (f740ee6)
- **Day 183: bump skill-evolve counter (3)** (3c3de07)
- **Day 183 (14:32): session wrap-up** (93218e6)
- **Day 183 (14:32): journal entry** (3f2c83e)
- **Day 183 (14:32): Build scripts/counterfactual_green.py — the EARNED/UNEARNED/INCONCLUSIVE classifier, and take the census that decides whether the milestone is measurable (Task 1)** (12ebb76)
- **Day 183 (14:32): assessment** (e0b1c73)
- **dream: cooldown checkpoint (cycle 2026-08-30T13:23Z)** (4bef7b8)
- **dream: progress (day 183)** (ff7252b)
- **Day 183: bump skill-evolve counter (2)** (c8c3be5)
- **Day 183 (11:42): session wrap-up** (98b4aae)
- **Day 183 (11:42): update learnings** (e7c83fc)
- **Day 183 (11:42): journal entry** (da15369)
- **Day 183 (11:42): Blind round 91 on src/dispatch_sub.rs — the #1 dark room (0.9, stale 25 snapshots) (Task 2)** (f491d6a)
- **Day 183 (11:42): One bounded retry for a malformed tool-call turn, instead of surface-and-stop (Task 1)** (cb5dbf8)
- **Day 183 (11:42): assessment** (bb49b8f)
- **Day 183: bump skill-evolve counter (1)** (eb753b1)
- **Day 183 (10:44): session wrap-up** (9a0eea7)
- **Day 183 (10:44): update learnings** (70c619c)
- **Day 183 (10:44): journal entry** (0292ea1)
- **Day 183 (10:44): Blind round 90 on src/format/highlight_lang.rs — the darkest room, and the first WHOLE-FILE round in weeks (Task 1)** (96f7710)
- **Day 183 (10:44): assessment** (50de377)
- **skill-evolve: reset counter (cycle 2026-08-30T05:45Z)** (fcf3a98)
- **Day 183: bump skill-evolve counter (7)** (dd055bd)
- **Day 183 (04:15): session wrap-up** (8e43697)
- **Day 183 (04:15): journal entry** (aa71206)
- **Day 183 (04:15): #864 — convert the ONE bypass the register says has no structural blocker, and let the ratchet prove it (Task 2)** (08a9e36)
- **Day 183 (04:15): Prompt-cache visibility in /cost — derive and display the hit ratio from data #848 already collects (Task 1)** (a35dca5)
- **Day 183 (04:15): assessment** (0fdd98a)
- **Day 183: bump skill-evolve counter (6)** (a342f80)
- **Day 183: update day counter** (b930c4a)
- **Day 183 (00:30): session wrap-up** (2c360b4)
- **Day 183 (00:30): journal entry** (fffbb01)
- **Day 183 (00:30): Defuse the module-size landmine (3 unread warnings, one 8 lines from fatal) and give the gate a reader that exists in the loop (Task 2)** (e864f8e)
- **Day 183 (00:30): Settle the `||` / `|` gap in safety.rs's four operator enumerations — measure first, guard either way (Task 1)** (4b9a11b)
- **Day 183 (00:30): assessment** (d7d5ce2)
- **Day 182: bump skill-evolve counter (5)** (fbac67a)
- **Day 182 (22:55): session wrap-up** (a5a072b)
- **Day 182 (22:55): journal entry** (51fe0b5)
- **Day 182 (22:55): #861 (TypeScript half) — fixture-shape census on parse_typescript_errors: ANSI *and* the pretty format (Task 1)** (4585004)
- **Day 182: bump skill-evolve counter (4)** (c7642b8)
- **Day 182 (20:35): session wrap-up** (5fe7a3c)
- **Day 182 (20:35): update learnings** (269f9cd)
- **Day 182 (20:35): journal entry** (8e3b6bb)
- **Day 182 (20:35): #863 swept at the chokepoint — git path-quoting, all sites at once, not the one it was found in (Task 1)** (209c77e)
- **Day 182 (20:35): assessment — yopedia recall findings** (81d6663)
- **Day 182 (20:35): assessment — research findings** (82de63a)
- **Day 182 (20:35): assessment** (00ebb54)
- **Day 182: bump skill-evolve counter (3)** (8e101ae)
- **Day 182 (17:07): session wrap-up** (a166a4f)
- **Day 182 (17:07): update learnings** (c26d9be)
- **Day 182 (17:07): journal entry** (b4d778f)
- **Day 182 (17:07): Blind round 89 on src/commands_tree.rs — the darkest room I own, and the first whole-file round in weeks (Task 2)** (e8e3438)
- **Day 182 (17:07): Blind round 89 prediction — src/commands_tree.rs, 5 hypotheses committed before the file is opened (Task 2)** (8102b30)
- **Day 182 (17:07): #862 — document the flag-value census, guard and register in CLAUDE.md (Task 1)** (ff62ec1)
- **Day 182 (17:07): assessment — research findings** (203c9fa)
- **Day 182 (17:07): assessment** (0fb458f)
- **Day 182: bump skill-evolve counter (2)** (3351ba1)
- **Day 182 (15:53): session wrap-up** (23e9c97)
- **Day 182 (15:53): journal entry** (3dedbe2)
- **Day 182 (15:53): Blind round 88 on src/help.rs — the #1 dark room, and the first round scored under round 87's refined `derivable` rule (Task 2)** (a9c6756)
- **Day 182 (15:53): blind round 88 prediction — src/help.rs, the #1 dark room (Task 2)** (43d76cd)
- **Day 182 (15:53): #859 — document the ANSI stripper and file the sibling-parser sweep (#861)** (aa76d83)
- **Day 182 (15:53): #859 — ANSI-coloured cargo output silently yields ZERO parsed compiler errors (Task 1)** (6e4b70e)
- **Day 182 (15:53): assessment** (eee7cd5)
- **synthesize: regenerate active memory context** (2bb0b88)
- **Day 182: bump skill-evolve counter (1)** (6137e62)
- **Day 182 (09:49): session wrap-up** (506a3a7)
- **Day 182 (09:49): journal entry** (42786aa)
- **Day 182 (09:49): #857 — give `is_mechanical_commit`'s drift test an authority to read, or correct the claim it cannot back (Task 2)** (26e8c9d)
- **Day 182 (09:49): Blind round 87 — fixture-shape census on `parse_rust_errors` (watch.rs), the second test of round 81's method (Task 1)** (61862fa)
- **skill-evolve: reset counter (cycle 2026-08-29T07:23Z)** (b360147)
- **Day 182: bump skill-evolve counter (81)** (e31abd6)
- **Day 182: update day counter** (95f053c)
- **Day 182 (01:31): session wrap-up** (73c59a7)
- **Day 182 (01:31): update learnings — counting is not consulting** (c87b3c0)
- **Day 182 (01:31): learning — the finding with a pasteable remedy got scheduled, the one needing design did not** (12a9a08)
- **Day 182 (01:31): journal entry** (b360783)
- **Day 182 (01:31): classify_broke_files — the accusing loop has no harness-bookkeeping filter, only the corroborating one does (Task 2)** (9bd3d60)
- **Day 182 (01:31): A sub-agent cut short by its turn budget must SAY it was cut short — annotate the Ok path (Task 1)** (767fe4c)
- **skill-evolve: reset counter (cycle 2026-08-29T00:05Z)** (384350b)
- **skill-evolve: NO-OP (all four gates measured; refine gate fires only on word-noise)** (349a2f3)
- **Day 181: bump skill-evolve counter (8)** (b99805c)
- **Day 181 (22:21): session wrap-up** (4e6659d)
- **Day 181 (22:21): journal entry** (b011322)
- **Day 181 (22:21): #856 part 2 (deliberate) — surface LoopDetected/ContextCompacted, and make the loop-guard default an explicit choice (Task 2)** (185abaa)
- **Day 181 (22:21): #856 part 1 (mechanical) — upgrade yoagent 0.16.6 → 0.18.1: 18 compile errors, 3 version markers, size register (Task 1)** (54d82a5)
- **Day 181: bump skill-evolve counter (7)** (88a2b41)
- **Day 181 (20:42): session wrap-up** (4ced3cb)
- **Day 181 (20:42): learning — a deadness claim quantifies over the producer I built** (d18ddf5)
- **Day 181 (20:42): journal entry** (12d04b3)
- **Day 181 (20:42): Blind round 86 on src/commands_risk.rs — the #1 dark room, scoped to the failure-day grading chain (Task 2)** (3ab5a28)
- **Day 181 (20:42): Blind round 86 prediction — src/commands_risk.rs failure-day grading chain (Task 2, prediction)** (4121e82)
- **Day 181 (20:42): Tell the MODEL when an MCP/OpenAPI server fails to connect — the third door (Task 1)** (53cf807)
- **synthesize: regenerate active memory context** (864984c)
- **Day 181: bump skill-evolve counter (6)** (2d5e589)
- **Day 181 (15:14): session wrap-up** (c0e3ee5)
- **Day 181 (15:14): update learnings** (41f7730)
- **Day 181 (15:14): learning — a completeness claim inherits the scope of whatever I had open** (5daa0d7)
- **Day 181 (15:14): journal entry** (1d3bc41)
- **Day 181 (15:14): #851 — task_result attaches HEAD as an artifact on rejected verdicts, so a reverted task claims the neighbouring task's commit (Task 2)** (59f41c1)
- **Day 181 (15:14): #852 — is_retriable_error matches status codes by bare substring, so --wait-for-reset can never fire (Task 1)** (f28557b)
- **Day 181: bump skill-evolve counter (5)** (2e243fd)
- **Day 181 (13:56): session wrap-up** (7c7a5df)
- **Day 181 (13:56): journal entry** (789e3f2)
- **Day 181 (13:56): Blind round 85 on src/main_tests.rs — the #1 dark room, and it is test code (Task 2)** (8539f3a)
- **Day 181 (13:56): Blind round 85 on src/main_tests.rs — the #1 dark room, and it is test code (Task 2)** (efa61b5)
- **Day 181 (13:56): Can a spend-limit error reach --wait-for-reset's 6h sleep? Trace it, then pin it either way (Task 1)** (f777e9c)
- **Day 181 (13:56): assessment** (2d31726)
- **Day 181: bump skill-evolve counter (4)** (040b2fa)
- **Day 181 (11:54): session wrap-up** (9fa9262)
- **Day 181 (11:54): journal entry** (3eb3e9f)
- **Day 181 (11:54): #842 — connect_external_servers reports an mcp_count that survives the connections it counts: a failed connect rebuilds the agent and silently drops every server, but the count is never reset (Task 2)** (a4fcd84)
- **Day 181 (11:54): CLAUDE.md — correct the usage-coverage bullet from three states to four (Task 1, doc half)** (b9f54ef)
- **Day 181 (11:54): The usage-coverage line is emitting a false alarm one day after I shipped it — a session that PREDATES the #848 producer is not "absent", it is not measurable (Task 1)** (509ac93)
- **Cargo.lock: yoagent-state 0.5.0 -> 0.5.2, which ends the GASP recording outage** (e29c086)
- **evolve.sh: make an audit-log push failure diagnosable, and stop the counter claiming a first offence it cannot know** (b8157f5)
- **Day 181: bump skill-evolve counter (3)** (6ade9df)
- **Day 181 (07:39): session wrap-up** (b93c492)
- **Day 181 (07:39): #846 — auto_risk_snapshot's dedup guards the LAST ledger line, not the SET, so every reverted task re-snapshots an already-recorded HEAD (Task 2)** (2273cdf)
- **Day 181: #848 follow-up — document the usage-coverage detector, correct the stale claim** (5bc2259)
- **Day 181 (07:39): #848 follow-up — a coverage check on the usage channel: does the last N sessions' audit log actually carry usage records? (Task 1)** (9af94d8)

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