aw-spec-cli 0.1.26 → 0.1.27
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/assets/.agents/skills/appweaver/SKILL.md +7 -47
- package/assets/.appweaver/ORCH-DIALECT.md +13 -9
- package/assets/.appweaver/RULE-PARTITION.md +3 -3
- package/assets/.appweaver/STACK-PROFILES.md +188 -101
- package/assets/.appweaver/domain.json +1 -1
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +38 -10
- package/assets/.appweaver/orchestrator/LAUNCHER.md +88 -0
- package/assets/.appweaver/orchestrator/README.md +120 -53
- package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +1 -1
- package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +6 -4
- package/assets/.appweaver/orchestrator/modules/foundation-lane.orch.yaml +237 -0
- package/assets/.appweaver/orchestrator/modules/foundation-pack.orch.yaml +349 -0
- package/assets/.appweaver/orchestrator/modules/foundation-spec.orch.yaml +381 -0
- package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/orchestrator.py +162 -63
- package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +5 -5
- package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +14 -14
- package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +3 -3
- package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +41 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +13 -13
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +61 -12
- package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +172 -293
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +29 -28
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +53 -53
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +26 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +21 -15
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +14 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-model.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-prototype.orch.yaml +6 -6
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +284 -128
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +224 -70
- package/assets/.appweaver/scripts/python/aw-foundation.py +809 -20
- package/assets/.appweaver/scripts/python/aw-inventory.py +28 -21
- package/assets/.appweaver/scripts/python/aw-plan-coverage.py +2 -2
- package/assets/.appweaver/scripts/python/aw-rev-constitution.py +6 -6
- package/assets/.appweaver/scripts/python/aw-stack.py +195 -89
- package/assets/.appweaver/stack-profiles/angular.json +2 -1
- package/assets/.appweaver/stack-profiles/blazor-wasm.json +2 -1
- package/assets/.appweaver/stack-profiles/dotnet-webapi.json +16 -3
- package/assets/.appweaver/stack-profiles/go-chi.json +6 -1
- package/assets/.appweaver/stack-profiles/java-spring.json +12 -5
- package/assets/.appweaver/stack-profiles/nextjs.json +2 -1
- package/assets/.appweaver/stack-profiles/node-express.json +8 -2
- package/assets/.appweaver/stack-profiles/python-fastapi.json +9 -2
- package/assets/.appweaver/stack-profiles/react-vite.json +2 -1
- package/assets/.appweaver/stack-profiles/sveltekit.json +2 -1
- package/assets/.appweaver/stack-profiles/vue-vite.json +2 -1
- package/assets/.appweaver/stacks.json +37 -1
- package/assets/.appweaver/templates/constitution-ui-template.md +2 -2
- package/assets/.claude/skills/appweaver/SKILL.md +7 -46
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.rules.json +31 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.rules.json +16 -0
- package/assets/foundations/foundation.spec.template.txt +73 -0
- package/assets/foundations/java/Hexagonal/Hexagonal.pack.txt +1 -1
- package/assets/foundations/java/Hexagonal/unpack-foundation.sh +4 -5
- package/assets/foundations/node/NextAppRouter/NextAppRouter.spec.txt +68 -0
- package/assets/guardrails/README.md +31 -17
- package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain-rule-bindings.md +5 -5
- package/assets/guardrails/{projects/dotnet-default-project → project-specific}/tech-rule-bindings.md +151 -114
- package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +58 -4
- package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/framework-api-map.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/assets/guardrails/technology/nextjs/api-client.md +1 -1
- package/assets/guardrails/technology/nextjs/component-architecture.md +1 -1
- package/assets/guardrails/technology/nextjs/component-conventions.md +2 -2
- package/assets/guardrails/technology/nextjs/design-system.md +1 -1
- package/assets/guardrails/technology/nextjs/frontend-testing.md +1 -1
- package/assets/guardrails/technology/nextjs/routing-navigation.md +1 -1
- package/assets/guardrails/technology/nextjs/ui-constitution.md +3 -3
- package/package.json +1 -1
- package/assets/.agents/skills/appweaver-demo/SKILL.md +0 -59
- package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +0 -6
- package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +0 -100
- package/assets/.claude/skills/appweaver-demo/SKILL.md +0 -59
- package/assets/.kilocode/agent.json +0 -28
- package/assets/.kilocode/workflows/appweaver-demo.md +0 -59
- package/assets/.kilocode/workflows/appweaver.md +0 -55
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain/domain-requirements.md +0 -0
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/frontend/ui-requirements.md +0 -0
- /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/service/technical-requirements.md +0 -0
package/assets/guardrails/{projects/dotnet-default-project → project-specific}/tech-rule-bindings.md
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# project-specific — Command → Technical-Rule-File Map
|
|
2
2
|
|
|
3
3
|
Per-command list of the **technical** rule files this project loads (via `resolve-tech` +
|
|
4
4
|
the `tech-select` module, into the sticky standards set) for the spec-anchored
|
|
@@ -10,35 +10,39 @@ workflows. They live in the **shared technology corpora**, one folder per stack,
|
|
|
10
10
|
map is what binds a project to them. The ratified output (`constitution.technical.md`) is
|
|
11
11
|
NOT listed here — every consumer refers to it directly, as-is.
|
|
12
12
|
|
|
13
|
-
- All paths are workspace-relative. This project maps two
|
|
14
|
-
`guardrails/technology/
|
|
15
|
-
`guardrails/technology/
|
|
16
|
-
every project that maps them**, and neither is domain-specific. The frontend corpus is
|
|
17
|
-
read by
|
|
18
|
-
`## /aw-spec-plan-ui` / `## /aw-spec-implement-ui` carry the detail rules under it
|
|
13
|
+
- All paths are workspace-relative. This project maps two stack corpora:
|
|
14
|
+
`guardrails/technology/{{backend_stack}}/` (the service) and
|
|
15
|
+
`guardrails/technology/{{frontend_stack}}/` (the frontend lane). Both are **standard rules
|
|
16
|
+
shared by every project that maps them**, and neither is domain-specific. The frontend corpus is
|
|
17
|
+
read by four headings — `## /aw-spec-ui-constitution` ratifies the lane's base,
|
|
18
|
+
`## /aw-spec-plan-ui` / `## /aw-spec-implement-ui` carry the detail rules under it, and
|
|
19
|
+
`## /aw-spec-foundation-frontend` is what a spec-built scaffold of the lane follows.
|
|
20
|
+
- `## /aw-spec-foundation-backend` and `## /aw-spec-foundation-frontend` are keyed per lane
|
|
21
|
+
KIND, not per command: `foundation` scaffolds both lanes in one run and loads one set or
|
|
22
|
+
the other for each, and only when the lane is built from a spec — a pack is unpacked as-is.
|
|
19
23
|
- The two files this project authors — `service/technical-requirements.md` and
|
|
20
24
|
`frontend/ui-requirements.md` — live beside this map. They are the only mapped technical
|
|
21
25
|
files expected to differ between two projects on the same stacks.
|
|
22
|
-
- `
|
|
26
|
+
- A corpus's `examples/` folder holds the worked `<SampleProjectName>` sample for the
|
|
23
27
|
rule file beside it, split out so a phase can load the rules without the sample code. The
|
|
24
28
|
code-generating phases map both; `## /aw-spec-constitution` maps the rules alone, because a
|
|
25
29
|
thin authority document has no use for sample code.
|
|
26
30
|
- `resolve-tech --command <name>` collects the `- ` bullets under `## /<name>`.
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- This file is the **canonical technical mapping** for this project; it is
|
|
41
|
-
`
|
|
31
|
+
- **Every stack directory below is a placeholder**, resolved from the lanes in
|
|
32
|
+
`.appweaver/stacks.json`: `{{backend_stack}}` is the service lane's stack and
|
|
33
|
+
`{{frontend_stack}}` the frontend lane's (`{{stack}}`, `{{backend_ecosystem}}` and
|
|
34
|
+
`{{frontend_ecosystem}}` are also available). `guardrails/technology/{{backend_stack}}/persistence.md`
|
|
35
|
+
reads as `dotnet-webapi/` in a .NET repo and `java-spring/` in a Spring one, so this one map
|
|
36
|
+
serves whatever stacks the project declares. A placeholder for an undeclared lane skips
|
|
37
|
+
that bullet, so a backend-only repo loads no frontend rules. A resolved path with no file
|
|
38
|
+
on disk is reported as missing and loads nothing in its place. The bullets were written
|
|
39
|
+
against the `dotnet-webapi` and `nextjs` corpora; another stack's corpus may hold only
|
|
40
|
+
part of them. See STACK-PROFILES.md §7a.
|
|
41
|
+
- Adding a stack is adding a corpus under `guardrails/technology/<stack>/` with the same file
|
|
42
|
+
names — the placeholders then reach it with no change to this map, and no workflow, script
|
|
43
|
+
or engine change is involved.
|
|
44
|
+
- This file is the **canonical technical mapping** for this project; it is used whenever
|
|
45
|
+
`.appweaver/domain.json` names `project-specific`, which it does by default.
|
|
42
46
|
- A command with no heading here loads no mapped technical file (only the workflow's
|
|
43
47
|
universal `ai-rules.md` seed + `constitution.technical.md`, referred to directly).
|
|
44
48
|
- `## /aw-spec-specify` is the one **modelling-methodology** slot (see the rule partition):
|
|
@@ -67,8 +71,8 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
67
71
|
ihe-conformance.md under ## /aw-spec-plan is the same pattern. Unmapping them does not
|
|
68
72
|
make the spec's Experience Standards section disappear — the section is unconditional and
|
|
69
73
|
resolves to "None" — it removes the methodology specify fills it from. -->
|
|
70
|
-
- guardrails/technology/
|
|
71
|
-
- guardrails/technology/
|
|
74
|
+
- guardrails/technology/{{backend_stack}}/domain-driven-design.md
|
|
75
|
+
- guardrails/technology/{{backend_stack}}/examples/domain-driven-design.md
|
|
72
76
|
- guardrails/domain/healthcare/ux/journey-mapping.md
|
|
73
77
|
- guardrails/domain/healthcare/ux/interaction-states.md
|
|
74
78
|
- guardrails/domain/healthcare/ux/accessibility-standards.md
|
|
@@ -78,30 +82,30 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
78
82
|
<!-- The technical/architecture rule files the design author works from (alongside the
|
|
79
83
|
spec and constitution.technical.md), each followed by its worked example. NO domain file
|
|
80
84
|
here — domain reaches design only as spec ids (BR-/CN-/DC-/IC-). -->
|
|
81
|
-
- guardrails/technology/
|
|
82
|
-
- guardrails/technology/
|
|
83
|
-
- guardrails/technology/
|
|
84
|
-
- guardrails/technology/
|
|
85
|
-
- guardrails/technology/
|
|
86
|
-
- guardrails/technology/
|
|
87
|
-
- guardrails/technology/
|
|
88
|
-
- guardrails/technology/
|
|
89
|
-
- guardrails/technology/
|
|
90
|
-
- guardrails/technology/
|
|
91
|
-
- guardrails/technology/
|
|
92
|
-
- guardrails/technology/
|
|
93
|
-
- guardrails/technology/
|
|
94
|
-
- guardrails/technology/
|
|
85
|
+
- guardrails/technology/{{backend_stack}}/clean-architecture.md
|
|
86
|
+
- guardrails/technology/{{backend_stack}}/cqrs.md
|
|
87
|
+
- guardrails/technology/{{backend_stack}}/eventing.md
|
|
88
|
+
- guardrails/technology/{{backend_stack}}/modular-monolith.md
|
|
89
|
+
- guardrails/technology/{{backend_stack}}/vertical-slices.md
|
|
90
|
+
- guardrails/technology/{{backend_stack}}/persistence.md
|
|
91
|
+
- guardrails/technology/{{backend_stack}}/folder-structure.md
|
|
92
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
93
|
+
- guardrails/technology/{{backend_stack}}/api-versioning.md
|
|
94
|
+
- guardrails/technology/{{backend_stack}}/zero-trust.md
|
|
95
|
+
- guardrails/technology/{{backend_stack}}/authorization.md
|
|
96
|
+
- guardrails/technology/{{backend_stack}}/authorization-matrix.md
|
|
97
|
+
- guardrails/technology/{{backend_stack}}/auditing.md
|
|
98
|
+
- guardrails/technology/{{backend_stack}}/data-classification.md
|
|
95
99
|
- guardrails/domain/healthcare/ihe-conformance.md
|
|
96
|
-
- guardrails/technology/
|
|
97
|
-
- guardrails/technology/
|
|
98
|
-
- guardrails/technology/
|
|
99
|
-
- guardrails/technology/
|
|
100
|
-
- guardrails/technology/
|
|
101
|
-
- guardrails/technology/
|
|
102
|
-
- guardrails/technology/
|
|
103
|
-
- guardrails/technology/
|
|
104
|
-
- guardrails/technology/
|
|
100
|
+
- guardrails/technology/{{backend_stack}}/examples/clean-architecture.md
|
|
101
|
+
- guardrails/technology/{{backend_stack}}/examples/cqrs.md
|
|
102
|
+
- guardrails/technology/{{backend_stack}}/examples/eventing.md
|
|
103
|
+
- guardrails/technology/{{backend_stack}}/examples/vertical-slices.md
|
|
104
|
+
- guardrails/technology/{{backend_stack}}/examples/persistence.md
|
|
105
|
+
- guardrails/technology/{{backend_stack}}/examples/api-versioning.md
|
|
106
|
+
- guardrails/technology/{{backend_stack}}/examples/zero-trust.md
|
|
107
|
+
- guardrails/technology/{{backend_stack}}/examples/authorization.md
|
|
108
|
+
- guardrails/technology/{{backend_stack}}/examples/auditing.md
|
|
105
109
|
|
|
106
110
|
## /aw-spec-plan-ui
|
|
107
111
|
<!-- The FRONTEND LANE's design phase. Its own heading, not a branch of ## /aw-spec-plan:
|
|
@@ -115,42 +119,42 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
115
119
|
CROSS-LANE pairing rule set — what the service guarantees (paging shape, concurrency
|
|
116
120
|
token, error codes, redaction, caching, CORS) and what the client therefore must do.
|
|
117
121
|
It is named for the service stack and mapped through the placeholder, so ONE bullet
|
|
118
|
-
serves every backend: it resolves to api-integration.dotnet-webapi.md
|
|
122
|
+
serves every backend: it resolves to api-integration.dotnet-webapi.md in a .NET repo and to
|
|
119
123
|
api-integration.java-spring.md in a Spring repo — both authored — and to a REPORTED
|
|
120
124
|
missing file for a backend whose pairing nobody has written yet, rather than silently
|
|
121
125
|
loading one stack's assumptions into another. A repo with no backend lane skips the
|
|
122
126
|
bullet entirely. No other service-lane file is mapped here: design.ui.md consumes the
|
|
123
127
|
published surface, never the service's internals. -->
|
|
124
|
-
- guardrails/technology/
|
|
125
|
-
- guardrails/technology/
|
|
126
|
-
- guardrails/technology/
|
|
127
|
-
- guardrails/technology/
|
|
128
|
-
- guardrails/technology/
|
|
129
|
-
- guardrails/technology/
|
|
130
|
-
- guardrails/technology/
|
|
131
|
-
- guardrails/technology/
|
|
132
|
-
- guardrails/technology/
|
|
133
|
-
- guardrails/technology/
|
|
134
|
-
- guardrails/technology/
|
|
128
|
+
- guardrails/technology/{{frontend_stack}}/component-architecture.md
|
|
129
|
+
- guardrails/technology/{{frontend_stack}}/routing-navigation.md
|
|
130
|
+
- guardrails/technology/{{frontend_stack}}/state-management.md
|
|
131
|
+
- guardrails/technology/{{frontend_stack}}/error-handling.md
|
|
132
|
+
- guardrails/technology/{{frontend_stack}}/forms-and-validation.md
|
|
133
|
+
- guardrails/technology/{{frontend_stack}}/auth-session.md
|
|
134
|
+
- guardrails/technology/{{frontend_stack}}/design-system.md
|
|
135
|
+
- guardrails/technology/{{frontend_stack}}/accessibility-implementation.md
|
|
136
|
+
- guardrails/technology/{{frontend_stack}}/i18n.md
|
|
137
|
+
- guardrails/technology/{{frontend_stack}}/performance-budgets.md
|
|
138
|
+
- guardrails/technology/{{frontend_stack}}/api-integration.{{backend_stack}}.md
|
|
135
139
|
|
|
136
140
|
## /aw-spec-implement
|
|
137
141
|
<!-- The FRAMEWORK / code-generation rule files the SERVICE lane's generator builds against
|
|
138
142
|
(alongside backend-plan.md and constitution.technical.md), on the BOOTSTRAP path.
|
|
139
143
|
NO domain file — domain reaches implement only through the plan. clean-architecture/cqrs
|
|
140
144
|
are planning concerns; component wiring is a separate /appweaver add-component step. -->
|
|
141
|
-
- guardrails/technology/
|
|
142
|
-
- guardrails/technology/
|
|
143
|
-
- guardrails/technology/
|
|
144
|
-
- guardrails/technology/
|
|
145
|
-
- guardrails/technology/
|
|
146
|
-
- guardrails/technology/
|
|
145
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
146
|
+
- guardrails/technology/{{backend_stack}}/dependency-policy.md
|
|
147
|
+
- guardrails/technology/{{backend_stack}}/folder-structure.md
|
|
148
|
+
- guardrails/technology/{{backend_stack}}/framework-api-map.md
|
|
149
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
150
|
+
- guardrails/technology/{{backend_stack}}/PACKAGING.md
|
|
147
151
|
|
|
148
152
|
## /aw-spec-implement-ui
|
|
149
153
|
<!-- The FRONTEND LANE's code-generation set — the HOW that lane of `implement` builds
|
|
150
154
|
against, alongside frontend-plan.md and constitution.ui.md. It is loaded on BOTH paths,
|
|
151
155
|
master and delta, because the lane never had a separate delta heading. NO domain file
|
|
152
156
|
(domain reached the lane through spec -> frontend-plan.md), and NO service-lane file
|
|
153
|
-
beyond the pairing rules below — this lane never writes outside its declared
|
|
157
|
+
beyond the pairing rules below — this lane never writes outside its declared lane root folder.
|
|
154
158
|
|
|
155
159
|
EIGHT FILES ARE MAPPED FOR BOTH LANE PHASES on purpose. error-handling,
|
|
156
160
|
forms-and-validation, auth-session, design-system, accessibility-implementation, i18n,
|
|
@@ -158,19 +162,19 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
158
162
|
IMPLEMENT half of one rule: the design decides the states, the affordances and the
|
|
159
163
|
targets; this phase realises them. A rule read by only one of the two loses the
|
|
160
164
|
pairing, and the half that goes unread is always the one that then goes unbuilt. -->
|
|
161
|
-
- guardrails/technology/
|
|
162
|
-
- guardrails/technology/
|
|
163
|
-
- guardrails/technology/
|
|
164
|
-
- guardrails/technology/
|
|
165
|
-
- guardrails/technology/
|
|
166
|
-
- guardrails/technology/
|
|
167
|
-
- guardrails/technology/
|
|
168
|
-
- guardrails/technology/
|
|
169
|
-
- guardrails/technology/
|
|
170
|
-
- guardrails/technology/
|
|
171
|
-
- guardrails/technology/
|
|
172
|
-
- guardrails/technology/
|
|
173
|
-
- guardrails/technology/
|
|
165
|
+
- guardrails/technology/{{frontend_stack}}/component-conventions.md
|
|
166
|
+
- guardrails/technology/{{frontend_stack}}/api-client.md
|
|
167
|
+
- guardrails/technology/{{frontend_stack}}/api-integration.{{backend_stack}}.md
|
|
168
|
+
- guardrails/technology/{{frontend_stack}}/auth-session.md
|
|
169
|
+
- guardrails/technology/{{frontend_stack}}/client-security.md
|
|
170
|
+
- guardrails/technology/{{frontend_stack}}/error-handling.md
|
|
171
|
+
- guardrails/technology/{{frontend_stack}}/forms-and-validation.md
|
|
172
|
+
- guardrails/technology/{{frontend_stack}}/design-system.md
|
|
173
|
+
- guardrails/technology/{{frontend_stack}}/accessibility-implementation.md
|
|
174
|
+
- guardrails/technology/{{frontend_stack}}/i18n.md
|
|
175
|
+
- guardrails/technology/{{frontend_stack}}/performance-budgets.md
|
|
176
|
+
- guardrails/technology/{{frontend_stack}}/observability.md
|
|
177
|
+
- guardrails/technology/{{frontend_stack}}/frontend-testing.md
|
|
174
178
|
|
|
175
179
|
## /aw-spec-implement-delta
|
|
176
180
|
<!-- The SERVICE lane's set on the DELTA path — same FRAMEWORK / code-generation rules (HOW
|
|
@@ -179,29 +183,29 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
179
183
|
while generating the master, so keep the two identical unless a change deliberately
|
|
180
184
|
needs different rules. The delta's code is generated against the master backend-plan.md
|
|
181
185
|
+ the delta plan; no domain file (domain reached the delta via delta-spec → delta plan). -->
|
|
182
|
-
- guardrails/technology/
|
|
183
|
-
- guardrails/technology/
|
|
184
|
-
- guardrails/technology/
|
|
185
|
-
- guardrails/technology/
|
|
186
|
-
- guardrails/technology/
|
|
187
|
-
- guardrails/technology/
|
|
186
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
187
|
+
- guardrails/technology/{{backend_stack}}/dependency-policy.md
|
|
188
|
+
- guardrails/technology/{{backend_stack}}/folder-structure.md
|
|
189
|
+
- guardrails/technology/{{backend_stack}}/framework-api-map.md
|
|
190
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
191
|
+
- guardrails/technology/{{backend_stack}}/PACKAGING.md
|
|
188
192
|
|
|
189
193
|
## /aw-spec-build
|
|
190
194
|
<!-- The compile/fix reference set: the layering + coding rules the fixer respects when
|
|
191
195
|
repairing compile errors against the design intent, plus the layering example it repairs
|
|
192
196
|
towards. NO domain file (build loads domain rules separately via domain-select) and no
|
|
193
197
|
constitution.technical here. -->
|
|
194
|
-
- guardrails/technology/
|
|
195
|
-
- guardrails/technology/
|
|
196
|
-
- guardrails/technology/
|
|
198
|
+
- guardrails/technology/{{backend_stack}}/clean-architecture.md
|
|
199
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
200
|
+
- guardrails/technology/{{backend_stack}}/examples/clean-architecture.md
|
|
197
201
|
|
|
198
202
|
## /aw-spec-analyze-slice
|
|
199
203
|
<!-- The design↔code conformance gate's TECHNICAL checklist: the code + tests are
|
|
200
204
|
validated against these (alongside the DOMAIN gate overlays, loaded separately via
|
|
201
205
|
resolve-domain `## /aw-spec-gate`). Validation input only — never authoring. -->
|
|
202
|
-
- guardrails/technology/
|
|
203
|
-
- guardrails/technology/
|
|
204
|
-
- guardrails/technology/
|
|
206
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
207
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
208
|
+
- guardrails/technology/{{backend_stack}}/framework-api-map.md
|
|
205
209
|
|
|
206
210
|
## /aw-spec-constitution
|
|
207
211
|
<!-- What the TECHNICAL half of the split constitution ratifies into
|
|
@@ -213,24 +217,24 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
213
217
|
sources are the domain map's ## /aw-spec-constitution. NO examples/ file either — the
|
|
214
218
|
ratified half is one declarative line and a `→` pointer per principle, so sample code is
|
|
215
219
|
weight without a reader. -->
|
|
216
|
-
- guardrails/technology/
|
|
217
|
-
- guardrails/technology/
|
|
218
|
-
- guardrails/technology/
|
|
219
|
-
- guardrails/technology/
|
|
220
|
-
- guardrails/technology/
|
|
221
|
-
- guardrails/technology/
|
|
222
|
-
- guardrails/technology/
|
|
223
|
-
- guardrails/technology/
|
|
224
|
-
- guardrails/technology/
|
|
225
|
-
- guardrails/technology/
|
|
226
|
-
- guardrails/technology/
|
|
227
|
-
- guardrails/technology/
|
|
228
|
-
- guardrails/technology/
|
|
229
|
-
- guardrails/technology/
|
|
230
|
-
- guardrails/technology/
|
|
231
|
-
- guardrails/technology/
|
|
232
|
-
- guardrails/technology/
|
|
233
|
-
- guardrails/
|
|
220
|
+
- guardrails/technology/{{backend_stack}}/technology-constitution.md
|
|
221
|
+
- guardrails/technology/{{backend_stack}}/clean-architecture.md
|
|
222
|
+
- guardrails/technology/{{backend_stack}}/modular-monolith.md
|
|
223
|
+
- guardrails/technology/{{backend_stack}}/vertical-slices.md
|
|
224
|
+
- guardrails/technology/{{backend_stack}}/domain-driven-design.md
|
|
225
|
+
- guardrails/technology/{{backend_stack}}/cqrs.md
|
|
226
|
+
- guardrails/technology/{{backend_stack}}/persistence.md
|
|
227
|
+
- guardrails/technology/{{backend_stack}}/eventing.md
|
|
228
|
+
- guardrails/technology/{{backend_stack}}/folder-structure.md
|
|
229
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
230
|
+
- guardrails/technology/{{backend_stack}}/zero-trust.md
|
|
231
|
+
- guardrails/technology/{{backend_stack}}/authorization.md
|
|
232
|
+
- guardrails/technology/{{backend_stack}}/auditing.md
|
|
233
|
+
- guardrails/technology/{{backend_stack}}/data-classification.md
|
|
234
|
+
- guardrails/technology/{{backend_stack}}/api-versioning.md
|
|
235
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
236
|
+
- guardrails/technology/{{backend_stack}}/dependency-policy.md
|
|
237
|
+
- guardrails/project-specific/service/technical-requirements.md
|
|
234
238
|
|
|
235
239
|
## /aw-spec-ui-constitution
|
|
236
240
|
<!-- What the UI half ratifies into constitution.ui.md as a UX-* principle series: the
|
|
@@ -238,14 +242,45 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
238
242
|
is also the AUTHORITATIVE signal that the project HAS a frontend lane — with no heading
|
|
239
243
|
here the constitution command skips the UI half and creates no file at all. Domain-free,
|
|
240
244
|
and loaded before domain-select for the same reason as the set above. -->
|
|
241
|
-
- guardrails/technology/
|
|
242
|
-
- guardrails/
|
|
245
|
+
- guardrails/technology/{{frontend_stack}}/ui-constitution.md
|
|
246
|
+
- guardrails/project-specific/frontend/ui-requirements.md
|
|
243
247
|
|
|
244
248
|
## /aw-spec-run
|
|
245
249
|
<!-- Execution / data migration: the persistence rules the migration step generates against,
|
|
246
250
|
plus their worked example. NO domain file; run does not reference constitution.technical.md. -->
|
|
247
|
-
- guardrails/technology/
|
|
248
|
-
- guardrails/technology/
|
|
251
|
+
- guardrails/technology/{{backend_stack}}/persistence.md
|
|
252
|
+
- guardrails/technology/{{backend_stack}}/examples/persistence.md
|
|
253
|
+
|
|
254
|
+
## /aw-spec-foundation-backend
|
|
255
|
+
<!-- What `foundation` builds the SERVICE lane's base project against when the operator picks
|
|
256
|
+
a spec ([spec] or [manual spec]) instead of a pack. A pack is verified against these rules
|
|
257
|
+
when it is made; a spec build is not, so the agent gets them as standards and follows them
|
|
258
|
+
wherever the spec is silent. The set is the SHAPE of a base project — stack base, folder
|
|
259
|
+
structure, packages, coding and test conventions, the framework's own types, and the
|
|
260
|
+
project team's technical requirements — not the architecture/persistence detail set plan
|
|
261
|
+
and implement load for features. NO domain file: a scaffold has no domain yet. -->
|
|
262
|
+
- guardrails/technology/{{backend_stack}}/technology-constitution.md
|
|
263
|
+
- guardrails/technology/{{backend_stack}}/folder-structure.md
|
|
264
|
+
- guardrails/technology/{{backend_stack}}/dependency-policy.md
|
|
265
|
+
- guardrails/technology/{{backend_stack}}/coding-standards.md
|
|
266
|
+
- guardrails/technology/{{backend_stack}}/framework-api-map.md
|
|
267
|
+
- guardrails/technology/{{backend_stack}}/testing.md
|
|
268
|
+
- guardrails/project-specific/service/technical-requirements.md
|
|
269
|
+
|
|
270
|
+
## /aw-spec-foundation-frontend
|
|
271
|
+
<!-- The same for the FRONTEND lane: the lane base (ui-constitution, which carries the
|
|
272
|
+
mandatory frontend folder structure), how components are split and named, routing, the
|
|
273
|
+
design system, the generated API client the lane talks to the service through, the test
|
|
274
|
+
setup, and the project team's ui-requirements. Loaded INSTEAD of the backend set, never
|
|
275
|
+
on top of it — foundation swaps the standards between the two lanes. -->
|
|
276
|
+
- guardrails/technology/{{frontend_stack}}/ui-constitution.md
|
|
277
|
+
- guardrails/technology/{{frontend_stack}}/component-architecture.md
|
|
278
|
+
- guardrails/technology/{{frontend_stack}}/component-conventions.md
|
|
279
|
+
- guardrails/technology/{{frontend_stack}}/routing-navigation.md
|
|
280
|
+
- guardrails/technology/{{frontend_stack}}/design-system.md
|
|
281
|
+
- guardrails/technology/{{frontend_stack}}/api-client.md
|
|
282
|
+
- guardrails/technology/{{frontend_stack}}/frontend-testing.md
|
|
283
|
+
- guardrails/project-specific/frontend/ui-requirements.md
|
|
249
284
|
|
|
250
285
|
---
|
|
251
286
|
|
|
@@ -264,6 +299,8 @@ NOT listed here — every consumer refers to it directly, as-is.
|
|
|
264
299
|
| /aw-spec-constitution | 17 | what the technical half ratifies — the technology base, the standard technical rules, and the project team's technical-requirements.md |
|
|
265
300
|
| /aw-spec-ui-constitution | 2 | what the frontend lane's half ratifies — the UI base + the project team's ui-requirements.md — and the signal that the lane exists |
|
|
266
301
|
| /aw-spec-run | 2 | persistence rules the execution / data-migration step generates against, + its example |
|
|
302
|
+
| /aw-spec-foundation-backend | 7 | what `foundation` builds the service lane's base project against when it is built from a spec rather than unpacked from a pack |
|
|
303
|
+
| /aw-spec-foundation-frontend | 8 | the same for the frontend lane — loaded instead of the backend set, never on top of it |
|
|
267
304
|
|
|
268
305
|
> All migrated workflows are on this map. The conformance-gate workflows **analyze-plan**
|
|
269
306
|
> and **analyze-plan-delta** are intentionally NOT here — they validate the plans / the delta
|
|
@@ -162,12 +162,63 @@ AAABAAE...
|
|
|
162
162
|
|
|
163
163
|
---
|
|
164
164
|
|
|
165
|
+
## The rule file (`<pack name>.rules.json`)
|
|
166
|
+
|
|
167
|
+
Every file in a pack is unpacked as packed, and a file that is already there is replaced. A
|
|
168
|
+
pack that needs some files treated otherwise ships a rule file beside it, named after the
|
|
169
|
+
pack: `VerticalSlice.rules.json` for `VerticalSlice.pack.txt`,
|
|
170
|
+
`VerticalSlice.Reference.rules.json` for `VerticalSlice.Reference.pack.txt`. Without one, the
|
|
171
|
+
pack unpacks exactly as described above.
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"format": "aw-spec-pack-rules/v1",
|
|
176
|
+
"rules": [
|
|
177
|
+
{
|
|
178
|
+
"path": "src/AppWeaver.VerticalSlice.Service/Infrastructure/ApplicationDbContext.cs",
|
|
179
|
+
"action": "merge",
|
|
180
|
+
"note": "why this file is merged — for the reader only",
|
|
181
|
+
"instruction": [
|
|
182
|
+
"Produce one ApplicationDbContext based on the EXISTING file:",
|
|
183
|
+
"- insert every INCOMING `public DbSet<...>` property right after the class's opening brace;",
|
|
184
|
+
"- keep everything else in the EXISTING file unchanged."
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{ "path": "src/AppWeaver.VerticalSlice.Service/Features/", "action": "replace" }
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
- **`path`** is written as the pack holds it, sentinel included, and is renamed the way the
|
|
193
|
+
pack's files are — one rule file serves every app name. A path ending in `/` covers every
|
|
194
|
+
pack file under that folder; a rule for a file wins over its folder's rule.
|
|
195
|
+
- **`action`** is `merge` or `replace`. `replace` writes the pack's file over the existing one,
|
|
196
|
+
which is also what happens to every file no rule names. `merge` applies only when the file is
|
|
197
|
+
already there (from the base project, or from the lane before a re-unpack); otherwise the
|
|
198
|
+
pack's file is simply written.
|
|
199
|
+
- **`instruction`** (required for `merge`; a string or a list of lines) tells the merging
|
|
200
|
+
agent how to combine the two versions. It sees the **EXISTING** file — the one in the lane
|
|
201
|
+
before this pack was unpacked — and the **INCOMING** file — the pack's own, with the sentinel
|
|
202
|
+
already renamed — and returns the merged file; the engine writes it.
|
|
203
|
+
- **`note`** is optional and ignored by the kit.
|
|
204
|
+
|
|
205
|
+
A rule file that does not parse, or a rule with an unknown action or a merge with no
|
|
206
|
+
instruction, stops that pack before anything is written: the base pack reports the lane "not
|
|
207
|
+
scaffolded", and a broken reference rule file leaves the sample out with the reason. A rule
|
|
208
|
+
whose path the pack does not hold is reported in the lane's line — a sign the pack changed
|
|
209
|
+
and the rule file was not updated with it.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
165
213
|
## How scaffolding consumes the bundle
|
|
166
214
|
|
|
167
|
-
`/appweaver foundation
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
215
|
+
`/appweaver foundation` unpacks the pack a lane picks into that lane's **lane root folder**
|
|
216
|
+
(`backend/` by default) with `unpack-foundation.ps1` (or `.sh`), which reads the sentinel from
|
|
217
|
+
the pack header, derives the four target case forms, and writes the renamed files. Before it
|
|
218
|
+
runs, the pack's rule file is read and every file to be merged is put aside; after it, each
|
|
219
|
+
merge runs as its rule says. A reference sample, when the pack ships one and the operator
|
|
220
|
+
wants it, goes on top the same way with its own rule file. The steps are in
|
|
221
|
+
`.appweaver/orchestrator/modules/foundation-pack.orch.yaml`.
|
|
171
222
|
|
|
172
223
|
```powershell
|
|
173
224
|
./unpack-foundation.ps1 -PackFile ./VerticalSlice.pack.txt -TargetAppName AppWeaver.Health -OutDir ../../../
|
|
@@ -182,3 +233,6 @@ defined in `.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml`.
|
|
|
182
233
|
- [ ] No `bin/obj/.vs` or local `.db` files committed into the pack.
|
|
183
234
|
- [ ] `pack-foundation.ps1` reported a non-zero sentinel hit count.
|
|
184
235
|
- [ ] `VerticalSlice.pack.txt` regenerated and committed after any change.
|
|
236
|
+
- [ ] Each pack's rule file names every file that must be merged rather than replaced (for a
|
|
237
|
+
reference sample: every file it shares with the base pack that is not a straight
|
|
238
|
+
replacement), and no rule names a path the pack no longer holds.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Coding Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) — domain forbidden patterns & CI gates in [[coding-standards.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-build`, `/aw-spec-analyze-slice`.
|
|
3
|
+
> Pure technology (domain-agnostic) — domain forbidden patterns & CI gates in [[coding-standards.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-build`, `/aw-spec-analyze-slice`, `/aw-spec-foundation-backend`.
|
|
4
4
|
|
|
5
5
|
## Naming conventions
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Dependency Policy
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) — domain package rules in [[dependency-policy.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`.
|
|
3
|
+
> Pure technology (domain-agnostic) — domain package rules in [[dependency-policy.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-foundation-backend`.
|
|
4
4
|
|
|
5
5
|
## Package governance
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Mandatory Folder Structure
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) — domain additions (Interop adapters, conformance tests, fixtures) in [[folder-structure.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-plan`, `/aw-spec-implement`, `/aw-spec-implement-delta`.
|
|
3
|
+
> Pure technology (domain-agnostic) — domain additions (Interop adapters, conformance tests, fixtures) in [[folder-structure.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-plan`, `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-foundation-backend`.
|
|
4
4
|
>
|
|
5
5
|
> Replace `<SampleProjectName>` with the project name (e.g. `Acme.Billing`).
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Framework API Map — which package and namespace each cited type comes from
|
|
2
2
|
|
|
3
3
|
> Pure technology (domain-agnostic). NON-NEGOTIABLE where it names a package.
|
|
4
|
-
> Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-analyze-slice`.
|
|
4
|
+
> Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-analyze-slice`, `/aw-spec-foundation-backend`.
|
|
5
5
|
>
|
|
6
6
|
> The rules in this corpus name framework types — `AggregateRootBase<TId>`,
|
|
7
7
|
> `IAggregateChild`, `IUnitOfWork`. This file says where each one LIVES. Without it a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Testing Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) — domain additions in [[testing.domain]]. Commands: `/aw-spec-plan`, `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-analyze-slice`.
|
|
3
|
+
> Pure technology (domain-agnostic) — domain additions in [[testing.domain]]. Commands: `/aw-spec-plan`, `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-analyze-slice`, `/aw-spec-foundation-backend`.
|
|
4
4
|
|
|
5
5
|
## Test-first engineering
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# API Client Standards — nextjs (frontend lane)
|
|
2
2
|
|
|
3
3
|
> Pure technology (domain-agnostic). NON-NEGOTIABLE.
|
|
4
|
-
> Commands: `/aw-spec-implement-ui`.
|
|
4
|
+
> Commands: `/aw-spec-implement-ui`, `/aw-spec-foundation-frontend`.
|
|
5
5
|
> Detail layer under `constitution.ui.md` UX-IV (the contract is the only server input)
|
|
6
6
|
> and UX-VII (mutations flow through one path).
|
|
7
7
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component Architecture Standards — nextjs (frontend lane)
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic). Commands: `/aw-spec-plan-ui`.
|
|
3
|
+
> Pure technology (domain-agnostic). Commands: `/aw-spec-plan-ui`, `/aw-spec-foundation-frontend`.
|
|
4
4
|
> Detail layer under `constitution.ui.md` UX-II (design system) and UX-III (server components).
|
|
5
5
|
|
|
6
6
|
The rules the UI design author composes a feature's `§3 Component Structure` from. They
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Component Conventions — nextjs (frontend lane)
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic). Commands: `/aw-spec-implement-ui`.
|
|
3
|
+
> Pure technology (domain-agnostic). Commands: `/aw-spec-implement-ui`, `/aw-spec-foundation-frontend`.
|
|
4
4
|
> Detail layer under `constitution.ui.md` UX-II (design system) and its Mandatory
|
|
5
5
|
> Frontend Folder Structure.
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ writing within it.
|
|
|
18
18
|
states. Business composition does not live in a route file.
|
|
19
19
|
- A component reused by two or more features moves to `components/` — and moving it is a
|
|
20
20
|
decision, recorded in the design, not a refactor made mid-generation.
|
|
21
|
-
- Nothing this lane generates is written outside the lane
|
|
21
|
+
- Nothing this lane generates is written outside the declared lane root folder.
|
|
22
22
|
|
|
23
23
|
## Naming
|
|
24
24
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Design System Standards — nextjs (frontend lane)
|
|
2
2
|
|
|
3
3
|
> Pure technology (domain-agnostic). NON-NEGOTIABLE.
|
|
4
|
-
> Commands: `/aw-spec-plan-ui`, `/aw-spec-implement-ui`.
|
|
4
|
+
> Commands: `/aw-spec-plan-ui`, `/aw-spec-implement-ui`, `/aw-spec-foundation-frontend`.
|
|
5
5
|
> Detail layer under `constitution.ui.md` UX-II (the design system is the only source of
|
|
6
6
|
> visual truth).
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Frontend Testing Standards — nextjs (frontend lane)
|
|
2
2
|
|
|
3
3
|
> Pure technology (domain-agnostic). NON-NEGOTIABLE.
|
|
4
|
-
> Commands: `/aw-spec-implement-ui`.
|
|
4
|
+
> Commands: `/aw-spec-implement-ui`, `/aw-spec-foundation-frontend`.
|
|
5
5
|
> Detail layer under `constitution.ui.md` UX-XI (frontend test-first).
|
|
6
6
|
|
|
7
7
|
Every file `implement-ui` generates ships with its test. The design says what to test: each
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Routing & Navigation Standards — nextjs (frontend lane)
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic). Commands: `/aw-spec-plan-ui`.
|
|
3
|
+
> Pure technology (domain-agnostic). Commands: `/aw-spec-plan-ui`, `/aw-spec-foundation-frontend`.
|
|
4
4
|
> Detail layer under `constitution.ui.md` UX-III (server components) and UX-V (every
|
|
5
5
|
> interaction state specified).
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ continue them — the two govern different lanes and version independently.
|
|
|
19
19
|
|
|
20
20
|
## Declared Lane
|
|
21
21
|
|
|
22
|
-
Stack **nextjs** — Next.js (TypeScript, App Router), lane id `web`, owning `
|
|
22
|
+
Stack **nextjs** — Next.js (TypeScript, App Router), lane id `web`, owning `frontend/` (the default lane root folder).
|
|
23
23
|
|
|
24
24
|
Where `.appweaver/stacks.json` declares a frontend lane, that declaration is authoritative for the
|
|
25
25
|
lane id and root; a scaffold that disagrees fails `STACK-MISMATCH:` rather than rewriting it.
|
|
@@ -121,11 +121,11 @@ another stack's assumptions. Elsewhere in this corpus the file is referenced as
|
|
|
121
121
|
|
|
122
122
|
## Mandatory Frontend Folder Structure
|
|
123
123
|
|
|
124
|
-
The whole layout sits under the lane
|
|
124
|
+
The whole layout sits under the lane root folder (`frontend/` by default) and never adds to the service lane's
|
|
125
125
|
structure.
|
|
126
126
|
|
|
127
127
|
```
|
|
128
|
-
|
|
128
|
+
frontend/
|
|
129
129
|
app/ # App Router — route segments, layouts, loading/error/not-found
|
|
130
130
|
components/ # design-system compositions, presentational only
|
|
131
131
|
features/<Feature>/ # one folder per spec feature: its components, hooks, actions
|
package/package.json
CHANGED