jonah-fleet 1.35.0 → 1.35.1

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,19 @@ 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.35.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.35.0...v1.35.1) (2026-10-10)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **workflows:** omit issue_comment triggers and document quota guard ([#672](https://github.com/Jonah-Projects/jonah-fleet/issues/672)) ([2c27bd1](https://github.com/Jonah-Projects/jonah-fleet/commit/2c27bd19e44508e39a6e0bb68951c5fd32beec96))
14
+
15
+ ## [Unreleased] - 2026-10-09
16
+
17
+ ### Changed
18
+
19
+ * **workflows:** omit unfiltered `issue_comment` triggers from `trigger-review-routine.yml` to conserve Actions runner quota and prevent comment-loop thrash
20
+
8
21
  ## [1.35.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.34.0...v1.35.0) (2026-10-09)
9
22
 
10
23
 
@@ -45,7 +58,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
45
58
  ### Features
46
59
 
47
60
  * **daemon,telemetry:** halt daemon execution when plan quota drops below 20% in either 5h or 7-day windows, with `--full-burn` CLI flag, environment variable, manifest configuration, and interactive hotkey override
48
-
49
61
  ## [Unreleased] - 2026-10-03
50
62
 
51
63
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.35.0",
3
+ "version": "1.35.1",
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",
@@ -18,7 +18,7 @@ Dispatch is both **scheduled** and **event-driven**. All routines run as ephemer
18
18
 
19
19
  - **Scheduled cron sweeps**: Autowork runs periodically (`autowork-cron.yml`), complemented by prompt optimization (`prompt-optimizer-cron.yml`), issues housekeeping (`issues-housekeeping-cron.yml`), dependency security checks (`dependency-check-cron.yml`), analytics review (`analytics-review-cron.yml`), product planning (`product-planning-cron.yml`), and design review (`design-review-cron.yml`).
20
20
  - **Event-driven & manual triggers**: GitHub Actions workflows fire routines on events and interactive commands so work starts within seconds instead of waiting for scheduled ticks:
21
- - `trigger-review-routine.yml` fires Peer Review automatically when a PR is marked ready for review, updated, or review is requested (`ready_for_review`, `opened`, `reopened`, `synchronize`, `review_requested`). It can also be manually (re)triggered via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode) or by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request.
21
+ - `trigger-review-routine.yml` fires Peer Review automatically when a PR is marked ready for review, updated, or review is requested (`ready_for_review`, `opened`, `reopened`, `synchronize`, `review_requested`). It can also be manually (re)triggered via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode). Note: Comment-based triggers are omitted to conserve Actions runner quota and prevent comment-loop thrash.
22
22
  - `trigger-autowork-on-merge.yml` fires Autowork in **Targeted mode** when a PR merges to `main` and unblocks the next unit of chained work.
23
23
  - `trigger-autowork-on-bug.yml` fires Autowork when an issue becomes a high-priority bug.
24
24
  - `trigger-autowork-on-assign.yml` fires Autowork in **Targeted mode** when an issue is assigned to a designated bot account or persona (`vars.AGENT_BOT_LOGIN`).
@@ -229,8 +229,8 @@ How the fleet guarantees continuous review throughput, recovers from transient A
229
229
 
230
230
  1. **Failure Trapping & Transparency**: When a peer-review workflow session encounters an execution failure (e.g. LLM API rate limit / quota exhaustion or runner timeout), `trigger-review-routine.yml` traps the failure and posts an informational status notice on the PR. Failures are made immediately visible on the PR timeline rather than silently failing in the background.
231
231
  2. **Periodic Scan Sweep (Watchdog)**: `trigger-review-routine.yml` runs a scheduled 2-hour cron sweep (`cron: '45 */2 * * *'`) in Scan mode. Any open PR in `ready_for_review` state that was orphaned due to a transient API rate limit or missed event trigger is automatically picked up, evaluated, and resolved.
