@gobing-ai/spur 0.3.48 → 0.3.49
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/.claude-plugin/marketplace.json +1 -1
- package/config/config.example.yaml +52 -4
- package/config/workflows/pr-review.yaml +338 -0
- package/package.json +8 -8
- package/plugins/sp/README.md +9 -6
- package/plugins/sp/commands/{dev-featurechange.md → dev-feature-change.md} +7 -10
- package/plugins/sp/commands/dev-find-issue.md +24 -19
- package/plugins/sp/commands/dev-find-next.md +3 -3
- package/plugins/sp/commands/dev-gtd.md +11 -12
- package/plugins/sp/commands/dev-history-load.md +63 -0
- package/plugins/sp/commands/dev-pr-review.md +39 -0
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/roles.md +25 -12
- package/plugins/sp/scripts/history-load.ts +400 -0
- package/plugins/sp/scripts/pr-reviewing.ts +867 -0
- package/plugins/sp/scripts/validate-commands.ts +33 -2
- package/plugins/sp/skills/code-implementation/SKILL.md +9 -1
- package/plugins/sp/skills/code-verification/SKILL.md +27 -28
- package/plugins/sp/skills/issue-finding/SKILL.md +6 -5
- package/plugins/sp/skills/issue-finding/references/session-formats.md +4 -2
- package/plugins/sp/skills/next-feature/SKILL.md +6 -6
- package/plugins/sp/skills/next-feature/references/handoff-routing.md +5 -5
- package/plugins/sp/skills/next-feature/references/signal-derivation.md +7 -2
- package/plugins/sp/skills/pr-reviewing/SKILL.md +285 -0
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +5 -5
- package/plugins/sp/skills/spur-cli/references/features.md +1 -1
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +14 -4
- package/schemas/spur-config.schema.json +20 -0
- package/spur.js +682 -222
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: "Render the session-forensics report from imported history data (8 CLI-derivable sections plus 6 model-authored), identify bottlenecks and behavioral anti-patterns, and optionally create a structured fix task behind --create-task. Triggers: post-mortem, performance analysis, session review, find issues, identify bottlenecks"
|
|
3
3
|
role: reviewer
|
|
4
|
-
argument-hint: "[<topic>] [--sessions <glob>] [--source <auto|
|
|
4
|
+
argument-hint: "[<topic>] [--sessions <glob>] [--source <auto|pi|claude|codex|gemini|opencode|antigravity|openclaw|omp|grok|agy|all>] [--feature <id>] [--template <meta|issue|standard>] [--priority <P0|P1|P2|P3>] [--severity <S0|S1|S2>] [--category <list>] [--since <iso>] [--until <iso>] [--top <n>] [--min-cost <duration>] [--strict-topic] [--create-task] [--agent <inline|auto|name>] [--json]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Write", "Grep", "Glob", "Skill"]
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -14,24 +14,24 @@ task file via `spur task create`.
|
|
|
14
14
|
|
|
15
15
|
## Argument Flags
|
|
16
16
|
|
|
17
|
-
| Flag
|
|
18
|
-
|
|
|
19
|
-
| `[<topic>]`
|
|
20
|
-
| `--sessions` `<glob>`
|
|
21
|
-
| `--source` `<auto\|
|
|
22
|
-
| `--feature` `<id>`
|
|
23
|
-
| `--template` `<meta\|issue\|standard>`
|
|
24
|
-
| `--priority` `<P0\|P1\|P2\|P3>`
|
|
25
|
-
| `--severity` `<S0\|S1\|S2>`
|
|
26
|
-
| `--category` `<list>`
|
|
27
|
-
| `--since` `<iso>`
|
|
28
|
-
| `--until` `<iso>`
|
|
29
|
-
| `--top` `<n>`
|
|
30
|
-
| `--min-cost` `<duration>`
|
|
31
|
-
| `--strict-topic`
|
|
32
|
-
| `--create-task`
|
|
33
|
-
| `--agent` `<inline\|auto\|name>`
|
|
34
|
-
| `--json`
|
|
17
|
+
| Flag | Description | Default |
|
|
18
|
+
| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
19
|
+
| `[<topic>]` | Narrow the analysis to a topic. | omitted |
|
|
20
|
+
| `--sessions` `<glob>` | Session log glob (fallback input). | recent |
|
|
21
|
+
| `--source` `<auto\|pi\|claude\|codex\|gemini\|opencode\|antigravity\|openclaw\|omp\|grok\|agy\|all>` | Agent source to scan (CLI vocabulary; `all` fans out, `auto` resolves at runtime). | auto |
|
|
22
|
+
| `--feature` `<id>` | Attach the generated task to a feature. | omitted |
|
|
23
|
+
| `--template` `<meta\|issue\|standard>` | Task template shape (`--create-task` only); `issue` is the explicit single-finding override, `standard` the generic override. | meta |
|
|
24
|
+
| `--priority` `<P0\|P1\|P2\|P3>` | Filter / assign task priority. | P2 |
|
|
25
|
+
| `--severity` `<S0\|S1\|S2>` | Filter / assign severity. | all |
|
|
26
|
+
| `--category` `<list>` | Comma list of categories to keep. | all |
|
|
27
|
+
| `--since` `<iso>` | Start of the scan window. | configured |
|
|
28
|
+
| `--until` `<iso>` | End of the scan window. | now |
|
|
29
|
+
| `--top` `<n>` | Limit to top N findings. | omitted |
|
|
30
|
+
| `--min-cost` `<duration>` | Minimum wasted duration to report. | omitted |
|
|
31
|
+
| `--strict-topic` | Drop findings off-topic. | off |
|
|
32
|
+
| `--create-task` | Generate a fix task for findings. | off |
|
|
33
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the model-bearing analysis. | omit |
|
|
34
|
+
| `--json` | Emit structured JSON. | off |
|
|
35
35
|
|
|
36
36
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
37
37
|
|
|
@@ -52,6 +52,11 @@ the history data plane is now the primary source (no flag needed), and the old r
|
|
|
52
52
|
is the new default. Raw JSONL remains a fallback under the three conditions documented in
|
|
53
53
|
`sp:issue-finding`.
|
|
54
54
|
|
|
55
|
+
**Data-plane preflight.** Forensics read the imported history plane as-is. If findings come back
|
|
56
|
+
empty or stale, run `/sp:dev-history-load` (on-demand cumulative `spur history import` + analyze,
|
|
57
|
+
checkpoint resume — task 0567) before re-running forensics; it owns the interactive preflight, while
|
|
58
|
+
`spur history daily` owns the periodic cadence.
|
|
59
|
+
|
|
55
60
|
**See also:** skill `sp:issue-finding` (SSOT), `/sp:dev-runall`, `/sp:dev-dogfood`,
|
|
56
61
|
`sp:daily-summary`, `sp:reverse-engineering`.
|
|
57
62
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Prompt-first feature frontier prioritizer — answers 'which feature should we work on now?' with a ranked, evidence-carrying frontier, and emits rank-distorting tree defects as proposals /sp:dev-
|
|
2
|
+
description: "Prompt-first feature frontier prioritizer — answers 'which feature should we work on now?' with a ranked, evidence-carrying frontier, and emits rank-distorting tree defects as proposals /sp:dev-feature-change consumes. Triggers: find next, which feature, feature ranking, frontier priority, what should I work on."
|
|
3
3
|
role: planner
|
|
4
4
|
argument-hint: "[--task [<feature-id>]] [--agent <inline|auto|name>] [--auto] [--json]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Write", "Grep", "Glob", "Skill"]
|
|
@@ -13,7 +13,7 @@ instead of ranking them, and emits tree structure defects as proposals only.
|
|
|
13
13
|
|
|
14
14
|
Answers *"which X"* — the question `/sp:dev-next` deliberately does not (next-router routing-table
|
|
15
15
|
§0 step 1c). Advancing a chosen target remains `/sp:dev-next`'s job; applying tree changes remains
|
|
16
|
-
`/sp:dev-
|
|
16
|
+
`/sp:dev-feature-change`'s job.
|
|
17
17
|
|
|
18
18
|
## Argument Flags
|
|
19
19
|
|
|
@@ -55,7 +55,7 @@ Without `--task` the command is read-only with respect to the corpus and docs. U
|
|
|
55
55
|
only mutation is the one the dispatched commands perform on `docs/tasks*/` after confirm (or
|
|
56
56
|
auto-accept) — the command still performs no `spur feature move`, no sync apply, and no write under
|
|
57
57
|
`docs/features/**`. Defect proposals conform to the `docs/plans/feature-tree-restructure-map.md`
|
|
58
|
-
schema and are applied only through `/sp:dev-
|
|
58
|
+
schema and are applied only through `/sp:dev-feature-change` (dry-run → confirm → apply).
|
|
59
59
|
|
|
60
60
|
**See also:** skill `sp:next-feature` (SSOT), `sp:next-router` (`/sp:dev-next`),
|
|
61
61
|
`sp:conflict-finding` (the prompt-first template), `sp:spur-cli`.
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Get things done — quality gate → fix →
|
|
2
|
+
description: Get things done — quality gate → fix → commit → push → gh verify in one flow (optional act CI simulation via --act)
|
|
3
3
|
role: coder
|
|
4
|
-
argument-hint: "[<quality-gate-command>] [--dry-run] [--
|
|
4
|
+
argument-hint: "[<quality-gate-command>] [--dry-run] [--act] [--no-push] [--no-verify] [--scope <path>] [--max-retry <n>]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Write", "Edit", "Grep", "Glob"]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Dev GTD
|
|
9
9
|
|
|
10
10
|
Self-contained end-to-end delivery command: local quality gate (auto-fix via `/sp:dev-fixall`),
|
|
11
|
-
local CI/CD simulation via `act
|
|
12
|
-
GitHub push-success verification via `gh`. Designed to stand alone (no backing skill); once mature
|
|
11
|
+
optional local CI/CD simulation via `act` (`--act` only), conventional commit message generation,
|
|
12
|
+
commit, push, and GitHub push-success verification via `gh`. Designed to stand alone (no backing skill); once mature
|
|
13
13
|
it supersedes `/sp:dev-gitmsg` and is absorbed into the shared command structure.
|
|
14
14
|
|
|
15
15
|
## Argument Flags
|
|
@@ -18,7 +18,7 @@ it supersedes `/sp:dev-gitmsg` and is absorbed into the shared command structure
|
|
|
18
18
|
| --- | --- | --- |
|
|
19
19
|
| `<quality-gate-command>` | Local quality gate to run first; on failure, invoke `/sp:dev-fixall "<cmd>"` to fix all issues automatically. | `bun run check` |
|
|
20
20
|
| `--dry-run` | Generate the git message and plan only — no commit, push, or gh verify. | off |
|
|
21
|
-
| `--
|
|
21
|
+
| `--act` | Run local `act` CI/CD simulation before commit (heavy: launches Docker). Default off — stage 6 `gh` verify covers real CI post-push. Reach for it on workflow edits, dependency bumps, infra changes. Independent of `--dry-run`: `--dry-run --act` still runs the simulation. | off |
|
|
22
22
|
| `--no-push` | Commit but do not git push or gh-verify. | off |
|
|
23
23
|
| `--no-verify` | Push but skip the `gh` push-success verification. | off |
|
|
24
24
|
| `--scope <path>` | Scope the commit-message diff analysis to a path. | all staged changes |
|
|
@@ -28,7 +28,7 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
28
28
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
31
|
-
/sp:dev-gtd [<quality-gate-command>] [--dry-run] [--
|
|
31
|
+
/sp:dev-gtd [<quality-gate-command>] [--dry-run] [--act] [--no-push] [--no-verify] [--scope <path>] [--max-retry <n>]
|
|
32
32
|
|
|
33
33
|
## Implementation
|
|
34
34
|
|
|
@@ -41,8 +41,9 @@ default `bun run check`. Run it. If it exits non-zero, invoke `/sp:dev-fixall "<
|
|
|
41
41
|
re-run the gate. Loop until the gate is clean or `--max-retry` is exhausted. Report what was fixed
|
|
42
42
|
per file.
|
|
43
43
|
|
|
44
|
-
**2 — Local CI/CD simulation via `act
|
|
45
|
-
|
|
44
|
+
**2 — Local CI/CD simulation via `act` (opt-in).** Skip this stage entirely unless `--act` is
|
|
45
|
+
given. When `--act` is given: confirm Docker is running (`docker info`). On macOS the repo uses
|
|
46
|
+
OrbStack — if the default context is not ready, use
|
|
46
47
|
`DOCKER_HOST=unix://$HOME/.orbstack/run/docker.sock`. Run
|
|
47
48
|
`act -W .github/workflows/ci.yml -j verify` (or the repo's `bun run verify-gha-ci`); prefer
|
|
48
49
|
`--container-architecture` matching your host when the runner pulls a foreign platform. If a step
|
|
@@ -57,10 +58,8 @@ If the build failure includes `TS2307: Cannot find module` on a workspace packag
|
|
|
57
58
|
resolve Bun workspace packages because Bun does not create `node_modules/@scope/` symlinks.
|
|
58
59
|
The real GitHub CI runner passes. **Do not** modify the build infrastructure to work around this
|
|
59
60
|
`act`-specific issue. Instead, emit a clear message:
|
|
60
|
-
`⚠ act CI simulation failed on workspace resolution — this is a container-environment artifact. Re-run
|
|
61
|
-
Then stop the run (this stage failed). The operator can
|
|
62
|
-
|
|
63
|
-
Skip this stage entirely when `--skip-act` is given.
|
|
61
|
+
`⚠ act CI simulation failed on workspace resolution — this is a container-environment artifact. Re-run without --act to skip this step (it is opt-in).`
|
|
62
|
+
Then stop the run (this stage failed). The operator can proceed by re-running without `--act`.
|
|
64
63
|
|
|
65
64
|
**3 — Generate a conventional commit message.** Follow the gitmsg procedure (the same one
|
|
66
65
|
`/sp:dev-gitmsg` runs). Run `git diff --cached --stat` (add `-- <path>` when `--scope` is given) for
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "On-demand cumulative history load + narrowed analyze: run spur history import (checkpoint-resume, additive) then spur history analyze, optionally narrowed to a session/task/window, with optional forensics render. Triggers: load history, import agent conversations, analyze my history, history for this conversation"
|
|
3
|
+
role: scribe
|
|
4
|
+
argument-hint: "[--source <name>] [--session <id>] [--task <wbs>] [--since <iso>] [--until <iso>] [--report] [--dry-run] [--json]"
|
|
5
|
+
allowed-tools: ["Bash", "Read"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Dev History Load
|
|
9
|
+
|
|
10
|
+
Runs the on-demand history load+analyze sequence: `spur history import` (all sources, checkpoint
|
|
11
|
+
resume — additive and self-healing) then `spur history analyze`, with narrowing flags routed to the
|
|
12
|
+
verb that accepts them. Wraps the shipped CLI sequence in one discoverable surface; owns no import
|
|
13
|
+
logic, no state, and no cadence.
|
|
14
|
+
|
|
15
|
+
## Argument Flags
|
|
16
|
+
|
|
17
|
+
| Flag | Description | Default |
|
|
18
|
+
| -------------------- | -------------------------------------------------------------- | -------- |
|
|
19
|
+
| `--source` `<name>` | Agent source to import and analyze (both verbs). | all |
|
|
20
|
+
| `--session` `<id>` | Narrow the analyze to a single session id. | omitted |
|
|
21
|
+
| `--task` `<wbs>` | Narrow the analyze to a single task WBS. | omitted |
|
|
22
|
+
| `--since` `<iso>` | Inclusive lower bound on the analyze window. | omitted |
|
|
23
|
+
| `--until` `<iso>` | Inclusive upper bound on the analyze window. | omitted |
|
|
24
|
+
| `--report` | Render `spur history report --mode forensics` after analyze. | off |
|
|
25
|
+
| `--dry-run` | Preview the sequence; import scans without persisting. | off |
|
|
26
|
+
| `--json` | Emit one JSON result object; no banner text interleaved. | off |
|
|
27
|
+
|
|
28
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
/sp:dev-history-load
|
|
34
|
+
/sp:dev-history-load --source omp --session <session-id>
|
|
35
|
+
/sp:dev-history-load --task <wbs> --since 2026-08-01 --until 2026-08-15
|
|
36
|
+
/sp:dev-history-load --report
|
|
37
|
+
/sp:dev-history-load --dry-run
|
|
38
|
+
/sp:dev-history-load --json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Cumulative by checkpoint, not by this command.** Re-running imports only newly appended
|
|
42
|
+
conversation data — the shipped import checkpoint resume (task 0470 R6) makes repeat runs additive
|
|
43
|
+
and never double-counts. This command never prunes reports and never re-implements the daily
|
|
44
|
+
pipeline; for the periodic cadence (import-all → analyze → artifact → 90-day prune, self-healing),
|
|
45
|
+
run `spur history daily` instead.
|
|
46
|
+
|
|
47
|
+
**Degraded sources proceed with a warning; fully-failed imports abort (0569).** `spur history
|
|
48
|
+
import` distinguishes fatal from degraded fan-outs by exit code: **exit 1** (every source
|
|
49
|
+
failed) aborts the sequence before analyze and propagates the exit code; **exit 2** (mixed —
|
|
50
|
+
at least one source imported, some skipped malformed rows) proceeds to analyze with a loud
|
|
51
|
+
per-source warning: stderr names each degraded source with its parse/validation error counts
|
|
52
|
+
(human mode), and the `--json` payload carries a `warnings` array with the source, counts, and
|
|
53
|
+
the import step's warning detail. A steady-state degraded source therefore no longer blocks a
|
|
54
|
+
bare run; to scope around one deliberately, use `--source <name>` per source.
|
|
55
|
+
|
|
56
|
+
## Implementation
|
|
57
|
+
|
|
58
|
+
Run the load-then-analyze sequence per `plugins/sp/scripts/history-load.ts` — import first, analyze
|
|
59
|
+
only after import exits 0, narrowing forwarded to `analyze` only:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
bun plugins/sp/scripts/history-load.ts $ARGUMENTS
|
|
63
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Review GitHub PRs with Codex; collect and fix findings."
|
|
3
|
+
role: reviewer
|
|
4
|
+
argument-hint: "[full|submit|collect|fix|rerun|status|rules] [--base <branch>] [--no-wait] [--agent <inline|auto|name>] [<focus>]"
|
|
5
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Dev PR Review
|
|
9
|
+
|
|
10
|
+
Wraps the **sp:pr-reviewing** skill. The review itself runs on the GitHub PR through Codex
|
|
11
|
+
(`@codex review`) — never through a local Codex review mechanism; the invoking agent orchestrates
|
|
12
|
+
and (in `fix` mode) implements.
|
|
13
|
+
|
|
14
|
+
## Argument Flags
|
|
15
|
+
|
|
16
|
+
| Flag | Description | Default |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| `<mode>` | `full\|submit\|collect\|fix\|rerun\|status\|rules` — full: request (deduped) + wait + report; submit: request and stop at pending; collect: report the latest review; fix: validate findings, fix legitimate ones, re-review; rerun: force a fresh review of the pushed HEAD; status: read-only composite; rules: author the repo's `AGENTS.md` `## Code Review Rules`. | full |
|
|
19
|
+
| `--base` `<branch>` | Base branch when a new PR must be created. | existing PR base, else repo default |
|
|
20
|
+
| `--no-wait` | Return pending right after the review request instead of polling. | off |
|
|
21
|
+
| `--agent` `<inline\|auto\|name>` | Who performs model-bearing triage/fix. Omit uses the current agent, `inline` forbids dispatch, `auto` resolves the declared role, and a name pins that executor. This does not change the deterministic workflow/direct route. | omit |
|
|
22
|
+
| `<focus>` | Remaining free text — extra review focus appended to the Codex request (e.g. `security boundaries and transaction idempotency`). | none |
|
|
23
|
+
|
|
24
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
/sp:dev-pr-review [full|submit|collect|fix|rerun|status|rules] [--base <branch>] [--no-wait] [--agent <inline|auto|name>] [review focus]
|
|
29
|
+
|
|
30
|
+
## Implementation
|
|
31
|
+
|
|
32
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
33
|
+
- Delegate everything: `Skill(skill="sp:pr-reviewing", args="$ARGUMENTS")`. The skill owns mode
|
|
34
|
+
routing, finding triage, fix, and rules authoring; `.spur/workflows/pr-review.yaml` is the SSOT
|
|
35
|
+
for the review spine's state order and guards; the staged `pr-reviewing.ts` is the
|
|
36
|
+
deterministic git/gh core every spine step shells out to.
|
|
37
|
+
- The external review goes through the GitHub PR and an `@codex review` comment only — never local
|
|
38
|
+
Codex review commands. Never force-push, rewrite history, merge the PR, or discard unrelated
|
|
39
|
+
changes; outside `fix` mode, ask before creating any commit.
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.49",
|
|
4
4
|
"description": "Spur — a local-first harness engineering toolkit that wraps mainstream coding agents with constraint checking, workflow orchestration, and history analytics.",
|
|
5
5
|
"extensions": {
|
|
6
6
|
"pi": ["./hooks/pi/guard-extension.ts"]
|
|
@@ -9,10 +9,12 @@ see_also:
|
|
|
9
9
|
|
|
10
10
|
# Roles — the Layer-1 role-to-tier table
|
|
11
11
|
|
|
12
|
-
The executor-selection contract is two layers. **Layer 1 (this file)**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
The executor-selection contract is two layers. **Layer 1 (this file)** projects *role → tier*;
|
|
13
|
+
its SSOT is `DEFAULT_AGENT_ROLES` in `packages/config/src/index.ts` (task 0572 / ADR-061) — this
|
|
14
|
+
file is the agent/human-facing view plus the plugin-owned command→role mapping. **Layer 2** maps
|
|
15
|
+
*tier → executor* and is owned by the operator in `.spur/config.yaml`. This file never names an
|
|
16
|
+
executor, a model, or a vendor — it declares only what tier a role's work needs, and the
|
|
17
|
+
operator's config decides which executor serves that tier.
|
|
16
18
|
|
|
17
19
|
The vocabulary is four roles, one per tier:
|
|
18
20
|
|
|
@@ -36,12 +38,17 @@ collapse, named as people so they stay addressable in `--agent`.
|
|
|
36
38
|
|
|
37
39
|
## The table
|
|
38
40
|
|
|
41
|
+
<!-- PROJECTION (task 0572 / ADR-061): the tier/stages half of the block below is a generated view
|
|
42
|
+
of DEFAULT_AGENT_ROLES in packages/config/src/index.ts — edit that constant, not this file.
|
|
43
|
+
plugins/sp/tests/roles.test.ts (R9) fails the suite on any drift between the two. The
|
|
44
|
+
`commands:` half is plugin data (command frontmatter is its SSOT). -->
|
|
45
|
+
|
|
39
46
|
```yaml
|
|
40
47
|
version: 1
|
|
41
48
|
roles:
|
|
42
49
|
- id: scribe
|
|
43
50
|
tier: cheap
|
|
44
|
-
commands: [dev-gitmsg, dev-handover, dev-daily, dev-changelog, dev-refresh, rule-add, rule-refine, workflow-add, workflow-refine, spur-init]
|
|
51
|
+
commands: [dev-gitmsg, dev-handover, dev-daily, dev-history-load, dev-changelog, dev-refresh, rule-add, rule-refine, workflow-add, workflow-refine, spur-init]
|
|
45
52
|
stages: [changelog]
|
|
46
53
|
- id: coder
|
|
47
54
|
tier: standard
|
|
@@ -49,11 +56,11 @@ roles:
|
|
|
49
56
|
stages: [implement, test, wrap]
|
|
50
57
|
- id: reviewer
|
|
51
58
|
tier: capable-1
|
|
52
|
-
commands: [dev-verify, dev-verifyall, dev-review, dev-dogfood, rule-scan, dev-find-conflict, dev-find-issue]
|
|
59
|
+
commands: [dev-verify, dev-verifyall, dev-review, dev-pr-review, dev-dogfood, rule-scan, dev-find-conflict, dev-find-issue]
|
|
53
60
|
stages: [verify, review, dogfood]
|
|
54
61
|
- id: planner
|
|
55
62
|
tier: capable-2
|
|
56
|
-
commands: [dev-plan, dev-refine, dev-brainstorm, dev-idea, dev-runall, dev-parallel, dev-next, dev-arch, dev-refineall, dev-find-next, dev-
|
|
63
|
+
commands: [dev-plan, dev-refine, dev-brainstorm, dev-idea, dev-runall, dev-parallel, dev-next, dev-arch, dev-refineall, dev-find-next, dev-feature-change]
|
|
57
64
|
stages: [plan, refine, brainstorm]
|
|
58
65
|
```
|
|
59
66
|
|
|
@@ -81,13 +88,19 @@ must not sit below the highest `min_tier` among its folded stages.
|
|
|
81
88
|
`refine`, `brainstorm`.
|
|
82
89
|
|
|
83
90
|
**Placement notes (directory closure, task 0535).** The decided four-row table listed 31 commands;
|
|
84
|
-
the live `plugins/sp/commands/` directory has
|
|
91
|
+
the live `plugins/sp/commands/` directory has 39. The six additional commands were placed by the
|
|
85
92
|
same stage logic: `dev-refineall` folds `refine` → planner; `dev-find-next` is planning-side
|
|
86
|
-
frontier work → planner; `dev-
|
|
93
|
+
frontier work → planner; `dev-feature-change` is planning-half corpus surgery on the feature tree →
|
|
87
94
|
planner; `dev-gtd` is the execution/delivery flow → coder; `dev-find-conflict` and `dev-find-issue`
|
|
88
|
-
are audits/analysis → reviewer (same reasoning as `rule-scan`).
|
|
95
|
+
are audits/analysis → reviewer (same reasoning as `rule-scan`). Later additions: `dev-history-load`
|
|
96
|
+
is mechanical load+analyze orchestration → scribe; `dev-pr-review` is review orchestration —
|
|
97
|
+
driving the external PR review and triaging its findings folds the `review` stage → reviewer.
|
|
89
98
|
|
|
90
99
|
**Consistency is a test, not a convention.** `plugins/sp/tests/roles.test.ts` parses this YAML and
|
|
91
100
|
asserts the tier-distinctness, command closure, stage-floor, and boundary invariants against the
|
|
92
|
-
real command directory, the real stage registry, and the real operator config
|
|
93
|
-
|
|
101
|
+
real command directory, the real stage registry, and the real operator config — plus parity with
|
|
102
|
+
`DEFAULT_AGENT_ROLES` (R9, 0572): the table above must equal the code SSOT byte-for-byte on
|
|
103
|
+
id/tier/stages. When the table and the registry disagree, fix the table or the registry — never the
|
|
104
|
+
test. When the table and `DEFAULT_AGENT_ROLES` disagree, fix the constant (or regenerate this view).
|
|
105
|
+
A project may re-tier/re-stage a role at config time via `agent.roles` (closed vocabulary) — that
|
|
106
|
+
override never flows back into this file.
|