@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.
- package/.mcp.json +8 -0
- package/CHANGELOG.md +78 -0
- package/CONTRIBUTING.md +54 -0
- package/LICENSE +21 -0
- package/README.md +304 -0
- package/SECURITY.md +50 -0
- package/agents/sw-admin-frontend-developer.md +52 -0
- package/agents/sw-php-backend-developer.md +63 -0
- package/agents/sw-product-manager.md +62 -0
- package/agents/sw-qa-engineer.md +160 -0
- package/agents/sw-shopware-architect.md +79 -0
- package/agents/sw-storefront-developer.md +93 -0
- package/agents/sw-tender-editor.md +43 -0
- package/bin/cli.mjs +73 -0
- package/codex/agents/sw-admin-frontend-developer.toml +54 -0
- package/codex/agents/sw-php-backend-developer.toml +65 -0
- package/codex/agents/sw-product-manager.toml +66 -0
- package/codex/agents/sw-qa-engineer.toml +161 -0
- package/codex/agents/sw-shopware-architect.toml +81 -0
- package/codex/agents/sw-storefront-developer.toml +96 -0
- package/codex/agents/sw-tender-editor.toml +50 -0
- package/content/AGENTS.md +63 -0
- package/content/claude-settings.json +31 -0
- package/content/mcp-servers.json +18 -0
- package/copilot/agents/sw-admin-frontend-developer.agent.md +53 -0
- package/copilot/agents/sw-php-backend-developer.agent.md +64 -0
- package/copilot/agents/sw-product-manager.agent.md +65 -0
- package/copilot/agents/sw-qa-engineer.agent.md +160 -0
- package/copilot/agents/sw-shopware-architect.agent.md +80 -0
- package/copilot/agents/sw-storefront-developer.agent.md +94 -0
- package/copilot/agents/sw-tender-editor.agent.md +46 -0
- package/lib/actions.mjs +449 -0
- package/lib/commands.mjs +446 -0
- package/lib/companions.mjs +117 -0
- package/lib/content.mjs +101 -0
- package/lib/fsx.mjs +188 -0
- package/lib/guide.mjs +98 -0
- package/lib/hosts.mjs +283 -0
- package/lib/lock.mjs +158 -0
- package/lib/merge.mjs +338 -0
- package/lib/out.mjs +74 -0
- package/mcp.json +10 -0
- package/package.json +58 -0
- package/plugin.json +19 -0
- package/skills/sw-design-requirements/SKILL.md +102 -0
- package/skills/sw-design-requirements/reference/clarification-loop.md +20 -0
- package/skills/sw-design-requirements/reference/confidence-rubric.md +82 -0
- package/skills/sw-design-requirements/reference/consistency-probes.md +65 -0
- package/skills/sw-design-requirements/reference/editor-gate.md +15 -0
- package/skills/sw-design-requirements/reference/editor-mode.md +15 -0
- package/skills/sw-design-requirements/reference/prd-confidence-checklist.md +95 -0
- package/skills/sw-design-requirements/reference/prd-template.md +153 -0
- package/skills/sw-design-requirements/reference/readiness-and-report.md +21 -0
- package/skills/sw-design-requirements/reference/splitting-guidelines.md +69 -0
- package/skills/sw-design-solution/SKILL.md +48 -0
- package/skills/sw-design-solution/reference/adr-flow.md +13 -0
- package/skills/sw-design-solution/reference/adr-template.md +40 -0
- package/skills/sw-design-solution/reference/clarification-loop.md +13 -0
- package/skills/sw-design-solution/reference/draft-and-spawn.md +21 -0
- package/skills/sw-design-solution/reference/editor-mode.md +16 -0
- package/skills/sw-design-solution/reference/pre-check-and-target.md +19 -0
- package/skills/sw-design-solution/reference/readiness-and-report.md +15 -0
- package/skills/sw-design-solution/reference/research-and-evidence.md +25 -0
- package/skills/sw-design-solution/reference/tech-spec-template.md +112 -0
- package/skills/sw-design-solution/reference/toolchain-conformance.md +9 -0
- package/skills/sw-discover-tender/SKILL.md +68 -0
- package/skills/sw-discover-tender/reference/agent-briefs.md +135 -0
- package/skills/sw-discover-tender/reference/analysis-template.md +224 -0
- package/skills/sw-discover-tender/reference/assumption-catalogue.md +104 -0
- package/skills/sw-discover-tender/reference/client-question-rules.md +47 -0
- package/skills/sw-discover-tender/reference/confidence-rubric.md +80 -0
- package/skills/sw-discover-tender/reference/context-parameters.md +116 -0
- package/skills/sw-discover-tender/reference/coverage-mapping.md +62 -0
- package/skills/sw-discover-tender/reference/editor-mode.md +11 -0
- package/skills/sw-discover-tender/reference/editor-session.md +115 -0
- package/skills/sw-discover-tender/reference/estimation-model.md +106 -0
- package/skills/sw-discover-tender/reference/procedure.md +98 -0
- package/skills/sw-discover-tender/reference/response-rules.md +13 -0
- package/skills/sw-document-feature/SKILL.md +64 -0
- package/skills/sw-document-feature/reference/adr-promotion.md +64 -0
- package/skills/sw-document-feature/reference/built-check.md +71 -0
- package/skills/sw-document-feature/reference/domain-guidelines.md +59 -0
- package/skills/sw-document-feature/reference/page-rules.md +129 -0
- package/skills/sw-document-feature/reference/procedure.md +58 -0
- package/skills/sw-document-feature/reference/scaffold/README.md +78 -0
- package/skills/sw-document-feature/reference/scaffold/_config.yml +51 -0
- package/skills/sw-document-feature/reference/scaffold/adr/index.md +44 -0
- package/skills/sw-document-feature/reference/scaffold/baseline/glossary.md +55 -0
- package/skills/sw-document-feature/reference/scaffold/baseline/tech-stack.md +48 -0
- package/skills/sw-document-feature/reference/scaffold/domains/index.md +55 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/configuration.md +54 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/customization-guidelines.md +47 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/debugging.md +55 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/environments-and-deployment.md +49 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/extensions-inventory.md +40 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/index.md +39 -0
- package/skills/sw-document-feature/reference/scaffold/domains/platform/logging.md +46 -0
- package/skills/sw-document-feature/reference/scaffold/guidelines/documentation-guidelines.md +102 -0
- package/skills/sw-document-feature/reference/scaffold/guidelines/index.md +50 -0
- package/skills/sw-document-feature/reference/scaffold/index.md +68 -0
- package/skills/sw-document-feature/reference/scaffold/vanilla/README.md +24 -0
- package/skills/sw-document-feature/reference/scaffold/vanilla/adr/index.md +36 -0
- package/skills/sw-document-feature/reference/scaffold/vanilla/index.md +68 -0
- package/skills/sw-document-feature/reference/setup-wiki.md +142 -0
- package/skills/sw-document-feature/reference/source-mapping.md +71 -0
- package/skills/sw-document-feature/reference/templates/adr.md +26 -0
- package/skills/sw-document-feature/reference/templates/domain-index.md +36 -0
- package/skills/sw-document-feature/reference/templates/feature-page.md +64 -0
- package/skills/sw-document-feature/reference/templates/guideline.md +42 -0
- package/skills/sw-implement-feature/SKILL.md +52 -0
- package/skills/sw-implement-feature/reference/ac-loop.md +24 -0
- package/skills/sw-implement-feature/reference/build-order.md +17 -0
- package/skills/sw-implement-feature/reference/delegation.md +18 -0
- package/skills/sw-setup/SKILL.md +144 -0
- package/skills/sw-setup/reference/rows.md +223 -0
- package/skills/sw-verify-feature/SKILL.md +64 -0
- package/skills/sw-verify-feature/reference/reconcile-and-report.md +42 -0
- package/skills/sw-verify-feature/reference/verification-report-template.md +57 -0
- package/skills/sw-verify-feature-ac-tests/SKILL.md +76 -0
- package/skills/sw-verify-feature-ac-tests/reference/audit-execute-score.md +40 -0
- package/skills/sw-verify-feature-architecture/SKILL.md +66 -0
- package/skills/sw-verify-feature-architecture/reference/guidelines-and-twig.md +27 -0
- package/skills/sw-verify-feature-code-quality/SKILL.md +73 -0
- package/skills/sw-verify-feature-code-quality/reference/gates.md +22 -0
|
@@ -0,0 +1,44 @@
|
|
|
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: Generated by Jekyll from the files in adr/; 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
|
+
{% assign adrs = site.pages | where_exp: "p", "p.dir contains '/adr/'" | where_exp: "p", "p.name != 'index.md'" | sort: "date" | reverse %}
|
|
26
|
+
{% if adrs.size > 0 %}
|
|
27
|
+
| Date | Title | Area | Status |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
{% for p in adrs %}| {{ p.date | date: "%Y-%m-%d" }} | [{{ p.title }}]({{ p.url | relative_url }}) | {{ p.area }} | {{ p.status }} |
|
|
30
|
+
{% endfor %}
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
## Table of contents
|
|
34
|
+
|
|
35
|
+
<!-- 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. -->
|
|
36
|
+
<!-- adr-toc:start -->
|
|
37
|
+
No decision records yet — the first one appears here once an accepted decision has been built.
|
|
38
|
+
<!-- adr-toc:end -->
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
*Scope: accepted and built decisions only — routine functional rationale lives in the domain index
|
|
43
|
+
feature tables. · Last synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: the table of
|
|
44
|
+
contents is regenerated by `sw-document-feature`; WIP records stay in `specs/` until promoted.*
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Glossary
|
|
3
|
+
nav_order: 3
|
|
4
|
+
type: project
|
|
5
|
+
purpose: Map project-specific words to Shopware's official terminology.
|
|
6
|
+
scope: Terms used in PRDs, specs, and docs. Not a Shopware glossary.
|
|
7
|
+
last_synced: {{DATE}}
|
|
8
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
9
|
+
resync: Add a row whenever a PRD introduces a new project term.
|
|
10
|
+
tags: [glossary, terminology]
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Glossary
|
|
14
|
+
|
|
15
|
+
One vocabulary across PRDs, specs, code and these pages. When the business has its own word for
|
|
16
|
+
something Shopware already names, the Shopware name wins in docs and code — this page records the
|
|
17
|
+
mapping so nobody has to guess.
|
|
18
|
+
|
|
19
|
+
## Shopware terms we use
|
|
20
|
+
|
|
21
|
+
| Term | Meaning |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Administration | The merchant back office (Vue application, Admin API) |
|
|
24
|
+
| Storefront | The shopper-facing site (Twig/JS, Store API) |
|
|
25
|
+
| Sales Channel | A storefront/API channel with its own domain, language, currency |
|
|
26
|
+
| Extension | A plugin, app, or theme — say *plugin* only when it is one |
|
|
27
|
+
| Store API / Admin API | The two HTTP APIs; Storefront uses the Store API, Administration the Admin API |
|
|
28
|
+
| Shopping Experiences | The CMS (layouts, blocks, elements) |
|
|
29
|
+
| Flow Builder | Event-driven automation configured in the Administration |
|
|
30
|
+
| Rule Builder | Conditions used by prices, promotions, shipping, payment |
|
|
31
|
+
| Catalogues | Products, categories, properties, manufacturers |
|
|
32
|
+
| Customer group | Customer segmentation used by prices and rules |
|
|
33
|
+
| Dynamic product group | Rule-based product set (product streams) |
|
|
34
|
+
|
|
35
|
+
## Project terms
|
|
36
|
+
|
|
37
|
+
<!-- One row per project word that differs from Shopware's. Note which domain owns a custom entity. -->
|
|
38
|
+
|
|
39
|
+
| Project term (from PRDs) | What it maps to | Notes |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
|
|
42
|
+
*Nothing recorded yet — add a row whenever a PRD introduces a new project term.*
|
|
43
|
+
|
|
44
|
+
## Terms we do not use
|
|
45
|
+
|
|
46
|
+
Don't say **admin panel** or **backend** — say *Administration*. Don't say **frontend** or **shop
|
|
47
|
+
front** — say *Storefront*. Don't say **shop** for a channel — say *Sales Channel*. Don't say
|
|
48
|
+
**plugin** when the thing may be an app or theme — say *Extension*. Don't say **module** or
|
|
49
|
+
**addon** — say *Extension*. Don't say **CMS page** — say *Shopping Experiences layout*.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
*Scope: project terms and the Shopware terms they map to — not a Shopware glossary. · Last synced:
|
|
54
|
+
{{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: add a row whenever a PRD introduces a new
|
|
55
|
+
project term.*
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Tech stack
|
|
3
|
+
nav_order: 2
|
|
4
|
+
type: project
|
|
5
|
+
purpose: The fixed technical baseline every feature is built and verified against.
|
|
6
|
+
scope: Versions, runtime, tooling, environment shape. Not per-feature configuration (see domains/platform/configuration.md).
|
|
7
|
+
last_synced: {{DATE}}
|
|
8
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
9
|
+
resync: Update after any Shopware, PHP, or shopware-cli upgrade; bump verified_against on all pages in the same change.
|
|
10
|
+
tags: [baseline, versions]
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Tech stack
|
|
14
|
+
|
|
15
|
+
What this project runs on. Every feature page is verified against the versions below, so when one
|
|
16
|
+
of them changes, the pages that were verified against the old one become visibly stale.
|
|
17
|
+
|
|
18
|
+
<!-- Fill from the repo, never from memory: Shopware = composer.lock shopware/core; PHP and Node = the docker-dev image tag in compose.yaml; Database = the database service image; shopware-cli = `shopware-cli --version`. Replace _TBD_ rows only with a verified value; never invent one. -->
|
|
19
|
+
|
|
20
|
+
## Versions
|
|
21
|
+
|
|
22
|
+
| Component | Version | Where it comes from |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| Shopware | {{SHOPWARE_VERSION}} | `composer.json` / `composer.lock` (`shopware/core`) |
|
|
25
|
+
|
|
26
|
+
*PHP, database, Node and shopware-cli versions not recorded yet — fill from `compose.yaml`,
|
|
27
|
+
`.shopware-project.yml`, and `shopware-cli --version` when known.*
|
|
28
|
+
|
|
29
|
+
The project is Composer-based, built from the `shopware/production` template.
|
|
30
|
+
|
|
31
|
+
## Where things live
|
|
32
|
+
|
|
33
|
+
- Extensions: `custom/plugins/`, `custom/apps/`, `custom/static-plugins/` — see the
|
|
34
|
+
[extensions inventory](../domains/platform/extensions-inventory.md).
|
|
35
|
+
- Specs and PRDs: `specs/`. This wiki: `docs/project-wiki/`.
|
|
36
|
+
- Local environment and non-local environments:
|
|
37
|
+
[Environments and deployment](../domains/platform/environments-and-deployment.md).
|
|
38
|
+
|
|
39
|
+
## Related
|
|
40
|
+
|
|
41
|
+
- [Glossary](glossary.md)
|
|
42
|
+
- [Platform](../domains/platform/index.md)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
*Scope: versions and environment shape only. · Last synced: {{DATE}} · Verified against Shopware
|
|
47
|
+
{{SHOPWARE_VERSION}} · Re-sync: compare with `composer.json`, `composer.lock`, `compose.yaml` and
|
|
48
|
+
`.shopware-project.yml` after any upgrade.*
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Domains
|
|
3
|
+
has_children: true
|
|
4
|
+
nav_order: 4
|
|
5
|
+
type: index
|
|
6
|
+
purpose: Map of business domains and their features on each surface.
|
|
7
|
+
scope: All domains under docs/project-wiki/domains/. Feature rows are summaries; detail lives on the feature pages.
|
|
8
|
+
last_synced: {{DATE}}
|
|
9
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
10
|
+
resync: sw-document-feature updates the feature columns; check rows against each domain index.
|
|
11
|
+
tags: [index, domains]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Domains
|
|
15
|
+
|
|
16
|
+
Feature documentation is grouped by business domain. Pick a domain, then the surface the user acts
|
|
17
|
+
on — Administration for the merchant, Storefront for the shopper.
|
|
18
|
+
|
|
19
|
+
<!-- sw-document-feature adds a row when it creates a domain. Only domains that have a directory appear here. -->
|
|
20
|
+
|
|
21
|
+
| Domain | Purpose | Administration | Storefront |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| [Platform](platform/index.md) | Cross-cutting infrastructure, extensions, configuration, observability | — | — |
|
|
24
|
+
|
|
25
|
+
Each feature carries its own status on the domain page it belongs to.
|
|
26
|
+
|
|
27
|
+
## Canonical domains
|
|
28
|
+
|
|
29
|
+
Domains are created on demand from this list — never invent a slug outside it without an ADR
|
|
30
|
+
(`area: process`). A domain only appears in the table above once it has a directory here. Guidance:
|
|
31
|
+
`reference/domain-guidelines.md` in the `sw-document-feature` skill.
|
|
32
|
+
|
|
33
|
+
| Slug | Domain | Covers |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `catalogues` | Catalogues | Products, variants, categories, properties, manufacturers, Dynamic product groups, availability |
|
|
36
|
+
| `checkout` | Checkout | Cart, shipping and payment selection, order placement |
|
|
37
|
+
| `orders` | Orders | Post-checkout order lifecycle, documents, returns, states |
|
|
38
|
+
| `customers` | Customers | Accounts, registration, Customer groups, addresses, B2B roles |
|
|
39
|
+
| `content` | Content | Shopping Experiences layouts, media, SEO, snippets/translations |
|
|
40
|
+
| `marketing` | Marketing | Promotions, newsletters, product reviews, cross-selling |
|
|
41
|
+
| `sales-channels` | Sales Channels | Sales Channel setup, domains, languages, currencies, countries, taxes |
|
|
42
|
+
| `automation` | Automation | Flow Builder flows, Rule Builder rules, scheduled tasks, mail templates |
|
|
43
|
+
| `settings` | Settings | System settings and merchant configuration that no other domain owns |
|
|
44
|
+
| `integrations` | Integrations | ERP/PIM/payment/shipping connectors, imports/exports, webhooks |
|
|
45
|
+
| `platform` | Platform | Cross-cutting infrastructure (no features, no surfaces) |
|
|
46
|
+
|
|
47
|
+
## Adding a domain
|
|
48
|
+
|
|
49
|
+
Create `domains/<slug>/index.md` from `reference/templates/domain-index.md` in the `sw-document-feature` skill, add a row above and in the [wiki home](../index.md) domain table.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
*Scope: domain level only — feature detail lives on the feature pages. · Last synced: {{DATE}} ·
|
|
54
|
+
Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: reconcile with each `domains/<domain>/index.md` feature
|
|
55
|
+
table.*
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Configuration
|
|
3
|
+
nav_order: 3
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: Where each kind of setting lives and how features expose their configuration.
|
|
8
|
+
scope: Environment variables, system config keys, feature flags. Values are examples, never real secrets.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: sw-document-feature adds rows for new config keys found in a spec; check against each extension's config.xml.
|
|
12
|
+
tags: [platform, configuration, feature-flags]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Configuration
|
|
16
|
+
|
|
17
|
+
One lookup for where a given setting lives, so nobody has to grep the codebase for it.
|
|
18
|
+
|
|
19
|
+
## Layers
|
|
20
|
+
|
|
21
|
+
<!-- Adjust the "Where" column to this project; keep the three layers. Fill "Feature flags" from config/packages/ once one is registered. -->
|
|
22
|
+
|
|
23
|
+
| Layer | Used for | Where |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| Environment variables | Infrastructure (DB, mailer, search, URLs) | `.env`, `.env.local`, `env.example` |
|
|
26
|
+
| System config (`bin/console system:config:*`) | Merchant-editable settings, per Sales Channel | Administration → Settings → Extensions |
|
|
27
|
+
|
|
28
|
+
## System config keys
|
|
29
|
+
|
|
30
|
+
<!-- One row per key an extension exposes: `<Extension>.config.<key>`. Link the feature page that uses it. Never put real values or secrets here. -->
|
|
31
|
+
|
|
32
|
+
| Key | Domain | Default | Notes |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
|
|
35
|
+
*No project-specific config keys recorded yet.*
|
|
36
|
+
|
|
37
|
+
## Feature flags
|
|
38
|
+
|
|
39
|
+
<!-- One row per flag; Owner links the domain index. Flags gate everything with status partially-built. -->
|
|
40
|
+
|
|
41
|
+
| Flag | Default | Owner |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
|
|
44
|
+
*No feature flags recorded yet.*
|
|
45
|
+
|
|
46
|
+
## Related
|
|
47
|
+
|
|
48
|
+
- [Environments and deployment](environments-and-deployment.md), [Debugging](debugging.md)
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
*Scope: project-level config only, values are examples, never real secrets · Last synced: {{DATE}} ·
|
|
53
|
+
Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: diff with `.env`/`.env.local`/`env.example`,
|
|
54
|
+
`config/packages/*.yaml`, and each extension's `config.xml` once extensions exist.*
|
package/skills/sw-document-feature/reference/scaffold/domains/platform/customization-guidelines.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Customization guidelines
|
|
3
|
+
nav_order: 2
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: How we extend Shopware in this project, so every feature uses the same mechanisms.
|
|
8
|
+
scope: Choice of extension type and extension mechanism. Not a Shopware tutorial — links to Shopware docs for mechanics.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: Review when Shopware deprecates an extension mechanism or an ADR changes a rule here.
|
|
12
|
+
tags: [platform, guidelines, extensions]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Customization guidelines
|
|
16
|
+
|
|
17
|
+
This is the standard Shopware guidance the project follows by default; no project-specific
|
|
18
|
+
exceptions are recorded yet (see [Decision records](../../adr/index.md)). Enforceable coding
|
|
19
|
+
rules — architecture, code, QA — live in [Guidelines](../../guidelines/index.md), not here.
|
|
20
|
+
|
|
21
|
+
## Extension type
|
|
22
|
+
|
|
23
|
+
<!-- State the project's choice and link the ADR that made it once one is recorded, e.g. plugins for owned code, apps for third-party integrations, one theme for look and feel. Until then, this is Shopware's own default guidance. -->
|
|
24
|
+
|
|
25
|
+
- Prefer an app where it suffices (no server-side code, distributable via the Store).
|
|
26
|
+
- Otherwise a plugin (owned, deployed code).
|
|
27
|
+
- Reach for a theme only for pure look-and-feel — never for business logic.
|
|
28
|
+
|
|
29
|
+
## Preferred mechanisms, in order
|
|
30
|
+
|
|
31
|
+
<!-- Keep this an ordered list of "reach for X before Y" with one line of rationale each. Adjust once an ADR overrides a step. -->
|
|
32
|
+
|
|
33
|
+
1. Events and subscribers, over overriding core.
|
|
34
|
+
2. Service decoration (abstract class, thin decorator), over overriding core.
|
|
35
|
+
3. Entity extensions, over core schema changes.
|
|
36
|
+
4. Twig block overrides in the extension, over copying core templates.
|
|
37
|
+
|
|
38
|
+
## Related
|
|
39
|
+
|
|
40
|
+
- [Guidelines](../../guidelines/index.md), [Extensions inventory](extensions-inventory.md), [Debugging](debugging.md)
|
|
41
|
+
- Shopware docs: plugin fundamentals, decorating services, entity extensions (via ShopwareDevKnowledgeBase MCP).
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
*Scope: choice of extension type and mechanism, not a Shopware tutorial · Last synced: {{DATE}} ·
|
|
46
|
+
Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: review when Shopware deprecates a mechanism or an ADR
|
|
47
|
+
changes a rule here.*
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Debugging
|
|
3
|
+
nav_order: 5
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: How to observe and debug this project locally, and where to look first for common failures.
|
|
8
|
+
scope: Local development. Production incident handling lives in environments-and-deployment.md.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: Update when the local setup or tooling changes (see baseline/tech-stack.md).
|
|
12
|
+
tags: [platform, debugging, profiler, xdebug]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Debugging
|
|
16
|
+
|
|
17
|
+
Where to look first when something breaks locally, and which tool answers which question.
|
|
18
|
+
|
|
19
|
+
## Tools
|
|
20
|
+
|
|
21
|
+
<!-- Keep the generic Shopware tools; add the project's container/service names, ports and IDE settings once known. -->
|
|
22
|
+
|
|
23
|
+
- **Symfony profiler** at `/_profiler` when `APP_ENV=dev`; Store API and Admin API requests appear there too.
|
|
24
|
+
- **Logs**: see [Logging](logging.md).
|
|
25
|
+
- **`bin/console`** for any CLI diagnostics (`bundle:dump`, `cache:clear`, `database:migrate`, …).
|
|
26
|
+
- **shopware-cli**: `shopware-cli project ci` for the full lint/static-analysis run, `shopware-cli extension validate --full` per extension.
|
|
27
|
+
|
|
28
|
+
Xdebug config is not recorded in this project yet — fill in the container, `XDEBUG_MODE`, and IDE
|
|
29
|
+
server name once set up.
|
|
30
|
+
|
|
31
|
+
## Common failure lookups
|
|
32
|
+
|
|
33
|
+
<!-- Add a row whenever a feature page's Gotchas reveal a recurring symptom; link the feature page. -->
|
|
34
|
+
|
|
35
|
+
| Symptom | Look first |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Administration module missing after change | `bin/console bundle:dump` + rebuild; check the extension's `main.js` entry and ACL privileges |
|
|
38
|
+
| Storefront template change not visible | `bin/console cache:clear`, `theme:compile`; confirm the block lives in the domain extension, not the theme |
|
|
39
|
+
| Custom entity not found / 500 on Admin API | migration ran? `bin/console database:migrate --all`; entity definition registered in `services.yaml` |
|
|
40
|
+
| Flow not firing | `business_events` log; is the event registered as a business event? |
|
|
41
|
+
|
|
42
|
+
## Surface tips
|
|
43
|
+
|
|
44
|
+
- Administration: Vue devtools work on the dev build; the Admin API request log is in the profiler.
|
|
45
|
+
- Storefront: `?_profiler` on any page; Twig template names visible via the profiler's Twig panel.
|
|
46
|
+
|
|
47
|
+
## Related
|
|
48
|
+
|
|
49
|
+
- [Configuration](configuration.md), [Customization guidelines](customization-guidelines.md)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
*Scope: local development, production incidents live in environments-and-deployment.md ·
|
|
54
|
+
Last synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: re-run each tip on a fresh
|
|
55
|
+
checkout after upgrades.*
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Environments and deployment
|
|
3
|
+
nav_order: 6
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: Which environments exist, how a build reaches them, and how to roll back.
|
|
8
|
+
scope: Process and topology. No hostnames or credentials.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: Update when the CI pipeline or environment list changes.
|
|
12
|
+
tags: [platform, deployment, environments]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Environments and deployment
|
|
16
|
+
|
|
17
|
+
<!-- List every environment defined in .shopware-project.yml or the CI config, local first. Fill from the repo, never invent one. -->
|
|
18
|
+
|
|
19
|
+
*No environment beyond `local` is recorded for this project yet.*
|
|
20
|
+
|
|
21
|
+
## Local stack
|
|
22
|
+
|
|
23
|
+
<!-- One row per service the local stack exposes, read from compose.yaml / docker-dev; ports and addresses are project facts, not examples. -->
|
|
24
|
+
|
|
25
|
+
*Local services not recorded yet — see [Tech stack](../../baseline/tech-stack.md) for how to read them from `compose.yaml`.*
|
|
26
|
+
|
|
27
|
+
Component versions (PHP, Node, Database, Shopware) live on
|
|
28
|
+
[Tech stack](../../baseline/tech-stack.md) — not repeated here.
|
|
29
|
+
|
|
30
|
+
## Deployment flow
|
|
31
|
+
|
|
32
|
+
<!-- Numbered steps from CI to running: build (shopware-cli project ci / build), artifact, target routine (migrations, plugin:refresh/update, theme:compile, cache warmup), rollback strategy. -->
|
|
33
|
+
|
|
34
|
+
*No deployment pipeline is recorded in this repo yet.*
|
|
35
|
+
|
|
36
|
+
## Rules
|
|
37
|
+
|
|
38
|
+
- No manual changes on non-local containers.
|
|
39
|
+
- Feature flags (see [Configuration](configuration.md)) gate anything with `status: partially-built`.
|
|
40
|
+
|
|
41
|
+
## Related
|
|
42
|
+
|
|
43
|
+
- [Tech stack](../../baseline/tech-stack.md), [Logging](logging.md)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
*Scope: process and topology, no hostnames or credentials · Last synced: {{DATE}} · Verified
|
|
48
|
+
against Shopware {{SHOPWARE_VERSION}} · Re-sync: update when a CI pipeline or a new environment is added to
|
|
49
|
+
`.shopware-project.yml`.*
|
package/skills/sw-document-feature/reference/scaffold/domains/platform/extensions-inventory.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Extensions inventory
|
|
3
|
+
nav_order: 1
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: The authoritative list of custom Extensions (plugins, apps, themes) in this project and which domain owns each.
|
|
8
|
+
scope: custom/plugins, custom/apps, custom/static-plugins, and vendor-installed store extensions that deliver project features. Not Shopware core.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: sw-document-feature adds a row when a spec introduces a new extension; verify with `bin/console plugin:list` and `app:list`.
|
|
12
|
+
tags: [platform, extensions, inventory]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Extensions inventory
|
|
16
|
+
|
|
17
|
+
Every Extension this project ships, and which domain owns it. If an extension is not listed here, it is not ours.
|
|
18
|
+
|
|
19
|
+
<!-- One row per extension. Type = plugin | app | theme | package (vendor-installed). Path = custom/... or vendor/... Owning domain links the domain index. -->
|
|
20
|
+
|
|
21
|
+
| Extension | Type | Path | Owning domain | Depends on | Purpose | Notes |
|
|
22
|
+
|---|---|---|---|---|---|---|
|
|
23
|
+
|
|
24
|
+
*No extensions installed yet — `custom/plugins/`, `custom/apps/` and `custom/static-plugins/` are
|
|
25
|
+
all empty.*
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
<!-- Record the project's own naming and ownership rules here, e.g. one plugin per domain group, a shared core plugin for cross-cutting code, technical-name prefix for config keys and log channels. Keep them as rules, not history — history goes to adr/. -->
|
|
30
|
+
|
|
31
|
+
- Every extension that ships project functionality requires a row here, including vendor-installed ones.
|
|
32
|
+
- An extension serving more than one domain records the sharing in the Notes column.
|
|
33
|
+
- Cross-cutting code (logging, feature flags, shared traits) goes into the platform-level extension named here, never into a business-domain extension. See [Customization guidelines](customization-guidelines.md).
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
*Scope: custom/plugins, custom/apps, custom/static-plugins, and vendor-installed store extensions,
|
|
38
|
+
not Shopware core · Last synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync:
|
|
39
|
+
`bin/console plugin:list`, `bin/console app:list`, `ls custom/plugins custom/apps
|
|
40
|
+
custom/static-plugins` vs this table.*
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Platform
|
|
3
|
+
has_children: true
|
|
4
|
+
nav_order: 2
|
|
5
|
+
parent: Domains
|
|
6
|
+
type: domain
|
|
7
|
+
purpose: Cross-cutting application infrastructure shared by every business domain.
|
|
8
|
+
scope: Extensions inventory, customization rules, configuration, logging, debugging, environments. No business features.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: Review after each Shopware upgrade or infrastructure change; each sub-page has its own resync rule.
|
|
12
|
+
tags: [platform, infrastructure, index]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Platform
|
|
16
|
+
|
|
17
|
+
Everything a developer needs that is not tied to a single business feature. Unlike business
|
|
18
|
+
domains, Platform has no Administration/Storefront split and no feature pages — anything a
|
|
19
|
+
merchant or shopper can see belongs to a business domain, not here.
|
|
20
|
+
|
|
21
|
+
| Page | Answers |
|
|
22
|
+
|---|---|
|
|
23
|
+
| [Extensions inventory](extensions-inventory.md) | Which custom extensions exist and who owns them |
|
|
24
|
+
| [Customization guidelines](customization-guidelines.md) | How we extend Shopware here (plugin vs app, decoration, events, theme) |
|
|
25
|
+
| [Configuration](configuration.md) | Environment variables, system config keys, feature flags |
|
|
26
|
+
| [Logging](logging.md) | Channels, destinations, levels, correlation |
|
|
27
|
+
| [Debugging](debugging.md) | Profiler, Xdebug, common failure lookups |
|
|
28
|
+
| [Environments and deployment](environments-and-deployment.md) | Environments, build, deploy, rollback |
|
|
29
|
+
|
|
30
|
+
## Related
|
|
31
|
+
|
|
32
|
+
- [Tech stack](../../baseline/tech-stack.md)
|
|
33
|
+
- [Decision records](../../adr/index.md)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
*Scope: infrastructure and conventions only, no business features · Last synced: {{DATE}} ·
|
|
38
|
+
Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: walk the pages below after upgrades; `sw-document-feature`
|
|
39
|
+
only touches the extensions inventory and configuration.*
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Logging
|
|
3
|
+
nav_order: 4
|
|
4
|
+
grand_parent: Domains
|
|
5
|
+
parent: Platform
|
|
6
|
+
type: platform
|
|
7
|
+
purpose: Which log channels exist, where they go, and how to correlate entries.
|
|
8
|
+
scope: Application logs from custom extensions and Shopware. Not infrastructure/container logs.
|
|
9
|
+
last_synced: {{DATE}}
|
|
10
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
11
|
+
resync: Update when an extension registers a new Monolog channel (config/packages/monolog.yaml).
|
|
12
|
+
tags: [platform, logging, observability]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Logging
|
|
16
|
+
|
|
17
|
+
Which log channel carries what, and where it ends up — so you look in the right file first.
|
|
18
|
+
|
|
19
|
+
## Channels
|
|
20
|
+
|
|
21
|
+
<!-- Shopware's own channels first (app, business_events), then one row per project channel. Destination = file path or stream, no hostnames. -->
|
|
22
|
+
|
|
23
|
+
| Channel | Emitted by | Level (prod) | Destination |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| `app` | Shopware core | `error` | `var/log/prod.log`, stderr in containers |
|
|
26
|
+
| `business_events` | Flow Builder, mail | `info` | `var/log/business_events.log` |
|
|
27
|
+
|
|
28
|
+
*No project-specific log channel is recorded yet.*
|
|
29
|
+
|
|
30
|
+
Local (`APP_ENV=dev`): everything at `debug`, also in the Symfony profiler.
|
|
31
|
+
|
|
32
|
+
## Conventions
|
|
33
|
+
|
|
34
|
+
<!-- Context fields every entry carries (sales_channel_id, order_number…), what must never be logged (customer PII), correlation id handling, which channel a feature must use. -->
|
|
35
|
+
|
|
36
|
+
*No project-specific logging conventions recorded yet.*
|
|
37
|
+
|
|
38
|
+
## Related
|
|
39
|
+
|
|
40
|
+
- [Debugging](debugging.md), [Environments and deployment](environments-and-deployment.md)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
*Scope: application logs from custom extensions and Shopware, not infrastructure/container logs ·
|
|
45
|
+
Last synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: compare with
|
|
46
|
+
`config/packages/monolog.yaml` when an extension registers a new channel.*
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Documentation guidelines
|
|
3
|
+
nav_order: 1
|
|
4
|
+
parent: Guidelines
|
|
5
|
+
tags: [guidelines, documentation]
|
|
6
|
+
last_synced: {{DATE}}
|
|
7
|
+
verified_against: Shopware {{SHOPWARE_VERSION}}
|
|
8
|
+
type: reference
|
|
9
|
+
purpose: Reader-facing rules every page under docs/project-wiki/ follows.
|
|
10
|
+
scope: Structure, frontmatter, status vocabulary, terminology. Skill internals live in the sw-document-feature skill.
|
|
11
|
+
resync: Update when a page type, frontmatter field, or status value changes; record structural changes as an ADR with area process.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Documentation guidelines
|
|
15
|
+
|
|
16
|
+
The rules every page here follows, whether a person or the `sw-document-feature` skill wrote it.
|
|
17
|
+
This file has no Shopware platform counterpart — it is project-only and served as is, never merged.
|
|
18
|
+
|
|
19
|
+
## Page shape
|
|
20
|
+
|
|
21
|
+
Every page opens with its title, then one or two sentences of plain prose saying what the page is
|
|
22
|
+
for. Maintenance metadata (scope, last synced, verified against, how to re-sync) sits in a single
|
|
23
|
+
italic line at the *bottom* of the page, not above the content. Breadcrumbs and the sidebar are
|
|
24
|
+
rendered by the theme from the navigation front matter — never write them into the page body.
|
|
25
|
+
|
|
26
|
+
Keep pages short: one topic per page, no paragraph longer than about four lines, prefer a table or
|
|
27
|
+
bullets to prose. If a section would only contain a placeholder, leave it out until there is
|
|
28
|
+
something true to write.
|
|
29
|
+
|
|
30
|
+
## Folders and surfaces
|
|
31
|
+
|
|
32
|
+
One page per surface: `domains/<domain>/administration/<feature>.md` and
|
|
33
|
+
`.../storefront/<feature>.md`, same slug on both halves, never merged. The *why* lives only in the
|
|
34
|
+
domain index feature table; pages link to `../index.md#features`. `domains/platform/` is the
|
|
35
|
+
cross-cutting domain, and has no surfaces.
|
|
36
|
+
|
|
37
|
+
## Page types
|
|
38
|
+
|
|
39
|
+
| Type | Path | Template (in the `sw-document-feature` skill) |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Feature page | `domains/<domain>/<surface>/<feature>.md` | `reference/templates/feature-page.md` |
|
|
42
|
+
| Domain index | `domains/<domain>/index.md` | `reference/templates/domain-index.md` |
|
|
43
|
+
| Platform page | `domains/platform/<topic>.md` | no template — breadcrumb, prose intro, content sections, footer line |
|
|
44
|
+
| ADR | `adr/YYYY-MM-DD-title.md` | `reference/templates/adr.md` |
|
|
45
|
+
| Guideline | `guidelines/<file>.md` (no version folder — applies to the installed Shopware version) | `reference/templates/guideline.md` |
|
|
46
|
+
|
|
47
|
+
## Frontmatter
|
|
48
|
+
|
|
49
|
+
- All pages: `title`, `nav_order`, `tags[]` (plus `parent`/`grand_parent` when nested); durable pages also `type` (index|project|platform|domain|reference), `purpose`, `scope`, `resync`, `last_synced` (YYYY-MM-DD), `verified_against` (`Shopware <X.Y.Z>`).
|
|
50
|
+
- Feature pages: `domain`, `surface` (administration|storefront), `feature` (slug), `status`, `extension` (name in `custom/`, composer package, or null), `spec`, `prd` (path or null), `related[]`.
|
|
51
|
+
- ADRs: `title`, `date`, `area` (domain slug | platform | process), `tags[]`, `authors[]`, `status` (accepted|superseded|deprecated — `proposed`/`rejected` exist only in WIP files under `specs/`); exempt from `last_synced`/`verified_against`. Pages promoted from `specs/*-adr-*.md` additionally carry `id`, `prd`, `spec`, `owner`, `promoted_from` (the specs path), `promoted` (date); status changes after promotion are made here by people.
|
|
52
|
+
- Guideline files: `title`, `nav_order`, `parent: Guidelines`, `tags[]`, `last_synced`, `verified_against` (per above), plus optional `merge` (map of platform section anchor → `override`\|`extend`\|`waive`) and optional `adr` (list of `adr/<date>-<topic>.md` paths). No `grand_parent`, no `versions` — a guideline file is never nested deeper than `Guidelines`, and it applies to the one installed Shopware version recorded in `verified_against`.
|
|
53
|
+
|
|
54
|
+
Merge modes, applied per `##` heading anchor against the matching platform guideline file:
|
|
55
|
+
|
|
56
|
+
| Mode | Effect |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `override` | Replaces the platform section in place. |
|
|
59
|
+
| `extend` | Inserted directly before the platform section; both apply, project section first. |
|
|
60
|
+
| `waive` | Replaces the platform section; the project body states the reason and starts with `WAIVED:`. |
|
|
61
|
+
| (anchor not in the platform file) | An addition, appended after the last platform section. |
|
|
62
|
+
| (anchor matches a platform section, no declared mode) | Treated as `override` and flagged. |
|
|
63
|
+
|
|
64
|
+
A `*-guidelines.md` file with no platform counterpart — like this one — is a project-only file, served as is; `merge` does not apply to it.
|
|
65
|
+
|
|
66
|
+
## Status
|
|
67
|
+
|
|
68
|
+
- Feature: `built` (code present, all ACs verified pass) · `partially-built` (code present, verification missing or failing) · `planned` (PRD/spec only) · `not-built` (nothing in the repo) · `deprecated` (removed or replaced).
|
|
69
|
+
- Pages not `built` carry a ⚠️ status block in *Status*, directly after the intro prose.
|
|
70
|
+
|
|
71
|
+
## Reference code, don't restate it
|
|
72
|
+
|
|
73
|
+
No code listings, class lists, or Twig markup. A *Developer* section contains exactly: where it lives (extension, paths, entities), extension points used, key decisions and why, configuration, how to debug/observe, gotchas. An append-only `## Decision Log` may follow *Related*.
|
|
74
|
+
|
|
75
|
+
## Where decisions go
|
|
76
|
+
|
|
77
|
+
Feature-level technical decisions → the *Developer › Decisions* bullets of the feature page. Business rules → the "Why" column of the domain index feature table. `adr/` (with `area:`, tag `business` for business rules) is the single source of truth for accepted and built decisions: WIP ADRs are drafted by `sw-design-solution` into `specs/*-adr-*.md` on a person's confirmation and promoted here once accepted and implemented, or provided by a person as accepted; ADRs are never generated by tooling. An accepted ADR that changes a coding rule → edit the project guideline file it applies to (`guidelines/<file>.md`, served as `guidelines/<version>/<file>.md`), citing the ADR in its `adr:` frontmatter key — never restated only in the ADR.
|
|
78
|
+
|
|
79
|
+
## Wiki mechanics
|
|
80
|
+
|
|
81
|
+
- Folder landing pages are `index.md`; relative links only, never absolute repo paths as links.
|
|
82
|
+
- Navigation front matter drives the sidebar: `nav_order` on every page, plus `parent` and
|
|
83
|
+
`grand_parent` for pages nested under a section (three levels at most), and `nav_exclude: true` for
|
|
84
|
+
a page that should stay out of the menu. `title` is the label shown in the sidebar, so it is kept
|
|
85
|
+
short and unique — `parent` references match it exactly.
|
|
86
|
+
- No page carries a `layout` key: the layout is applied site-wide from `_config.yml` (`defaults:`),
|
|
87
|
+
so pages stay readable as plain Markdown with or without a build.
|
|
88
|
+
- Durable pages carry `last_synced`/`verified_against`; older than 90 days or behind the installed
|
|
89
|
+
Shopware version means stale. `adr/index.md` keeps a generated table of contents (between
|
|
90
|
+
`<!-- adr-toc:start -->` / `<!-- adr-toc:end -->`, rewritten by the skill) next to its Liquid loop
|
|
91
|
+
on wikis using the Jekyll flavor; text outside the markers is hand-maintained.
|
|
92
|
+
|
|
93
|
+
## Terminology
|
|
94
|
+
|
|
95
|
+
Terminology is Shopware's — see the [glossary](../baseline/glossary.md), including "terms we do not use".
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
*Scope: structure, front matter, status vocabulary and terminology — skill internals live in
|
|
100
|
+
the `sw-document-feature` skill (`reference/page-rules.md` governs how it fills pages). · Last
|
|
101
|
+
synced: {{DATE}} · Verified against Shopware {{SHOPWARE_VERSION}} · Re-sync: update when a page type, front
|
|
102
|
+
matter field or status value changes; record structural changes as an ADR with `area: process`.*
|