applyPlan selects the plan file as the newest name containing phase-NN-plan.issues.json, with NN from the epic's phase:N label. A repository that splits a phase into sub-phases (tone_tonic has 8a/8b/8c and now 10a/10b, each its own epic labelled phase:8 / phase:10) cannot give each epic its own file except by dating the files apart, which is what tone_tonic did (2026-09-20-phase-10-plan.issues.json for #514, 2026-09-21-phase-10-plan.issues.json for #525).
Suggestion: match on the file's epic field first (read every *.issues.json on origin/main, pick the one whose epic equals the epic number), and fall back to the phase-number name only when none carries the number. planIssuesPath could then name files <date>-epic-<n>-plan.issues.json.
applyPlanselects the plan file as the newest name containingphase-NN-plan.issues.json, with NN from the epic'sphase:Nlabel. A repository that splits a phase into sub-phases (tone_tonic has 8a/8b/8c and now 10a/10b, each its own epic labelledphase:8/phase:10) cannot give each epic its own file except by dating the files apart, which is what tone_tonic did (2026-09-20-phase-10-plan.issues.jsonfor #514,2026-09-21-phase-10-plan.issues.jsonfor #525).Suggestion: match on the file's
epicfield first (read every*.issues.jsonon origin/main, pick the one whoseepicequals the epic number), and fall back to the phase-number name only when none carries the number.planIssuesPathcould then name files<date>-epic-<n>-plan.issues.json.