@gobing-ai/spur 0.4.9 → 0.4.10
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/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/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 +3 -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/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 +25 -29
- package/plugins/sp/skills/spur-cli/references/agent.md +5 -2
- 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/spur.js +378 -411
- 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
package/config/rules/README.md
CHANGED
|
@@ -17,7 +17,7 @@ install or to ts-libs.
|
|
|
17
17
|
| `surface` | `surface/` | CLI surface consistency (registerXxxCommand wiring, --json serialization) |
|
|
18
18
|
| `migration` | `migration/` | Transitional helpers for the regex → `rg` evaluator move (`rg-dialect`) |
|
|
19
19
|
| `ui` | `ui/` | Web UI seam boundaries (import seam, daisyUI class leak) |
|
|
20
|
-
| `docs` | `docs/` | Sourced API/library claims in markdown — citation anchor
|
|
20
|
+
| `docs` | `docs/` | Sourced API/library claims in markdown — same-line citation anchor (no confidence level, ADR-138). Advisory (`info`), and deliberately **not** in a preset: see the file header for its calibration audit. |
|
|
21
21
|
|
|
22
22
|
## Presets
|
|
23
23
|
|
|
@@ -13,7 +13,6 @@ $schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
|
|
|
13
13
|
# gateway — because `superskill install` bundles them on targets with no
|
|
14
14
|
# node_modules, where any `@gobing-ai/*` import fails ("Bundle failed", task
|
|
15
15
|
# 0669). It mirrors the upstream semantics and is the one exempt file.
|
|
16
|
-
# The `superskill script convert` `.mjs` twins remain self-contained by inlining.
|
|
17
16
|
# - `apps/web` uses `import.meta.env` (Vite browser plane) — not process env, never matches.
|
|
18
17
|
# - Which variables exist and who consumes them is documented in `.env.example`.
|
|
19
18
|
# (The former per-var lease table moved there; the rule now enforces the funnel,
|
|
@@ -2,11 +2,11 @@ $schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
|
|
|
2
2
|
# [boundary] ADR-130 script placement contract (task 1000). Runs the fast
|
|
3
3
|
# --placement-only mode of the relocated script-contract-check on every
|
|
4
4
|
# recommended-pre-check; SKIPs outside the Spur source repo (same pattern as
|
|
5
|
-
# strict/rule-files-structural.yaml SKIP on missing yq). The full
|
|
6
|
-
# stays in spur-check-feature.
|
|
5
|
+
# strict/rule-files-structural.yaml SKIP on missing yq). The full hook-only
|
|
6
|
+
# layout check (`bun run script-contract-check`) stays in spur-check-feature.
|
|
7
7
|
rules:
|
|
8
8
|
- id: sp-script-placement
|
|
9
|
-
description: "
|
|
9
|
+
description: "plugins/sp and scripts/commands must honor the ADR-130 placement contract (hook entry budget, no DB driver or corpus parsing in plugin scripts/hooks/lib, no raw DB driver in scripts/commands, no noun clash, ADR-129 hook layout); any finding fails, no baseline."
|
|
10
10
|
severity: error
|
|
11
11
|
evaluator:
|
|
12
12
|
type: exit-code
|
|
@@ -1,51 +1,18 @@
|
|
|
1
1
|
$schema: "@gobing-ai/spur/schemas/rule-file.schema.json"
|
|
2
|
-
# Sourced-claims rules (docs corpus) — API/library
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# measured fact from model memory. The deterministic scan is line-level and
|
|
7
|
-
# heuristic — code fences and command examples can legitimately carry bare
|
|
8
|
-
# versions, so severity is info (advisory visibility; the recommended-pre-check
|
|
9
|
-
# gate runs --fail-on warning, so this rule surfaces findings for review without
|
|
10
|
-
# reddening gates — changed-file enforcement happens in SECUA review).
|
|
2
|
+
# Sourced-claims rules (docs corpus) — an external API/library claim in markdown
|
|
3
|
+
# (a bare x.y.z version, or "deprecated since / added in / removed in <v>") must carry
|
|
4
|
+
# a same-line citation anchor: an http(s) URL or a repo path:line. Contract owned by
|
|
5
|
+
# sp-source-driven-development; changed-file enforcement is SECUA review.
|
|
11
6
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
# (`docs/00_ADR.md:5` → `version: 1.69.0`), a section number in a heading
|
|
18
|
-
# (`docs/04_DESIGN.md:116` → `### 1.0.1 Shared option registry`) and a
|
|
19
|
-
# `§`-numbered cross-reference (`docs/00_ADR.md:1118` → `§1.2.1`). All three are
|
|
20
|
-
# excluded by the pattern below — the first two on the line's shape, the third on
|
|
21
|
-
# the token itself. The remaining source was a stale exclude list that stopped at
|
|
22
|
-
# `docs/tasks4/` while the active corpus folder is `docs/tasks5/`, which alone
|
|
23
|
-
# produced 226 findings; it is now one `docs/tasks*/**` glob. 593 → 330 after those
|
|
24
|
-
# two fixes, then 277 once the `§` shape was excluded too — the residual are
|
|
25
|
-
# version-pinned package claims that genuinely lack a same-line anchor, and they
|
|
26
|
-
# stay visible rather than suppressed.
|
|
7
|
+
# Severity is info and the category is deliberately NOT in any preset: the scan is
|
|
8
|
+
# line-level, fires inside code fences, and its residual is a review surface, not a
|
|
9
|
+
# gate (2026-10-12 audit: 593 → 277 findings after the shape/`§`/excludes fixes; the
|
|
10
|
+
# 2026-10-16 widening admitted only verbs whose shape vouches for a version).
|
|
11
|
+
# Re-measure with `spur rule run --file … --json` before widening the vocabulary.
|
|
27
12
|
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
# (code-verification secu-review checklist). These rules are its deterministic
|
|
32
|
-
# backstop: the three `cited-*` rules cover the citation half, and
|
|
33
|
-
# `cited-api-claims-confidence` covers the level half.
|
|
34
|
-
# `cited-high-confidence` covers the HONESTY half — the level is a claim like
|
|
35
|
-
# any other, so the one level that asserts "verified this session" must show the
|
|
36
|
-
# source it was verified against. MEDIUM (recalled, plausibly stale) and LOW
|
|
37
|
-
# (memory only) require no anchor by contract and are deliberately not flagged.
|
|
38
|
-
# All are severity `info`,
|
|
39
|
-
# and the category is deliberately NOT in `recommended-pre-check` — it surfaces
|
|
40
|
-
# findings for review without reddening gates. The 2026-10-12 audit below settled
|
|
41
|
-
# the promotion question: the residual findings stay a review-surface concern
|
|
42
|
-
# (SECUA checklist), not a gate one — do not add `- docs` to that preset.
|
|
43
|
-
#
|
|
44
|
-
# Fenced-code behavior (measured 2026-10-16, `spur rule run --file … --json` over a
|
|
45
|
-
# probe doc): code fences are NOT skipped by the regex evaluator — every rule here
|
|
46
|
-
# fires on a matching line inside a fence. The earlier note claiming fenced lines
|
|
47
|
-
# were "out of regex reach" was wrong; fence noise is one more reason these stay
|
|
48
|
-
# `info` and ad hoc rather than gated.
|
|
13
|
+
# Citation only — no HIGH/MEDIUM/LOW level rule (ADR-138, task 1221): a model can
|
|
14
|
+
# write HIGH as easily as a claim, so the level verified nothing. The anchor is the
|
|
15
|
+
# evidence; do not reintroduce a level half.
|
|
49
16
|
include:
|
|
50
17
|
- "docs/**/*.md"
|
|
51
18
|
- "plugins/sp/skills/**/references/**/*.md"
|
|
@@ -58,6 +25,11 @@ exclude:
|
|
|
58
25
|
# fallback strips the `*` down to `docs/tasks/` — which is why that form
|
|
59
26
|
# silently excluded nothing (measured 2026-10-12).
|
|
60
27
|
- "docs/tasks*/**"
|
|
28
|
+
# Dated working records — see the "Historical-record excludes" note above.
|
|
29
|
+
- "docs/report*/**"
|
|
30
|
+
- "docs/dogfood/**"
|
|
31
|
+
- "docs/plans/**"
|
|
32
|
+
- "docs/analysis/**"
|
|
61
33
|
- "drizzle/**"
|
|
62
34
|
- "**/node_modules/**"
|
|
63
35
|
rules:
|
|
@@ -66,8 +38,8 @@ rules:
|
|
|
66
38
|
A markdown line asserting a version string (x.y.z) without a citation
|
|
67
39
|
anchor on the same line — http(s) URL or repo path reference like
|
|
68
40
|
packages/app/src/foo.ts:123 — is unverifyable. Add the anchor, or drop
|
|
69
|
-
the version if it is not load-bearing
|
|
70
|
-
|
|
41
|
+
the version if it is not load-bearing; contract in
|
|
42
|
+
sp-source-driven-development.
|
|
71
43
|
severity: info
|
|
72
44
|
evaluator:
|
|
73
45
|
type: regex
|
|
@@ -87,57 +59,12 @@ rules:
|
|
|
87
59
|
- id: cited-api-claims
|
|
88
60
|
description: >
|
|
89
61
|
A markdown line making a time- or version-anchored external API claim
|
|
90
|
-
("deprecated since 1.2", "introduced in v3", "
|
|
91
|
-
|
|
92
|
-
source
|
|
93
|
-
contract in sp-source-driven-development.
|
|
94
|
-
severity: info
|
|
95
|
-
evaluator:
|
|
96
|
-
type: regex
|
|
97
|
-
config:
|
|
98
|
-
mode: forbid
|
|
99
|
-
pattern: "^(?!.*(?:https?://|(?:[\\w.-]+/)+[\\w.-]+:\\d+)).*\\b(?:deprecated (?:since|in|as of)|introduced in|added in|available since|stable since)\\b"
|
|
100
|
-
- id: cited-api-claims-confidence
|
|
101
|
-
description: >
|
|
102
|
-
A markdown line making a time- or version-anchored external API claim
|
|
103
|
-
("deprecated since 1.2", "introduced in v3", "available since 0.9") must
|
|
104
|
-
also state its confidence level — HIGH, MEDIUM or LOW — so a reader can
|
|
105
|
-
tell a checked fact from model memory; contract in
|
|
106
|
-
sp-source-driven-development. Pairs with `cited-api-claims`, which covers
|
|
107
|
-
the citation half: a line missing both halves reports once per rule,
|
|
108
|
-
deliberately, because each missing half is its own defect.
|
|
109
|
-
severity: info
|
|
110
|
-
evaluator:
|
|
111
|
-
type: regex
|
|
112
|
-
config:
|
|
113
|
-
mode: forbid
|
|
114
|
-
# Fires on a claim line carrying no uppercase level token. The verbs match
|
|
115
|
-
# `cited-api-claims` exactly, so the two rules never disagree about which
|
|
116
|
-
# lines are claims.
|
|
117
|
-
pattern: "^(?!.*\\b(?:HIGH|MEDIUM|LOW)\\b).*\\b(?:deprecated (?:since|in|as of)|introduced in|added in|available since|stable since)\\b"
|
|
118
|
-
- id: cited-high-confidence
|
|
119
|
-
description: >
|
|
120
|
-
A line stating HIGH confidence about an external API/library claim must
|
|
121
|
-
carry a source citation anchor on the same line — URL or repo path:line.
|
|
122
|
-
The claim contract (sp-source-driven-development) defines HIGH as
|
|
123
|
-
"verified against the pinned version's docs/source THIS SESSION", so an
|
|
124
|
-
uncited HIGH is the one level that cannot be honest: MEDIUM is recalled and
|
|
125
|
-
plausibly stale, LOW is memory only, and both are explicitly allowed
|
|
126
|
-
without a source (LOW must never be presented as fact — that stays a review
|
|
127
|
-
judgment, not a regex). Scoped to the same claim verbs as
|
|
128
|
-
`cited-api-claims`, so the two rules agree on which lines are claims: a
|
|
129
|
-
decision record's own `Confidence:` grade (the brainstorm family) is a
|
|
130
|
-
different contract and is deliberately out of scope. Pairs with
|
|
131
|
-
`cited-api-claims-confidence`, which catches a claim line carrying no level
|
|
132
|
-
at all.
|
|
62
|
+
("deprecated since 1.2", "introduced in v3", "removed in 0.9") must carry
|
|
63
|
+
a citation anchor on the same line — URL or repo path:line; contract in
|
|
64
|
+
sp-source-driven-development.
|
|
133
65
|
severity: info
|
|
134
66
|
evaluator:
|
|
135
67
|
type: regex
|
|
136
68
|
config:
|
|
137
69
|
mode: forbid
|
|
138
|
-
|
|
139
|
-
# vocabulary is identical to its siblings (URL or `path:line`), so one
|
|
140
|
-
# line cannot read as cited for one rule and uncited for another. The level
|
|
141
|
-
# is asserted with a lookahead so either prose order matches — `(HIGH)` after
|
|
142
|
-
# the claim (the usual form) and `HIGH — <claim>` both count.
|
|
143
|
-
pattern: "^(?!.*(?:https?://|(?:[\\w.-]+/)+[\\w.-]+:\\d+))(?=.*\\bHIGH\\b).*\\b(?:deprecated (?:since|in|as of)|introduced in|added in|available since|stable since)\\b"
|
|
70
|
+
pattern: "^(?!.*(?:https?://|(?:[\\w.-]+/)+[\\w.-]+:\\d+)).*\\b(?:deprecated (?:since|in|as of)|introduced in|added in|available since|stable since|removed (?:in|since) [vV]?\\d|(?:since|as of) (?:[vV]\\d+\\.\\d+(?:\\.\\d+)?|\\d+\\.\\d+\\.\\d+))\\b"
|
|
@@ -52,14 +52,6 @@ vars:
|
|
|
52
52
|
featureId: "X"
|
|
53
53
|
spurBin: "spur"
|
|
54
54
|
verificationCmd: "bun run spur-check-feature"
|
|
55
|
-
# Operator-declared confidence level; empty derives it from the pass (HIGH when the selected
|
|
56
|
-
# definition's own command exited 0 with an unchanged proof-input digest, MEDIUM under a caller
|
|
57
|
-
# `--cmd` override, LOW otherwise). The completion boundary refuses a PASS carrying no level or
|
|
58
|
-
# LOW unless the receipt records the acknowledgement below.
|
|
59
|
-
confidence: ""
|
|
60
|
-
# Operator acknowledgement of a LOW level. It rides the receipt, so the transition reads it from
|
|
61
|
-
# the evidence rather than from whatever flags a later command happens to pass.
|
|
62
|
-
ackLowConfidence: "false"
|
|
63
55
|
__runId: ""
|
|
64
56
|
|
|
65
57
|
states:
|
|
@@ -73,7 +65,7 @@ states:
|
|
|
73
65
|
- kind: shell
|
|
74
66
|
options:
|
|
75
67
|
command: >-
|
|
76
|
-
mkdir -p .spur/run;
|
|
68
|
+
mkdir -p .spur/run; $spurBin feature verify "$featureId" --run-id "$__runId" --no-logo || printf 'FAIL feature-verification failed closed — spur feature verify exited nonzero\n' > ".spur/run/$__runId-feature-verification.status"; exit 0
|
|
77
69
|
|
|
78
70
|
- id: done
|
|
79
71
|
description: Terminal — repo-wide checks passed and the receipt is bound.
|
|
@@ -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.10",
|
|
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
|
|
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,9 @@ 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 claims in changed docs carry a source citation (URL or `path:line`)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
the `cited-version-strings` / `cited-api-claims` / `cited-api-claims-confidence` / `cited-high-confidence` rules
|
|
93
|
+
- [ ] API/library claims in changed docs carry a source citation (URL or `path:line`) per
|
|
94
|
+
source-driven-development; no confidence label is required (ADR-138). The deterministic
|
|
95
|
+
advisory backstop is the `cited-version-strings` / `cited-api-claims` rules
|
|
97
96
|
(`.spur/rules/docs/sourced-api-claims.yaml`, run ad hoc — not wired into a preset).
|
|
98
97
|
- [ ] Review section has P1–P4 findings table (even if all rows are empty — the table itself proves review happened).
|
|
99
98
|
|
|
@@ -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)
|
|
@@ -201,7 +201,6 @@ Audit categories:
|
|
|
201
201
|
| Analysis Date | YYYY-MM-DD |
|
|
202
202
|
| Target | `path` |
|
|
203
203
|
| Mode / Focus / Format | `briefing` / `[focus]` / `markdown` |
|
|
204
|
-
| Confidence | High / Medium / Low |
|
|
205
204
|
|
|
206
205
|
## Purpose Hypothesis
|
|
207
206
|
|
|
@@ -209,8 +208,8 @@ Audit categories:
|
|
|
209
208
|
|
|
210
209
|
## Tech Stack
|
|
211
210
|
|
|
212
|
-
| Layer | Technology | Evidence |
|
|
213
|
-
|
|
211
|
+
| Layer | Technology | Evidence |
|
|
212
|
+
|---|---|---|
|
|
214
213
|
|
|
215
214
|
## Entry Points
|
|
216
215
|
|
|
@@ -282,7 +281,6 @@ Use this shape for `--format json` or `--format both`. Omit fields only when the
|
|
|
282
281
|
"analysisDate": "YYYY-MM-DD",
|
|
283
282
|
"mode": "architecture",
|
|
284
283
|
"focus": "all",
|
|
285
|
-
"confidence": "high|medium|low",
|
|
286
284
|
"stack": [],
|
|
287
285
|
"entryPoints": [],
|
|
288
286
|
"components": [],
|
|
@@ -301,7 +299,7 @@ Use this shape for `--format json` or `--format both`. Omit fields only when the
|
|
|
301
299
|
- Cite `file/path:line` for claims derived from source files.
|
|
302
300
|
- Cite manifest paths for stack and package manager claims.
|
|
303
301
|
- Cite multiple files for architectural boundary claims when possible.
|
|
304
|
-
- Mark inferred claims
|
|
302
|
+
- Mark inferred claims `Inferred:` and name the evidence that would confirm them; no confidence label (ADR-138).
|
|
305
303
|
- Never invent services, databases, tables, endpoints, actors, diagrams, or business flows that are not supported by evidence.
|
|
306
304
|
- If line numbers are unavailable from a tool, cite the file path and state that line numbers were not available.
|
|
307
305
|
|
|
@@ -339,7 +337,7 @@ The indexed-context layer is optional and opportunistic.
|
|
|
339
337
|
|---|---|
|
|
340
338
|
| Empty/minimal codebase | Return `briefing` with "insufficient evidence", list missing artifacts, suggest next files needed. |
|
|
341
339
|
| Monorepo | Identify packages/apps; ask for scope unless `--auto` or requested mode can safely summarize all packages. |
|
|
342
|
-
| No clear entry point | List candidates with
|
|
340
|
+
| No clear entry point | List candidates with their evidence; do not choose one as definitive. |
|
|
343
341
|
| Binary-heavy repo | Focus on manifests, scripts, config, docs, and visible source. |
|
|
344
342
|
| Generated/vendor-heavy repo | Exclude generated/vendor paths from architecture conclusions unless directly relevant. |
|
|
345
343
|
| Framework convention over configuration | State inferred convention and cite framework-specific file patterns. |
|