azcodr 1.5.0 โ 1.5.1
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/.agents/hooks.json +42 -0
- package/.agents/hooks.json.example +42 -42
- package/.agents/mcp_config.json.example +6 -1
- package/.agents/scripts/safety_guard.sh +34 -16
- package/.agents/scripts/verify_completion.sh +27 -13
- package/.agents/skills/agentic-architect/SKILL.md +125 -125
- package/.agents/skills/agentic-architect/references/agents_md_template.md +62 -62
- package/.agents/skills/agentic-architect/references/refinement_workflow.md +32 -32
- package/.agents/skills/agentic-architect/references/skill_architecture_inquiry.md +63 -63
- package/.agents/skills/agentic-architect/references/skill_template.md +56 -56
- package/.agents/skills/agentic-architect/scripts/validate_agentic_configs.sh +401 -362
- package/.agents/skills/clean-code-refactor/SKILL.md +91 -91
- package/.agents/skills/clean-code-refactor/references/clean_code_smells.md +27 -27
- package/.agents/skills/clean-code-refactor/references/design_patterns_ts.md +65 -65
- package/.agents/skills/compliance-audit/SKILL.md +120 -120
- package/.agents/skills/compliance-audit/references/owasp_top10_controls.md +16 -16
- package/.agents/skills/compliance-audit/references/soc2_iso_controls.md +28 -28
- package/.agents/skills/lets-build/SKILL.md +173 -172
- package/.agents/skills/lets-build/references/architecture_interview_matrix.md +115 -115
- package/.agents/skills/lets-build/references/hexagonal_bootstrap_scaffolds.md +160 -160
- package/.agents/skills/lets-build/references/project_readme_template.md +79 -79
- package/.agents/skills/lets-build/scripts/bootstrap_workspace.sh +255 -253
- package/.agents/skills/product-analyst/SKILL.md +154 -154
- package/.agents/skills/product-analyst/references/backlog_ordering_techniques.md +107 -107
- package/.agents/skills/product-analyst/references/gherkin_patterns.md +46 -46
- package/.agents/skills/product-analyst/references/invest_checklist.md +38 -38
- package/.agents/skills/product-analyst/references/okr_alignment_guide.md +76 -76
- package/.agents/skills/product-analyst/references/smart_tasks.md +59 -59
- package/.agents/skills/relentless-questioner/SKILL.md +128 -128
- package/.agents/skills/relentless-questioner/references/adaptive_question_trees.md +102 -102
- package/.editorconfig +19 -19
- package/.github/copilot-instructions.md +1 -0
- package/.github/workflows/ci.yml +56 -0
- package/.gitignore +25 -25
- package/AGENTS.md +102 -102
- package/LICENSE +21 -21
- package/README.md +154 -154
- package/bin/azcodr.js +228 -228
- package/data/.gitkeep +0 -0
- package/docs/knowledge/ubiquitous_language.md +18 -18
- package/docs/rules/agentic_configuration.md +259 -259
- package/docs/rules/api_architecture.md +179 -179
- package/docs/rules/authentication.md +76 -76
- package/docs/rules/authorization.md +75 -75
- package/docs/rules/caching.md +69 -69
- package/docs/rules/clean_code.md +62 -62
- package/docs/rules/cloud_native.md +41 -41
- package/docs/rules/cqrs.md +203 -203
- package/docs/rules/database_design.md +125 -125
- package/docs/rules/database_operations.md +69 -69
- package/docs/rules/design_patterns.md +98 -98
- package/docs/rules/devops_ci_cd.md +76 -76
- package/docs/rules/domain_driven_design.md +122 -122
- package/docs/rules/error_handling.md +52 -52
- package/docs/rules/feature_flags.md +59 -59
- package/docs/rules/frontend_architecture.md +157 -157
- package/docs/rules/multitenancy_architecture.md +98 -98
- package/docs/rules/product_ownership.md +127 -127
- package/docs/rules/project_management.md +49 -49
- package/docs/rules/relentless_questioning.md +52 -52
- package/docs/rules/requirements_engineering.md +98 -98
- package/docs/rules/security_compliance.md +53 -53
- package/docs/rules/server_driven_ui.md +88 -88
- package/docs/rules/test_driven_development.md +185 -185
- package/docs/rules/transactional_email.md +27 -27
- package/docs/rules/type_safety.md +65 -65
- package/docs/rules/ui_ux_architecture.md +150 -150
- package/docs/rules/workflow_state_machines.md +117 -117
- package/lib/index.d.ts +134 -123
- package/lib/index.js +5 -5
- package/lib/scaffold.js +399 -351
- package/memory.md +36 -36
- package/package.json +62 -59
- package/scripts/test_coverage.js +38 -0
- package/scripts/validate.js +246 -0
|
@@ -1,253 +1,255 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# ==============================================================================
|
|
3
|
-
# bootstrap_workspace.sh
|
|
4
|
-
# Topology-Aware Deterministic Scaffolder (Strict YAGNI, Zero Speculative Bloat)
|
|
5
|
-
# ==============================================================================
|
|
6
|
-
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
WORKSPACE_ROOT="${1:-$(pwd)}"
|
|
10
|
-
TOPOLOGY="${2:-backend}"
|
|
11
|
-
LANGUAGE="${3:-generic}"
|
|
12
|
-
|
|
13
|
-
echo "๐ Initializing Topology-Aware Workspace in: ${WORKSPACE_ROOT}"
|
|
14
|
-
echo "๐๏ธ Target Topology: ${TOPOLOGY}"
|
|
15
|
-
echo "๐ฆ Target Language Profile: ${LANGUAGE}"
|
|
16
|
-
echo "--------------------------------------------------------------"
|
|
17
|
-
|
|
18
|
-
# Helper to create leaf directory with .gitkeep to ensure Git tracks empty structures
|
|
19
|
-
create_leaf() {
|
|
20
|
-
local dir="$1"
|
|
21
|
-
mkdir -p "${dir}"
|
|
22
|
-
if [[ -z "$(ls -A "${dir}" 2>/dev/null)" ]]; then
|
|
23
|
-
touch "${dir}/.gitkeep"
|
|
24
|
-
fi
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
case "${TOPOLOGY}" in
|
|
28
|
-
extension)
|
|
29
|
-
echo "1. Scaffolding Browser Extension Source Tree (src/)..."
|
|
30
|
-
create_leaf "${WORKSPACE_ROOT}/src/background"
|
|
31
|
-
create_leaf "${WORKSPACE_ROOT}/src/content"
|
|
32
|
-
create_leaf "${WORKSPACE_ROOT}/src/popup"
|
|
33
|
-
create_leaf "${WORKSPACE_ROOT}/src/shared"
|
|
34
|
-
create_leaf "${WORKSPACE_ROOT}/public"
|
|
35
|
-
|
|
36
|
-
echo "2. Scaffolding Extension Test Suites (tests/)..."
|
|
37
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
38
|
-
create_leaf "${WORKSPACE_ROOT}/tests/e2e"
|
|
39
|
-
;;
|
|
40
|
-
|
|
41
|
-
game|engine)
|
|
42
|
-
echo "1. Scaffolding Game/Engine Source Tree (src/)..."
|
|
43
|
-
create_leaf "${WORKSPACE_ROOT}/src/core"
|
|
44
|
-
create_leaf "${WORKSPACE_ROOT}/src/ecs"
|
|
45
|
-
create_leaf "${WORKSPACE_ROOT}/src/renderer"
|
|
46
|
-
create_leaf "${WORKSPACE_ROOT}/src/assets"
|
|
47
|
-
|
|
48
|
-
echo "2. Scaffolding Game/Engine Test Suites (tests/)..."
|
|
49
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
50
|
-
create_leaf "${WORKSPACE_ROOT}/tests/benchmarks"
|
|
51
|
-
;;
|
|
52
|
-
|
|
53
|
-
cli)
|
|
54
|
-
echo "1. Scaffolding CLI Source Tree (src/)..."
|
|
55
|
-
create_leaf "${WORKSPACE_ROOT}/src/cmd"
|
|
56
|
-
create_leaf "${WORKSPACE_ROOT}/src/core"
|
|
57
|
-
create_leaf "${WORKSPACE_ROOT}/src/io"
|
|
58
|
-
|
|
59
|
-
echo "2. Scaffolding CLI Test Suites (tests/)..."
|
|
60
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
61
|
-
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
62
|
-
;;
|
|
63
|
-
|
|
64
|
-
web|saas|fullstack)
|
|
65
|
-
echo "1. Scaffolding Backend / Enterprise Source Tree (src/)..."
|
|
66
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/entities"
|
|
67
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/value_objects"
|
|
68
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/services"
|
|
69
|
-
create_leaf "${WORKSPACE_ROOT}/src/ports/primary"
|
|
70
|
-
create_leaf "${WORKSPACE_ROOT}/src/ports/secondary"
|
|
71
|
-
create_leaf "${WORKSPACE_ROOT}/src/adapters/primary"
|
|
72
|
-
create_leaf "${WORKSPACE_ROOT}/src/adapters/secondary"
|
|
73
|
-
|
|
74
|
-
echo "2. Scaffolding Web Frontend Client Source Tree (client/)..."
|
|
75
|
-
create_leaf "${WORKSPACE_ROOT}/client/src/components/layout"
|
|
76
|
-
create_leaf "${WORKSPACE_ROOT}/client/src/components/ui"
|
|
77
|
-
create_leaf "${WORKSPACE_ROOT}/client/src/pages"
|
|
78
|
-
create_leaf "${WORKSPACE_ROOT}/client/src/hooks"
|
|
79
|
-
create_leaf "${WORKSPACE_ROOT}/client/src/services"
|
|
80
|
-
create_leaf "${WORKSPACE_ROOT}/client/public"
|
|
81
|
-
|
|
82
|
-
echo "3. Scaffolding Specifications (specs/)..."
|
|
83
|
-
create_leaf "${WORKSPACE_ROOT}/specs/openapi"
|
|
84
|
-
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
85
|
-
|
|
86
|
-
echo "4. Scaffolding Fullstack Test Suites (tests/)..."
|
|
87
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
88
|
-
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
89
|
-
create_leaf "${WORKSPACE_ROOT}/tests/contracts"
|
|
90
|
-
create_leaf "${WORKSPACE_ROOT}/tests/client"
|
|
91
|
-
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
92
|
-
|
|
93
|
-
echo "5. Scaffolding Deployment Infrastructure (deploy/)..."
|
|
94
|
-
create_leaf "${WORKSPACE_ROOT}/deploy/docker"
|
|
95
|
-
create_leaf "${WORKSPACE_ROOT}/deploy/compose"
|
|
96
|
-
|
|
97
|
-
TOKEN_SPEC="${WORKSPACE_ROOT}/specs/tokens/tokens.json"
|
|
98
|
-
if [[ ! -f "${TOKEN_SPEC}" ]]; then
|
|
99
|
-
cat << 'EOF' > "${TOKEN_SPEC}"
|
|
100
|
-
{
|
|
101
|
-
"color": {
|
|
102
|
-
"brand": {
|
|
103
|
-
"primary": { "$value": "#2563eb", "$type": "color" },
|
|
104
|
-
"secondary": { "$value": "#475569", "$type": "color" },
|
|
105
|
-
"accent": { "$value": "#f59e0b", "$type": "color" }
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
"dimension": {
|
|
109
|
-
"radius": {
|
|
110
|
-
"base": { "$value": "6px", "$type": "dimension" }
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
EOF
|
|
115
|
-
fi
|
|
116
|
-
;;
|
|
117
|
-
|
|
118
|
-
backend)
|
|
119
|
-
echo "1. Scaffolding Headless Backend Source Tree (src/)..."
|
|
120
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/entities"
|
|
121
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/value_objects"
|
|
122
|
-
create_leaf "${WORKSPACE_ROOT}/src/domain/services"
|
|
123
|
-
create_leaf "${WORKSPACE_ROOT}/src/ports/primary"
|
|
124
|
-
create_leaf "${WORKSPACE_ROOT}/src/ports/secondary"
|
|
125
|
-
create_leaf "${WORKSPACE_ROOT}/src/adapters/primary"
|
|
126
|
-
create_leaf "${WORKSPACE_ROOT}/src/adapters/secondary"
|
|
127
|
-
|
|
128
|
-
echo "2. Scaffolding Specifications (specs/)..."
|
|
129
|
-
create_leaf "${WORKSPACE_ROOT}/specs/openapi"
|
|
130
|
-
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
131
|
-
|
|
132
|
-
echo "3. Scaffolding Backend Test Suites (tests/)..."
|
|
133
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
134
|
-
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
135
|
-
create_leaf "${WORKSPACE_ROOT}/tests/contracts"
|
|
136
|
-
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
137
|
-
|
|
138
|
-
echo "4. Scaffolding Deployment Infrastructure (deploy/)..."
|
|
139
|
-
create_leaf "${WORKSPACE_ROOT}/deploy/docker"
|
|
140
|
-
create_leaf "${WORKSPACE_ROOT}/deploy/compose"
|
|
141
|
-
|
|
142
|
-
TOKEN_SPEC="${WORKSPACE_ROOT}/specs/tokens/tokens.json"
|
|
143
|
-
if [[ ! -f "${TOKEN_SPEC}" ]]; then
|
|
144
|
-
cat << 'EOF' > "${TOKEN_SPEC}"
|
|
145
|
-
{
|
|
146
|
-
"color": {
|
|
147
|
-
"brand": {
|
|
148
|
-
"primary": { "$value": "#2563eb", "$type": "color" },
|
|
149
|
-
"secondary": { "$value": "#475569", "$type": "color" },
|
|
150
|
-
"accent": { "$value": "#f59e0b", "$type": "color" }
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
"dimension": {
|
|
154
|
-
"radius": {
|
|
155
|
-
"base": { "$value": "6px", "$type": "dimension" }
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
EOF
|
|
160
|
-
fi
|
|
161
|
-
;;
|
|
162
|
-
|
|
163
|
-
frontend)
|
|
164
|
-
echo "1. Scaffolding Frontend Client Source Tree (src/)..."
|
|
165
|
-
create_leaf "${WORKSPACE_ROOT}/src/components/layout"
|
|
166
|
-
create_leaf "${WORKSPACE_ROOT}/src/components/ui"
|
|
167
|
-
create_leaf "${WORKSPACE_ROOT}/src/pages"
|
|
168
|
-
create_leaf "${WORKSPACE_ROOT}/src/hooks"
|
|
169
|
-
create_leaf "${WORKSPACE_ROOT}/src/services"
|
|
170
|
-
create_leaf "${WORKSPACE_ROOT}/public"
|
|
171
|
-
|
|
172
|
-
echo "2. Scaffolding Specifications (specs/)..."
|
|
173
|
-
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
174
|
-
|
|
175
|
-
echo "3. Scaffolding Frontend Test Suites (tests/)..."
|
|
176
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
177
|
-
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
178
|
-
;;
|
|
179
|
-
|
|
180
|
-
*)
|
|
181
|
-
echo "1. Scaffolding Generic / Library Source Tree (src/)..."
|
|
182
|
-
create_leaf "${WORKSPACE_ROOT}/src"
|
|
183
|
-
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
184
|
-
;;
|
|
185
|
-
esac
|
|
186
|
-
|
|
187
|
-
# Ensure memory.md in fresh projects starts with a clean ADR slate (ADR-001)
|
|
188
|
-
MEMORY_FILE="${WORKSPACE_ROOT}/memory.md"
|
|
189
|
-
if [[ -f "${MEMORY_FILE}" ]]; then
|
|
190
|
-
if grep -qE "ADR-00[
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
- **
|
|
225
|
-
- **
|
|
226
|
-
- **
|
|
227
|
-
- **
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
fi
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
# ==============================================================================
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
echo "
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ==============================================================================
|
|
3
|
+
# bootstrap_workspace.sh
|
|
4
|
+
# Topology-Aware Deterministic Scaffolder (Strict YAGNI, Zero Speculative Bloat)
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
WORKSPACE_ROOT="${1:-$(pwd)}"
|
|
10
|
+
TOPOLOGY="${2:-backend}"
|
|
11
|
+
LANGUAGE="${3:-generic}"
|
|
12
|
+
|
|
13
|
+
echo "๐ Initializing Topology-Aware Workspace in: ${WORKSPACE_ROOT}"
|
|
14
|
+
echo "๐๏ธ Target Topology: ${TOPOLOGY}"
|
|
15
|
+
echo "๐ฆ Target Language Profile: ${LANGUAGE}"
|
|
16
|
+
echo "--------------------------------------------------------------"
|
|
17
|
+
|
|
18
|
+
# Helper to create leaf directory with .gitkeep to ensure Git tracks empty structures
|
|
19
|
+
create_leaf() {
|
|
20
|
+
local dir="$1"
|
|
21
|
+
mkdir -p "${dir}"
|
|
22
|
+
if [[ -z "$(ls -A "${dir}" 2>/dev/null)" ]]; then
|
|
23
|
+
touch "${dir}/.gitkeep"
|
|
24
|
+
fi
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
case "${TOPOLOGY}" in
|
|
28
|
+
extension)
|
|
29
|
+
echo "1. Scaffolding Browser Extension Source Tree (src/)..."
|
|
30
|
+
create_leaf "${WORKSPACE_ROOT}/src/background"
|
|
31
|
+
create_leaf "${WORKSPACE_ROOT}/src/content"
|
|
32
|
+
create_leaf "${WORKSPACE_ROOT}/src/popup"
|
|
33
|
+
create_leaf "${WORKSPACE_ROOT}/src/shared"
|
|
34
|
+
create_leaf "${WORKSPACE_ROOT}/public"
|
|
35
|
+
|
|
36
|
+
echo "2. Scaffolding Extension Test Suites (tests/)..."
|
|
37
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
38
|
+
create_leaf "${WORKSPACE_ROOT}/tests/e2e"
|
|
39
|
+
;;
|
|
40
|
+
|
|
41
|
+
game|engine)
|
|
42
|
+
echo "1. Scaffolding Game/Engine Source Tree (src/)..."
|
|
43
|
+
create_leaf "${WORKSPACE_ROOT}/src/core"
|
|
44
|
+
create_leaf "${WORKSPACE_ROOT}/src/ecs"
|
|
45
|
+
create_leaf "${WORKSPACE_ROOT}/src/renderer"
|
|
46
|
+
create_leaf "${WORKSPACE_ROOT}/src/assets"
|
|
47
|
+
|
|
48
|
+
echo "2. Scaffolding Game/Engine Test Suites (tests/)..."
|
|
49
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
50
|
+
create_leaf "${WORKSPACE_ROOT}/tests/benchmarks"
|
|
51
|
+
;;
|
|
52
|
+
|
|
53
|
+
cli)
|
|
54
|
+
echo "1. Scaffolding CLI Source Tree (src/)..."
|
|
55
|
+
create_leaf "${WORKSPACE_ROOT}/src/cmd"
|
|
56
|
+
create_leaf "${WORKSPACE_ROOT}/src/core"
|
|
57
|
+
create_leaf "${WORKSPACE_ROOT}/src/io"
|
|
58
|
+
|
|
59
|
+
echo "2. Scaffolding CLI Test Suites (tests/)..."
|
|
60
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
61
|
+
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
62
|
+
;;
|
|
63
|
+
|
|
64
|
+
web|saas|fullstack)
|
|
65
|
+
echo "1. Scaffolding Backend / Enterprise Source Tree (src/)..."
|
|
66
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/entities"
|
|
67
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/value_objects"
|
|
68
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/services"
|
|
69
|
+
create_leaf "${WORKSPACE_ROOT}/src/ports/primary"
|
|
70
|
+
create_leaf "${WORKSPACE_ROOT}/src/ports/secondary"
|
|
71
|
+
create_leaf "${WORKSPACE_ROOT}/src/adapters/primary"
|
|
72
|
+
create_leaf "${WORKSPACE_ROOT}/src/adapters/secondary"
|
|
73
|
+
|
|
74
|
+
echo "2. Scaffolding Web Frontend Client Source Tree (client/)..."
|
|
75
|
+
create_leaf "${WORKSPACE_ROOT}/client/src/components/layout"
|
|
76
|
+
create_leaf "${WORKSPACE_ROOT}/client/src/components/ui"
|
|
77
|
+
create_leaf "${WORKSPACE_ROOT}/client/src/pages"
|
|
78
|
+
create_leaf "${WORKSPACE_ROOT}/client/src/hooks"
|
|
79
|
+
create_leaf "${WORKSPACE_ROOT}/client/src/services"
|
|
80
|
+
create_leaf "${WORKSPACE_ROOT}/client/public"
|
|
81
|
+
|
|
82
|
+
echo "3. Scaffolding Specifications (specs/)..."
|
|
83
|
+
create_leaf "${WORKSPACE_ROOT}/specs/openapi"
|
|
84
|
+
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
85
|
+
|
|
86
|
+
echo "4. Scaffolding Fullstack Test Suites (tests/)..."
|
|
87
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
88
|
+
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
89
|
+
create_leaf "${WORKSPACE_ROOT}/tests/contracts"
|
|
90
|
+
create_leaf "${WORKSPACE_ROOT}/tests/client"
|
|
91
|
+
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
92
|
+
|
|
93
|
+
echo "5. Scaffolding Deployment Infrastructure (deploy/)..."
|
|
94
|
+
create_leaf "${WORKSPACE_ROOT}/deploy/docker"
|
|
95
|
+
create_leaf "${WORKSPACE_ROOT}/deploy/compose"
|
|
96
|
+
|
|
97
|
+
TOKEN_SPEC="${WORKSPACE_ROOT}/specs/tokens/tokens.json"
|
|
98
|
+
if [[ ! -f "${TOKEN_SPEC}" ]]; then
|
|
99
|
+
cat << 'EOF' > "${TOKEN_SPEC}"
|
|
100
|
+
{
|
|
101
|
+
"color": {
|
|
102
|
+
"brand": {
|
|
103
|
+
"primary": { "$value": "#2563eb", "$type": "color" },
|
|
104
|
+
"secondary": { "$value": "#475569", "$type": "color" },
|
|
105
|
+
"accent": { "$value": "#f59e0b", "$type": "color" }
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"dimension": {
|
|
109
|
+
"radius": {
|
|
110
|
+
"base": { "$value": "6px", "$type": "dimension" }
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
EOF
|
|
115
|
+
fi
|
|
116
|
+
;;
|
|
117
|
+
|
|
118
|
+
backend)
|
|
119
|
+
echo "1. Scaffolding Headless Backend Source Tree (src/)..."
|
|
120
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/entities"
|
|
121
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/value_objects"
|
|
122
|
+
create_leaf "${WORKSPACE_ROOT}/src/domain/services"
|
|
123
|
+
create_leaf "${WORKSPACE_ROOT}/src/ports/primary"
|
|
124
|
+
create_leaf "${WORKSPACE_ROOT}/src/ports/secondary"
|
|
125
|
+
create_leaf "${WORKSPACE_ROOT}/src/adapters/primary"
|
|
126
|
+
create_leaf "${WORKSPACE_ROOT}/src/adapters/secondary"
|
|
127
|
+
|
|
128
|
+
echo "2. Scaffolding Specifications (specs/)..."
|
|
129
|
+
create_leaf "${WORKSPACE_ROOT}/specs/openapi"
|
|
130
|
+
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
131
|
+
|
|
132
|
+
echo "3. Scaffolding Backend Test Suites (tests/)..."
|
|
133
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
134
|
+
create_leaf "${WORKSPACE_ROOT}/tests/integration"
|
|
135
|
+
create_leaf "${WORKSPACE_ROOT}/tests/contracts"
|
|
136
|
+
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
137
|
+
|
|
138
|
+
echo "4. Scaffolding Deployment Infrastructure (deploy/)..."
|
|
139
|
+
create_leaf "${WORKSPACE_ROOT}/deploy/docker"
|
|
140
|
+
create_leaf "${WORKSPACE_ROOT}/deploy/compose"
|
|
141
|
+
|
|
142
|
+
TOKEN_SPEC="${WORKSPACE_ROOT}/specs/tokens/tokens.json"
|
|
143
|
+
if [[ ! -f "${TOKEN_SPEC}" ]]; then
|
|
144
|
+
cat << 'EOF' > "${TOKEN_SPEC}"
|
|
145
|
+
{
|
|
146
|
+
"color": {
|
|
147
|
+
"brand": {
|
|
148
|
+
"primary": { "$value": "#2563eb", "$type": "color" },
|
|
149
|
+
"secondary": { "$value": "#475569", "$type": "color" },
|
|
150
|
+
"accent": { "$value": "#f59e0b", "$type": "color" }
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"dimension": {
|
|
154
|
+
"radius": {
|
|
155
|
+
"base": { "$value": "6px", "$type": "dimension" }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
EOF
|
|
160
|
+
fi
|
|
161
|
+
;;
|
|
162
|
+
|
|
163
|
+
frontend)
|
|
164
|
+
echo "1. Scaffolding Frontend Client Source Tree (src/)..."
|
|
165
|
+
create_leaf "${WORKSPACE_ROOT}/src/components/layout"
|
|
166
|
+
create_leaf "${WORKSPACE_ROOT}/src/components/ui"
|
|
167
|
+
create_leaf "${WORKSPACE_ROOT}/src/pages"
|
|
168
|
+
create_leaf "${WORKSPACE_ROOT}/src/hooks"
|
|
169
|
+
create_leaf "${WORKSPACE_ROOT}/src/services"
|
|
170
|
+
create_leaf "${WORKSPACE_ROOT}/public"
|
|
171
|
+
|
|
172
|
+
echo "2. Scaffolding Specifications (specs/)..."
|
|
173
|
+
create_leaf "${WORKSPACE_ROOT}/specs/tokens"
|
|
174
|
+
|
|
175
|
+
echo "3. Scaffolding Frontend Test Suites (tests/)..."
|
|
176
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
177
|
+
create_leaf "${WORKSPACE_ROOT}/tests/acceptance"
|
|
178
|
+
;;
|
|
179
|
+
|
|
180
|
+
*)
|
|
181
|
+
echo "1. Scaffolding Generic / Library Source Tree (src/)..."
|
|
182
|
+
create_leaf "${WORKSPACE_ROOT}/src"
|
|
183
|
+
create_leaf "${WORKSPACE_ROOT}/tests/unit"
|
|
184
|
+
;;
|
|
185
|
+
esac
|
|
186
|
+
|
|
187
|
+
# Ensure memory.md in fresh projects starts with a clean ADR slate (ADR-001)
|
|
188
|
+
MEMORY_FILE="${WORKSPACE_ROOT}/memory.md"
|
|
189
|
+
if [[ -f "${MEMORY_FILE}" ]]; then
|
|
190
|
+
if grep -qE "ADR-00[1-9]|ADR-0[1-9][0-9]|#### ADR-" "${MEMORY_FILE}"; then
|
|
191
|
+
if ! grep -q "No decisions recorded yet" "${MEMORY_FILE}"; then
|
|
192
|
+
echo "๐งน Sanitizing memory.md: Resetting legacy template ADRs to clean slate (ADR-001)..."
|
|
193
|
+
cat << 'EOF' > "${MEMORY_FILE}"
|
|
194
|
+
# Workspace Memory, Architecture Decisions & Knowledge Hub
|
|
195
|
+
|
|
196
|
+
> **Core Purpose:** Authoritative persistent memory ledger for the workspace repository (`./`), maintaining Lightweight Architectural Decision Records (ADRs), system topologies, and living domain contracts.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 1. Quick Navigation & Knowledge Repositories
|
|
201
|
+
|
|
202
|
+
- ๐ **[Living Ubiquitous Language Glossary](./docs/knowledge/ubiquitous_language.md)**: Authoritative, single-name domain vocabulary contract.
|
|
203
|
+
- ๐ **[Lightweight ADR Master Index](#adr-master-index)**: Summary of all architectural decisions and direct links to governing rules.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 2. Consolidated Architectural Decision Records (ADRs)
|
|
208
|
+
|
|
209
|
+
### ADR Master Index
|
|
210
|
+
|
|
211
|
+
| ID | Title | Date | Status | Governing Rule / Skill |
|
|
212
|
+
|---|---|---|---|---|
|
|
213
|
+
| *(No decisions recorded yet)* | *Record initial architecture decisions during Phase 3 of /lets-build.* | *YYYY-MM-DD* | *ACCEPTED* | *e.g. [`clean_code.md`](./docs/rules/clean_code.md)* |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### Lightweight Decision Summaries
|
|
218
|
+
|
|
219
|
+
<!--
|
|
220
|
+
Record project Architectural Decision Records (ADRs) below as decisions are finalized.
|
|
221
|
+
Format:
|
|
222
|
+
|
|
223
|
+
#### ADR-001: [Imperative Title]
|
|
224
|
+
- **Date:** YYYY-MM-DD | **Status:** ACCEPTED
|
|
225
|
+
- **Context:** Problem space, constraints, and operational context requiring a decision.
|
|
226
|
+
- **Decision:** Chosen architecture, invariants, and implementation patterns.
|
|
227
|
+
- **Consequences:** Positive benefits and deliberate trade-offs accepted.
|
|
228
|
+
- **Enforced In:** Relevant rule files in docs/rules/ or code paths.
|
|
229
|
+
-->
|
|
230
|
+
EOF
|
|
231
|
+
fi
|
|
232
|
+
fi
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# Deterministically generate boundary verification smoke test script (Phase 5 requirement)
|
|
236
|
+
SMOKE_TEST="${WORKSPACE_ROOT}/scripts/smoke_test.sh"
|
|
237
|
+
if [[ ! -f "${SMOKE_TEST}" ]]; then
|
|
238
|
+
echo "5. Generating boundary smoke test verification script (scripts/smoke_test.sh)..."
|
|
239
|
+
mkdir -p "${WORKSPACE_ROOT}/scripts"
|
|
240
|
+
cat << 'EOF' > "${SMOKE_TEST}"
|
|
241
|
+
#!/usr/bin/env bash
|
|
242
|
+
# ==============================================================================
|
|
243
|
+
# Boundary Verification Smoke Test (Phase 5 Verification Gate)
|
|
244
|
+
# ==============================================================================
|
|
245
|
+
set -euo pipefail
|
|
246
|
+
|
|
247
|
+
echo "Running boundary smoke verification..."
|
|
248
|
+
# Extend with project-specific runtime health checks (e.g. ping health endpoint, CLI --help)
|
|
249
|
+
echo "โ
Boundary smoke verification passed!"
|
|
250
|
+
EOF
|
|
251
|
+
chmod +x "${SMOKE_TEST}"
|
|
252
|
+
fi
|
|
253
|
+
|
|
254
|
+
echo "--------------------------------------------------------------"
|
|
255
|
+
echo "โ
Topology '${TOPOLOGY}' scaffolded with strict YAGNI (0 speculative folders)!"
|