232
- 3. **Interactive Re-triggering**: Any team member or author can immediately re-dispatch review by commenting `/review`, `/peer-review`, `/retrigger`, or `/re-review` on any open pull request, or manually triggering `trigger-review-routine.yml` via `workflow_dispatch`.
233
- 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle or `/review` comment before picking up new work. Review re-triggering is strictly conditioned on all CI checks having passed (`conclusion: SUCCESS`, `mergeStateStatus: CLEAN`) and is strictly prohibited if checks are in-progress or awaiting approval (`ACTION_REQUIRED`).
232
+ 3. **Interactive Re-triggering**: Any team member or author can immediately re-dispatch review by manually triggering `trigger-review-routine.yml` via `workflow_dispatch` (with optional `pr_number` for Targeted mode or blank for Scan mode) or by re-requesting review on GitHub. Unfiltered comment triggers are omitted to guard runner quota.
233
+ 4. **Autowork Phase 1 Watchdog**: During Phase 1 convergence, Autowork actively identifies open ready PRs that have received no review feedback for $>2$ hours, re-triggering review via draft toggle (`gh pr ready <PR> --undo && gh pr ready <PR>`) before picking up new work. Review re-triggering is strictly conditioned on all CI checks having passed (`conclusion: SUCCESS`, `mergeStateStatus: CLEAN`) and is strictly prohibited if checks are in-progress or awaiting approval (`ACTION_REQUIRED`).
234
234
 
235
235
  ---
236
236
 
@@ -141,9 +141,9 @@ _Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/ru
141
141
  - *Option B*: [Pros / Cons]
142
142
  - **Recommended Path**: [Agent recommendation]
