@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,50 @@
1
+ ---
2
+ title: Guidelines
3
+ nav_order: 7
4
+ type: reference
5
+ purpose: Where this project's own coding and QA rules live, and how they relate to Shopware's.
6
+ scope: docs/project-wiki/guidelines/. Not the rules themselves — those come from the Shopware platform guidelines unless overridden here.
7
+ last_synced: {{DATE}}
8
+ verified_against: Shopware {{SHOPWARE_VERSION}}
9
+ resync: Add a row below whenever a project guideline file is created or removed.
10
+ tags: [guidelines, platform]
11
+ ---
12
+
13
+ # Guidelines
14
+
15
+ {{PROJECT_NAME}} has no coding guidelines of its own yet. Architecture, code and QA guidelines are
16
+ inherited as-is from the Shopware platform guidelines, served by the ShopwareDevKnowledgeBase MCP
17
+ at `platform/guidelines/<version>/` (the Shopware major, e.g. `6.7` for Shopware {{SHOPWARE_VERSION}}): the base files `architecture-guidelines.md`,
18
+ `code-guidelines.md`, `qa-guidelines.md`, plus surface files (`be-`, `fe-`, `admin-`,
19
+ `storefront-…guidelines.md`).
20
+
21
+ [Documentation guidelines](documentation-guidelines.md) is the exception: it holds this wiki's own
22
+ documentation rules (page shape, frontmatter, status vocabulary) and has no platform counterpart,
23
+ so it is served as is, never merged.
24
+
25
+ ## Recording a project rule
26
+
27
+ A rule is written here only to override, extend, waive, or add to a platform guideline — never to
28
+ restate it. It comes only from a person's statement or an accepted ADR, never invented.
29
+
30
+ The rule lives in `guidelines/<same file name as the platform file>.md` — no version folder: project
31
+ guidelines always apply to the Shopware version installed in this project — with a `merge:` key
32
+ naming which platform section it acts on and how. Coding agents and verifiers never read this
33
+ file directly — they call `read_doc guidelines/<version>/<file>.md` on the MCP, which returns the
34
+ effective file: the platform text with this project's sections merged in.
35
+
36
+ ## Project files
37
+
38
+ <!-- guidelines-toc:start -->
39
+ | documentation-guidelines.md | Wiki page shape, frontmatter, status vocabulary and terminology rules — project-only, no platform counterpart. |
40
+ <!-- guidelines-toc:end -->
41
+
42
+ Regenerated by `sw-document-feature` whenever it writes or edits a guideline file; text outside
43
+ the markers is hand-maintained.
44
+
45
+ ---
46
+
47
+ *Scope: `docs/project-wiki/guidelines/`, not the rules themselves — those are the Shopware
48
+ platform guidelines unless a row above overrides them. · Last synced: {{DATE}} · Verified against
49
+ Shopware {{SHOPWARE_VERSION}} · Re-sync: add a row whenever a project guideline file is created or
50
+ removed.*
@@ -0,0 +1,68 @@
1
+ ---
2
+ title: Home
3
+ nav_order: 1
4
+ type: index
5
+ purpose: Entry point and wiki index for the {{PROJECT_NAME}} documentation.
6
+ scope: Everything under docs/project-wiki/. Does not cover Shopware core docs (use the ShopwareDevKnowledgeBase MCP for those).
7
+ last_synced: {{DATE}}
8
+ verified_against: Shopware {{SHOPWARE_VERSION}}
9
+ resync: Regenerate the domain map from domains/index.md whenever a domain or feature page is added.
10
+ tags: [index, wiki]
11
+ ---
12
+
13
+ # Project documentation
14
+
15
+ Everything this team knows about **this** Shopware project: what we built, why we built it that
16
+ way, where it lives in the code, and how to run and debug it. Shopware's own behaviour is not
17
+ repeated here — where stock Shopware already answers a question, we link to Shopware's docs
18
+ instead. Coding guidelines are inherited from the Shopware platform guidelines; project deviations
19
+ live in [Guidelines](guidelines/index.md).
20
+
21
+ ## Start here
22
+
23
+ | If you are… | Go to |
24
+ |---|---|
25
+ | New to the project | [Tech stack](baseline/tech-stack.md) — versions, services, how to run it locally |
26
+ | Looking for a feature | [Domains](domains/index.md) — pick a domain, then Administration or Storefront |
27
+ | Asking "why is it built this way?" | [Decision records](adr/index.md) |
28
+ | Checking a coding rule | [Guidelines](guidelines/index.md) |
29
+ | Debugging something | [Debugging](domains/platform/debugging.md) · [Logging](domains/platform/logging.md) |
30
+ | Unsure what a word means | [Glossary](baseline/glossary.md) |
31
+ | Writing or generating a page | [Documentation guidelines](guidelines/documentation-guidelines.md) |
32
+
33
+ ## Domains
34
+
35
+ Feature documentation is organised by business domain, then by the surface the user acts on —
36
+ Administration (merchant) or Storefront (shopper).
37
+
38
+ <!-- sw-document-feature adds one row per domain when the domain is created. Keep in sync with domains/index.md. -->
39
+
40
+ | Domain | What it covers |
41
+ |---|---|
42
+ | [Platform](domains/platform/index.md) | Cross-cutting infrastructure: extensions, configuration, logging, debugging, environments |
43
+
44
+ ## All sections
45
+
46
+ - [Tech stack](baseline/tech-stack.md) — the versions and services every feature is built and verified against
47
+ - [Glossary](baseline/glossary.md) — project terms mapped to Shopware's own terminology
48
+ - [Domains](domains/index.md) — feature documentation per domain and surface
49
+ - [Decision records](adr/index.md) — the technical and process decisions behind the project
50
+ - [Guidelines](guidelines/index.md) — this project's coding rules, inherited from Shopware unless overridden
51
+ - [Documentation guidelines](guidelines/documentation-guidelines.md) — page types, front matter, status vocabulary, what not to document
52
+ - [Overview](README.md) — what this wiki is and how it is published
53
+
54
+ ## About this wiki
55
+
56
+ Pages are written and kept in sync by the `sw-document-feature` skill, which documents a feature
57
+ only after it has been verified in the code. Each page states when it was last synced and which
58
+ Shopware version it was verified against, so a stale page is visible as stale rather than wrong.
59
+
60
+ The path a feature takes: PRD `specs/NNNN-slug.md` → tech spec `specs/NNNN-slug-spec.md` →
61
+ implementation in `custom/plugins/<PluginName>` → `sw-verify-feature` → `sw-document-feature` →
62
+ the pages here.
63
+
64
+ ---
65
+
66
+ *Scope: everything under `docs/project-wiki/`. · Last synced: {{DATE}} · Verified against
67
+ Shopware {{SHOPWARE_VERSION}} · Re-sync: run `sw-document-feature` after each `sw-verify-feature` report;
68
+ `last_synced` is bumped only on the pages that run touches.*
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: "Shopware Project Wiki"
3
+ nav_exclude: true
4
+ tags: [readme, meta]
5
+ ---
6
+
7
+ # Shopware Project Wiki
8
+
9
+ This documentation was produced by the **Shopware Ecosystem AI SDK**. It is structured, atomic documentation written to be consumed by coding agents (MCP/LLM tooling) and, at the same time, to serve as the project's living documentation for the whole team — PMs, architects, developers, QA.
10
+
11
+ ## What is inside
12
+
13
+ - `domains/<domain>/` → one feature page per surface (`administration/`, `storefront/`); `adr/` holds decision records; `domains/platform/` covers cross-cutting infrastructure (extensions, configuration, logging, debugging, environments); `guidelines/` holds this project's coding rules, inherited from Shopware unless overridden, plus [documentation guidelines](guidelines/documentation-guidelines.md).
14
+ - Entry point is [index.md](index.md); the rules every page follows are in [guidelines/documentation-guidelines.md](guidelines/documentation-guidelines.md).
15
+ - Kept in sync by the `sw-document-feature` skill after each feature verification (`sw-verify-feature`).
16
+
17
+ ## Browsing this wiki
18
+
19
+ Every page is plain Markdown — no config files, no static-site build step or generator, nothing beyond docs and folder structure. Browse it directly in GitHub's file view, in any IDE, or on the command line with `cat`/`grep`. A Jekyll/GitHub Pages structure is a separate flavor of this same wiki, chosen once when it's first created — ask for that flavor next time if the project outgrows plain Markdown.
20
+
21
+ ---
22
+
23
+ *Generated {{DATE}} · verified against Shopware {{SHOPWARE_VERSION}} · the rules for pages live in
24
+ [guidelines/documentation-guidelines.md](guidelines/documentation-guidelines.md).*
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Decision records
3
+ has_children: true
4
+ nav_order: 5
5
+ type: index
6
+ purpose: Index of all decision records for this project — technical, process, and significant business decisions.
7
+ scope: Every ADR under adr/. Routine business/functional rationale lives in the domain index feature tables, not here.
8
+ last_synced: {{DATE}}
9
+ verified_against: Shopware {{SHOPWARE_VERSION}}
10
+ resync: The block between the adr-toc markers is regenerated by sw-document-feature on every run (readable on GitHub). WIP ADRs stay in specs/ until promoted.
11
+ tags: [adr, index]
12
+ ---
13
+
14
+ # Decision records
15
+
16
+ The decisions this project is built on — technical, process, and the business decisions that shaped
17
+ the architecture. A record lands here only once it is both accepted and actually built; until then
18
+ it stays a work-in-progress file under `specs/*-adr-*.md`.
19
+
20
+ Records follow Shopware's own ADR convention: `YYYY-MM-DD-title.md`, front matter
21
+ `title`/`date`/`area`/`tags`/`authors`/`status`, and the sections Context / Decision / Consequences.
22
+ This folder is the source of truth — later status changes (superseded, deprecated) are made here, by
23
+ people. Nothing in it is generated by tooling.
24
+
25
+ ## Table of contents
26
+
27
+ <!-- Regenerated by sw-document-feature on every run (step 5b, reference/adr-promotion.md §4). Do not edit between the markers; everything outside them is hand-maintained. -->
28
+ <!-- adr-toc:start -->
29
+ No decision records yet — the first one appears here once an accepted decision has been built.
30
+ <!-- adr-toc:end -->
31
+
32
+ ---
33
+
34
+ *Scope: accepted and built decisions only — routine functional rationale lives in the domain index
35
+ feature tables. · Last synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: the table of
36
+ contents is regenerated by `sw-document-feature`; WIP records stay in `specs/` until promoted.*
@@ -0,0 +1,68 @@
1
+ ---
2
+ title: Home
3
+ nav_order: 1
4
+ type: index
5
+ purpose: Entry point and wiki index for the {{PROJECT_NAME}} documentation.
6
+ scope: Everything under docs/project-wiki/. Does not cover Shopware core docs (use the ShopwareDevKnowledgeBase MCP for those).
7
+ last_synced: {{DATE}}
8
+ verified_against: Shopware {{SHOPWARE_VERSION}}
9
+ resync: Regenerate the domain map from domains/index.md whenever a domain or feature page is added.
10
+ tags: [index, wiki]
11
+ ---
12
+
13
+ # Project documentation
14
+
15
+ Everything this team knows about **this** Shopware project: what we built, why we built it that
16
+ way, where it lives in the code, and how to run and debug it. Shopware's own behaviour is not
17
+ repeated here — where stock Shopware already answers a question, we link to Shopware's docs
18
+ instead. Coding guidelines are inherited from the Shopware platform guidelines; project deviations
19
+ live in [Guidelines](guidelines/index.md).
20
+
21
+ ## Start here
22
+
23
+ | If you are… | Go to |
24
+ |---|---|
25
+ | New to the project | [Tech stack](baseline/tech-stack.md) — versions, services, how to run it locally |
26
+ | Looking for a feature | [Domains](domains/index.md) — pick a domain, then Administration or Storefront |
27
+ | Asking "why is it built this way?" | [Decision records](adr/index.md) |
28
+ | Checking a coding rule | [Guidelines](guidelines/index.md) |
29
+ | Debugging something | [Debugging](domains/platform/debugging.md) · [Logging](domains/platform/logging.md) |
30
+ | Unsure what a word means | [Glossary](baseline/glossary.md) |
31
+ | Writing or generating a page | [Documentation guidelines](guidelines/documentation-guidelines.md) |
32
+
33
+ ## Domains
34
+
35
+ Feature documentation is organised by business domain, then by the surface the user acts on —
36
+ Administration (merchant) or Storefront (shopper).
37
+
38
+ <!-- sw-document-feature adds one row per domain when the domain is created. Keep in sync with domains/index.md. -->
39
+
40
+ | Domain | What it covers |
41
+ |---|---|
42
+ | [Platform](domains/platform/index.md) | Cross-cutting infrastructure: extensions, configuration, logging, debugging, environments |
43
+
44
+ ## All sections
45
+
46
+ - [Tech stack](baseline/tech-stack.md) — the versions and services every feature is built and verified against
47
+ - [Glossary](baseline/glossary.md) — project terms mapped to Shopware's own terminology
48
+ - [Domains](domains/index.md) — feature documentation per domain and surface
49
+ - [Decision records](adr/index.md) — the technical and process decisions behind the project
50
+ - [Guidelines](guidelines/index.md) — this project's coding rules, inherited from Shopware unless overridden
51
+ - [Documentation guidelines](guidelines/documentation-guidelines.md) — page types, front matter, status vocabulary, what not to document
52
+ - [Overview](README.md) — what this wiki is
53
+
54
+ ## About this wiki
55
+
56
+ Pages are written and kept in sync by the `sw-document-feature` skill, which documents a feature
57
+ only after it has been verified in the code. Each page states when it was last synced and which
58
+ Shopware version it was verified against, so a stale page is visible as stale rather than wrong.
59
+
60
+ The path a feature takes: PRD `specs/NNNN-slug.md` → tech spec `specs/NNNN-slug-spec.md` →
61
+ implementation in `custom/plugins/<PluginName>` → `sw-verify-feature` → `sw-document-feature` →
62
+ the pages here.
63
+
64
+ ---
65
+
66
+ *Scope: everything under `docs/project-wiki/`. · Last synced: {{DATE}} · Verified against
67
+ Shopware {{SHOPWARE_VERSION}} · Re-sync: run `sw-document-feature` after each `sw-verify-feature` report;
68
+ `last_synced` is bumped only on the pages that run touches.*
@@ -0,0 +1,142 @@
1
+ # Set up the wiki (step 0, conditional)
2
+
3
+ Bootstraps `docs/project-wiki/` from `reference/scaffold/` in this skill's directory. Runs only on the two triggers below — a normal documentation run over an existing wiki never enters this file.
4
+
5
+ Non-destructive by design: it only creates files that do not exist. A file already on disk — a hand-edited `_config.yml` included — is never overwritten, never refreshed to the scaffold version.
6
+
7
+ ## Triggers and modes
8
+
9
+ | Trigger | Mode | Ends with |
10
+ |---|---|---|
11
+ | `--setup` in the arguments, no `docs/project-wiki/` | **init** — ask §2, write the baseline | Report §7, then stop. Documentation is a separate run |
12
+ | `--setup` in the arguments, wiki exists | **repair** — recreate missing manifest files, drift check | Report §7, then stop |
13
+ | No `--setup`, no `docs/project-wiki/` | **init** — ask §2, write the baseline | Report §7, then continue at step 1 of `SKILL.md` |
14
+ | No `--setup`, wiki exists | not entered at all | — |
15
+
16
+ Questions (§2) are asked by the main run, before the sub-agent is spawned: a sub-agent has no interactive channel and cannot ask them. Only the file writing (§5) is delegated.
17
+
18
+ ## 1. Detect
19
+
20
+ `Glob docs/project-wiki/**` and compare against the manifest (§3). Three outcomes:
21
+
22
+ - No `docs/project-wiki/` at all → **init**, flavor not yet chosen.
23
+ - Directory exists, some entries missing → **repair**.
24
+ - All entries for the wiki's own flavor present → nothing to create; drift check (§6) only.
25
+
26
+ On repair the flavor is never asked — derive it: `docs/project-wiki/_config.yml` present → Jekyll, absent → Vanilla. That derivation is also what the content steps mean by "the Jekyll flavor" (the Liquid ADR table in `adr/index.md`).
27
+
28
+ ## 2. Questions (init only)
29
+
30
+ One call to a structured question tool if you have one (Claude Code: `AskUserQuestion`; Codex: `request_user_input`), asked once ever per wiki. Question 2 is included only when the answer to question 1 is Jekyll — if the tool cannot express that dependency, ask question 1 alone first, then 2–3 in a second call.
31
+
32
+ - **Question 1 — "docs/project-wiki/ does not exist yet — set it up as a Jekyll/GitHub Pages site or a plain Markdown wiki?"**
33
+ - Option 1, label "Jekyll / GitHub Pages (Recommended)": adds `_config.yml`, so pages render as a themed site with left sidebar navigation and search (Just the Docs, via `remote_theme:`), plus a Liquid-generated ADR table on top of the hand-maintained ADR index; ready to publish via GitHub Pages or `jekyll serve`.
34
+ - Option 2, label "Vanilla / plain Markdown": no `_config.yml`, no Liquid; every page is plain Markdown, browsable anywhere with no build step.
35
+ - **Question 2 — "How will the wiki be published?"** (Jekyll only; decides `baseurl`, see §4)
36
+ - Option 1, label "Its own repository (Recommended)": this folder becomes a repository root, Pages serves it from the branch root, `baseurl` is `/<repo>`.
37
+ - Option 2, label "From this repository, /docs branch deploy": GitHub Pages reads `_config.yml` only from the Pages source root, so a nested wiki renders **unthemed**; `baseurl` stays empty and the README's setup B applies.
38
+ - Option 3, label "GitHub Actions build": a workflow points a Jekyll build at this folder; `baseurl` stays empty.
39
+ - Option 4, label "Not decided yet": `baseurl` is filled from the detected repository per §4 — the project-site default, which is what a first publish almost always needs; the comment above it says when to blank it.
40
+ - **Question 3 — "Site title?"** — options: the default `Shopware Project Wiki` (recommended), or the detected project name (§4) followed by " — Project Wiki". Free text via *Other* overrides both.
41
+
42
+ Nothing else is asked. The wiki always lives at `docs/project-wiki/` — the path is fixed across every page, rule file and template in this skill.
43
+
44
+ ## 3. Manifest — the expected tree
45
+
46
+ Source files live in `reference/scaffold/` (shared root) and `reference/scaffold/vanilla/` (Vanilla-flavor overlay); targets are relative to `docs/project-wiki/`. 16 files for the Jekyll flavor, 15 for Vanilla (no `_config.yml`).
47
+
48
+ | Scaffold path | Target path | Required | Flavor |
49
+ |---|---|---|---|
50
+ | `README.md` (or `vanilla/README.md`) | `docs/project-wiki/README.md` | yes | overlay (both, content differs) |
51
+ | `index.md` (or `vanilla/index.md`) | `docs/project-wiki/index.md` | yes | overlay (both, content differs) |
52
+ | `_config.yml` | `docs/project-wiki/_config.yml` | Jekyll only | jekyll-only |
53
+ | `adr/index.md` (or `vanilla/adr/index.md`) | `docs/project-wiki/adr/index.md` | yes | overlay (both, content differs) |
54
+ | `baseline/tech-stack.md` | `docs/project-wiki/baseline/tech-stack.md` | yes | both |
55
+ | `baseline/glossary.md` | `docs/project-wiki/baseline/glossary.md` | yes | both |
56
+ | `domains/index.md` | `docs/project-wiki/domains/index.md` | yes | both |
57
+ | `domains/platform/index.md` | `docs/project-wiki/domains/platform/index.md` | yes | both |
58
+ | `domains/platform/extensions-inventory.md` | `docs/project-wiki/domains/platform/extensions-inventory.md` | yes | both |
59
+ | `domains/platform/customization-guidelines.md` | `docs/project-wiki/domains/platform/customization-guidelines.md` | yes | both |
60
+ | `domains/platform/configuration.md` | `docs/project-wiki/domains/platform/configuration.md` | yes | both |
61
+ | `domains/platform/logging.md` | `docs/project-wiki/domains/platform/logging.md` | yes | both |
62
+ | `domains/platform/debugging.md` | `docs/project-wiki/domains/platform/debugging.md` | yes | both |
63
+ | `domains/platform/environments-and-deployment.md` | `docs/project-wiki/domains/platform/environments-and-deployment.md` | yes | both |
64
+ | `guidelines/index.md` | `docs/project-wiki/guidelines/index.md` | yes | both |
65
+ | `guidelines/documentation-guidelines.md` | `docs/project-wiki/guidelines/documentation-guidelines.md` | yes | both |
66
+
67
+ Business domains (`domains/<slug>/`), feature pages, and ADR records are **not** part of the manifest — later steps create them from the templates, for features that actually exist. This file never invents an example domain or feature page.
68
+
69
+ ## 4. Values to resolve (init and repair)
70
+
71
+ Detected, not asked — show them in the announce line so the user can object:
72
+
73
+ | Placeholder | How to read it |
74
+ |---|---|
75
+ | `{{PROJECT_NAME}}` | `Read composer.json` → top-level `"name"`. If it starts with `shopware/` (e.g. `shopware/production`) or is absent → use the repository folder name (`basename` of the repo root). |
76
+ | `{{SHOPWARE_VERSION}}` | `grep -n -A3 '"name": "shopware/core"' composer.lock` → the `"version"` line; if no `composer.lock`, `Read composer.json` → `require."shopware/core"` constraint. Normalise: strip `^ ~ v`, keep the first three numeric segments (`6.7.13.0` → `6.7.13`, `~6.6.10.0` → `6.6.10`, `v6.7.13` → `6.7.13`, `^6.7` → `6.7`). Used as `Shopware <X.Y.Z>`. |
77
+ | `{{DATE}}` | Today, `YYYY-MM-DD`. |
78
+
79
+ Replace exactly these three tokens and nothing else — the Jekyll flavor's `adr/index.md` contains Liquid `{{ p.date }}` expressions that must survive untouched.
80
+
81
+ Two Jekyll-only values come from the §2 answers and are edited into `_config.yml` after substitution:
82
+
83
+ - `title:` — the answer to question 3.
84
+ - `baseurl:` — **defaults to `"/<repo>"`, not to empty.** An empty `baseurl` on a GitHub Pages project site makes every theme asset 404: the navigation still renders, the build still succeeds, and the site is served as unstyled HTML with no error anywhere. Empty is therefore the unsafe default and is used only where it is provably right.
85
+
86
+ Derive `<repo>` from `git remote get-url origin` (basename, `.git` stripped) and resolve in this order:
87
+
88
+ | Case | `baseurl` |
89
+ |---|---|
90
+ | A remote exists and `<repo>` is **not** `<org>.github.io` — a project site | `"/<repo>"` |
91
+ | `<repo>` is `<org>.github.io` — a user/org site served at the domain root | `""` |
92
+ | Question 2 answered "GitHub Actions build" | `""` |
93
+ | No git remote at all | `""`, and the report says it must be set to `/<repo>` once the wiki is published |
94
+
95
+ When the wiki is still nested inside the project repository, the remote found here is the *project's*, not the wiki's — write the value it implies, and add the report line that `baseurl` has to be revisited once the wiki gets its own repository.
96
+
97
+ State the resolved value in the announce line either way, so it is visible rather than implicit.
98
+
99
+ ## 5. Write the baseline (delegated)
100
+
101
+ Spawn **one** `general-purpose` agent via the Agent tool. Everything it needs goes in the brief — it asks nothing and decides nothing:
102
+
103
+ - mode (init or repair) and the exact list of target paths to write (missing ones only, on repair);
104
+ - the flavor, and per row which source file to read: `README.md`, `index.md`, `adr/index.md` come from `reference/scaffold/vanilla/<path>` on Vanilla, otherwise from `reference/scaffold/<path>`; `_config.yml` is written on Jekyll only; the other 12 always come from the shared `reference/scaffold/<path>`;
105
+ - the three resolved token values, and the `title` / `baseurl` values for `_config.yml`;
106
+ - the rules: read → substitute the three tokens → write; never overwrite an existing file; never touch `domains/<business-domain>/`, feature pages or ADR records; never write outside `docs/project-wiki/`; leave Liquid expressions untouched;
107
+ - what to return: the created/kept table of §7, nothing else.
108
+
109
+ Announce the run in one line before spawning, naming the flavor and the detected values: "docs/project-wiki/ does not exist — initialising the wiki (Jekyll / GitHub Pages, acme/webshop, Shopware 6.7.13)."
110
+
111
+ ## 6. Drift check (`guidelines/documentation-guidelines.md` already present)
112
+
113
+ Skip when `guidelines/documentation-guidelines.md` was created in this run. Otherwise `Read` both `docs/project-wiki/guidelines/documentation-guidelines.md` and `reference/scaffold/guidelines/documentation-guidelines.md`; ignore the lines `last_synced:` and `verified_against:` and the three placeholder tokens (compare by reverse-substituting the resolved values, or by dropping those lines). If the wiki copy still differs in rules or wording → do **not** overwrite; record "documentation guidelines drift" for the report (one line, which `##` section differs). The wiki copy stays authoritative for readers; the drift is information for the maintainers.
114
+
115
+ Skip any `_config.yml` comparison on Vanilla — the file legitimately does not exist there, that is not drift.
116
+
117
+ **Legacy wikis** — `docs/project-wiki/CONVENTIONS.md` exists and `guidelines/documentation-guidelines.md` does not: report "legacy CONVENTIONS.md found, not migrated" and ask once, same tool: "Migrate docs/project-wiki/CONVENTIONS.md to guidelines/documentation-guidelines.md?" — **Yes**: write `reference/scaffold/guidelines/documentation-guidelines.md` (tokens substituted, carrying over nothing from the old file) then delete `docs/project-wiki/CONVENTIONS.md`; **No (Recommended)**: leave both alone, repeat the report next run. Never delete `CONVENTIONS.md` without that explicit yes.
118
+
119
+ ## 7. Report
120
+
121
+ One compact table, paths only:
122
+
123
+ ```
124
+ | result | file |
125
+ |---|---|
126
+ | created | docs/project-wiki/domains/platform/logging.md |
127
+ | kept | 15 files |
128
+ | drift | docs/project-wiki/guidelines/documentation-guidelines.md (Frontmatter) |
129
+ | flavor | Jekyll / GitHub Pages · baseurl "/acme-docs" |
130
+ ```
131
+
132
+ Collapse `kept` into a count; list every `created` file; add the `drift` row (with the differing section) only when §6 found one; add the `flavor` row only on init, with the `baseurl` decision after it. On `--setup` this table is the whole run's report. Otherwise it is the first line of the report in step 7 of `SKILL.md`, and the run continues at step 1.
133
+
134
+ On Jekyll, always name the resolved `baseurl` in that row, and when it was left empty add one line saying it must become `/<repo>` before the site is published as a project site — otherwise the site builds, the navigation renders, and every stylesheet 404s with no error to show for it.
135
+
136
+ ## Dry-run examples
137
+
138
+ - **Empty project, no flag** (`composer.json` name `acme/webshop`, lock `6.7.13.0`, origin `git@github.com:acme/webshop-docs.git`): detect → no directory → ask §2 → Jekyll + own repository + default title → resolve `acme/webshop`, `6.7.13`, today, `baseurl: "/webshop-docs"` → announce → sub-agent writes 16 files → table: 16 created, `flavor | Jekyll / GitHub Pages · baseurl "/webshop-docs"`, no drift check (`guidelines/documentation-guidelines.md` was just created) → continue at step 1.
139
+ - **Empty project, user picks Vanilla**: questions 2–3 are skipped (no `_config.yml` to configure) → 15 writes, overlay files from `reference/scaffold/vanilla/` → table: 15 created, `flavor | Vanilla / plain Markdown` → continue at step 1.
140
+ - **`--setup`, existing wiki with `domains/platform/logging.md` deleted**: repair → flavor derived from `_config.yml` → 1 write → drift check → table: 1 created, kept count, no `flavor` row → stop. Business domains, feature pages and the hand-edited `_config.yml` untouched.
141
+ - **`--setup`, complete wiki**: nothing missing → drift check only → table: N kept → stop.
142
+ - **No flag, complete wiki**: this file is never opened.
@@ -0,0 +1,71 @@
1
+ # Source mapping
2
+
3
+ How each input lands on the wiki. Condense, never quote; one fact lives in one place.
4
+
5
+ ## PRD (`specs/NNNN-slug.md`, sections as in sw-design-requirements)
6
+
7
+ | PRD section | Goes to |
8
+ |---|---|
9
+ | Meta table (Status, Confidence) | Nothing — a PRD's readiness is not a feature status |
10
+ | §1 Problem & Goal, "Success looks like" | Domain index feature row → **Why** (one sentence). The feature page's intro prose links there |
11
+ | §2 Scope (in/out) | Business user section (in scope); *Domain notes* or Gotchas for explicit out-of-scope that a reader would expect |
12
+ | §3 Actors & Sales-Channel scope | Decides the **surfaces**: Merchant admin → administration; Guest/Registered/B2B → storefront; External system/Background → surface that triggers it. Sales Channel/language limits → Business user section |
13
+ | §4 Domain Impact, new concepts | Developer › Where (entities) and *Domain notes* in the domain index; new concept names → glossary row |
14
+ | §5 FR-n | Business user section, grouped by workflow, not listed one-per-FR |
15
+ | §6 BR-n, edge cases, error behaviour | Business user (visible behaviour) + Gotchas (surprising rules); a significant BR → Why column, never an ADR unless the user provides one |
16
+ | §7 AC-n | Not restated. Cited by id in Status (`AC-1..AC-n pass` or failing list) and in the NOT BUILT block |
17
+ | §8 Data & Integrations | Developer › Where / Config; direction and source of truth → *Domain notes* |
18
+ | §9 Early tech decisions `[decision]` `[constraint]` `[architect]` | Developer › Decisions, never `adr/` (the PRD skill extracts no ADRs) |
19
+ | §10 Q-n open questions | Report line "open questions" + Gotchas as `_TBD_` if they affect documented behaviour. Never resolved by the skill |
20
+ | §11 C-n clarification log | Already anchored in the PRD; use the decision, not the log |
21
+ | §12 Confidence | Nothing |
22
+
23
+ ## Tech spec (`specs/NNNN-slug-spec.md`, written by sw-design-solution)
24
+
25
+ | Spec section | Goes to |
26
+ |---|---|
27
+ | Per-AC architectural decision | Developer › Where / Extension points (paths, entities, routes, events, components) |
28
+ | Per-AC implementation plan | Developer › Where only as *paths that exist*; steps are never listed |
29
+ | Per-AC tests / e2e scenarios | Cited in Status evidence; test paths in Debug/observe if they are the fastest way to reproduce |
30
+ | Decision Log (incl. `[architect]`, `(unverified …)`) | Developer › Decisions; unverified ones stay marked `(unverified)`. A line `[adr] <path>` → Developer › Decisions link to the promoted docs ADR, or to the WIP file marked `(WIP, <status>)` (below); `[potential ADR]` lines → report "ADR candidates (not created)" |
31
+ | Dependencies table (`| ADR | Status | Blocks readiness |`) | Nothing beyond the `[adr]` links; status is read from the ADR file, not this table |
32
+ | Toolchain conformance notes | Gotchas (one line) |
33
+ | Open Questions | Report + Gotchas `_TBD_` |
34
+ | Readiness / status | Nothing |
35
+
36
+ Which surface owns what: entities, migrations, admin modules, Admin API → administration page; Storefront controllers, Twig, Store API, JS plugins → storefront page; the other page links.
37
+
38
+ ## ADR marker (the only spec input that yields an ADR)
39
+
40
+ A spec Decision Log line `[adr] <path>` (written by sw-design-solution when the user chose *Extract as ADR*) points at `specs/NNNN-slug-adr-<topic>.md`; that **file** is the WIP ADR — the line carries no detail of its own. It becomes a docs ADR only by promotion per `adr-promotion.md` (`accepted` and its required changes found in the code; created once, never overwritten). An `[adr]` path that resolves neither to a WIP file nor to a docs ADR by `id` → report "dangling [adr] links", no page. Lines without `[adr]` never become ADRs, however far-reaching; `[potential ADR]` lines go to the report as "ADR candidates (not created)". Promotion covers every `specs/*-adr-*.md`, not only those the current spec links.
41
+
42
+ ## Verification report (`sw-verify-feature`, in chat)
43
+
44
+ ```
45
+ AC-n | pass / not pass / partly | evidence | note
46
+ Static analysis | pass / fail / not run | …
47
+ DEFECT-n …
48
+ ```
49
+
50
+ - All `pass` + code found → `status: built`; Status: "`built` — verified YYYY-MM-DD (AC-1..AC-n pass)".
51
+ - Any `not pass`/`partly` → `partially-built`; ⚠️ PARTIALLY BUILT block lists those ACs with the note; `DEFECT-n` summarised in Gotchas without file:line dumps.
52
+ - `Static analysis | fail` → one Gotchas line; it does not change AC status.
53
+ - Use the report's date as the verification date; `last_synced` is still today.
54
+
55
+ ## Chat mode (no PRD/spec)
56
+
57
+ Extract from the discussion, in this order, and mark anything not stated as `_TBD_`:
58
+
59
+ 1. **What** — the capability in one sentence per surface → the page's intro prose.
60
+ 2. **Why** — the business goal → domain index Why column. If absent, ask once (a structured question tool if you have one — Claude Code: `AskUserQuestion`; Codex: `request_user_input` — free text is fine) and anchor it.
61
+ 3. **AC-like statements** — "must", "should", "when X then Y", Given/When/Then → cite as `AC-a`, `AC-b` (letters, to signal they are chat-derived) in Status; do not invent numbers.
62
+ 4. **Names** for the built-check — extension, entities, routes, keys.
63
+ 5. **Decisions** the user stated → Developer › Decisions with `(from chat, YYYY-MM-DD)`. Only an ADR the user explicitly provides or asks to record ("record this as an ADR") → `adr/` per `page-rules.md` "ADRs".
64
+
65
+ Frontmatter: `prd: null`, `spec: null`. A verification report pasted in chat still counts (above). If the gate finds nothing on disk, the status after enforce is `not-built`, and the NOT BUILT block says "no PRD, spec, or code in this repo".
66
+
67
+ ## Domain index row
68
+
69
+ `| Feature | Why | [page](administration/<slug>.md) or — | [page](storefront/<slug>.md) or — |`
70
+
71
+ Four columns, no spec and no status. The wiki is the durable record and `specs/` is working material that goes away once a feature is documented, so the source paths live only in the feature page's `spec`/`prd` front matter. A documented feature is a built feature by default, so the overview does not repeat a status that is `built` on every row — the exception is carried where a reader meets it: the page's own `status` front matter and its ⚠️ block, written when the user enforced documentation of something not built.
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: <Decision title>
3
+ nav_order: <n>
4
+ parent: Decision records
5
+ date: YYYY-MM-DD
6
+ area: <platform|checkout|catalogues|orders|customers|process>
7
+ tags: [<tag>]
8
+ authors: [<Name>]
9
+ status: <accepted|superseded|deprecated>
10
+ ---
11
+
12
+ # <Decision title>
13
+
14
+ Shopware ADR format. File name: `adr/YYYY-MM-DD-<kebab-title>.md`. The adr index in [../adr/index.md](../adr/index.md) — its regenerated TOC block, and additionally a Liquid-rendered table on wikis using the Jekyll flavor — picks it up automatically. Filled only for an ADR the user provides in chat as accepted — never generated from the skill's own judgment; a not-yet-accepted ADR belongs in `specs/*-adr-*.md` as WIP. WIP files are not written from this template; they are promoted per `reference/adr-promotion.md` once accepted and built (same frontmatter plus `id`, `prd`, `spec`, `owner`, `promoted_from`, `promoted`, body carried over). Use `area: process` for project/process decisions and a `business` tag for business rules; routine business rationale belongs in the domain index "Why" column instead.
15
+
16
+ ## Context
17
+
18
+ <The situation and forces. Link the spec, PRD, or feature page that triggered it.>
19
+
20
+ ## Decision
21
+
22
+ <What we decided, present tense. One decision per ADR.>
23
+
24
+ ## Consequences
25
+
26
+ <Positive, negative, follow-ups. If this supersedes another ADR, link it and set that ADR's status to superseded.>
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: <Domain name>
3
+ has_children: true
4
+ nav_order: <n>
5
+ parent: Domains
6
+ type: domain
7
+ purpose: <One sentence: what this domain covers.>
8
+ scope: <What belongs here and what belongs to neighbouring domains.>
9
+ last_synced: YYYY-MM-DD
10
+ verified_against: Shopware 6.7.13
11
+ resync: sw-document-feature updates the feature table.
12
+ tags: [<domain-slug>, domain, index]
13
+ ---
14
+
15
+ # <Domain name>
16
+
17
+ <1–2 sentences: what this domain covers, what belongs to a neighbouring domain instead.>
18
+
19
+ ## Features
20
+
21
+ | Feature | Why (business goal) | Administration | Storefront |
22
+ |---|---|---|---|
23
+ | <Feature> | <One sentence — the single source for the why; feature pages link here.> | [page](administration/<slug>.md) or — | [page](storefront/<slug>.md) or — |
24
+
25
+ ## Domain notes
26
+
27
+ <Cross-feature facts: shared entities, invariants, what this domain deliberately does not do.>
28
+
29
+ ## Related
30
+
31
+ - [../index.md](../index.md)
32
+
33
+ ---
34
+
35
+ *Scope: <one line>. · Last synced: YYYY-MM-DD · Verified against Shopware 6.7.13 · Re-sync: reconcile the
36
+ feature table with `domains/<domain-slug>/*/`.*
@@ -0,0 +1,64 @@
1
+ ---
2
+ title: "<Feature name> (<Administration|Storefront>)"
3
+ nav_order: <n>
4
+ parent: <Domain title>
5
+ grand_parent: Domains
6
+ domain: <domain-slug>
7
+ surface: <administration|storefront>
8
+ feature: <feature-slug>
9
+ status: <built|partially-built|planned|not-built|deprecated>
10
+ extension: <PluginName in custom/, composer package vendor/name, or null>
11
+ spec: <specs/NNNN-slug-spec.md or null>
12
+ prd: <specs/NNNN-slug.md or null>
13
+ verified_against: Shopware 6.7.13
14
+ last_synced: YYYY-MM-DD
15
+ tags: [<domain-slug>, <surface>]
16
+ related: [../<other-surface>/<feature-slug>.md, ../index.md]
17
+ ---
18
+
19
+ # <Feature name> — <Administration|Storefront>
20
+
21
+ <1–2 sentences: what on THIS surface. For the why, link to the domain index feature entry: [Domain index](../index.md#features). Storefront half may link to the Administration half instead of restating.>
22
+
23
+ ## Status
24
+
25
+ <If built: "`built` — verified YYYY-MM-DD (AC-1..AC-n pass).">
26
+
27
+ <If NOT built / planned / partially built, this block is mandatory:>
28
+ > ⚠️ NOT BUILT
29
+ >
30
+ > **What exists in the repo:** <PRD/spec/flag/partial code, with paths>
31
+ > **What is missing:** <what sw-document-feature could not find under custom/>
32
+ > **Reference:** <spec ACs, verification report date or "not run">. Checked against the repo on YYYY-MM-DD.
33
+ >
34
+ > Do not describe this feature as available. Everything below is the *intended* design from the spec.
35
+
36
+ ## Business user
37
+
38
+ <How it is used on THIS surface only. Administration: menu path, fields, workflows, ACL. Storefront: what the shopper sees and does. Concise.>
39
+
40
+ ## Developer
41
+
42
+ - **Where:** <extension, paths, entities, modules, routes>
43
+ - **Extension points used:** <events, decorators, entity extensions, cart processors, Twig blocks, component overrides>
44
+ - **Decisions:** <key choices and why; link ADRs>
45
+ - **Config:** <keys, flags — link ../../platform/configuration.md>
46
+ - **Debug/observe:** <log channel, profiler hints — link ../../platform/logging.md, ../../platform/debugging.md>
47
+ - **Gotchas:** <surprises for the next developer>
48
+
49
+ No code listings. At most a one-line snippet if unavoidable.
50
+
51
+ ## Related
52
+
53
+ - Counterpart surface: [../<other-surface>/<feature-slug>.md](../index.md)
54
+ - Domain: [../index.md](../index.md)
55
+ - Spec / PRD / ADRs / platform pages
56
+
57
+ ## Decision Log
58
+
59
+ <Optional. One line per user decision, override, or status change; append only, never rewrite. Omit the section if empty.>
60
+ - YYYY-MM-DD — <e.g. User enforced documentation although the built-check found no code>
61
+
62
+ ---
63
+
64
+ *Last synced: YYYY-MM-DD · Verified against Shopware 6.7.13 · Re-sync: re-run `sw-document-feature`.*
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: "<Base or surface guideline file title, matching the platform file>"
3
+ nav_order: <n>
4
+ parent: Guidelines
5
+ merge:
6
+ <platform-section-anchor>: <override|extend|waive>
7
+ adr: [adr/<date>-<topic>.md]
8
+ tags: [guidelines, platform]
9
+ last_synced: YYYY-MM-DD
10
+ verified_against: Shopware 6.7.13
11
+ ---
12
+
13
+ # <Title>
14
+
15
+ <1–2 sentences: what this project changes about `<same file name>` in the Shopware platform
16
+ guidelines, and why. Everything not listed here is inherited unchanged — do not restate platform
17
+ rules.>
18
+
19
+ <!--
20
+ Read the platform file first — `read_doc platform/guidelines/<version>/<file>.md` — and copy the
21
+ real heading anchor for each section you act on into `merge:` above. One `## <heading>` per rule
22
+ below, anchor matching a real platform section unless the rule is a pure addition.
23
+
24
+ override — replaces the platform section in place. Body is the full replacement rule.
25
+ extend — inserted directly before the platform section; both apply, this one first.
26
+ waive — replaces the platform section; body states the reason and starts with `WAIVED:`.
27
+ (anchor not in the platform file) — an addition, appended after the last platform section.
28
+ -->
29
+
30
+ ## <Platform section heading, verbatim anchor>
31
+
32
+ <The project's rule for this section. For `waive`, start with `WAIVED:` and state the reason.>
33
+
34
+ ## Related
35
+
36
+ - [Guidelines](index.md)
37
+ - ADR: [<id>](../adr/<file>.md) <if `adr:` is set>
38
+
39
+ ---
40
+
41
+ *Last synced: YYYY-MM-DD · Verified against Shopware 6.7.13 · Re-sync: update when the rule
42
+ changes or the platform file's anchor is renamed by regeneration.*