@caseyharalson/orrery 0.14.3 → 0.14.4

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.
@@ -27,8 +27,8 @@ function colorize(text, color) {
27
27
  }
28
28
 
29
29
  function getPlanStatus(plan) {
30
- if (plan.isSuccessful()) return "complete";
31
- if (plan.steps.some((step) => step.status === "blocked")) return "blocked";
30
+ if (plan.isComplete()) return "complete";
31
+ if (plan.hasBlockedSteps()) return "blocked";
32
32
  if (plan.steps.some((step) => step.status === "in_progress")) {
33
33
  return "in_progress";
34
34
  }
@@ -469,7 +469,7 @@ async function orchestrate(options = {}) {
469
469
  normalizedOptions.onComplete
470
470
  );
471
471
 
472
- if (result.isComplete && result.isSuccessful) {
472
+ if (result.isComplete) {
473
473
  // Plan completed successfully - return to source branch for next plan
474
474
  const currentBranch = getCurrentBranch(REPO_ROOT);
475
475
  if (currentBranch !== sourceBranch) {
@@ -601,20 +601,19 @@ async function resumeInWorktree(
601
601
  );
602
602
  logPullRequestInfo(prInfo);
603
603
 
604
- const isSuccessful = plan.isSuccessful();
605
604
  runOnCompleteHook(
606
605
  onComplete,
607
606
  {
608
607
  planName: planFileName,
609
608
  planFile,
610
- outcome: isSuccessful ? "success" : "partial",
609
+ outcome: "success",
611
610
  workBranch: plan.metadata.work_branch || "",
612
611
  sourceBranch,
613
612
  prUrl: prInfo.url || "",
614
613
  stepsTotal: plan.steps.length,
615
614
  stepsCompleted: plan.steps.filter((s) => s.status === "complete")
616
615
  .length,
617
- stepsBlocked: plan.steps.filter((s) => s.status === "blocked").length
616
+ stepsBlocked: 0
618
617
  },
619
618
  worktreePath
620
619
  );
@@ -830,13 +829,12 @@ async function handleResumeMode(
830
829
  const prInfo = createPullRequest(prTitle, prBody, sourceBranch, REPO_ROOT);
831
830
  logPullRequestInfo(prInfo);
832
831
 
833
- const isSuccessful = matchingPlan.isSuccessful();
834
832
  runOnCompleteHook(
835
833
  onComplete,
836
834
  {
837
835
  planName: planFileName,
838
836
  planFile: matchingPlanFile,
839
- outcome: isSuccessful ? "success" : "partial",
837
+ outcome: "success",
840
838
  workBranch: matchingPlan.metadata.work_branch || currentBranch,
841
839
  sourceBranch,
842
840
  prUrl: prInfo.url || "",
@@ -844,8 +842,7 @@ async function handleResumeMode(
844
842
  stepsCompleted: matchingPlan.steps.filter(
845
843
  (s) => s.status === "complete"
846
844
  ).length,
847
- stepsBlocked: matchingPlan.steps.filter((s) => s.status === "blocked")
848
- .length
845
+ stepsBlocked: 0
849
846
  },
850
847
  REPO_ROOT
851
848
  );
@@ -1014,8 +1011,6 @@ async function processPlanInWorktree(normalizedOptions) {
1014
1011
  const isComplete = plan.isComplete();
1015
1012
 
1016
1013
  if (isComplete) {
1017
- const isSuccessful = plan.isSuccessful();
1018
-
1019
1014
  // Archive the plan
1020
1015
  archivePlan(resolvedPlanFile, plan, completedDir);
1021
1016
 
@@ -1046,14 +1041,14 @@ async function processPlanInWorktree(normalizedOptions) {
1046
1041
  {
1047
1042
  planName: planFileName,
1048
1043
  planFile: resolvedPlanFile,
1049
- outcome: isSuccessful ? "success" : "partial",
1044
+ outcome: "success",
1050
1045
  workBranch,
1051
1046
  sourceBranch,
1052
1047
  prUrl: prInfo.url || "",
1053
1048
  stepsTotal: plan.steps.length,
1054
1049
  stepsCompleted: plan.steps.filter((s) => s.status === "complete")
1055
1050
  .length,
1056
- stepsBlocked: plan.steps.filter((s) => s.status === "blocked").length
1051
+ stepsBlocked: 0
1057
1052
  },
1058
1053
  worktreePath
1059
1054
  );
@@ -1066,11 +1061,7 @@ async function processPlanInWorktree(normalizedOptions) {
1066
1061
  console.error(`Failed to clean up worktree: ${err.message}`);
1067
1062
  }
1068
1063
 
1069
- if (isSuccessful) {
1070
- console.log("\n=== Plan Complete (success) ===");
1071
- } else {
1072
- console.log("\n=== Plan Complete (partial — some steps blocked) ===");
1073
- }
1064
+ console.log("\n=== Plan Complete (success) ===");
1074
1065
  } else {
1075
1066
  // Plan not complete — commit WIP and preserve worktree
1076
1067
  const progressCommit = commit(
@@ -1124,7 +1115,7 @@ async function processPlanInWorktree(normalizedOptions) {
1124
1115
  * @param {string} completedDir - Directory for completed plans
1125
1116
  * @param {string} reportsDir - Directory for reports
1126
1117
  * @param {boolean} parallelEnabled - Whether parallel execution with worktrees is enabled
1127
- * @returns {Promise<{isComplete: boolean, isSuccessful: boolean, workBranch: string}>}
1118
+ * @returns {Promise<{isComplete: boolean, workBranch: string}>}
1128
1119
  */
1129
1120
  async function processPlanWithBranching(
1130
1121
  planFile,
@@ -1178,8 +1169,6 @@ async function processPlanWithBranching(
1178
1169
  const isComplete = plan.isComplete();
1179
1170
 
1180
1171
  if (isComplete) {
1181
- const isSuccessful = plan.isSuccessful();
1182
-
1183
1172
  // Step 6: Archive the plan (on work branch)
1184
1173
  archivePlan(planFile, plan, completedDir);
1185
1174
 
@@ -1204,19 +1193,19 @@ async function processPlanWithBranching(
1204
1193
  {
1205
1194
  planName: planFileName,
1206
1195
  planFile,
1207
- outcome: isSuccessful ? "success" : "partial",
1196
+ outcome: "success",
1208
1197
  workBranch,
1209
1198
  sourceBranch,
1210
1199
  prUrl: prInfo.url || "",
1211
1200
  stepsTotal: plan.steps.length,
1212
1201
  stepsCompleted: plan.steps.filter((s) => s.status === "complete")
1213
1202
  .length,
1214
- stepsBlocked: plan.steps.filter((s) => s.status === "blocked").length
1203
+ stepsBlocked: 0
1215
1204
  },
1216
1205
  REPO_ROOT
1217
1206
  );
1218
1207
 
1219
- return { isComplete: true, isSuccessful, workBranch };
1208
+ return { isComplete: true, workBranch };
1220
1209
  } else {
1221
1210
  // Plan not complete (still has pending steps or was interrupted)
1222
1211
  // Commit any progress made
@@ -1250,7 +1239,7 @@ async function processPlanWithBranching(
1250
1239
  "\nPlan not complete. Work branch preserved for later continuation."
1251
1240
  );
1252
1241
 
1253
- return { isComplete: false, isSuccessful: false, workBranch };
1242
+ return { isComplete: false, workBranch };
1254
1243
  }
1255
1244
  }
1256
1245
 
@@ -1291,26 +1280,15 @@ function logPullRequestInfo(prInfo) {
1291
1280
  */
1292
1281
  function generatePRBody(plan) {
1293
1282
  const steps = plan.steps || [];
1294
- const completed = steps.filter((s) => s.status === "complete").length;
1295
- const blocked = steps.filter((s) => s.status === "blocked").length;
1296
1283
  const total = steps.length;
1297
1284
 
1298
1285
  let body = `## Plan Summary\n\n`;
1299
- body += `- **Status:** ${plan.metadata.outcome === "success" ? "All steps complete" : "Partial (some steps blocked)"}\n`;
1300
- body += `- **Steps:** ${completed}/${total} complete`;
1301
- if (blocked > 0) {
1302
- body += `, ${blocked} blocked`;
1303
- }
1304
- body += `\n\n`;
1286
+ body += `- **Status:** All steps complete\n`;
1287
+ body += `- **Steps:** ${total}/${total} complete\n\n`;
1305
1288
 
1306
1289
  body += `## Steps\n\n`;
1307
1290
  for (const step of steps) {
1308
- const icon =
1309
- step.status === "complete" ? "x" : step.status === "blocked" ? "-" : " ";
1310
- body += `- [${icon}] **${step.id}**: ${step.description}\n`;
1311
- if (step.status === "blocked" && step.blocked_reason) {
1312
- body += ` - Blocked: ${step.blocked_reason}\n`;
1313
- }
1291
+ body += `- [x] **${step.id}**: ${step.description}\n`;
1314
1292
  }
1315
1293
 
1316
1294
  body += `\n---\n*Generated by Orrery*`;
@@ -2037,17 +2015,12 @@ function runOnCompleteHook(command, context, cwd) {
2037
2015
  * Archive a completed plan
2038
2016
  */
2039
2017
  function archivePlan(planFile, plan, completedDir) {
2040
- const success = plan.isSuccessful();
2041
- const status = success ? "SUCCESS" : "PARTIAL (some steps blocked)";
2042
-
2043
- // Add completion metadata
2044
2018
  plan.metadata.completed_at = new Date().toISOString();
2045
- plan.metadata.outcome = success ? "success" : "partial";
2019
+ plan.metadata.outcome = "success";
2046
2020
  savePlan(plan);
2047
2021
 
2048
- // Move to completed
2049
2022
  const destPath = movePlanToCompleted(planFile, completedDir);
2050
- console.log(`\nPlan archived: ${status}`);
2023
+ console.log(`\nPlan archived: SUCCESS`);
2051
2024
  console.log(` -> ${path.relative(REPO_ROOT, destPath)}`);
2052
2025
  }
2053
2026
 
@@ -52,21 +52,19 @@ function loadPlan(filePath) {
52
52
  },
53
53
 
54
54
  /**
55
- * Check if all steps are complete or blocked
55
+ * Check if all steps are complete
56
56
  * @returns {boolean}
57
57
  */
58
58
  isComplete() {
59
- return this.steps.every(
60
- (s) => s.status === "complete" || s.status === "blocked"
61
- );
59
+ return this.steps.every((s) => s.status === "complete");
62
60
  },
63
61
 
64
62
  /**
65
- * Check if all steps are complete (none blocked)
63
+ * Check if the plan has any blocked steps
66
64
  * @returns {boolean}
67
65
  */
68
- isSuccessful() {
69
- return this.steps.every((s) => s.status === "complete");
66
+ hasBlockedSteps() {
67
+ return this.steps.some((s) => s.status === "blocked");
70
68
  }
71
69
  };
72
70
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caseyharalson/orrery",
3
- "version": "0.14.3",
3
+ "version": "0.14.4",
4
4
  "description": "Workflow planning and orchestration CLI for AI agents",
5
5
  "license": "MIT",
6
6
  "author": "Casey Haralson",