143
143
  ```
144
- 3c. **Orphaned Ready PR Recovery**: If an open PR authored by this routine is `ready_for_review`, has passing CI, no unaddressed review comments, and has received no review activity for over 2 hours (e.g. because peer review crashed or encountered quota limits), kickstart the review routine by posting `/review` comment or toggling draft and ready (`gh pr ready <PR> --undo && gh pr ready <PR>`).
144
+ 3c. **Orphaned Ready PR Recovery**: If an open PR authored by this routine is `ready_for_review`, has passing CI, no unaddressed review comments, and has received no review activity for over 2 hours (e.g. because peer review crashed or encountered quota limits), kickstart the review routine by toggling draft and ready (`gh pr ready <PR> --undo && gh pr ready <PR>`).
145
145
  - **Passing CI Verification Gate**: Verify via `gh pr view <PR> --json statusCheckRollup,mergeStateStatus` that all required and existing checks have completed with `conclusion: "SUCCESS"` and `mergeStateStatus` is `CLEAN` (neither `UNSTABLE`, `BLOCKED`, nor `DIRTY`).
146
- - **Unapproved/Pending Workflow Invariant**: NEVER post `/review` or toggle draft state if checks are in-progress, failing, or awaiting approval (`conclusion: "ACTION_REQUIRED"`). Doing so creates an infinite comment storm while workflows remain paused awaiting human permissions.
146
+ - **Unapproved/Pending Workflow Invariant**: NEVER toggle draft state if checks are in-progress, failing, or awaiting approval (`conclusion: "ACTION_REQUIRED"`). Doing so creates redundant review triggers while workflows remain paused awaiting human permissions.
147
147
  4. **Check open issues with merged PRs / work done — close them**:
148
148
  - For open issues, check if recent git history or merged PRs reference the issue (e.g. `git log -n 50 --grep="#<ISSUE_NUMBER>"` or `gh pr list --state merged --search "<ISSUE_NUMBER>" --limit 5`).
149
149
  - If a merged PR or commit on `main` resolved the issue, close it immediately:
@@ -12,8 +12,6 @@ on:
12
12
  description: 'Optional PR number to review in Targeted mode (leave blank for Scan mode)'
13
13
  required: false
14
14
  type: string
15
- issue_comment:
16
- types: [created]
17
15
 
18
16
  jobs:
19
17
  trigger-routine:
@@ -23,21 +21,9 @@ jobs:
23
21
  github.event.pull_request.head.repo.full_name == github.repository &&
24
22
  !startsWith(github.event.pull_request.head.ref, 'release-please--')) ||
25
23
  (github.event_name == 'schedule') ||
26
- (github.event_name == 'workflow_dispatch') ||
27
- (github.event_name == 'issue_comment' &&
28
- github.event.issue.pull_request != null &&
29
- !endsWith(github.event.comment.user.login, '[bot]') &&
30
- github.event.comment.user.type != 'Bot' &&
31
- (startsWith(github.event.comment.body, '/review') ||
32
- startsWith(github.event.comment.body, '/peer-review') ||
33
- startsWith(github.event.comment.body, '/retrigger') ||
34
- startsWith(github.event.comment.body, '/re-review') ||
35
- contains(github.event.comment.body, '/review') ||
36
- contains(github.event.comment.body, '/peer-review') ||
37
- contains(github.event.comment.body, '/retrigger') ||
38
- contains(github.event.comment.body, '/re-review')))
24
+ (github.event_name == 'workflow_dispatch')
39
25
  concurrency:
40
- group: review-routine-pr-${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number || 'scan' }}
26
+ group: review-routine-pr-${{ github.event.pull_request.number || inputs.pr_number || 'scan' }}
41
27
  cancel-in-progress: true
42
28
  runs-on: ubuntu-latest
43
29
  timeout-minutes: 65
@@ -52,7 +38,7 @@ jobs:
52
38
  id: guard
53
39
  env:
54
40
  GH_TOKEN: ${{ github.token }}
55
- PR_NUM: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
41
+ PR_NUM: ${{ github.event.pull_request.number || inputs.pr_number }}
56
42
  EVENT_NAME: ${{ github.event_name }}
57
43
  REPOSITORY: ${{ github.repository }}
58
44
  run: |
@@ -232,7 +218,7 @@ jobs:
232
218
  id: run-issue
233
219
  env:
234
220
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
235
- PR_ARG: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
221
+ PR_ARG: ${{ github.event.pull_request.number || inputs.pr_number }}
236
222
  EVENT_NAME: ${{ github.event_name }}
237
223
  RUN_ID: ${{ github.run_id }}
238
224
  SERVER_URL: ${{ github.server_url }}
@@ -275,8 +261,8 @@ jobs:
275
261
  ANTIGRAVITY_API_KEY: ${{ secrets.GEMINI_API_KEY }}
276
262
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
277
263
  ROUTINE: peer-review
278
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
279
- PR_URL: ${{ github.event.pull_request.html_url || github.event.issue.html_url }}
264
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
265
+ PR_URL: ${{ github.event.pull_request.html_url }}
280
266
  ROUTINE_ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
281
267
  MODEL: ${{ steps.routine-config.outputs.model || 'gemini-3.8-flash-high' }}
282
268
  PRINT_TIMEOUT: ${{ steps.routine-config.outputs.print_timeout || '55m' }}
@@ -322,7 +308,7 @@ jobs:
322
308
  if: failure() && steps.guard.outputs.skip != 'true'
323
309
  env:
324
310
  GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
325
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
311
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
326
312
  ROUTINE_ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
327
313
  GITHUB_SERVER_URL: ${{ github.server_url }}
328
314
  GITHUB_REPOSITORY: ${{ github.repository }}
@@ -333,7 +319,7 @@ jobs:
333
319
  if [ -n "$ROUTINE_ISSUE_NUMBER" ]; then
334
320
  LOG_REF=" · [Run Log #${ROUTINE_ISSUE_NUMBER}](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/issues/${ROUTINE_ISSUE_NUMBER})"
335
321
  fi
336
- gh pr comment "$PR_NUMBER" --body "⚠️ **Peer Review Routine Notice**: The automated review session encountered an execution error (e.g., API rate/quota limit or runner interruption)${LOG_REF}. The review will be retried automatically on the next scheduled scan sweep or can be re-triggered immediately by commenting \`/review\` on this PR.
322
+ gh pr comment "$PR_NUMBER" --body "⚠️ **Peer Review Routine Notice**: The automated review session encountered an execution error (e.g., API rate/quota limit or runner interruption)${LOG_REF}. The review will be retried automatically on the next scheduled scan sweep or can be re-triggered manually via workflow dispatch on this PR.
337
323
 
338
324
  _Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
339
325
  fi
@@ -376,7 +362,7 @@ jobs:
376
362
  RUN_ID: ${{ github.run_id }}
377
363
  SERVER_URL: ${{ github.server_url }}
378
364
  REPOSITORY: ${{ github.repository }}
379
- PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr_number }}
365
+ PR_NUMBER: ${{ github.event.pull_request.number || inputs.pr_number }}
380
366
  QUOTA_PAUSED: ${{ env.QUOTA_PAUSED }}
381
367
  QUOTA_RESET_INFO: ${{ env.QUOTA_RESET_INFO }}
382
368
  run: |