aw-spec-cli 0.1.16 → 0.1.18
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/DESIGN-FORMAT.md +18 -18
- package/assets/.appweaver/ORCH-DIALECT.md +1 -3
- package/assets/.appweaver/RULE-PARTITION.md +29 -13
- package/assets/.appweaver/STACK-PROFILES.md +10 -9
- package/assets/.appweaver/orchestrator/.state/smoke.state.json +32 -0
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +4 -1
- package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +251 -0
- package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +104 -35
- package/assets/.appweaver/orchestrator/orchestrator.py +5 -4
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +94 -36
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/domain-model-template.skeleton.md +115 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +2 -9
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +16 -40
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +38 -17
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +8 -8
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +10 -11
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +673 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +535 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +643 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +84 -701
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +7 -7
- package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +16 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +243 -144
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +877 -578
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +32 -91
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +836 -514
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +132 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +38 -5
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +271 -979
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1085 -3385
- package/assets/.appweaver/scripts/bash/aw-xref.sh +1 -2
- package/assets/.appweaver/scripts/bash/common.sh +47 -0
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +914 -3220
- package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
- package/assets/.appweaver/scripts/python/aw-payload-parity.py +19 -3
- package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
- package/assets/.appweaver/scripts/python/aw-xref.py +86 -350
- package/assets/.appweaver/templates/constitution-ui-template.md +1 -1
- package/assets/.appweaver/templates/delta-design-template.md +120 -30
- package/assets/.appweaver/templates/delta-domain-model-template.md +81 -0
- package/assets/.appweaver/templates/delta-spec-template.md +43 -17
- package/assets/.appweaver/templates/design-template.md +68 -98
- package/assets/.appweaver/templates/domain-model-template.md +130 -0
- package/assets/.appweaver/templates/okf-concept-template.md +2 -2
- package/assets/.appweaver/templates/source-map-template.md +3 -3
- package/assets/.appweaver/templates/spec-template.md +100 -122
- package/assets/.appweaver/templates/ui-delta-design-template.md +159 -0
- package/assets/.appweaver/templates/ui-design-template.md +46 -75
- package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +7 -18
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +34 -39
- package/assets/guardrails/requirement-spec.txt +2 -2
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/package.json +1 -1
- package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +0 -105
- package/assets/.appweaver/orchestrator/modules/spec-state-gate.orch.yaml +0 -87
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -813
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -663
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -600
- package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -1147
- package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1121
- package/assets/.appweaver/templates/story-template.md +0 -178
|
@@ -50,11 +50,14 @@ refers to it directly, as-is.
|
|
|
50
50
|
- guardrails/projects/[project]/service/[each generated architecture/cross-cutting rule].md
|
|
51
51
|
|
|
52
52
|
## /aw-spec-implement
|
|
53
|
-
<!-- The framework / code-generation rule set the generator builds against
|
|
53
|
+
<!-- The framework / code-generation rule set the SERVICE lane's generator builds against
|
|
54
|
+
(from backend-plan.md). -->
|
|
54
55
|
- guardrails/projects/[project]/service/[each generated codegen/convention rule].md
|
|
55
56
|
|
|
56
57
|
## /aw-spec-implement-delta
|
|
57
|
-
<!-- The
|
|
58
|
+
<!-- The same set for the service lane on the DELTA path. `implement` is one command: it keys
|
|
59
|
+
this heading when it is generating a change's delta plan and the one above when it is
|
|
60
|
+
generating the master, so repeat the bullets here to keep both paths identical. -->
|
|
58
61
|
- guardrails/projects/[project]/service/[each generated codegen/convention rule].md
|
|
59
62
|
|
|
60
63
|
## /aw-spec-build
|
|
@@ -62,7 +65,7 @@ refers to it directly, as-is.
|
|
|
62
65
|
- guardrails/projects/[project]/service/[as-built-architecture].md
|
|
63
66
|
|
|
64
67
|
## /aw-spec-analyze-slice
|
|
65
|
-
<!-- The
|
|
68
|
+
<!-- The design↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
|
|
66
69
|
- guardrails/projects/[project]/service/[testing/convention rule to validate against].md
|
|
67
70
|
|
|
68
71
|
## /aw-spec-adopt
|
|
@@ -86,34 +89,13 @@ refers to it directly, as-is.
|
|
|
86
89
|
a runtime/hosting concern file. NOT data-migration (migration is the deferred later phase). -->
|
|
87
90
|
- guardrails/projects/[project]/service/[runtime/hosting rule].md
|
|
88
91
|
|
|
89
|
-
<!--
|
|
90
|
-
this map; onboard's frontend rule-set step APPENDS
|
|
91
|
-
headings and before the quick-reference table,
|
|
92
|
-
code.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
later /appweaver constitution reads it to decide whether to author constitution.ui.md
|
|
97
|
-
at all.
|
|
98
|
-
## /aw-spec-plan-ui — the DESIGN set /appweaver plan-ui works from when it authors
|
|
99
|
-
or conforms frontend-plan.md: composition, routing, client state, interaction states,
|
|
100
|
-
forms, accessibility, i18n, performance — whichever of those the generated set holds.
|
|
101
|
-
## /aw-spec-implement-ui — the CODE-GENERATION set /appweaver implement-ui builds
|
|
102
|
-
against: conventions, the client/service pairing, styling, forms, accessibility, i18n,
|
|
103
|
-
performance, testing — again, whichever exist.
|
|
104
|
-
|
|
105
|
-
THE TWO PHASE SETS OVERLAP ON PURPOSE. A concern like forms, accessibility, i18n or
|
|
106
|
-
performance carries a DESIGN half and an IMPLEMENT half of one rule — the design decides
|
|
107
|
-
the states, affordances and targets; implement realises them. A rule mapped under only
|
|
108
|
-
one heading loses the pairing, and the half that goes unread is the half that goes
|
|
109
|
-
unbuilt. Map such a file under BOTH.
|
|
110
|
-
|
|
111
|
-
WHY ALL THREE AND NOT JUST THE FIRST. `## /aw-spec-ui-constitution` alone wires the lane
|
|
112
|
-
for re-ratification and NOTHING else: with no `## /aw-spec-plan-ui`, plan-ui loads zero
|
|
113
|
-
mapped frontend rules and designs the experience from constitution.ui.md alone, while the
|
|
114
|
-
files it needed sit on disk unreferenced — and because an absent heading soft-continues,
|
|
115
|
-
nobody is told. Both phases ship (/appweaver plan-ui, /appweaver implement-ui), so both
|
|
116
|
-
headings are claims the kit CAN honour.
|
|
92
|
+
<!-- ## /aw-spec-ui-constitution — the FRONTEND LANE's heading. It is NOT written by the step
|
|
93
|
+
that authors this map; onboard's frontend rule-set step APPENDS it here, after the technical
|
|
94
|
+
headings and before the quick-reference table, but only where the scan found a UI in the
|
|
95
|
+
code. It maps the generated frontend/ lane rules (frontend/ui-constitution.md first), and
|
|
96
|
+
it is also the authoritative signal that this project HAS a frontend lane — a later
|
|
97
|
+
/appweaver constitution reads it to decide whether to author constitution.ui.md at all.
|
|
98
|
+
A backend-only repo simply never gets the heading.
|
|
117
99
|
|
|
118
100
|
Do NOT add /aw-spec-characterize or /aw-spec-parity in the DEV flow — characterize is
|
|
119
101
|
opt-on-touch and parity is deferred to the migration phase. Add any other heading later
|
|
@@ -128,16 +110,10 @@ refers to it directly, as-is.
|
|
|
128
110
|
|---|---|---|
|
|
129
111
|
| /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
|
|
130
112
|
| /aw-spec-plan | [n] | as-built architecture the design author mediates the spec against |
|
|
131
|
-
| /aw-spec-implement | [n] | code-generation set the
|
|
132
|
-
| /aw-spec-implement-delta | [n] | same
|
|
113
|
+
| /aw-spec-implement | [n] | code-generation set the service lane builds against (from backend-plan.md) |
|
|
114
|
+
| /aw-spec-implement-delta | [n] | the same set for the service lane when implement is generating a change's delta plan |
|
|
133
115
|
| /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
|
|
134
|
-
| /aw-spec-analyze-slice | [n] | conformance rules the
|
|
116
|
+
| /aw-spec-analyze-slice | [n] | conformance rules the design↔code gate validates against |
|
|
135
117
|
| /aw-spec-adopt | [n] | technical reference set for the reversed design (brownfield) |
|
|
136
118
|
| /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
|
|
137
119
|
| /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
|
|
138
|
-
|
|
139
|
-
<!-- The frontend lane's rows are appended by the same step that appends its headings, and
|
|
140
|
-
only where the lane exists:
|
|
141
|
-
| /aw-spec-ui-constitution | [n] | the ratifiable lane standards the UI constitution half is re-ratified from |
|
|
142
|
-
| /aw-spec-plan-ui | [n] | the as-built experience rules plan-ui authors frontend-plan.md against |
|
|
143
|
-
| /aw-spec-implement-ui | [n] | the as-built code-generation set implement-ui builds the UI against | -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
═══════════════════════════════════════════════════════════════════════════
|
|
3
3
|
rev-templates/ui-delta-design-template.skeleton.md — SHAPE-ONLY reference.
|
|
4
4
|
|
|
5
|
-
This file is the FORMAT reference for the reverse-engineered UI DELTA
|
|
5
|
+
This file is the FORMAT reference for the reverse-engineered UI DELTA PLAN
|
|
6
6
|
TEMPLATE that onboard installs at
|
|
7
7
|
.appweaver/templates/overrides/ui-delta-design-template.md — the frontend lane's
|
|
8
8
|
twin of delta-design-template.skeleton.md, written only where the CODE has a
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
sections, the two ledgers and the close contract, and NOTHING ELSE.
|
|
11
11
|
|
|
12
12
|
IT NAMES NO FRAMEWORK AND NO FIXED UI TAXONOMY. The "Section" column is a
|
|
13
|
-
SLOT, filled with the ACTUAL sections of the
|
|
13
|
+
SLOT, filled with the ACTUAL sections of the frontend plan template generated
|
|
14
14
|
alongside this one — including whatever composition axes §3 turned out to
|
|
15
15
|
carry. A change is classified against the document it amends.
|
|
16
16
|
|
|
17
17
|
ONE CHANGE, TWO LANES, ONE VERSION. A change request that touches both lanes
|
|
18
18
|
produces a service delta AND this one; `finalize-delta` merges the three
|
|
19
|
-
masters (spec.md,
|
|
20
|
-
version bump. This record never opens a second
|
|
19
|
+
masters (spec.md, backend-plan.md, frontend-plan.md) and the change closes on ONE
|
|
20
|
+
version bump. This record never opens a second plan document, and it
|
|
21
21
|
never restates the service delta — where the change starts in the service
|
|
22
22
|
contract, this document records only what the EXPERIENCE does with it.
|
|
23
23
|
|
|
@@ -30,24 +30,31 @@
|
|
|
30
30
|
• STATES ARE PART OF THE CHANGE — a new interaction that ships without its
|
|
31
31
|
loading, empty, error and permission-denied states is an incomplete delta,
|
|
32
32
|
not a later refinement.
|
|
33
|
+
• WAVE ORDERS THE OPEN CHANGES — a lower wave may be built on, a same wave
|
|
34
|
+
is visible but never assumed.
|
|
33
35
|
• TECHNOLOGY-AGNOSTIC — responsibilities, field shapes and events, no code.
|
|
34
36
|
═══════════════════════════════════════════════════════════════════════════
|
|
35
37
|
-->
|
|
36
|
-
#
|
|
38
|
+
# Delta Frontend Plan — [CR-ID]: [TITLE]
|
|
37
39
|
|
|
38
|
-
**Feature (aggregate)**: [
|
|
40
|
+
**Feature (aggregate slice)**: [Feature]
|
|
39
41
|
|
|
40
42
|
**Base version**: [vX.Y]
|
|
41
43
|
|
|
42
|
-
**
|
|
44
|
+
**Wave**: [N] <!-- script-stamped; same wave = developable in parallel, higher wave = after -->
|
|
45
|
+
|
|
46
|
+
**Delta spec**: `changes/[CR-ID]/delta-spec.md`
|
|
47
|
+
|
|
48
|
+
**Service delta**: [`changes/[CR-ID]/delta-backend-plan.md`, or `None — experience-only change`]
|
|
43
49
|
|
|
44
50
|
<!--
|
|
45
|
-
This delta applies to the SINGLE master
|
|
46
|
-
specs/[
|
|
51
|
+
This delta applies to the SINGLE master plan at
|
|
52
|
+
specs/[Context]/[Feature]/frontend-plan.md — never a new document, and never the
|
|
53
|
+
master itself: finalize-delta merges it later in the chain. Classify every change
|
|
47
54
|
ADDED / MODIFIED / REMOVED against the current master, per the MASTER'S OWN
|
|
48
55
|
SECTIONS, in the same technology-agnostic form: responsibilities, inputs as
|
|
49
|
-
field shapes, events and states — no code.
|
|
50
|
-
|
|
56
|
+
field shapes, events and states — no code. `implement`'s frontend lane
|
|
57
|
+
generates the touched UI from this document and regression re-verifies
|
|
51
58
|
every screen that shares a changed component or state.
|
|
52
59
|
-->
|
|
53
60
|
|
|
@@ -56,13 +63,20 @@
|
|
|
56
63
|
[One paragraph: what the experience change is and which user story / spec delta
|
|
57
64
|
it serves.]
|
|
58
65
|
|
|
66
|
+
## Depends on
|
|
67
|
+
|
|
68
|
+
<!-- Other OPEN changes this plan builds on. Every entry MUST be in a LOWER wave.
|
|
69
|
+
"None — stands alone" is the common and preferred answer. -->
|
|
70
|
+
|
|
71
|
+
- `[CR-ID]` (wave [N-1]) — [what this plan assumes from it]
|
|
72
|
+
|
|
59
73
|
## ADDED — new UI elements
|
|
60
74
|
|
|
61
75
|
<!-- New screens, components, state, interactions or contract bindings.
|
|
62
76
|
"Section" names a section of THIS project's master UI design — the same
|
|
63
77
|
section titles the generated UI design template carries. -->
|
|
64
78
|
|
|
65
|
-
| Section (§ in
|
|
79
|
+
| Section (§ in frontend-plan.md) | Element | Kind | Serves |
|
|
66
80
|
|---|---|---|---|
|
|
67
81
|
| [§ of the master's own structure] | `[element]` | [screen / component / state / binding] | US-[n] · FR-[nnn] |
|
|
68
82
|
|
|
@@ -71,7 +85,7 @@ it serves.]
|
|
|
71
85
|
<!-- Edits to elements the master already defines. A shared component or a
|
|
72
86
|
shared state container is modified here, in place — never copied. -->
|
|
73
87
|
|
|
74
|
-
| Section (§ in
|
|
88
|
+
| Section (§ in frontend-plan.md) | Element | What changes | Why |
|
|
75
89
|
|---|---|---|---|
|
|
76
90
|
| [§ of the master's own structure] | `[element]` | [the edit] | US-[n] |
|
|
77
91
|
|
|
@@ -102,6 +116,13 @@ never worked around in the client. Or `None`.]
|
|
|
102
116
|
touched; navigation edges added or removed; any screen in ANOTHER feature that
|
|
103
117
|
depends on a changed shared element.]
|
|
104
118
|
|
|
119
|
+
## Other open deltas
|
|
120
|
+
|
|
121
|
+
<!-- Which OTHER open changes touch the same screens, shared components or state
|
|
122
|
+
containers. `None` when this change stands clear of everything in flight. -->
|
|
123
|
+
|
|
124
|
+
- `[CR-ID]` (wave [N]) — [what overlaps, and how this plan stays clear of it]
|
|
125
|
+
|
|
105
126
|
## Regression targets
|
|
106
127
|
|
|
107
128
|
[Existing user stories / screens to re-verify because a shared component, a
|
|
@@ -117,7 +138,7 @@ shared state container or a navigation edge changed.]
|
|
|
117
138
|
|
|
118
139
|
## On close
|
|
119
140
|
|
|
120
|
-
`finalize-delta` merges this record into the master
|
|
121
|
-
spec and
|
|
122
|
-
`close-delta` bumps the ONE version both lanes share
|
|
123
|
-
under `changes/archive/`.
|
|
141
|
+
`finalize-delta` merges this record into the master frontend-plan.md alongside the
|
|
142
|
+
spec, service-plan and domain-model merges and leaves the change OPEN;
|
|
143
|
+
`close-delta` bumps the ONE version both lanes share, writes the Change History
|
|
144
|
+
rows and archives the change under `changes/archive/`.
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
IT NAMES NO FRAMEWORK, ROUTER, STATE LIBRARY, COMPONENT LIBRARY, DESIGN
|
|
13
13
|
SYSTEM OR STYLING APPROACH. "Component", "screen", "route" and "state
|
|
14
14
|
container" are CONCEPTUAL here — the same way the service design says
|
|
15
|
-
"repository" without naming an ORM. The framework binds later,
|
|
16
|
-
|
|
15
|
+
"repository" without naming an ORM. The framework binds later, in the
|
|
16
|
+
FRONTEND LANE of `implement`, from constitution.ui.md plus that lane's rule set. A
|
|
17
17
|
named example in a skeleton becomes law in a lane it does not fit, and the
|
|
18
18
|
frontend is where that risk is highest. Every [BRACKET] is filled FROM THE
|
|
19
19
|
LANE'S OWN CODE.
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
THIS IS A TEMPLATE OF A TEMPLATE. What onboard generates from it is the
|
|
22
22
|
project's UI design TEMPLATE — [PLACEHOLDER] tokens and authoring comments
|
|
23
23
|
intact — which ⌛ `ui-design` then fills once per feature into
|
|
24
|
-
specs/<Feature>/
|
|
24
|
+
specs/<Context>/<Feature>/frontend-plan.md. Onboard replaces the STRUCTURE, not the content.
|
|
25
25
|
|
|
26
26
|
THE SECTION LIST IS RATIFIED, NOT INVENTED. §1–§9 below are the sections
|
|
27
|
-
aw-spec specifies for
|
|
27
|
+
aw-spec specifies for frontend-plan.md (Navigation & screen structure · Client
|
|
28
28
|
state · Component structure · Interaction & flow · Contract binding ·
|
|
29
29
|
Cross-cutting · Traceability · DA-n · WA-n), keeping the neutral bones the
|
|
30
30
|
service design earned. What the CODE supplies is what goes IN them — the
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
**Aggregate (feature)**: `[Aggregate]`
|
|
63
63
|
|
|
64
|
-
**
|
|
64
|
+
**Plan home**: `specs/[Context]/[Feature]/frontend-plan.md`
|
|
65
65
|
|
|
66
66
|
**Source spec**: `specs/[Aggregate]/spec.md`
|
|
67
67
|
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
WHAT THIS DOCUMENT IS
|
|
76
76
|
=====================
|
|
77
77
|
The single, living high-level UI design for ONE feature's experience — the
|
|
78
|
-
MEDIATOR between spec.md (WHAT/WHY) and the frontend code
|
|
79
|
-
generates. It carries screens, navigation, state, composition, interaction
|
|
78
|
+
MEDIATOR between spec.md (WHAT/WHY) and the frontend code `implement`
|
|
79
|
+
generates in this lane. It carries screens, navigation, state, composition, interaction
|
|
80
80
|
and the service binding; it is not code and it is not a visual comp.
|
|
81
81
|
|
|
82
82
|
ANCHORING RULES
|
|
@@ -285,7 +285,7 @@ client. Or `None`.]
|
|
|
285
285
|
|
|
286
286
|
## Change History
|
|
287
287
|
|
|
288
|
-
<!-- In lockstep with spec.md and
|
|
288
|
+
<!-- In lockstep with spec.md and backend-plan.md — a change that touches both lanes
|
|
289
289
|
closes on ONE version bump. finalize-delta appends the row; close-delta
|
|
290
290
|
bumps the version and stamps it into the header. Newest last. -->
|
|
291
291
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# Adopt is JUST-IN-TIME and per-feature: reverse ONLY the feature you are about to
|
|
14
14
|
# develop, never the whole codebase (that scale is what onboard's shallow feature map
|
|
15
15
|
# avoids). A NEW feature (no existing code) is NOT adopted — it is authored straight
|
|
16
|
-
# through the forward pipeline (/appweaver specify →
|
|
16
|
+
# through the forward pipeline (/appweaver specify → plan → implement), which
|
|
17
17
|
# onboard already made brownfield-ready (the code-derived design template is the
|
|
18
18
|
# project default). So adopt = reverse an EXISTING feature; the forward pipeline = a
|
|
19
19
|
# new one. Both then evolve through the CR delta loop.
|
|
@@ -189,7 +189,7 @@ workflow:
|
|
|
189
189
|
action: verify_context
|
|
190
190
|
require_non_empty: guard_sentinel
|
|
191
191
|
on_empty: stop
|
|
192
|
-
on_empty_message: "specs/ already has a spec.md for {{feature_name}} — adopt is a one-time baseline. For a change to an adopted slice use the CR delta loop (/appweaver specify →
|
|
192
|
+
on_empty_message: "specs/ already has a spec.md for {{feature_name}} — adopt is a one-time baseline. For a change to an adopted slice use the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta); to re-adopt from scratch, remove the feature dir first."
|
|
193
193
|
|
|
194
194
|
# 1b. Resolve this aggregate's OKF bundle concept → its source_files (the code
|
|
195
195
|
# that IS the slice) + module dir. The INDEX adopt reverse-engineers FROM;
|
|
@@ -218,7 +218,7 @@ workflow:
|
|
|
218
218
|
action: verify_context
|
|
219
219
|
require_true: concept_exists
|
|
220
220
|
on_false: stop
|
|
221
|
-
on_false_message: "No feature '{{feature_name}}' in the onboard feature map under {{bundle_dir}}. If you have not onboarded, run /appweaver onboard first, then use the exact feature name from {{bundle_dir}}/aggregates/index.md. If '{{feature_name}}' is a NEW feature (no existing code), do NOT adopt it — author it through the forward pipeline (/appweaver specify →
|
|
221
|
+
on_false_message: "No feature '{{feature_name}}' in the onboard feature map under {{bundle_dir}}. If you have not onboarded, run /appweaver onboard first, then use the exact feature name from {{bundle_dir}}/aggregates/index.md. If '{{feature_name}}' is a NEW feature (no existing code), do NOT adopt it — author it through the forward pipeline (/appweaver specify → plan → implement), which onboard already made brownfield-ready."
|
|
222
222
|
|
|
223
223
|
# Governance prerequisite: the reverse steps below are authored AGAINST the project
|
|
224
224
|
# onboard established (the constitution halves + guardrails/projects/<project>/ rule set).
|
|
@@ -360,8 +360,8 @@ workflow:
|
|
|
360
360
|
- { path: .appweaver/memory/constitution.ui.md, optional: true } # the frontend lane's UX-* base — absent on a backend-only repo, which onboard leaves unwritten by design
|
|
361
361
|
- id: reverse_spec
|
|
362
362
|
action: agent_author
|
|
363
|
-
tools: Read # the code arrives as a PATH LIST, not inlined — a legacy tree does not fit a payload
|
|
364
363
|
include_standards: false # the technical/arch sticky set is for design, never the spec
|
|
364
|
+
tools: Read # the code arrives as a PATH LIST, not inlined — a legacy tree does not fit a payload
|
|
365
365
|
output_target: { type: file, path: "{{spec_file}}" }
|
|
366
366
|
task: |
|
|
367
367
|
Reverse-engineer the MASTER specification (the target spec.md in context)
|
|
@@ -436,8 +436,8 @@ workflow:
|
|
|
436
436
|
- { path: .appweaver/memory/constitution.technical.md, optional: true } # technology base ONLY — no domain
|
|
437
437
|
- id: reverse_design
|
|
438
438
|
action: agent_author
|
|
439
|
-
tools: Read # grounded in the CODE, which arrives as {{source_files}} paths
|
|
440
439
|
include_standards: true # the technical/architecture sticky set (reference only — the CODE wins)
|
|
440
|
+
tools: Read # grounded in the CODE, which arrives as {{source_files}} paths
|
|
441
441
|
output_target: { type: file, path: "{{design_doc}}" }
|
|
442
442
|
task: |
|
|
443
443
|
Reverse-engineer the MASTER high-level design (the target design.md in
|
|
@@ -501,8 +501,8 @@ workflow:
|
|
|
501
501
|
- id: reverse_ui_design
|
|
502
502
|
condition: "{{ui_lane}} == true"
|
|
503
503
|
action: agent_author
|
|
504
|
-
tools: Read # same, for the lane's surface ({{ui_source_files}})
|
|
505
504
|
include_standards: true # the lane's sticky technical set (reference only — the CODE wins)
|
|
505
|
+
tools: Read # same, for the lane's surface ({{ui_source_files}})
|
|
506
506
|
output_target: { type: file, path: "{{ui_design_doc}}" }
|
|
507
507
|
task: |
|
|
508
508
|
Reverse-engineer the FRONTEND LANE's high-level design (the target design.ui.md
|
|
@@ -548,8 +548,8 @@ workflow:
|
|
|
548
548
|
- { path: "{{concept_path}}" } # both file lists to map
|
|
549
549
|
- id: source_map
|
|
550
550
|
action: agent_author
|
|
551
|
-
tools: Read # one row per legacy artefact; the artefacts are paths in the concept
|
|
552
551
|
include_standards: false
|
|
552
|
+
tools: Read # one row per legacy artefact; the artefacts are paths in the concept
|
|
553
553
|
output_target: { type: file, path: "{{feature_dir}}/source-map.md" }
|
|
554
554
|
task: |
|
|
555
555
|
Author the source-map sidecar (the target in context) from the template,
|
|
@@ -580,7 +580,6 @@ workflow:
|
|
|
580
580
|
# → written to an Adopt Review report and closed OUT OF BAND (Brownfield B1·R).
|
|
581
581
|
- id: fidelity
|
|
582
582
|
action: agent_query
|
|
583
|
-
tools: Read # the check is spec/design vs CODE; with no code it degrades to spec vs design and certifies fabrication as ok
|
|
584
583
|
context:
|
|
585
584
|
- "{{spec_file}}"
|
|
586
585
|
- "{{design_doc}}"
|
|
@@ -588,6 +587,7 @@ workflow:
|
|
|
588
587
|
- "{{feature_dir}}/source-map.md"
|
|
589
588
|
- "{{concept_path}}"
|
|
590
589
|
include_standards: false
|
|
590
|
+
tools: Read # the check is spec/design vs CODE; with no code it degrades to spec vs design and certifies fabrication as ok
|
|
591
591
|
schema: { ok: true, report_needed: false, blocking_gaps: [ { severity: "high", artefact: "<source file / spec id / design element>", kind: "unmapped-code | fabricated-spec | fabricated-design", detail: "<why>" } ], review_items: [ { kind: "inferred | as-built-quirk | missing-invariant | confidence", where: "<spec/design/source-map location>", note: "<what to confirm out of band>" } ] }
|
|
592
592
|
mock: { ok: true, report_needed: false, blocking_gaps: [], review_items: [] }
|
|
593
593
|
task: |
|
|
@@ -637,8 +637,7 @@ workflow:
|
|
|
637
637
|
spec.md (a resolved [NEEDS CLARIFICATION] / Assumption) or log a deviation.
|
|
638
638
|
Review items: {{review_items}}
|
|
639
639
|
- "## How to proceed": resolve blocking gaps first; then the slice is a normal
|
|
640
|
-
feature — run /appweaver plan (
|
|
641
|
-
conforms it) and then /appweaver analyze-design (the spec↔plan gate), then
|
|
640
|
+
feature — run /appweaver analyze-plan (spec↔design gate) if desired, then
|
|
642
641
|
drive every change through the CR delta loop. If a change edits untested legacy
|
|
643
642
|
behaviour with blast radius, characterize just that surface first (optional
|
|
644
643
|
on-touch fence) — it is not a required phase.
|
|
@@ -937,4 +936,4 @@ outputs:
|
|
|
937
936
|
composed_file: "{{composed_file}}"
|
|
938
937
|
technical_reconcile_ok: "{{technical_ok}}"
|
|
939
938
|
domain_reconcile_ok: "{{domain_ok}}"
|
|
940
|
-
next: "Adopted {{feature_name}} (spec.md + design.md + source-map.md, v1.0) and COMPLETED its OKF concept (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 design.ui.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. 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/projects/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in specs/{{feature_name}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-
|
|
939
|
+
next: "Adopted {{feature_name}} (spec.md + design.md + source-map.md, v1.0) and COMPLETED its OKF concept (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 design.ui.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. 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/projects/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in specs/{{feature_name}}/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."
|