@fro.bot/systematic 2.30.1 → 2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "2.30.1",
3
+ "version": "2.31.1",
4
4
  "description": "Structured engineering workflows for OpenCode",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -66,18 +66,18 @@
66
66
  },
67
67
  "devDependencies": {
68
68
  "@biomejs/biome": "2.4.16",
69
- "@opencode-ai/plugin": "1.15.13",
70
- "@opencode-ai/sdk": "1.15.13",
69
+ "@opencode-ai/plugin": "1.17.3",
70
+ "@opencode-ai/sdk": "1.17.3",
71
71
  "@semantic-release/exec": "7.1.0",
72
72
  "@types/bun": "latest",
73
73
  "@types/js-yaml": "4.0.9",
74
- "@types/node": "24.13.0",
74
+ "@types/node": "24.13.2",
75
75
  "ajv": "8.20.0",
76
76
  "ajv-formats": "3.0.1",
77
77
  "conventional-changelog-conventionalcommits": "9.3.1",
78
78
  "markdownlint-cli": "0.48.0",
79
79
  "rimraf": "6.1.3",
80
- "semantic-release": "25.0.3",
80
+ "semantic-release": "25.0.5",
81
81
  "semantic-release-export-data": "1.2.0",
82
82
  "typescript": "6.0.3"
83
83
  },
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: ce:compound-refresh
3
3
  description: Refresh stale or drifting learnings and pattern docs in docs/solutions/ by reviewing, updating, consolidating, replacing, or deleting them against the current codebase. Use after refactors, migrations, dependency upgrades, or when a retrieved learning feels outdated or wrong. Also use when reviewing docs/solutions/ for accuracy, when a recently solved problem contradicts an existing learning, when pattern docs no longer reflect current code, or when multiple docs seem to cover the same topic and might benefit from consolidation.
4
+ argument-hint: "[mode:autofix] [optional: category, module, or keyword scope]"
4
5
  disable-model-invocation: true
5
6
  ---
6
7
 
@@ -44,11 +44,11 @@ task({
44
44
  })
