jonah-fleet 1.13.0 → 1.14.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 +11 -15
- package/dist/index.js +53 -3
- package/dist/lib/labels.d.ts.map +1 -1
- package/dist/lib/presets.d.ts.map +1 -1
- package/dist/lib/runner.d.ts +10 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/prompts/analytics-review.md +41 -0
- package/templates/workflows/analytics-review-cron.yml +313 -0
- package/templates/workflows/autowork-cron.yml +59 -4
- package/templates/workflows/dependency-check-cron.yml +64 -1
- package/templates/workflows/design-review-cron.yml +59 -4
- package/templates/workflows/issues-housekeeping-cron.yml +64 -1
- package/templates/workflows/prompt-optimizer-cron.yml +59 -4
- package/templates/workflows/trigger-autowork-manual.yml +59 -4
- package/templates/workflows/trigger-autowork-on-bug.yml +59 -4
- package/templates/workflows/trigger-autowork-on-merge.yml +59 -4
- package/templates/workflows/trigger-review-routine.yml +68 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,34 +5,30 @@ 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.
|
|
8
|
+
## [1.14.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.13.0...v1.14.0) (2026-09-19)
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
### Features
|
|
12
12
|
|
|
13
|
-
* **
|
|
14
|
-
* **memory:** introduce opt-in LESSONS.md operational memory tier ([#207](https://github.com/juliendurandeu/jonah-fleet/issues/207)) ([#219](https://github.com/juliendurandeu/jonah-fleet/issues/219)) ([13f74fa](https://github.com/juliendurandeu/jonah-fleet/commit/13f74fa2acc78554bba486b2bf77521106265f03))
|
|
15
|
-
* **orchestration:** standardize 'Why I believe this' structured human escalation card ([#229](https://github.com/juliendurandeu/jonah-fleet/issues/229)) ([997e1d2](https://github.com/juliendurandeu/jonah-fleet/commit/997e1d20d7d0a3970ecca9f209841db745f99979))
|
|
16
|
-
|
|
17
|
-
## [1.12.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.11.0...v1.12.0) (2026-09-18)
|
|
13
|
+
* **workflows:** handle LLM quota limits with graceful pause (status:quota-paused) ([#240](https://github.com/juliendurandeu/jonah-fleet/issues/240)) ([98bb176](https://github.com/juliendurandeu/jonah-fleet/commit/98bb176f0b29462ab9de6baf5d0f102fee78b0ba))
|
|
18
14
|
|
|
15
|
+
## [Unreleased] - 2026-09-19
|
|
19
16
|
|
|
20
17
|
### Features
|
|
21
18
|
|
|
22
|
-
* **
|
|
19
|
+
* **workflows:** intercept LLM quota limit errors (`Individual quota reached`), record reset timeline, label tracking issue `status:quota-paused`, and pause routine execution gracefully with exit code 0 to prevent broken Action builds and wasted runner minutes.
|
|
20
|
+
* **labels:** introduce `status:quota-paused` to core fleet label definitions.
|
|
23
21
|
|
|
22
|
+
## [1.13.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.12.0...v1.13.0) (2026-09-19)
|
|
24
23
|
|
|
25
|
-
### Bug Fixes
|
|
26
|
-
|
|
27
|
-
* **runner:** prevent premature routine termination on async background tasks in headless mode ([6641b2b](https://github.com/juliendurandeu/jonah-fleet/commit/6641b2b2e46ab363b73d490aac1144a33a1c69f9))
|
|
28
|
-
|
|
29
|
-
## [Unreleased] - 2026-09-19
|
|
30
24
|
|
|
31
25
|
### Features
|
|
32
26
|
|
|
33
|
-
* **
|
|
34
|
-
* **
|
|
35
|
-
* **
|
|
27
|
+
* **guard:** implement CLI runner loop-guard and circuit-breaker wrapper ([#222](https://github.com/juliendurandeu/jonah-fleet/issues/222)) ([bedacc0](https://github.com/juliendurandeu/jonah-fleet/commit/bedacc0d9bc2a36276f58901ffa2f2b06e797016))
|
|
28
|
+
* **memory:** introduce opt-in LESSONS.md operational memory tier ([#207](https://github.com/juliendurandeu/jonah-fleet/issues/207)) ([#219](https://github.com/juliendurandeu/jonah-fleet/issues/219)) ([13f74fa](https://github.com/juliendurandeu/jonah-fleet/commit/13f74fa2acc78554bba486b2bf77521106265f03))
|
|
29
|
+
* **orchestration:** standardize 'Why I believe this' structured human escalation card ([#229](https://github.com/juliendurandeu/jonah-fleet/issues/229)) ([997e1d2](https://github.com/juliendurandeu/jonah-fleet/commit/997e1d20d7d0a3970ecca9f209841db745f99979))
|
|
30
|
+
|
|
31
|
+
## [1.12.0](https://github.com/juliendurandeu/jonah-fleet/compare/v1.11.0...v1.12.0) (2026-09-18)
|
|
36
32
|
|
|
37
33
|
### Bug Fixes
|
|
38
34
|
|
package/dist/index.js
CHANGED
|
@@ -122,7 +122,7 @@ var ROUTINE_TO_WORKFLOW_MAP = {
|
|
|
122
122
|
"issues-housekeeping": ["issues-housekeeping-cron.yml"],
|
|
123
123
|
"dependency-update-security-check": ["dependency-check-cron.yml"],
|
|
124
124
|
"product-planning": [],
|
|
125
|
-
"analytics-review": [],
|
|
125
|
+
"analytics-review": ["analytics-review-cron.yml"],
|
|
126
126
|
"design-review": ["design-review-cron.yml"]
|
|
127
127
|
};
|
|
128
128
|
var FLEET_VERSION = "1.8.0";
|
|
@@ -1348,6 +1348,7 @@ var FLEET_CORE_LABELS = [
|
|
|
1348
1348
|
{ name: "status:running", color: "fbca04", description: "Routine execution in progress" },
|
|
1349
1349
|
{ name: "status:success", color: "0e8a16", description: "Routine execution succeeded" },
|
|
1350
1350
|
{ name: "status:failure", color: "d93f0b", description: "Routine execution failed" },
|
|
1351
|
+
{ name: "status:quota-paused", color: "e4e669", description: "Routine execution paused due to API quota limits" },
|
|
1351
1352
|
{ name: "needs-attention", color: "e11d48", description: "Requires maintainer triage" },
|
|
1352
1353
|
{ name: "runner:github-actions", color: "1f883d", description: "Executed via GitHub Actions" },
|
|
1353
1354
|
{ name: "runner:local", color: "bfd4f2", description: "Executed via local machine daemon" },
|
|
@@ -3943,8 +3944,56 @@ async function tryPostLocalRunMilestoneAsync(cwd, issueNumber, cardContent) {
|
|
|
3943
3944
|
}
|
|
3944
3945
|
}
|
|
3945
3946
|
}
|
|
3946
|
-
function
|
|
3947
|
+
function detectQuotaExceeded(output, stderr) {
|
|
3948
|
+
const combined = `${output}
|
|
3949
|
+
${stderr}`;
|
|
3950
|
+
if (/individual quota reached|quota reached/i.test(combined)) {
|
|
3951
|
+
const match = combined.match(/Resets in ([^.\n]+)/i);
|
|
3952
|
+
return {
|
|
3953
|
+
isQuota: true,
|
|
3954
|
+
resetInfo: match ? `Resets in ${match[1].trim()}` : void 0
|
|
3955
|
+
};
|
|
3956
|
+
}
|
|
3957
|
+
return { isQuota: false };
|
|
3958
|
+
}
|
|
3959
|
+
function tryReconcileLocalRunIssue(cwd, issueNumber, reportContent, exitCode, hostname, routine, quotaInfo) {
|
|
3947
3960
|
try {
|
|
3961
|
+
if (quotaInfo?.isQuota) {
|
|
3962
|
+
const resetStr = quotaInfo.resetInfo || "Resets in future window";
|
|
3963
|
+
const quotaCard = [
|
|
3964
|
+
`### \u23F8\uFE0F Milestone: Routine Execution Quota-Paused`,
|
|
3965
|
+
`- **Routine**: \`${routine || "local-routine"}\``,
|
|
3966
|
+
`- **Status**: LLM quota reached (\`${resetStr}\`)`,
|
|
3967
|
+
`- **Runner**: \`local (${hostname})\``,
|
|
3968
|
+
`- **Next Action**: Routine execution paused cleanly. Work will resume on next sweep after quota resets.`
|
|
3969
|
+
].join("\n");
|
|
3970
|
+
tryPostLocalRunMilestone(cwd, issueNumber, quotaCard);
|
|
3971
|
+
const finalBody2 = `${reportContent}
|
|
3972
|
+
|
|
3973
|
+
---
|
|
3974
|
+
_Generated by Jonah Fleet local runner on ${hostname}._`;
|
|
3975
|
+
const tmpFile2 = path12.join(os2.tmpdir(), `jonah-fleet-run-${issueNumber}-${Date.now()}.md`);
|
|
3976
|
+
fs12.writeFileSync(tmpFile2, finalBody2, "utf8");
|
|
3977
|
+
try {
|
|
3978
|
+
execSync2(`gh issue edit ${issueNumber} --body-file ${JSON.stringify(tmpFile2)}`, {
|
|
3979
|
+
cwd,
|
|
3980
|
+
stdio: ["ignore", "ignore", "ignore"]
|
|
3981
|
+
});
|
|
3982
|
+
execSync2(`gh issue edit ${issueNumber} --add-label "status:quota-paused" --remove-label "status:running"`, {
|
|
3983
|
+
cwd,
|
|
3984
|
+
stdio: ["ignore", "ignore", "ignore"]
|
|
3985
|
+
});
|
|
3986
|
+
execSync2(`gh issue close ${issueNumber} --reason completed`, {
|
|
3987
|
+
cwd,
|
|
3988
|
+
stdio: ["ignore", "ignore", "ignore"]
|
|
3989
|
+
});
|
|
3990
|
+
} finally {
|
|
3991
|
+
if (fs12.existsSync(tmpFile2)) {
|
|
3992
|
+
fs12.unlinkSync(tmpFile2);
|
|
3993
|
+
}
|
|
3994
|
+
}
|
|
3995
|
+
return;
|
|
3996
|
+
}
|
|
3948
3997
|
if (exitCode !== 0) {
|
|
3949
3998
|
const interruptionCard = formatInterruptionCard({
|
|
3950
3999
|
routine: routine || "local-routine",
|
|
@@ -4538,8 +4587,9 @@ Timeout: ${printTimeout}`,
|
|
|
4538
4587
|
);
|
|
4539
4588
|
} catch {
|
|
4540
4589
|
}
|
|
4590
|
+
const quotaInfo = detectQuotaExceeded(output, accumulatedStderr);
|
|
4541
4591
|
if (routineIssueNumber) {
|
|
4542
|
-
tryReconcileLocalRunIssue(targetDir, routineIssueNumber, reportContent, exitCode, hostname, routine);
|
|
4592
|
+
tryReconcileLocalRunIssue(targetDir, routineIssueNumber, reportContent, exitCode, hostname, routine, quotaInfo);
|
|
4543
4593
|
}
|
|
4544
4594
|
if (options.showCard !== false && !options.verbose) {
|
|
4545
4595
|
const prMatch = targetLabel.match(/PR\s*#?(\d+)/i);
|
package/dist/lib/labels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,sBAAsB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE1F,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,GAAG,EAAE,mBAAmB,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAqBpD,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,iBAAiB,GAAE,MAAM,EAAqC,GAC7D,OAAO,CAcT;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EAAE,EACvB,iBAAiB,GAAE,MAAM,EAAqC,GAC7D,gBAAgB,CAyClB;AAED,wBAAsB,eAAe,CACnC,cAAc,CAAC,EAAE,MAAM,EACvB,GAAG,GAAE,MAAsB,EAC3B,QAAQ,GAAE,UAA8B,GACvC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAiCD,wBAAsB,eAAe,CACnC,cAAc,CAAC,EAAE,MAAM,EACvB,QAAQ,GAAE,UAA8B,EACxC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CA6D1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6C9F;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/runner.d.ts
CHANGED
|
@@ -145,12 +145,21 @@ export declare function tryPostLocalRunMilestone(cwd: string, issueNumber: numbe
|
|
|
145
145
|
* Fails gracefully if offline or unauthenticated.
|
|
146
146
|
*/
|
|
147
147
|
export declare function tryPostLocalRunMilestoneAsync(cwd: string, issueNumber: number, cardContent: string): Promise<boolean>;
|
|
148
|
+
export interface QuotaDetectionResult {
|
|
149
|
+
isQuota: boolean;
|
|
150
|
+
resetInfo?: string;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Detects whether routine runner stdout/stderr failed due to LLM quota exhaustion.
|
|
154
|
+
*/
|
|
155
|
+
export declare function detectQuotaExceeded(output: string, stderr: string): QuotaDetectionResult;
|
|
148
156
|
/**
|
|
149
157
|
* Reconciles a GitHub issue for local routine execution.
|
|
150
158
|
* Closes the issue if success, leaves it open with needs-attention if failure.
|
|
159
|
+
* Handles quota-paused routines gracefully without marking as failure.
|
|
151
160
|
* Fails gracefully if offline or unauthenticated.
|
|
152
161
|
*/
|
|
153
|
-
export declare function tryReconcileLocalRunIssue(cwd: string, issueNumber: number, reportContent: string, exitCode: number, hostname: string, routine?: string): void;
|
|
162
|
+
export declare function tryReconcileLocalRunIssue(cwd: string, issueNumber: number, reportContent: string, exitCode: number, hostname: string, routine?: string, quotaInfo?: QuotaDetectionResult): void;
|
|
154
163
|
/**
|
|
155
164
|
* Asynchronously marks an interrupted local routine run as failed and posts an interruption card.
|
|
156
165
|
* Leaves the issue open with status:failure,needs-attention for maintainer triage.
|
package/dist/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -38,6 +38,16 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
38
38
|
1. List all open issues tagged `measurement/*`, `telemetry/*`, or tracking feature adoption experiments.
|
|
39
39
|
2. Read the baseline metric targets, hypothesis, and evaluation criteria defined in each tracker.
|
|
40
40
|
3. Fetch or query relevant telemetry events, conversion funnels, and failure rates from logs or telemetry endpoints.
|
|
41
|
+
4. **Milestone 1 (Intake & Measurement Scan)**: If `$ROUTINE_ISSUE_NUMBER` is set, emit milestone card to the routine issue thread:
|
|
42
|
+
```bash
|
|
43
|
+
gh issue comment "$ROUTINE_ISSUE_NUMBER" --body "### 🧭 Milestone: Intake & Measurement Scan
|
|
44
|
+
- **Routine**: \`analytics-review\`
|
|
45
|
+
- **Active Trackers**: Evaluated open measurement issues and telemetry datasets
|
|
46
|
+
- **Status**: Telemetry queried, beginning feature adoption & guardrail evaluation
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
|
|
50
|
+
```
|
|
41
51
|
|
|
42
52
|
### Step 2: Evaluate adoption and intent metrics
|
|
43
53
|
|
|
@@ -56,6 +66,17 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
56
66
|
2. **Nudge & Banner Fatigue Rule**:
|
|
57
67
|
- Audit persistent promotional banners, cards, and nudges across active screens.
|
|
58
68
|
- Alert (P2) and mandate `RECOMMENDATION: DEPRECATE` or `RECOMMENDATION: PIVOT` if any persistent promotional banner/card exceeds 500 impressions in a 14-day window with an impression-to-action CTR < 2.0%, flagging it for consolidation, throttling, or clean removal to prevent visual crowding.
|
|
69
|
+
3. **Milestone 2 (Evaluation & UI Friction Audit)**: If `$ROUTINE_ISSUE_NUMBER` is set, emit milestone card to the routine issue thread:
|
|
70
|
+
```bash
|
|
71
|
+
gh issue comment "$ROUTINE_ISSUE_NUMBER" --body "### 🔍 Milestone: Evaluation & UI Friction Audit
|
|
72
|
+
- **Adoption & Conversion**: Target vs actual computed across active trackers
|
|
73
|
+
- **UI Friction**: Rage clicks analyzed by component & URL
|
|
74
|
+
- **Nudge Fatigue**: Persistent promotional banners/cards audited against 500 impressions / 2% CTR rule
|
|
75
|
+
- **Status**: Formulating post-measurement action directives
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
|
|
79
|
+
```
|
|
59
80
|
|
|
60
81
|
### Step 3: Emit mandatory Post-Measurement Action Directive
|
|
61
82
|
|
|
@@ -79,6 +100,16 @@ When a measurement tracker is conclusive or reaches sub-threshold adoption (<2%
|
|
|
79
100
|
- Reference to the staged product planning item (`Staged to #M`)
|
|
80
101
|
- Antigravity run footer
|
|
81
102
|
2. Close the issue as completed.
|
|
103
|
+
3. **Milestone 3 (Directives & Staging Updates)**: If `$ROUTINE_ISSUE_NUMBER` is set, emit milestone card to the routine issue thread:
|
|
104
|
+
```bash
|
|
105
|
+
gh issue comment "$ROUTINE_ISSUE_NUMBER" --body "### 🎯 Milestone: Directives & Staging Updates
|
|
106
|
+
- **Directives Staged**: Action directives staged into Product Plan / roadmap
|
|
107
|
+
- **Closed Trackers**: Conclusive measurement issues closed
|
|
108
|
+
- **Standing Guardrails**: Updated health baselines
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
|
|
112
|
+
```
|
|
82
113
|
|
|
83
114
|
## Logging
|
|
84
115
|
|
|
@@ -91,3 +122,13 @@ After completing (SUCCESS or FAILURE), record run execution details to `.jonah-f
|
|
|
91
122
|
**Issue Logging Protocol**:
|
|
92
123
|
- Record run execution details to `.jonah-fleet/run-report.md` (or update `$ROUTINE_ISSUE_NUMBER`).
|
|
93
124
|
- Follow the Routine Issue Logging & Telemetry Protocol in `ORCHESTRATION.md`. Never commit run logs to git branches.
|
|
125
|
+
- **Milestone 4 (Run Completed)**: If `$ROUTINE_ISSUE_NUMBER` is set in the environment, append the concluding compact milestone card to close out the comment stream:
|
|
126
|
+
```bash
|
|
127
|
+
gh issue comment "$ROUTINE_ISSUE_NUMBER" --body "### 🏁 Milestone: Run Completed
|
|
128
|
+
- **Verdict**: \`SUCCESS\`
|
|
129
|
+
- **Trackers Evaluated**: \`$EVALUATED_COUNT\`
|
|
130
|
+
- **Directives Staged**: \`$DIRECTIVES_SUMMARY\`
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_" || true
|
|
134
|
+
```
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
name: Analytics Review Scheduled Cron (agy)
|
|
2
|
+
|
|
3
|
+
# Scheduled execution of the Analytics Review routine using Antigravity CLI on Gemini 3.8 Flash.
|
|
4
|
+
# Queries Vercel, PostHog, and GitHub CI volume, executes §1–§7 checks, updates measurement trackers,
|
|
5
|
+
# stages product action directives into Product Planning, and logs to a two-phase routine run issue.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
schedule:
|
|
9
|
+
# Daily at 07:00 UTC (09:00 Paris CEST)
|
|
10
|
+
- cron: '0 7 * * *'
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
# Single-flight: do not run overlapping analytics review runs.
|
|
14
|
+
concurrency:
|
|
15
|
+
group: analytics-review-agent
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
run-analytics-review:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
timeout-minutes: 60
|
|
22
|
+
permissions:
|
|
23
|
+
contents: write
|
|
24
|
+
issues: write
|
|
25
|
+
pull-requests: write
|
|
26
|
+
statuses: write
|
|
27
|
+
actions: read
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 0
|
|
33
|
+
persist-credentials: false
|
|
34
|
+
|
|
35
|
+
- name: Setup Node.js
|
|
36
|
+
uses: actions/setup-node@v4
|
|
37
|
+
with:
|
|
38
|
+
node-version: 22
|
|
39
|
+
|
|
40
|
+
- name: Configure Git author identity
|
|
41
|
+
env:
|
|
42
|
+
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
43
|
+
run: |
|
|
44
|
+
git config --global user.name "github-actions[bot]"
|
|
45
|
+
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
46
|
+
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
47
|
+
gh auth setup-git
|
|
48
|
+
|
|
49
|
+
- name: Cache Antigravity CLI
|
|
50
|
+
id: cache-agy
|
|
51
|
+
uses: actions/cache@v4
|
|
52
|
+
with:
|
|
53
|
+
path: ~/.local/bin/agy
|
|
54
|
+
key: agy-cli-linux-amd64-v1
|
|
55
|
+
|
|
56
|
+
- name: Install Antigravity CLI
|
|
57
|
+
if: steps.cache-agy.outputs.cache-hit != 'true'
|
|
58
|
+
run: |
|
|
59
|
+
curl -fsSL https://antigravity.google/cli/install.sh | bash
|
|
60
|
+
|
|
61
|
+
- name: Add Antigravity CLI to PATH
|
|
62
|
+
run: echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
63
|
+
|
|
64
|
+
- name: Write Antigravity OAuth Token
|
|
65
|
+
env:
|
|
66
|
+
ANTIGRAVITY_OAUTH_TOKEN: ${{ secrets.ANTIGRAVITY_OAUTH_TOKEN || secrets.GEMINI_API_KEY }}
|
|
67
|
+
run: |
|
|
68
|
+
if [ -z "$ANTIGRAVITY_OAUTH_TOKEN" ]; then
|
|
69
|
+
echo "::error::Neither ANTIGRAVITY_OAUTH_TOKEN nor GEMINI_API_KEY secret is set; cannot authenticate Antigravity CLI." >&2
|
|
70
|
+
exit 1
|
|
71
|
+
fi
|
|
72
|
+
mkdir -p "$HOME/.gemini/antigravity-cli"
|
|
73
|
+
chmod 700 "$HOME/.gemini/antigravity-cli"
|
|
74
|
+
printf '%s' "$ANTIGRAVITY_OAUTH_TOKEN" > "$HOME/.gemini/antigravity-cli/antigravity-oauth-token"
|
|
75
|
+
chmod 600 "$HOME/.gemini/antigravity-cli/antigravity-oauth-token"
|
|
76
|
+
|
|
77
|
+
- name: Fast preflight credential validation (SwarmClaw Pattern #2)
|
|
78
|
+
run: |
|
|
79
|
+
if [ ! -s "$HOME/.gemini/antigravity-cli/antigravity-oauth-token" ]; then
|
|
80
|
+
echo "::error::Preflight credential check failed: Antigravity OAuth token file is missing or empty." >&2
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
echo "✓ Preflight credential validation passed."
|
|
84
|
+
|
|
85
|
+
- name: Discover and compile domain skills (SwarmClaw Pattern #4)
|
|
86
|
+
id: skills
|
|
87
|
+
run: |
|
|
88
|
+
SKILLS_LIST=""
|
|
89
|
+
if [ -f ".agents/skills/validate-data/SKILL.md" ]; then
|
|
90
|
+
SKILLS_LIST="Read and follow .agents/skills/validate-data/SKILL.md."
|
|
91
|
+
fi
|
|
92
|
+
echo "skills_prompt=$SKILLS_LIST" >> "$GITHUB_OUTPUT"
|
|
93
|
+
|
|
94
|
+
- name: Resolve routine configuration
|
|
95
|
+
id: routine-config
|
|
96
|
+
run: |
|
|
97
|
+
ROUTINE="analytics-review"
|
|
98
|
+
DEFAULT_MODEL="gemini-3.8-flash-high"
|
|
99
|
+
DEFAULT_TIMEOUT="50"
|
|
100
|
+
|
|
101
|
+
MODEL="$DEFAULT_MODEL"
|
|
102
|
+
TIMEOUT="$DEFAULT_TIMEOUT"
|
|
103
|
+
|
|
104
|
+
if [ -f "agents-manifest.json" ]; then
|
|
105
|
+
CONFIG_JSON=$(node -e '
|
|
106
|
+
try {
|
|
107
|
+
const fs = require("fs");
|
|
108
|
+
const m = JSON.parse(fs.readFileSync("agents-manifest.json", "utf8"));
|
|
109
|
+
const r = process.argv[1];
|
|
110
|
+
const model = m.models?.[r] || m.models?.default;
|
|
111
|
+
const timeout = m.budgets?.timeoutMinutes?.[r] || m.budgets?.timeoutMinutes?.default;
|
|
112
|
+
console.log(JSON.stringify({ model: model || "", timeout: timeout ? String(timeout) : "" }));
|
|
113
|
+
} catch (e) {
|
|
114
|
+
console.log(JSON.stringify({ model: "", timeout: "" }));
|
|
115
|
+
}
|
|
116
|
+
' "$ROUTINE")
|
|
117
|
+
|
|
118
|
+
RESOLVED_MODEL=$(node -e "try { console.log(JSON.parse(process.argv[1]).model || ''); } catch {}" "$CONFIG_JSON")
|
|
119
|
+
RESOLVED_TIMEOUT=$(node -e "try { console.log(JSON.parse(process.argv[1]).timeout || ''); } catch {}" "$CONFIG_JSON")
|
|
120
|
+
|
|
121
|
+
if [ -n "$RESOLVED_MODEL" ]; then
|
|
122
|
+
MODEL="$RESOLVED_MODEL"
|
|
123
|
+
fi
|
|
124
|
+
if [ -n "$RESOLVED_TIMEOUT" ]; then
|
|
125
|
+
TIMEOUT="$RESOLVED_TIMEOUT"
|
|
126
|
+
fi
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
echo "model=$MODEL" >> "$GITHUB_OUTPUT"
|
|
130
|
+
echo "print_timeout=${TIMEOUT}m" >> "$GITHUB_OUTPUT"
|
|
131
|
+
echo "Resolved routine configuration: model=$MODEL, timeout=${TIMEOUT}m"
|
|
132
|
+
|
|
133
|
+
- name: Initialize Routine Run Issue
|
|
134
|
+
id: run-issue
|
|
135
|
+
env:
|
|
136
|
+
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
137
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
138
|
+
RUN_ID: ${{ github.run_id }}
|
|
139
|
+
SERVER_URL: ${{ github.server_url }}
|
|
140
|
+
REPOSITORY: ${{ github.repository }}
|
|
141
|
+
run: |
|
|
142
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
|
|
143
|
+
TITLE="[analytics-review] run ${TIMESTAMP}"
|
|
144
|
+
BODY="### Autonomous Routine Execution in Progress
|
|
145
|
+
- **Routine**: \`analytics-review\`
|
|
146
|
+
- **Timestamp**: \`${TIMESTAMP}\`
|
|
147
|
+
- **Trigger**: \`${EVENT_NAME}\`
|
|
148
|
+
- **Run ID**: [\`${RUN_ID}\`](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
|
|
152
|
+
ISSUE_URL=$(gh issue create --title "$TITLE" --body "$BODY" --label "routine-log,routine:analytics-review,status:running,runner:github-actions")
|
|
153
|
+
ISSUE_NUMBER=$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')
|
|
154
|
+
echo "issue_number=$ISSUE_NUMBER" >> "$GITHUB_OUTPUT"
|
|
155
|
+
echo "ROUTINE_ISSUE_NUMBER=$ISSUE_NUMBER" >> "$GITHUB_ENV"
|
|
156
|
+
|
|
157
|
+
- name: Run Analytics Review
|
|
158
|
+
timeout-minutes: 50
|
|
159
|
+
env:
|
|
160
|
+
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
161
|
+
GOOGLE_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
162
|
+
ANTIGRAVITY_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
163
|
+
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
164
|
+
ROUTINE_ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
165
|
+
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
|
|
166
|
+
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
|
|
167
|
+
MODEL: ${{ steps.routine-config.outputs.model || 'gemini-3.8-flash-high' }}
|
|
168
|
+
PRINT_TIMEOUT: ${{ steps.routine-config.outputs.print_timeout || '50m' }}
|
|
169
|
+
SKILLS_PROMPT: ${{ steps.skills.outputs.skills_prompt }}
|
|
170
|
+
GITHUB_SERVER_URL: ${{ github.server_url }}
|
|
171
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
172
|
+
GITHUB_RUN_ID: ${{ github.run_id }}
|
|
173
|
+
run: |
|
|
174
|
+
PROMPT="You are the Analytics Review routine for this repository. Read and follow the instructions in .github/prompts/analytics-review.md exactly. ${SKILLS_PROMPT}"
|
|
175
|
+
|
|
176
|
+
set +e
|
|
177
|
+
agy -p "$PROMPT" \
|
|
178
|
+
--model "$MODEL" \
|
|
179
|
+
--output-format text \
|
|
180
|
+
--print-timeout "$PRINT_TIMEOUT" \
|
|
181
|
+
--dangerously-skip-permissions 2>&1 | tee /tmp/agy.log
|
|
182
|
+
AGY_EXIT_CODE="${PIPESTATUS[0]}"
|
|
183
|
+
set -e
|
|
184
|
+
|
|
185
|
+
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
186
|
+
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
187
|
+
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
188
|
+
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
189
|
+
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
190
|
+
echo "⚠️ LLM quota limit reached ($RESET_INFO). Pausing routine gracefully until next sweep."
|
|
191
|
+
exit 0
|
|
192
|
+
fi
|
|
193
|
+
exit "$AGY_EXIT_CODE"
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
- name: Emit run summary
|
|
197
|
+
if: always()
|
|
198
|
+
run: |
|
|
199
|
+
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
200
|
+
echo "### ⏸️ Milestone: Routine Execution Quota-Paused" >> "$GITHUB_STEP_SUMMARY"
|
|
201
|
+
echo "- **Status**: LLM quota reached (\`${QUOTA_RESET_INFO}\`)" >> "$GITHUB_STEP_SUMMARY"
|
|
202
|
+
echo "- **Next Action**: Routine execution paused cleanly. Work will resume automatically on the next scheduled sweep after the quota window resets." >> "$GITHUB_STEP_SUMMARY"
|
|
203
|
+
else
|
|
204
|
+
REPORT_FILE=".jonah-fleet/run-report.md"
|
|
205
|
+
if [ -f "$REPORT_FILE" ] && [ -n "$GITHUB_STEP_SUMMARY" ]; then
|
|
206
|
+
cat "$REPORT_FILE" >> "$GITHUB_STEP_SUMMARY"
|
|
207
|
+
fi
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
- name: Emit Fleet Telemetry (Opt-in)
|
|
211
|
+
if: always()
|
|
212
|
+
env:
|
|
213
|
+
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
214
|
+
TELEMETRY_ENDPOINT: ${{ secrets.JONAH_FLEET_TELEMETRY_ENDPOINT }}
|
|
215
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
216
|
+
GITHUB_RUN_ID: ${{ github.run_id }}
|
|
217
|
+
GITHUB_RUN_NUMBER: ${{ github.run_number }}
|
|
218
|
+
run: |
|
|
219
|
+
REPORT_FILE=".jonah-fleet/run-report.md"
|
|
220
|
+
if [ -f "$REPORT_FILE" ]; then
|
|
221
|
+
npx --yes jonah-fleet telemetry --emit --log "$REPORT_FILE" --endpoint "$TELEMETRY_ENDPOINT" || true
|
|
222
|
+
fi
|
|
223
|
+
|
|
224
|
+
- name: Reconcile Routine Run Issue
|
|
225
|
+
if: always()
|
|
226
|
+
env:
|
|
227
|
+
GH_TOKEN: ${{ secrets.GH_PAT || github.token }}
|
|
228
|
+
ISSUE_NUMBER: ${{ steps.run-issue.outputs.issue_number }}
|
|
229
|
+
JOB_STATUS: ${{ job.status }}
|
|
230
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
231
|
+
RUN_ID: ${{ github.run_id }}
|
|
232
|
+
SERVER_URL: ${{ github.server_url }}
|
|
233
|
+
REPOSITORY: ${{ github.repository }}
|
|
234
|
+
QUOTA_PAUSED: ${{ env.QUOTA_PAUSED }}
|
|
235
|
+
QUOTA_RESET_INFO: ${{ env.QUOTA_RESET_INFO }}
|
|
236
|
+
run: |
|
|
237
|
+
if [ -z "$ISSUE_NUMBER" ]; then
|
|
238
|
+
echo "No routine issue to reconcile."
|
|
239
|
+
exit 0
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
if [ "$QUOTA_PAUSED" = "true" ]; then
|
|
243
|
+
RESET_STR="${QUOTA_RESET_INFO:-Resets in upcoming window}"
|
|
244
|
+
PAUSE_BODY="### ⏸️ Autonomous Routine Execution Quota-Paused
|
|
245
|
+
- **Routine**: \`analytics-review\`
|
|
246
|
+
- **Run ID**: [\`${RUN_ID}\`](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
|
|
247
|
+
- **Trigger**: \`${EVENT_NAME}\`
|
|
248
|
+
- **Status**: LLM quota reached (\`${RESET_STR}\`)
|
|
249
|
+
- **Next Action**: Routine execution paused cleanly. Work will resume automatically on the next scheduled sweep after the quota window resets.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
|
|
253
|
+
|
|
254
|
+
TEMP_BODY=$(mktemp)
|
|
255
|
+
echo "$PAUSE_BODY" > "$TEMP_BODY"
|
|
256
|
+
gh issue edit "$ISSUE_NUMBER" --body-file "$TEMP_BODY"
|
|
257
|
+
rm -f "$TEMP_BODY"
|
|
258
|
+
|
|
259
|
+
PAUSE_COMMENT=$(printf '%s\n' \
|
|
260
|
+
"### ⏸️ Milestone: Routine Execution Quota-Paused" \
|
|
261
|
+
"- **Routine**: \`analytics-review\`" \
|
|
262
|
+
"- **Status**: LLM quota reached (\`${RESET_STR}\`)" \
|
|
263
|
+
"- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
|
|
264
|
+
"- **Next Action**: Execution paused cleanly. The routine will resume automatically on the next scheduled sweep." \
|
|
265
|
+
"" \
|
|
266
|
+
"---" \
|
|
267
|
+
"_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
|
|
268
|
+
gh issue comment "$ISSUE_NUMBER" --body "$PAUSE_COMMENT" || true
|
|
269
|
+
gh issue edit "$ISSUE_NUMBER" --add-label "status:quota-paused" --remove-label "status:running"
|
|
270
|
+
gh issue close "$ISSUE_NUMBER" --reason completed
|
|
271
|
+
echo "⏸️ Routine run issue #$ISSUE_NUMBER closed with status:quota-paused."
|
|
272
|
+
exit 0
|
|
273
|
+
fi
|
|
274
|
+
|
|
275
|
+
REPORT_FILE=".jonah-fleet/run-report.md"
|
|
276
|
+
|
|
277
|
+
if [ -f "$REPORT_FILE" ]; then
|
|
278
|
+
BODY_CONTENT=$(cat "$REPORT_FILE")
|
|
279
|
+
else
|
|
280
|
+
BODY_CONTENT="### Autonomous Routine Execution Completed (${JOB_STATUS})
|
|
281
|
+
- **Routine**: \`analytics-review\`
|
|
282
|
+
- **Run ID**: [\`${RUN_ID}\`](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})
|
|
283
|
+
- **Trigger**: \`${EVENT_NAME}\`"
|
|
284
|
+
fi
|
|
285
|
+
|
|
286
|
+
FINAL_BODY="${BODY_CONTENT}
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_"
|
|
290
|
+
|
|
291
|
+
TEMP_BODY=$(mktemp)
|
|
292
|
+
echo "$FINAL_BODY" > "$TEMP_BODY"
|
|
293
|
+
gh issue edit "$ISSUE_NUMBER" --body-file "$TEMP_BODY"
|
|
294
|
+
rm -f "$TEMP_BODY"
|
|
295
|
+
|
|
296
|
+
if [ "$JOB_STATUS" = "success" ]; then
|
|
297
|
+
gh issue edit "$ISSUE_NUMBER" --add-label "status:success" --remove-label "status:running"
|
|
298
|
+
gh issue close "$ISSUE_NUMBER" --reason completed
|
|
299
|
+
echo "✓ Routine run issue #$ISSUE_NUMBER closed as completed."
|
|
300
|
+
else
|
|
301
|
+
INTERRUPTION_BODY=$(printf '%s\n' \
|
|
302
|
+
"### ❌ Milestone: Run Interrupted / Failed" \
|
|
303
|
+
"- **Routine**: \`analytics-review\`" \
|
|
304
|
+
"- **Status**: Workflow job failed or timed out (\`${JOB_STATUS}\`)" \
|
|
305
|
+
"- **Step**: Actions execution halted before normal completion" \
|
|
306
|
+
"- **Action Log**: [View GitHub Actions Run](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})" \
|
|
307
|
+
"" \
|
|
308
|
+
"---" \
|
|
309
|
+
"_Generated by [Antigravity](${SERVER_URL}/${REPOSITORY}/actions/runs/${RUN_ID})_")
|
|
310
|
+
gh issue comment "$ISSUE_NUMBER" --body "$INTERRUPTION_BODY" || true
|
|
311
|
+
gh issue edit "$ISSUE_NUMBER" --add-label "status:failure,needs-attention" --remove-label "status:running"
|
|
312
|
+
echo "⚠️ Routine run issue #$ISSUE_NUMBER left open for triage (status: $JOB_STATUS)."
|
|
313
|
+
fi
|