orchestrix-yuri 4.8.7 → 4.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -722,6 +722,8 @@ class PhaseOrchestrator {
722
722
  }).trim();
723
723
 
724
724
  if (output && output !== 'NO_STORIES_DIR') {
725
+ let planned = 0;
726
+ let created = 0;
725
727
  for (const line of output.split('\n')) {
726
728
  if (!line.includes(':')) continue;
727
729
  const colonIdx = line.indexOf(':');
@@ -729,7 +731,9 @@ class PhaseOrchestrator {
729
731
  const value = line.slice(colonIdx + 1);
730
732
 
731
733
  if (key === 'Total') {
732
- result.totalStories = parseInt(value, 10) || 0;
734
+ planned = parseInt(value, 10) || 0;
735
+ } else if (key === 'Created') {
736
+ created = parseInt(value, 10) || 0;
733
737
  } else if (key === 'Epics') {
734
738
  result.totalEpics = parseInt(value, 10) || 0;
735
739
  } else if (key === 'CurrentEpic') {
@@ -742,8 +746,11 @@ class PhaseOrchestrator {
742
746
  result.byStatus[statusName] = (result.byStatus[statusName] || 0) + 1;
743
747
  if (statusName === 'Done') result.doneStories++;
744
748
  }
745
- // 'Created' is metadata — skip (Total is the authoritative count)
746
749
  }
750
+ // Use actual story files as ground truth — YAML plans can be stale
751
+ result.totalStories = Math.max(planned, created);
752
+ // Ensure current epic is counted in total
753
+ if (result.currentEpic > result.totalEpics) result.totalEpics = result.currentEpic;
747
754
  }
748
755
  } catch { /* fallback to phase3.yaml */ }
749
756
  }
@@ -1074,8 +1074,9 @@ Reply with ONLY one word: small, medium, or large. Nothing else.`;
1074
1074
  const runMin = Math.floor(runMs / 60000);
1075
1075
  const elapsed = runMin < 60 ? `${runMin}min` : `${Math.floor(runMin / 60)}h ${runMin % 60}min`;
1076
1076
 
1077
- // 6. Build card
1078
- const total = totalPlanned || createdStories; // prefer planned, fallback to created
1077
+ // 6. Build card — use actual story files as ground truth, not stale YAML
1078
+ const total = Math.max(totalPlanned, createdStories);
1079
+ if (currentEpic > totalEpics) totalEpics = currentEpic; // ensure current epic counted
1079
1080
  const pct = total > 0 ? Math.min(100, Math.round(doneStories / total * 100)) : 0;
1080
1081
  const barLen = 20;
1081
1082
  const filled = Math.min(barLen, Math.round(pct / 100 * barLen));
@@ -1085,7 +1086,7 @@ Reply with ONLY one word: small, medium, or large. Nothing else.`;
1085
1086
  if (totalEpics > 0) {
1086
1087
  lines.push(`Epic: ${currentEpic}/${totalEpics}`);
1087
1088
  }
1088
- lines.push(`Story: ${doneStories}/${total} done (${pct}%) | ${createdStories} created`);
1089
+ lines.push(`Story: ${doneStories}/${total} (${pct}%)`);
1089
1090
  lines.push(`${bar} ${pct}%`);
1090
1091
  lines.push('━━━━━━━━━━━━━━━━━━━━━');
1091
1092
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchestrix-yuri",
3
- "version": "4.8.7",
3
+ "version": "4.8.9",
4
4
  "description": "Yuri — Meta-Orchestrator for Orchestrix. Drive your entire project lifecycle with natural language.",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {
@@ -70,8 +70,11 @@ for f in "$STORIES_DIR"/*.md; do
70
70
  blocked) echo "StatusBlocked:$fname" ;;
71
71
  approved|ready) echo "StatusApproved:$fname" ;;
72
72
  draft|new|todo|pending|open) echo "StatusDraft:$fname" ;;
73
+ awaitingarchreview|awaiting_arch_review) echo "StatusAwaitingArchReview:$fname" ;;
74
+ requiresrevision|requires_revision) echo "StatusRequiresRevision:$fname" ;;
75
+ escalated) echo "StatusEscalated:$fname" ;;
73
76
  "") echo "StatusNoStatus:$fname" ;;
74
- *) echo "StatusOther:$fname:$status" ;;
77
+ *) echo "Status${status}:$fname" ;;
75
78
  esac
76
79
  done
77
80