@execuro-sw-ecosystem/sw-ecosystem-agentic-harness 0.1.0

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.
Files changed (124) hide show
  1. package/.mcp.json +8 -0
  2. package/CHANGELOG.md +78 -0
  3. package/CONTRIBUTING.md +54 -0
  4. package/LICENSE +21 -0
  5. package/README.md +304 -0
  6. package/SECURITY.md +50 -0
  7. package/agents/sw-admin-frontend-developer.md +52 -0
  8. package/agents/sw-php-backend-developer.md +63 -0
  9. package/agents/sw-product-manager.md +62 -0
  10. package/agents/sw-qa-engineer.md +160 -0
  11. package/agents/sw-shopware-architect.md +79 -0
  12. package/agents/sw-storefront-developer.md +93 -0
  13. package/agents/sw-tender-editor.md +43 -0
  14. package/bin/cli.mjs +73 -0
  15. package/codex/agents/sw-admin-frontend-developer.toml +54 -0
  16. package/codex/agents/sw-php-backend-developer.toml +65 -0
  17. package/codex/agents/sw-product-manager.toml +66 -0
  18. package/codex/agents/sw-qa-engineer.toml +161 -0
  19. package/codex/agents/sw-shopware-architect.toml +81 -0
  20. package/codex/agents/sw-storefront-developer.toml +96 -0
  21. package/codex/agents/sw-tender-editor.toml +50 -0
  22. package/content/AGENTS.md +63 -0
  23. package/content/claude-settings.json +31 -0
  24. package/content/mcp-servers.json +18 -0
  25. package/copilot/agents/sw-admin-frontend-developer.agent.md +53 -0
  26. package/copilot/agents/sw-php-backend-developer.agent.md +64 -0
  27. package/copilot/agents/sw-product-manager.agent.md +65 -0
  28. package/copilot/agents/sw-qa-engineer.agent.md +160 -0
  29. package/copilot/agents/sw-shopware-architect.agent.md +80 -0
  30. package/copilot/agents/sw-storefront-developer.agent.md +94 -0
  31. package/copilot/agents/sw-tender-editor.agent.md +46 -0
  32. package/lib/actions.mjs +449 -0
  33. package/lib/commands.mjs +446 -0
  34. package/lib/companions.mjs +117 -0
  35. package/lib/content.mjs +101 -0
  36. package/lib/fsx.mjs +188 -0
  37. package/lib/guide.mjs +98 -0
  38. package/lib/hosts.mjs +283 -0
  39. package/lib/lock.mjs +158 -0
  40. package/lib/merge.mjs +338 -0
  41. package/lib/out.mjs +74 -0
  42. package/mcp.json +10 -0
  43. package/package.json +58 -0
  44. package/plugin.json +19 -0
  45. package/skills/sw-design-requirements/SKILL.md +102 -0
  46. package/skills/sw-design-requirements/reference/clarification-loop.md +20 -0
  47. package/skills/sw-design-requirements/reference/confidence-rubric.md +82 -0
  48. package/skills/sw-design-requirements/reference/consistency-probes.md +65 -0
  49. package/skills/sw-design-requirements/reference/editor-gate.md +15 -0
  50. package/skills/sw-design-requirements/reference/editor-mode.md +15 -0
  51. package/skills/sw-design-requirements/reference/prd-confidence-checklist.md +95 -0
  52. package/skills/sw-design-requirements/reference/prd-template.md +153 -0
  53. package/skills/sw-design-requirements/reference/readiness-and-report.md +21 -0
  54. package/skills/sw-design-requirements/reference/splitting-guidelines.md +69 -0
  55. package/skills/sw-design-solution/SKILL.md +48 -0
  56. package/skills/sw-design-solution/reference/adr-flow.md +13 -0
  57. package/skills/sw-design-solution/reference/adr-template.md +40 -0
  58. package/skills/sw-design-solution/reference/clarification-loop.md +13 -0
  59. package/skills/sw-design-solution/reference/draft-and-spawn.md +21 -0
  60. package/skills/sw-design-solution/reference/editor-mode.md +16 -0
  61. package/skills/sw-design-solution/reference/pre-check-and-target.md +19 -0
  62. package/skills/sw-design-solution/reference/readiness-and-report.md +15 -0
  63. package/skills/sw-design-solution/reference/research-and-evidence.md +25 -0
  64. package/skills/sw-design-solution/reference/tech-spec-template.md +112 -0
  65. package/skills/sw-design-solution/reference/toolchain-conformance.md +9 -0
  66. package/skills/sw-discover-tender/SKILL.md +68 -0
  67. package/skills/sw-discover-tender/reference/agent-briefs.md +135 -0
  68. package/skills/sw-discover-tender/reference/analysis-template.md +224 -0
  69. package/skills/sw-discover-tender/reference/assumption-catalogue.md +104 -0
  70. package/skills/sw-discover-tender/reference/client-question-rules.md +47 -0
  71. package/skills/sw-discover-tender/reference/confidence-rubric.md +80 -0
  72. package/skills/sw-discover-tender/reference/context-parameters.md +116 -0
  73. package/skills/sw-discover-tender/reference/coverage-mapping.md +62 -0
  74. package/skills/sw-discover-tender/reference/editor-mode.md +11 -0
  75. package/skills/sw-discover-tender/reference/editor-session.md +115 -0
  76. package/skills/sw-discover-tender/reference/estimation-model.md +106 -0
  77. package/skills/sw-discover-tender/reference/procedure.md +98 -0
  78. package/skills/sw-discover-tender/reference/response-rules.md +13 -0
  79. package/skills/sw-document-feature/SKILL.md +64 -0
  80. package/skills/sw-document-feature/reference/adr-promotion.md +64 -0
  81. package/skills/sw-document-feature/reference/built-check.md +71 -0
  82. package/skills/sw-document-feature/reference/domain-guidelines.md +59 -0
  83. package/skills/sw-document-feature/reference/page-rules.md +129 -0
  84. package/skills/sw-document-feature/reference/procedure.md +58 -0
  85. package/skills/sw-document-feature/reference/scaffold/README.md +78 -0
  86. package/skills/sw-document-feature/reference/scaffold/_config.yml +51 -0
  87. package/skills/sw-document-feature/reference/scaffold/adr/index.md +44 -0
  88. package/skills/sw-document-feature/reference/scaffold/baseline/glossary.md +55 -0
  89. package/skills/sw-document-feature/reference/scaffold/baseline/tech-stack.md +48 -0
  90. package/skills/sw-document-feature/reference/scaffold/domains/index.md +55 -0
  91. package/skills/sw-document-feature/reference/scaffold/domains/platform/configuration.md +54 -0
  92. package/skills/sw-document-feature/reference/scaffold/domains/platform/customization-guidelines.md +47 -0
  93. package/skills/sw-document-feature/reference/scaffold/domains/platform/debugging.md +55 -0
  94. package/skills/sw-document-feature/reference/scaffold/domains/platform/environments-and-deployment.md +49 -0
  95. package/skills/sw-document-feature/reference/scaffold/domains/platform/extensions-inventory.md +40 -0
  96. package/skills/sw-document-feature/reference/scaffold/domains/platform/index.md +39 -0
  97. package/skills/sw-document-feature/reference/scaffold/domains/platform/logging.md +46 -0
  98. package/skills/sw-document-feature/reference/scaffold/guidelines/documentation-guidelines.md +102 -0
  99. package/skills/sw-document-feature/reference/scaffold/guidelines/index.md +50 -0
  100. package/skills/sw-document-feature/reference/scaffold/index.md +68 -0
  101. package/skills/sw-document-feature/reference/scaffold/vanilla/README.md +24 -0
  102. package/skills/sw-document-feature/reference/scaffold/vanilla/adr/index.md +36 -0
  103. package/skills/sw-document-feature/reference/scaffold/vanilla/index.md +68 -0
  104. package/skills/sw-document-feature/reference/setup-wiki.md +142 -0
  105. package/skills/sw-document-feature/reference/source-mapping.md +71 -0
  106. package/skills/sw-document-feature/reference/templates/adr.md +26 -0
  107. package/skills/sw-document-feature/reference/templates/domain-index.md +36 -0
  108. package/skills/sw-document-feature/reference/templates/feature-page.md +64 -0
  109. package/skills/sw-document-feature/reference/templates/guideline.md +42 -0
  110. package/skills/sw-implement-feature/SKILL.md +52 -0
  111. package/skills/sw-implement-feature/reference/ac-loop.md +24 -0
  112. package/skills/sw-implement-feature/reference/build-order.md +17 -0
  113. package/skills/sw-implement-feature/reference/delegation.md +18 -0
  114. package/skills/sw-setup/SKILL.md +144 -0
  115. package/skills/sw-setup/reference/rows.md +223 -0
  116. package/skills/sw-verify-feature/SKILL.md +64 -0
  117. package/skills/sw-verify-feature/reference/reconcile-and-report.md +42 -0
  118. package/skills/sw-verify-feature/reference/verification-report-template.md +57 -0
  119. package/skills/sw-verify-feature-ac-tests/SKILL.md +76 -0
  120. package/skills/sw-verify-feature-ac-tests/reference/audit-execute-score.md +40 -0
  121. package/skills/sw-verify-feature-architecture/SKILL.md +66 -0
  122. package/skills/sw-verify-feature-architecture/reference/guidelines-and-twig.md +27 -0
  123. package/skills/sw-verify-feature-code-quality/SKILL.md +73 -0
  124. package/skills/sw-verify-feature-code-quality/reference/gates.md +22 -0
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: sw-implement-feature
3
+ description: Implement a feature from its technical spec (specs/NNNN-slug-spec.md, written by sw-design-solution) following TDD — tests first per acceptance criterion, then the implementation, fixing until every relevant test passes (including that AC's own acceptance/e2e test, run immediately, not deferred), running Shopware's own shopware-cli fixers/static-analysis per AC to conform to Shopware's coding standards as code is written rather than after the fact. Builds ACs group by group per the spec's Parallel groups/Depends on data, fanning out independent ACs to concurrent agent spawns instead of one at a time. Runs sw-verify-feature as its final step to produce a full verification report. Use when asked to implement, build, or code a feature/epic from an existing tech spec.
4
+ when_to_use: Trigger phrases — "implement spec 0007", "build this feature", "code the epic-1 spec", "implement the tech spec".
5
+ argument-hint: [specs/NNNN-slug-spec.md]
6
+ allowed-tools: Read Write Edit Glob Grep Bash Agent mcp__ShopwareDevKnowledgeBase__list_docs mcp__ShopwareDevKnowledgeBase__grep_docs mcp__ShopwareDevKnowledgeBase__read_doc mcp__ShopwareDevKnowledgeBase__kb_status
7
+ ---
8
+
9
+ # sw-implement-feature
10
+
11
+ Implement one feature from its technical spec, under TDD, then hand off to full verification.
12
+
13
+ ## Inputs
14
+
15
+ | Argument | Behaviour |
16
+ | --- | --- |
17
+ | Path to `specs/NNNN-slug-spec.md` | Implement this spec |
18
+ | Path to `specs/NNNN-slug.md` (a PRD, no spec) | Tell the user to run `sw-design-solution` first — do not improvise a spec |
19
+ | Nothing | Ask the user for the spec path |
20
+
21
+ ## Procedure
22
+
23
+ ### 0. Pre-check
24
+
25
+ Invoke `sw-setup` once. Rows an AC's tests need — vendor/ (PHPUnit); Acceptance-test project, Playwright browsers, ATS env (e2e); Plugin tests (target plugin) — must be ticked; unticked → stop, tell the user to run `/sw-setup`. Never mark an AC `partly` for a missing environment.
26
+
27
+ **Shopware version — detect once, before spawning anything, 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. 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
+
29
+
30
+ Then work through the three reference files in this skill's directory, in order:
31
+
32
+ | File | When | What it decides |
33
+ | --- | --- | --- |
34
+ | `reference/build-order.md` | before spawning anything | the spec's §3 Parallel groups, the fallback for specs without dependency data, the proven-approach guard, and when to stop a group |
35
+ | `reference/delegation.md` | once the build order is known | which agent owns each AC, what every brief must contain, the KB docs rule, and the architect escalation path |
36
+ | `reference/ac-loop.md` | once per acceptance criterion | steps 1-5 — test first, implement, conform, confirm (including running that AC's e2e now), scope check — plus the rules on multi-interface ACs, deviating from the spec, and migrations |
37
+
38
+ You orchestrate; you do not write feature code yourself.
39
+
40
+ ## Completion check
41
+
42
+ Once every AC in the spec has been implemented:
43
+
44
+ 1. Verify that every AC has relevant code and a passing test — unit/integration and, where applicable, its e2e scenario already run per-AC in step 4 above — walk the spec's AC list explicitly, do not assume.
45
+ 2. If any test is not passing, fix the implementation and re-check. Do not report completion with known failing tests.
46
+ 3. Once all relevant tests pass, run the **`sw-verify-feature`** skill against the same spec path, as the final step of this flow — since every AC's tests (including e2e) already ran during implementation, this is a full-feature audit and cross-check, not the first execution of any test, and it still produces the authoritative pass/not pass/partly report per AC.
47
+
48
+ **Status tags.** After an AC's own tests pass, you may mark it in the spec by inserting `[done]` (or `[partly]` when only part of the plan landed) directly after its bold id — `- **AC-2** [done] (FR-3)` — and the same on the matching `- **FR-n**` / `- **AC-n**` line of the PRD. Edit that line only; touch nothing else in either document. The Specs Editor and `sw-verify-feature` read and preserve these tags.
49
+
50
+ ## Report
51
+
52
+ After `sw-verify-feature` completes, relay its report to the user. Do not produce a second, separate summary — `sw-verify-feature`'s report is the source of truth for completion status.
@@ -0,0 +1,24 @@
1
+ # The per-AC loop
2
+
3
+ Entered once per acceptance criterion, by the agent the delegation table routed it to. Steps 1-5 run in order; none is optional.
4
+
5
+ For each AC:
6
+
7
+ 1. **Test first.** Write the test(s) the spec defines for this AC — unit/integration, and, when the AC is user-facing, the e2e scenario the spec planned for it too. Do not defer writing the e2e test to `sw-verify-feature` — it is written now, alongside the unit/integration tests, so it exists to run in step 4. Confirm they fail for the right reason.
8
+ 2. **Implement.** Write the minimum code to satisfy the spec's architectural decision for this AC.
9
+ 3. **Conform.** Before running tests, bring this AC's new/changed code in line with Shopware's own toolchain, so conformance issues are caught and fixed while the AC is still open, not accumulated until `sw-verify-feature`'s final pass. If step 0's table shows the shopware-cli row unticked, skip this whole step for this AC and say so once, not per-AC — installing it is not this skill's job. Otherwise, scoped to `custom/plugins/<PluginName>` (or the narrower directory this AC actually touched):
10
+ - **Fix** (mutates code) — `shopware-cli extension fix --only <tools> custom/plugins/<PluginName>`, using only the tools that have a real `Fix()` in shopware-cli's own source (confirmed from `internal/verifier/*.go`): `eslint`,`stylelint` for Admin/Storefront JS/SCSS this AC touched, `rector` for PHP changes, `admin-twig` for Administration Twig templates, `symfony-xml` if the AC left a `services.xml`/`routes.xml` behind. Do **not** put `php-cs-fixer` or `phpstan` in this `--only` list — their `Fix()` is a no-op in shopware-cli; nothing will happen and it wastes a run.
11
+ - **Format** (style-only, still mutates) — `shopware-cli extension format --only <tools> custom/plugins/<PluginName>`, using `php-cs-fixer` for PHP changes and/or `prettier` for JS/JSON changes this AC touched — these two only do real work through `format`, not `fix`.
12
+ - **Validate** (read-only check, must fix anything it reports by hand) — `shopware-cli extension validate --full --only=phpstan,eslint,stylelint custom/plugins/<PluginName>` scoped to the areas this AC touched (PHP → phpstan; Admin/Storefront JS → eslint; SCSS → stylelint). **`--only` has no effect without `--full`** — passing `--only` alone silently resets to the default `sw-cli` structural check and none of these three run; always pass both flags together. Fix anything it reports before moving on — do not defer a known conformance error to the end-of-feature verification pass.
13
+ - This three-step sequence is a lighter, per-AC version of the full gates `sw-verify-feature` runs at the end (`sw-verify-feature-code-quality` for phpstan/eslint/stylelint at whole-plugin scope, `sw-verify-feature-architecture` for the `admin-twig`/`storefront-twig` read-only Twig lint gate); it exists to prevent surprises there, not to replace it. `sw-cli` itself (the default structural/manifest validation) and `storefront-twig` (no real `Fix()`) are check-only tools this skill never runs — that's `sw-verify-feature`'s job.
14
+ 4. **Confirm.** Run only the test(s) relevant to this AC (and any test it could plausibly have broken) — never the full suite mid-implementation. If they fail, fix the implementation, not the test, unless the test itself is wrong relative to the spec.
15
+ - **Run this AC's acceptance test now, not later.** Do not wait for the end-of-feature `sw-verify-feature` run to be the first time an AC's acceptance-level test executes. If the AC is user-facing and has an e2e scenario, execute it immediately after the unit/integration tests pass: spawn `sw-qa-engineer` with the spec path, this AC's id, the detected Shopware/PHP version and evidence, and the e2e scenario written in step 1, and have it run that scenario now via the Playwright MCP tools. Treat a failure here exactly like a failing unit test — the AC is not done until it passes.
16
+ - This means every AC leaves this loop already proven at both levels (unit/integration and acceptance/e2e). `sw-verify-feature`'s job at the end is to audit and re-confirm across the whole feature, not to be the first execution of any AC's test.
17
+ 5. **Scope check.** Run `git diff --stat` for this AC's changes. Every file listed must be explained by this AC's §3 plan or an existing §6 Decision Log entry — anything else gets reverted or added to §6 with a one-line reason before moving to the next AC.
18
+
19
+ If the AC's data is exposed through more than one interface (Admin UI, Storefront, Store API, Admin API), the test(s) for it must check the real shape of **every** interface touched — rendered HTML, raw JSON response — not only a PHP entity accessor. Accessor methods can return a value through a fallback (e.g. an extension bag) that the actual serialized/rendered output does not expose the same way; a test that only calls `->get()` can pass while the feature is broken for every real consumer.
20
+
21
+ Do not deviate from the spec's technical decisions. If the spec is ambiguous or wrong for a given AC, escalate to `sw-shopware-architect` (see above) rather than inventing a different technical approach. **Stop after the first workaround, not after several:** if satisfying an AC requires decorating, subclassing, or overriding a framework-internal class or service that the spec did not name, treat that as "the spec is wrong for this AC" immediately. Do not add a second override to patch a side effect of the first — report back instead of stacking fixes.
22
+
23
+ If the spec's plan touches the database schema (migration, new table/column), run that migration against every environment the feature will be checked in before any manual or live check — not just the environment the automated test suite bootstraps for itself. A migration applied only where tests auto-provision it, and not in the environment used for manual verification, produces confusing "column/table not found" failures that look like implementation bugs.
24
+
@@ -0,0 +1,17 @@
1
+ # Build order and parallelisation
2
+
3
+ Entered from step 0 of `sw-implement-feature`, before any agent is spawned. It decides *what* is built in which order and what may run concurrently.
4
+
5
+ Work through the spec's §3 **Parallel groups** (written by `sw-design-solution`), one group at a time, in the build order given — not raw AC order. Within a group, every AC is implemented concurrently; a group only starts once every AC it depends on (per each AC's `Depends on` line) has gone fully green (test passing, conformance clean per step 3 below).
6
+
7
+ **When the spec has no Parallel groups / Depends on data (older spec).** Fall back to determining parallel safety yourself, conservatively: default to sequential, and only parallelize a set of ACs when **all** of the following hold:
8
+ - None of them touch the same migration, entity/DAL definition, or plugin service registration (`services.xml`) — check the spec's data model section, not just the AC text.
9
+ - At least one AC from the same architectural area (entity, association, core extension point) has already gone green sequentially first, so the underlying approach is proven against the real framework, not still an assumption.
10
+ - They don't depend on each other's output (one AC's test fixture, service, or UI element being present for another's).
11
+
12
+ Note in the final report that the spec predates dependency data, so re-run `sw-design-solution` on it to unlock full parallelization next time.
13
+
14
+ **Even with an explicit group, keep the proven-approach guard.** The spec's dependency data tells you *what* is safe to parallelize architecturally, not that the approach has been exercised against the framework yet. For the first group, land one AC from each distinct architectural area (entity, association, core extension point) before fanning the rest out — once proven green, the rest of that area's ACs across any group go fully parallel.
15
+
16
+ If a parallelized AC's test fails for an architectural reason (not a simple bug), stop all parallel work in that group — the shared assumption behind them may be wrong, and continuing would just multiply the rework. Escalate per the Architect escalation rule below before resuming the group.
17
+
@@ -0,0 +1,18 @@
1
+ # Delegation, briefs and escalation
2
+
3
+ Entered from step 0 of `sw-implement-feature`, once the build order is known. It decides *who* builds each AC and what they are told.
4
+
5
+ **Delegation.** You orchestrate; you do not write feature code yourself. Route each AC to the agent that owns its layer via the Agent tool. Within a parallelized group, spawn one agent per AC concurrently (same message, multiple Agent calls) — dependencies are already resolved. Outside a parallel group (sequential fallback, or a group of size one), spawn one AC per call as before:
6
+
7
+ | Step | AC touches | Agent |
8
+ | --- | --- | --- |
9
+ | 1 — tests | every AC (all test levels the spec lists, including the Playwright spec for e2e-tagged ACs) | `sw-qa-engineer` |
10
+ | 2–4 — code | PHP: DAL entities, migrations, Store/Admin API routes, services/decorators, subscribers, flow/rule, message handlers | `sw-php-backend-developer` |
11
+ | 2–4 — code | Administration: Vue modules/components, ACL privileges, snippets | `sw-admin-frontend-developer` |
12
+ | 2–4 — code | Storefront: Twig, theme/SCSS, storefront controllers/pages/pagelets, storefront JS plugins | `sw-storefront-developer` |
13
+
14
+ An AC spanning layers is split: backend first (route contract fixed), then Admin/Storefront against it. Each brief contains: the spec path, the AC id, the spec's architectural decision for that AC, the detected Shopware/PHP version and its evidence, the KB doc paths the spec's Decision Log cites for that AC (`platform/dev/<version>/…`), the gating conditions above, and the instruction to run steps 1–5 below and reply in the agent's own report format. Review the report; if anything is red, re-spawn the same agent with the failure. Do not fix the agent's output yourself.
15
+
16
+ **Docs (ShopwareDevKnowledgeBase MCP).** Tell each implementing agent: `read_doc` the cited pages before writing code; when the spec names a mechanism without a citation, `grep_docs { pattern: "<mechanism>", path: "platform/dev/<version>" }` and read the page first. The version directory matches the installed `shopware/core` (`composer.lock`). The spec's decisions still win; the docs explain how, not whether.
17
+
18
+ **Architect escalation.** When an implementer reports the spec is ambiguous or wrong for an AC, or the named extension point misbehaves (see the "stop after the first workaround" rule below), first `grep_docs` the KB for that mechanism yourself and `read_doc` the hit. Then spawn `sw-shopware-architect` with the spec path, AC id, the implementer's report, the KB page path (or "no KB page"), and the same detected Shopware/PHP version and evidence, before doing anything else. If the architect's decision stays within the spec, pass it to the implementer and continue; if it changes the spec, stop and report to the user — that change belongs in `sw-design-solution`.
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: sw-setup
3
+ description: Print one environment-readiness table for the project's development/test setup — containers, 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 and `.gitignore`, 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, which call this skill first. Never writes a host configuration file itself — that's the installer CLI.
4
+ when_to_use: Trigger phrases — "set up the project", "is the environment ready", "bootstrap the tests", "sw-setup".
5
+ allowed-tools: Read Glob Grep AskUserQuestion Skill Bash mcp__ShopwareDevKnowledgeBase__kb_status Bash(npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 *)
6
+ ---
7
+
8
+ # sw-setup
9
+
10
+ One readiness table for this project's development/test environment. No
11
+ arguments. Read-only by default; writes only after the user answers yes.
12
+
13
+ ## This file is a stub
14
+
15
+ The harness ships as an npm package with an installer CLI
16
+ (`@execuro-sw-ecosystem/sw-ecosystem-agentic-harness`) that owns every write
17
+ to a host's configuration. Do not follow this file's workflow or rule-list
18
+ instructions as the protocol for what gets installed or how — an installed
19
+ copy of this skill can go stale while the CLI does not. For the current
20
+ source of truth, run:
21
+
22
+ ```
23
+ npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 guide
24
+ ```
25
+
26
+ This skill only renders the CLI's output as a table and relays its one
27
+ question; it never restates or re-implements the install protocol.
28
+
29
+ ## Called from other skills
30
+
31
+ `sw-design-solution`, `sw-implement-feature` and `sw-verify-feature` invoke
32
+ this skill as their own first step and read its table; they never repeat
33
+ these checks themselves. A caller passes no arguments and reads the printed
34
+ table from this run's output — it does not re-run `sw-setup`'s checks.
35
+
36
+ ## Procedure
37
+
38
+ ### 1. Status
39
+
40
+ Run:
41
+
42
+ ```
43
+ npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 status
44
+ ```
45
+
46
+ It prints one JSON object (`ok`, `next_step`, `help`, and its own
47
+ `hosts[]`/`drift[]` configuration state). Alongside it, run every
48
+ environment row's check from `reference/rows.md` in this skill's directory —
49
+ read-only, seconds each: file/directory existence, one `docker compose ps`,
50
+ one version command, one `kb_status` call. Never write, never install, never
51
+ ask a question in this step.
52
+
53
+ Print one checkbox list, one line per row — the environment rows first, then
54
+ one line per configuration item the CLI's `hosts[]`/`drift[]` reports:
55
+
56
+ ```
57
+ - [x] Containers — web running
58
+ - [x] vendor/ — shopware/core 6.7.13.0
59
+ - [ ] Node — 18.x (need >= 20)
60
+ - [-] Visual editors (optional) — Specs Editor not installed, Tender tool not installed
61
+ - [x] shopware-cli — 0.16.10
62
+ - [x] KB MCP — platform: implemented
63
+ - [ ] Acceptance-test project — tests/acceptance/ missing
64
+ - [ ] Playwright browsers — not installed
65
+ - [ ] ATS env — tests/acceptance/.env missing
66
+ - [x] Plugin tests — AhCheckout: phpunit + jest ok
67
+ - [ ] Project wiki — docs/project-wiki/ missing
68
+ - [ ] Installer config — .mcp.json entry: drift (from CLI status)
69
+ ```
70
+
71
+ Per-plugin rows print one line per directory under `custom/plugins/`, e.g.
72
+ `- [ ] Plugin tests — AcmeFeature: jest.admin.config.js missing`.
73
+
74
+ ### 2. All ticked
75
+
76
+ Print one closing line: `Environment ready.` Stop. No question.
77
+
78
+ ### 3. Missing rows
79
+
80
+ For a missing environment row, research only what it needs: the guideline
81
+ sections `reference/rows.md` cites for that row
82
+ (`shopware-project-qa-guidelines.md` §3.3–§3.7, §6.1), `compose.yaml` for the
83
+ service name, `custom/plugins/*` names for per-plugin rows.
84
+
85
+ For a missing/drifted configuration row, do not research or plan the fix
86
+ yourself — the CLI's `plan` command already has it:
87
+
88
+ ```
89
+ npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 plan
90
+ ```
91
+
92
+ List the concrete steps in plain words: environment-row fixes in order
93
+ (Containers → vendor/ → Visual editors → KB MCP → Acceptance-test project →
94
+ Playwright browsers → ATS env → Plugin tests → Project wiki), then the CLI's
95
+ planned configuration changes last. Skip any row already ticked.
96
+
97
+ Ask exactly one question: "Do this and that?" with the steps spelled out in
98
+ plain words (no command dump). Ask the user with a structured question tool
99
+ if you have one (Claude Code: `AskUserQuestion`; Codex: `request_user_input`,
100
+ which is non-blocking outside Plan mode — so end the turn after asking).
101
+ Options:
102
+ - **Yes, run it** — run the environment-row fixes in order, then
103
+ `npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 apply --yes`
104
+ for the configuration changes, then re-run step 1 and print the final table.
105
+ - **No, stop** — stop; the table from step 1 is already on screen.
106
+
107
+ ### 4. Rules
108
+
109
+ - Everything stays under the project directory; never a global install,
110
+ never a path under `~`.
111
+ - Host tools that cannot live under the project (Node, shopware-cli, Docker
112
+ itself) are reported with install advice only, never installed.
113
+ - Credentials (ATS env values) are prompted for as part of the single
114
+ question in step 3, never invented, never printed back once entered.
115
+ - A fix that needs a running container states so in the step list and stops
116
+ before running if the Containers row is still unticked at execution time.
117
+ - The Project wiki fix invokes `sw-document-feature --setup` with the Skill
118
+ tool; the KB MCP row only reports whether the platform layer is built —
119
+ the corpus ships already built inside the
120
+ `@execuro-sw-ecosystem/sw-dev-knowledge-base-mcp` package. If `platform` is
121
+ not `implemented`, the fix is to check the registration (re-run the
122
+ installer CLI's `apply --yes`) or update that package — never build a
123
+ corpus here. Neither is replicated in this skill.
124
+ - This skill never writes a host configuration file itself (`.mcp.json`,
125
+ permission grants, `.gitignore` lines). Every such write goes through the
126
+ installer CLI's `apply --yes`, run only after the user's yes.
127
+
128
+ ### 5. Report
129
+
130
+ Print the final table (from step 1, or re-run after step 3's fix), then one
131
+ line:
132
+ - `Ready for: design · implement · verify` when every row is ticked, or
133
+ - the first row still unticked and which skills it blocks, per
134
+ `reference/rows.md`'s "Blocks" line for that row (environment rows), or the
135
+ CLI's own `next_step` (configuration rows) — e.g. `Blocked: vendor/ —
136
+ blocks sw-design-solution, sw-implement-feature, sw-verify-feature`.
137
+
138
+ ## Reference files
139
+
140
+ `reference/rows.md` in this skill's directory — the twelve environment rows:
141
+ check command(s), what "ticked" means, the fix steps verbatim from the
142
+ guideline, and which skills the row blocks. Host configuration state (what
143
+ gets installed into `.mcp.json`, permissions, `.gitignore`) is not in this
144
+ file — it comes from the installer CLI's `status`/`plan`/`apply` output.
@@ -0,0 +1,223 @@
1
+ # Readiness rows
2
+
3
+ Eleven environment rows. Each: check (read-only), what "ticked" means, the fix
4
+ (only run on approval, in this order), and which skills the row blocks when
5
+ unticked. Host configuration files (`.mcp.json` entries, `.gitignore` lines,
6
+ permission grants) are not rows here — the installer CLI owns them and
7
+ reports their state in its own `status`/`plan` output; see `SKILL.md`.
8
+
9
+ ## 1. Containers
10
+
11
+ - **Check:** `docker compose ps` — service `web` (or the service named in
12
+ `compose.yaml`) shows `running`/`healthy`.
13
+ - **Ticked:** the `web` service is up.
14
+ - **Fix:** `docker compose up -d` (guideline §6.1). If the shop was never
15
+ installed: `docker compose exec web php bin/console system:install --basic-setup --force --no-interaction` (guideline §6.1).
16
+ - **Blocks:** every other row's fix that runs `docker compose exec web …`
17
+ (vendor/, plugin tests). Design/implement/verify skills that need a running
18
+ shop for live checks.
19
+
20
+ ## 2. vendor/
21
+
22
+ - **Check:** `vendor/shopware/core` exists, `composer.lock` exists,
23
+ `vendor/bin/phpunit` exists — file presence only, never a host
24
+ executable-bit check: composer runs inside the container, so the file can
25
+ land `-rw-------` on the host and still run fine inside the container
26
+ (guideline §6.2).
27
+ - **Ticked:** all three present; report the `shopware/core` version from
28
+ `composer.lock`.
29
+ - **Fix:** `docker compose exec web composer install --no-interaction`
30
+ (guideline §6.1 — "a vendor tree built with `--no-dev` has no
31
+ `vendor/bin/phpunit`"). Needs the Containers row ticked first.
32
+ - **Blocks:** `sw-design-solution`, `sw-implement-feature`,
33
+ `sw-verify-feature` (and its architecture/code-quality/ac-tests sub-skills).
34
+
35
+ ## 3. Node
36
+
37
+ - **Check:** `node --version`; parse major and minor.
38
+ - **Ticked:** ≥ 20. Warn (do not fail) when < 20.15: the Tender Discovery Tool
39
+ needs `zlib.crc32` for the xlsx write-back, so `export --xlsx` will not run
40
+ below 20.15 while everything else does.
41
+ - **Fix:** none — host tool. Report the install advice only: use the
42
+ project's documented Node version manager, or https://nodejs.org/. Never
43
+ install it globally on the user's behalf.
44
+ - **Blocks:** the Specs Editor, the Tender Discovery Tool, the KB MCP server
45
+ (the knowledge-base MCP), the acceptance-test project,
46
+ Playwright.
47
+
48
+ ## 4. Visual editors (optional)
49
+
50
+ The Specs Editor and the Tender Discovery Tool are **optional add-ons**, not
51
+ part of this plugin. The installer CLI installs them itself, per host — this
52
+ row never runs a companion package's own install command.
53
+
54
+ So this row never blocks readiness. It asks.
55
+
56
+ - **Check:** read `companions[]` from the `status` output the skill already
57
+ ran in step 1 — each entry's `available`, `installed_for` (the hosts it is
58
+ placed in), and `install` (the npm command, when missing). Never probe a
59
+ path and never run a companion package by hand; the CLI owns both.
60
+ - **Ticked:** `[x]` when a companion's `available` is true and
61
+ `installed_for` includes this host; `[-]` when the user has declined it.
62
+ Only an unanswered offer shows `[ ]`, and even then it does not hold the
63
+ table open — report it as optional and move on.
64
+ - **Fix:** offer each missing companion inside step 3's single question,
65
+ naming what it buys, not how it works: "Specs Editor — review a PRD or
66
+ tech spec on a live page, with notes, question answers and diagrams.
67
+ Install?" — and "Tender Discovery Tool — read a client tender workbook,
68
+ confirm its column mapping and review the analysis on a live page.
69
+ Install?" On yes, for each accepted one: `npm i -D <package>@0.1.0` (the
70
+ `package` field from `companions[]`), then re-run
71
+
72
+ ```
73
+ npx -y @execuro-sw-ecosystem/sw-ecosystem-agentic-harness@0.1.0 apply --yes
74
+ ```
75
+
76
+ which places one `SKILL.md` per companion into each selected host's own
77
+ skills directory, records it, and removes it again on uninstall. **Never
78
+ run the companion package's own `install-skill`** — with no `--target` it
79
+ defaults to Claude Code's own skills directory, wrong for a Codex, Copilot
80
+ or Cursor install. Needs the Node row ticked.
81
+ - **On no:** record the decline and do not re-ask on the next run. `apply`
82
+ keeps reporting that skill as `skipped` — the intended steady state, not a
83
+ fault. `--editor` on `sw-design-requirements` / `sw-design-solution` /
84
+ `sw-discover-tender` then stops with one line naming this skill.
85
+ - **Blocks:** Specs Editor missing → `sw-design-requirements --editor`,
86
+ `sw-design-solution --editor`, the `sw-specs-editor` skill. Tender
87
+ Discovery Tool missing → `sw-discover-tender --editor` and its `.xlsx`
88
+ import, plus the `sw-tender-discovery-tool` skill.
89
+
90
+ ## 5. shopware-cli
91
+
92
+ - **Check:** `command -v shopware-cli`.
93
+ - **Ticked:** present on `PATH`.
94
+ - **Fix:** none — host tool. Report the install advice only: Homebrew cask
95
+ `shopware-cli` (verified in `sw-verify-feature-architecture`, step 4).
96
+ Never install it on the user's behalf.
97
+ - **Blocks:** `sw-verify-feature-architecture`, `sw-verify-feature-code-quality`
98
+ (static analysis, Twig linters), `sw-implement-feature` (per-AC
99
+ `extension fix`/`extension validate`).
100
+
101
+ ## 6. KB MCP
102
+
103
+ - **Check:** `mcp__ShopwareDevKnowledgeBase__kb_status` reports the `platform`
104
+ layer as `implemented`. (Whether the `ShopwareDevKnowledgeBase` entry
105
+ exists in `.mcp.json` is installer configuration, not checked here — the
106
+ installer CLI's `status`/`plan` output covers it.)
107
+ - **Ticked:** `platform` `implemented`.
108
+ - **Fix:** the entry itself is installed by the installer CLI (`apply`), not
109
+ by this skill. The corpus ships already built, inside the
110
+ `@execuro-sw-ecosystem/sw-dev-knowledge-base-mcp` package — nobody
111
+ consuming this package builds one. If `platform` is not `implemented`,
112
+ check the registration first: does `.mcp.json` list the
113
+ `ShopwareDevKnowledgeBase` entry, and is `sw-dev-knowledge-base-mcp`
114
+ current? The fix is to re-run the installer CLI's `apply --yes`, or bump
115
+ the `sw-dev-knowledge-base-mcp` package to a version that ships the
116
+ corpus — never build one locally.
117
+ - **Blocks:** `sw-design-requirements` (stock-behaviour lookup),
118
+ `sw-design-solution` step 0.5/step 3 (KB grep), `sw-product-manager`,
119
+ `sw-shopware-architect`.
120
+
121
+ ## 7. Acceptance-test project
122
+
123
+ - **Check:** `tests/acceptance/package.json` exists and lists
124
+ `@shopware-ag/acceptance-test-suite` as a dependency;
125
+ `tests/acceptance/playwright.config.ts` exists;
126
+ `tests/acceptance/fixtures/BaseTestFile.ts` exists.
127
+ - **Ticked:** all three present.
128
+ - **Fix (guideline §3.7, host, once):**
129
+ ```bash
130
+ mkdir -p tests/acceptance && cd tests/acceptance
131
+ npm init -y && npm pkg set type=module
132
+ npm install -D @playwright/test @shopware-ag/acceptance-test-suite dotenv
133
+ ```
134
+ then write `playwright.config.ts` and `fixtures/BaseTestFile.ts` from the
135
+ templates quoted in guideline §3.7 verbatim (do not paraphrase — Playwright
136
+ fails on a malformed config). Needs the Node row ticked.
137
+ - **Blocks:** `sw-implement-feature` (e2e authoring by `sw-qa-engineer`),
138
+ `sw-verify-feature-ac-tests` (Playwright execution).
139
+
140
+ ## 8. Playwright browsers
141
+
142
+ - **Check:** `npx playwright install --dry-run` output (or
143
+ `~/.cache/ms-playwright`/the project-local browsers path) shows Chromium
144
+ installed for the Playwright version in `tests/acceptance/package.json`.
145
+ - **Ticked:** Chromium present.
146
+ - **Fix:** `npx playwright install --with-deps chromium` run inside
147
+ `tests/acceptance` (guideline §3.7). Needs the Acceptance-test project row
148
+ ticked (the `@playwright/test` version comes from there).
149
+ - **Blocks:** `sw-implement-feature` (e2e execution), `sw-verify-feature-ac-tests`.
150
+
151
+ ## 9. ATS env
152
+
153
+ - **Check:** `tests/acceptance/.env` exists.
154
+ - **Ticked:** file exists and defines `APP_URL`, `SHOPWARE_ADMIN_USERNAME`,
155
+ `SHOPWARE_ADMIN_PASSWORD` (the names guideline §3.7's `.env.example` block
156
+ documents).
157
+ - **Fix:** copy `tests/acceptance/.env.example` to `tests/acceptance/.env` if
158
+ the example is missing, write it from the guideline §3.7 template first —
159
+ then ask the user for the real `APP_URL`/admin credentials (or
160
+ `SHOPWARE_ACCESS_KEY_ID`/`SHOPWARE_SECRET_ACCESS_KEY` as the alternative the
161
+ template lists) with a structured question tool if one is available, or
162
+ directly otherwise; never invent values, never print them back once
163
+ entered. Needs the Acceptance-test project row ticked.
164
+ - **Blocks:** `sw-implement-feature` (e2e execution), `sw-verify-feature-ac-tests`.
165
+
166
+ ## 10. Plugin tests, per `custom/plugins/<Name>`
167
+
168
+ - **Enumerate:** `ls custom/plugins`; one row per directory found.
169
+ - **Check per plugin:**
170
+ - PHP: `custom/plugins/<Name>/phpunit.xml.dist` and
171
+ `custom/plugins/<Name>/tests/TestBootstrap.php` both exist.
172
+ - Admin JS: only if `custom/plugins/<Name>/src/Resources/app/administration`
173
+ exists — then also require `custom/plugins/<Name>/package.json` and
174
+ `custom/plugins/<Name>/jest.admin.config.js` (or the project's equivalent
175
+ name, e.g. `jest.administration.config.js`).
176
+ - Storefront JS: only if
177
+ `custom/plugins/<Name>/src/Resources/app/storefront` exists — then also
178
+ require `package.json` and `jest.storefront.config.js`.
179
+ - **Ticked:** the PHP pair present, plus each applicable JS pair present.
180
+ - **Fix:** scaffold the missing files from the guideline templates —
181
+ `phpunit.xml.dist` from §3.3, `tests/TestBootstrap.php` from §3.4 (fill
182
+ `<Name>`/`<Vendor>` from `composer.json`), Jest config(s) from §3.5 (option
183
+ (a), plugin-local preset), `package.json` scripts block from §3.5's closing
184
+ JSON snippet. Needs the Containers row ticked for the `npm install` steps
185
+ that run inside the container.
186
+ - **Blocks:** `sw-implement-feature` (PHPUnit/Jest execution for that
187
+ plugin's ACs), `sw-verify-feature` (and its sub-skills, for that plugin).
188
+
189
+ ## 11. Project wiki
190
+
191
+ - **Check:** `docs/project-wiki/` exists.
192
+ - **Ticked:** directory present.
193
+ - **Fix:** invoke skill `sw-document-feature --setup` (Skill tool) — it asks
194
+ its own flavour questions and writes the scaffold; do not replicate that
195
+ logic here.
196
+ - **Blocks:** `sw-document-feature`.
197
+
198
+ ## 12. `.gitignore`
199
+
200
+ - **Check:** `.gitignore` contains all six lines:
201
+ ```
202
+ /specs/.editor/
203
+ /specs/.rfp/
204
+ tests/acceptance/node_modules/
205
+ tests/acceptance/.env
206
+ tests/acceptance/test-results/
207
+ var/verification-screenshots/
208
+ ```
209
+ (`/specs/.editor/` and `/specs/.rfp/` are already present in this project's
210
+ `.gitignore`; check the other four independently. `.sw-ai-sdk/` is not on
211
+ this list — the installer CLI adds that one itself.)
212
+
213
+ Do **not** add `specs/<rfp-basename>/`. The tender tool's normalised source
214
+ export and its `import-map.json` live there and are committed on purpose —
215
+ they are what the analysis reads, hashes and exports from. Only the transient
216
+ half (snapshot, proposed map) goes to the ignored `/specs/.editor/`.
217
+ - **Ticked:** all six present (exact path forms, not just a substring match
218
+ on directory name).
219
+ - **Fix:** append whichever of the six lines are missing, each under a short
220
+ comment naming its owner (specs-editor, sw-discover-tender, acceptance-test
221
+ project, verify-ac-tests screenshots). Idempotent — safe to re-run.
222
+ - **Blocks:** nothing directly; unticked means the next `git status` will
223
+ show generated/secret files as untracked.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: sw-verify-feature
3
+ description: Verify a feature implementation against its technical spec (specs/NNNN-slug-spec.md) by running three independent verifiers in parallel — AC test coverage/health, architecture/guideline compliance, and code quality/static analysis — then cross-checking their verdicts into one final per-AC pass/not pass/partly report. Wired as the final step of sw-implement-feature; can also be run standalone to (re)check a feature. Not to be confused with the existing "verify-implementation" skill, which is a mock and should be ignored.
4
+ when_to_use: Trigger phrases — "verify spec 0007", "check if this feature is done", "run full verification for this feature", "is epic 1 actually passing".
5
+ argument-hint: [specs/NNNN-slug-spec.md]
6
+ allowed-tools: Read Write Glob Grep Agent
7
+ ---
8
+
9
+ # sw-verify-feature
10
+
11
+ Independently verify that an implementation actually satisfies its spec. This is the completeness gate — do not soften a `not pass` into a `partly` to be agreeable.
12
+
13
+ This skill is a pure orchestrator: it does not run tests, read code for compliance, or execute static analysis itself. It spawns three specialist verifier skills in parallel, each of which performs its own verification with its own tools, then cross-checks their independent verdicts into one report, written to `specs/NNNN-slug-verification.md` using `reference/verification-report-template.md`.
14
+
15
+ ## Read-only contract
16
+
17
+ This skill observes and reports. It never changes the project code: no source/test file created, edited or deleted, no fix applied, no migration run, no git action. The one file this skill is allowed to write is its own output report at `specs/NNNN-slug-verification.md` (create or overwrite). Anything found wrong in the project is a report line handed to `sw-implement-feature`, never a fix. The same contract binds every agent this skill spawns — pass it verbatim in each brief.
18
+
19
+ ## Inputs
20
+
21
+ | Argument | Behaviour |
22
+ | --- | --- |
23
+ | Path to `specs/NNNN-slug-spec.md` | Verify this spec against the current codebase |
24
+ | Nothing | Ask the user for the spec path |
25
+
26
+ ## Procedure
27
+
28
+ ### 1. Load the AC lists
29
+
30
+ Read the spec's acceptance criteria — this is the reference list used in step 3 to catch a verifier that silently drops an AC.
31
+
32
+ Also read the source PRD: same `NNNN-slug` as the spec, at `specs/NNNN-slug.md` (drop the `-spec` suffix). Read its §7 Acceptance Criteria — this is the AC-n list the feature was originally scoped to. This skill runs independently of `sw-implement-feature` (it can verify a manually-implemented feature just as well, and doubles as this skill's own test), so it cannot assume the spec still matches the PRD it was derived from; that assumption is exactly what this check exists to catch.
33
+
34
+ If the PRD file doesn't exist, note `PRD not found — traceability check skipped` in the final report's Overall Verdict and skip the PRD comparison in step 3.
35
+
36
+ Otherwise, diff the two `AC-n` lists. Any AC-n in the PRD but absent from the spec is a **traceability gap**: it was never carried into the implementation plan, so none of the three verifiers below can find or test it. Record these now — they are forced into the per-AC table in step 3 as `not pass`, not silently dropped for being out of the spec's own list.
37
+
38
+ ### 2. Spawn the three verifiers in parallel
39
+
40
+ **Shopware version — detect once, here, before spawning anything, 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. Also invoke `sw-setup` once, here — before spawning anything.
41
+
42
+ In a single message, make three `Agent` tool calls (one per verifier), each delegated to a general-purpose worker sub-agent since it just needs to invoke a skill and relay its output — do not use `fork`, these need no conversation context. Each prompt must contain:
43
+
44
+ - The spec path.
45
+ - The detected Shopware/PHP version and its evidence, plus the `sw-setup` table text.
46
+ - The read-only contract above, verbatim.
47
+ - The exact instruction: invoke the `Skill` tool with the named skill below, passing the spec path, the detected version and evidence, and the `sw-setup` table as `args`, then return that skill's complete report output verbatim — no summarizing, no reformatting, no adding or dropping lines.
48
+
49
+ The three skills, one per Agent call:
50
+
51
+ 1. `sw-verify-feature-ac-tests`
52
+ 2. `sw-verify-feature-architecture`
53
+ 3. `sw-verify-feature-code-quality`
54
+
55
+ Never call these three sequentially — they run concurrently. If one Agent call fails to spawn or errors out, note it and continue with the other two; do not block the run on a single failed spawn (report that dimension as `not consulted — <reason>` in step 4 instead of silently omitting it).
56
+
57
+
58
+ ### 3-5. Reconcile and report
59
+
60
+ Follow `reference/reconcile-and-report.md` in this skill's directory: cross-check the
61
+ three verifiers into one per-AC pass / partly / not pass verdict, collect the
62
+ whole-feature gate lines, and write the report from
63
+ `reference/verification-report-template.md`. Never report a verdict a verifier did not
64
+ support, and never re-run a verifier's work yourself.
@@ -0,0 +1,42 @@
1
+ # Reconciling the verifiers and writing the report
2
+
3
+ Entered once all three verifiers have returned. Steps 3-5 of `sw-verify-feature`: cross-check the three verdicts into one per-AC result, collect the whole-feature gate lines, and write the report.
4
+
5
+ ### 3. Reconcile per-AC verdicts
6
+
7
+ Each verifier reports its own `AC-n | pass/partly/not pass | ...` line. For every AC in the union of the spec's list and the PRD's list (step 1):
8
+
9
+ - AC-n exists in the PRD but not in the spec → final verdict `not pass`, failing dimension `traceability`, note `AC missing from spec — never implemented or tested`. Do not ask a verifier for it; none can see an AC the spec never mentioned.
10
+ - Else, for an AC-n present in the spec:
11
+ - If any verifier reports `not pass` for that AC → final verdict `not pass`.
12
+ - Else if any verifier reports `partly` → final verdict `partly`.
13
+ - Else (all three report `pass`) → final verdict `pass`.
14
+ - If a verifier's report has no line at all for an AC that exists in the spec → treat that as `not pass` from that verifier (a missing line is not a pass by omission).
15
+
16
+ Carry forward the specific reason from whichever verifier(s) triggered the downgrade — the final report must say *which* dimension failed (tests / architecture / code quality / traceability), not just that something did.
17
+
18
+ While reconciling, also tally the PRD AC coverage counts used in step 5's gate line: how many PRD ACs land on `pass` (a passing test found), how many are `not pass`/`partly` specifically because of the `tests` dimension (a test exists but fails, or is flagged unhealthy), and how many are `traceability` (no test possible — AC absent from spec) or otherwise have no test located at all (from `sw-verify-feature-ac-tests`'s Coverage column). These three counts — passed / failed / absent — are what makes the PRD comparison useful; a single "N ACs not pass" number would hide which of the three it is.
19
+
20
+ ### 4. Collect the whole-feature gate lines
21
+
22
+ Beyond the per-AC lines, each verifier also reports gates that don't map to a single AC. Carry all of them into the final report unchanged:
23
+
24
+ - From `sw-verify-feature-ac-tests`: the Test Health Report (flagged tests).
25
+ - From `sw-verify-feature-architecture`: the Project guidelines line, the shopware-cli Twig linters (`admin-twig`/`storefront-twig`) line.
26
+ - From `sw-verify-feature-code-quality`: the PHPStan/ESLint/Stylelint/sw-cli line, the PHPUnit regression line, its own Project guidelines line (merge with the architecture skill's if identical, keep both if they differ).
27
+ - The PRD AC coverage tally from step 3 (skip this line entirely if the PRD file wasn't found — do not report `0/0`).
28
+
29
+ ### 5. Report
30
+
31
+ Fill `reference/verification-report-template.md` verbatim and write it to `specs/NNNN-slug-verification.md`, where `NNNN-slug` matches the spec being verified (e.g. `specs/0007-checkout-notes-verification.md` for `specs/0007-checkout-notes-spec.md`). If the file already exists from a previous run, overwrite it — this report is a snapshot of the latest run, not an append-only log.
32
+
33
+ - **§1 Per-AC Verdicts** — one row per AC in the union list from step 1 (spec ∪ PRD), reconciled per step 3 above. An AC that only exists in the PRD still gets a row here, marked `not pass` / `traceability`.
34
+ - **§2 Whole-Feature Gates** — the gate lines collected in step 4, each prefixed by its source verifier (`[tests]`, `[architecture]`, `[code-quality]`), copied verbatim from what each verifier reported, plus the `[tests] PRD AC coverage: <passed>/<total> passed, <failed> failed, <absent> absent` line from step 3's tally (`failed` = test exists but fails/flagged, `absent` = no test located, including ACs missing from the spec entirely).
35
+ - **§3 Test Health Report** — copied verbatim from `sw-verify-feature-ac-tests`'s report.
36
+ - **§4 Overall Verdict** — one paragraph: fully verified, or the count of ACs not passing/partly plus whether every whole-feature gate passed. End with `Verifiers consulted: tests, architecture, code-quality` (list only the ones that actually ran; note any `not consulted — <reason>`).
37
+
38
+ Never mark the feature complete if any AC is `not pass` or any whole-feature gate reports `fail`. A `not run`/`not active` gate does not block the AC verdicts, but the overall verdict must say so explicitly rather than reading as fully verified. `partly` always carries the one-sentence reason from the verifier that reported it.
39
+
40
+ **Status tags (only exception to the read-only contract).** Per AC verdict you may set the inline tag directly after the bold id in the spec and PRD: `pass` → `[done]`, `partly` → `[partly]`, `not pass` → remove the tag (open). Change only that line; no other edit to either document.
41
+
42
+ After writing the file, also relay the same content as your final response — the file is the durable record, the chat response is so the caller (e.g. `sw-implement-feature`) sees the result immediately without a separate read.