@fro.bot/systematic 2.20.4 → 2.20.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "2.20.4",
3
+ "version": "2.20.6",
4
4
  "description": "Structured engineering workflows for OpenCode",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -65,8 +65,8 @@
65
65
  },
66
66
  "devDependencies": {
67
67
  "@biomejs/biome": "2.4.15",
68
- "@opencode-ai/plugin": "1.15.4",
69
- "@opencode-ai/sdk": "1.15.4",
68
+ "@opencode-ai/plugin": "1.15.5",
69
+ "@opencode-ai/sdk": "1.15.5",
70
70
  "@types/bun": "latest",
71
71
  "@types/js-yaml": "4.0.9",
72
72
  "@types/node": "24.12.4",
@@ -68,7 +68,7 @@ This file contains the shipping workflow (Phase 3-4). Load it only when all Phas
68
68
 
69
69
  1. **Prepare Evidence Context**
70
70
 
71
- Do not invoke `ce-demo-reel` directly in this step. Evidence capture belongs to the PR creation or PR description update flow, where the final PR diff and description context are available.
71
+ Do not invoke `feature-video` directly in this step. Evidence capture belongs to the PR creation or PR description update flow, where the final PR diff and description context are available.
72
72
 
73
73
  Note whether the completed work has observable behavior (UI rendering, CLI output, API/library behavior with a runnable example, generated artifacts, or workflow output). The `ce-commit-push-pr` skill will ask whether to capture evidence only when evidence is possible.
74
74
 
@@ -38,7 +38,7 @@ This skill captures problem solutions immediately after confirmation, creating s
38
38
  - "problem solved"
39
39
  - "that did it"
40
40
 
41
- **OR manual:** `/doc-fix` command
41
+ **OR manual:** Invoke the `ce:compound` skill directly
42
42
 
43
43
  **Non-trivial problems only:**
44
44
 
@@ -348,7 +348,7 @@ Action:
348
348
  ## Integration Points
349
349
 
350
350
  **Invoked by:**
351
- - /compound command (primary interface)
351
+ - `/ce:compound` skill (primary interface)
352
352
  - Manual invocation in conversation after solution confirmed
353
353
  - Can be triggered by detecting confirmation phrases like "that worked", "it's fixed", etc.
354
354
 
@@ -297,7 +297,7 @@ Use the first available option:
297
297
 
298
298
  1. **Existing project browser tooling** -- if Playwright, Puppeteer, Cypress, or similar is already in the project's dependencies, use it. Do not introduce new dependencies just for verification.
299
299
  2. **Browser MCP tools** -- if browser automation tools (e.g., claude-in-chrome) are available in the agent's environment, use them.
300
- 3. **agent-browser CLI** -- if nothing else is available and `agent-browser` is installed, use it. If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then skip to the next option.
300
+ 3. **agent-browser CLI** -- if nothing else is available and `agent-browser` is installed, use it. If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then skip to the next option.
301
301
  4. **Mental review** -- if no browser access is possible (headless CI, no permissions to install), apply the litmus checks as a self-review and note that visual verification was skipped.
302
302
 
303
303
  ### What to Assess
@@ -69,11 +69,18 @@ Read the current PR description to drive the compare-and-confirm step later:
69
69
  gh pr view --json body --jq '.body'
70
70
  ```
71
71
 
72
- **Generate the updated title and body** — load the `ce-pr-description` skill with the PR URL from DU-2 (e.g., `https://github.com/owner/repo/pull/123`). The URL preserves repo/PR identity even when invoked from a worktree or subdirectory where the current repo is ambiguous. If the user provided a focus (e.g., "include the benchmarking results"), append it as free-text steering after the URL. The skill returns a `{title, body_file}` block (body in an OS temp file) without applying or prompting.
72
+ **Generate the updated title and body** — using the PR URL from DU-2 and the commit range it covers, write an updated PR title and body. The URL preserves repo/PR identity even when invoked from a worktree or subdirectory. If the user provided a focus (e.g., "include the benchmarking results"), incorporate it into the generated content. Write the body to an OS temp file:
73
73
 
74
- If `ce-pr-description` returns a "not open" or other graceful-exit message instead of a `{title, body_file}` pair, report that message and stop.
74
+ ```bash
75
+ BODY_FILE=$(mktemp /tmp/pr-body-XXXXXX.md)
76
+ cat > "$BODY_FILE" << 'EOF'
77
+ <generated body>
78
+ EOF
79
+ ```
80
+
81
+ If the PR is not open or the commit range cannot be resolved, report the issue and stop.
75
82
 
76
- **Evidence decision:** `ce-pr-description` preserves any existing `## Demo` or `## Screenshots` block from the current body by default. If the user's focus asks to refresh or remove evidence, pass that intent as steering text — the skill will honor it. If no evidence block exists and one would benefit the reader, invoke `ce-demo-reel` separately to capture, then re-invoke `ce-pr-description` with updated steering that references the captured evidence.
83
+ **Evidence decision:** Preserve any existing `## Demo` or `## Screenshots` block from the current body by default. If the user's focus asks to refresh or remove evidence, honor that intent. If no evidence block exists and one would benefit the reader, load the `feature-video` skill to capture evidence, then splice the result as a `## Demo` section into the body file.
77
84
 
78
85
  **Compare and confirm** — briefly explain what the new description covers differently from the old one. This helps the user decide whether to apply; the description itself does not narrate these differences. Summarize from the body already in context (from the bash call that wrote `body_file`); do not `cat` the temp file, which would re-emit the body.
79
86
 
@@ -134,7 +141,7 @@ Priority order for commit messages and PR titles:
134
141
 
135
142
  Use the current branch and existing PR check from context. If the branch is empty, report detached HEAD and stop.
136
143
 
137
- If the PR check returned `state: OPEN`, note the URL -- this is the existing-PR flow. Continue to Step 4 and 5 (commit any pending work and push), then go to Step 7 to ask whether to rewrite the description. Only run Step 6 (which generates a new description via `ce-pr-description`) if the user confirms the rewrite; Step 7's existing-PR sub-path consumes the `{title, body_file}` that Step 6 produces. Otherwise (no open PR), continue through Steps 6, 7, and 8 in order.
144
+ If the PR check returned `state: OPEN`, note the URL -- this is the existing-PR flow. Continue to Step 4 and 5 (commit any pending work and push), then go to Step 7 to ask whether to rewrite the description. Only run Step 6 (which generates a new description) if the user confirms the rewrite; Step 7's existing-PR sub-path uses the title and body file that Step 6 produces. Otherwise (no open PR), continue through Steps 6, 7, and 8 in order.
138
145
 
139
146
  ### Step 4: Branch, stage, and commit
140
147
 
@@ -191,44 +198,49 @@ Use this branch diff (not the working-tree diff) for the evidence decision. If t
191
198
 
192
199
  **Evidence decision (before delegation).** If the branch diff changes observable behavior (UI, CLI output, API behavior with runnable code, generated artifacts, workflow output) and evidence is not otherwise blocked (unavailable credentials, paid services, deploy-only infrastructure, hardware), ask: "This PR has observable behavior. Capture evidence for the PR description?"
193
200
 
194
- - **Capture now** -- load the `ce-demo-reel` skill with a target description inferred from the branch diff. ce-demo-reel returns `Tier`, `Description`, and `URL`. Note the captured evidence so it can be passed as free-text steering to `ce-pr-description` (e.g., "include the captured demo: <URL> as a `## Demo` section") or spliced into the returned body before apply. If capture returns `Tier: skipped` or `URL: "none"`, proceed with no evidence.
195
- - **Use existing evidence** -- ask for the URL or markdown embed, then pass it as free-text steering to `ce-pr-description` or splice in before apply.
201
+ - **Capture now** -- load the `feature-video` skill with a target description inferred from the branch diff. feature-video returns `Tier`, `Description`, and `URL`. Note the captured evidence so it can be spliced into the PR body as a `## Demo` section. If capture returns `Tier: skipped` or `URL: "none"`, proceed with no evidence.
202
+ - **Use existing evidence** -- ask for the URL or markdown embed, then splice it into the PR body as a `## Demo` section before applying.
196
203
  - **Skip** -- proceed with no evidence section.
197
204
 
198
205
  When evidence is not possible (docs-only, markdown-only, changelog-only, release metadata, CI/config-only, test-only, or pure internal refactors), skip without asking.
199
206
 
200
- **Delegate title and body generation to `ce-pr-description`.** Load the `ce-pr-description` skill:
207
+ **Generate title and body.** Using the branch diff and commit log, write a PR title and body directly:
201
208
 
202
- - **For a new PR** (no existing PR found in Step 3): invoke with `base:<base-remote>/<base-branch>` using the already-resolved base from earlier in this step, so `ce-pr-description` describes the correct commit range even when the branch targets a non-default base (e.g., `develop`, `release/*`). Append any captured-evidence context or user focus as free-text steering (e.g., "include the captured demo: <URL> as a `## Demo` section").
203
- - **For an existing PR** (found in Step 3): invoke with the full PR URL from the Step 3 context (e.g., `https://github.com/owner/repo/pull/123`). The URL preserves repo/PR identity even when invoked from a worktree or subdirectory; the skill reads the PR's own `baseRefName` so no `base:` override is needed. Append any focus steering as free text after the URL.
204
-
205
- `ce-pr-description` returns a `{title, body_file}` block (body in an OS temp file). It applies the value-first writing principles, commit classification, sizing, narrative framing, writing voice, visual communication, numbering rules, and the Systematic badge footer internally. Use the returned values verbatim in Step 7; do not layer manual edits onto them unless a focused adjustment is required (e.g., splicing an evidence block captured in this step that was not passed as steering text — in that case, edit the body file directly before applying).
209
+ - **Title**: conventional-commit format, under 72 characters, describing the value delivered (not the implementation).
210
+ - **Body**: value-first narrative scaled to the change size. Apply the writing principles, commit classification, sizing, and narrative framing described in this skill. Write the body to an OS temp file:
211
+ ```bash
212
+ BODY_FILE=$(mktemp /tmp/pr-body-XXXXXX.md)
213
+ cat > "$BODY_FILE" << 'EOF'
214
+ <generated body>
215
+ EOF
216
+ ```
217
+ - Splice any captured evidence as a `## Demo` section into the body file before applying.
206
218
 
207
- If `ce-pr-description` returns a graceful-exit message instead of `{title, body_file}` (e.g., closed PR, no commits to describe, base ref unresolved), report the message and stop — do not create or edit the PR.
219
+ If the branch diff is empty or the base ref is unresolved, report the issue and stop — do not create or edit the PR.
208
220
 
209
221
  ### Step 7: Create or update the PR
210
222
 
211
223
  #### New PR (no existing PR from Step 3)
212
224
 
213
- Using the `{title, body_file}` returned by `ce-pr-description`:
225
+ Using the title and body file generated in Step 6:
214
226
 
215
227
  ```bash
216
- gh pr create --title "<returned title>" --body "$(cat "<returned body_file>")"
228
+ gh pr create --title "<title>" --body "$(cat "<body_file>")"
217
229
  ```
218
230
 
219
- Keep the title under 72 characters; `ce-pr-description` already emits a conventional-commit title in that range.
231
+ Keep the title under 72 characters.
220
232
 
221
233
  #### Existing PR (found in Step 3)
222
234
 
223
235
  The new commits are already on the PR from Step 5. Report the PR URL, then ask whether to rewrite the description.
224
236
 
225
- - If **yes**, run Step 6 now to generate `{title, body_file}` via `ce-pr-description` (passing the existing PR URL as `pr:`), then apply the returned title and body file:
237
+ - If **yes**, run Step 6 now to generate the title and body file (passing the existing PR URL for context), then apply:
226
238
 
227
239
  ```bash
228
- gh pr edit --title "<returned title>" --body "$(cat "<returned body_file>")"
240
+ gh pr edit --title "<title>" --body "$(cat "<body_file>")"
229
241
  ```
230
242
 
231
- - If **no** -- skip Step 6 entirely and finish. Do not run delegation or evidence capture when the user declined the rewrite.
243
+ - If **no** -- skip Step 6 entirely and finish. Do not run evidence capture when the user declined the rewrite.
232
244
 
233
245
  ### Step 8: Report
234
246
 
@@ -32,7 +32,7 @@ Check whether `agent-browser` is installed:
32
32
  command -v agent-browser >/dev/null 2>&1 && echo "Installed" || echo "NOT INSTALLED"
33
33
  ```
34
34
 
35
- If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then stop — this skill cannot function without agent-browser.
35
+ If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then stop — this skill cannot function without agent-browser.
36
36
 
37
37
  ## Workflow
38
38
 
@@ -44,7 +44,7 @@ Before starting, verify `agent-browser` is available:
44
44
  command -v agent-browser >/dev/null 2>&1 && echo "Ready" || echo "NOT INSTALLED"
45
45
  ```
46
46
 
47
- If not installed, inform the user: "`agent-browser` is not installed. Run `/ce-setup` to install required dependencies." Then stop.
47
+ If not installed, inform the user: "`agent-browser` is not installed. Install it with `npm install -g agent-browser`." Then stop.
48
48
 
49
49
  ### 2. Ask Browser Mode
50
50
 
@@ -93,9 +93,9 @@ To check blockers: search for `{dep_id}-complete-*.md` in both paths. Missing ma
93
93
 
94
94
  | Trigger | Flow |
95
95
  |---------|------|
96
- | Code review | `/ce:review` -> Findings -> `/todo-triage` -> Todos |
97
- | Autonomous review | `/ce:review mode:autofix` -> Residual todos -> `/todo-resolve` |
98
- | Code TODOs | `/todo-resolve` -> Fixes + Complex todos |
96
+ | Code review | `/ce:review` -> Findings -> `/systematic:todo-triage` -> Todos |
97
+ | Autonomous review | `/ce:review mode:autofix` -> Residual todos -> `/systematic:todo-resolve` |
98
+ | Code TODOs | `/systematic:todo-resolve` -> Fixes + Complex todos |
99
99
  | Planning | Brainstorm -> Create todo -> Work -> Complete |
100
100
 
101
101
  ## Key Distinction
@@ -62,7 +62,7 @@ Todos cleaned up: [count deleted]
62
62
  If pending todos were skipped, list them:
63
63
 
64
64
  ```
65
- Skipped pending todos (run /todo-triage to approve):
65
+ Skipped pending todos (run `/systematic:todo-triage` to approve):
66
66
  - 003-pending-p2-missing-index.md
67
67
  - 005-pending-p3-rename-variable.md
68
68
  ```
@@ -9,7 +9,7 @@ disable-model-invocation: true
9
9
 
10
10
  Interactive workflow for reviewing pending todos one by one and deciding whether to approve, skip, or modify each.
11
11
 
12
- **Do not write code during triage.** This is purely for review and prioritization -- implementation happens in `/todo-resolve`.
12
+ **Do not write code during triage.** This is purely for review and prioritization -- implementation happens in `/systematic:todo-resolve`.
13
13
 
14
14
  - First set the /model to Haiku
15
15
  - Read all pending todos from `.context/systematic/todos/` and legacy `todos/` directories
@@ -64,7 +64,7 @@ After all items processed:
64
64
  ```markdown
65
65
  What would you like to do next?
66
66
 
67
- 1. run /todo-resolve to resolve the todos
67
+ 1. run `/systematic:todo-resolve` to resolve the todos
68
68
  2. commit the todos
69
69
  3. nothing, go chill
70
70
  ```