@gobing-ai/spur 0.3.62 → 0.3.63
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/corpus-baseline.json +200 -8
- package/config/workflows/history-anatomy.yaml +40 -11
- package/package.json +9 -9
- package/plugins/sp/README.md +2 -2
- package/plugins/sp/commands/dev-find-issue.md +4 -4
- package/plugins/sp/commands/dev-idea.md +3 -3
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/references/environment-lens.md +66 -0
- package/plugins/sp/scripts/history-anatomy-cache.mjs +162 -13
- package/plugins/sp/scripts/history-anatomy-cache.ts +209 -13
- package/plugins/sp/skills/dogfood-testing/references/report-template.md +30 -0
- package/plugins/sp/skills/history-anatomy/SKILL.md +3 -3
- package/plugins/sp/skills/history-anatomy/references/operations.md +21 -8
- package/plugins/sp/skills/history-anatomy/references/report-contract.md +55 -5
- package/plugins/sp/skills/spur-cli/references/agent.md +15 -6
- package/plugins/sp/skills/spur-cli/references/message.md +4 -2
- package/plugins/sp/skills/spur-dev/references/cross-cutting.md +6 -4
- package/spur.js +882 -325
- package/web/_astro/{BoardApp.rkWGVwwK.js → BoardApp.CKolAjUz.js} +56 -56
- package/web/_astro/BoardApp.DXD--ybM.js +1 -0
- package/web/_astro/{TaskDetail.B7ODt_bA.js → TaskDetail.Bre7G4gC.js} +1 -1
- package/web/_astro/{arc.C5QRz6AQ.js → arc.7luwOGiC.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.CHptn8gZ.js → architectureDiagram-3BPJPVTR.F6KaHXp-.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.b1nEDkDw.js → blockDiagram-GPEHLZMM.CCGHeRVi.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.BWj8S_Qq.js → c4Diagram-AAUBKEIU.CpqewGmd.js} +1 -1
- package/web/_astro/channel.DxfOFf1l.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.q0BBuE1n.js → chunk-2J33WTMH.CB9vKa5F.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.DP2KDkAU.js → chunk-4BX2VUAB.ifGXoUA3.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.CkCId72p.js → chunk-55IACEB6.VIaRo7l8.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.oHWzxMot.js → chunk-727SXJPM.DzPE41OS.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.DkkgxfMP.js → chunk-AQP2D5EJ.UF2QRXYF.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.lmFJDvRK.js → chunk-FMBD7UC4.D2zXKa1R.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.52jt0eHK.js → chunk-ND2GUHAM.Cb9bDyvx.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.Cg8KEFoD.js → chunk-QZHKN3VN.nUKFBiLD.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.BuOUhxcD.js → classDiagram-4FO5ZUOK.DZg9K9mO.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.BuOUhxcD.js → classDiagram-v2-Q7XG4LA2.DZg9K9mO.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.BRUU8E_0.js → cose-bilkent-S5V4N54A.D9STo90d.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.GDbfFYVV.js → dagre-BM42HDAG.D3IbwhHz.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.CvIDBeJF.js → diagram-2AECGRRQ.BWTDxBe9.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.DMgJjWOX.js → diagram-5GNKFQAL.XnXlonHG.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.njjl-0AP.js → diagram-KO2AKTUF.CywOngCO.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.CcCqgP8M.js → diagram-LMA3HP47.DY1D21Iu.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.Btqd-YVE.js → diagram-OG6HWLK6.DQxb59KA.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.BbhML_Xo.js → erDiagram-TEJ5UH35.CF2U-pQZ.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.CkvsIgY8.js → flowDiagram-I6XJVG4X.BJK4M3in.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.m8IWD_wW.js → ganttDiagram-6RSMTGT7.BSniMzdB.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.5z87HXO-.js → gitGraphDiagram-PVQCEYII.Dxg-yRov.js} +1 -1
- package/web/_astro/index.BVXdIsZV.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.Bvyvsd7Q.js → infoDiagram-5YYISTIA.BY4CgO_n.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.DdWVYO87.js → ishikawaDiagram-YF4QCWOH.BmWDZtwF.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.C3kOlYH1.js → journeyDiagram-JHISSGLW.CpB1YWDP.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.CfKTUHVC.js → kanban-definition-UN3LZRKU.k-fukQX9.js} +1 -1
- package/web/_astro/{linear.CMDHnzgX.js → linear.BNNCobvI.js} +1 -1
- package/web/_astro/{mermaid.core.DN7-WrsP.js → mermaid.core.DnpzzuPU.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.DcQxLvqG.js → mindmap-definition-RKZ34NQL.D9NnlLBu.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.Nu-Inbw6.js → pieDiagram-4H26LBE5.CKhoMiyC.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.Dck2EChs.js → quadrantDiagram-W4KKPZXB.BkAygRlm.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.C--E5XuW.js → requirementDiagram-4Y6WPE33.CX8ibmwc.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.B_0iRNna.js → sankeyDiagram-5OEKKPKP.Dvurpa0Y.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.PKuKr9mk.js → sequenceDiagram-3UESZ5HK.veO8c2tk.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.ClhGHb-O.js → stateDiagram-AJRCARHV.DpMr4CO3.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.Bv6BBnvg.js → stateDiagram-v2-BHNVJYJU.CKjso86_.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.BZm2ZvAH.js → timeline-definition-PNZ67QCA.DayoPp_2.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.Dt6yZXry.js → vennDiagram-CIIHVFJN.XNHf04O9.js} +1 -1
- package/web/_astro/{wardley-L42UT6IY.rUs-E00M.js → wardley-L42UT6IY.CpM_031g.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.BcWgv4cA.js → wardleyDiagram-YWT4CUSO.lIAjSkZJ.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.DH-M-cX9.js → xychartDiagram-2RQKCTM6.D8_2K6U1.js} +1 -1
- package/web/index.html +2 -2
- package/web/_astro/BoardApp.Z9jMwI9G.js +0 -1
- package/web/_astro/channel.BJtn6CGV.js +0 -1
- package/web/_astro/index.nWve6EHS.css +0 -1
|
@@ -15,7 +15,7 @@ duplicated into the YAML: the rubric cannot recurse.
|
|
|
15
15
|
|
|
16
16
|
| Operation | Input | Output |
|
|
17
17
|
| --- | --- | --- |
|
|
18
|
-
| `enrich` | current forensics artifact + baseline artifact (plain `HistoryArtifact` JSON) | the model-authored report sections (Baseline comparison, Findings, Recurrence ledger, Remediation options, Performance analysis, Workflow and process improvements, Positive patterns) meeting the report contract |
|
|
18
|
+
| `enrich` | current forensics artifact + baseline artifact (plain `HistoryArtifact` JSON) | the model-authored report sections (Baseline comparison, Findings, Recurrence ledger, Remediation options, Performance analysis, Workflow and process improvements, Report-only advisories, Positive patterns) meeting the report contract |
|
|
19
19
|
| `validate` | a candidate report + the current/baseline artifacts | a PASS / FAIL verdict with per-finding and per-section evidence checks, naming any failing rule |
|
|
20
20
|
|
|
21
21
|
Freeze these operation names and this input/output contract — 0660 consumes them verbatim.
|
|
@@ -31,13 +31,23 @@ 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, confidence, contradictions, evidenceAnchor
|
|
35
|
-
vocabulary; stable keys of the form
|
|
34
|
+
observation, inference, confidence, contradictions, evidenceAnchor, severity, reproCommand,
|
|
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 and is
|
|
37
|
+
orthogonal to confidence; reproCommand reproduces the observation verbatim; ownerSurface names
|
|
38
|
+
the concrete owning surface (file/package/command), consistent with the key's middle segment.
|
|
36
39
|
4. **Recurrence ledger** — classify every finding against the baseline on the **stable key**.
|
|
37
40
|
5. **Telemetry gaps** — every dimension the artifact cannot support, rendered `not available`.
|
|
38
41
|
6. **Remediation options** — proposals only (owner surface, expected impact, verification method,
|
|
39
|
-
reversibility)
|
|
40
|
-
|
|
42
|
+
reversibility), plus the printed `spur task create` handoff invocation carrying the finding's
|
|
43
|
+
stable key for accepted proposals. No applied change/diff/auto-write to the corpus.
|
|
44
|
+
7. **Report-only advisories** — repeated identical tool-and-argument signatures surfaced with
|
|
45
|
+
repetition counts; proposes no automatic interruption (report-only, 0680 R5).
|
|
46
|
+
8. **Positive patterns** — same evidence standard as problems.
|
|
47
|
+
|
|
48
|
+
Run-cost note (0680 R6): Performance analysis reports what this run's chained `agent.run`
|
|
49
|
+
stages cost using the pairing analytics fold (totalCostUsd / meanDurationMs per pairing); a
|
|
50
|
+
pairing without cost signal renders `not available`, never zero.
|
|
41
51
|
|
|
42
52
|
Never fabricate a value, a trend, an anchor, or an applied fix. Never launch a workflow.
|
|
43
53
|
|
|
@@ -45,11 +55,14 @@ Never fabricate a value, a trend, an anchor, or an applied fix. Never launch a w
|
|
|
45
55
|
|
|
46
56
|
Given a candidate report and the artifacts, independently verify:
|
|
47
57
|
|
|
48
|
-
- **
|
|
58
|
+
- **Twelve-section completeness and order** — all twelve section names present in the frozen
|
|
49
59
|
order; none renamed/omitted.
|
|
50
60
|
- **Per-finding fields** — every finding (problem and positive) carries key, category, impact,
|
|
51
|
-
trend, observation, inference, confidence, contradictions, evidenceAnchor
|
|
52
|
-
vocabulary; stable-key grammar.
|
|
61
|
+
trend, observation, inference, confidence, contradictions, evidenceAnchor, severity (P1/P2/P3),
|
|
62
|
+
reproCommand, ownerSurface; category in the closed vocabulary; stable-key grammar. A finding
|
|
63
|
+
missing any triage field FAILs (the deterministic gate enforces the same set).
|
|
64
|
+
- **Remediation handoff** — each accepted-proposal handoff carries a `spur task create`
|
|
65
|
+
invocation naming the finding's stable key; no auto-written tasks.
|
|
53
66
|
- **Evidence anchors** — every finding has at least one verifiable anchor; no anchor → FAIL.
|
|
54
67
|
- **Causality gate** — a causal claim with one signal must be labelled a hypothesis with a
|
|
55
68
|
confirmation path; otherwise FAIL.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Report contract — `sp:history-anatomy` (HA-S1, 0658)
|
|
2
2
|
|
|
3
|
-
The published report is the skill's contract. This reference owns the
|
|
3
|
+
The published report is the skill's contract. This reference owns the twelve sections (in order),
|
|
4
4
|
the per-finding field set, the closed category vocabulary, the stable-key grammar, the evidence
|
|
5
5
|
rules, comparison semantics, recurrence classes, and the positive-pattern / remediation standards.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Twelve required sections (in order, frozen)
|
|
8
8
|
|
|
9
9
|
1. Scope and provenance
|
|
10
10
|
2. Executive summary
|
|
@@ -15,8 +15,9 @@ rules, comparison semantics, recurrence classes, and the positive-pattern / reme
|
|
|
15
15
|
7. Remediation options
|
|
16
16
|
8. Performance analysis
|
|
17
17
|
9. Workflow and process improvements
|
|
18
|
-
10.
|
|
19
|
-
11.
|
|
18
|
+
10. Report-only advisories (0680 R5)
|
|
19
|
+
11. Positive patterns
|
|
20
|
+
12. Evidence ledger
|
|
20
21
|
|
|
21
22
|
These names are consumed verbatim by 0659's structure gate and 0660's validation stage. Do not
|
|
22
23
|
rename, reorder, omit, or restate them.
|
|
@@ -26,7 +27,13 @@ rename, reorder, omit, or restate them.
|
|
|
26
27
|
- Categories: `reliability` | `repetition` | `workflow` | `performance` | `coverage` |
|
|
27
28
|
`telemetry` | `positive`.
|
|
28
29
|
|
|
29
|
-
Every finding's category is drawn from this closed set. No category is invented
|
|
30
|
+
Every finding's category is drawn from this closed set. No category is invented — explicit
|
|
31
|
+
`category` values outside it fail the structure gate (`finding-invalid-category:<value>`), and so
|
|
32
|
+
do stable keys whose first segment falls outside it (`finding-invalid-key-category:<value>`,
|
|
33
|
+
task 0686). Environment-lens retro category names are encoded only in `<signal>` or the
|
|
34
|
+
owner-surface segment — never as a category. The authoritative seven-name projection table lives
|
|
35
|
+
in the [environment-improvement mapping](../../../references/environment-lens.md), which this
|
|
36
|
+
reference defers to rather than restates.
|
|
30
37
|
|
|
31
38
|
## Stable finding key (frozen)
|
|
32
39
|
|
|
@@ -58,6 +65,9 @@ Every finding — problem and positive alike — carries the full field set:
|
|
|
58
65
|
| `confidence` | Per-finding: `high` / `medium` / `low`. Never one blanket report-level score. |
|
|
59
66
|
| `contradictions` | Any contradicting signal shown beside the finding, not silently reconciled. |
|
|
60
67
|
| `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. Orthogonal to `confidence`: severity orders work, confidence says how sure we are (0680 R1). The structure gate fails a finding without one. |
|
|
69
|
+
| `reproCommand` | The invocation that reproduces the observation — one command a reader can run verbatim (0680 R2). Gate-enforced. |
|
|
70
|
+
| `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. |
|
|
61
71
|
|
|
62
72
|
## Evidence rules
|
|
63
73
|
|
|
@@ -120,6 +130,46 @@ Each option is a **proposal** that names:
|
|
|
120
130
|
The report must contain **no applied change, no diff, and no command it claims to have run**. The
|
|
121
131
|
skill never applies a fix; it proposes one.
|
|
122
132
|
|
|
133
|
+
### Remediation handoff route (0680 R4)
|
|
134
|
+
|
|
135
|
+
For each proposal an operator accepts, the report supplies — printed in the report itself, never
|
|
136
|
+
executed — the `spur task create` invocation that lands it, carrying the proposal's finding
|
|
137
|
+
`key` in the task body so the next report classifies that finding as `resolved`. Auto-writing
|
|
138
|
+
to the task corpus from a model-authored report would bypass the CLI-gated write contract; the
|
|
139
|
+
operator remains the gate.
|
|
140
|
+
|
|
141
|
+
### Report-only advisories (0680 R5)
|
|
142
|
+
|
|
143
|
+
Section 10 is the standing home for observations that inform workflow hygiene but must never
|
|
144
|
+
trigger automatic interruption: repeated identical tool-and-argument signatures are surfaced
|
|
145
|
+
here with their repetition counts, proposing at most human-decided process changes. Nothing in
|
|
146
|
+
this section may drive automated behavior.
|
|
147
|
+
|
|
148
|
+
### Run-cost reporting (0680 R6)
|
|
149
|
+
|
|
150
|
+
Performance analysis states what the run itself cost: per-pairing `totalCostUsd` /
|
|
151
|
+
`meanDurationMs` figures flow from the pairing analytics fold (0679 repaired the payload
|
|
152
|
+
paths), so chained `agent.run` stages are reportable instead of "~unknown". Where no cost
|
|
153
|
+
signal exists for a pairing it renders `not available`, never zero.
|
|
154
|
+
|
|
155
|
+
## Projected candidates — section 9 (environment lens, task 0686)
|
|
156
|
+
|
|
157
|
+
Section 9 (Workflow and process improvements) stays additive report grammar: unprojected numbered
|
|
158
|
+
prose remains valid and gains no required fields. A candidate **projected** through the
|
|
159
|
+
[environment-improvement lens](../../../references/environment-lens.md) is a bullet beginning with
|
|
160
|
+
a backticked stable key (retro name in `<signal>` or owner surface, closed category first — e.g.
|
|
161
|
+
`workflow:agents-md:navigation`) and carries four bold fields, the same names remediation options
|
|
162
|
+
use:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
- `workflow:agents-md:navigation` — **owner surface:** `AGENTS.md` see_also. **expected impact:**
|
|
166
|
+
shorter file hunt. **verification method:** subsequent daily report key `resolved` or absent.
|
|
167
|
+
**reversibility:** revert the pointer.
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
A projected candidate cites its section-4 finding `key` when one exists. Reports remain
|
|
171
|
+
proposal-only: no applied change, no diff, and no command the report claims to have run.
|
|
172
|
+
|
|
123
173
|
## Evidence ledger
|
|
124
174
|
|
|
125
175
|
The final section lists, for every finding, the artifact anchor(s) and any cited `file:line`,
|
|
@@ -23,9 +23,9 @@ that before using `run` for fan-out dispatch.
|
|
|
23
23
|
| ---- | ------- | --------- |
|
|
24
24
|
| `run <prompt>` | Execute a prompt or slash command via a coding agent | `--agent <name>` `--spec <id>` `--model <name>` `--mode <mode>` `--continue` `--cwd <path>` `--drain` `--json` |
|
|
25
25
|
| `loop` | Persistent self-draining inbox loop for a team member (supervisor-managed) | `--spec <id>` `--agent <id>` `--poll <ms>` |
|
|
26
|
-
| `wait <specId
|
|
26
|
+
| `wait [<specId>]` | Identity-pinned wait for an occupant run to reach a lifecycle state (G4 wave 2; `--role` selector per 0685) | `--role <name>` `--run <runId>` `--until <state>...` `--timeout <ms>` `--json` |
|
|
27
27
|
| `list` | List detected coding agents, or team agent specs with `--specs` | `--specs` `--json` |
|
|
28
|
-
| `doctor [agent]` | Check agent readiness | `--json` |
|
|
28
|
+
| `doctor [agent]` | Check agent readiness | `--json` `--probe-health` `--force-refresh` |
|
|
29
29
|
| `create <id>` | Write a team agent spec to `.spur/agents/<id>.yaml` | `--type` `--tags` `--model` `--autonomy` `--system-prompt` `--name` `--workspace` `--purpose` `--auto-start` `--no-identity-preamble` `--json` |
|
|
30
30
|
| `edit <id>` | Open an agent spec in `$EDITOR`, or print its path | - |
|
|
31
31
|
| `delete <id>` | Remove an agent spec | `--force` |
|
|
@@ -108,12 +108,18 @@ into `run` with `--drain` -> else sleep for `--poll` ms.
|
|
|
108
108
|
spur agent wait reviewer # default --until idle
|
|
109
109
|
spur agent wait reviewer --run R3 --until invoke-exit
|
|
110
110
|
spur agent wait reviewer --until working --until invoke-exit --timeout 30000 --json
|
|
111
|
+
spur agent wait --role reviewer # role-addressed: resolves to exactly one instance
|
|
111
112
|
```
|
|
112
113
|
|
|
113
114
|
`wait` pins an occupant's identity (`specId` + `runId` + `generation`) from the snapshot at wait
|
|
114
115
|
start, then polls until the first satisfied `--until` (OR). `--run` pins an explicit run; default
|
|
115
116
|
is the spec's latest run. Replacement, generation bump, or disappearance fails fast; a non-working
|
|
116
117
|
occupant that makes no progress inside the stall budget fails `wait_stalled`.
|
|
118
|
+
Addressing takes `<specId>` **or** `--role` — never both. `--role` resolves against materialized
|
|
119
|
+
instances (vocabulary = `AGENT_ROLE_NAMES` ∪ executor names); zero/multi matches are hard errors
|
|
120
|
+
naming `count=0` + candidates `none` or `count=N` + candidate ids
|
|
121
|
+
(`selector_unmatched` / `selector_ambiguous`, exit 1), an unknown name
|
|
122
|
+
exits 2 naming the accepted vocabulary. Resolution collapses onto the same identity pin.
|
|
117
123
|
|
|
118
124
|
### Flags
|
|
119
125
|
|
|
@@ -149,12 +155,15 @@ lists team agent specs (`.spur/agents/*.yaml`).
|
|
|
149
155
|
|
|
150
156
|
```bash
|
|
151
157
|
spur agent doctor # all detected agents
|
|
152
|
-
spur agent doctor claude # one agent
|
|
153
|
-
spur agent doctor
|
|
158
|
+
spur agent doctor claude # one agent (executor/agent name → detail block)
|
|
159
|
+
spur agent doctor coder # pipeline role id → eligible ladder with ELECTED marker
|
|
160
|
+
spur agent doctor --json # machine-readable (role selector: elected-first ordering)
|
|
154
161
|
```
|
|
155
162
|
|
|
156
|
-
Checks whether each agent is installed and ready to run.
|
|
157
|
-
|
|
163
|
+
Checks whether each agent is installed and ready to run. Text mode renders a capability table —
|
|
164
|
+
`STATUS EXECUTOR AGENT MODEL TIER VERSION ROLES` where TIER is the executor's *capability* tier
|
|
165
|
+
(`cheap|standard|capable-*`), MODEL the pinned config model (`—` when undeclared), and ROLES lists
|
|
166
|
+
candidate pipeline roles with `*` on the elected one. Exit `1` if any checked agent is not ready.
|
|
158
167
|
|
|
159
168
|
## `create` - author a team agent spec
|
|
160
169
|
|
|
@@ -19,7 +19,7 @@ use it well*.
|
|
|
19
19
|
|
|
20
20
|
| Verb | Purpose | Key flags |
|
|
21
21
|
| ---- | ------- | --------- |
|
|
22
|
-
| `send <body>` | Enqueue a message for an agent | `--to <id>` `--from <id>` `--wait` `--until <state>` `--timeout <ms>` `--json` |
|
|
22
|
+
| `send <body>` | Enqueue a message for an agent | `--to <id>` `--role <name>` `--from <id>` `--wait` `--until <state>` `--timeout <ms>` `--json` |
|
|
23
23
|
| `inbox` | List messages addressed to an agent | `--agent <id>` `--json` |
|
|
24
24
|
| `reply <msg-id> <body>` | Thread a reply to a message | `--json` |
|
|
25
25
|
| `watch` | Follow an agent inbox - surface new messages as they arrive | `--agent <id>` `--interval <ms>` `--json` |
|
|
@@ -34,6 +34,7 @@ spur message send "Please review PR 42" --to reviewer
|
|
|
34
34
|
spur message send "Task 0040 is blocked" --to worker-1 --from operator
|
|
35
35
|
spur message send "Done" --to planner --json
|
|
36
36
|
spur message send "Review 0042" --to reviewer --wait --until invoke-exit --timeout 30000
|
|
37
|
+
spur message send "Start the pass" --role reviewer # resolves to exactly one instance
|
|
37
38
|
```
|
|
38
39
|
|
|
39
40
|
Enqueues a durable message addressed to `--to <id>`. The recipient drains it on its next `agent run
|
|
@@ -47,7 +48,8 @@ wait; enqueue is **not** rolled back if the wait later fails.
|
|
|
47
48
|
|
|
48
49
|
| Flag | Purpose |
|
|
49
50
|
| ------ | --------- |
|
|
50
|
-
| `--to <id>` |
|
|
51
|
+
| `--to <id>` | Recipient agent id. Mutually exclusive with `--role`; exactly one of the two is required. |
|
|
52
|
+
| `--role <name>` | Address by Layer-1 role or executor name. Must resolve to exactly one materialized instance; zero (`count=0`, candidates `none`) or multi (`count=N` + candidates) matches are hard errors (exit 1); unknown name exits 2 naming the accepted vocabulary (`AGENT_ROLE_NAMES` ∪ executor names). Resolution yields the same spec-id path as `--to`; `--wait` snapshots that occupant pin. (0685 R6 / ADR-075 amendment) |
|
|
51
53
|
| `--from <id>` | Sender id (default: `operator`). |
|
|
52
54
|
| `--wait` | Block until the recipient reaches `--until` (snapshots occupant before send). |
|
|
53
55
|
| `--until <state>` | Wait target: `injected` \| `invoke-exit` (repeatable OR). Default `invoke-exit`. |
|
|
@@ -185,11 +185,13 @@ recovery (0482 R1). To confirm recovery is wired, watch the run log for
|
|
|
185
185
|
`Escalating: <executor> (tier <t>) failed with resource-exhaustion; retrying on <executor>` — that
|
|
186
186
|
line, not quota state, is the signal that the fallback ladder fired.
|
|
187
187
|
|
|
188
|
-
Do not read provider quota from `spur agent doctor`. The doctor resolves provider keys from
|
|
188
|
+
Do not read provider auth or quota from `spur agent doctor`. The doctor resolves provider keys from
|
|
189
189
|
`${PROVIDER}_API_KEY` env vars and cannot see an agent-owned credential store (e.g. omp's models
|
|
190
|
-
config), so
|
|
191
|
-
and
|
|
192
|
-
|
|
190
|
+
config), so it historically degraded to `status: usable · auth: no · model: unknown` for GLM-style
|
|
191
|
+
executors and was useless as a preflight gate. Feature B4 removed the auth signal from the surface
|
|
192
|
+
entirely (no column, no `authenticated` in `--json`) precisely so nothing can read it by mistake;
|
|
193
|
+
the precheck probe classifies on usability alone. Exhaustion is detected mid-run by the escalation
|
|
194
|
+
classifier, not by any preflight probe.
|
|
193
195
|
|
|
194
196
|
### Explicit subprocess surfaces are unchanged
|
|
195
197
|
|