aw-spec-cli 0.1.27 → 0.1.28
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/.appweaver/RULE-PARTITION.md +8 -9
- package/assets/.appweaver/STACK-PROFILES.md +74 -9
- package/assets/.appweaver/interpreter/run-skill.py +28 -7
- package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +17 -7
- package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/modules/foundation-pack.orch.yaml +44 -1
- package/assets/.appweaver/orchestrator/modules/foundation-spec.orch.yaml +172 -5
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +5 -4
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +3 -1
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +16 -8
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +15 -18
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +4 -1
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +6 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +7 -6
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +7 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +7 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +224 -16
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +20 -19
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +35 -11
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +1 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +1 -1
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +91 -7
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +70 -7
- package/assets/.appweaver/scripts/python/aw-foundation.py +88 -12
- package/assets/.appweaver/scripts/python/aw-stack.py +481 -10
- package/assets/.appweaver/stack-profiles/dotnet-webapi.json +2 -0
- package/assets/.appweaver/stack-profiles/java-spring.json +2 -0
- package/assets/.appweaver/stacks.json +5 -2
- package/assets/.appweaver/templates/delta-design-template.md +7 -5
- package/assets/.appweaver/templates/design-template.md +3 -0
- package/assets/.appweaver/templates/ui-delta-design-template.md +1 -1
- package/assets/.appweaver/templates/ui-design-template.md +6 -4
- package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.lane.json +6 -0
- package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.lane.json +6 -0
- package/assets/foundations/foundation.spec.template.txt +26 -1
- package/assets/foundations/java/Hexagonal/Hexagonal.lane.json +6 -0
- package/assets/foundations/java/Hexagonal/Hexagonal.pack.txt +7 -0
- package/assets/guardrails/project-specific/domain-rule-bindings.md +20 -8
- package/assets/guardrails/project-specific/tech-rule-bindings.md +25 -37
- package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/auditing.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/authorization.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/cqrs.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/data-classification.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/eventing.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/modular-monolith.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/persistence.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +1 -1
- package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +1 -1
- package/assets/guardrails/technology/nextjs/accessibility-implementation.md +1 -1
- package/assets/guardrails/technology/nextjs/api-client.md +1 -1
- package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +1 -1
- package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +1 -1
- package/assets/guardrails/technology/nextjs/auth-session.md +1 -1
- package/assets/guardrails/technology/nextjs/client-security.md +1 -1
- package/assets/guardrails/technology/nextjs/component-architecture.md +1 -1
- package/assets/guardrails/technology/nextjs/component-conventions.md +1 -1
- package/assets/guardrails/technology/nextjs/design-system.md +1 -1
- package/assets/guardrails/technology/nextjs/error-handling.md +1 -1
- package/assets/guardrails/technology/nextjs/forms-and-validation.md +1 -1
- package/assets/guardrails/technology/nextjs/frontend-testing.md +1 -1
- package/assets/guardrails/technology/nextjs/i18n.md +1 -1
- package/assets/guardrails/technology/nextjs/observability.md +1 -1
- package/assets/guardrails/technology/nextjs/performance-budgets.md +1 -1
- package/assets/guardrails/technology/nextjs/routing-navigation.md +1 -1
- package/assets/guardrails/technology/nextjs/state-management.md +1 -1
- package/package.json +1 -1
|
@@ -129,11 +129,12 @@ migration is needed (yes/no); any contract change other systems couple to.]
|
|
|
129
129
|
<!-- What this change adds to or alters in the service's PUBLISHED surface — the
|
|
130
130
|
only part of this document the frontend lane may bind against. `None` when
|
|
131
131
|
the surface is unchanged. Omit the section entirely where the code has no
|
|
132
|
-
frontend lane.
|
|
132
|
+
frontend lane. The operation id is the endpoint's name in the published API
|
|
133
|
+
document; an endpoint that already has one keeps it. -->
|
|
133
134
|
|
|
134
|
-
| Contract | Change | Shape | Serves |
|
|
135
|
-
|
|
136
|
-
| `[contract]` | [added / changed] | [request → response field shapes] | IC-[nnn] |
|
|
135
|
+
| Operation id | Contract | Change | Shape | Serves |
|
|
136
|
+
|---|---|---|---|---|
|
|
137
|
+
| `[OperationId]` | `[contract]` | [added / changed] | [request → response field shapes] | IC-[nnn] |
|
|
137
138
|
|
|
138
139
|
## Other open deltas
|
|
139
140
|
|
|
@@ -169,7 +169,9 @@
|
|
|
169
169
|
the titles are the code's answer — the slots below are illustrative
|
|
170
170
|
positions, not a required set. In each: the components that live there,
|
|
171
171
|
their behaviour in signature form, and the contracts they expose or
|
|
172
|
-
require.
|
|
172
|
+
require. A component that PUBLISHES an endpoint names it with its route, verb
|
|
173
|
+
and operation id — the endpoint's name in the published API document, which
|
|
174
|
+
the frontend plan cites and implement looks the endpoint up by. -->
|
|
173
175
|
|
|
174
176
|
### 2.1 [PROJECT_STRUCTURAL_AXIS_NAME]
|
|
175
177
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
rev-templates/domain-rule-bindings.skeleton.md — SHAPE-ONLY reference for the project's
|
|
3
3
|
domain-rule-bindings.md (resolve-domain reads it by that exact name — the symmetric
|
|
4
|
-
twin of tech-rule-bindings.md, which resolve-tech reads). It shows the
|
|
5
|
-
implement
|
|
4
|
+
twin of tech-rule-bindings.md, which resolve-tech reads). It shows the seven headings (plan and
|
|
5
|
+
implement keyed per lane), the RULE PARTITION (neither lane of plan or implement gets a domain file), the bullet shape, and the quick-reference
|
|
6
6
|
table. It lists NO real rule files — every bullet is a placeholder for a file
|
|
7
7
|
the author actually generated from THIS project's evidence.
|
|
8
8
|
|
|
@@ -35,11 +35,17 @@ domain-model.md. This is the rule partition; preserve it exactly.
|
|
|
35
35
|
into the spec's CN-/DC-/IC- (plan/implement never see these files). -->
|
|
36
36
|
- guardrails/[project]/domain/[each generated domain rule file].md
|
|
37
37
|
|
|
38
|
-
## /aw-spec-plan
|
|
39
|
-
_None — plan loads no domain file. Domain reaches
|
|
38
|
+
## /aw-spec-plan-backend
|
|
39
|
+
_None — the service lane of plan loads no domain file. Domain reaches it through the spec and the context's domain-model.md._
|
|
40
40
|
|
|
41
|
-
## /aw-spec-
|
|
42
|
-
_None —
|
|
41
|
+
## /aw-spec-plan-frontend
|
|
42
|
+
_None — the frontend lane of plan loads no domain file. Domain reaches it through the spec and the context's domain-model.md._
|
|
43
|
+
|
|
44
|
+
## /aw-spec-implement-backend
|
|
45
|
+
_None — the service lane of implement loads no domain file. Domain reaches it through backend-plan.md and the context's domain-model.md._
|
|
46
|
+
|
|
47
|
+
## /aw-spec-implement-frontend
|
|
48
|
+
_None — the frontend lane of implement loads no domain file. Domain reaches it through frontend-plan.md and the context's domain-model.md._
|
|
43
49
|
|
|
44
50
|
## /aw-spec-gate
|
|
45
51
|
<!-- Conformance checklist for the gates (analyze-plan · analyze-slice): the domain-derived
|
|
@@ -54,6 +60,8 @@ _None — implement loads no domain file. Domain reaches implement through the l
|
|
|
54
60
|
|---|---|---|
|
|
55
61
|
| /aw-spec-constitution | [n] | domain principles |
|
|
56
62
|
| /aw-spec-specify | [n] | author into spec (lift → CN-/DC-/IC-) |
|
|
57
|
-
| /aw-spec-plan | 0 | none — the spec and the domain model carry the domain |
|
|
58
|
-
| /aw-spec-
|
|
63
|
+
| /aw-spec-plan-backend | 0 | none — the spec and the domain model carry the domain |
|
|
64
|
+
| /aw-spec-plan-frontend | 0 | none — the spec and the domain model carry the domain |
|
|
65
|
+
| /aw-spec-implement-backend | 0 | none — backend-plan.md and the domain model carry the domain |
|
|
66
|
+
| /aw-spec-implement-frontend | 0 | none — frontend-plan.md and the domain model carry the domain |
|
|
59
67
|
| /aw-spec-gate | [n] | conformance checklist (validate, don't author) |
|
|
@@ -27,6 +27,10 @@ refers to it directly, as-is.
|
|
|
27
27
|
|
|
28
28
|
- All paths are workspace-relative and live in `guardrails/[project]/service/`.
|
|
29
29
|
- `resolve-tech --command <name>` collects the `- ` bullets under `## /<name>`.
|
|
30
|
+
- `plan`, `implement` and `adopt` are keyed per lane, not per command: the service lane's set
|
|
31
|
+
sits under `## /aw-spec-<command>-backend`, the frontend lane's under
|
|
32
|
+
`## /aw-spec-<command>-frontend` (adopt reverses a frontend plan under
|
|
33
|
+
`## /aw-spec-plan-frontend`, so it has no frontend heading of its own).
|
|
30
34
|
- **`## /aw-spec-specify` is the MODELLING-METHODOLOGY slot** — exactly one file,
|
|
31
35
|
`service/domain-modelling.md`: HOW this code expresses a domain model. Never an architecture /
|
|
32
36
|
persistence / codegen / security file; those would break specify's domain purity. Every other
|
|
@@ -43,22 +47,16 @@ refers to it directly, as-is.
|
|
|
43
47
|
via domain-rule-bindings). No technology rule may appear under this heading. -->
|
|
44
48
|
- guardrails/[project]/service/domain-modelling.md
|
|
45
49
|
|
|
46
|
-
## /aw-spec-plan
|
|
50
|
+
## /aw-spec-plan-backend
|
|
47
51
|
<!-- The as-built architecture / cross-cutting technical rules the SERVICE lane's plan author
|
|
48
52
|
mediates the spec against. NO domain file here — domain reaches plan only as spec ids and
|
|
49
53
|
the context's domain-model.md. -->
|
|
50
54
|
- guardrails/[project]/service/[as-built-architecture].md
|
|
51
55
|
- guardrails/[project]/service/[each generated architecture/cross-cutting rule].md
|
|
52
56
|
|
|
53
|
-
## /aw-spec-implement
|
|
57
|
+
## /aw-spec-implement-backend
|
|
54
58
|
<!-- The framework / code-generation rule set the SERVICE lane's generator builds against
|
|
55
|
-
(from backend-plan.md). -->
|
|
56
|
-
- guardrails/[project]/service/[each generated codegen/convention rule].md
|
|
57
|
-
|
|
58
|
-
## /aw-spec-implement-delta
|
|
59
|
-
<!-- The same set for the service lane on the DELTA path. `implement` is one command: it keys
|
|
60
|
-
this heading when it is generating a change's delta plan and the one above when it is
|
|
61
|
-
generating the master, so repeat the bullets here to keep both paths identical. -->
|
|
59
|
+
(from backend-plan.md), on both the master and the delta path. -->
|
|
62
60
|
- guardrails/[project]/service/[each generated codegen/convention rule].md
|
|
63
61
|
|
|
64
62
|
## /aw-spec-build
|
|
@@ -69,10 +67,10 @@ refers to it directly, as-is.
|
|
|
69
67
|
<!-- The plan↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
|
|
70
68
|
- guardrails/[project]/service/[testing/convention rule to validate against].md
|
|
71
69
|
|
|
72
|
-
## /aw-spec-adopt
|
|
70
|
+
## /aw-spec-adopt-backend
|
|
73
71
|
<!-- Brownfield reverse-engineering: the technical REFERENCE set the reversed BACKEND plan
|
|
74
72
|
mediates the reversed spec ↔ existing code against — the CODE wins, these are reference
|
|
75
|
-
only. A slice's reversed frontend-plan.md is authored under `## /aw-spec-plan-
|
|
73
|
+
only. A slice's reversed frontend-plan.md is authored under `## /aw-spec-plan-frontend`. -->
|
|
76
74
|
- guardrails/[project]/service/[architecture/cross-cutting reference rule].md
|
|
77
75
|
|
|
78
76
|
## /aw-spec-constitution
|
|
@@ -95,14 +93,14 @@ refers to it directly, as-is.
|
|
|
95
93
|
map; onboard's frontend rule-set step APPENDS them here, after the technical headings and
|
|
96
94
|
before the quick-reference table, and only where a UI lane is declared. A backend-only
|
|
97
95
|
repo never gets them.
|
|
98
|
-
## /aw-spec-ui-constitution
|
|
96
|
+
## /aw-spec-ui-constitution — the ratifiable lane standards (frontend/ui-constitution.md
|
|
99
97
|
first). Also the authoritative signal that this project HAS a frontend lane: a later
|
|
100
98
|
/appweaver constitution reads it to decide whether to author constitution.ui.md.
|
|
101
|
-
## /aw-spec-plan-
|
|
99
|
+
## /aw-spec-plan-frontend — the lane rules the FRONTEND lane of `plan` authors
|
|
102
100
|
frontend-plan.md against: composition, navigation, client state, interaction states,
|
|
103
101
|
forms, accessibility, the published-surface binding. `adopt` reverses a slice's
|
|
104
102
|
frontend-plan.md under the same set.
|
|
105
|
-
## /aw-spec-implement-
|
|
103
|
+
## /aw-spec-implement-frontend — the lane rules the FRONTEND lane of `implement` generates
|
|
106
104
|
code against, on both the master and the delta path: component conventions, state and
|
|
107
105
|
data fetching, styling, forms, testing.
|
|
108
106
|
A file carrying both a planning half and a generating half is listed under both; the lane
|
|
@@ -120,11 +118,10 @@ refers to it directly, as-is.
|
|
|
120
118
|
| Command | Technical rule files | Role |
|
|
121
119
|
|---|---|---|
|
|
122
120
|
| /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
|
|
123
|
-
| /aw-spec-plan | [n] | as-built architecture the service lane's plan author mediates the spec against |
|
|
124
|
-
| /aw-spec-implement | [n] | code-generation set the service lane builds against (from backend-plan.md) |
|
|
125
|
-
| /aw-spec-implement-delta | [n] | the same set for the service lane when implement is generating a change's delta plan |
|
|
121
|
+
| /aw-spec-plan-backend | [n] | as-built architecture the service lane's plan author mediates the spec against |
|
|
122
|
+
| /aw-spec-implement-backend | [n] | code-generation set the service lane builds against (from backend-plan.md), both paths |
|
|
126
123
|
| /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
|
|
127
124
|
| /aw-spec-analyze-slice | [n] | conformance rules the plan↔code gate validates against |
|
|
128
|
-
| /aw-spec-adopt | [n] | technical reference set for the reversed backend plan (brownfield) |
|
|
125
|
+
| /aw-spec-adopt-backend | [n] | technical reference set for the reversed backend plan (brownfield) |
|
|
129
126
|
| /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
|
|
130
127
|
| /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
|
|
@@ -80,11 +80,14 @@ it serves.]
|
|
|
80
80
|
|
|
81
81
|
<!-- New screens, components, state, interactions or contract bindings.
|
|
82
82
|
"Section" names a section of THIS project's master frontend plan — the same
|
|
83
|
-
section titles the generated frontend plan template carries.
|
|
83
|
+
section titles the generated frontend plan template carries. A binding row's
|
|
84
|
+
element LEADS with the operation id the service names the endpoint by — implement
|
|
85
|
+
checks it against the exported API document. -->
|
|
84
86
|
|
|
85
87
|
| Section (§ in frontend-plan.md) | Element | Kind | Serves |
|
|
86
88
|
|---|---|---|---|
|
|
87
89
|
| [§ of the master's own structure] | `[element]` | [screen / component / state / binding] | US-[n] · FR-[nnn] |
|
|
90
|
+
| Contract Binding (§5) | `[OperationId]` · `[VERB] [/route]` | binding | IC-[nnn] |
|
|
88
91
|
|
|
89
92
|
## MODIFIED — existing UI elements
|
|
90
93
|
|
|
@@ -222,11 +222,13 @@ does none.]
|
|
|
222
222
|
the API contracts backend-plan.md states — never its internals: no table,
|
|
223
223
|
handler or persistence assumption crosses this line. Where the surface does
|
|
224
224
|
not name an operation yet, bind against the spec's own IC-/FR- surface and
|
|
225
|
-
record that as a §8 assumption.
|
|
225
|
+
record that as a §8 assumption. The OPERATION ID is the endpoint's name in the
|
|
226
|
+
service's published API document (as backend-plan.md records it) — implement
|
|
227
|
+
finds the endpoint by it; `—` where none is named yet. -->
|
|
226
228
|
|
|
227
|
-
| Screen / component | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
|
|
228
|
-
|
|
229
|
-
| `[Screen]` | `[operation]` | [field: type, …] | [field: type, …] | [§4 state] | FR-00X · IC-00X |
|
|
229
|
+
| Screen / component | Operation id | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
|
|
230
|
+
|---|---|---|---|---|---|---|
|
|
231
|
+
| `[Screen]` | `[OperationId]` | `[operation]` | [field: type, …] | [field: type, …] | [§4 state] | FR-00X · IC-00X |
|
|
230
232
|
|
|
231
233
|
**Contract deltas needed**: [anything the experience requires that the contract
|
|
232
234
|
does not offer — raised back to the service lane, never worked around in the
|
|
@@ -111,7 +111,7 @@ scripts:
|
|
|
111
111
|
# Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). The TECHNICAL/
|
|
112
112
|
# architecture set for the reversed DESIGN step (mirrors aw-spec-design) is no longer
|
|
113
113
|
# hardcoded here — it is now CONFIGURATION, loaded per-command from
|
|
114
|
-
# guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt" by the
|
|
114
|
+
# guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt-backend" by the
|
|
115
115
|
# tech-select module (see the tech_select step below). The reversed SPEC step runs
|
|
116
116
|
# include_standards:false and takes its domain frame from constitution.domain.md via
|
|
117
117
|
# build_context — so design never sees a domain rule file (rule partition preserved); the
|
|
@@ -366,7 +366,7 @@ workflow:
|
|
|
366
366
|
on_false_message: "No active governance for adopt to work against — run /appweaver onboard first. onboard establishes the PROJECT constitution + guardrails/<project>/ rule set (provisional-from-scan) and activates it. Reversing '{{feature_name}}' without that scaffold would author the spec and design against no code-derived rules at all, and leave them with no governance home."
|
|
367
367
|
|
|
368
368
|
# TECHNICAL rule files → sticky standards (configuration, not hardcoded). tech-select
|
|
369
|
-
# reads guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt" and
|
|
369
|
+
# reads guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt-backend" and
|
|
370
370
|
# loads that reference set into the sticky standards for reverse_plan
|
|
371
371
|
# (include_standards:true) — the reversed SPEC and MODEL steps turn it off
|
|
372
372
|
# (include_standards:false), keeping them free of architecture (rule partition). No domain
|
|
@@ -377,7 +377,7 @@ workflow:
|
|
|
377
377
|
- id: tech_select
|
|
378
378
|
action: include
|
|
379
379
|
module: .appweaver/orchestrator/modules/tech-select.orch.yaml
|
|
380
|
-
with: { command: aw-spec-adopt }
|
|
380
|
+
with: { command: aw-spec-adopt-backend }
|
|
381
381
|
|
|
382
382
|
# 2. Scaffold the living docs. The SPEC reuses the forward spec-template (it is
|
|
383
383
|
# tech-agnostic WHAT/WHY — no architectural bias). The BACKEND PLAN scaffolds from the
|
|
@@ -821,13 +821,13 @@ workflow:
|
|
|
821
821
|
# THE FRONTEND'S RULES REPLACE THE BACKEND'S before the lane's plan is authored — the
|
|
822
822
|
# swap the forward `plan` makes at the same boundary. Sticky standards only accumulate,
|
|
823
823
|
# so without it the UI plan was authored under the service rule set and none of the
|
|
824
|
-
# lane's own. `## /aw-spec-plan-
|
|
824
|
+
# lane's own. `## /aw-spec-plan-frontend` is the set the forward plan authors this same
|
|
825
825
|
# document under, so a reversed frontend plan and a planned one answer to one rule set.
|
|
826
826
|
- id: tech_select_ui
|
|
827
827
|
condition: "{{ui_lane}} == true"
|
|
828
828
|
action: include
|
|
829
829
|
module: .appweaver/orchestrator/modules/tech-select.orch.yaml
|
|
830
|
-
with: { command: aw-spec-plan-
|
|
830
|
+
with: { command: aw-spec-plan-frontend, replace: "true" }
|
|
831
831
|
|
|
832
832
|
- id: ctx_reverse_ui_plan
|
|
833
833
|
condition: "{{ui_lane}} == true"
|
|
@@ -1058,6 +1058,7 @@ workflow:
|
|
|
1058
1058
|
action: agent_generate
|
|
1059
1059
|
tools: "Read,Write,Edit"
|
|
1060
1060
|
permission_mode: acceptEdits
|
|
1061
|
+
include_standards: false # the lane rule sets are for the plans; the concept is the aggregate's, in neither lane
|
|
1061
1062
|
task: |
|
|
1062
1063
|
COMPLETE the OKF concept of the aggregate '{{aggregate_primary}}' at {{concept_path}} —
|
|
1063
1064
|
the aggregate this run adopted the feature '{{feature_name}}' over. onboard wrote it
|
|
@@ -1351,4 +1352,4 @@ outputs:
|
|
|
1351
1352
|
composed_file: "{{composed_file}}"
|
|
1352
1353
|
technical_reconcile_ok: "{{technical_ok}}"
|
|
1353
1354
|
domain_reconcile_ok: "{{domain_ok}}"
|
|
1354
|
-
next: "Adopted {{feature_name}} (spec.md + backend-plan.md + source-map.md, v1.0) and wrote {{aggregate_sections}} — the model section(s) for the aggregate(s) it acts on, resolved from the {{aggregate_source}} — in the bounded context `{{context}}`'s shared {{domain_model}}. The spec cites BR-nnn by id, the model carries their text, so this slice is checkable by the same gates as a greenfield one and analyze-plan's check 4 now has a model to check against. A section another feature over the same aggregate wrote first was EXTENDED, never duplicated; every other section is untouched. COMPLETED the OKF concept of {{aggregate_primary}} (deepened + linked the deep artifacts; {{xref_edge_count}} cross-slice edge(s) recorded). UI HALF: ui_lane={{ui_lane}} — where it is true this slice also has frontend-plan.md, reversed from the {{ui_count}} UI file(s) the feature map attributes to it; where it is false the repo declared no frontend lane, or this aggregate owns no part of its surface, and a service-only adoption is the correct outcome rather than a gap. In the second case, where a frontend lane IS declared, the feature records lanes=[backend] in its active_version.json (feature_lanes shows it), so plan and the analyze gates treat the frontend lane as absent for THIS feature; run `aw-spec-actions feature-lanes --clear` if it later gains a UI. The SHARED UI surface (app shell, layout, design system) belongs to no slice and stays in {{bundle_dir}}/architecture/frontend.md. NOTE — governance reconcile is currently HELD (reconcile_governance=false): this run did NOT modify the constitution halves or the guardrails/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in {{feature_dir}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-plan, then drive every change through the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta). If a change edits untested legacy behaviour with blast radius, characterize just that surface first (optional on-touch fence). To restore governance reconcile, set reconcile_governance to
|
|
1355
|
+
next: "Adopted {{feature_name}} (spec.md + backend-plan.md + source-map.md, v1.0) and wrote {{aggregate_sections}} — the model section(s) for the aggregate(s) it acts on, resolved from the {{aggregate_source}} — in the bounded context `{{context}}`'s shared {{domain_model}}. The spec cites BR-nnn by id, the model carries their text, so this slice is checkable by the same gates as a greenfield one and analyze-plan's check 4 now has a model to check against. A section another feature over the same aggregate wrote first was EXTENDED, never duplicated; every other section is untouched. COMPLETED the OKF concept of {{aggregate_primary}} (deepened + linked the deep artifacts; {{xref_edge_count}} cross-slice edge(s) recorded). UI HALF: ui_lane={{ui_lane}} — where it is true this slice also has frontend-plan.md, reversed from the {{ui_count}} UI file(s) the feature map attributes to it; where it is false the repo declared no frontend lane, or this aggregate owns no part of its surface, and a service-only adoption is the correct outcome rather than a gap. In the second case, where a frontend lane IS declared, the feature records lanes=[backend] in its active_version.json (feature_lanes shows it), so plan and the analyze gates treat the frontend lane as absent for THIS feature; run `aw-spec-actions feature-lanes --clear` if it later gains a UI. The SHARED UI surface (app shell, layout, design system) belongs to no slice and stays in {{bundle_dir}}/architecture/frontend.md. NOTE — governance reconcile is currently HELD (reconcile_governance=false): this run did NOT modify the constitution halves or the guardrails/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in {{feature_dir}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-plan, then drive every change through the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta). If a change edits untested legacy behaviour with blast radius, characterize just that surface first (optional on-touch fence). To restore governance reconcile, set reconcile_governance to 'true' in the workflow vars."
|
|
@@ -458,7 +458,13 @@ workflow:
|
|
|
458
458
|
UNRESOLVED by definition: report it so it is closed here rather than at
|
|
459
459
|
integration;
|
|
460
460
|
(d) a contract the service delta REMOVES or narrows that the master frontend plan
|
|
461
|
-
still uses is a HIGH gap — the experience delta has to carry the matching change
|
|
461
|
+
still uses is a HIGH gap — the experience delta has to carry the matching change;
|
|
462
|
+
(e) OPERATION IDS MATCH. Every binding row the experience delta adds or changes
|
|
463
|
+
leads with an operation id, and that id is the one the service delta's table or
|
|
464
|
+
the master backend plan gives the endpoint, spelled exactly. A binding with no id,
|
|
465
|
+
or with an id neither names, is a HIGH `contract` gap on lane `frontend`; a
|
|
466
|
+
service-delta row with no operation id is one on lane `backend`. Implement finds
|
|
467
|
+
each endpoint by this id in the service's exported API document.
|
|
462
468
|
|
|
463
469
|
CHECK 4 — THE EFFECTIVE MODEL. It is domain-model.md PLUS this change's model
|
|
464
470
|
delta PLUS the model deltas of every LOWER-WAVE change in context (its
|
|
@@ -470,7 +470,13 @@ workflow:
|
|
|
470
470
|
discovered at integration;
|
|
471
471
|
(d) the frontend plan cites the service's published surface and does NOT restate,
|
|
472
472
|
re-derive or contradict it, and states no server-side behaviour or persistence
|
|
473
|
-
assumption
|
|
473
|
+
assumption;
|
|
474
|
+
(e) OPERATION IDS MATCH. Every §5 row's Operation id is the one the backend plan's
|
|
475
|
+
§3 gives that endpoint, spelled exactly, and every §3 endpoint has one, unique
|
|
476
|
+
across the plan. A §5 row with no id (`—` without a DA-n) or with an id §3 does not
|
|
477
|
+
name is a HIGH `contract` gap on lane `frontend`; a §3 endpoint with no id, or two
|
|
478
|
+
endpoints sharing one, is one on lane `backend`. Implement finds each endpoint by
|
|
479
|
+
this id in the service's exported API document.
|
|
474
480
|
|
|
475
481
|
CHECK 4 — the plans → domain-model.md (when the model is in context; skip if it
|
|
476
482
|
is not):
|
|
@@ -81,5 +81,5 @@ workflow:
|
|
|
81
81
|
outputs:
|
|
82
82
|
feature_dir: "{{feature_dir}}"
|
|
83
83
|
deployed: "{{configured}}"
|
|
84
|
-
note:
|
|
84
|
+
note: 'Set .appweaver/deploy.json {"command": "..."} to enable an actual deploy; add smoke/rollback via before_deploy/after_deploy hooks.'
|
|
85
85
|
next: "done"
|