jonah-fleet 1.30.4 β†’ 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,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.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.5...v1.31.0) (2026-10-01)
9
+
10
+
11
+ ### Features
12
+
13
+ * **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))
14
+
15
+ ## [1.30.5](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.4...v1.30.5) (2026-10-01)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **worktree:** disambiguate base ref against local origin/main branch ([#519](https://github.com/Jonah-Projects/jonah-fleet/issues/519)) ([1e3e6f2](https://github.com/Jonah-Projects/jonah-fleet/commit/1e3e6f2cdc2e5e774fc050be5686254de935d798))
21
+
8
22
  ## [1.30.4](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.3...v1.30.4) (2026-10-01)
9
23
 
10
24
 
@@ -21,6 +35,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
21
35
 
22
36
  ## [Unreleased] - 2026-10-01
23
37
 
38
+ ### Features
39
+
40
+ * **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
41
+ * **product-planning:** remove artificial 3-proposal cap so planning stages all relevant proposals for operator review
42
+ * **analytics-review:** stream daily measurement directives directly as comments into active product plan staging containers with self-healing lazy initialization
43
+ * **design-review:** stream visual critique, clutter analysis, and pruning directives directly into active product plan staging containers instead of creating standalone open tracking issues
44
+ * **labels:** add `status:staging` to default fleet label taxonomy for upcoming product planning containers
45
+
24
46
  ### Bug Fixes
25
47
 
26
48
  * **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
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" },
@@ -3854,16 +3855,15 @@ async function createWorktree(repoRoot, options) {
3854
3855
  }
3855
3856
  }
3856
3857
  let baseRef = options.baseRef;
3857
- if (!baseRef) {
3858
- try {
3859
- await execFileAsync3("git", ["rev-parse", "--verify", "origin/main"], { cwd: repoRoot });
3860
- baseRef = "origin/main";
3861
- } catch {
3858
+ if (!baseRef || baseRef === "origin/main") {
3859
+ const candidates = ["refs/remotes/origin/main", "refs/heads/main", "main"];
3860
+ baseRef = "HEAD";
3861
+ for (const candidate of candidates) {
3862
3862
  try {
3863
- await execFileAsync3("git", ["rev-parse", "--verify", "main"], { cwd: repoRoot });
3864
- baseRef = "main";
3863
+ await execFileAsync3("git", ["rev-parse", "--verify", candidate], { cwd: repoRoot });
3864
+ baseRef = candidate;
3865
+ break;
3865
3866
  } catch {
3866
- baseRef = "HEAD";
3867
3867
  }
3868
3868
  }
3869
3869
  }
@@ -1 +1 @@
1
- {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/lib/labels.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.30.4",
3
+ "version": "1.31.0",
4
4
  "description": "Standalone autonomous agent fleet with Symphony orchestration, claim protocols, and continuous improvement loops",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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 staged into an active `πŸ—ΊοΈ Product Plan` (which must be currently `state: open`; agents must never stage into or comment on closed/past product plans) or actionable `roadmap/*` issues.
265
- 2. **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.
266
- 3. **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).
267
- 4. **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.
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 or sub-threshold features: staged the recommendation directly into an active, open `πŸ—ΊοΈ Product Plan` staging issue or filed an actionable `roadmap/*` issue for `product-planning` to review; if all trackers remain active/healthy with no new directives, logged scan status to the routine run issue
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 outcome to `product-planning`
99
+ ### Step 4: Bridge outcomes to `product-planning` (Continuous Staging Container Stream)
100
100
 
101
- When conclusive measurement directives (`RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`) are emitted:
102
- 1. Search for an **active, OPEN** product planning staging issue:
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 --search "Product Plan"
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
- - Stage the recommendation under its `### Feature Pruning & Deprecation Audit` or `### Backlog Re-rankings` section.
109
- 3. If no open staging issue exists (the expected state between planning sweeps):
110
- - Do NOT comment on past closed product plans.
111
- - For actionable pivots, deprecations, or feature modifications requiring planning review, open an actionable `roadmap/*` issue labeled `needs-design` or `enhancement` detailing the measurement verdict and recommendation for the next product planning sweep.
112
- 4. If no trackers reached a conclusive state during this run and all evaluated trackers remain healthy/within measurement horizon:
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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
149
+
150
+ _Initialized autonomously 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
- - Created or updated exactly one tracking issue titled `🎨 Design Review β€” {YYYY-MM-DD}` documenting: Surfaces Reviewed (with any `[NEW SURFACE]` highlighted), Next Surfaces in Rotation, Visual Critique & Clutter Analysis, Feature Pruning & Deprecation Recommendations, and Experience Enhancement Opportunities
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 file unapproved structural redesigns or feature removals as direct Autowork issues β€” stage them in the `🎨 Design Review β€” {date}` tracking issue for Product Planning to review.
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 issues to resume rotation and fast-track unreviewed new surfaces.
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 `🎨 Design Review` issue or run issue labeled `routine:design-review`.
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 & Issue Generation
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. **Overarching Design Review Tracking Issue**:
116
- - Create or update a single tracking issue:
117
- - Title: `🎨 Design Review β€” {YYYY-MM-DD}`
118
- - Labels: `area/design`, `review`
119
- - Content:
120
- - **Surfaces Reviewed**: list audited routes, noting any `[NEW SURFACE]`
121
- - **Next Surfaces in Rotation**: list unreviewed routes queued for the subsequent run
122
- - **Visual Critique & Clutter Analysis**: mobile fold density, hierarchy, and layout observations
123
- - **Pruning & Deprecation Candidates**: specific features/elements recommended to be pruned or consolidated
124
- - **Experience Enhancement Opportunities**: structural UX improvements staged for Product Planning
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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
153
+
154
+ _Initialized autonomously 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`, `🎨 Design Review`)
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
- - [ ] Read current roadmap, domain documentation, closed measurement trackers, recent feedback/analytics findings, and the latest open `🎨 Design Review` issue / recent design-review routine run issues
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 the latest open `🎨 Design Review` issue / recent design-review routine run issues
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
- - [ ] Created or updated exactly one dated staging issue (`πŸ—ΊοΈ Product Plan β€” {date}`) containing:
25
- - Up to 3 well-scoped proposals (Summary/Tasks/Why/Complexity), covering additions, pivots, or deprecations
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. Read `ROADMAP.md`, `AGENTS.md`, closed measurement trackers with `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`, the latest open `🎨 Design Review` issue (and recent run issues with `gh issue list --label "routine:design-review"`), and open issues.
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 up to 3 high-impact proposals (including additions, pivots, or deprecations) based on roadmap priorities, measurement outcomes, and user feedback.
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. Stage all proposals in a dedicated staging issue: `πŸ—ΊοΈ Product Plan β€” {YYYY-MM-DD}` assigned to the repo maintainer.
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
+ [![Fleet](https://img.shields.io/badge/Fleet-Autonomous_Command-BBF65D?style=flat&logo=githubactions)](${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]`, open `🎨 Design Review` issues, and maintainer feedback.
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