Tom Boucher
200c012f84
fix(sdk): derive completed_phases from ROADMAP and refresh all STATE.md fields after phase.complete
...
Fixes two root causes behind bug #3517 :
1. Idempotency: completed_phases was blindly incremented (parseInt + 1),
causing phase.complete N run twice to double-count (4 → 5 → 6).
Now derives from ROADMAP progress table Complete-row count, making
the operation idempotent.
2. Field coverage: eight STATE.md fields were left stale after phase
completion. Now updates in the same atomic lock section:
- frontmatter: stopped_at, last_updated, total_plans, completed_plans
- body: Current focus, Status line, By Phase table row
completed_plans = count of *-SUMMARY.md files across all phase dirs
total_plans = sum of M/N plan counts from ROADMAP progress table
percent = recomputed from fresh derived counts
Closes #3517
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 16:56:18 -04:00
..
2026-05-06 21:51:38 -04:00
2026-05-14 16:56:18 -04:00
2026-04-25 14:08:05 -06:00
2026-03-26 20:27:51 -06:00
2026-03-26 20:27:51 -06:00
2026-05-02 11:45:33 -04:00
2026-05-03 15:57:01 -04:00
2026-05-06 20:52:43 -04:00
2026-05-09 23:29:11 -04:00
2026-04-03 14:07:04 -04:00
2026-04-12 08:33:04 -04:00
2026-04-03 14:07:04 -04:00
2026-04-03 14:07:04 -04:00
2026-05-03 18:56:41 -04:00
2026-04-12 08:33:04 -04:00
2026-03-26 20:27:51 -06:00
2026-04-17 19:53:16 -05:00
2026-05-04 21:49:41 -04:00
2026-05-04 21:49:41 -04:00
2026-05-05 20:22:03 -04:00
2026-05-05 19:59:56 -04:00
2026-05-03 08:20:05 -04:00
2026-05-03 16:31:48 -04:00
2026-05-05 19:31:03 -04:00
2026-05-05 19:59:56 -04:00
2026-05-05 19:36:47 -04:00
2026-05-03 18:11:38 -04:00
2026-04-25 14:08:05 -06:00
2026-05-08 09:06:43 -04:00
2026-03-31 15:59:31 +03:00
2026-03-26 20:27:51 -06:00
2026-03-26 20:27:51 -06:00
2026-04-12 08:33:04 -04:00
2026-05-08 21:25:37 -04:00
2026-04-25 14:08:05 -06:00
2026-05-08 09:06:43 -04:00
2026-04-18 12:35:23 -04:00
2026-03-31 15:59:31 +03:00
2026-05-10 11:19:50 -04:00
2026-05-10 11:19:50 -04:00
2026-05-08 08:40:30 -04:00
2026-05-08 08:40:30 -04:00
2026-04-30 09:03:06 -06:00
2026-04-30 09:03:06 -06:00
2026-04-30 09:03:06 -06:00
2026-04-30 09:03:06 -06:00
2026-04-25 17:56:06 -06:00
2026-04-25 17:56:06 -06:00
2026-04-04 07:24:31 -04:00
2026-04-25 14:08:05 -06:00
2026-05-03 18:56:41 -04:00
2026-05-05 19:23:39 -04:00
2026-05-05 19:26:01 -04:00
2026-05-04 21:49:39 -04:00
2026-05-04 21:49:39 -04:00
2026-05-08 09:06:43 -04:00
2026-05-05 19:26:01 -04:00
2026-05-03 18:56:41 -04:00
2026-05-04 21:49:39 -04:00
2026-05-04 21:49:40 -04:00
2026-05-04 21:49:38 -04:00
2026-05-04 21:49:40 -04:00
2026-05-04 21:49:41 -04:00
2026-05-04 21:49:41 -04:00
2026-05-05 20:29:43 -04:00
2026-05-05 20:29:43 -04:00
2026-05-05 19:31:03 -04:00
2026-05-04 21:49:41 -04:00
2026-05-04 21:49:41 -04:00
2026-05-04 21:49:40 -04:00
2026-05-04 21:49:40 -04:00
2026-04-03 14:19:34 -04:00
2026-04-03 14:19:34 -04:00
2026-05-05 19:36:47 -04:00
2026-04-29 08:03:32 -04:00
2026-04-29 08:03:32 -04:00
2026-05-11 21:12:29 -04:00
2026-05-11 21:12:29 -04:00
2026-04-29 08:03:32 -04:00
2026-05-09 00:15:04 -04:00
2026-03-26 20:27:51 -06:00
2026-04-12 08:33:04 -04:00
2026-05-09 00:25:05 -04:00
2026-04-23 12:40:56 -04:00
2026-05-09 00:15:04 -04:00
2026-05-09 00:15:04 -04:00
2026-04-11 09:33:34 -04:00
2026-03-26 20:27:51 -06:00
2026-03-26 20:27:51 -06:00