@gobing-ai/spur 0.4.9 → 0.4.11
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/rules/README.md +1 -1
- package/config/rules/boundary/env-var-hygiene.yaml +0 -1
- package/config/rules/boundary/sp-script-placement.yaml +3 -3
- package/config/rules/docs/sourced-api-claims.yaml +23 -96
- package/config/workflows/feature-verification.yaml +1 -9
- package/config/workflows/pr-review.yaml +72 -224
- package/config/workflows/task-pipeline.yaml +2 -2
- package/package.json +1 -1
- package/plugins/sp/agents/expert-spur.md +0 -1
- package/plugins/sp/commands/dev-changelog.md +1 -1
- package/plugins/sp/commands/dev-pr-review.md +27 -17
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/brainstorm/SKILL.md +12 -11
- package/plugins/sp/skills/brainstorm/agents/openai.yaml +1 -1
- package/plugins/sp/skills/brainstorm/examples/ideation-example.md +0 -4
- package/plugins/sp/skills/brainstorm/metadata.openclaw +1 -1
- package/plugins/sp/skills/brainstorm/references/workflows.md +4 -14
- package/plugins/sp/skills/code-verification/references/secu-review.md +7 -4
- package/plugins/sp/skills/history-anatomy/references/operations.md +3 -4
- package/plugins/sp/skills/history-anatomy/references/report-contract.md +2 -3
- package/plugins/sp/skills/issue-finding/SKILL.md +1 -1
- package/plugins/sp/skills/parallel-execution/SKILL.md +1 -1
- package/plugins/sp/skills/parallel-execution/references/result-synthesis.md +9 -10
- package/plugins/sp/skills/pr-reviewing/SKILL.md +157 -210
- package/plugins/sp/skills/reverse-engineering/SKILL.md +4 -6
- package/plugins/sp/skills/session-review/SKILL.md +10 -26
- package/plugins/sp/skills/source-driven-development/SKILL.md +35 -31
- package/plugins/sp/skills/spur-cli/SKILL.md +1 -1
- package/plugins/sp/skills/spur-cli/references/agent.md +5 -2
- package/plugins/sp/skills/spur-cli/references/builder.md +86 -13
- package/plugins/sp/skills/spur-cli/references/features.md +1 -1
- package/plugins/sp/skills/spur-cli/references/workflows/authoring-workflows.md +1 -1
- package/plugins/sp/skills/spur-dev/references/dev-operations.md +5 -6
- package/plugins/sp/skills/spur-dev/references/execution-worktree-landing.md +1 -1
- package/plugins/sp/skills/spur-dev/references/flag-glossary.md +3 -2
- package/spur.js +1280 -417
- package/web/_astro/{BoardApp.CaNvQBD_.js → BoardApp.B5rTVNd_.js} +1 -1
- package/web/_astro/{BoardApp.C5jnkkKP.js → BoardApp.BMprmPRc.js} +141 -141
- package/web/_astro/{TaskDetail.DGKndhI8.js → TaskDetail.Ddsur8qd.js} +1 -1
- package/web/_astro/{arc.DHrwdg3G.js → arc.DLqVVBxP.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.pvKpK1s5.js → architectureDiagram-3BPJPVTR.C-Pk3uAi.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BQmRcZsS.js → blockDiagram-GPEHLZMM.BRO1i_Nm.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.CCLjHeH1.js → c4Diagram-AAUBKEIU.BU_cWu6e.js} +1 -1
- package/web/_astro/channel.Bs3Illhy.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.DL6Yuoma.js → chunk-2J33WTMH.D2VXiQ2t.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.CzlyEI7l.js → chunk-4BX2VUAB.BcHT772J.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.B60EWxp1.js → chunk-55IACEB6.DhDtICmo.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.c7v_fRLo.js → chunk-727SXJPM.BoKHp7gV.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.8BxLWdDc.js → chunk-AQP2D5EJ.Chu4JRpE.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.DmKuxGFT.js → chunk-FMBD7UC4.wHdwKPlq.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.1Zwd4mqV.js → chunk-ND2GUHAM.ffN-M1JB.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.BvYLu-A1.js → chunk-QZHKN3VN.FRubwg4S.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.CEqRt0WU.js → classDiagram-4FO5ZUOK.c22tQsc_.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.CEqRt0WU.js → classDiagram-v2-Q7XG4LA2.c22tQsc_.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.C7JiUdj2.js → cose-bilkent-S5V4N54A.B9c6fiSj.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.B6mZ-1be.js → cynefin-OW5HDTMX.DrZsrUHl.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.BuryfDy6.js → dagre-BM42HDAG.DG1U4b3y.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.dao39YQM.js → diagram-2AECGRRQ.CH15b-K3.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.lnGZe4At.js → diagram-5GNKFQAL.BH1j7twR.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.uWfhzEfT.js → diagram-KO2AKTUF.q2zCkbAj.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.ppq8-198.js → diagram-LMA3HP47.BLaaZnHV.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.CKSCqDt5.js → diagram-OG6HWLK6.BcpRdQwI.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.sFSf2yBN.js → erDiagram-TEJ5UH35.D7KBlqfM.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BJQjKLbz.js → flowDiagram-I6XJVG4X.D_gmuRqg.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.DAHKNj2N.js → ganttDiagram-6RSMTGT7.DzgWYniD.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.BlmzcW_O.js → gitGraphDiagram-PVQCEYII.576i3hm3.js} +1 -1
- package/web/_astro/index.DiC1a6lh.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.DGhjaqsi.js → infoDiagram-5YYISTIA.DMCclBiz.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.gKIpgt6F.js → ishikawaDiagram-YF4QCWOH.9Kyca4SH.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.DG3tmP0R.js → journeyDiagram-JHISSGLW.chbdG-8q.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.CgHDSxkR.js → kanban-definition-UN3LZRKU.Bds54-e0.js} +1 -1
- package/web/_astro/{linear.BuGEpcuM.js → linear.D5ND9GN_.js} +1 -1
- package/web/_astro/{mermaid.core.DBVqkWBp.js → mermaid.core.D9N_PGbj.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.D-kOcji9.js → mindmap-definition-RKZ34NQL.t0xop5vp.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.BvGPwtZt.js → pieDiagram-4H26LBE5.DqgKh6hM.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.BKb_9FV6.js → quadrantDiagram-W4KKPZXB.DeuHVi2t.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.Cx0fvD8v.js → requirementDiagram-4Y6WPE33.BdYFSG4W.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.fatULi0W.js → sankeyDiagram-5OEKKPKP.k1LPPETJ.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.ChHyKqco.js → sequenceDiagram-3UESZ5HK.DdyfpzoG.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.BdUpKWyj.js → stateDiagram-AJRCARHV.DSEI8il0.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.fmJxqIm5.js → stateDiagram-v2-BHNVJYJU.CoMnQRKo.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BayDn5-V.js → timeline-definition-PNZ67QCA.DM1AHNm-.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.Bm2Aggwa.js → vennDiagram-CIIHVFJN.C-cJmVtl.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.DI75O-uG.js → wardleyDiagram-YWT4CUSO.D0xMzKPb.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DL90E7Q7.js → xychartDiagram-2RQKCTM6.BH5xJcEq.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/channel.C7wG9RxA.js +0 -1
- package/web/_astro/index.BCY1JJHd.css +0 -1
|
@@ -58,8 +58,8 @@ name: task-pipeline
|
|
|
58
58
|
# verifier's and reviewer's self-graded levels (re-imported from the cc anti-hallucination skill
|
|
59
59
|
# by task 1068) are no longer written, checked, or gated on; spur certifies on deterministic
|
|
60
60
|
# evidence (rows MET, proof digests, findings dispositioned). The `confidence` check row, the
|
|
61
|
-
# `ackLowConfidence` var, and the guards' LOW/absent clauses are gone
|
|
62
|
-
# feature-receipt confidence (
|
|
61
|
+
# `ackLowConfidence` var, and the guards' LOW/absent clauses are gone. The derived
|
|
62
|
+
# feature-receipt confidence (1196) followed in task 1221 (ADR-138 amendment).
|
|
63
63
|
version: "7"
|
|
64
64
|
description: "Standard task pipeline: precheck → implement → quality-gate (test/fix/recheck) → review → approve → verify → record → done"
|
|
65
65
|
# Task entity lifecycle (owned by task-lifecycle.yaml):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.11",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|
|
@@ -98,7 +98,6 @@ their runbook here.
|
|
|
98
98
|
**Noun(s):** task | feature | rule | workflow | agent spec
|
|
99
99
|
**Method:** corpus campaign | compose/tune (`sp:spur-composer`) | evaluate/reflect (`sp:spur-doctor`)
|
|
100
100
|
**Scope:** <resolved ids/files>
|
|
101
|
-
**Confidence:** HIGH | MEDIUM | LOW
|
|
102
101
|
|
|
103
102
|
### Changes
|
|
104
103
|
| Target | Operation | Result |
|
|
@@ -26,5 +26,5 @@ For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag
|
|
|
26
26
|
|
|
27
27
|
## Implementation
|
|
28
28
|
|
|
29
|
-
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (`bun run gate`, lint, typecheck, tests, `spur-check`, rules) — a generic "verify before finishing" rule does not apply here. The generator's own claim-verification pass is part of the procedure, not a gate, and carries
|
|
29
|
+
Follow the inline procedure in [dev-operations.md](../skills/spur-dev/references/dev-operations.md#8-changelog) (changelog). This is a docs-only generator: run no quality gates (`bun run gate`, lint, typecheck, tests, `spur-check`, rules) — a generic "verify before finishing" rule does not apply here. The generator's own claim-verification pass is part of the procedure, not a gate, and carries one required check per claim bullet (dev-operations §8, step 7): a **source citation** — an anchor naming a URL or a repo `path:line` — held in the bullet's `<!-- src: … -->` comment and re-verified by step 8's self-check. No confidence level is recorded (ADR-138).
|
|
30
30
|
|
|
@@ -1,39 +1,49 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "
|
|
2
|
+
description: "Local-first PR review — status, a local branch-diff review, and validated fixes; --codex opts into the GitHub Codex review spine."
|
|
3
3
|
role: reviewer
|
|
4
|
-
argument-hint: "[
|
|
4
|
+
argument-hint: "[status|review|fix] [--codex] [--force] [--no-wait] [--base <branch>] [--agent <inline|auto|name>] [<focus>]"
|
|
5
5
|
allowed-tools: ["Bash", "Read", "Skill"]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Dev PR Review
|
|
9
9
|
|
|
10
|
-
Wraps the **sp:pr-reviewing** skill. The
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
Wraps the **sp:pr-reviewing** skill. The default `status` mode is a read-only snapshot of the
|
|
11
|
+
branch, its base and the pull request; `review` runs a **local** review of the branch diff unless
|
|
12
|
+
`--codex` opts into the GitHub `@codex review` spine; `fix` triages findings from either reviewer
|
|
13
|
+
and commits the verified ones. The invoking agent orchestrates.
|
|
13
14
|
|
|
14
15
|
## Argument Flags
|
|
15
16
|
|
|
16
17
|
| Flag | Description | Default |
|
|
17
18
|
| --- | --- | --- |
|
|
18
|
-
| `<mode>` | `
|
|
19
|
-
| `--
|
|
20
|
-
| `--
|
|
21
|
-
| `--
|
|
22
|
-
|
|
|
19
|
+
| `<mode>` | `status\|review\|fix` — status: read-only branch + PR state; review: local branch-diff review (or the GitHub Codex spine with `--codex`); fix: validate, fix and commit findings from either reviewer. | status |
|
|
20
|
+
| `--codex` | `review` only — route through the GitHub Codex spine (`pr-review.yaml`) instead of the local `/sp:dev-review`. | off |
|
|
21
|
+
| `--force` | `review --codex` only — request a fresh review of the current HEAD even when it was already reviewed (`mode=rerun`). | off |
|
|
22
|
+
| `--no-wait` | `review --codex` only — post the request and return `pending` without polling (`mode=submit`). | off |
|
|
23
|
+
| `--base <branch>` | Base branch for the branch report, the `pr-check` diff and a newly created PR. | existing PR base, else repo default |
|
|
24
|
+
| `--agent <inline\|auto\|name>` | Who performs the 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 route. | omit |
|
|
25
|
+
| `<focus>` | Remaining free text — extra review focus for the local review or the Codex request (e.g. `security boundaries and transaction idempotency`). | none |
|
|
23
26
|
|
|
24
27
|
For shared semantics, see the [flag glossary](../skills/spur-dev/references/flag-glossary.md).
|
|
25
28
|
|
|
26
29
|
## Usage
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
```
|
|
32
|
+
/sp:dev-pr-review [status|review|fix] [--codex] [--force] [--no-wait] [--base <branch>] [--agent <inline|auto|name>] [review focus]
|
|
33
|
+
```
|
|
29
34
|
|
|
30
35
|
## Implementation
|
|
31
36
|
|
|
32
37
|
- Apply the [inline-default execution-surface contract](../skills/spur-dev/references/cross-cutting.md#inline-default-execution-surface).
|
|
33
38
|
- Delegate everything: `Skill(skill="sp:pr-reviewing", args="$ARGUMENTS")`. The skill owns mode
|
|
34
|
-
routing,
|
|
35
|
-
|
|
36
|
-
deterministic git/gh core every spine step shells out to.
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
routing, the local `/sp:dev-review` dispatch, the Codex spine and finding triage/fix. On the
|
|
40
|
+
Codex path `pr-review.yaml` is the SSOT for state order and guards, and the four flat
|
|
41
|
+
`spur builder pr-<verb>` verbs are the deterministic git/gh core every spine step shells out to.
|
|
42
|
+
- Retired modes print one notice line and run their replacement: `full` → `review --codex`;
|
|
43
|
+
`submit` → `review --codex --no-wait`; `rerun` → `review --codex --force`; `collect` → `status`.
|
|
44
|
+
`rules` prints that `AGENTS.md` review-rule authoring belongs to `cc:cc-magents` (the `cc` plugin)
|
|
45
|
+
and exits without running a review.
|
|
46
|
+
- Never force-push, rewrite history, close or integrate the PR, or discard unrelated changes.
|
|
47
|
+
`review` without `--codex` makes no GitHub writes. `fix` pre-authorizes one focused commit for the
|
|
48
|
+
verified findings — stop if unrelated uncommitted changes make safe separation or committing
|
|
49
|
+
ambiguous.
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brainstorm
|
|
3
|
-
description: "Structured ideation: generate solution options with trade-offs and
|
|
3
|
+
description: "Structured ideation: generate solution options with trade-offs and source citations, then delegate to research/task-creation skills. Triggers: \"brainstorm ideas\", \"explore solutions\", \"consider options\", \"research approaches\", \"what are my options\", \"how should I approach X\"."
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
version: 1.0.0
|
|
6
6
|
created_at: 2026-03-25
|
|
@@ -30,7 +30,7 @@ see_also:
|
|
|
30
30
|
|
|
31
31
|
# sp:brainstorm — Structured Ideation Workflow
|
|
32
32
|
|
|
33
|
-
Generate solution options with trade-offs, recommendations, and
|
|
33
|
+
Generate solution options with trade-offs, recommendations, and source citations. Delegates research to specialized skills.
|
|
34
34
|
|
|
35
35
|
**Key distinction:**
|
|
36
36
|
- **`sp:brainstorm`** = Ideation: generate approaches with trade-offs
|
|
@@ -40,7 +40,7 @@ Generate solution options with trade-offs, recommendations, and confidence scori
|
|
|
40
40
|
|
|
41
41
|
## Overview
|
|
42
42
|
|
|
43
|
-
The `sp:brainstorm` skill generates multiple solution approaches with explicit trade-offs
|
|
43
|
+
The `sp:brainstorm` skill generates multiple solution approaches with explicit trade-offs and source citations. It follows a structured 3-phase workflow: Input parsing, Ideation with research delegation, and structured Output. Unlike pure research or bare task creation, brainstorm focuses on ideation—generating and comparing options before committing to a solution path.
|
|
44
44
|
|
|
45
45
|
## Quick Start
|
|
46
46
|
|
|
@@ -101,14 +101,15 @@ See the [inline-default contract](../spur-dev/references/cross-cutting.md#inline
|
|
|
101
101
|
|
|
102
102
|
### 3. Generate 2-3 Approaches
|
|
103
103
|
|
|
104
|
-
Always generate multiple options, each with description, trade-offs,
|
|
104
|
+
Always generate multiple options, each with description, trade-offs, and sources — full
|
|
105
105
|
per-approach template: [references/workflows.md](references/workflows.md#approach-generation).
|
|
106
106
|
|
|
107
|
-
### 4.
|
|
107
|
+
### 4. Source Citations
|
|
108
108
|
|
|
109
|
-
Every
|
|
110
|
-
source
|
|
111
|
-
|
|
109
|
+
Every external claim carries a dated source citation — format:
|
|
110
|
+
[references/workflows.md](references/workflows.md#source-citation-format). No HIGH/MEDIUM/LOW
|
|
111
|
+
confidence score (ADR-138): a self-assigned score is as easy to write as the claim; the citation and
|
|
112
|
+
the trade-offs are what the operator compares.
|
|
112
113
|
|
|
113
114
|
### 5. Task Delegation
|
|
114
115
|
|
|
@@ -224,13 +225,13 @@ still pauses unless the operator has encoded prior approval in the workflow vars
|
|
|
224
225
|
| "I understand the request — skip clarifying." | Ideating on a misread wastes the whole session. Validate input clarity and the two input modes before generating options. |
|
|
225
226
|
| "More options are always better." | Beyond ~3, options dilute focus and stall the decision. Cap at three and delegate deeper research instead. |
|
|
226
227
|
| "I'll design the architecture while I brainstorm." | Brainstorm generates and scores approaches; it does not lock the design. Route a chosen approach through the Design Approval Gate. |
|
|
227
|
-
| "
|
|
228
|
+
| "Sources are obvious — skip them." | An uncited option hides its risk. Cite sources and name the trade-offs so the operator compares on evidence, not vibes. |
|
|
228
229
|
|
|
229
230
|
## Red Flags
|
|
230
231
|
|
|
231
232
|
- Presenting a single approach with no alternatives or trade-offs.
|
|
232
233
|
- Starting ideation before the input is clarified.
|
|
233
|
-
- More than three approaches, or approaches with no
|
|
234
|
+
- More than three approaches, or approaches with no source.
|
|
234
235
|
- Skipping the task-delegation offer after the operator confirms a direction.
|
|
235
236
|
- Treating a brainstorm output as an approved design (bypassing the approval gate).
|
|
236
237
|
|
|
@@ -293,7 +294,7 @@ codebase-first rule, stop conditions, depth question budgets, smart positional d
|
|
|
293
294
|
The skill uses this tree to:
|
|
294
295
|
1. **Constrain the option space** — each approach must be compatible with resolved decisions
|
|
295
296
|
2. **Generate decision-trace annotations** — each approach lists which decisions it depends on
|
|
296
|
-
3. **
|
|
297
|
+
3. **Cite the evidence** — decisions resolved from codebase evidence cite the `path:line` they rest on
|
|
297
298
|
|
|
298
299
|
When `--skip-discovery` is used (no `--context`), the operation falls back to the standard
|
|
299
300
|
3-phase workflow with its own lightweight clarification step.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: brainstorm
|
|
2
2
|
description: "Structured ideation workflow for generating solution options with
|
|
3
|
-
trade-offs,
|
|
3
|
+
trade-offs, source citations, and delegation to research and task creation
|
|
4
4
|
skills. Triggers: brainstorm ideas, explore solutions, consider options,
|
|
5
5
|
research approaches, multiple solution options with trade-offs."
|
|
6
6
|
version: 1.0.0
|
|
@@ -80,7 +80,6 @@ async function authMiddleware(c: Context, next: Next) {
|
|
|
80
80
|
}
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
**Confidence:** HIGH
|
|
84
83
|
**Sources:**
|
|
85
84
|
- [jose Library Docs](https://github.com/panva/jose) | Verified: 2026-03-25
|
|
86
85
|
- [Hono Middleware Guide](https://hono.dev/docs/middleware/builtin/bearer-auth) | Verified: 2026-03-25
|
|
@@ -127,7 +126,6 @@ async function handleLogin(username: string, password: string) {
|
|
|
127
126
|
}
|
|
128
127
|
```
|
|
129
128
|
|
|
130
|
-
**Confidence:** MEDIUM
|
|
131
129
|
**Sources:**
|
|
132
130
|
- [Auth0 Node.js SDK v5](https://auth0.github.io/node-auth0/) | Verified: 2026-03-25
|
|
133
131
|
- [Firebase Admin Setup](https://firebase.google.com/docs/admin/setup) | Verified: 2026-03-15
|
|
@@ -172,7 +170,6 @@ async function apiKeyMiddleware(c: Context, next: Next) {
|
|
|
172
170
|
}
|
|
173
171
|
```
|
|
174
172
|
|
|
175
|
-
**Confidence:** MEDIUM
|
|
176
173
|
**Sources:**
|
|
177
174
|
- [Hono Bearer Auth Middleware](https://hono.dev/docs/middleware/builtin/bearer-auth) | Verified: 2026-03-25
|
|
178
175
|
|
|
@@ -206,4 +203,3 @@ async function apiKeyMiddleware(c: Context, next: Next) {
|
|
|
206
203
|
|
|
207
204
|
**Generated by:** sp:brainstorm
|
|
208
205
|
**Research delegation:** sp:source-driven-development, spur agent run
|
|
209
|
-
**Confidence:** HIGH (official jose/Hono documentation, 2026)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: brainstorm
|
|
2
2
|
description: "Structured ideation workflow for generating solution options with
|
|
3
|
-
trade-offs,
|
|
3
|
+
trade-offs, source citations, and delegation to research and task creation
|
|
4
4
|
skills. Triggers: brainstorm ideas, explore solutions, consider options,
|
|
5
5
|
research approaches, multiple solution options with trade-offs."
|
|
6
6
|
version: 1.0.0
|
|
@@ -85,7 +85,7 @@ DO NOT implement research directly. Delegate to specialized skills:
|
|
|
85
85
|
|
|
86
86
|
2. Delegate research + synthesis inline by default
|
|
87
87
|
- Run in the current session; escalate to `spur agent run` only on a subprocess trigger
|
|
88
|
-
- Request
|
|
88
|
+
- Request source citations
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
### Approach Generation
|
|
@@ -108,7 +108,6 @@ DO NOT implement research directly. Delegate to specialized skills:
|
|
|
108
108
|
- Key technical considerations
|
|
109
109
|
- Dependencies or prerequisites
|
|
110
110
|
|
|
111
|
-
**Confidence:** HIGH/MEDIUM/LOW
|
|
112
111
|
**Sources:** [Citations with dates]
|
|
113
112
|
```
|
|
114
113
|
|
|
@@ -120,14 +119,6 @@ DO NOT implement research directly. Delegate to specialized skills:
|
|
|
120
119
|
- [Title](URL) | **Verified**: YYYY-MM-DD
|
|
121
120
|
```
|
|
122
121
|
|
|
123
|
-
### Confidence Scoring
|
|
124
|
-
|
|
125
|
-
| Level | Range | Criteria |
|
|
126
|
-
|-------|-------|----------|
|
|
127
|
-
| **HIGH** | >90% | Direct quote from official docs (2025+) |
|
|
128
|
-
| **MEDIUM** | 70-90% | Synthesized from multiple sources |
|
|
129
|
-
| **LOW** | <70% | Uncertain, flag for review |
|
|
130
|
-
|
|
131
122
|
---
|
|
132
123
|
|
|
133
124
|
## Phase 3: Structured Output
|
|
@@ -144,7 +135,7 @@ DO NOT implement research directly. Delegate to specialized skills:
|
|
|
144
135
|
2. **Approaches** (200-300 words each)
|
|
145
136
|
- 2-3 options with trade-offs
|
|
146
137
|
- Implementation considerations
|
|
147
|
-
-
|
|
138
|
+
- Sources
|
|
148
139
|
|
|
149
140
|
3. **Recommendations** (100-150 words)
|
|
150
141
|
- Recommended approach with reasoning
|
|
@@ -197,7 +188,6 @@ run_id: <run id, omit when none>
|
|
|
197
188
|
**Implementation Notes:**
|
|
198
189
|
- [Technical considerations]
|
|
199
190
|
|
|
200
|
-
**Confidence:** HIGH/MEDIUM/LOW
|
|
201
191
|
**Sources:** [Citations]
|
|
202
192
|
|
|
203
193
|
### Approach 2: [Name]
|
|
@@ -255,7 +245,7 @@ Bash: spur task batch-create --file decomposition.json # bare JSON array (see
|
|
|
255
245
|
| File not found | Provide clear error with path |
|
|
256
246
|
| Invalid YAML | Report parsing error |
|
|
257
247
|
| Missing fields | List missing fields, ask if incomplete |
|
|
258
|
-
| Research unavailable | Continue,
|
|
248
|
+
| Research unavailable | Continue, mark the uncited claims |
|
|
259
249
|
| Save fails | Display output, suggest manual save |
|
|
260
250
|
|
|
261
251
|
---
|
|
@@ -265,6 +255,6 @@ Bash: spur task batch-create --file decomposition.json # bare JSON array (see
|
|
|
265
255
|
When tools unavailable:
|
|
266
256
|
|
|
267
257
|
1. **Continue** with available tools
|
|
268
|
-
2. **
|
|
258
|
+
2. **Mark** claims left uncited
|
|
269
259
|
3. **Suggest** manual fallback
|
|
270
260
|
4. **Save** intermediate state
|
|
@@ -90,10 +90,13 @@ Before declaring a task `done`, run this lightweight checklist. It catches the m
|
|
|
90
90
|
- [ ] No `console.log` / `console.error` in production code (use the project logger).
|
|
91
91
|
- [ ] No `--no-verify`, `--force`, or new suppression comments added to bypass gates.
|
|
92
92
|
- [ ] Solution section contains `file:line` citations for every changed file.
|
|
93
|
-
- [ ] API/library
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
- [ ] Every API/library claim in changed docs carries BOTH a source citation (URL or `path:line`) and
|
|
94
|
+
an EARNED level `HIGH|MEDIUM|LOW` — `HIGH` cites (a URL, `path:line`, or a path with a
|
|
95
|
+
code/doc extension), `MEDIUM`/`LOW` cite or name what is unverified. That is the
|
|
96
|
+
`| Claim | Source | Local verification | Confidence |` contract of
|
|
97
|
+
`.spur/rules/structure/api-library-claim-citation.yaml`; ADR-138 still forbids a confidence
|
|
98
|
+
label on the VERDICT or verify answer. The deterministic advisory backstop for the citation
|
|
99
|
+
half is the `cited-version-strings` / `cited-api-claims` rules
|
|
97
100
|
(`.spur/rules/docs/sourced-api-claims.yaml`, run ad hoc — not wired into a preset).
|
|
98
101
|
- [ ] Review section has P1–P4 findings table (even if all rows are empty — the table itself proves review happened).
|
|
99
102
|
|
|
@@ -31,10 +31,9 @@ Given the current and baseline artifacts, author the model half of the report. A
|
|
|
31
31
|
calendar day; ad-hoc → immediately preceding equal-duration window. If baseline coverage is
|
|
32
32
|
insufficient or materially different, emit `not comparable` and **no** trend/delta/percentage.
|
|
33
33
|
3. **Findings** — each with the full per-finding field set (key, category, impact, trend,
|
|
34
|
-
observation, inference,
|
|
34
|
+
observation, inference, contradictions, evidenceAnchor, severity, reproCommand,
|
|
35
35
|
ownerSurface). Categories from the closed vocabulary; stable keys of the form
|
|
36
|
-
`<category>:<owner-surface>:<signal>`. Severity is the closed P1/P2/P3 vocabulary
|
|
37
|
-
orthogonal to confidence; reproCommand reproduces the observation verbatim; ownerSurface names
|
|
36
|
+
`<category>:<owner-surface>:<signal>`. Severity is the closed P1/P2/P3 vocabulary; reproCommand reproduces the observation verbatim; ownerSurface names
|
|
38
37
|
the concrete owning surface (file/package/command), consistent with the key's middle segment.
|
|
39
38
|
4. **Recurrence ledger** — classify every finding against the baseline on the **stable key**.
|
|
40
39
|
5. **Telemetry gaps** — every dimension the artifact cannot support, rendered `not available`.
|
|
@@ -58,7 +57,7 @@ Given a candidate report and the artifacts, independently verify:
|
|
|
58
57
|
- **Twelve-section completeness and order** — all twelve section names present in the frozen
|
|
59
58
|
order; none renamed/omitted.
|
|
60
59
|
- **Per-finding fields** — every finding (problem and positive) carries key, category, impact,
|
|
61
|
-
trend, observation, inference,
|
|
60
|
+
trend, observation, inference, contradictions, evidenceAnchor, severity (P1/P2/P3),
|
|
62
61
|
reproCommand, ownerSurface; category in the closed vocabulary; stable-key grammar. A finding
|
|
63
62
|
missing any triage field FAILs (the deterministic gate enforces the same set).
|
|
64
63
|
- **Remediation handoff** — each accepted-proposal handoff carries a `spur task create`
|
|
@@ -62,10 +62,9 @@ Every finding — problem and positive alike — carries the full field set:
|
|
|
62
62
|
| `trend` | `new` / `recurring` / `regressed` / `improved` / `resolved` / `not-comparable` (see recurrence). |
|
|
63
63
|
| `observation` | What the artifacts show — evidence, not interpretation. |
|
|
64
64
|
| `inference` | What the observation is reasoned to mean; names its supporting observations. |
|
|
65
|
-
| `confidence` | Per-finding: `high` / `medium` / `low`. Never one blanket report-level score. |
|
|
66
65
|
| `contradictions` | Any contradicting signal shown beside the finding, not silently reconciled. |
|
|
67
66
|
| `evidenceAnchor` | At least one anchor to the forensics artifact or cited `file:line`. An entry with no anchor is invalid. |
|
|
68
|
-
| `severity` | Closed vocabulary `P1` / `P2` / `P3` — how much the finding matters.
|
|
67
|
+
| `severity` | Closed vocabulary `P1` / `P2` / `P3` — how much the finding matters. Severity orders work (0680 R1); how well a finding is supported lives in its `observation`, `inference`, `contradictions` and `evidenceAnchor`, never a confidence label (ADR-138). The structure gate fails a finding without one. |
|
|
69
68
|
| `reproCommand` | The invocation that reproduces the observation — one command a reader can run verbatim (0680 R2). Gate-enforced. |
|
|
70
69
|
| `ownerSurface` | The concrete surface that owns the fix (a file path, package, or command), consistent with the key's `<owner-surface>` segment but named as a target rather than a slug (0680 R3). Gate-enforced. |
|
|
71
70
|
|
|
@@ -114,7 +113,7 @@ reclassify a recurring finding as new.
|
|
|
114
113
|
## Positive patterns
|
|
115
114
|
|
|
116
115
|
Positive entries are held to the **same evidence standard as problems**: they carry observation,
|
|
117
|
-
inference,
|
|
116
|
+
inference, and at least one evidence anchor. An entry without an anchor is invalid. The
|
|
118
117
|
section renders successful workflows, resolved past issues that stay resolved, and healthy,
|
|
119
118
|
repeating behavior worth keeping.
|
|
120
119
|
|
|
@@ -411,7 +411,7 @@ Thin wrapper: `Skill(skill="sp:issue-finding", args="$ARGUMENTS")`.
|
|
|
411
411
|
- Wholesale raw JSONL parsing when the source has a typed mapper.
|
|
412
412
|
- Accepting `--use-history` or `--no-task` silently instead of naming their replacements.
|
|
413
413
|
- GENERATE recipes inventing a title flag, dotted template forms, or quoted dotted section flags.
|
|
414
|
-
- Claiming multi-agent forensics without
|
|
414
|
+
- Claiming multi-agent forensics without citing the session source each finding came from.
|
|
415
415
|
- Skipping batch section writes + single `spur task check` (when generating).
|
|
416
416
|
- Emitting empty findings without inventorying sessions first.
|
|
417
417
|
|
|
@@ -61,7 +61,7 @@ Parallel subagent outputs must be **synthesized**, not concatenated. The synthes
|
|
|
61
61
|
|
|
62
62
|
1. **Dedup** — merge findings with the same `file:line` anchor; keep the highest-severity version.
|
|
63
63
|
2. **Resolve conflicts** — when two subagents disagree on the same claim, surface the disagreement explicitly; don't silently pick one.
|
|
64
|
-
3. **Rank by
|
|
64
|
+
3. **Rank by evidence** — verified findings (executed check or cited source) first, unverified next, unresolved conflicts last; severity within each tier.
|
|
65
65
|
4. **Unified format** — emit one coherent output, not N raw dumps.
|
|
66
66
|
|
|
67
67
|
Full synthesis methodology: [result-synthesis.md](references/result-synthesis.md).
|
|
@@ -41,13 +41,12 @@ Synthesis: ⚠ CONFLICT — Redis migration safety
|
|
|
41
41
|
|
|
42
42
|
**Rule:** conflicts are findings, not failures. Surface them with both positions stated; let the operator resolve.
|
|
43
43
|
|
|
44
|
-
### 3. Rank by
|
|
44
|
+
### 3. Rank by evidence
|
|
45
45
|
|
|
46
|
-
Sort synthesized results:
|
|
47
|
-
1.
|
|
48
|
-
2.
|
|
49
|
-
3.
|
|
50
|
-
4. Unresolved conflicts (both sides stated)
|
|
46
|
+
Sort synthesized results by what backs them, not a self-assigned confidence label (ADR-138):
|
|
47
|
+
1. Verified (an executed check or a cited `path:line` / URL)
|
|
48
|
+
2. Unverified (reasoned or pattern-matched; name the check that would ground it)
|
|
49
|
+
3. Unresolved conflicts (both sides stated)
|
|
51
50
|
|
|
52
51
|
Within each tier, sort by severity (P1 → P2 → P3 → P4).
|
|
53
52
|
|
|
@@ -58,11 +57,11 @@ Emit one coherent output. The unified report has:
|
|
|
58
57
|
```
|
|
59
58
|
## Synthesized Results
|
|
60
59
|
|
|
61
|
-
###
|
|
62
|
-
| # | Finding | Source | Severity | File:Line |
|
|
63
|
-
|
|
60
|
+
### Verified
|
|
61
|
+
| # | Finding | Source | Severity | File:Line | Evidence |
|
|
62
|
+
|---|---------|--------|----------|-----------|----------|
|
|
64
63
|
|
|
65
|
-
###
|
|
64
|
+
### Unverified
|
|
66
65
|
...
|
|
67
66
|
|
|
68
67
|
### Conflicts (unresolved)
|