jonah-fleet 1.9.1 → 1.10.0

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,26 @@ All notable changes to `jonah-fleet` will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.10.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.2...v1.10.0) (2026-09-17)
9
+
10
+
11
+ ### Features
12
+
13
+ * **radar:** expand Category A heuristics to include prompt engineering optimizations and release tag_name ([#186](https://github.com/juliendurandeu/jonah-fleet/issues/186)) ([37fb3fc](https://github.com/juliendurandeu/jonah-fleet/commit/37fb3fca85b2f880de90df6a4baf9ec50f624003))
14
+ * **radar:** surface actionable opportunities with deterministic A/B/C classification ([#181](https://github.com/juliendurandeu/jonah-fleet/issues/181)) ([b9809c0](https://github.com/juliendurandeu/jonah-fleet/commit/b9809c0c1b54cb690c878d574cecbe1a4ce33480))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **runner:** capture stderr and handle signal exit codes in fallback error diagnostics ([#176](https://github.com/juliendurandeu/jonah-fleet/issues/176)) ([9bbe8eb](https://github.com/juliendurandeu/jonah-fleet/commit/9bbe8eb7cd52deab74c0bc9d503011511502a98f))
20
+
21
+ ## [1.9.2](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.1...v1.9.2) (2026-09-16)
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * **workflows:** resolve indentation syntax error in interruption card and add yaml validator test ([b312a20](https://github.com/juliendurandeu/jonah-fleet/commit/b312a2056da850876ee3daa2d952ffe299687b7e))
27
+
8
28
  ## [1.9.1](https://github.com/juliendurandeu/jonah-fleet/compare/v1.9.0...v1.9.1) (2026-09-16)
9
29
 
10
30
 
@@ -34,10 +54,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
34
54
  * **runner,daemon:** prevent stale report ghosting and fix keyboard lockup in targeted prompts ([#166](https://github.com/juliendurandeu/jonah-fleet/issues/166)) ([0de89e2](https://github.com/juliendurandeu/jonah-fleet/commit/0de89e24427f9e575f08cd721434ab5156fdcb94))
35
55
  * **workflows:** harden workflow templates against shell injection, credential persistence, and timeouts ([04a0dd3](https://github.com/juliendurandeu/jonah-fleet/commit/04a0dd3a0457fd4d6db74fcd4709fcef0d28d84e))
36
56
 
37
- ## [Unreleased] - 2026-09-16
57
+ ## [Unreleased] - 2026-09-17
38
58
 
39
59
  ### Features
40
60
 
61
+ * **radar:** expand Category A heuristics in `fetch-symphony-radar.js` to detect prompt engineering optimizations and release `tag_name` fallbacks, prioritize Category A invariants over runtime keywords, and refine empty lookback checklist phrasing ([#184](https://github.com/juliendurandeu/jonah-fleet/issues/184)).
62
+ * **radar:** deterministically classify upstream changes across Symphony and Funes into Category A/B/C and surface architectural opportunities with callout summaries, breakdown matrices, and dynamic triage checklists ([#152](https://github.com/juliendurandeu/jonah-fleet/issues/152)).
41
63
  * **telemetry:** introduce live progress reporting in routine run tracking issues (`routine-log`) using bounded Compact Milestone Cards (3–5 bullet points for Intake & Strategy, Verification & Tests, Autonomous Handoff, and Run Completed) across `autowork`, `peer-review`, `optimizer`, and `ORCHESTRATION.md`.
42
64
  * **workflows:** automatically post Interruption Cards to routine run issue comment streams upon failure, timeout, or cancellation, linking directly to the Actions run logs before applying `status:failure,needs-attention`.
43
65
  * **runner:** add `formatMilestoneCard`, `formatInterruptionCard`, and `tryPostLocalRunMilestone` helpers to local runner `runner.ts` to post interruption cards on non-zero exit codes with offline fallback.
package/dist/index.js CHANGED
@@ -3742,6 +3742,39 @@ function extractFreshRunReport(executionReportPath, targetReportPath, startTime)
3742
3742
  }
3743
3743
  return null;
3744
3744
  }
3745
+ function resolveExitCode(code, signal) {
3746
+ return code ?? (signal ? 1 : 0);
3747
+ }
3748
+ function formatFallbackRunReport(options) {
3749
+ const result = options.exitCode === 0 ? "SUCCESS" : "FAILURE";
3750
+ let reportContent = `## Run Summary
3751
+
3752
+ | Metric | Value |
3753
+ |---|---|
3754
+ | Routine | \`${options.routine}\` |
3755
+ | Timestamp | \`${options.timestamp}\` |
3756
+ | Result | \`${result}\` |
3757
+ | Exit Code | \`${options.exitCode}\` |
3758
+ | Host | \`${options.hostname}\` |
3759
+ | Target | \`${options.targetLabel}\` |
3760
+ | Duration | \`${options.durationSec}s\` |
3761
+ `;
3762
+ if (options.exitCode !== 0) {
3763
+ const errorChunks = [options.output?.trim(), options.stderr?.trim()].filter(Boolean);
3764
+ const combinedError = errorChunks.join("\n");
3765
+ if (combinedError.trim()) {
3766
+ const sanitizedOutput = stripAnsi(combinedError.trim()).split("\n").slice(-15).join("\n");
3767
+ reportContent += `
3768
+ ### Error Output
3769
+
3770
+ \`\`\`
3771
+ ${sanitizedOutput}
3772
+ \`\`\`
3773
+ `;
3774
+ }
3775
+ }
3776
+ return reportContent;
3777
+ }
3745
3778
  async function runLocalRoutine(options) {
3746
3779
  const targetDir = path12.resolve(options.targetDir);
3747
3780
  const routine = options.routine;
@@ -3970,7 +4003,9 @@ Timeout: ${printTimeout}`,
3970
4003
  }
3971
4004
  }
3972
4005
  });
4006
+ let accumulatedStderr = "";
3973
4007
  const stderrParser = new LineBufferedStreamParser((line) => {
4008
+ accumulatedStderr += line + "\n";
3974
4009
  checkTargetDetection(line);
3975
4010
  if (options.verbose) {
3976
4011
  console.error(pc10.dim(`[stderr] ${line}`));
@@ -4014,9 +4049,9 @@ Timeout: ${printTimeout}`,
4014
4049
  spinner?.stop();
4015
4050
  reject(err);
4016
4051
  });
4017
- child.on("close", (code) => {
4052
+ child.on("close", (code, signal) => {
4018
4053
  spinner?.stop();
4019
- resolve(code ?? 0);
4054
+ resolve(resolveExitCode(code, signal));
4020
4055
  });
4021
4056
  });
4022
4057
  } finally {
@@ -4034,28 +4069,16 @@ Timeout: ${printTimeout}`,
4034
4069
  const durationSec = Math.round(durationMs / 1e3);
4035
4070
  let reportContent = extractFreshRunReport(executionReportPath, targetReportPath, startTime) || "";
4036
4071
  if (!reportContent) {
4037
- reportContent = `## Run Summary
4038
-
4039
- | Metric | Value |
4040
- |---|---|
4041
- | Routine | \`${routine}\` |
4042
- | Timestamp | \`${timestamp}\` |
4043
- | Result | \`${exitCode === 0 ? "SUCCESS" : "FAILURE"}\` |
4044
- | Exit Code | \`${exitCode}\` |
4045
- | Host | \`${hostname}\` |
4046
- | Target | \`${targetLabel}\` |
4047
- | Duration | \`${durationSec}s\` |
4048
- `;
4049
- if (exitCode !== 0 && output.trim()) {
4050
- const sanitizedOutput = stripAnsi(output.trim()).split("\n").slice(-15).join("\n");
4051
- reportContent += `
4052
- ### Error Output
4053
-
4054
- \`\`\`
4055
- ${sanitizedOutput}
4056
- \`\`\`
4057
- `;
4058
- }
4072
+ reportContent = formatFallbackRunReport({
4073
+ routine,
4074
+ timestamp,
4075
+ exitCode,
4076
+ hostname,
4077
+ targetLabel,
4078
+ durationSec,
4079
+ output,
4080
+ stderr: accumulatedStderr
4081
+ });
4059
4082
  }
4060
4083
  try {
4061
4084
  fs12.writeFileSync(targetReportPath, reportContent, "utf8");
@@ -4121,6 +4144,7 @@ ${sanitizedOutput}
4121
4144
  success: exitCode === 0,
4122
4145
  exitCode,
4123
4146
  output,
4147
+ stderr: accumulatedStderr,
4124
4148
  worktreePath,
4125
4149
  branchName,
4126
4150
  issueNumber: routineIssueNumber
@@ -19,6 +19,7 @@ export interface RunLocalRoutineResult {
19
19
  success: boolean;
20
20
  exitCode: number;
21
21
  output: string;
22
+ stderr?: string;
22
23
  worktreePath?: string;
23
24
  branchName?: string;
24
25
  issueNumber?: number;
@@ -150,6 +151,26 @@ export declare function tryReconcileLocalRunIssue(cwd: string, issueNumber: numb
150
151
  * Returns null if no fresh report exists (e.g. file missing or older than run start).
151
152
  */
152
153
  export declare function extractFreshRunReport(executionReportPath: string, targetReportPath: string, startTime: number): string | null;
154
+ export interface FallbackReportOptions {
155
+ routine: string;
156
+ timestamp: string;
157
+ exitCode: number;
158
+ hostname: string;
159
+ targetLabel: string;
160
+ durationSec: number;
161
+ output?: string;
162
+ stderr?: string;
163
+ }
164
+ /**
165
+ * Resolves child process exit code, ensuring signals (e.g. SIGTERM, SIGINT)
166
+ * resolve to a non-zero exit code instead of defaulting to 0.
167
+ */
168
+ export declare function resolveExitCode(code: number | null, signal: NodeJS.Signals | string | null): number;
169
+ /**
170
+ * Formats a fallback summary markdown report when no fresh run-report.md was generated.
171
+ * Includes sanitized trailing error output from stdout and/or stderr if exitCode is non-zero.
172
+ */
173
+ export declare function formatFallbackRunReport(options: FallbackReportOptions): string;
153
174
  /**
154
175
  * Runs a routine locally with worktree isolation and Antigravity CLI invocation.
155
176
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,SAAS,CAAC,EAAE,YAAY,GAAG,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;QAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE;YACV,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;IACF,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAyB;IAEvC,YAAY,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAEzC;IAEM,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAU/B;IAEM,KAAK,IAAI,IAAI,CAKnB;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAWzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAgDxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAY1F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3F,MAAM,CAuBR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAepB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAUzE;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAa/E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI,CAiBN;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CA0CN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,mBAAmB,EAAE,MAAM,EAC3B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAoBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8arG"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.9.1",
3
+ "version": "1.10.0",
4
4
  "description": "Standalone autonomous agent fleet with Symphony orchestration, claim protocols, and continuous improvement loops",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -44,7 +44,8 @@
44
44
  "@types/node": "^26.4.0",
45
45
  "tsup": "^8.3.5",
46
46
  "typescript": "^7.0.2",
47
- "vitest": "^5.0.0"
47
+ "vitest": "^5.0.0",
48
+ "yaml": "^2.9.1"
48
49
  },
49
50
  "overrides": {
50
51
  "esbuild": "^0.28.2"
@@ -289,14 +289,15 @@ jobs:
289
289
  gh issue close "$ISSUE_NUMBER" --reason completed
290
290
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
291
291
  else
292
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
293
- - **Routine**: \`autowork\`
294
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
295
- - **Step**: Actions execution halted before normal completion
296
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
297
-
298
- ---
299
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
292
+ INTERRUPTION_BODY=$(printf '%s\n' \
293
+ "### Milestone: Run Interrupted / Failed" \
294
+ "- **Routine**: \`autowork\`" \
295
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
296
+ "- **Step**: Actions execution halted before normal completion" \
297
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
298
+ "" \
299
+ "---" \
300
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
300
301
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
301
302
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
302
303
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -196,14 +196,15 @@ jobs:
196
196
  gh issue close "$ISSUE_NUMBER" --reason completed
197
197
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
198
198
  else
199
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
200
- - **Routine**: \`dependency-check\`
201
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
202
- - **Step**: Actions execution halted before normal completion
203
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
204
-
205
- ---
206
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
199
+ INTERRUPTION_BODY=$(printf '%s\n' \
200
+ "### Milestone: Run Interrupted / Failed" \
201
+ "- **Routine**: \`dependency-check\`" \
202
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
203
+ "- **Step**: Actions execution halted before normal completion" \
204
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
205
+ "" \
206
+ "---" \
207
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
207
208
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
208
209
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
209
210
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -207,14 +207,15 @@ jobs:
207
207
  gh issue close "$ISSUE_NUMBER" --reason completed
208
208
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
209
209
  else
210
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
211
- - **Routine**: \`design-review\`
212
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
213
- - **Step**: Actions execution halted before normal completion
214
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
215
-
216
- ---
217
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
210
+ INTERRUPTION_BODY=$(printf '%s\n' \
211
+ "### Milestone: Run Interrupted / Failed" \
212
+ "- **Routine**: \`design-review\`" \
213
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
214
+ "- **Step**: Actions execution halted before normal completion" \
215
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
216
+ "" \
217
+ "---" \
218
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
218
219
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
219
220
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
220
221
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -196,14 +196,15 @@ jobs:
196
196
  gh issue close "$ISSUE_NUMBER" --reason completed
197
197
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
198
198
  else
199
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
200
- - **Routine**: \`issues-housekeeping\`
201
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
202
- - **Step**: Actions execution halted before normal completion
203
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
204
-
205
- ---
206
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
199
+ INTERRUPTION_BODY=$(printf '%s\n' \
200
+ "### Milestone: Run Interrupted / Failed" \
201
+ "- **Routine**: \`issues-housekeeping\`" \
202
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
203
+ "- **Step**: Actions execution halted before normal completion" \
204
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
205
+ "" \
206
+ "---" \
207
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
207
208
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
208
209
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
209
210
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -218,14 +218,15 @@ jobs:
218
218
  gh issue close "$ISSUE_NUMBER" --reason completed
219
219
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
220
220
  else
221
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
222
- - **Routine**: \`optimizer\`
223
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
224
- - **Step**: Actions execution halted before normal completion
225
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
226
-
227
- ---
228
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
221
+ INTERRUPTION_BODY=$(printf '%s\n' \
222
+ "### Milestone: Run Interrupted / Failed" \
223
+ "- **Routine**: \`optimizer\`" \
224
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
225
+ "- **Step**: Actions execution halted before normal completion" \
226
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
227
+ "" \
228
+ "---" \
229
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
229
230
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
230
231
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
231
232
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -37,8 +37,8 @@ jobs:
37
37
  - name: Run jonah-fleet sync
38
38
  id: sync
39
39
  run: |
40
- npx jonah-fleet sync --check || true
41
- npx jonah-fleet sync --force
40
+ npx --yes jonah-fleet sync --check || true
41
+ npx --yes jonah-fleet sync --force
42
42
 
43
43
  - name: Check for changes
44
44
  id: git-check
@@ -300,14 +300,15 @@ jobs:
300
300
  gh issue close "$ISSUE_NUMBER" --reason completed
301
301
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
302
302
  else
303
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
304
- - **Routine**: \`autowork\`
305
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
306
- - **Step**: Actions execution halted before normal completion
307
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
308
-
309
- ---
310
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
303
+ INTERRUPTION_BODY=$(printf '%s\n' \
304
+ "### Milestone: Run Interrupted / Failed" \
305
+ "- **Routine**: \`autowork\`" \
306
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
307
+ "- **Step**: Actions execution halted before normal completion" \
308
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
309
+ "" \
310
+ "---" \
311
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
311
312
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
312
313
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
313
314
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -257,14 +257,15 @@ jobs:
257
257
  gh issue close "$ISSUE_NUMBER" --reason completed
258
258
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
259
259
  else
260
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
261
- - **Routine**: \`autowork\`
262
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
263
- - **Step**: Actions execution halted before normal completion
264
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
265
-
266
- ---
267
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
260
+ INTERRUPTION_BODY=$(printf '%s\n' \
261
+ "### Milestone: Run Interrupted / Failed" \
262
+ "- **Routine**: \`autowork\`" \
263
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
264
+ "- **Step**: Actions execution halted before normal completion" \
265
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
266
+ "" \
267
+ "---" \
268
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
268
269
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
269
270
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
270
271
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -287,14 +287,15 @@ jobs:
287
287
  gh issue close "$ISSUE_NUMBER" --reason completed
288
288
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
289
289
  else
290
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
291
- - **Routine**: \`autowork\`
292
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
293
- - **Step**: Actions execution halted before normal completion
294
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
295
-
296
- ---
297
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
290
+ INTERRUPTION_BODY=$(printf '%s\n' \
291
+ "### Milestone: Run Interrupted / Failed" \
292
+ "- **Routine**: \`autowork\`" \
293
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
294
+ "- **Step**: Actions execution halted before normal completion" \
295
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
296
+ "" \
297
+ "---" \
298
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
298
299
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
299
300
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
300
301
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
@@ -364,14 +364,15 @@ jobs:
364
364
  gh issue close "$ISSUE_NUMBER" --reason completed
365
365
  echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
366
366
  else
367
- INTERRUPTION_BODY="### Milestone: Run Interrupted / Failed
368
- - **Routine**: \`peer-review\`
369
- - **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)
370
- - **Step**: Actions execution halted before normal completion
371
- - **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
372
-
373
- ---
374
- _Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
367
+ INTERRUPTION_BODY=$(printf '%s\n' \
368
+ "### Milestone: Run Interrupted / Failed" \
369
+ "- **Routine**: \`peer-review\`" \
370
+ "- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
371
+ "- **Step**: Actions execution halted before normal completion" \
372
+ "- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
373
+ "" \
374
+ "---" \
375
+ "_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
375
376
  gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
376
377
  gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
377
378
  echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."