aw-spec-cli 0.1.23 → 0.1.24
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/ORCH-DIALECT.md +3 -3
- package/assets/.appweaver/RULE-PARTITION.md +41 -28
- package/assets/.appweaver/orchestrator/orchestrator.py +92 -14
- package/assets/.appweaver/orchestrator/rev-templates/ai-rules.reference.md +3 -3
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +19 -12
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +25 -17
- package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +2 -2
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +10 -10
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +28 -17
- package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +22 -24
- package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +29 -19
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +27 -20
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +184 -37
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +18 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +19 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +18 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +55 -29
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +650 -205
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +19 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +5 -5
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-model.orch.yaml +13 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-prototype.orch.yaml +40 -1
- package/assets/.appweaver/orchestrator/workflows/aw-spec-workflow-model.orch.yaml +2 -1
- package/assets/.appweaver/scripts/bash/aw-rev-constitution.sh +1 -1
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +69 -7
- package/assets/.appweaver/scripts/powershell/aw-rev-constitution.ps1 +1 -1
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +58 -2
- package/assets/.appweaver/scripts/python/aw-inventory.py +1809 -156
- package/assets/.appweaver/scripts/python/aw-rev-constitution.py +106 -145
- package/assets/.appweaver/scripts/python/aw-stack.py +45 -1
- package/assets/.appweaver/scripts/python/aw-xref.py +73 -2
- package/assets/.appweaver/scripts/python/validate_okf.py +10 -5
- package/assets/.appweaver/templates/okf-concept-template.md +10 -2
- package/assets/.appweaver/templates/proposed-inventory-template.md +100 -48
- package/assets/.appweaver/templates/source-map-template.md +14 -6
- package/package.json +1 -1
|
@@ -39,13 +39,14 @@ refers to it directly, as-is.
|
|
|
39
39
|
## /aw-spec-specify
|
|
40
40
|
<!-- MODELLING METHODOLOGY ONLY — exactly one file. HOW this codebase expresses a domain model
|
|
41
41
|
(what marks an aggregate root, entity vs value object, where invariants live, the context
|
|
42
|
-
boundary), NOT what the model is (that is the domain set's domain-
|
|
43
|
-
|
|
42
|
+
boundary), NOT what the model is (that is the domain set's domain-model.domain.md, wired
|
|
43
|
+
via domain-rule-bindings). No technology rule may appear under this heading. -->
|
|
44
44
|
- guardrails/projects/[project]/service/domain-modelling.md
|
|
45
45
|
|
|
46
46
|
## /aw-spec-plan
|
|
47
|
-
<!-- The as-built architecture / cross-cutting technical rules the
|
|
48
|
-
against. NO domain file here — domain reaches
|
|
47
|
+
<!-- The as-built architecture / cross-cutting technical rules the SERVICE lane's plan author
|
|
48
|
+
mediates the spec against. NO domain file here — domain reaches plan only as spec ids and
|
|
49
|
+
the context's domain-model.md. -->
|
|
49
50
|
- guardrails/projects/[project]/service/[as-built-architecture].md
|
|
50
51
|
- guardrails/projects/[project]/service/[each generated architecture/cross-cutting rule].md
|
|
51
52
|
|
|
@@ -65,12 +66,13 @@ refers to it directly, as-is.
|
|
|
65
66
|
- guardrails/projects/[project]/service/[as-built-architecture].md
|
|
66
67
|
|
|
67
68
|
## /aw-spec-analyze-slice
|
|
68
|
-
<!-- The
|
|
69
|
+
<!-- The plan↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
|
|
69
70
|
- guardrails/projects/[project]/service/[testing/convention rule to validate against].md
|
|
70
71
|
|
|
71
72
|
## /aw-spec-adopt
|
|
72
|
-
<!-- Brownfield reverse-engineering: the technical REFERENCE set the reversed
|
|
73
|
-
reversed spec ↔ existing code against — the CODE wins, these are reference
|
|
73
|
+
<!-- Brownfield reverse-engineering: the technical REFERENCE set the reversed BACKEND plan
|
|
74
|
+
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-ui`. -->
|
|
74
76
|
- guardrails/projects/[project]/service/[architecture/cross-cutting reference rule].md
|
|
75
77
|
|
|
76
78
|
## /aw-spec-constitution
|
|
@@ -89,13 +91,22 @@ refers to it directly, as-is.
|
|
|
89
91
|
a runtime/hosting concern file. NOT data-migration (migration is the deferred later phase). -->
|
|
90
92
|
- guardrails/projects/[project]/service/[runtime/hosting rule].md
|
|
91
93
|
|
|
92
|
-
<!--
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
<!-- THE FRONTEND LANE'S THREE HEADINGS. They are NOT written by the step that authors this
|
|
95
|
+
map; onboard's frontend rule-set step APPENDS them here, after the technical headings and
|
|
96
|
+
before the quick-reference table, and only where a UI lane is declared. A backend-only
|
|
97
|
+
repo never gets them.
|
|
98
|
+
## /aw-spec-ui-constitution — the ratifiable lane standards (frontend/ui-constitution.md
|
|
99
|
+
first). Also the authoritative signal that this project HAS a frontend lane: a later
|
|
100
|
+
/appweaver constitution reads it to decide whether to author constitution.ui.md.
|
|
101
|
+
## /aw-spec-plan-ui — the lane rules the FRONTEND lane of `plan` authors
|
|
102
|
+
frontend-plan.md against: composition, navigation, client state, interaction states,
|
|
103
|
+
forms, accessibility, the published-surface binding. `adopt` reverses a slice's
|
|
104
|
+
frontend-plan.md under the same set.
|
|
105
|
+
## /aw-spec-implement-ui — the lane rules the FRONTEND lane of `implement` generates
|
|
106
|
+
code against, on both the master and the delta path: component conventions, state and
|
|
107
|
+
data fetching, styling, forms, testing.
|
|
108
|
+
A file carrying both a planning half and a generating half is listed under both; the lane
|
|
109
|
+
base file frontend/ui-constitution.md sits under ## /aw-spec-ui-constitution only.
|
|
99
110
|
|
|
100
111
|
Do NOT add /aw-spec-characterize or /aw-spec-parity in the DEV flow — characterize is
|
|
101
112
|
opt-on-touch and parity is deferred to the migration phase. Add any other heading later
|
|
@@ -109,11 +120,11 @@ refers to it directly, as-is.
|
|
|
109
120
|
| Command | Technical rule files | Role |
|
|
110
121
|
|---|---|---|
|
|
111
122
|
| /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
|
|
112
|
-
| /aw-spec-plan | [n] | as-built architecture the
|
|
123
|
+
| /aw-spec-plan | [n] | as-built architecture the service lane's plan author mediates the spec against |
|
|
113
124
|
| /aw-spec-implement | [n] | code-generation set the service lane builds against (from backend-plan.md) |
|
|
114
125
|
| /aw-spec-implement-delta | [n] | the same set for the service lane when implement is generating a change's delta plan |
|
|
115
126
|
| /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
|
|
116
|
-
| /aw-spec-analyze-slice | [n] | conformance rules the
|
|
117
|
-
| /aw-spec-adopt | [n] | technical reference set for the reversed
|
|
127
|
+
| /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) |
|
|
118
129
|
| /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
|
|
119
130
|
| /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
rev-templates/technical-constitution.skeleton.md — SHAPE-ONLY reference.
|
|
4
4
|
|
|
5
5
|
This file is the FORMAT + VOCABULARY reference for the reverse-engineered
|
|
6
|
-
TECHNICAL half (constitution.technical.md).
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
TECHNICAL half (constitution.technical.md). onboard hands it to the
|
|
7
|
+
technical-half author in that step's context. It carries the AppWeaver
|
|
8
|
+
principle-heading style, the Sync-Impact-Report shape, the evidence-line
|
|
9
|
+
pattern, and the section skeleton — and NOTHING ELSE.
|
|
10
10
|
|
|
11
11
|
IT DELIBERATELY CONTAINS NO PRINCIPLE SET. There is no fixed I–XV list to
|
|
12
12
|
inherit. Every [BRACKET] token below is a slot the author fills from evidence
|
|
@@ -14,18 +14,19 @@
|
|
|
14
14
|
|
|
15
15
|
DISCIPLINE THIS SKELETON ENFORCES (structurally — there is no project content
|
|
16
16
|
here to leak):
|
|
17
|
-
• EVIDENCE-FIRST — author a principle ONLY for a technology trait the
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
• EVIDENCE-FIRST — author a principle ONLY for a technology trait the code
|
|
18
|
+
evidences: the OKF overview and platform note, and any adopted plans and
|
|
19
|
+
source-maps that exist. If the code does not show it, it is not a principle.
|
|
20
20
|
• CITE inline — every principle ends with an `(evidence: …)` line naming a
|
|
21
|
-
|
|
22
|
-
an OKF stack line. A principle with no groundable evidence does not
|
|
21
|
+
concrete type / port / persistence context / config path, a plan section,
|
|
22
|
+
or an OKF stack line. A principle with no groundable evidence does not
|
|
23
|
+
belong.
|
|
23
24
|
• AS-BUILT LEVEL — state a partial / stubbed / optional trait at the level
|
|
24
25
|
the code actually reaches; never the aspirational ideal.
|
|
25
26
|
• OMIT pure aspiration — a trait the code shows zero of is not softened into
|
|
26
|
-
a principle; it is left out
|
|
27
|
-
|
|
28
|
-
the
|
|
27
|
+
a principle; it is left out, and named with the reason in the Sync Impact
|
|
28
|
+
Report's "deliberately omitted" list. There is no debt or backlog sink:
|
|
29
|
+
this is the development flow, and migration is a separate later phase.
|
|
29
30
|
• VARIABLE LENGTH — number sequentially from I with no gaps and no padding
|
|
30
31
|
to a fixed count. The final numeral is the domain half's continuation
|
|
31
32
|
point.
|
|
@@ -40,11 +41,8 @@ Sync Impact Report
|
|
|
40
41
|
I [PRINCIPLE_TITLE]
|
|
41
42
|
II [PRINCIPLE_TITLE]
|
|
42
43
|
… (only traits the code evidences — no fixed count)
|
|
43
|
-
-
|
|
44
|
-
- [
|
|
45
|
-
- …
|
|
46
|
-
- As-Built Debt → migration backlog (see knowledge/migration-backlog.md; do not restate the table):
|
|
47
|
-
- [gap / stub / inactive-optional concern] — [where it is tracked]
|
|
44
|
+
- Traits DELIBERATELY OMITTED (lack of as-built evidence):
|
|
45
|
+
- [TRAIT] — [why the code does not evidence it]
|
|
48
46
|
- …
|
|
49
47
|
- Dependent artifacts:
|
|
50
48
|
- constitution.domain.md — ⚠ authored next; continues at [N+1]
|
|
@@ -54,9 +52,9 @@ Sync Impact Report
|
|
|
54
52
|
-->
|
|
55
53
|
# [PROJECT_NAME] Constitution — Technical Base
|
|
56
54
|
|
|
57
|
-
> Reverse-engineered, **as-built**, domain-agnostic technical half. Authority for
|
|
58
|
-
> IMPLEMENT. Domain principles live in `constitution.domain.md` (continues at
|
|
59
|
-
> This file asserts only technology traits
|
|
55
|
+
> Reverse-engineered, **as-built**, domain-agnostic technical half. Authority for the service
|
|
56
|
+
> lane of PLAN and IMPLEMENT. Domain principles live in `constitution.domain.md` (continues at
|
|
57
|
+
> **[N+1]**). This file asserts only technology traits the code evidences.
|
|
60
58
|
|
|
61
59
|
## Core Principles
|
|
62
60
|
|
|
@@ -64,9 +62,9 @@ Sync Impact Report
|
|
|
64
62
|
Replace the bracketed text; keep the `### <numeral>. <title>` + rule + `(evidence: …)` shape. -->
|
|
65
63
|
|
|
66
64
|
### I. [PRINCIPLE TITLE] [(NON-NEGOTIABLE)?]
|
|
67
|
-
[One declarative, testable rule the
|
|
68
|
-
|
|
69
|
-
(evidence: [
|
|
65
|
+
[One declarative, testable rule the code actually evidences. State it at the level the code
|
|
66
|
+
reaches — partial/stubbed/optional traits are stated as partial, not as the ideal.]
|
|
67
|
+
(evidence: [named type / port / persistence context / config path; a plan section; or an OKF overview Tech-stack line])
|
|
70
68
|
|
|
71
69
|
### II. [PRINCIPLE TITLE] [(NON-NEGOTIABLE)?]
|
|
72
70
|
[…]
|
|
@@ -78,7 +76,7 @@ code reaches — partial/stubbed/optional traits are stated as partial, not as t
|
|
|
78
76
|
|
|
79
77
|
## Mandatory Folder Structure (base)
|
|
80
78
|
|
|
81
|
-
- [Solution projects / module layout AS INVENTORIED — from the OKF overview
|
|
79
|
+
- [Solution projects / module layout AS INVENTORIED — from the code and the OKF overview, not an ideal.]
|
|
82
80
|
- [Cross-cutting host files that stay at their template levels.]
|
|
83
81
|
- Domain-specific folder additions (if any) are declared only in the domain constitution half.
|
|
84
82
|
|
|
@@ -18,7 +18,7 @@ concern: "[concern-slug]"
|
|
|
18
18
|
root, entity vs value object, where invariants live, the context boundary). It is
|
|
19
19
|
the only file wired under `## /aw-spec-specify`, and it carries NO business
|
|
20
20
|
vocabulary: HOW this code models, never WHAT it models (that is the domain set's
|
|
21
|
-
domain-
|
|
21
|
+
domain-model.domain.md). Same shape as below — cite code coordinates.
|
|
22
22
|
|
|
23
23
|
Every rule below MUST cite a CODE COORDINATE (a real file/folder path or named
|
|
24
24
|
type) and, where it maps, the technical-constitution principle numeral it
|
|
@@ -7,7 +7,8 @@
|
|
|
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
|
|
9
9
|
lane. It carries the classification triple, the impact and regression
|
|
10
|
-
sections, the two ledgers and the
|
|
10
|
+
sections, the two ledgers and what happens to the record at merge, and
|
|
11
|
+
NOTHING ELSE.
|
|
11
12
|
|
|
12
13
|
IT NAMES NO FRAMEWORK AND NO FIXED UI TAXONOMY. The "Section" column is a
|
|
13
14
|
SLOT, filled with the ACTUAL sections of the frontend plan template generated
|
|
@@ -15,11 +16,12 @@
|
|
|
15
16
|
carry. A change is classified against the document it amends.
|
|
16
17
|
|
|
17
18
|
ONE CHANGE, TWO LANES, ONE VERSION. A change request that touches both lanes
|
|
18
|
-
produces a service delta AND this one; `finalize-delta` merges the
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
never restates the service delta — where
|
|
22
|
-
contract, this document records only what
|
|
19
|
+
produces a service delta AND this one; `finalize-delta` merges the spec and the
|
|
20
|
+
domain model once for both — never either plan, which `plan main` re-derives
|
|
21
|
+
from them — and the change closes on ONE version bump. This record never
|
|
22
|
+
opens a second plan document, and it never restates the service delta — where
|
|
23
|
+
the change starts in the service contract, this document records only what
|
|
24
|
+
the EXPERIENCE does with it.
|
|
23
25
|
|
|
24
26
|
DISCIPLINE THIS SKELETON ENFORCES (structurally — there is no project content
|
|
25
27
|
here to leak):
|
|
@@ -49,8 +51,12 @@
|
|
|
49
51
|
|
|
50
52
|
<!--
|
|
51
53
|
This delta applies to the SINGLE master plan at
|
|
52
|
-
specs/[Context]/[Feature]/frontend-plan.md — never a new document
|
|
53
|
-
master
|
|
54
|
+
specs/[Context]/[Feature]/frontend-plan.md — never a new document. It does not
|
|
55
|
+
touch the master, and neither does finalize-delta: the master is DERIVED from
|
|
56
|
+
spec.md and domain-model.md, so `plan main` re-derives it rather than patching
|
|
57
|
+
it from this file, and a UX- item of this change reaches it through the spec's
|
|
58
|
+
Experience Standards. close-delta archives this document as the record of how
|
|
59
|
+
the change was built. Classify every change
|
|
54
60
|
ADDED / MODIFIED / REMOVED against the current master, per the MASTER'S OWN
|
|
55
61
|
SECTIONS, in the same technology-agnostic form: responsibilities, inputs as
|
|
56
62
|
field shapes, events and states — no code. `implement`'s frontend lane
|
|
@@ -73,8 +79,8 @@ it serves.]
|
|
|
73
79
|
## ADDED — new UI elements
|
|
74
80
|
|
|
75
81
|
<!-- New screens, components, state, interactions or contract bindings.
|
|
76
|
-
"Section" names a section of THIS project's master
|
|
77
|
-
section titles the generated
|
|
82
|
+
"Section" names a section of THIS project's master frontend plan — the same
|
|
83
|
+
section titles the generated frontend plan template carries. -->
|
|
78
84
|
|
|
79
85
|
| Section (§ in frontend-plan.md) | Element | Kind | Serves |
|
|
80
86
|
|---|---|---|---|
|
|
@@ -105,8 +111,9 @@ it serves.]
|
|
|
105
111
|
|
|
106
112
|
## Contract impact
|
|
107
113
|
|
|
108
|
-
[What this change needs from the service lane,
|
|
109
|
-
|
|
114
|
+
[What this change needs from the service lane, bound against its published surface —
|
|
115
|
+
the delta-spec's IC- ids and the service delta's "Contract deltas for the frontend
|
|
116
|
+
lane" table: bindings added, changed or no longer used. Anything the experience
|
|
110
117
|
requires that the contract does not offer is raised back to the service lane —
|
|
111
118
|
never worked around in the client. Or `None`.]
|
|
112
119
|
|
|
@@ -130,15 +137,18 @@ shared state container or a navigation edge changed.]
|
|
|
130
137
|
|
|
131
138
|
## New assumptions / deviations (from this change)
|
|
132
139
|
|
|
133
|
-
<!-- Anything this change defers
|
|
134
|
-
|
|
140
|
+
<!-- Anything this change defers. It stays this document's record — the master's
|
|
141
|
+
DA-n / WA-n ledgers are re-derived with the rest of the master plan, not
|
|
142
|
+
patched from here. -->
|
|
135
143
|
|
|
136
144
|
- **DA-[n]**: [assumption to clarify later] — or `None`
|
|
137
145
|
- **WA-[n]**: [deviation to clear later] — or `None`
|
|
138
146
|
|
|
139
|
-
## On
|
|
147
|
+
## On merge
|
|
140
148
|
|
|
141
|
-
`finalize-delta` merges
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
149
|
+
`finalize-delta` merges the change's SPEC half into `spec.md` and its MODEL half into the
|
|
150
|
+
context's `domain-model.md`, in one transaction, and leaves the change OPEN. It does NOT
|
|
151
|
+
merge this document: the master plan is derived from those two, so `plan main` re-derives
|
|
152
|
+
it rather than patching it. `close-delta` archives this file with the change and bumps the
|
|
153
|
+
ONE version both lanes share. None of it is this document's job — it records the change,
|
|
154
|
+
it does not apply it.
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
LANE'S OWN CODE.
|
|
20
20
|
|
|
21
21
|
THIS IS A TEMPLATE OF A TEMPLATE. What onboard generates from it is the
|
|
22
|
-
project's
|
|
23
|
-
intact — which
|
|
22
|
+
project's frontend plan TEMPLATE — [PLACEHOLDER] tokens and authoring comments
|
|
23
|
+
intact — which the frontend lane of `plan` then fills once per feature into
|
|
24
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
|
|
@@ -39,9 +39,12 @@
|
|
|
39
39
|
no error states gets a section saying so, not a section quietly omitted.
|
|
40
40
|
|
|
41
41
|
§5 IS THE LANE BOUNDARY. Contract binding is the only place the service lane
|
|
42
|
-
enters: the
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
enters: the frontend plan reads the WHOLE spec but only the service's
|
|
43
|
+
PUBLISHED SURFACE — the spec's IC- ids and the API contracts backend-plan.md
|
|
44
|
+
states. (⌛ `plan` will emit that surface as a design-contract.md projection;
|
|
45
|
+
the rule does not change when it does, only what §5 reads.) The requirement
|
|
46
|
+
is shared and must not fork; the implementation is not shared and must not
|
|
47
|
+
leak.
|
|
45
48
|
|
|
46
49
|
DISCIPLINE THIS SKELETON ENFORCES (structurally — there is no project content
|
|
47
50
|
here to leak):
|
|
@@ -57,24 +60,24 @@
|
|
|
57
60
|
ids, exactly as it reaches the service design.
|
|
58
61
|
═══════════════════════════════════════════════════════════════════════════
|
|
59
62
|
-->
|
|
60
|
-
#
|
|
63
|
+
# Frontend Plan: [FEATURE]
|
|
61
64
|
|
|
62
|
-
**Feature**: `[Feature]`
|
|
65
|
+
**Feature**: `[Feature]` <!-- the capability scope the developer chose; the aggregate(s) it acts on are the spec's "Acts on aggregate(s)" line -->
|
|
63
66
|
|
|
64
67
|
**Plan home**: `specs/[Context]/[Feature]/frontend-plan.md`
|
|
65
68
|
|
|
66
|
-
**Source spec**: `specs/[
|
|
69
|
+
**Source spec**: `specs/[Context]/[Feature]/spec.md`
|
|
67
70
|
|
|
68
|
-
**
|
|
71
|
+
**Lane**: `[lane id]` — the frontend lane declared in `.appweaver/stacks.json`
|
|
69
72
|
|
|
70
|
-
**Version**: v1.0
|
|
73
|
+
**Version**: v1.0 <!-- moves in lockstep with spec.md and backend-plan.md; one change closes on ONE bump -->
|
|
71
74
|
|
|
72
75
|
**Status**: Draft
|
|
73
76
|
|
|
74
77
|
<!--
|
|
75
78
|
WHAT THIS DOCUMENT IS
|
|
76
79
|
=====================
|
|
77
|
-
The single, living high-level
|
|
80
|
+
The single, living high-level plan for ONE feature's experience — the
|
|
78
81
|
MEDIATOR between spec.md (WHAT/WHY) and the frontend code `implement`
|
|
79
82
|
generates in this lane. It carries screens, navigation, state, composition, interaction
|
|
80
83
|
and the service binding; it is not code and it is not a visual comp.
|
|
@@ -88,8 +91,8 @@
|
|
|
88
91
|
reads a second authority, the context's domain-model.md, because it realises
|
|
89
92
|
the aggregate's structure. This lane consumes the published surface at §5, not
|
|
90
93
|
the domain, so the model is not in its context.)
|
|
91
|
-
- THE
|
|
92
|
-
the service
|
|
94
|
+
- THE PUBLISHED SURFACE IS THE ONLY SERVICE INPUT (§5) — the spec's IC- ids and
|
|
95
|
+
the API contracts backend-plan.md states, never the service's internals.
|
|
93
96
|
|
|
94
97
|
STRUCTURE FOLLOWS THIS LANE'S CODE
|
|
95
98
|
- [GENERATED_LANE_STRUCTURE_NOTE] — form: one or two sentences naming the
|
|
@@ -215,10 +218,11 @@ does none.]
|
|
|
215
218
|
## 5. Contract Binding
|
|
216
219
|
|
|
217
220
|
<!-- THE LANE BOUNDARY. One row per service operation this feature's UI depends
|
|
218
|
-
on,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
221
|
+
on, bound against the service's PUBLISHED SURFACE — the spec's IC- ids and
|
|
222
|
+
the API contracts backend-plan.md states — never its internals: no table,
|
|
223
|
+
handler or persistence assumption crosses this line. Where the surface does
|
|
224
|
+
not name an operation yet, bind against the spec's own IC-/FR- surface and
|
|
225
|
+
record that as a §8 assumption. -->
|
|
222
226
|
|
|
223
227
|
| Screen / component | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
|
|
224
228
|
|---|---|---|---|---|---|
|
|
@@ -287,9 +291,12 @@ client. Or `None`.]
|
|
|
287
291
|
|
|
288
292
|
## Change History
|
|
289
293
|
|
|
290
|
-
<!--
|
|
291
|
-
|
|
292
|
-
|
|
294
|
+
<!-- A row is appended when this plan is RE-DERIVED to carry a change: the plan is
|
|
295
|
+
derived from spec.md (its UX- Experience Standards) and the context's
|
|
296
|
+
domain-model.md, and finalize-delta merges a change into those two, never
|
|
297
|
+
into this one (`plan main` re-derives it). close-delta bumps the ONE version
|
|
298
|
+
both lanes share and stamps it into the header, so a header ahead of the
|
|
299
|
+
newest row means the plan has not been re-derived since. Newest last. -->
|
|
293
300
|
|
|
294
301
|
| Version | Date | Change | User stories | CR |
|
|
295
302
|
|---------|------|--------|--------------|-----|
|