@execuro-sw-ecosystem/sw-ecosystem-agentic-harness 0.1.10 → 0.1.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/CHANGELOG.md +10 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/sw-design-requirements/SKILL.md +6 -4
- package/skills/sw-design-requirements/reference/clarification-loop.md +2 -2
- package/skills/sw-design-requirements/reference/consistency-probes.md +15 -1
- package/skills/sw-design-requirements/reference/editor-mode.md +4 -2
- package/skills/sw-design-solution/SKILL.md +3 -3
- package/skills/sw-design-solution/reference/clarification-loop.md +2 -0
- package/skills/sw-design-solution/reference/editor-mode.md +7 -5
- package/skills/sw-design-solution/reference/pre-check-and-target.md +25 -12
- package/skills/sw-design-solution/reference/research-and-evidence.md +1 -1
- package/skills/sw-design-solution/reference/tech-spec-template.md +2 -2
- package/skills/sw-implement-feature/SKILL.md +11 -2
- package/skills/sw-setup/SKILL.md +10 -5
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ release.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.11] - 2026-09-21
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Environment repair lives in `sw-setup` alone.** The other skills no longer
|
|
15
|
+
repair the setup themselves; they carry only lean preconditions and defer to
|
|
16
|
+
`sw-setup` for the fix.
|
|
17
|
+
- **A tech spec is rendered before the editor opens**, so the page shows the
|
|
18
|
+
document rather than opening onto an unrendered one.
|
|
19
|
+
|
|
10
20
|
## [0.1.10] - 2026-09-20
|
|
11
21
|
|
|
12
22
|
### Changed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@execuro-sw-ecosystem/sw-ecosystem-agentic-harness",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Shopware 6 agentic harness: sw-* skills and sub-agents, plus an installer that writes them into Claude Code, Codex, GitHub Copilot and Cursor.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Execuro UG (haftungsbeschränkt)",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "sw-ecosystem-agentic-harness",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.11",
|
|
5
5
|
"description": "Shopware 6 agentic harness: sw-* skills and sub-agents for requirements, specs, implementation, verification and documentation, with an installer CLI that writes them into Claude Code, Codex, GitHub Copilot and Cursor. The knowledge-base MCP and the editor tools are separate npm packages.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Execuro UG (haftungsbeschränkt)",
|
|
@@ -28,16 +28,18 @@ Tech decisions belong to `sw-design-solution`. Consult `sw-shopware-architect` (
|
|
|
28
28
|
| Path to `specs/NNNN-*.md` | **Continue mode** — load, keep its number, advance |
|
|
29
29
|
| Any other file path, or free text | **New PRD** — used as source brief |
|
|
30
30
|
| Nothing | Ask for the feature in one sentence, then proceed |
|
|
31
|
-
| `<path> --editor` | **Editor hand-off** — step 0 checks the optional `sw-specs-editor` skill
|
|
31
|
+
| `<path> --editor` | **Editor hand-off** — step 0 checks the optional `sw-specs-editor` skill, invokes it on `<path>`, stops; nothing else runs. The session edits the PRD alone — the tech spec is reference only, with its own session. A `-spec.md` path is refused. |
|
|
32
32
|
| `<path> --editor-session <url> --batch <file>` | **Editor mode** — continue mode driven by one note batch; see `reference/editor-mode.md` in this skill's directory. |
|
|
33
33
|
|
|
34
34
|
Images, notes, tickets, transcripts count as sources; extract requirements, discard narrative.
|
|
35
35
|
|
|
36
36
|
## Procedure
|
|
37
37
|
|
|
38
|
-
### 0.
|
|
38
|
+
### 0. Flags and preconditions
|
|
39
39
|
|
|
40
|
-
`--editor` →
|
|
40
|
+
`--editor` → the gate in `reference/editor-gate.md` in this skill's directory settles it, hand-off or stop; nothing else runs. `--editor-session` → continue mode under `reference/editor-mode.md` in this skill's directory.
|
|
41
|
+
|
|
42
|
+
Then *Preconditions* in `reference/consistency-probes.md`: probe `vendor/` and the KB before writing anything — either missing stops the run.
|
|
41
43
|
|
|
42
44
|
### 1. Establish the target file
|
|
43
45
|
|
|
@@ -91,7 +93,7 @@ Work through `reference/readiness-and-report.md` in this skill's directory: appl
|
|
|
91
93
|
|
|
92
94
|
All under `reference/` in this skill's directory:
|
|
93
95
|
|
|
94
|
-
- `reference/consistency-probes.md` — step
|
|
96
|
+
- `reference/consistency-probes.md` — step 0's preconditions; step 2: conflicts, where to look, the KB stock-behaviour lookup
|
|
95
97
|
- `reference/prd-template.md` — step 3: section structure to fill
|
|
96
98
|
- `reference/splitting-guidelines.md` — steps 3 and 6: when one PRD should have been two
|
|
97
99
|
- `reference/clarification-loop.md` — step 4: the question loop, recommended-option rules, anchoring answers
|
|
@@ -6,11 +6,11 @@ Interactive by default; skip if unattended or the user asked for no questions
|
|
|
6
6
|
|
|
7
7
|
Loop: ask the user with a structured question tool if you have one (Claude Code: `AskUserQuestion`; Codex: `request_user_input`, which is non-blocking outside Plan mode — so end the turn after asking), up to 4 questions/round, 2–4 options each with a short consequence, ranked by confidence unlocked. Max 3 rounds, rest → §11. Contradictions with a prior answer, PRD, plugin, or stock Shopware: explicit choice quoting both sides (stock cites sw-product-manager's evidence).
|
|
8
8
|
|
|
9
|
-
**Recommended options must be advised — mandatory.** Never mark `(recommended)` on your own judgement; an agent recommends, this skill only records.
|
|
9
|
+
**Recommended options must be advised — mandatory.** Never mark `(recommended)` on your own judgement; an agent recommends, this skill only records. In editor mode that happens in the run that raises the question — see *Editor mode*, *Advice is part of raising a question*.
|
|
10
10
|
- `sw-product-manager` always advises; `sw-shopware-architect` too when options differ in feasibility/platform depth, per *Architect advisor*.
|
|
11
11
|
- One batched brief per agent per run, covering every question it advises on — never one spawn per question. PRD path, questions, options verbatim, (architect only) detected version; ask for the option and one-line reason.
|
|
12
12
|
- Note form: `[<agent>] <stance>: <reason>`, under its option; the recommended option always has one; a note under the question only when nothing is recommended.
|
|
13
|
-
- Disagree → keep `sw-product-manager`'s mark, both notes.
|
|
13
|
+
- Disagree → keep `sw-product-manager`'s mark, both notes. Exactly two unadvised states are legal, both written out: `[pm] no recommendation — business preference` (the agent advised and declined) and `[user] raised on the page — advice not requested` (the user's own question, editor mode). A question carrying neither a `(recommended)` option nor one of those notes is a defect, not a state.
|
|
14
14
|
- Interactive: identical — a "(Recommended)" option needs the same advice, stated in its consequence line.
|
|
15
15
|
|
|
16
16
|
**Anchoring answers — mandatory.** Never a quote, Q&A pair, or transcript — rewrite into the PRD's own voice, in the section it belongs:
|
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Run before drafting. Every conflict becomes a clarification question — never a silent assumption, never a resolution you pick yourself.
|
|
4
4
|
|
|
5
|
+
## 0. Preconditions (step 0, before anything is written)
|
|
6
|
+
|
|
7
|
+
**Probe what this run is about to use, never the whole environment.** Two things, both load-bearing for every probe below:
|
|
8
|
+
|
|
9
|
+
- `vendor/shopware/core/composer.json` exists — the version-matched cross-check in probe 4 has nothing to stand on without it.
|
|
10
|
+
- One `mcp__ShopwareDevKnowledgeBase__kb_status` reports `platform` as `implemented` — probe 6 is the stock-behaviour lookup.
|
|
11
|
+
|
|
12
|
+
Either missing → **stop**, write nothing, one line naming the fix:
|
|
13
|
+
|
|
14
|
+
> `vendor/` is not installed. Run `sw-setup`, then re-run this skill.
|
|
15
|
+
> The ShopwareDevKnowledgeBase MCP is not available. Run `sw-setup`, then re-run this skill.
|
|
16
|
+
|
|
17
|
+
Never invoke `sw-setup` from here, never fix it yourself, never ask about it: surveying and repairing the environment is its own run, up front, and it costs an `npx` registry resolution plus twelve rows to answer these two. Nothing else is probed — no other row of that table can affect a PRD run. In an editor session the stop still has to release the document: post that line as the run's reply and change nothing.
|
|
18
|
+
|
|
5
19
|
## 1. Against earlier answers in this PRD
|
|
6
20
|
|
|
7
21
|
Continue mode: re-read §12 Clarification Log and §5 before writing. A new answer that contradicts a logged decision is a conflict, not an update.
|
|
@@ -62,4 +76,4 @@ Internal contradictions are fixed by editing, not by asking — unless the fix c
|
|
|
62
76
|
`platform/func` only; `platform/dev` off limits.
|
|
63
77
|
- Once per run: `read_doc { path: "platform/index.md" }`.
|
|
64
78
|
- Per feature noun: `grep_docs { pattern: "<noun>", path: "platform/func" }`, read the page; try `platform/synonyms.md` when empty.
|
|
65
|
-
- Use results only to name stock features and raise a conflict question quoting the doc path — never an FR, §9 line, or design hint.
|
|
79
|
+
- Use results only to name stock features and raise a conflict question quoting the doc path — never an FR, §9 line, or design hint. Step 0 already established that the KB answers; a call that fails after that is a stop naming `sw-setup`, not a silent fallback.
|
|
@@ -6,10 +6,12 @@ Invoked as `<prd path> --editor-session <url> --batch <batch.json>` — one note
|
|
|
6
6
|
- **No terminal questions.** Never invoke a structured question tool (Claude Code: `AskUserQuestion`; Codex: `request_user_input`). Every gap becomes a §11 question block (`**Q-n**`, 2–4 `- [ ]` options, one `(recommended)`), notes per *Recommended options must be advised*. Max 6/run, ranked by confidence.
|
|
7
7
|
- **Batch input**: read ticks first — a tick with no note is still an answer. Per note: `answer` or `[x]` tick (own answer `- [x] ✎ text`) → anchor per *Anchoring answers*, append §12, delete block. `comment`/`free` → this run's briefing (block-bound: `path`, `line`–`endLine`, verify `md`/`hash`, fall back to `quote`, honour `selection`). `diagram` → update the graph file (below). Technical note → the spec is **read-only** here, a separate session's document: read it — `batch.reference.path` — to check whether a requirement change invalidates something already specified, and say so in the reply; never edit it, never emit against it. Report that it belongs to the spec session (`sw-design-solution <spec path> --editor`) and change nothing in the PRD beyond a §10 `[decision]`/`[constraint]` bullet the user asserted.
|
|
8
8
|
- **Full pass on request only.** A review request ("check the whole PRD", "reconcile") runs the full flow: step 2, §11 gap review, missing options/marks/notes filled. Otherwise touched questions get options.
|
|
9
|
-
- **Scoped agent runs.** Spawn `sw-product-manager`/`sw-shopware-architect` only when a note touches feasibility, §10, or a §11 block changes (one brief per run); else edit, anchor, log alone. **Light batch** — every note is an `answer` or a tick, or the batch is chat only:
|
|
9
|
+
- **Scoped agent runs.** Spawn `sw-product-manager`/`sw-shopware-architect` only when a note touches feasibility, §10, or a §11 block changes (one brief per run); else edit, anchor, log alone. **Light batch** — every note is an `answer` or a tick, or the batch is chat only: no step 2 and no research spawn, the user is waiting on the page for what is a bookkeeping run.
|
|
10
|
+
- **Advice is part of raising a question, not a later phase.** A §11 block this run raises is advised before the run finishes — every batch, a light one included. *Light batch* drops step 2 and the research spawn, never the advisory spawn, and never wins over this rule: an answers-only batch is exactly the batch that raises the next round, so its questions are the ones that must not be born unadvised. Never ask the user to request a recommendation.
|
|
11
|
+
- **Reply first, then advise.** 1. `emit chat` the anchored report — changed blocks, answers, new score — so the page has it while the advisor runs; the run stays active. 2. `emit progress "advising Q-16–Q-19"`. 3. One batched advisory brief per agent, one message: question sentences and options verbatim, PRD path, detected version; ask for the option and a one-line reason — a verdict, not research, and never one spawn per question. `sw-product-manager` advises every raised question, `sw-shopware-architect` in addition where the options differ in feasibility or platform depth or the question is a §10 decision. 4. Write the `(recommended)` mark and the `[<agent>]` notes per *Recommended options must be advised*. 5. `emit done` with the final report.
|
|
10
12
|
- **Preserve on every write:** status tags on item ids (`- **FR-3** [done] …`, also `AC-n`/`BR-n`), the `Diagram:` line, the §11 question blocks and ticks. Rewrite in place; never regenerate.
|
|
11
13
|
- **Diagrams.** Domain diagram: `specs/NNNN-slug.domain.graph.json` (business concepts only). Write/update, run `npx -y @execuro-sw-ecosystem/sw-specs-editor@latest diagram specs/NNNN-slug.domain.graph.json specs/NNNN-slug.domain.excalidraw`, ensure §4 carries `Diagram: specs/NNNN-slug.domain.excalidraw`; never write `.excalidraw` directly, first request only.
|
|
12
14
|
- **Progress.** Before each step, before/after each spawn: `npx -y @execuro-sw-ecosystem/sw-specs-editor@latest emit progress "<step>" --batch <id> --doc <prd path>` (`--doc` is the document path: it names the session, and a feature's PRD and spec are two of them). Keep them few and short — one line per phase, under ~60 characters, no per-tool narration (`reading notes`, `checking feasibility`, `rewriting §4`). They are the page's only sign of life while a spawn runs, not a log.
|
|
13
|
-
- **Report:** changed blocks, answers (Q ids → anchor), top remaining gap or `none`, confidence %, status, `Agents: <list or none>`.
|
|
15
|
+
- **Report:** changed blocks, answers (Q ids → anchor), top remaining gap or `none`, confidence %, status, `Advised: <Q ids> (<agents>)` or `Advised: none`, `Agents: <list or none>`. The last two are mandatory every run, not only when an agent ran.
|
|
14
16
|
|
|
15
17
|
Graph shape (`bin/cli.mjs diagram` input): `{ "title", "direction": "LR", "groups": [{id,label}], "nodes": [{id,label,type: entity|actor|service|external|event|store, group?, note?}], "edges": [{from,to,label?}] }`.
|
|
@@ -20,8 +20,8 @@ Answers **how**, never **what**/**why**. Never re-litigate, question, or change
|
|
|
20
20
|
| --- | --- |
|
|
21
21
|
| `specs/NNNN-slug-spec.md` | **Continue mode** — load, keep its number, advance |
|
|
22
22
|
| `specs/NNNN-slug.md` (a PRD) | **New spec** — PRD is the source of truth |
|
|
23
|
-
| Nothing | Ask for the PRD path |
|
|
24
|
-
| `<path> --editor` | **Editor hand-off**, first reference file below. The path may be the PRD or the spec; it always resolves to `specs/NNNN-slug-spec.md`,
|
|
23
|
+
| Nothing | Ask for the PRD path — a tech spec is always written from one (§0.5) |
|
|
24
|
+
| `<path> --editor` | **Editor hand-off**, first reference file below. The path may be the PRD or the spec; it always resolves to `specs/NNNN-slug-spec.md`, **drafted in the terminal first** when that file is missing or has no ACs yet, then opened automatically. The session edits the spec only — the PRD is reference only, with its own session |
|
|
25
25
|
| `<path> --editor-session <url> --batch <file>` | **Editor mode** — see `reference/editor-mode.md` |
|
|
26
26
|
|
|
27
27
|
## Procedure
|
|
@@ -30,7 +30,7 @@ Then work through the reference files in this skill's directory, in order:
|
|
|
30
30
|
|
|
31
31
|
| File | When | What it decides |
|
|
32
32
|
| --- | --- | --- |
|
|
33
|
-
| `reference/pre-check-and-target.md` | before touching the target file | editor flags, the
|
|
33
|
+
| `reference/pre-check-and-target.md` | before touching the target file | editor flags, the two preconditions a run cannot work without, and how to establish the spec file |
|
|
34
34
|
| `reference/research-and-evidence.md` | after reading the PRD | version detection, KB lookups, the evidence rules, and the architecture guidelines pass |
|
|
35
35
|
| `reference/draft-and-spawn.md` | drafting the spec | architect/QA spawn briefs, merging their output, spot-checks, and cross-AC dependencies |
|
|
36
36
|
| `reference/toolchain-conformance.md` | while drafting, before finalizing | writing the spec so code conforms to Shopware's linters/static analysis on first write |
|
|
@@ -10,4 +10,6 @@ Ask only if the answer changes architecture, data model, or test strategy; other
|
|
|
10
10
|
|
|
11
11
|
Loop: ask the user with a structured question tool if you have one (Claude Code: `AskUserQuestion`; Codex: `request_user_input`, which is non-blocking outside Plan mode — so end the turn after asking), ≤ 4 questions/round, 4 options each with a consequence, one recommended. Rank by unblock impact. Max 3 rounds; rest → **Open Questions**.
|
|
12
12
|
|
|
13
|
+
**Recommended options must be advised — mandatory.** Never mark `(recommended)` on your own judgement; an agent recommends, this skill only records. `sw-shopware-architect` advises; `sw-product-manager` too where an option turns on stock Shopware behaviour. One batched brief per agent per run covering every question it advises on — never one spawn per question: spec path, questions and options verbatim, version + evidence; ask for the option and a one-line reason. Note form `[<agent>] <stance>: <reason>` under its option; the recommended option always has one. Disagree → keep the architect's mark, both notes. Advised and declined → no mark, `[architect] no recommendation — project preference`. **Exception:** `[adr]` and `[gate]` blocks carry pre-canned options and need no spawn. In editor mode the advice happens in the run that raises the question — see *Editor mode*.
|
|
14
|
+
|
|
13
15
|
**Anchoring — mandatory.** Never a quote/transcript — rewrite into the spec's own voice, plus one **Decision Log** line (topic, decision, date). Answer invalidates existing text → edit it, log the supersession.
|
|
@@ -4,13 +4,15 @@ Entered when invoked as `<spec path> --editor-session <url> --batch <batch.json>
|
|
|
4
4
|
|
|
5
5
|
Same procedure/boundary/verification/ADR rules, plus:
|
|
6
6
|
|
|
7
|
-
- **Scoped.** Nothing on open. Continue mode: read the batch first, run step 3 only for touched mechanisms, edit only named blocks plus invalidated ones, re-evaluate §7 — no re-verification/new §6 for untouched ACs. Full pass only on an explicit review or draft request, **or when the spec
|
|
8
|
-
- **No terminal questions.** Never ask via a structured question tool (Claude Code: `AskUserQuestion`; Codex: `request_user_input`). Every ask → §6 block: `**Q-n**`, 2–4 `- [ ]` options, one `(recommended)`, agent notes ` - [<agent>] <stance>: <reason>` under the judged option. Max 6/run. Tags: `[adr] <title>` → `A: Extract` / `B: Keep`; `[gate] Open ADRs <ids>` → `A: Wait (recommended)` / `B: Override
|
|
9
|
-
- **Batch input.** Ticks first — a ticked question with no note is still an answer. `answer`/`[x]` tick → anchor, append Decision Log, delete block (`[adr]` sub-step 3, `[gate]` sub-step 5). `comment`/`free` → this run's briefing (block-bound `path`/`line`–`endLine`/`md`/`quote`/`hash`; verify `md` matches, fall back to `quote`; `selection` → rework only that text). `diagram` → update the graph file. *What*/*why* notes belong to the PRD: read it freely — `batch.reference.path` — as the source of truth for reconciliation, but it is **read-only** here, a separate session's document. Never write it, never anchor an answer into it, never emit against it; report the note in the reply ("this changes FR-4 — take it to the PRD session, `sw-design-requirements <prd path> --editor`") and change nothing. First write migrates a pre-template spec or
|
|
10
|
-
- **Scoped runs.** Re-spawn architect only for an overturned/new decision, QA only for a changed test plan, `sw-product-manager` only for feasibility — together still one message; else edit/verify/anchor/log alone, name agents. **Light batch** — every note is an `answer` or a tick, or the batch is chat only:
|
|
7
|
+
- **Scoped.** Nothing on open. Continue mode: read the batch first, run step 3 only for touched mechanisms, edit only named blocks plus invalidated ones, re-evaluate §7 — no re-verification/new §6 for untouched ACs. Full pass only on an explicit review or draft request, **or when the spec still has no ACs in §3** (§0 drafts before hand-off, so that is a fallback) — that batch runs the complete flow, step 0.5 and version detection included.
|
|
8
|
+
- **No terminal questions.** Never ask via a structured question tool (Claude Code: `AskUserQuestion`; Codex: `request_user_input`). Every ask → §6 block: `**Q-n**`, 2–4 `- [ ]` options, one `(recommended)`, agent notes ` - [<agent>] <stance>: <reason>` under the judged option. Max 6/run. Tags: `[adr] <title>` → `A: Extract` / `B: Keep`; `[gate] Open ADRs <ids>` → `A: Wait (recommended)` / `B: Override`. Unanswered `[gate]` → *In progress*, never auto-override.
|
|
9
|
+
- **Batch input.** Ticks first — a ticked question with no note is still an answer. `answer`/`[x]` tick → anchor, append Decision Log, delete block (`[adr]` sub-step 3, `[gate]` sub-step 5). `comment`/`free` → this run's briefing (block-bound `path`/`line`–`endLine`/`md`/`quote`/`hash`; verify `md` matches, fall back to `quote`; `selection` → rework only that text). `diagram` → update the graph file. *What*/*why* notes belong to the PRD: read it freely — `batch.reference.path` — as the source of truth for reconciliation, but it is **read-only** here, a separate session's document. Never write it, never anchor an answer into it, never emit against it; report the note in the reply ("this changes FR-4 — take it to the PRD session, `sw-design-requirements <prd path> --editor`") and change nothing. First write migrates a pre-template spec or an AC-less stub; blocks get missing options only when touched.
|
|
10
|
+
- **Scoped runs.** Re-spawn architect only for an overturned/new decision, QA only for a changed test plan, `sw-product-manager` only for feasibility — together still one message; else edit/verify/anchor/log alone, name agents. **Light batch** — every note is an `answer` or a tick, or the batch is chat only: no step 3 and no verification spawn, the user is waiting on the page for what is a bookkeeping run.
|
|
11
|
+
- **Advice is part of raising a question, not a later phase.** A §6 block this run raises is advised before the run finishes — every batch, a light one included. *Light batch* drops step 3, never the advisory spawn, and never wins over this rule: an answers-only batch is exactly the batch that raises the next round, so its questions are the ones that must not be born unadvised. Never mark `(recommended)` on your own judgement — an agent recommends, this skill records. **Exception:** `[adr]` and `[gate]` blocks keep the pre-canned options above (`A: Extract`, `A: Wait (recommended)`) and need no spawn; they are procedure, not judgement.
|
|
12
|
+
- **Reply first, then advise.** 1. `emit chat` the anchored report — changed blocks, answers, §7 — so the page has it while the advisor runs; the run stays active. 2. `emit progress "advising Q-7–Q-9"`. 3. One batched advisory brief per agent, one message: question sentences and options verbatim, spec path, version + evidence; ask for the option and a one-line reason — a verdict, not research, and never one spawn per question. `sw-shopware-architect` advises every raised question, `sw-product-manager` in addition where an option turns on stock Shopware behaviour; QA keeps its own trigger. 4. Write the `(recommended)` mark and the ` - [<agent>] <stance>: <reason>` notes; disagreement → keep the architect's mark, both notes. Advised and declined → no mark, `[architect] no recommendation — project preference`; the user's own question → `[user] raised on the page — advice not requested`. 5. `emit done` with the final report.
|
|
11
13
|
- **Preserve:** status tags (`- **AC-2** [partly] (FR-3)`, `- **Decision:** [done] …`), `Diagram:` line, §6 blocks/ticks — rewrite in place, never regenerate.
|
|
12
14
|
- **Diagrams.** `specs/NNNN-slug-spec.architecture.graph.json`; run `npx -y @execuro-sw-ecosystem/sw-specs-editor@latest diagram specs/NNNN-slug-spec.architecture.graph.json specs/NNNN-slug-spec.architecture.excalidraw`, keep §2's `Diagram:` line — never write it directly.
|
|
13
15
|
- **Progress.** `npx -y @execuro-sw-ecosystem/sw-specs-editor@latest emit --since <step-0.5 start> progress "<step>" --batch <id> --doc <spec path>` (`--doc` is the document path: it names the session, and a feature's PRD and spec are two of them) before/after each step/spawn; `--since` prefixes `+m:ss`. Keep them few and short — one line per phase, under ~60 characters, no per-tool narration. They are the page's only sign of life while a spawn runs, not a log.
|
|
14
|
-
- **Report:** changed blocks; answers (Q ids → anchor); first unmet §7 criterion or `none`; status/confidence/`Open ADRs`; `Agents: <list or none>`; `Timing:`.
|
|
16
|
+
- **Report:** changed blocks; answers (Q ids → anchor); first unmet §7 criterion or `none`; status/confidence/`Open ADRs`; `Advised: <Q ids> (<agents>)` or `Advised: none`; `Agents: <list or none>`; `Timing:`. Advised and Agents are mandatory every run, not only when an agent ran.
|
|
15
17
|
|
|
16
18
|
Graph shape: `{ title, direction: "LR", groups: [{id,label}], nodes: [{id,label,type: entity|actor|service|external|event|store,group?,note?}], edges: [{from,to,label?}] }`.
|
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
# Pre-check and target file
|
|
2
2
|
|
|
3
|
-
Entered before touching the target file. Decides how to handle `--editor`/`--editor-session` flags,
|
|
3
|
+
Entered before touching the target file. Decides how to handle `--editor`/`--editor-session` flags, what this run must have before it starts, and how to establish the spec file to write.
|
|
4
4
|
|
|
5
5
|
### 0. Editor flags
|
|
6
6
|
|
|
7
|
-
`--editor` → **first action**, in this order. An editor session edits **one** document and is named from its filename, so the target has to be the *spec* path and the
|
|
7
|
+
`--editor` → **first action**, in this order. An editor session edits **one** document and is named from its filename, so the target has to be the *spec* path, and the page only opens on a spec that already says something.
|
|
8
8
|
|
|
9
9
|
1. **Resolve to the spec path.** `…-spec.md` → that is it. `specs/NNNN-slug.md` (a PRD) → `specs/NNNN-slug-spec.md`, same `NNNN`/slug, per §1's one-spec-per-PRD rule. Anything else → stop with one line naming the two shapes.
|
|
10
|
-
2. **Gate, before
|
|
11
|
-
3. **
|
|
12
|
-
4. **
|
|
13
|
-
5.
|
|
10
|
+
2. **Gate, before any work.** Is the `sw-specs-editor` skill available? It is an optional add-on, installed by `sw-setup`, not part of this plugin. Not available → **stop here** with one line — "The Specs Editor is not installed. Run `sw-setup` to add it, or re-run without `--editor`." — do not fall back to non-editor mode, and never spend a draft on a page that will never open.
|
|
11
|
+
3. **Preconditions, still before any work.** §0.5's probes. Either missing → **stop** with its one line: nothing is drafted, no skeleton is written and no page is opened, exactly as for a missing Specs Editor.
|
|
12
|
+
4. **Branch.** At least one AC block in §3 → already drafted: report `Opening <path> — <status>, <N>/5`, hand off at once, never re-draft. Otherwise → step 5 first.
|
|
13
|
+
5. **Draft it first, in the terminal, before the page.** Run the normal flow end to end — §1, *Research and evidence*, *Draft* (both spawns), *Toolchain conformance*, *ADR flow*, *Readiness* — so §1–§5 and §7 carry real content and a real confidence the moment the page opens; a scored first draft is the target, not *Ready for implementation*. Two deviations, because the user answers on the page and not here: a structured question tool (`AskUserQuestion`, `request_user_input`) is **forbidden**, so *Clarification loop*'s rounds and *ADR flow* sub-steps 2 and 5 become advised §6 `**Q-n**` blocks in *Editor mode*'s shape; and progress is one short plain terminal line per phase — no session exists yet, so nothing is emitted, polled or started here.
|
|
14
|
+
6. **Report one line, then hand off** — `Drafted <path> — <status>, <N>/5, §6: <M> question(s)` — and hand off to `sw-specs-editor` with the spec path. Automatic: `--editor` is the consent, never ask whether to open it.
|
|
14
15
|
|
|
15
16
|
The Specs Editor opens the page and waits; this skill runs again (*Editor mode*) only when the user sends notes. The PRD is **not** part of that session: it is reference only, and business changes go back to its own session (`sw-design-requirements <prd path> --editor`). `--editor-session` → run the procedure below under *Editor mode*, scoped to the batch.
|
|
16
17
|
|
|
17
|
-
### 0.5
|
|
18
|
+
### 0.5 Preconditions
|
|
18
19
|
|
|
19
|
-
Once, before touching the target file. Note the ISO start time (`date -u +%Y-%m-%dT%H:%M:%SZ`) — step 8's Timing line and editor progress prefixes use it.
|
|
20
|
+
Once, before touching the target file. Note the ISO start time (`date -u +%Y-%m-%dT%H:%M:%SZ`) — step 8's Timing line and editor progress prefixes use it. Under `--editor` it runs at §0 step 3, before the draft; when §0 handed off without drafting, the first batch runs it instead.
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **
|
|
22
|
+
**Probe what this run is about to use, never the whole environment.** Three things, all of which this skill genuinely cannot work correctly without:
|
|
23
|
+
|
|
24
|
+
- **The source PRD** — the file this spec is written from: the path given, or in continue mode the one the spec's header names. It has to exist on disk; a well-formed path is not a file.
|
|
25
|
+
- **`vendor/`** — `vendor/shopware/core/composer.json` exists. It is the same file *Research and evidence*'s version detection reads, so read it once and use it for both.
|
|
26
|
+
- **KB MCP** — one `mcp__ShopwareDevKnowledgeBase__kb_status`; `platform` must be `implemented`.
|
|
27
|
+
|
|
28
|
+
Any of the three missing → **stop**, write nothing, one line naming the fix:
|
|
29
|
+
|
|
30
|
+
> `<path>` does not exist. A tech spec is written from a PRD — create one with `sw-design-requirements`, then re-run this skill.
|
|
31
|
+
> `vendor/` is not installed. Run `sw-setup`, then re-run this skill.
|
|
32
|
+
> The ShopwareDevKnowledgeBase MCP is not available. Run `sw-setup`, then re-run this skill.
|
|
33
|
+
|
|
34
|
+
Never invoke `sw-setup` or `sw-design-requirements` from here, never fix it yourself, never ask about it, and never offer to proceed unverified — surveying the environment and writing requirements are those skills' own runs, and both cost far more than these three probes. Nothing else is checked here: Node, `shopware-cli`, the acceptance-test project, Playwright, plugin tests, the wiki and package updates cannot affect a design run.
|
|
35
|
+
|
|
36
|
+
In an editor session the stop still has to release the document: post that one line as the run's reply (`emit done`) and change nothing in the spec.
|
|
24
37
|
|
|
25
38
|
### 1. Establish the target file
|
|
26
39
|
|
|
27
|
-
New spec: `specs/NNNN-slug-spec.md`, reusing the PRD's `NNNN`/`slug` — one per PRD. Create from `reference/tech-spec-template.md` in this skill's directory, section numbers/titles unchanged.
|
|
40
|
+
New spec: `specs/NNNN-slug-spec.md`, reusing the PRD's `NNNN`/`slug` — one per PRD. Create from `reference/tech-spec-template.md` in this skill's directory, section numbers/titles unchanged. Under `--editor` §0 step 5 already created and drafted this file; one that reached the page untouched migrates on first write. Header: PRD path, `shopware/core` version + KB directory, plugin (`custom/plugins/<Name>`, `<Vendor>\<Name>`, existing domain plugin or new one named after the feature's domain). Plugin never `_TBD_` at readiness. Continue mode: keep path, never renumber/duplicate; pre-template spec → migrate this run, say so in the report.
|
|
@@ -10,7 +10,7 @@ Every `FR-n` and AC — the fixed contract, never added, removed or reinterprete
|
|
|
10
10
|
|
|
11
11
|
**Shopware version — detect once, never assume:** `vendor/shopware/core/composer.json` `version` → `composer.lock` → `composer.json` constraint ("unconfirmed"); PHP from the project runtime (`compose.yaml`, `.ddev/config.yaml`, `Dockerfile`), not the host. Pass version + source to every spawned agent; unknown → ask the user.
|
|
12
12
|
|
|
13
|
-
Per central mechanism, one `mcp__ShopwareDevKnowledgeBase__grep_docs { pattern: "<mechanism>", path: "platform/dev/<version>", mode: "files" }` — candidate KB paths only, never `read_doc`/`list_docs` a version directory (~340 KB index). Hand paths to the architect, which reads full pages and verifies; empty grep → `platform/synonyms.md`, then `platform/hubs`.
|
|
13
|
+
Per central mechanism, one `mcp__ShopwareDevKnowledgeBase__grep_docs { pattern: "<mechanism>", path: "platform/dev/<version>", mode: "files" }` — candidate KB paths only, never `read_doc`/`list_docs` a version directory (~340 KB index). Hand paths to the architect, which reads full pages and verifies; empty grep → `platform/synonyms.md`, then `platform/hubs`.
|
|
14
14
|
|
|
15
15
|
Evidence rules, carried in every step-4 brief:
|
|
16
16
|
1. **Live call site, not a fixture, same shape.** DI/service registration, a call site, or a passing test assertion — never a `*/Test*/**` class only a test instantiates; verified only by a live usage of the same shape of change (an `EntityExtension` adding associations doesn't verify one adding a scalar field). Fixture-only or no same-shape usage = unverified, raise it.
|
|
@@ -37,7 +37,7 @@ _Source: `sw-shopware-architect`'s report, verified in-agent per its evidence ru
|
|
|
37
37
|
| <!-- one line, "what will exist" --> | <!-- event/subscriber, tag, route, decoration target --> | <!-- entity/field/migration, or "none" --> | <!-- upgrade risk, performance, coupling, testability --> | <!-- file:line citation, or "per official docs: '<sentence>'" — never a bare link, never a fixture/Test-folder class with no call site --> |
|
|
38
38
|
|
|
39
39
|
**Verified assumptions:** <!-- mechanisms confirmed by real usage + docs, one line each -->
|
|
40
|
-
**Unverified / at risk:** <!-- anything marked `(unverified —
|
|
40
|
+
**Unverified / at risk:** <!-- anything marked `(unverified — static citation only)` — must also appear in §6 as an open question -->
|
|
41
41
|
|
|
42
42
|
<!-- Optional, added by the Specs Editor on first request — keep the line exactly in this shape: -->
|
|
43
43
|
<!-- Diagram: specs/NNNN-slug-spec.architecture.excalidraw -->
|
|
@@ -90,7 +90,7 @@ Blocks: AC-2
|
|
|
90
90
|
- [qa] against: one-line reason
|
|
91
91
|
-->
|
|
92
92
|
|
|
93
|
-
A question earns its place only if it changes architecture, data model, or test strategy, or is a decision still `(unverified —
|
|
93
|
+
A question earns its place only if it changes architecture, data model, or test strategy, or is a decision still `(unverified — static citation only)`. Any open question blocks *Ready for implementation*.
|
|
94
94
|
|
|
95
95
|
Rules: one block per question, a `**Q-n**` line, `[adr]`/`[gate]` tag right after the id for the ADR Extract/Keep and readiness-override asks, optional `Blocks:` line. Options are `- [ ] <Letter>: text`, 2–4 of them, exactly one `(recommended)`. Agent notes are indented ` - [<agent>] text` under the option they judge; a note under the question line only when no option is recommended. An answer is `[x]` on one option, or an own-answer line `- [x] ✎ text`. Older specs (a legacy question table) are converted to this format automatically on the first editor-mode write.
|
|
96
96
|
|
|
@@ -22,9 +22,18 @@ Implement one feature from its technical spec, under TDD, then hand off to full
|
|
|
22
22
|
|
|
23
23
|
### 0. Pre-check
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
**Probe what this run is about to use, never the whole environment.** Check only what the ACs in this run actually need, as file existence — never invoke `sw-setup`, which surveys twelve rows behind an `npx` registry call to answer two or three of them:
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
| This run has… | Probe |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| any AC | `vendor/shopware/core`, plus `vendor/bin/phpunit` for a PHPUnit AC |
|
|
30
|
+
| an e2e AC | `tests/acceptance/package.json`, `tests/acceptance/playwright.config.ts`, and `tests/acceptance/.env` defining `APP_URL`, `SHOPWARE_ADMIN_USERNAME`, `SHOPWARE_ADMIN_PASSWORD` |
|
|
31
|
+
| an e2e AC | Playwright browsers — the cache directory (`~/.cache/ms-playwright`, or the project-local browsers path). Never `npx playwright install --dry-run`: it reaches the network |
|
|
32
|
+
| a PHPUnit or Jest AC | in the target plugin: `phpunit.xml.dist`, `tests/TestBootstrap.php`, and `jest.admin.config.js` / `jest.storefront.config.js` only for the surface that AC touches |
|
|
33
|
+
|
|
34
|
+
An API-only feature never probes Playwright. Anything missing → stop, tell the user to run `/sw-setup` — it is the one place the environment is fixed, and this skill neither invokes nor repairs it. Never mark an AC `partly` for a missing environment.
|
|
35
|
+
|
|
36
|
+
**Shopware version — detect once, before spawning anything, never assume** (the first path is also the vendor/ probe above, so read it once): `vendor/shopware/core/composer.json` `version` → `composer.lock` → `composer.json` constraint ("unconfirmed"); PHP from the project runtime (`compose.yaml`, `.ddev/config.yaml`, `Dockerfile`), not the host. State it with evidence in every Agent-tool brief below — implementer spawns, architect escalation, QA e2e runs — so no sub-agent has to re-derive it; a version with no evidence must still be passed on as unconfirmed (e.g. constraint-only), never treated as certain. Unknown → ask the user.
|
|
28
37
|
|
|
29
38
|
|
|
30
39
|
Then work through the three reference files in this skill's directory, in order:
|
package/skills/sw-setup/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sw-setup
|
|
3
|
-
description: Print one environment-readiness table for the project's development/test setup — vendor/, Node, the editor CLIs, shopware-cli, the KB MCP, the acceptance-test project, Playwright browsers, its .env, per-plugin test scaffolding, the project wiki, `.gitignore` and whether the SW AH npm packages are current, plus the installer CLI's own configuration/drift status. Stops when every row is ticked. When rows are missing, asks one yes/no question and delegates the fix to the installer CLI. Use when asked to set up the project, check if the environment is ready, or bootstrap the tests. Never designs, implements or verifies a feature itself — that's sw-design-solution, sw-implement-feature and sw-verify-feature
|
|
3
|
+
description: Print one environment-readiness table for the project's development/test setup — vendor/, Node, the editor CLIs, shopware-cli, the KB MCP, the acceptance-test project, Playwright browsers, its .env, per-plugin test scaffolding, the project wiki, `.gitignore` and whether the SW AH npm packages are current, plus the installer CLI's own configuration/drift status. Stops when every row is ticked. When rows are missing, asks one yes/no question and delegates the fix to the installer CLI. Use when asked to set up the project, check if the environment is ready, or bootstrap the tests. Never designs, implements or verifies a feature itself — that's sw-design-solution, sw-implement-feature and sw-verify-feature; run this one up front, before them. Never writes a coding agent's configuration file itself — that's the installer CLI.
|
|
4
4
|
when_to_use: Trigger phrases — "set up the project", "is the environment ready", "bootstrap the tests", "sw-setup".
|
|
5
5
|
allowed-tools: Read Glob Grep AskUserQuestion Skill Bash mcp__ShopwareDevKnowledgeBase__kb_status Bash(npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@latest *) Bash(npx -y @execuro-sw-ecosystem/sw-specs-editor@latest *) Bash(npx -y @execuro-sw-ecosystem/sw-tender-discovery-tool@latest *)
|
|
6
6
|
---
|
|
@@ -28,10 +28,15 @@ question; it never restates or re-implements the install protocol.
|
|
|
28
28
|
|
|
29
29
|
## Called from other skills
|
|
30
30
|
|
|
31
|
-
`sw-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
`sw-verify-feature` invokes this skill once, before spawning, and passes the
|
|
32
|
+
table to its verifiers as `args`; one run standalone invokes it itself. A
|
|
33
|
+
caller passes no arguments and reads the printed table, never re-running it.
|
|
34
|
+
|
|
35
|
+
`sw-design-requirements`, `sw-design-solution` and `sw-implement-feature` do
|
|
36
|
+
**not** invoke it: each probes only what its own run uses and stops naming
|
|
37
|
+
`sw-setup` when one is missing. A full table is the price of surveying an
|
|
38
|
+
environment, not of one run's prerequisites — so this skill stays the one place
|
|
39
|
+
it is surveyed and fixed, run up front.
|
|
35
40
|
|
|
36
41
|
## Procedure
|
|
37
42
|
|