jonah-fleet 1.30.5 → 1.31.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 +25 -0
- package/dist/index.js +95 -11
- package/dist/lib/daemon.d.ts +23 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/labels.d.ts.map +1 -1
- package/dist/lib/runner.d.ts +2 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/prompts/ORCHESTRATION.md +9 -4
- package/templates/prompts/analytics-review.md +55 -11
- package/templates/prompts/design-review.md +52 -17
- package/templates/prompts/product-planning.md +54 -12
- package/templates/workflows/analytics-review-cron.yml +1 -1
- package/templates/workflows/autowork-cron.yml +1 -1
- package/templates/workflows/dependency-check-cron.yml +1 -1
- package/templates/workflows/design-review-cron.yml +1 -1
- package/templates/workflows/issues-housekeeping-cron.yml +1 -1
- package/templates/workflows/prompt-optimizer-cron.yml +1 -1
- package/templates/workflows/trigger-autowork-manual.yml +1 -1
- package/templates/workflows/trigger-autowork-on-assign.yml +1 -1
- package/templates/workflows/trigger-autowork-on-bug.yml +1 -1
- package/templates/workflows/trigger-autowork-on-merge.yml +1 -1
- package/templates/workflows/trigger-review-routine.yml +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ 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.31.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.31.0...v1.31.1) (2026-10-01)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **daemon:** add quota exhaustion cooldown and PR failure backoff ([#549](https://github.com/Jonah-Projects/jonah-fleet/issues/549)) ([9806a28](https://github.com/Jonah-Projects/jonah-fleet/commit/9806a283900c81769a2d565b88dd9e6486eee9e5))
|
|
14
|
+
|
|
15
|
+
## [1.31.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.5...v1.31.0) (2026-10-01)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **product-planning:** establish Continuous Staging Container lifecycle and cycle lookback ([#526](https://github.com/Jonah-Projects/jonah-fleet/issues/526)) ([2bfd318](https://github.com/Jonah-Projects/jonah-fleet/commit/2bfd31897c7a32f359b2b6ba8dd4d87b7c6b9b5c))
|
|
21
|
+
|
|
8
22
|
## [1.30.5](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.4...v1.30.5) (2026-10-01)
|
|
9
23
|
|
|
10
24
|
|
|
@@ -28,8 +42,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
28
42
|
|
|
29
43
|
## [Unreleased] - 2026-10-01
|
|
30
44
|
|
|
45
|
+
### Features
|
|
46
|
+
|
|
47
|
+
* **product-planning:** establish Continuous Staging Container lifecycle (`status:staging`) and 16-day cycle lookback window so daily telemetry directives stream continuously without mid-sprint loss
|
|
48
|
+
* **product-planning:** remove artificial 3-proposal cap so planning stages all relevant proposals for operator review
|
|
49
|
+
* **analytics-review:** stream daily measurement directives directly as comments into active product plan staging containers with self-healing lazy initialization
|
|
50
|
+
* **design-review:** stream visual critique, clutter analysis, and pruning directives directly into active product plan staging containers instead of creating standalone open tracking issues
|
|
51
|
+
* **labels:** add `status:staging` to default fleet label taxonomy for upcoming product planning containers
|
|
52
|
+
|
|
31
53
|
### Bug Fixes
|
|
32
54
|
|
|
55
|
+
* **daemon:** add LLM quota exhaustion backoff (15m cooldown) and PR failure tracking to prevent infinite retry loops on exhausted or failing PRs
|
|
56
|
+
* **runner:** expand detectQuotaExceeded to match RESOURCE_EXHAUSTED, code 429, and rate_limit_exceeded CLI errors
|
|
57
|
+
* **workflows:** expand quota-pause regex to detect RESOURCE_EXHAUSTED and code 429 across all routine workflows
|
|
33
58
|
* **workflows:** mark quota-paused workflow runs as failed (`exit 1`) with an error annotation and keep routine issues open with `status:quota-paused` instead of falsely reporting success
|
|
34
59
|
|
|
35
60
|
## [1.30.2](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.1...v1.30.2) (2026-09-30)
|
package/dist/index.js
CHANGED
|
@@ -1373,6 +1373,7 @@ var FLEET_CORE_LABELS = [
|
|
|
1373
1373
|
{ name: "status:success", color: "0e8a16", description: "Routine execution succeeded" },
|
|
1374
1374
|
{ name: "status:failure", color: "d93f0b", description: "Routine execution failed" },
|
|
1375
1375
|
{ name: "status:quota-paused", color: "e4e669", description: "Routine execution paused due to API quota limits" },
|
|
1376
|
+
{ name: "status:staging", color: "fbca04", description: "Staging container for upcoming product proposals" },
|
|
1376
1377
|
{ name: "needs-attention", color: "e11d48", description: "Requires maintainer triage" },
|
|
1377
1378
|
{ name: "runner:github-actions", color: "1f883d", description: "Executed via GitHub Actions" },
|
|
1378
1379
|
{ name: "runner:local", color: "bfd4f2", description: "Executed via local machine daemon" },
|
|
@@ -4434,8 +4435,10 @@ async function tryPostLocalRunMilestoneAsync(cwd, issueNumber, cardContent) {
|
|
|
4434
4435
|
function detectQuotaExceeded(output, stderr) {
|
|
4435
4436
|
const combined = `${output}
|
|
4436
4437
|
${stderr}`;
|
|
4437
|
-
if (/individual quota reached|quota reached/i.test(
|
|
4438
|
-
|
|
4438
|
+
if (/individual quota reached|quota reached|RESOURCE_EXHAUSTED|resource has been exhausted|rate_limit_exceeded|rate limit exceeded|code 429|check quota/i.test(
|
|
4439
|
+
combined
|
|
4440
|
+
)) {
|
|
4441
|
+
const match = combined.match(/(?:Resets in|resets in|retry after)\s+([^.\n]+)/i);
|
|
4439
4442
|
return {
|
|
4440
4443
|
isQuota: true,
|
|
4441
4444
|
resetInfo: match ? `Resets in ${match[1].trim()}` : void 0
|
|
@@ -5185,7 +5188,9 @@ Timeout: ${printTimeout}`,
|
|
|
5185
5188
|
stderr: accumulatedStderr,
|
|
5186
5189
|
worktreePath,
|
|
5187
5190
|
branchName,
|
|
5188
|
-
issueNumber: routineIssueNumber
|
|
5191
|
+
issueNumber: routineIssueNumber,
|
|
5192
|
+
quotaPaused: quotaInfo.isQuota,
|
|
5193
|
+
quotaResetInfo: quotaInfo.resetInfo
|
|
5189
5194
|
};
|
|
5190
5195
|
}
|
|
5191
5196
|
|
|
@@ -6048,7 +6053,9 @@ async function drainReviewQueue(drainOptions) {
|
|
|
6048
6053
|
clearTicker,
|
|
6049
6054
|
getPRs = getOpenReviewablePRs,
|
|
6050
6055
|
runRoutine = runLocalRoutine,
|
|
6051
|
-
onAttempted
|
|
6056
|
+
onAttempted,
|
|
6057
|
+
failureCooldowns,
|
|
6058
|
+
onQuotaExhausted
|
|
6052
6059
|
} = drainOptions;
|
|
6053
6060
|
if (isStopping()) return;
|
|
6054
6061
|
if (state) {
|
|
@@ -6069,13 +6076,22 @@ async function drainReviewQueue(drainOptions) {
|
|
|
6069
6076
|
return;
|
|
6070
6077
|
}
|
|
6071
6078
|
const attemptedPRNumbers = /* @__PURE__ */ new Set();
|
|
6079
|
+
const cooldownDurationMs = (options.prFailureCooldownMinutes ?? 15) * 60 * 1e3;
|
|
6072
6080
|
while (!isStopping() && reviewablePRs.length > 0) {
|
|
6073
|
-
const
|
|
6081
|
+
const now = Date.now();
|
|
6082
|
+
const candidatePRs = reviewablePRs.filter((pr) => {
|
|
6083
|
+
if (attemptedPRNumbers.has(pr.number)) return false;
|
|
6084
|
+
const cooldown = failureCooldowns?.get(pr.number);
|
|
6085
|
+
if (cooldown && now - cooldown.failedAt < cooldownDurationMs) {
|
|
6086
|
+
return false;
|
|
6087
|
+
}
|
|
6088
|
+
return true;
|
|
6089
|
+
});
|
|
6074
6090
|
if (candidatePRs.length === 0) {
|
|
6075
6091
|
if (options.verbose) {
|
|
6076
6092
|
console.log(
|
|
6077
6093
|
pc14.dim(
|
|
6078
|
-
`[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] All ${reviewablePRs.length} remaining ready PR(s) were already evaluated in this drain pass.`
|
|
6094
|
+
`[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] All ${reviewablePRs.length} remaining ready PR(s) were already evaluated or in failure cooldown in this drain pass.`
|
|
6079
6095
|
)
|
|
6080
6096
|
);
|
|
6081
6097
|
}
|
|
@@ -6123,18 +6139,43 @@ async function drainReviewQueue(drainOptions) {
|
|
|
6123
6139
|
attemptedPRNumbers.add(prNum);
|
|
6124
6140
|
onAttempted?.(prNum);
|
|
6125
6141
|
}
|
|
6142
|
+
const isQuota = result.quotaPaused || !result.success && detectQuotaExceeded(result.output || "", result.stderr || "").isQuota;
|
|
6143
|
+
if (isQuota) {
|
|
6144
|
+
const resetInfo = result.quotaResetInfo || detectQuotaExceeded(result.output || "", result.stderr || "").resetInfo;
|
|
6145
|
+
console.warn(
|
|
6146
|
+
pc14.yellow(
|
|
6147
|
+
`
|
|
6148
|
+
\u26A0\uFE0F Peer Review on ${targetLabel} paused due to LLM quota exhaustion (${resetInfo || "RESOURCE_EXHAUSTED / 429"}).`
|
|
6149
|
+
)
|
|
6150
|
+
);
|
|
6151
|
+
if (typeof prNum === "number") {
|
|
6152
|
+
const prev = failureCooldowns?.get(prNum);
|
|
6153
|
+
failureCooldowns?.set(prNum, { failedAt: Date.now(), count: (prev?.count || 0) + 1 });
|
|
6154
|
+
}
|
|
6155
|
+
onQuotaExhausted?.(resetInfo);
|
|
6156
|
+
break;
|
|
6157
|
+
}
|
|
6126
6158
|
if (result.success) {
|
|
6127
6159
|
console.log(pc14.green(`\u2713 Local peer-review on ${targetLabel} completed successfully.
|
|
6128
6160
|
`));
|
|
6161
|
+
if (typeof prNum === "number") {
|
|
6162
|
+
failureCooldowns?.delete(prNum);
|
|
6163
|
+
}
|
|
6129
6164
|
} else {
|
|
6130
6165
|
console.warn(pc14.yellow(`\u26A0\uFE0F Local peer-review on ${targetLabel} completed with code ${result.exitCode}.
|
|
6131
6166
|
`));
|
|
6167
|
+
if (typeof prNum === "number") {
|
|
6168
|
+
const prev = failureCooldowns?.get(prNum);
|
|
6169
|
+
failureCooldowns?.set(prNum, { failedAt: Date.now(), count: (prev?.count || 0) + 1 });
|
|
6170
|
+
}
|
|
6132
6171
|
}
|
|
6133
6172
|
} catch (err) {
|
|
6134
6173
|
console.error(pc14.red(`\u2717 Error in peer-review on ${targetLabel}: ${err.message}`));
|
|
6135
6174
|
if (currentPR) {
|
|
6136
6175
|
attemptedPRNumbers.add(currentPR.number);
|
|
6137
6176
|
onAttempted?.(currentPR.number);
|
|
6177
|
+
const prev = failureCooldowns?.get(currentPR.number);
|
|
6178
|
+
failureCooldowns?.set(currentPR.number, { failedAt: Date.now(), count: (prev?.count || 0) + 1 });
|
|
6138
6179
|
}
|
|
6139
6180
|
} finally {
|
|
6140
6181
|
if (state) {
|
|
@@ -6182,7 +6223,10 @@ async function performAutoworkScan(scanOptions) {
|
|
|
6182
6223
|
isStopping,
|
|
6183
6224
|
clearTicker,
|
|
6184
6225
|
getPRs,
|
|
6185
|
-
runRoutine
|
|
6226
|
+
runRoutine,
|
|
6227
|
+
onAttempted: scanOptions.onAttempted,
|
|
6228
|
+
failureCooldowns: scanOptions.failureCooldowns,
|
|
6229
|
+
onQuotaExhausted: scanOptions.onQuotaExhausted
|
|
6186
6230
|
});
|
|
6187
6231
|
const remainingPRs = (await getPRs(repoRoot)).length;
|
|
6188
6232
|
if (remainingPRs > 0) {
|
|
@@ -6231,6 +6275,18 @@ async function performAutoworkScan(scanOptions) {
|
|
|
6231
6275
|
}
|
|
6232
6276
|
}
|
|
6233
6277
|
});
|
|
6278
|
+
const isQuota = result.quotaPaused || !result.success && detectQuotaExceeded(result.output || "", result.stderr || "").isQuota;
|
|
6279
|
+
if (isQuota) {
|
|
6280
|
+
const resetInfo = result.quotaResetInfo || detectQuotaExceeded(result.output || "", result.stderr || "").resetInfo;
|
|
6281
|
+
console.warn(
|
|
6282
|
+
pc14.yellow(
|
|
6283
|
+
`
|
|
6284
|
+
\u26A0\uFE0F Autowork paused due to LLM quota exhaustion (${resetInfo || "RESOURCE_EXHAUSTED / 429"}).`
|
|
6285
|
+
)
|
|
6286
|
+
);
|
|
6287
|
+
scanOptions.onQuotaExhausted?.(resetInfo);
|
|
6288
|
+
return { executed: true, reason: "quota_exhausted" };
|
|
6289
|
+
}
|
|
6234
6290
|
if (result.success) {
|
|
6235
6291
|
console.log(pc14.green(`\u2713 Local autowork completed successfully.
|
|
6236
6292
|
`));
|
|
@@ -6281,6 +6337,22 @@ async function runDaemonLoop(repoRoot, options = {}) {
|
|
|
6281
6337
|
let stopResolve;
|
|
6282
6338
|
const reviewIntervalMs = reviewInterval * 60 * 1e3;
|
|
6283
6339
|
const autoworkIntervalMs = autoworkInterval * 60 * 1e3;
|
|
6340
|
+
const failureCooldowns = /* @__PURE__ */ new Map();
|
|
6341
|
+
const quotaCooldownMs = (options.quotaCooldownMinutes ?? 15) * 60 * 1e3;
|
|
6342
|
+
let quotaCooldownUntil;
|
|
6343
|
+
const handleQuotaPause = (resetInfo) => {
|
|
6344
|
+
const until = Date.now() + quotaCooldownMs;
|
|
6345
|
+
quotaCooldownUntil = until;
|
|
6346
|
+
nextReviewCheckTime = until;
|
|
6347
|
+
nextAutoworkCheckTime = Math.max(nextAutoworkCheckTime, until);
|
|
6348
|
+
const resetMsg = resetInfo || "RESOURCE_EXHAUSTED / 429";
|
|
6349
|
+
console.warn(
|
|
6350
|
+
pc14.yellow(
|
|
6351
|
+
`
|
|
6352
|
+
[${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] \u23F8\uFE0F LLM quota exhausted (${resetMsg}). Deferring checks for ${Math.round(quotaCooldownMs / 6e4)}m...`
|
|
6353
|
+
)
|
|
6354
|
+
);
|
|
6355
|
+
};
|
|
6284
6356
|
let nextReviewCheckTime = Date.now() + (routines.includes("peer-review") ? reviewIntervalMs : Infinity);
|
|
6285
6357
|
let nextAutoworkCheckTime = Date.now() + (routines.includes("autowork") ? autoworkIntervalMs : Infinity);
|
|
6286
6358
|
let lastOpenPRCount = void 0;
|
|
@@ -6335,7 +6407,9 @@ Stopping local agent daemon...`));
|
|
|
6335
6407
|
isStopping: () => isStopping,
|
|
6336
6408
|
clearTicker,
|
|
6337
6409
|
getPRs: getPRsFn,
|
|
6338
|
-
runRoutine: runRoutineFn
|
|
6410
|
+
runRoutine: runRoutineFn,
|
|
6411
|
+
failureCooldowns,
|
|
6412
|
+
onQuotaExhausted: handleQuotaPause
|
|
6339
6413
|
});
|
|
6340
6414
|
try {
|
|
6341
6415
|
const prs = await getPRsFn(repoRoot);
|
|
@@ -6351,7 +6425,11 @@ Stopping local agent daemon...`));
|
|
|
6351
6425
|
state.activeRoutine = void 0;
|
|
6352
6426
|
state.activeTarget = void 0;
|
|
6353
6427
|
writeDaemonState(repoRoot, state);
|
|
6354
|
-
|
|
6428
|
+
if (quotaCooldownUntil && Date.now() < quotaCooldownUntil) {
|
|
6429
|
+
nextReviewCheckTime = quotaCooldownUntil;
|
|
6430
|
+
} else {
|
|
6431
|
+
nextReviewCheckTime = Date.now() + reviewIntervalMs;
|
|
6432
|
+
}
|
|
6355
6433
|
updateTicker();
|
|
6356
6434
|
if (isGracefulStopping) {
|
|
6357
6435
|
await handleStop();
|
|
@@ -6387,7 +6465,9 @@ Stopping local agent daemon...`));
|
|
|
6387
6465
|
clearTicker,
|
|
6388
6466
|
getPRs: getPRsFn,
|
|
6389
6467
|
getBacklog: options.getBacklog || getBacklogTriageReport,
|
|
6390
|
-
runRoutine: runRoutineFn
|
|
6468
|
+
runRoutine: runRoutineFn,
|
|
6469
|
+
failureCooldowns,
|
|
6470
|
+
onQuotaExhausted: handleQuotaPause
|
|
6391
6471
|
});
|
|
6392
6472
|
try {
|
|
6393
6473
|
const prs = await getPRsFn(repoRoot);
|
|
@@ -6403,7 +6483,11 @@ Stopping local agent daemon...`));
|
|
|
6403
6483
|
state.activeRoutine = void 0;
|
|
6404
6484
|
state.activeTarget = void 0;
|
|
6405
6485
|
writeDaemonState(repoRoot, state);
|
|
6406
|
-
|
|
6486
|
+
if (quotaCooldownUntil && Date.now() < quotaCooldownUntil) {
|
|
6487
|
+
nextAutoworkCheckTime = quotaCooldownUntil;
|
|
6488
|
+
} else {
|
|
6489
|
+
nextAutoworkCheckTime = Date.now() + autoworkIntervalMs;
|
|
6490
|
+
}
|
|
6407
6491
|
updateTicker();
|
|
6408
6492
|
if (!isStopping && routines.includes("peer-review")) {
|
|
6409
6493
|
try {
|
package/dist/lib/daemon.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface DaemonOptions {
|
|
|
18
18
|
interval?: number;
|
|
19
19
|
reviewInterval?: number;
|
|
20
20
|
autoworkInterval?: number;
|
|
21
|
+
quotaCooldownMinutes?: number;
|
|
22
|
+
prFailureCooldownMinutes?: number;
|
|
21
23
|
routines?: string[];
|
|
22
24
|
model?: string;
|
|
23
25
|
foreground?: boolean;
|
|
@@ -28,6 +30,10 @@ export interface DaemonOptions {
|
|
|
28
30
|
runRoutine?: (opts: any) => Promise<{
|
|
29
31
|
success: boolean;
|
|
30
32
|
exitCode?: number;
|
|
33
|
+
quotaPaused?: boolean;
|
|
34
|
+
quotaResetInfo?: string;
|
|
35
|
+
output?: string;
|
|
36
|
+
stderr?: string;
|
|
31
37
|
}>;
|
|
32
38
|
}
|
|
33
39
|
export declare function getDaemonStatePath(repoRoot: string): string;
|
|
@@ -130,6 +136,10 @@ export declare function queryOrphanedLocalRunIssues(repoRoot: string): Promise<A
|
|
|
130
136
|
* Operates asynchronously and fails gracefully on network / CLI errors without preventing daemon startup.
|
|
131
137
|
*/
|
|
132
138
|
export declare function reconcileOrphanedLocalRuns(optionsOrRepoRoot: string | ReconcileOrphanedRunsOptions): Promise<number>;
|
|
139
|
+
export interface PRFailureRecord {
|
|
140
|
+
failedAt: number;
|
|
141
|
+
count: number;
|
|
142
|
+
}
|
|
133
143
|
export interface DrainReviewQueueOptions {
|
|
134
144
|
repoRoot: string;
|
|
135
145
|
state?: DaemonState;
|
|
@@ -140,8 +150,14 @@ export interface DrainReviewQueueOptions {
|
|
|
140
150
|
runRoutine?: (opts: any) => Promise<{
|
|
141
151
|
success: boolean;
|
|
142
152
|
exitCode?: number;
|
|
153
|
+
quotaPaused?: boolean;
|
|
154
|
+
quotaResetInfo?: string;
|
|
155
|
+
output?: string;
|
|
156
|
+
stderr?: string;
|
|
143
157
|
}>;
|
|
144
158
|
onAttempted?: (prNumber: number) => void;
|
|
159
|
+
failureCooldowns?: Map<number, PRFailureRecord>;
|
|
160
|
+
onQuotaExhausted?: (resetInfo?: string) => void;
|
|
145
161
|
}
|
|
146
162
|
/**
|
|
147
163
|
* Sequentially drains all open reviewable PRs by executing peer-review in isolated worktrees.
|
|
@@ -159,8 +175,15 @@ export interface PerformAutoworkScanOptions {
|
|
|
159
175
|
runRoutine?: (opts: any) => Promise<{
|
|
160
176
|
success: boolean;
|
|
161
177
|
exitCode?: number;
|
|
178
|
+
quotaPaused?: boolean;
|
|
179
|
+
quotaResetInfo?: string;
|
|
180
|
+
output?: string;
|
|
181
|
+
stderr?: string;
|
|
162
182
|
}>;
|
|
163
183
|
onDiagnosticCard?: (card: string) => void;
|
|
184
|
+
onAttempted?: (prNumber: number) => void;
|
|
185
|
+
failureCooldowns?: Map<number, PRFailureRecord>;
|
|
186
|
+
onQuotaExhausted?: (resetInfo?: string) => void;
|
|
164
187
|
}
|
|
165
188
|
/**
|
|
166
189
|
* Performs an autowork backlog scan with zero-token preflight check.
|
package/dist/lib/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
|
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":"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,EAmBnD,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,UAAU,CAAC;CAClB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8CtC"}
|
package/dist/lib/runner.d.ts
CHANGED
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":"AAgCA,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -261,10 +261,15 @@ How changes and innovations from upstream ecosystems—[openai/symphony](https:/
|
|
|
261
261
|
|
|
262
262
|
How closed-loop feedback from product telemetry and measurement trackers drives product decisions while preventing autonomous agents from falling into telemetry rabbit holes:
|
|
263
263
|
|
|
264
|
-
1. **Mandatory Post-Measurement Action Rule**: When `analytics-review` concludes an evaluation of a feature or experiment tracker (especially sub-threshold features with <2% user adoption or >50% failure rates), it MUST emit a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`. Measurement closure is never a terminal dead-end; outcomes are
|
|
265
|
-
2. **
|
|
266
|
-
|
|
267
|
-
|
|
264
|
+
1. **Mandatory Post-Measurement Action Rule**: When `analytics-review` concludes an evaluation of a feature or experiment tracker (especially sub-threshold features with <2% user adoption or >50% failure rates), it MUST emit a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`. Measurement closure is never a terminal dead-end; outcomes are streamed directly into an active, open `🗺️ Product Plan` staging container.
|
|
265
|
+
2. **Continuous Product Plan Staging Container Protocol**:
|
|
266
|
+
- Exactly one open staging container issue (`routine:product-planning`, `status:staging`) exists in the repository at all times (`🗺️ Product Plan — {Next Date} (Staging)`).
|
|
267
|
+
- Daily `analytics-review` sweeps stream conclusive directives, UI friction findings, and tracker verdicts directly into this open staging container via comments, eliminating the 14-day vacuum between planning cycles. If no staging container exists, `analytics-review` lazily initializes it.
|
|
268
|
+
- When `product-planning` runs in Propose mode, it reads the staging container's accumulated comments and executes a trailing 16-day lookback sweep across closed measurement trackers, synthesizing all directives into the final proposals and transitioning the issue to `needs-human` for operator review.
|
|
269
|
+
- When approved and triggered in Promote mode, `product-planning` decomposes epics, updates `ROADMAP.md`, closes the current plan, and **immediately seeds the next staging container** for the upcoming cycle.
|
|
270
|
+
3. **Feature Pruning & Deprecation Audit**: During Propose mode sweeps, `product-planning` actively audits shipped roadmap items and closed measurement trackers. For features with low ROI (<2% adoption, >50% error/failure rate), it drafts explicit deprecation, removal, or simplification proposals alongside new feature additions, keeping the codebase and UI lean.
|
|
271
|
+
4. **Intent vs. Defect Guardrail**: When investigating underperforming or zero-conversion features, `autowork` and `diagnosing-bugs` verify whether the issue is a software defect or a lack of user intent. If the feature functions properly without runtime errors but user interaction is negligible, agents must classify the issue as a **product/UX intent question** (`needs-design` / `roadmap/*`) rather than falling into the **Telemetry Rabbit Hole** (adding redundant fallback telemetry, defensive error handling, or retry loops for unwanted features).
|
|
272
|
+
5. **Post-Merge Measurement Tracker Ingestion**: When `peer-review` squash-merges an approved PR, it inspects the tracking issue or spec for `## Telemetry & Measurement Decisions`. If a Tier 1 or Tier 2 companion measurement issue is outlined (`Measure: <Feature Name>`), `peer-review` automatically files the tracker with the `measurement` label upon merge, ensuring downstream `analytics-review` sweeps are never starved of intake.
|
|
268
273
|
|
|
269
274
|
---
|
|
270
275
|
|
|
@@ -20,7 +20,7 @@ The run is SUCCESS only if ALL of these are true:
|
|
|
20
20
|
- [ ] For conclusive measurement issues: synthesized adoption metrics (CTR, conversion rate, error frequency) against defined success criteria
|
|
21
21
|
- [ ] For sub-threshold features (<2% user adoption or >50% failure rate) or conclusive outcomes, outputted a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`
|
|
22
22
|
- [ ] Evaluated UI friction signals (grouping `$rageclick` by URL and element) and applied the Nudge & Banner Fatigue rule for promotional elements exceeding 500 impressions with CTR < 2.0%
|
|
23
|
-
- [ ] For conclusive measurement trackers
|
|
23
|
+
- [ ] For conclusive measurement trackers, sub-threshold features, or actionable UI friction findings: streamed the directive directly as a comment into an active, open `🗺️ Product Plan` staging issue (`routine:product-planning`, `status:staging`) or lazily initialized the upcoming staging container if missing; if all trackers remain active/healthy with no new directives, logged scan status to the routine run issue
|
|
24
24
|
- [ ] Closed resolved measurement trackers with full analysis summaries and Antigravity run footer
|
|
25
25
|
|
|
26
26
|
If any criterion cannot be met, stop immediately and log FAILURE with the reason.
|
|
@@ -96,20 +96,64 @@ When a measurement tracker is conclusive or reaches sub-threshold adoption (<2%
|
|
|
96
96
|
- `RECOMMENDATION: DEPRECATE` — Feature has negligible adoption (<2%) or high maintenance overhead (>50% failures); recommend simplification or clean removal.
|
|
97
97
|
- `RECOMMENDATION: ITERATE` — Metric target met or trending positively; recommend next phase or expanded rollout.
|
|
98
98
|
|
|
99
|
-
### Step 4: Bridge
|
|
99
|
+
### Step 4: Bridge outcomes to `product-planning` (Continuous Staging Container Stream)
|
|
100
100
|
|
|
101
|
-
When conclusive measurement directives (`RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`) are
|
|
102
|
-
1. Search for
|
|
101
|
+
When conclusive measurement directives (`RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`) or actionable UI friction signals (recurring rageclick clusters or banner fatigue findings from Step 2.5) are identified:
|
|
102
|
+
1. Search for the **active, OPEN** product planning staging issue:
|
|
103
103
|
```bash
|
|
104
|
-
gh issue list --state open --
|
|
104
|
+
gh issue list --state open --label "routine:product-planning" --limit 1
|
|
105
105
|
```
|
|
106
106
|
**Active Staging Issue Invariant**: A staging issue is active ONLY if its state is currently **OPEN**. If an issue is closed, it is a historical plan from a past cycle and MUST be ignored. **NEVER comment on, reopen, or edit closed product plan issues (`state: closed`).**
|
|
107
|
-
2. If an open staging issue exists (e.g. `🗺️ Product Plan — {YYYY-MM-DD}`):
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
2. If an open staging issue exists (e.g. `🗺️ Product Plan — {YYYY-MM-DD} (Staging)` or `🗺️ Product Plan — {YYYY-MM-DD}`):
|
|
108
|
+
- Stream and append conclusive recommendations and telemetry evidence directly as comments into the open staging issue:
|
|
109
|
+
```bash
|
|
110
|
+
gh issue comment "$STAGING_ISSUE_NUMBER" --body "### 🗺️ Telemetry Learning & Action Directive ($(date -u +%Y-%m-%d))
|
|
111
|
+
- **Tracker**: #$TRACKER_NUMBER ($TRACKER_TITLE)
|
|
112
|
+
- **Verdict**: \`RECOMMENDATION: $DIRECTIVE\`
|
|
113
|
+
- **Telemetry Readout**: Target vs Actual metrics, root cause (Intent vs. Defect)
|
|
114
|
+
- **Product Directive**: Actionable recommendation for next product planning sweep
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
118
|
+
|
|
119
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
120
|
+
```
|
|
121
|
+
- For standalone UI friction findings (e.g. `$rageclick` clusters or banner fatigue without an attached tracker), stream an actionable friction directive comment:
|
|
122
|
+
```bash
|
|
123
|
+
gh issue comment "$STAGING_ISSUE_NUMBER" --body "### ⚠️ UI Friction & Fatigue Signal ($(date -u +%Y-%m-%d))
|
|
124
|
+
- **Component / URL**: \`$ELEMENT_SELECTOR\` on \`$PAGE_URL\`
|
|
125
|
+
- **Signal**: Rage clicks ($RAGECLICK_COUNT events) / Banner fatigue ($IMPRESSIONS impressions, CTR $CTR%)
|
|
126
|
+
- **Recommendation**: Redesign, throttle, or deprecate component to eliminate user friction
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
130
|
+
|
|
131
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
132
|
+
```
|
|
133
|
+
3. **Self-Healing Fallback (Lazy Seed)**: If NO open staging issue exists (e.g. initial repository setup, or previous plan closed without seeding):
|
|
134
|
+
- Lazily initialize the upcoming product plan staging container rather than dropping learnings or commenting on closed issues:
|
|
135
|
+
```bash
|
|
136
|
+
STAGING_TITLE="🗺️ Product Plan — $(date -u +%Y-%m-%d) (Staging)"
|
|
137
|
+
STAGING_BODY="## 🗺️ Upcoming Product Plan (Continuous Staging Container)
|
|
138
|
+
|
|
139
|
+
This staging container accumulates daily telemetry findings, feature audits, and measurement directives between planning sweeps.
|
|
140
|
+
|
|
141
|
+
### Feature Pruning, Deprecation & Pivot Audit
|
|
142
|
+
- (Accumulating from daily analytics-review runs)
|
|
143
|
+
|
|
144
|
+
### Accumulated Directives & Telemetry Stream
|
|
145
|
+
- Daily directives are streamed below as comments.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
149
|
+
|
|
150
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
151
|
+
|
|
152
|
+
STAGING_URL=$(gh issue create --title "$STAGING_TITLE" --body "$STAGING_BODY" --label "routine:product-planning,status:staging")
|
|
153
|
+
STAGING_ISSUE_NUMBER=$(echo "$STAGING_URL" | grep -oE '[0-9]+$')
|
|
154
|
+
```
|
|
155
|
+
- Then append the directive or friction comment to the newly created `$STAGING_ISSUE_NUMBER`.
|
|
156
|
+
4. If no trackers reached a conclusive state and no actionable UI friction was detected during this run, and all evaluated trackers remain healthy/within measurement horizon:
|
|
113
157
|
- Do not stage redundant directives or file unnecessary roadmap issues.
|
|
114
158
|
- Record tracker evaluation progress in the routine run issue (`$ROUTINE_ISSUE_NUMBER`) and `.jonah-fleet/run-report.md`.
|
|
115
159
|
|
|
@@ -21,8 +21,8 @@ The run is SUCCESS only if ALL of these are true:
|
|
|
21
21
|
- [ ] Performed Tier 2 Headless Browser & Visual Critique: launched the dev environment and captured viewports at mobile (390px) and desktop (1280px) via `run` and `design-critique` skills, auditing whitespace consistency, visual hierarchy, touch targets, and viewport density (enforcing the mobile fold budget: max 1 banner/nudge)
|
|
22
22
|
- [ ] Cross-referenced UI friction and telemetry signals: checked for recurring rage clicks (`$rageclick`) and identified low-interaction (<2% CTR) secondary elements or persistent nudges suitable for pruning
|
|
23
23
|
- [ ] Executed Hybrid Handoff:
|
|
24
|
-
- If self-contained token, class, or contrast violations were found, filed or updated exactly one grouped punchlist issue titled `🎨 Design Polish & Token Cleanup — {YYYY-MM-DD}` labeled `design/polish` for Autowork
|
|
25
|
-
-
|
|
24
|
+
- If self-contained token, class, or contrast violations were found, filed or updated exactly one grouped punchlist issue titled `🎨 Design Polish & Token Cleanup — {YYYY-MM-DD}` labeled `design/polish`, `autowork-candidate` for Autowork
|
|
25
|
+
- Streamed the overarching design audit, visual critique, clutter analysis, pruning recommendations, and experience enhancement opportunities directly as a comment into the active, open `🗺️ Product Plan` staging container (`routine:product-planning`, `status:staging`)
|
|
26
26
|
- [ ] Emitted structured design directives in the run report (`DESIGN_DIRECTIVE: [PRUNE | REDESIGN | POLISH]`) and recorded the next queued surfaces for the subsequent run
|
|
27
27
|
- [ ] Recorded the final execution report to `.jonah-fleet/run-report.md` following `ORCHESTRATION.md`
|
|
28
28
|
|
|
@@ -39,9 +39,9 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
39
39
|
## Negative examples (DO NOT do these)
|
|
40
40
|
|
|
41
41
|
- Do not open multiple separate issues for individual token mismatches — group all simple token and contrast cleanup items into a single grouped punchlist issue for Autowork.
|
|
42
|
-
- Do not
|
|
42
|
+
- Do not create separate standalone tracking issues that stay open indefinitely — stream design review audit findings, clutter analyses, and pruning recommendations directly into the open `🗺️ Product Plan` staging container.
|
|
43
43
|
- Do not review the admin back-office (`src/app/[locale]/admin/**`) — it is deliberately utilitarian and exempt from the player-facing design system polish bar.
|
|
44
|
-
- Do not blindly repeat the same surface review order every run — dynamically discover routes and check previous review
|
|
44
|
+
- Do not blindly repeat the same surface review order every run — dynamically discover routes and check previous review logs to resume rotation and fast-track unreviewed new surfaces.
|
|
45
45
|
|
|
46
46
|
## Instructions
|
|
47
47
|
|
|
@@ -53,7 +53,7 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
53
53
|
- Scan the filesystem for all active player-facing page routes: `src/app/[locale]/**/page.tsx` (ignoring any `admin/**` directories).
|
|
54
54
|
- Normalize the discovered paths into canonical route identifiers (e.g. `Home` (`/`), `Predictions` (`/pronostics`), `Episode Predictions` (`/pronostics/episode/[id]`), `Groups` (`/groupes`), `Group Detail` (`/groupes/[id]`), `Presenter` (`/groupes/[id]/presentateur`), `Leaderboard` (`/classements`), `Profile` (`/profil`), `Account` (`/compte`), `Auth` (`/auth/*`), `Season Overview` (`/saisons/[slug]`), `Share` (`/partage`)).
|
|
55
55
|
3. **Reconcile with Previous Rotation State**:
|
|
56
|
-
- Locate the most recent
|
|
56
|
+
- Locate the most recent run issue labeled `routine:design-review` or prior design review comment in the open staging container.
|
|
57
57
|
- Read the `Surfaces Reviewed` and `Next Surfaces in Rotation` fields.
|
|
58
58
|
- Any discovered route on disk that has never appeared in prior review logs is flagged as **`[NEW SURFACE]`** and placed at **Priority 0** (Fast-Track).
|
|
59
59
|
- Remaining surfaces are sequenced based on `Next Surfaces in Rotation` (resuming rotation where the previous run stopped).
|
|
@@ -105,23 +105,58 @@ For the surfaces being audited:
|
|
|
105
105
|
2. Formulate **Pruning Recommendations**:
|
|
106
106
|
- Any persistent card, teaser, or secondary control with near-zero interaction, high rage-click density, or severe visual clutter is recommended for deprecation (`RECOMMENDATION: DEPRECATE`) or simplification (`RECOMMENDATION: PRUNE`).
|
|
107
107
|
|
|
108
|
-
### Step 5: Hybrid Handoff &
|
|
108
|
+
### Step 5: Hybrid Handoff & Staging Stream
|
|
109
109
|
|
|
110
110
|
1. **Direct Autowork Punchlist Issue**:
|
|
111
111
|
- If concrete, self-contained token violations, contrast bugs, or duplicate `.btn-primary` classes are found, compile them into a single grouped punchlist issue:
|
|
112
112
|
- Title: `🎨 Design Polish & Token Cleanup — {YYYY-MM-DD}`
|
|
113
113
|
- Labels: `design/polish`, `autowork-candidate`
|
|
114
114
|
- Content: Structured task list with target files, line references, current violation, and suggested replacement token/class.
|
|
115
|
-
2. **
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
2. **Bridge to Product Planning (Continuous Staging Container Stream)**:
|
|
116
|
+
- Search for the active, OPEN product planning staging issue:
|
|
117
|
+
```bash
|
|
118
|
+
gh issue list --state open --label "routine:product-planning" --limit 1
|
|
119
|
+
```
|
|
120
|
+
- Stream and append the visual critique, clutter analysis, pruning recommendations, and experience enhancement opportunities directly as a comment into the open staging issue:
|
|
121
|
+
```bash
|
|
122
|
+
gh issue comment "$STAGING_ISSUE_NUMBER" --body "### 🎨 Design Review Audit & Directives ($(date -u +%Y-%m-%d))
|
|
123
|
+
- **Directive**: \`DESIGN_DIRECTIVE: [PRUNE | REDESIGN | POLISH]\`
|
|
124
|
+
- **Surfaces Reviewed**: (list audited routes)
|
|
125
|
+
- **Next Surfaces in Rotation**: (list next queued routes)
|
|
126
|
+
- **Mobile Viewport Density & Nudge Budget**: Mobile fold observations (390px)
|
|
127
|
+
- **Visual Critique & Clutter Analysis**: Hierarchy, whitespace, and touch targets
|
|
128
|
+
- **Feature Pruning & Deprecation Recommendations**: Elements flagged for removal/simplification
|
|
129
|
+
- **Experience Enhancement Opportunities**: Structural UX improvements for roadmap
|
|
130
|
+
- **Autowork Punchlist**: #N (if token violations were found)
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
134
|
+
|
|
135
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
136
|
+
```
|
|
137
|
+
- **Self-Healing Fallback (Lazy Seed)**: If NO open staging issue exists (e.g. initial repository setup, or previous plan closed without seeding):
|
|
138
|
+
- Lazily initialize the upcoming product plan staging container rather than dropping design critique or commenting on closed issues:
|
|
139
|
+
```bash
|
|
140
|
+
STAGING_TITLE="🗺️ Product Plan — $(date -u +%Y-%m-%d) (Staging)"
|
|
141
|
+
STAGING_BODY="## 🗺️ Upcoming Product Plan (Continuous Staging Container)
|
|
142
|
+
|
|
143
|
+
This staging container accumulates daily telemetry findings, feature audits, and measurement directives between planning sweeps.
|
|
144
|
+
|
|
145
|
+
### Feature Pruning, Deprecation & Pivot Audit
|
|
146
|
+
- (Accumulating from daily analytics-review and design-review runs)
|
|
147
|
+
|
|
148
|
+
### Accumulated Directives & Telemetry Stream
|
|
149
|
+
- Daily directives are streamed below as comments.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
153
|
+
|
|
154
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
155
|
+
|
|
156
|
+
STAGING_URL=$(gh issue create --title "$STAGING_TITLE" --body "$STAGING_BODY" --label "routine:product-planning,status:staging")
|
|
157
|
+
STAGING_ISSUE_NUMBER=$(echo "$STAGING_URL" | grep -oE '[0-9]+$')
|
|
158
|
+
```
|
|
159
|
+
- Then append the design review audit comment to the newly created `$STAGING_ISSUE_NUMBER`.
|
|
125
160
|
3. **Structured Directives**:
|
|
126
161
|
- Output clear directives: `DESIGN_DIRECTIVE: [PRUNE | REDESIGN | POLISH]` to be consumed downstream by `product-planning.md`.
|
|
127
162
|
|
|
@@ -135,7 +170,7 @@ Follow the Routine Issue Logging Protocol in `ORCHESTRATION.md`:
|
|
|
135
170
|
- Result: `SUCCESS` or `FAILURE`
|
|
136
171
|
- Every Definition of Done criterion with YES/NO and evidence
|
|
137
172
|
- Surfaces Reviewed and Next Surfaces in Rotation
|
|
138
|
-
- Created issues (`🎨 Design Polish & Token Cleanup`,
|
|
173
|
+
- Created issues / streams (`🎨 Design Polish & Token Cleanup`, streamed to `🗺️ Product Plan`)
|
|
139
174
|
- If FAILURE: root cause, category, and suggested fix
|
|
140
175
|
3. The surrounding execution harness will reconcile the corresponding GitHub issue.
|
|
141
176
|
|
|
@@ -19,13 +19,15 @@ This routine runs behind a **human approval gate**: it **never files autowork-re
|
|
|
19
19
|
This routine runs in two modes: **Propose** (scheduled cron sweep / unapproved fire) and **Promote** (operator-approved fire).
|
|
20
20
|
|
|
21
21
|
In **Propose mode**, SUCCESS requires:
|
|
22
|
-
- [ ]
|
|
22
|
+
- [ ] Located or initialized the active open staging issue (`routine:product-planning`, `status:staging`) and ingested all accumulated comment directives streamed by `analytics-review` and `design-review`
|
|
23
|
+
- [ ] Read current roadmap, domain documentation, closed measurement trackers across the trailing cycle lookback window (`closed:>=$(date -u -d '16 days ago' +%Y-%m-%d)`), recent analytics reviews (`routine:analytics-review`), and recent design-review routine run issues (`routine:design-review`)
|
|
23
24
|
- [ ] Performed Feature Pruning & Deprecation Audit: evaluated shipped features, measurement outcomes (<2% user adoption or >50% failure rate), and Design Review pruning/clutter directives, drafting deprecation, removal, or simplification proposals
|
|
24
|
-
- [ ]
|
|
25
|
-
-
|
|
25
|
+
- [ ] Synthesized all accumulated directives into exactly one dated staging issue (`🗺️ Product Plan — {date}`) containing:
|
|
26
|
+
- All relevant well-scoped proposals (Summary/Tasks/Why/Complexity) warranted by evidence, covering additions, pivots, or deprecations (the operator owns deciding which proposals get promoted)
|
|
26
27
|
- Backlog re-ranking recommendations
|
|
27
28
|
- Formal `/to-spec` PRD drafts for any proposal above `size/M`
|
|
28
29
|
- Proposed `ROADMAP.md` updates
|
|
30
|
+
- [ ] Updated staging issue labels from `status:staging` to `needs-human` for operator review
|
|
29
31
|
- [ ] Filed ZERO autowork-ready issues without approval
|
|
30
32
|
|
|
31
33
|
In **Promote mode**, SUCCESS requires:
|
|
@@ -33,7 +35,8 @@ In **Promote mode**, SUCCESS requires:
|
|
|
33
35
|
- [ ] Created real, labeled GitHub issues for approved proposals using `/to-tickets` for epic decomposition
|
|
34
36
|
- [ ] Applied approved backlog re-rankings
|
|
35
37
|
- [ ] Committed approved changes to `ROADMAP.md` if explicitly approved
|
|
36
|
-
- [ ] Annotated the staging issue with created issue numbers (`✅ Created → #N`)
|
|
38
|
+
- [ ] Annotated the staging issue with created issue numbers (`✅ Created → #N`) and closed it as completed
|
|
39
|
+
- [ ] Seeded next staging issue: immediately created the NEXT upcoming staging container (`🗺️ Product Plan — {Next Date} (Staging)`) labeled `routine:product-planning,status:staging` so daily analytics runs have an active container to deposit findings
|
|
37
40
|
|
|
38
41
|
If any criterion cannot be met, stop immediately and log FAILURE with the reason.
|
|
39
42
|
|
|
@@ -57,24 +60,63 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
57
60
|
- **Promote mode**: Payload contains approval tokens (e.g. `Approve #1, #2`, `Approve roadmap`). Proceed to Step 4 (Promote).
|
|
58
61
|
- **Propose mode**: Scheduled sweep or no approval directives. Proceed to Steps 1–3 (Propose).
|
|
59
62
|
|
|
60
|
-
### Steps 1–3: Propose Mode (Staging Proposals)
|
|
61
|
-
|
|
62
|
-
1.
|
|
63
|
+
### Steps 1–3: Propose Mode (Synthesizing Staging Proposals)
|
|
64
|
+
|
|
65
|
+
1. **Continuous Staging Container Intake & Lookback Query**:
|
|
66
|
+
- Locate the active open staging issue:
|
|
67
|
+
```bash
|
|
68
|
+
gh issue list --state open --label "routine:product-planning" --limit 1
|
|
69
|
+
```
|
|
70
|
+
If no open staging container exists (e.g. unseeded first run), create one: `🗺️ Product Plan — {YYYY-MM-DD} (Staging)` labeled `routine:product-planning,status:staging`.
|
|
71
|
+
- Ingest all accumulated comment directives from the staging issue (`gh issue view <issue> --comments`) to ingest daily telemetry directives streamed by `analytics-review` and visual critique / clutter / pruning directives streamed by `design-review`.
|
|
72
|
+
- Ingest all measurement trackers closed across the trailing 16-day cycle lookback window:
|
|
73
|
+
```bash
|
|
74
|
+
gh issue list --state closed --label "measurement" --search "closed:>=$(date -u -d '16 days ago' +%Y-%m-%d)" --limit 30
|
|
75
|
+
gh issue list --state closed --label "routine:analytics-review" --search "created:>=$(date -u -d '16 days ago' +%Y-%m-%d)" --limit 20
|
|
76
|
+
```
|
|
77
|
+
- Read `ROADMAP.md`, `AGENTS.md`, and any recent design-review run reports (`gh issue list --label "routine:design-review"`).
|
|
63
78
|
2. **Feature Pruning & Deprecation Audit**:
|
|
64
79
|
- Audit shipped features, closed measurement tracker verdicts, and `🎨 Design Review` clutter/pruning findings.
|
|
65
80
|
- For any feature with <2% user adoption, sub-threshold CTR, >50% failure rate, or persistent UI clutter flagged by Design Review, draft explicit deprecation, removal, or pivot proposals to keep the codebase lean and eliminate maintenance waste.
|
|
66
|
-
3. Draft
|
|
81
|
+
3. **Draft All Relevant Proposals**:
|
|
82
|
+
- Draft as many well-scoped proposals (including additions, pivots, or deprecations) as are relevant and justified by roadmap priorities, accumulated measurement outcomes, design review directives, and user feedback. Do not artificially cap proposals to 3 — stage all relevant, high-leverage initiatives so the maintainer has a complete view of candidate work.
|
|
83
|
+
- The operator owns deciding which proposals get approved and promoted into active work.
|
|
67
84
|
4. For proposals sized `size/M` or above, draft a formal specification using `/to-spec`.
|
|
68
|
-
5.
|
|
85
|
+
5. **Finalize Staging Issue for Human Review**:
|
|
86
|
+
- Update the staging issue title to `🗺️ Product Plan — {YYYY-MM-DD}` (drop `(Staging)` suffix if present).
|
|
87
|
+
- Populate the body with executive summary, feature pruning & deprecation audit, proposals, PRDs, backlog re-rankings, and proposed roadmap updates.
|
|
88
|
+
- Update labels: remove `status:staging` and add `needs-human`. Assign to the repo maintainer for review.
|
|
69
89
|
|
|
70
|
-
### Step 4: Promote Mode (Approved Execution)
|
|
90
|
+
### Step 4: Promote Mode (Approved Execution & Next Staging Container Seed)
|
|
71
91
|
|
|
72
92
|
1. For each approved proposal in the staging issue:
|
|
73
93
|
- Create a GitHub issue with the full specification and appropriate labels (`type/*`, `size/*`, `priority/*`).
|
|
74
94
|
- If the proposal is an epic, decompose into child tickets using `/to-tickets`.
|
|
75
95
|
2. Apply approved backlog re-rankings.
|
|
76
96
|
3. If roadmap edits were approved, update `ROADMAP.md` directly on `main`.
|
|
77
|
-
4. Update the staging issue checklist with references to created issues.
|
|
97
|
+
4. Update the staging issue checklist with references to created issues and close the staging issue as completed.
|
|
98
|
+
5. **Seed Next Staging Container**:
|
|
99
|
+
Immediately create the staging container issue for the next cycle (+15 days out, e.g. next 1st or 15th):
|
|
100
|
+
```bash
|
|
101
|
+
NEXT_DATE=$(date -u -d '+15 days' +%Y-%m-%d)
|
|
102
|
+
TITLE="🗺️ Product Plan — ${NEXT_DATE} (Staging)"
|
|
103
|
+
BODY="## 🗺️ Upcoming Product Plan (Continuous Staging Container)
|
|
104
|
+
|
|
105
|
+
This staging container accumulates daily telemetry findings, feature audits, and measurement directives between planning sweeps.
|
|
106
|
+
|
|
107
|
+
### Feature Pruning, Deprecation & Pivot Audit
|
|
108
|
+
- (Accumulating from daily analytics-review runs)
|
|
109
|
+
|
|
110
|
+
### Accumulated Directives & Telemetry Stream
|
|
111
|
+
- Daily directives are streamed below as comments.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
[](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
|
|
115
|
+
|
|
116
|
+
_Generated by [Antigravity](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})_"
|
|
117
|
+
|
|
118
|
+
gh issue create --title "$TITLE" --body "$BODY" --label "routine:product-planning,status:staging"
|
|
119
|
+
```
|
|
78
120
|
|
|
79
121
|
## Logging
|
|
80
122
|
|
|
@@ -118,7 +160,7 @@ Appended strictly at the tail of the prompt to preserve prefix cache validity.
|
|
|
118
160
|
The dynamic execution context for this planning sweep is injected strictly at the tail of the prompt:
|
|
119
161
|
|
|
120
162
|
- **Planning Mode & Directives**: Mode indicator (`Propose` vs `Promote`) and operator approval tokens.
|
|
121
|
-
- **Input Artifacts**: Closed measurement trackers with `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`,
|
|
163
|
+
- **Input Artifacts**: Closed measurement trackers with `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`, accumulated comments on active staging container, recent design-review run reports (`routine:design-review`), and maintainer feedback.
|
|
122
164
|
- **Runtime Metadata**: `$ROUTINE_ISSUE_NUMBER`, `$GITHUB_RUN_ID`, and runner timestamp.
|
|
123
165
|
- **Prefix Caching Invariant**: Harnesses and runners MUST NEVER interpolate dynamic timestamps, run IDs, or target identifiers into Tier 1 or Tier 2 prefix blocks.
|
|
124
166
|
|
|
@@ -226,7 +226,7 @@ jobs:
|
|
|
226
226
|
set -e
|
|
227
227
|
|
|
228
228
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
229
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
229
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
230
230
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
231
231
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
232
232
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -236,7 +236,7 @@ jobs:
|
|
|
236
236
|
set -e
|
|
237
237
|
|
|
238
238
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
239
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
239
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
240
240
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
241
241
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
242
242
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -186,7 +186,7 @@ jobs:
|
|
|
186
186
|
set -e
|
|
187
187
|
|
|
188
188
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
189
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
189
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
190
190
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
191
191
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
192
192
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -171,7 +171,7 @@ jobs:
|
|
|
171
171
|
set -e
|
|
172
172
|
|
|
173
173
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
174
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
174
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
175
175
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
176
176
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
177
177
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -186,7 +186,7 @@ jobs:
|
|
|
186
186
|
set -e
|
|
187
187
|
|
|
188
188
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
189
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
189
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
190
190
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
191
191
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
192
192
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -186,7 +186,7 @@ jobs:
|
|
|
186
186
|
set -e
|
|
187
187
|
|
|
188
188
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
189
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
189
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
190
190
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
191
191
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
192
192
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -234,7 +234,7 @@ jobs:
|
|
|
234
234
|
set -e
|
|
235
235
|
|
|
236
236
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
237
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
237
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
238
238
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
239
239
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
240
240
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -195,7 +195,7 @@ jobs:
|
|
|
195
195
|
set -e
|
|
196
196
|
|
|
197
197
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
198
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
198
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
199
199
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
200
200
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
201
201
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -191,7 +191,7 @@ jobs:
|
|
|
191
191
|
set -e
|
|
192
192
|
|
|
193
193
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
194
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
194
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
195
195
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
196
196
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
197
197
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -221,7 +221,7 @@ jobs:
|
|
|
221
221
|
set -e
|
|
222
222
|
|
|
223
223
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
224
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
224
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
225
225
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
226
226
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
227
227
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|
|
@@ -299,7 +299,7 @@ jobs:
|
|
|
299
299
|
set -e
|
|
300
300
|
|
|
301
301
|
if [ "$AGY_EXIT_CODE" -ne 0 ]; then
|
|
302
|
-
if grep -qiE "Individual quota reached|quota reached" /tmp/agy.log; then
|
|
302
|
+
if grep -qiE "Individual quota reached|quota reached|RESOURCE_EXHAUSTED|code 429|Resource has been exhausted|rate_limit_exceeded" /tmp/agy.log; then
|
|
303
303
|
RESET_INFO=$(grep -oE "Resets in [^.]+" /tmp/agy.log | head -n 1 || echo "Resets in future window")
|
|
304
304
|
echo "QUOTA_PAUSED=true" >> "$GITHUB_ENV"
|
|
305
305
|
echo "QUOTA_RESET_INFO=$RESET_INFO" >> "$GITHUB_ENV"
|