45
45
  ```
46
46
 
47
- **When background is available:** OpenCode exposes `task_status` in the tool list and the `task()` tool description includes background mode instructions. This requires `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` or the umbrella `OPENCODE_EXPERIMENTAL=true` flag.
47
+ **When background is available:** `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true` (or the umbrella `OPENCODE_EXPERIMENTAL=true`) must be set. When enabled, `background: true` runs the subagent asynchronously. OpenCode automatically injects the result into the parent session as a synthetic message when the subagent completes. You are notified; you do not poll.
48
48
 
49
- **When background is unavailable:** `task_status` is not registered. Passing `background: true` returns an error. Fall back to foreground dispatch — dispatch subagents serially or in small foreground batches instead.
49
+ **When background is unavailable:** Passing `background: true` returns an error. Fall back to foreground dispatch — dispatch subagents serially or in small foreground batches instead.
50
50
 
51
- **Check before assuming:** If you see `task_status` in your available tools, background dispatch is enabled. If you do not see it, use foreground dispatch only.
51
+ **Check before assuming:** Rely on whether `background: true` is accepted (i.e., the env flag is set). If it returns an error, use foreground dispatch only.
52
52
 
53
53
  ## Serial vs Parallel Dispatch
54
54
 
@@ -119,7 +119,7 @@ After subagents complete, the orchestrator synthesizes results:
119
119
  - If a subagent returns an error or its output is incomplete, diagnose before dispatching dependent units.
120
120
  - Do not dispatch dependent units on a broken tree.
121
121
  - Retry a failed unit by dispatching a new `task()` call with a corrected prompt, or resume the prior session with `task_id`.
122
- - For background tasks (when available): use `task_status` to poll or wait for terminal state before retrying.
122
+ - For background tasks (when available): wait for the automatic completion notification (the result is injected into the parent session). Do not poll or sleep. Retry by dispatching a new `task()` with a corrected prompt, or resume with `task_id`.
123
123
 
124
124
  ## Quick Reference
125
125
 
@@ -128,7 +128,7 @@ After subagents complete, the orchestrator synthesizes results:
128
128
  | Units have dependencies | Serial foreground dispatch |
129
129
  | Units share files | Serial foreground dispatch |
130
130
  | Units are independent, no file overlap | Parallel foreground dispatch |
131
- | Background available + long-running work | Parallel background dispatch with `task_status` |
131
+ | Background available + long-running work | Parallel background dispatch; results are pushed back to the parent on completion (no polling) |
132
132
  | Background unavailable | Foreground only — serial or batched |
133
133
  | Subagent fails | Diagnose, fix prompt, retry with new `task()` or resume with `task_id` |
134
134
  | File collision detected post-parallel | Stage non-colliding files (if workflow owns git ops), re-run colliding units serially |
@@ -137,8 +137,8 @@ After subagents complete, the orchestrator synthesizes results:
137
137
 
138
138
  | Mistake | Fix |
139
139
  |---|---|
140
- | Assuming `task_status` is always available | Check tool list first; fall back to foreground if absent |
140
+ | Polling or sleeping to wait for a background subagent | Background results are pushed into the parent session automatically; never poll or sleep |
141
141
  | Parallel subagents staging or committing | Instruct subagents not to stage/commit; the current workflow owner handles git ops when applicable, otherwise synthesize file inventory and results for the caller or user |
142
142
  | Dispatching dependent units without waiting | Always wait for prerequisites to complete and verify their output |
143
143
  | Ignoring file overlap in parallel batches | Run the Parallel Safety Check before every parallel dispatch |
144
- | Using `background: true` without checking the flag | Only use when `task_status` appears in available tools |
144
+ | Using `background: true` without the experimental flag enabled | Only use background when `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`; otherwise dispatch foreground |
@@ -6,21 +6,21 @@ This reference expands the Systematic-specific rules from `SKILL.md`. The mechan
6
6
 
7
7
  Systematic skill frontmatter mirrors what the runtime loader actually reads. Do not invent fields for documentation structure. If the loader does not consume the field, put the information in the body.
8
8
 
9
- | Field | Required | When To Use | Example |
10
- |---|---:|---|---|
11
- | `name` | Yes | Every skill. Use the unprefixed skill identifier unless another namespace is intentional. | `name: writing-systematic-skills` |
12
- | `description` | Yes | Trigger-oriented discovery text. Third person. Prefer `Use when...`. | `description: Use when fixing bundled skill frontmatter failures...` |
13
- | `argument-hint` | No | The skill accepts meaningful invocation arguments. | `argument-hint: "[path/to/document.md]"` |
14
- | `disable-model-invocation` | No | Dispatcher or routing skills that should not be directly model-invoked. | `disable-model-invocation: true` |
15
- | `allowed-tools` | No | The skill needs an explicit tool allowlist. | `allowed-tools: Bash, Read` |
16
- | `license` | No | Licensing metadata matters for distribution. | `license: MIT` |
17
- | `compatibility` | No | A platform or version caveat is real and useful. | `compatibility: OpenCode` |
18
- | `metadata` | No | String-only metadata map. Keep it boring. | `metadata: { owner: systematic }` |
19
- | `user-invocable` | No | Direct user invocation should be explicitly advertised or suppressed. | `user-invocable: false` |
20
- | `agent` | No | A loader-supported companion agent is required. | `agent: general` |
21
- | `model` | No | A skill-level model choice is justified for *skill execution* (not bundled agents see below). | `model: anthropic/claude-haiku-4-5` |
22
- | `context` | No | Forked execution is required. `fork` derives subtask behavior at runtime. | `context: fork` |
23
- | `subtask` | No | Explicit forked-subtask dispatch marker. | `subtask: true` |
9
+ | Field | Required | When To Use | Enforcement | Example |
10
+ |---|---:|---|---|---|
11
+ | `name` | Yes | Every skill. Use the unprefixed skill identifier unless another namespace is intentional. | Read + enforced (loader rejects missing/null) | `name: writing-systematic-skills` |
12
+ | `description` | Yes | Trigger-oriented discovery text. Third person. Prefer `Use when...`. | Read + enforced (loader rejects missing/null) | `description: Use when fixing bundled skill frontmatter failures...` |
13
+ | `argument-hint` | No | The skill accepts meaningful invocation arguments. | Read + surfaced to callers | `argument-hint: "[path/to/document.md]"` |
14
+ | `disable-model-invocation` | No | Dispatcher or routing skills that should not be directly model-invoked. | Read + enforced (loader acts on it) | `disable-model-invocation: true` |
15
+ | `allowed-tools` | No | The skill needs an explicit tool allowlist. | **Read but not enforced.** `src/lib/skills.ts` parses it into `SkillFrontmatter.allowedTools` and passes it through, but no permission gate in `src/lib` acts on it. OpenCode treats it as metadata, not enforced permissions. Do not rely on this field to restrict tool access. | `allowed-tools: Bash, Read` |
16
+ | `license` | No | Licensing metadata matters for distribution. | Read, passed through as metadata | `license: MIT` |
17
+ | `compatibility` | No | A platform or version caveat is real and useful. | Read, passed through as metadata | `compatibility: OpenCode` |
18
+ | `metadata` | No | String-only metadata map. Keep it boring. | Read, passed through as metadata | `metadata: { owner: systematic }` |
19
+ | `user-invocable` | No | Direct user invocation should be explicitly advertised or suppressed. | Read + surfaced to callers | `user-invocable: false` |
20
+ | `agent` | No | A loader-supported companion agent is required. | Read + enforced (loader acts on it) | `agent: general` |
21
+ | `model` | No | A skill-level model choice is justified for *skill execution* (not bundled agents -- see below). | Read + enforced (loader acts on it; banned in bundled agent markdown) | `model: anthropic/claude-haiku-4-5` |
22
+ | `context` | No | Forked execution is required. `fork` derives subtask behavior at runtime. | Read + enforced (runtime-recognized) | `context: fork` |
23
+ | `subtask` | No | Explicit forked-subtask dispatch marker. | Read + enforced (runtime-recognized) | `subtask: true` |
24
24
 
25
25
  ### Required Fields
26
26