@gobing-ai/spur 0.3.41 → 0.3.43
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 +15 -0
- package/README.md +15 -1
- package/config/templates/AGENTS.md +5 -3
- package/config/workflows/task-pipeline.yaml +113 -12
- package/package.json +15 -12
- package/plugins/README.md +655 -0
- package/plugins/sp/README.md +621 -0
- package/plugins/sp/agents/expert-spur.md +109 -0
- package/plugins/sp/agents/super-coder.md +126 -0
- package/plugins/sp/agents/super-planner.md +283 -0
- package/plugins/sp/agents/super-reviewer.md +154 -0
- package/plugins/sp/commands/dev-arch.md +30 -0
- package/plugins/sp/commands/dev-brainstorm.md +40 -0
- package/plugins/sp/commands/dev-changelog.md +28 -0
- package/plugins/sp/commands/dev-daily.md +29 -0
- package/plugins/sp/commands/dev-debug.md +29 -0
- package/plugins/sp/commands/dev-dogfood.md +33 -0
- package/plugins/sp/commands/dev-featurechange.md +130 -0
- package/plugins/sp/commands/dev-find-conflict.md +51 -0
- package/plugins/sp/commands/dev-find-issue.md +76 -0
- package/plugins/sp/commands/dev-find-next.md +60 -0
- package/plugins/sp/commands/dev-fixall.md +33 -0
- package/plugins/sp/commands/dev-gitmsg.md +28 -0
- package/plugins/sp/commands/dev-gtd.md +97 -0
- package/plugins/sp/commands/dev-handover.md +26 -0
- package/plugins/sp/commands/dev-idea.md +50 -0
- package/plugins/sp/commands/dev-next.md +31 -0
- package/plugins/sp/commands/dev-parallel.md +30 -0
- package/plugins/sp/commands/dev-plan.md +46 -0
- package/plugins/sp/commands/dev-refine.md +48 -0
- package/plugins/sp/commands/dev-refineall.md +65 -0
- package/plugins/sp/commands/dev-refresh.md +32 -0
- package/plugins/sp/commands/dev-reverse.md +32 -0
- package/plugins/sp/commands/dev-review.md +31 -0
- package/plugins/sp/commands/dev-run.md +63 -0
- package/plugins/sp/commands/dev-runall.md +83 -0
- package/plugins/sp/commands/dev-simplify.md +39 -0
- package/plugins/sp/commands/dev-unit.md +29 -0
- package/plugins/sp/commands/dev-verify.md +48 -0
- package/plugins/sp/commands/dev-verifyall.md +72 -0
- package/plugins/sp/commands/dev-wrap.md +48 -0
- package/plugins/sp/commands/dev-wrapall.md +51 -0
- package/plugins/sp/commands/rule-add.md +18 -0
- package/plugins/sp/commands/rule-refine.md +18 -0
- package/plugins/sp/commands/rule-scan.md +18 -0
- package/plugins/sp/commands/spur-init.md +22 -0
- package/plugins/sp/commands/workflow-add.md +18 -0
- package/plugins/sp/commands/workflow-refine.md +18 -0
- package/plugins/sp/hooks/agent-hint.ts +60 -0
- package/plugins/sp/hooks/careful-guard.ts +147 -0
- package/plugins/sp/hooks/context-post-tool.ts +325 -0
- package/plugins/sp/hooks/context-session-start.ts +182 -0
- package/plugins/sp/hooks/context-session-stop.ts +95 -0
- package/plugins/sp/hooks/hooks.json +51 -0
- package/plugins/sp/hooks/pi/guard-extension.ts +341 -0
- package/plugins/sp/hooks/task-write-guard.ts +84 -0
- package/plugins/sp/plugin.json +8 -0
- package/plugins/sp/scripts/batch-preflight.ts +204 -0
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +606 -0
- package/plugins/sp/scripts/daily-summary/logger.ts +28 -0
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +363 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +168 -0
- package/plugins/sp/scripts/feature-sync-bounded.ts +451 -0
- package/plugins/sp/scripts/stage-registry-adapter.ts +1341 -0
- package/plugins/sp/scripts/task-size-precheck.ts +202 -0
- package/plugins/sp/scripts/validate-commands.ts +651 -0
- package/plugins/sp/scripts/validate-flag-contracts.ts +875 -0
- package/plugins/sp/skills/brainstorm/SKILL.md +361 -0
- package/plugins/sp/skills/brainstorm/agents/openai.yaml +14 -0
- package/plugins/sp/skills/brainstorm/examples/ideation-example.md +209 -0
- package/plugins/sp/skills/brainstorm/metadata.openclaw +7 -0
- package/plugins/sp/skills/brainstorm/references/grilling-interview.md +68 -0
- package/plugins/sp/skills/brainstorm/references/workflows.md +255 -0
- package/plugins/sp/skills/branch-workflow/SKILL.md +109 -0
- package/plugins/sp/skills/branch-workflow/references/branch-lifecycle.md +69 -0
- package/plugins/sp/skills/branch-workflow/references/worktree-patterns.md +100 -0
- package/plugins/sp/skills/code-implementation/SKILL.md +203 -0
- package/plugins/sp/skills/code-implementation/references/debugging.md +64 -0
- package/plugins/sp/skills/code-implementation/references/implementation-patterns.md +113 -0
- package/plugins/sp/skills/code-improvement/SKILL.md +231 -0
- package/plugins/sp/skills/code-improvement/references/deepening-signals.md +205 -0
- package/plugins/sp/skills/code-review/SKILL.md +112 -0
- package/plugins/sp/skills/code-review/references/receiving-code-review.md +70 -0
- package/plugins/sp/skills/code-review/references/review-lenses.md +117 -0
- package/plugins/sp/skills/code-review/references/self-review-checklist.md +53 -0
- package/plugins/sp/skills/code-review/references/verification-before-completion.md +68 -0
- package/plugins/sp/skills/code-simplification/SKILL.md +225 -0
- package/plugins/sp/skills/code-testing/SKILL.md +108 -0
- package/plugins/sp/skills/code-testing/references/stacks/bun-ts.md +165 -0
- package/plugins/sp/skills/code-testing/references/stacks/go.md +88 -0
- package/plugins/sp/skills/code-testing/references/stacks/python.md +117 -0
- package/plugins/sp/skills/code-testing/references/test-loop-breaker.md +37 -0
- package/plugins/sp/skills/code-testing/references/test-output-discipline.md +52 -0
- package/plugins/sp/skills/code-testing/references/unit-testing.md +212 -0
- package/plugins/sp/skills/code-verification/SKILL.md +535 -0
- package/plugins/sp/skills/code-verification/references/code-improvement.md +39 -0
- package/plugins/sp/skills/code-verification/references/secu-review.md +94 -0
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +141 -0
- package/plugins/sp/skills/conflict-finding/SKILL.md +254 -0
- package/plugins/sp/skills/conflict-finding/references/authority-resolution.md +258 -0
- package/plugins/sp/skills/conflict-finding/references/comparison-protocol.md +277 -0
- package/plugins/sp/skills/conflict-finding/references/finding-contract.md +346 -0
- package/plugins/sp/skills/conflict-finding/references/remediation-routing.md +276 -0
- package/plugins/sp/skills/daily-summary/SKILL.md +171 -0
- package/plugins/sp/skills/daily-summary/agents/openai.yaml +13 -0
- package/plugins/sp/skills/doc-evolve/SKILL.md +175 -0
- package/plugins/sp/skills/doc-evolve/references/operations.md +93 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +608 -0
- package/plugins/sp/skills/dogfood-testing/references/monitor-ledger.md +211 -0
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +351 -0
- package/plugins/sp/skills/doubt-driven-development/SKILL.md +136 -0
- package/plugins/sp/skills/functional-review/SKILL.md +364 -0
- package/plugins/sp/skills/functional-review/references/verdict-schema.md +133 -0
- package/plugins/sp/skills/indexed-context/SKILL.md +164 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +442 -0
- package/plugins/sp/skills/issue-finding/agents/openai.yaml +15 -0
- package/plugins/sp/skills/issue-finding/examples/expected-findings.json +27 -0
- package/plugins/sp/skills/issue-finding/examples/session-test-loop.jsonl +23 -0
- package/plugins/sp/skills/issue-finding/references/session-formats.md +151 -0
- package/plugins/sp/skills/next-feature/SKILL.md +125 -0
- package/plugins/sp/skills/next-feature/references/handoff-routing.md +92 -0
- package/plugins/sp/skills/next-feature/references/proposal-contract.md +49 -0
- package/plugins/sp/skills/next-feature/references/ranking-rubric.md +52 -0
- package/plugins/sp/skills/next-feature/references/signal-derivation.md +67 -0
- package/plugins/sp/skills/next-router/SKILL.md +181 -0
- package/plugins/sp/skills/next-router/references/messages.md +90 -0
- package/plugins/sp/skills/next-router/references/routing-table.md +216 -0
- package/plugins/sp/skills/parallel-execution/SKILL.md +148 -0
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +109 -0
- package/plugins/sp/skills/parallel-execution/references/fan-out-patterns.md +101 -0
- package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +94 -0
- package/plugins/sp/skills/reverse-engineering/SKILL.md +375 -0
- package/plugins/sp/skills/reverse-engineering/agents/openai.yaml +18 -0
- package/plugins/sp/skills/source-driven-development/SKILL.md +124 -0
- package/plugins/sp/skills/spec-decomposition/SKILL.md +117 -0
- package/plugins/sp/skills/spec-decomposition/references/decomposition.md +539 -0
- package/plugins/sp/skills/spur-cli/SKILL.md +133 -0
- package/plugins/sp/skills/spur-cli/references/agent.md +179 -0
- package/plugins/sp/skills/spur-cli/references/features/acceptance-criteria.md +82 -0
- package/plugins/sp/skills/spur-cli/references/features/hierarchy-mece.md +177 -0
- package/plugins/sp/skills/spur-cli/references/features/roadmap-priority.md +84 -0
- package/plugins/sp/skills/spur-cli/references/features/verbs.md +122 -0
- package/plugins/sp/skills/spur-cli/references/features.md +234 -0
- package/plugins/sp/skills/spur-cli/references/init.md +119 -0
- package/plugins/sp/skills/spur-cli/references/message.md +98 -0
- package/plugins/sp/skills/spur-cli/references/rules/authoring-rules.md +212 -0
- package/plugins/sp/skills/spur-cli/references/rules/fine-tuning.md +148 -0
- package/plugins/sp/skills/spur-cli/references/rules/operations.md +228 -0
- package/plugins/sp/skills/spur-cli/references/rules/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/rules.md +209 -0
- package/plugins/sp/skills/spur-cli/references/serve.md +58 -0
- package/plugins/sp/skills/spur-cli/references/tasks/l3-guard-cheatsheet.md +98 -0
- package/plugins/sp/skills/spur-cli/references/tasks/section-editing.md +95 -0
- package/plugins/sp/skills/spur-cli/references/tasks/verbs.md +361 -0
- package/plugins/sp/skills/spur-cli/references/tasks.md +280 -0
- package/plugins/sp/skills/spur-cli/references/team.md +133 -0
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +226 -0
- package/plugins/sp/skills/spur-cli/references/workflows/operations.md +211 -0
- package/plugins/sp/skills/spur-cli/references/workflows/validation-and-extension.md +129 -0
- package/plugins/sp/skills/spur-cli/references/workflows.md +355 -0
- package/plugins/sp/skills/spur-dev/SKILL.md +224 -0
- package/plugins/sp/skills/spur-dev/references/ac-style-guide.md +196 -0
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +680 -0
- package/plugins/sp/skills/spur-dev/references/decision-brief.md +80 -0
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +546 -0
- package/plugins/sp/skills/spur-dev/references/done-housekeeping.md +164 -0
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +790 -0
- package/plugins/sp/skills/spur-dev/references/execution-workflow.md +352 -0
- package/plugins/sp/skills/spur-dev/references/feature-link-helper.md +191 -0
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +417 -0
- package/plugins/sp/skills/spur-dev/references/gate-checklists.md +171 -0
- package/plugins/sp/skills/spur-dev/references/glossary.md +95 -0
- package/plugins/sp/skills/spur-dev/references/idea-evaluation.md +80 -0
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +120 -0
- package/plugins/sp/skills/spur-dev/references/planning-workflow.md +302 -0
- package/plugins/sp/skills/spur-dev/references/product-planning.md +206 -0
- package/plugins/sp/skills/spur-dev/references/section-batching.md +24 -0
- package/plugins/sp/skills/sys-architecture/SKILL.md +155 -0
- package/plugins/sp/skills/sys-architecture/references/decision-method.md +137 -0
- package/plugins/sp/skills/sys-architecture/references/upkeep-survey.md +75 -0
- package/plugins/sp/skills/sys-debugging/SKILL.md +228 -0
- package/plugins/sp/skills/sys-debugging/references/debugging-protocol.md +62 -0
- package/plugins/sp/skills/test-driven-development/SKILL.md +248 -0
- package/plugins/sp/skills/wayfinder/SKILL.md +292 -0
- package/spur.js +6035 -4963
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run a task — full pipeline (precheck→implement→test→review→approve→verify→record→done) or single-step (implement)
|
|
3
|
+
argument-hint: "<wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Run
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-dev** and **sp:code-implementation** skills.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `<wbs>` | Task WBS to run. | required |
|
|
16
|
+
| `--mode` `<full\|implement>` | Full pipeline or single implement step. | full |
|
|
17
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the model-bearing stages. In an interactive session, omit/`inline` keeps the controller in the host session (non-subprocess); eligible full-mode `agent.run` stages may dispatch once to a native subagent, with host fallback (task 0508). `auto` or a name keeps subprocess dispatch. | inline |
|
|
18
|
+
| `--auto` | Skip objective HITL confirmations. | off |
|
|
19
|
+
| `--next` | Chain-to-completion via the next-router. | off |
|
|
20
|
+
| `--wrap` | Run the wrap hop after the main step. The `--agent` selector is preserved into the `/sp:dev-wrap <wbs>` handoff when supplied; omission remains omission. The wrap hop is workflow-backed and reports its trigger-3 subprocess override. | off |
|
|
21
|
+
| `--continue` | Resume an interrupted task from its checkpoint. | off |
|
|
22
|
+
|
|
23
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
/sp:dev-run <wbs> [--mode <full|implement>] [--agent <inline|auto|name>] [--auto] [--next] [--wrap] [--continue]
|
|
28
|
+
|
|
29
|
+
## Implementation
|
|
30
|
+
|
|
31
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
32
|
+
- Full pipeline (default `--mode full`): interactive omit/`--agent inline` uses the
|
|
33
|
+
[inline pipeline driver](../skills/spur-dev/references/inline-pipeline-driver.md) via
|
|
34
|
+
`Skill(skill="sp:spur-dev", args="run-inline $ARGUMENTS")`; `--agent auto` or a named executor
|
|
35
|
+
uses `Skill(skill="sp:spur-dev", args="run $ARGUMENTS")` and the workflow subprocess path.
|
|
36
|
+
- Implement step only (`--mode implement`): `Skill(skill="sp:code-implementation", args="$ARGUMENTS")`
|
|
37
|
+
|
|
38
|
+
**Flags:**
|
|
39
|
+
|
|
40
|
+
- `--auto` | `--agent <inline|auto|name>` — Skip objective HITL confirmations (taste/irreversible gates still pause). `--agent` names who does the model-bearing work. Interactive omit/`inline` keeps the controller and implement-only stages in this session; full mode reads `task-pipeline.yaml` as the SSOT and interprets its actions/guards through the inline driver, where eligible `agent.run` stages may dispatch once to a native subagent and otherwise run in the host (task 0508). It records `stage <id> executed inline in session <session-id>` or `stage <id> executed via subagent <agent-id> (host session <session-id>)` in the run log. `auto` or a name is merged into `vars.agent` and `vars.implementAgent` and keeps the existing subprocess workflow. Headless `spur workflow run` / `spur agent run` is unchanged. See the [execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
41
|
+
|
|
42
|
+
**Mode split (load-bearing — bug-742)**
|
|
43
|
+
|
|
44
|
+
| Mode | What runs | Must not do |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| `--mode full` (default) | Interactive omit/inline: host-session driver over `task-pipeline.yaml`; explicit/headless executor: workflow subprocess | — |
|
|
47
|
+
| `--mode implement` | Single implement competency via `sp:code-implementation` | Re-launch the full pipeline, `spur workflow run …task-pipeline…`, or `/sp:dev-run` **without** `--mode implement` |
|
|
48
|
+
|
|
49
|
+
The pipeline's `implement` step invokes this command **only** as:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
/sp:dev-run --mode implement <wbs> --auto
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
That pure slash form is intentional (ADR-043): workflow `agent.run` `input` is a command pointer, not an inline essay. Anti-recursion, scope, and Solution authorship live in this command + `sp:code-implementation`, not in YAML prose bolted onto the slash line.
|
|
56
|
+
|
|
57
|
+
**When `--mode implement` is active (including as a pipeline subprocess):** work only in the current working tree on `<wbs>`. **NEVER invoke** `spur workflow run` for the task pipeline, and **NEVER invoke** `/sp:dev-run` without an explicit `--mode implement` — this step *is* the pipeline's implement stage; re-entering full mode recurses (bug-742).
|
|
58
|
+
|
|
59
|
+
> **⚠ Redefinition (feature H8, 2026-07-31).** `--next` previously selected implement-only mode on
|
|
60
|
+
> this command. It no longer does — use `--mode implement`. The replacement already existed and is
|
|
61
|
+
> what `routing-table.md` row A5 dispatches, which is evidence the overload was accidental. This
|
|
62
|
+
> warning is marked for removal after one release (these are prompt files; leaving it is permanent
|
|
63
|
+
> noise). See ADR-039. **was: `--next` selected implement-only mode.**
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run a batch of tasks through their pipelines in dependency-correct order — resolve a set, topo-sort, run each via task-pipeline.yaml, emit a batch report
|
|
3
|
+
argument-hint: "--tasks <selector> [--feature <id>] [--mode <sequential|parallel>] [--keep-going] [--auto] [--agent <inline|auto|name>] [--json] [--wrap] [--next] [--continue] [--worktree [<name>]]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Runall
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-dev** skill.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `--tasks` `<selector>` | Task selector to run. | required |
|
|
16
|
+
| `--feature` `<id>` | Restrict to a feature. | omitted |
|
|
17
|
+
| `--mode` `<sequential\|parallel>` | Batch execution order. | sequential |
|
|
18
|
+
| `--keep-going` | Continue past per-task failures. | off |
|
|
19
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
20
|
+
| `--agent` `<inline\|auto\|name>` | Who runs each task's pipeline stages. Interactive sequential omit/`inline` uses the host-session driver — host-controlled, eligible `agent.run` stages may use a native subagent (task 0508); `auto`, a name, parallel mode, and headless invocation use subprocesses. | inline |
|
|
21
|
+
| `--json` | Emit structured JSON. | off |
|
|
22
|
+
| `--wrap` | Run the wrap hop per task. The `--agent` selector is preserved into each `/sp:dev-wrap <wbs>` handoff when supplied; omission remains omission. | off |
|
|
23
|
+
| `--next` | Chain-to-completion via the next-router. | off |
|
|
24
|
+
| `--continue` | Resume an interrupted batch. | off |
|
|
25
|
+
| `--worktree` `[<name>]` | Run the batch in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. | off |
|
|
26
|
+
|
|
27
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
/sp:dev-runall --tasks <selector> [--feature <id>] [--mode <sequential|parallel>] [--keep-going] [--auto] [--agent <inline|auto|name>] [--json] [--wrap] [--next] [--continue] [--worktree [<name>]]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Flags: `--tasks <selector>` (required — explicit WBS list, status pseudo-list, `feature:<id>`,
|
|
36
|
+
or `ready`), `--feature <id>` (sugar for `feature:<id>`; when the effective selector is
|
|
37
|
+
feature-derived, `dev-runall` runs `spur feature check <id> --strict --json` **once** before
|
|
38
|
+
resolving tasks — a non-zero strict check aborts the batch with verdict `aborted` and the
|
|
39
|
+
structured findings, before any task pipeline action, task 0510 R2), `--mode`
|
|
40
|
+
`<sequential|parallel>` (default `sequential`; `parallel` fans out a proven-independent subset —
|
|
41
|
+
see `execution-batch.md` § Parallel Execution), `--keep-going`
|
|
42
|
+
(batch failure policy — skip a failed task's in-batch dependents, continue independents; default
|
|
43
|
+
halts on first failure), `--auto`
|
|
44
|
+
(sets `profile=auto` on each per-task run, skipping the HITL approve gate), `--agent <inline|auto|name>`
|
|
45
|
+
(names who runs the pipeline's stages — interactive sequential omit/`inline` uses the host driver;
|
|
46
|
+
`auto` or a name is merged into each per-task `vars.agent` and `vars.implementAgent`; parallel mode
|
|
47
|
+
retains isolated subprocesses, ADR-047), `--json` (emit the
|
|
48
|
+
report as JSON), `--wrap` (trigger
|
|
49
|
+
`wrapup-pipeline.yaml` after the batch completes), `--next`
|
|
50
|
+
(chain each task to terminal status, then run the wrap hop **once for the batch** — see below),
|
|
51
|
+
`--worktree` `[<name>]` (run the batch in an isolated git worktree —
|
|
52
|
+
FF-merge onto the base ref on full success, retain intact on any failure/halt/non-FF; bare form
|
|
53
|
+
creates a fresh tree, `<name>` form adopts an existing worktree by name/path/branch; see
|
|
54
|
+
`execution-batch.md` § Worktree isolation).
|
|
55
|
+
|
|
56
|
+
**`--worktree` is sequential-only.** `--worktree --mode parallel` is **rejected**. This flag gives
|
|
57
|
+
the batch *one* worktree for the whole run; per-task worktrees and parallel isolation remain task
|
|
58
|
+
0142 Slice A. Run parallel batches without `--worktree`, or run them sequentially with it.
|
|
59
|
+
|
|
60
|
+
**`--worktree` corpus visibility.** While the batch runs in a worktree, corpus writes (task
|
|
61
|
+
statuses, kanban) land in the worktree copy; your main tree still shows pre-run statuses until the
|
|
62
|
+
FF-merge on success. This is expected, not a bug.
|
|
63
|
+
|
|
64
|
+
**`--next` (batch-once wrap).** `--next`
|
|
65
|
+
is chain-to-completion with propagation. On `dev-runall`, each task in the batch runs its
|
|
66
|
+
`task-pipeline.yaml` to terminal status (the pipeline already drives precheck → implement → test →
|
|
67
|
+
review → approve → verify → record → done); when the batch is complete, the wrap hop runs **once
|
|
68
|
+
for the batch** — mirroring the batch-once shippable gate `dev-verifyall` uses — rather than once
|
|
69
|
+
per task. Without `--next`, `--wrap` is wrap-without-chaining (the single batch wraps without
|
|
70
|
+
advancing the feature lifecycle). **was: `--next` deliberately omitted; the old no-`--next` rationale argued against the old per-task-transition meaning and does not carry.**
|
|
71
|
+
|
|
72
|
+
**Three orthogonal axes** (do not confuse): `--keep-going`
|
|
73
|
+
= batch failure policy (does a failure halt the batch or skip dependents?);
|
|
74
|
+
`--continue` = resume from
|
|
75
|
+
checkpoint (pick up an interrupted batch); `--next`
|
|
76
|
+
= chain each task to terminal status + batch-once wrap. See `dev-operations.md` § runall for the
|
|
77
|
+
full distinction.
|
|
78
|
+
|
|
79
|
+
## Implementation
|
|
80
|
+
|
|
81
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface). Interactive sequential omit/`inline` keeps the orchestrator in the host session through the [inline pipeline driver](../skills/spur-dev/references/inline-pipeline-driver.md); eligible `agent.run` stages may dispatch once to a native subagent with host fallback (task 0508). `--agent auto`, a name, or parallel mode retains the isolated per-task workflow boundary.
|
|
82
|
+
- Interactive sequential omit/inline: `Skill(skill="sp:spur-dev", args="runall-inline $ARGUMENTS")`.
|
|
83
|
+
- Explicit executor or parallel mode: `Skill(skill="sp:spur-dev", args="runall $ARGUMENTS")` → `sp:super-planner` agent.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Simplify code for clarity without changing behavior — reduce complexity in recent changes (or a given scope), preserving behavior exactly
|
|
3
|
+
argument-hint: "[<path-or-scope>] [--scope <recent|all|path>] [--check <cmd>] [--agent <inline|auto|name>] [--auto]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Edit", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Simplify
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:code-simplification** skill.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `[<path-or-scope>]` | Path or scope to simplify. | recent |
|
|
16
|
+
| `--scope` `<recent\|all\|path>` | Scope of the simplification pass. | recent |
|
|
17
|
+
| `--check` `<cmd>` | Validation command to iterate against. | project gate |
|
|
18
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the model-bearing simplification. | inline |
|
|
19
|
+
| `--auto` | Skip objective HITL gates (taste gates: over-engineering removal & cross-file utility extraction still require approval). | off |
|
|
20
|
+
|
|
21
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
/sp:dev-simplify [<path-or-scope>] [--scope <recent|all|path>] [--check <cmd>] [--agent <inline|auto|name>] [--auto]
|
|
26
|
+
|
|
27
|
+
## Implementation
|
|
28
|
+
|
|
29
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
30
|
+
- `Skill(skill="sp:code-simplification", args="$ARGUMENTS")`
|
|
31
|
+
- **Interaction & Confirmation Model**:
|
|
32
|
+
- **Over-Engineering Removal**: Classify abstractions as Accidental LLM Over-engineering vs Intentional Reserved Patterns. Present target, reason, pros, cons, and recommendation with rationale before removing indirection.
|
|
33
|
+
- **Common Pattern Consolidation**: Follow the 5-stage lifecycle:
|
|
34
|
+
1. Identify repeating operations across scope.
|
|
35
|
+
2. Confirm proposed shared helper/utility signature and module location with operator.
|
|
36
|
+
3. Implement shared helper in isolation with unit tests.
|
|
37
|
+
4. Refactor call-sites incrementally.
|
|
38
|
+
5. Run regression verification suite (`--check <cmd>`).
|
|
39
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate or extend tests until the unit target is met
|
|
3
|
+
argument-hint: "<target> [--coverage <n>] [--agent <inline|auto|name>] [--auto]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Edit", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Unit
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:code-testing** skill.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `<target>` | File / module / path to generate tests for. | required |
|
|
16
|
+
| `--coverage` `<n>` | Coverage percentage target. | configured |
|
|
17
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the model-bearing test work. | inline |
|
|
18
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
19
|
+
|
|
20
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
/sp:dev-unit <target> [--coverage <n>] [--agent <inline|auto|name>] [--auto]
|
|
25
|
+
|
|
26
|
+
## Implementation
|
|
27
|
+
|
|
28
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
29
|
+
- `Skill(skill="sp:code-testing", args="$ARGUMENTS")`
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify a task against its requirements and Acceptance Criteria — traceability check producing a PASS/PARTIAL/FAIL verdict with evidence
|
|
3
|
+
argument-hint: "<wbs> [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--skip-shippable]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Verify
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:code-verification** skill.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `<wbs>` | Task WBS to verify. | required |
|
|
16
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the model-bearing verification. | inline |
|
|
17
|
+
| `--fix` `<none\|blockers-first\|all>` | Auto-fix policy on findings. | none |
|
|
18
|
+
| `--focus` `<lens>` | Verification lens. | omitted |
|
|
19
|
+
| `--bdd` | Run BDD scenarios. | off |
|
|
20
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
21
|
+
| `--force` | Re-run even if already verified. | off |
|
|
22
|
+
| `--next` | Hand off to the next-router on success. | off |
|
|
23
|
+
| `--skip-shippable` | Compatibility alias for --skip-shipable; skip the shippable gate. | off |
|
|
24
|
+
|
|
25
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/sp:dev-verify <wbs> [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--skip-shippable]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Shippable readiness** (feature-level): when `--fix all` and the task has a `feature_id`, the
|
|
34
|
+
skill runs `spur feature check <id>` after the per-task verdict and emits `Shippable: PASS|FAIL|N/A`.
|
|
35
|
+
Default **on** with `--fix all`. Opt out only with **`--skip-shippable`** (alias `--skip-shipable`).
|
|
36
|
+
See `sp:code-verification` § Shippable readiness gate.
|
|
37
|
+
|
|
38
|
+
## Implementation
|
|
39
|
+
|
|
40
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
41
|
+
- `Skill(skill="sp:code-verification", args="verify $ARGUMENTS")`
|
|
42
|
+
|
|
43
|
+
**Flags:**
|
|
44
|
+
|
|
45
|
+
`--next`: chain-to-completion with
|
|
46
|
+
propagation — on a PASS verdict, hand the task back to `sp:next-router` to advance and re-invoke
|
|
47
|
+
until done or a gate stops it. The `testing → done` transition is the chain's first hop. A PARTIAL
|
|
48
|
+
or FAIL verdict halts the chain (task stays `testing` as review-pending). **was: `--next` chain-ish (undefined formally).**
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify a batch of tasks against their requirements and Acceptance Criteria — batch traceability check producing per-task verdicts and a summary report
|
|
3
|
+
argument-hint: "--tasks <selector> [--feature <id>] [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--json] [--skip-shippable] [--worktree [<name>]]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Verifyall
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-dev** and **sp:code-verification** skills.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `--tasks` `<selector>` | Task selector to verify. | required |
|
|
16
|
+
| `--feature` `<id>` | Restrict to a feature. | omitted |
|
|
17
|
+
| `--agent` `<inline\|auto\|name>` | Who runs each verification. | inline |
|
|
18
|
+
| `--fix` `<none\|blockers-first\|all>` | Auto-fix policy on findings. | none |
|
|
19
|
+
| `--focus` `<lens>` | Verification lens. | omitted |
|
|
20
|
+
| `--bdd` | Run BDD scenarios. | off |
|
|
21
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
22
|
+
| `--force` | Re-run even if already verified. | off |
|
|
23
|
+
| `--next` | Hand off to the next-router on success. | off |
|
|
24
|
+
| `--json` | Emit structured JSON. | off |
|
|
25
|
+
| `--skip-shippable` | Compatibility alias for --skip-shipable; skip the shippable gate. | off |
|
|
26
|
+
| `--worktree` `[<name>]` | Run the batch in an isolated git worktree; FF-merge on success, retain on failure. Bare `--worktree` creates a fresh tree; `--worktree <name>` adopts an existing worktree by name/path/branch. | 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-verifyall --tasks <selector> [--feature <id>] [--agent <inline|auto|name>] [--fix <none|blockers-first|all>] [--focus <lens>] [--bdd] [--auto] [--force] [--next] [--json] [--skip-shippable] [--worktree [<name>]]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Flags: `--tasks <selector>` (required unless `--feature`), `--feature <id>` (sugar for
|
|
37
|
+
`feature:<id>`), shared verify flags (`--agent`, `--fix`,
|
|
38
|
+
`--focus`, `--bdd`,
|
|
39
|
+
`--auto`, `--force`),
|
|
40
|
+
`--next` (per-task lifecycle chaining — see below),
|
|
41
|
+
`--json`, `--skip-shippable`, `--worktree` `[<name>]` (run the batch in an isolated git worktree — FF-merge
|
|
42
|
+
onto the base ref on full success, retain intact on any failure/halt/non-FF; bare form creates a
|
|
43
|
+
fresh tree, `<name>` form adopts an existing worktree by name/path/branch; see
|
|
44
|
+
`execution-batch.md` § Worktree isolation).
|
|
45
|
+
**`--worktree` corpus visibility.** While the batch runs in a worktree, corpus writes (task
|
|
46
|
+
statuses, verdicts) land in the worktree copy; your main tree still shows pre-run statuses until
|
|
47
|
+
the FF-merge on success. Expected, not a bug.
|
|
48
|
+
|
|
49
|
+
**`--next` (per-task lifecycle chaining):** `--next`
|
|
50
|
+
is chain-to-completion with propagation. For each task whose verdict is **PASS**, the chain's first
|
|
51
|
+
hop transitions `testing → done` through the FSM with the `--strict-core` Review L3 guard honored;
|
|
52
|
+
a task whose verdict is **PARTIAL** or **FAIL** does **not** transition (it stays `testing` as
|
|
53
|
+
review-pending) — that task's chain halts, reporting the verdict. One task's non-PASS never blocks
|
|
54
|
+
another task's transition — each task's verdict is its own, and each task's chain is independent.
|
|
55
|
+
Transitions run **before** the shippable gate (R3), so `spur feature check` observes the final
|
|
56
|
+
statuses. Do not confuse with `--keep-going`
|
|
57
|
+
(batch failure policy, dev-runall) or `--continue`
|
|
58
|
+
(resume from checkpoint) — see the glossary. **was: `--next` chain-ish (per-task transition, undefined formally).**
|
|
59
|
+
|
|
60
|
+
**Shippable readiness** (feature-level): when `--fix all` and a feature context exists
|
|
61
|
+
(`--feature` or a unique shared `feature_id` across the set), after all per-task verifies the
|
|
62
|
+
orchestrator runs **one** `spur feature check <id>` and emits `Shippable: PASS|FAIL|N/A`.
|
|
63
|
+
A FAIL means the batch is **not clean** (rollup at least PARTIAL) even if every task AC PASSed.
|
|
64
|
+
Default **on** with `--fix all`. Opt out only with **`--skip-shippable`** (alias `--skip-shipable`).
|
|
65
|
+
Without `--fix all`, shippable is not evaluated (optional note: use `--fix all` for ship gate).
|
|
66
|
+
|
|
67
|
+
## Implementation
|
|
68
|
+
|
|
69
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
70
|
+
- Batch orchestration: `Skill(skill="sp:spur-dev", args="verifyall $ARGUMENTS")`
|
|
71
|
+
- Per-task verification (inner): `Skill(skill="sp:code-verification", args="verify <wbs> $SHARED_FLAGS")`
|
|
72
|
+
- Shippable gate: once after the batch (same skill § Shippable readiness gate)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Wrap up a single completed task — learnings, metrics, doc-sync, optional feature transition and branch cleanup
|
|
3
|
+
argument-hint: "<wbs> [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Wrap
|
|
8
|
+
|
|
9
|
+
Wraps the **wrapup-pipeline.yaml** workflow.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `<wbs>` | Task WBS to wrap. | required |
|
|
16
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the wrap's model-bearing steps. Wrap is workflow-backed: omit/`inline` resolves to `agent.default` (objective trigger 3 — durable auditable run record required); `auto` tier-resolves an executor; a name pins that executor into `vars.agent`. | agent.default |
|
|
17
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
18
|
+
| `--merge` | Merge the wrap branch. | off |
|
|
19
|
+
| `--dry-run` | Render the wrap without writing. | off |
|
|
20
|
+
|
|
21
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
/sp:dev-wrap <wbs> [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]
|
|
26
|
+
|
|
27
|
+
## Implementation
|
|
28
|
+
|
|
29
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
30
|
+
- Wrap stays **workflow-backed** — `spur workflow run .spur/workflows/wrapup-pipeline.yaml` is the only implementation; there is no inline wrap driver.
|
|
31
|
+
- Resolve the executor **before** launching the workflow:
|
|
32
|
+
- `--agent <name>` → pass the name unchanged into `vars.agent`.
|
|
33
|
+
- `--agent auto` → tier-resolve a concrete executor first, then merge it into `vars.agent`.
|
|
34
|
+
- omit/`--agent inline` → resolve to `agent.default` (the documented headless resolution of `inline`).
|
|
35
|
+
- Emit a pre-dispatch notice naming the override before `spur workflow run`, exactly:
|
|
36
|
+
`execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: inline|auto|<name>`, `executor: agent.default|<resolved-name>`.
|
|
37
|
+
- The wrap workflow still creates its durable run record (task_run_links / trace) — the notice reports the override, it does not change the workflow.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
AGENT=… # resolved above: agent.default for inline/omitted, tier-resolved for auto, unchanged for <name>
|
|
41
|
+
echo "execution surface: subprocess; reason: trigger 3 — durable auditable run record required; requested agent: <inline|auto|name>; executor: $AGENT"
|
|
42
|
+
VARS=$(jq -nc --arg tasks "[\"$WBS\"]" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
|
|
43
|
+
'{tasks:$tasks, agent:$agent, profile:$profile, merge:$merge}')
|
|
44
|
+
spur workflow run .spur/workflows/wrapup-pipeline.yaml --vars "$VARS" [--dry-run]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The executor resolution is described in the bullets above; the snippet's `AGENT` variable carries
|
|
48
|
+
the resolved name (`agent.default` for omit/`inline`).
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Wrap up a batch of completed tasks — learnings, metrics, doc-sync, feature transition, optional branch cleanup
|
|
3
|
+
argument-hint: "[--since <iso-date>] [--feature <id>] [--status <s>] [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "AskUserQuestion"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dev Wrapall
|
|
8
|
+
|
|
9
|
+
Wraps the **wrapup-pipeline.yaml** workflow.
|
|
10
|
+
|
|
11
|
+
## Argument Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Description | Default |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `--since` `<iso-date>` | Wrap tasks completed since a date. | configured |
|
|
16
|
+
| `--feature` `<id>` | Wrap tasks in a feature. | omitted |
|
|
17
|
+
| `--status` `<s>` | Only wrap tasks in a status. | done |
|
|
18
|
+
| `--agent` `<inline\|auto\|name>` | Who runs the wrap's model-bearing steps. Wrap is workflow-backed: omit/`inline` resolves to `agent.default` (objective trigger 3 — durable auditable run record required); `auto` tier-resolves an executor; a name pins that executor into `vars.agent`. | agent.default |
|
|
19
|
+
| `--auto` | Skip objective HITL gates. | off |
|
|
20
|
+
| `--merge` | Merge wrap branches. | off |
|
|
21
|
+
| `--dry-run` | Render wraps without writing. | off |
|
|
22
|
+
|
|
23
|
+
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
/sp:dev-wrapall [--since <iso-date>] [--feature <id>] [--status <s>] [--agent <inline|auto|name>] [--auto] [--merge] [--dry-run]
|
|
28
|
+
|
|
29
|
+
## Implementation
|
|
30
|
+
|
|
31
|
+
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
32
|
+
- Wrap stays **workflow-backed** — `spur workflow run .spur/workflows/wrapup-pipeline.yaml` is the only implementation; there is no inline wrap driver.
|
|
33
|
+
- Resolve the executor **before** launching the workflow:
|
|
34
|
+
- `--agent <name>` → pass the name unchanged into `vars.agent`.
|
|
35
|
+
- `--agent auto` → tier-resolve a concrete executor first, then merge it into `vars.agent`.
|
|
36
|
+
- omit/`--agent inline` → resolve to `agent.default` (the documented headless resolution of `inline`).
|
|
37
|
+
- Emit a pre-dispatch notice naming the override before `spur workflow run`, exactly:
|
|
38
|
+
`execution surface: subprocess`, `reason: trigger 3 — durable auditable run record required`, `requested agent: inline|auto|<name>`, `executor: agent.default|<resolved-name>`.
|
|
39
|
+
- The wrap workflow still creates its durable run record — the notice reports the override, it does not change the workflow.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
AGENT=… # resolved above: agent.default for inline/omitted, tier-resolved for auto, unchanged for <name>
|
|
43
|
+
echo "execution surface: subprocess; reason: trigger 3 — durable auditable run record required; requested agent: <inline|auto|name>; executor: $AGENT"
|
|
44
|
+
VARS=$(jq -nc --arg tasks "$TASKS" --arg feature "$FEATURE" --arg agent "$AGENT" --arg profile "$PROFILE" --arg merge "$MERGE" \
|
|
45
|
+
'{tasks:$tasks, feature:$feature, agent:$agent, profile:$profile, merge:$merge}')
|
|
46
|
+
spur workflow run .spur/workflows/wrapup-pipeline.yaml --vars "$VARS" [--dry-run]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The executor resolution is described in the bullets above; the snippet's `AGENT` variable carries
|
|
50
|
+
the resolved name (`agent.default` for omit/`inline`).
|
|
51
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Author a validated, smoke-tested constraint rule
|
|
3
|
+
argument-hint: "\"<description>\" [--file <path>] [--preset <target>]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rule Add
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-cli** skill.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:rule-add "<description>" [--file <path>] [--preset <target>]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
- `Skill(skill="sp:spur-cli", args="rule add $ARGUMENTS")`
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Refine a constraint rule or preset, then re-verify it
|
|
3
|
+
argument-hint: "<rule-file-or-preset> [--intent \"<goal>\"] [--severity <sev>] [--scope <glob>] [--exempt <path>] [--disable <id>] [--override <id>] [--dry-run]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Edit", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rule Refine
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-cli** skill.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:rule-refine <rule-file-or-preset> [--intent "<goal>"] [--severity <sev>] [--scope <glob>] [--exempt <path>] [--disable <id>] [--override <id>] [--dry-run]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
- `Skill(skill="sp:spur-cli", args="rule refine $ARGUMENTS")`
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Discover recurring anti-patterns worth codifying as rules
|
|
3
|
+
argument-hint: "[<path-or-glob>]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Grep", "Glob", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rule Scan
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-cli** skill.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:rule-scan [<path-or-glob>]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
- `Skill(skill="sp:spur-cli", args="rule scan $ARGUMENTS")`
|
|
18
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Initialize a new Spur project — scaffold config + docs, then customize for this project's stack and scope
|
|
3
|
+
argument-hint: "[--name <name>] [--minimal] [--force]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Spur Init
|
|
8
|
+
|
|
9
|
+
Wraps **spur init** (deterministic scaffold) + **sp:doc-evolve** (project customization).
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:spur-init [--name <name>] [--minimal] [--force]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
spur init --json $ARGUMENTS
|
|
19
|
+
```
|
|
20
|
+
- Parse the JSON envelope once and retain it as `scaffoldResult`; summarize its created/skipped files in one block.
|
|
21
|
+
- Customize (Phase 2): `Skill(skill="sp:doc-evolve", args="customize --project <scaffoldResult.project>")`.
|
|
22
|
+
Reuse the retained project value; do not rerun init or replay its create/exists transcript.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Author a validated, dry-run-verified workflow in the right execution mode
|
|
3
|
+
argument-hint: "\"<description>\" [--kind <state-machine|transition-flow>] [--file <path>]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Write", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Workflow Add
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-cli** skill.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:workflow-add "<description>" [--kind <state-machine|transition-flow>] [--file <path>]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
- `Skill(skill="sp:spur-cli", args="workflow add $ARGUMENTS")`
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Refine an existing workflow, then re-validate and re-dry-run it
|
|
3
|
+
argument-hint: "<workflow-file> [--intent \"<goal>\"] [--dry-run]"
|
|
4
|
+
allowed-tools: ["Bash", "Read", "Edit", "Skill"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Workflow Refine
|
|
8
|
+
|
|
9
|
+
Wraps the **sp:spur-cli** skill.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
/sp:workflow-refine <workflow-file> [--intent "<goal>"] [--dry-run]
|
|
14
|
+
|
|
15
|
+
## Implementation
|
|
16
|
+
|
|
17
|
+
- `Skill(skill="sp:spur-cli", args="workflow refine $ARGUMENTS")`
|
|
18
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared host-agent identification helpers — the **only** host-agent detection path
|
|
3
|
+
* in the sp plugin hooks.
|
|
4
|
+
*
|
|
5
|
+
* Why this file exists (task 0480 R4): `resolveAgentHint()` previously existed in two
|
|
6
|
+
* places — `context-session-start.ts` (4-candidate chain, `undefined` fallback) and
|
|
7
|
+
* `pi/guard-extension.ts` (3-candidate chain missing `CLAUDE_CODE_ENTRYPOINT` and
|
|
8
|
+
* `CLAUDE_MODEL`, `'pi'` fallback). The divergence let the two layers reach opposite
|
|
9
|
+
* conclusions about whether the calling agent is identifiable. Consolidating here
|
|
10
|
+
* guarantees both hooks use the same candidate list and cannot silently diverge again.
|
|
11
|
+
*
|
|
12
|
+
* **Do not duplicate this candidate chain elsewhere.** New host-agent signals are
|
|
13
|
+
* added to the arrays below, not to per-hook copies.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Best-effort agent name from env (never required).
|
|
18
|
+
*
|
|
19
|
+
* Candidate chain (checked in order, first non-empty string wins):
|
|
20
|
+
* 1. `SPUR_AGENT` — explicit override
|
|
21
|
+
* 2. `CLAUDE_CODE_ENTRYPOINT` — Claude Code sets this to its entrypoint path
|
|
22
|
+
* 3. `TERM_PROGRAM` — terminal identifier (e.g. `claude`, `ghostty`)
|
|
23
|
+
* 4. `SPUR_DEFAULT_AGENT` — configured default agent
|
|
24
|
+
*
|
|
25
|
+
* @param env - environment record (defaults to `process.env`)
|
|
26
|
+
* @param fallback - value returned when no candidate matches (defaults to `undefined`)
|
|
27
|
+
*/
|
|
28
|
+
export function resolveAgentHint(
|
|
29
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
30
|
+
fallback: string | undefined = undefined,
|
|
31
|
+
): string | undefined {
|
|
32
|
+
const candidates = [env.SPUR_AGENT, env.CLAUDE_CODE_ENTRYPOINT, env.TERM_PROGRAM, env.SPUR_DEFAULT_AGENT];
|
|
33
|
+
for (const c of candidates) {
|
|
34
|
+
if (typeof c === 'string' && c.trim()) return c.trim();
|
|
35
|
+
}
|
|
36
|
+
return fallback;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Best-effort model id from env (never required).
|
|
41
|
+
*
|
|
42
|
+
* Candidate chain (checked in order, first non-empty string wins):
|
|
43
|
+
* 1. `SPUR_MODEL` — explicit override
|
|
44
|
+
* 2. `ANTHROPIC_MODEL` — Anthropic API model
|
|
45
|
+
* 3. `OPENAI_MODEL` — OpenAI API model
|
|
46
|
+
* 4. `CLAUDE_MODEL` — Claude Code model setting
|
|
47
|
+
*
|
|
48
|
+
* @param env - environment record (defaults to `process.env`)
|
|
49
|
+
* @param fallback - value returned when no candidate matches (defaults to `undefined`)
|
|
50
|
+
*/
|
|
51
|
+
export function resolveModelHint(
|
|
52
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
53
|
+
fallback: string | undefined = undefined,
|
|
54
|
+
): string | undefined {
|
|
55
|
+
const candidates = [env.SPUR_MODEL, env.ANTHROPIC_MODEL, env.OPENAI_MODEL, env.CLAUDE_MODEL];
|
|
56
|
+
for (const c of candidates) {
|
|
57
|
+
if (typeof c === 'string' && c.trim()) return c.trim();
|
|
58
|
+
}
|
|
59
|
+
return fallback;
|
|
60
|
+
}
|