procedure-cli 1.3.0 → 1.5.2
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/README.md +18 -1
- package/config/stacks/android-kotlin-compose.json +17 -0
- package/config/stacks/flutter.json +17 -0
- package/config/stacks/ionic-capacitor.json +16 -0
- package/config/stacks/react-native-bare.json +17 -0
- package/config/stacks/swift-ios.json +17 -0
- package/dist/app.js +18 -1
- package/dist/app.js.map +1 -1
- package/dist/components/guttered-select.d.ts +3 -1
- package/dist/components/guttered-select.js +30 -7
- package/dist/components/guttered-select.js.map +1 -1
- package/dist/lib/architecture.d.ts +15 -0
- package/dist/lib/architecture.js +142 -0
- package/dist/lib/architecture.js.map +1 -0
- package/dist/lib/template.js +41 -0
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/types.d.ts +3 -0
- package/dist/steps/architecture.d.ts +3 -1
- package/dist/steps/architecture.js +6 -23
- package/dist/steps/architecture.js.map +1 -1
- package/dist/steps/product-context.js +89 -23
- package/dist/steps/product-context.js.map +1 -1
- package/dist/steps/stack-style.js +176 -18
- package/dist/steps/stack-style.js.map +1 -1
- package/package.json +1 -1
- package/templates/AGENTS.md.hbs +18 -11
- package/templates/CLAUDE.md.hbs +64 -8
- package/templates/deployment/00-README.md.hbs +38 -0
- package/templates/gitignore.hbs +43 -0
- package/templates/skills/assets/CODE-FIXED.template.md +1 -1
- package/templates/skills/b3awesome-code-fix/SKILL.md +2 -2
- package/templates/skills/b3awesome-code-review/SKILL.md +1 -1
|
@@ -19,6 +19,7 @@ const PRESETS = {
|
|
|
19
19
|
],
|
|
20
20
|
buildCommand: "tsc",
|
|
21
21
|
testCommand: "node --test",
|
|
22
|
+
testCommandFiltered: 'node --test --test-name-pattern "name"',
|
|
22
23
|
typecheckCommand: "tsc --noEmit",
|
|
23
24
|
lintCommand: "eslint src/",
|
|
24
25
|
prCommand: "npm run typecheck && npm run test",
|
|
@@ -38,6 +39,7 @@ const PRESETS = {
|
|
|
38
39
|
],
|
|
39
40
|
buildCommand: "next build",
|
|
40
41
|
testCommand: "vitest",
|
|
42
|
+
testCommandFiltered: 'vitest -t "name"',
|
|
41
43
|
typecheckCommand: "tsc --noEmit",
|
|
42
44
|
lintCommand: "next lint",
|
|
43
45
|
prCommand: "npm run typecheck && npm run lint",
|
|
@@ -57,6 +59,7 @@ const PRESETS = {
|
|
|
57
59
|
],
|
|
58
60
|
buildCommand: "vite build",
|
|
59
61
|
testCommand: "vitest",
|
|
62
|
+
testCommandFiltered: 'vitest -t "name"',
|
|
60
63
|
typecheckCommand: "tsc --noEmit",
|
|
61
64
|
lintCommand: "eslint src/",
|
|
62
65
|
prCommand: "npm run typecheck && npm run test",
|
|
@@ -76,6 +79,7 @@ const PRESETS = {
|
|
|
76
79
|
],
|
|
77
80
|
buildCommand: "python -m py_compile src/",
|
|
78
81
|
testCommand: "pytest",
|
|
82
|
+
testCommandFiltered: 'pytest -k "name"',
|
|
79
83
|
typecheckCommand: "mypy .",
|
|
80
84
|
lintCommand: "ruff check .",
|
|
81
85
|
prCommand: "mypy . && pytest",
|
|
@@ -95,6 +99,7 @@ const PRESETS = {
|
|
|
95
99
|
],
|
|
96
100
|
buildCommand: "go build ./...",
|
|
97
101
|
testCommand: "go test ./...",
|
|
102
|
+
testCommandFiltered: 'go test -run "TestName" ./...',
|
|
98
103
|
typecheckCommand: "go vet ./...",
|
|
99
104
|
lintCommand: "golangci-lint run",
|
|
100
105
|
prCommand: "go vet ./... && go test ./...",
|
|
@@ -114,6 +119,7 @@ const PRESETS = {
|
|
|
114
119
|
],
|
|
115
120
|
buildCommand: "expo build",
|
|
116
121
|
testCommand: "jest",
|
|
122
|
+
testCommandFiltered: 'jest -t "name"',
|
|
117
123
|
typecheckCommand: "tsc --noEmit",
|
|
118
124
|
lintCommand: "eslint .",
|
|
119
125
|
prCommand: "npm run typecheck && npm run test",
|
|
@@ -136,6 +142,7 @@ const PRESETS = {
|
|
|
136
142
|
],
|
|
137
143
|
buildCommand: "go build ./...",
|
|
138
144
|
testCommand: "go test ./...",
|
|
145
|
+
testCommandFiltered: 'go test -run "TestName" ./...',
|
|
139
146
|
typecheckCommand: "go vet ./...",
|
|
140
147
|
lintCommand: "golangci-lint run",
|
|
141
148
|
prCommand: "go vet ./... && go test ./...",
|
|
@@ -156,11 +163,121 @@ const PRESETS = {
|
|
|
156
163
|
],
|
|
157
164
|
buildCommand: "tsc",
|
|
158
165
|
testCommand: "node --test",
|
|
166
|
+
testCommandFiltered: 'node --test --test-name-pattern "name"',
|
|
159
167
|
typecheckCommand: "tsc --noEmit",
|
|
160
168
|
lintCommand: "eslint src/",
|
|
161
169
|
prCommand: "npm run typecheck && npm run test",
|
|
162
170
|
},
|
|
163
171
|
},
|
|
172
|
+
"android-kotlin-compose": {
|
|
173
|
+
label: "Android (Kotlin + Compose)",
|
|
174
|
+
description: "Native Android with Jetpack Compose + Material 3",
|
|
175
|
+
answers: {
|
|
176
|
+
language: "Kotlin",
|
|
177
|
+
framework: "Jetpack Compose",
|
|
178
|
+
codeStyle: [
|
|
179
|
+
"ktlint enforced, no exceptions",
|
|
180
|
+
"Jetpack Compose with Material 3 design tokens",
|
|
181
|
+
"MVVM: Composables consume StateFlow<UiState>, ViewModel handles intents",
|
|
182
|
+
"Kotlin coroutines + Flow for async — no callbacks",
|
|
183
|
+
"Immutable data classes for UiState, sealed classes/interfaces for events",
|
|
184
|
+
"Repository pattern: ViewModel depends on interfaces, never on Room/Retrofit directly",
|
|
185
|
+
],
|
|
186
|
+
buildCommand: "./gradlew assembleDebug",
|
|
187
|
+
testCommand: "./gradlew test",
|
|
188
|
+
testCommandFiltered: './gradlew test --tests "*.TestName"',
|
|
189
|
+
typecheckCommand: "./gradlew compileDebugKotlin",
|
|
190
|
+
lintCommand: "./gradlew ktlintCheck",
|
|
191
|
+
prCommand: "./gradlew ktlintCheck && ./gradlew test",
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
"flutter": {
|
|
195
|
+
label: "Flutter",
|
|
196
|
+
description: "Cross-platform mobile/desktop with Dart + Riverpod",
|
|
197
|
+
answers: {
|
|
198
|
+
language: "Dart",
|
|
199
|
+
framework: "Flutter",
|
|
200
|
+
codeStyle: [
|
|
201
|
+
"Effective Dart conventions, dart format enforced",
|
|
202
|
+
"Riverpod for state management — single source of truth per feature",
|
|
203
|
+
"Immutable models with freezed, json_serializable for DTOs",
|
|
204
|
+
"Widgets are pure functions of state — no business logic in build()",
|
|
205
|
+
"lib/features/<name>/ layout: presentation/, application/, domain/, data/",
|
|
206
|
+
"Async work in Notifier/AsyncNotifier methods, never inside widgets",
|
|
207
|
+
],
|
|
208
|
+
buildCommand: "flutter build apk",
|
|
209
|
+
testCommand: "flutter test",
|
|
210
|
+
testCommandFiltered: 'flutter test --name "name"',
|
|
211
|
+
typecheckCommand: "flutter analyze",
|
|
212
|
+
lintCommand: "dart format --set-exit-if-changed .",
|
|
213
|
+
prCommand: "flutter analyze && flutter test",
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
"react-native-bare": {
|
|
217
|
+
label: "React Native (bare)",
|
|
218
|
+
description: "Mobile apps without Expo — full native module access",
|
|
219
|
+
answers: {
|
|
220
|
+
language: "TypeScript",
|
|
221
|
+
framework: "React Native",
|
|
222
|
+
codeStyle: [
|
|
223
|
+
"TypeScript strict mode",
|
|
224
|
+
"Functional components with hooks — no class components",
|
|
225
|
+
"StyleSheet.create for styles, no inline objects in render",
|
|
226
|
+
"Platform-specific code via Platform.select or .ios.tsx / .android.tsx",
|
|
227
|
+
"Native modules wrapped in TypeScript-typed bridges, never imported raw",
|
|
228
|
+
"Lists use FlatList/SectionList — never .map() over large arrays",
|
|
229
|
+
],
|
|
230
|
+
buildCommand: "react-native bundle --platform ios --dev false --entry-file index.js --bundle-output ios/main.jsbundle",
|
|
231
|
+
testCommand: "jest",
|
|
232
|
+
testCommandFiltered: 'jest -t "name"',
|
|
233
|
+
typecheckCommand: "tsc --noEmit",
|
|
234
|
+
lintCommand: "eslint .",
|
|
235
|
+
prCommand: "npm run typecheck && npm run test",
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
"ionic-capacitor": {
|
|
239
|
+
label: "Ionic + Capacitor",
|
|
240
|
+
description: "Hybrid mobile apps reusing one web codebase",
|
|
241
|
+
answers: {
|
|
242
|
+
language: "TypeScript",
|
|
243
|
+
framework: "Ionic",
|
|
244
|
+
codeStyle: [
|
|
245
|
+
"TypeScript strict mode",
|
|
246
|
+
"Ionic components for cross-platform UI — never raw HTML buttons in pages",
|
|
247
|
+
"Capacitor plugins wrapped in service classes, never called directly from components",
|
|
248
|
+
"Platform checks via Capacitor.getPlatform() — guard native-only code paths",
|
|
249
|
+
"Same web codebase ships to web, iOS, and Android — no platform forks in app code",
|
|
250
|
+
],
|
|
251
|
+
buildCommand: "ionic build && npx cap sync",
|
|
252
|
+
testCommand: "vitest",
|
|
253
|
+
testCommandFiltered: 'vitest -t "name"',
|
|
254
|
+
typecheckCommand: "tsc --noEmit",
|
|
255
|
+
lintCommand: "eslint src/",
|
|
256
|
+
prCommand: "npm run typecheck && npm run test",
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
"swift-ios": {
|
|
260
|
+
label: "Swift iOS (SwiftUI)",
|
|
261
|
+
description: "Native iOS apps with SwiftUI + Swift concurrency",
|
|
262
|
+
answers: {
|
|
263
|
+
language: "Swift",
|
|
264
|
+
framework: "SwiftUI",
|
|
265
|
+
codeStyle: [
|
|
266
|
+
"Swift API Design Guidelines — clear, concise naming",
|
|
267
|
+
"SwiftUI declarative views, MVVM architecture",
|
|
268
|
+
"Swift concurrency (async/await, actors) — no completion handlers",
|
|
269
|
+
"Access control: internal by default, explicit public/private",
|
|
270
|
+
"Prefer value types (struct/enum) over reference types (class)",
|
|
271
|
+
"Guard-let for early exits, avoid nested optionals",
|
|
272
|
+
],
|
|
273
|
+
buildCommand: "xcodebuild -scheme App build",
|
|
274
|
+
testCommand: "xcodebuild -scheme App test",
|
|
275
|
+
testCommandFiltered: "xcodebuild -only-testing:App/<TestName> test",
|
|
276
|
+
typecheckCommand: "swift build",
|
|
277
|
+
lintCommand: "swiftlint",
|
|
278
|
+
prCommand: "swift build && xcodebuild -scheme App test",
|
|
279
|
+
},
|
|
280
|
+
},
|
|
164
281
|
};
|
|
165
282
|
const QUICKSTART_OPTIONS = [
|
|
166
283
|
...Object.entries(PRESETS).map(([value, preset]) => ({
|
|
@@ -186,6 +303,7 @@ const LANGUAGE_OPTIONS = [
|
|
|
186
303
|
{ label: "PHP", value: "PHP", description: "Web-native, Laravel & WordPress" },
|
|
187
304
|
{ label: "Swift", value: "Swift", description: "Apple platforms, type-safe" },
|
|
188
305
|
{ label: "Kotlin", value: "Kotlin", description: "Modern JVM, Android-first" },
|
|
306
|
+
{ label: "Dart", value: "Dart", description: "Flutter and cross-platform mobile/desktop" },
|
|
189
307
|
];
|
|
190
308
|
const FRAMEWORK_OPTIONS = [
|
|
191
309
|
{ label: "Node.js", value: "Node.js", description: "JS/TS server runtime" },
|
|
@@ -200,6 +318,12 @@ const FRAMEWORK_OPTIONS = [
|
|
|
200
318
|
{ label: "Rails", value: "Rails", description: "Convention-over-config Ruby web" },
|
|
201
319
|
{ label: "Bubbletea", value: "Bubbletea", description: "Go terminal UI framework (works well with Bubbles + Lipgloss)" },
|
|
202
320
|
{ label: "Ink", value: "Ink", description: "React renderer for interactive terminal UIs" },
|
|
321
|
+
{ label: "SwiftUI", value: "SwiftUI", description: "Declarative UI framework for Apple platforms" },
|
|
322
|
+
{ label: "UIKit", value: "UIKit", description: "Imperative UI framework for iOS" },
|
|
323
|
+
{ label: "Jetpack Compose", value: "Jetpack Compose", description: "Declarative UI for Android (Kotlin)" },
|
|
324
|
+
{ label: "Flutter", value: "Flutter", description: "Cross-platform mobile/desktop UI (Dart)" },
|
|
325
|
+
{ label: "Ionic", value: "Ionic", description: "Web-based hybrid mobile UI" },
|
|
326
|
+
{ label: "Capacitor", value: "Capacitor", description: "Native runtime for hybrid mobile apps" },
|
|
203
327
|
];
|
|
204
328
|
const CODE_STYLE_OPTIONS = [
|
|
205
329
|
{ label: "Strict mode", value: "Strict mode", description: "TypeScript strict, ESLint strict" },
|
|
@@ -217,51 +341,79 @@ const CODE_STYLE_OPTIONS = [
|
|
|
217
341
|
{ label: "cmd/internal layout", value: "cmd/ for entry points, internal/ for private packages", description: "Standard Go project layout" },
|
|
218
342
|
{ label: "Hex colors only", value: "Catppuccin Mocha hex colors — never terminal color names", description: "Consistent cross-terminal rendering" },
|
|
219
343
|
{ label: "components/steps split", value: "src/components/ for reusable UI, src/steps/ for wizard screens", description: "Ink TUI file organization" },
|
|
344
|
+
{ label: "SwiftUI MVVM", value: "SwiftUI declarative views, MVVM architecture", description: "Model-View-ViewModel pattern" },
|
|
345
|
+
{ label: "Swift concurrency", value: "Swift concurrency (async/await, actors) — no completion handlers", description: "Modern async patterns" },
|
|
346
|
+
{ label: "Value types first", value: "Prefer value types (struct/enum) over reference types (class)", description: "Swift struct-first design" },
|
|
347
|
+
{ label: "Guard-let exits", value: "Guard-let for early exits, avoid nested optionals", description: "Clean unwrapping patterns" },
|
|
348
|
+
{ label: "Compose Material 3", value: "Jetpack Compose with Material 3 design tokens", description: "Modern Android UI" },
|
|
349
|
+
{ label: "Coroutines + Flow", value: "Kotlin coroutines + Flow for async — no callbacks", description: "Structured concurrency" },
|
|
350
|
+
{ label: "ktlint enforced", value: "ktlint enforced, no exceptions", description: "Standard Kotlin formatting" },
|
|
351
|
+
{ label: "Effective Dart", value: "Effective Dart conventions, dart format enforced", description: "Dart formatting & idioms" },
|
|
352
|
+
{ label: "Riverpod state", value: "Riverpod for state management — single source of truth per feature", description: "Flutter state management" },
|
|
353
|
+
{ label: "freezed models", value: "Immutable models with freezed, json_serializable for DTOs", description: "Codegen-based immutability" },
|
|
354
|
+
{ label: "RN StyleSheet.create", value: "StyleSheet.create for styles, no inline objects in render", description: "React Native style discipline" },
|
|
355
|
+
{ label: "RN platform splits", value: "Platform-specific code via Platform.select or .ios.tsx / .android.tsx", description: "RN platform handling" },
|
|
356
|
+
{ label: "Ionic components only", value: "Ionic components for cross-platform UI — never raw HTML buttons in pages", description: "Hybrid UI consistency" },
|
|
220
357
|
];
|
|
221
358
|
/** Derive build/test/typecheck/lint/prCommand from language + framework */
|
|
222
359
|
function deriveCommands(language, framework) {
|
|
223
360
|
const lang = language.split(",")[0]?.trim().toLowerCase() ?? "";
|
|
224
361
|
const fw = framework.split(",")[0]?.trim().toLowerCase() ?? "";
|
|
362
|
+
if (fw.includes("flutter") || lang.includes("dart")) {
|
|
363
|
+
return { buildCommand: "flutter build apk", testCommand: "flutter test", testCommandFiltered: 'flutter test --name "name"', typecheckCommand: "flutter analyze", lintCommand: "dart format --set-exit-if-changed .", prCommand: "flutter analyze && flutter test" };
|
|
364
|
+
}
|
|
365
|
+
if (fw.includes("compose") || (lang.includes("kotlin") && fw.includes("android"))) {
|
|
366
|
+
return { buildCommand: "./gradlew assembleDebug", testCommand: "./gradlew test", testCommandFiltered: './gradlew test --tests "*.TestName"', typecheckCommand: "./gradlew compileDebugKotlin", lintCommand: "./gradlew ktlintCheck", prCommand: "./gradlew ktlintCheck && ./gradlew test" };
|
|
367
|
+
}
|
|
368
|
+
if (fw.includes("ionic") || fw.includes("capacitor")) {
|
|
369
|
+
return { buildCommand: "ionic build && npx cap sync", testCommand: "vitest", testCommandFiltered: 'vitest -t "name"', typecheckCommand: "tsc --noEmit", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
370
|
+
}
|
|
371
|
+
if (fw.includes("react native") || fw.includes("react-native")) {
|
|
372
|
+
return { buildCommand: "react-native bundle --platform ios --dev false --entry-file index.js --bundle-output ios/main.jsbundle", testCommand: "jest", testCommandFiltered: 'jest -t "name"', typecheckCommand: "tsc --noEmit", lintCommand: "eslint .", prCommand: "npm run typecheck && npm run test" };
|
|
373
|
+
}
|
|
225
374
|
if (fw.includes("next")) {
|
|
226
|
-
return { buildCommand: "next build", testCommand: "vitest", typecheckCommand: "tsc --noEmit", lintCommand: "next lint", prCommand: "npm run typecheck && npm run lint" };
|
|
375
|
+
return { buildCommand: "next build", testCommand: "vitest", testCommandFiltered: 'vitest -t "name"', typecheckCommand: "tsc --noEmit", lintCommand: "next lint", prCommand: "npm run typecheck && npm run lint" };
|
|
227
376
|
}
|
|
228
377
|
if (fw.includes("react") || fw.includes("svelte") || fw.includes("vue")) {
|
|
229
|
-
return { buildCommand: "vite build", testCommand: "vitest", typecheckCommand: lang.includes("typescript") ? "tsc --noEmit" : "", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
378
|
+
return { buildCommand: "vite build", testCommand: "vitest", testCommandFiltered: 'vitest -t "name"', typecheckCommand: lang.includes("typescript") ? "tsc --noEmit" : "", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
230
379
|
}
|
|
231
380
|
if (fw.includes("ink")) {
|
|
232
|
-
return { buildCommand: "tsc", testCommand: "node --test", typecheckCommand: "tsc --noEmit", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
381
|
+
return { buildCommand: "tsc", testCommand: "node --test", testCommandFiltered: 'node --test --test-name-pattern "name"', typecheckCommand: "tsc --noEmit", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
233
382
|
}
|
|
234
383
|
if (lang.includes("typescript")) {
|
|
235
|
-
return { buildCommand: "tsc", testCommand: "node --test", typecheckCommand: "tsc --noEmit", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
384
|
+
return { buildCommand: "tsc", testCommand: "node --test", testCommandFiltered: 'node --test --test-name-pattern "name"', typecheckCommand: "tsc --noEmit", lintCommand: "eslint src/", prCommand: "npm run typecheck && npm run test" };
|
|
236
385
|
}
|
|
237
386
|
if (lang.includes("python")) {
|
|
238
|
-
return { buildCommand: "python -m py_compile src/", testCommand: "pytest", typecheckCommand: "mypy .", lintCommand: "ruff check .", prCommand: "mypy . && pytest" };
|
|
387
|
+
return { buildCommand: "python -m py_compile src/", testCommand: "pytest", testCommandFiltered: 'pytest -k "name"', typecheckCommand: "mypy .", lintCommand: "ruff check .", prCommand: "mypy . && pytest" };
|
|
239
388
|
}
|
|
240
389
|
if (fw.includes("bubbletea")) {
|
|
241
|
-
return { buildCommand: "go build ./...", testCommand: "go test ./...", typecheckCommand: "go vet ./...", lintCommand: "golangci-lint run", prCommand: "go vet ./... && go test ./..." };
|
|
390
|
+
return { buildCommand: "go build ./...", testCommand: "go test ./...", testCommandFiltered: 'go test -run "TestName" ./...', typecheckCommand: "go vet ./...", lintCommand: "golangci-lint run", prCommand: "go vet ./... && go test ./..." };
|
|
242
391
|
}
|
|
243
392
|
if (lang.includes("go")) {
|
|
244
|
-
return { buildCommand: "go build ./...", testCommand: "go test ./...", typecheckCommand: "go vet ./...", lintCommand: "golangci-lint run", prCommand: "go vet ./... && go test ./..." };
|
|
393
|
+
return { buildCommand: "go build ./...", testCommand: "go test ./...", testCommandFiltered: 'go test -run "TestName" ./...', typecheckCommand: "go vet ./...", lintCommand: "golangci-lint run", prCommand: "go vet ./... && go test ./..." };
|
|
245
394
|
}
|
|
246
395
|
if (lang.includes("rust")) {
|
|
247
|
-
return { buildCommand: "cargo build", testCommand: "cargo test", typecheckCommand: "cargo check", lintCommand: "cargo clippy", prCommand: "cargo clippy && cargo test" };
|
|
396
|
+
return { buildCommand: "cargo build", testCommand: "cargo test", testCommandFiltered: "cargo test test_name", typecheckCommand: "cargo check", lintCommand: "cargo clippy", prCommand: "cargo clippy && cargo test" };
|
|
248
397
|
}
|
|
249
398
|
if (lang.includes("java")) {
|
|
250
|
-
return { buildCommand: "mvn compile", testCommand: "mvn test", typecheckCommand: "", lintCommand: "mvn checkstyle:check", prCommand: "mvn verify" };
|
|
399
|
+
return { buildCommand: "mvn compile", testCommand: "mvn test", testCommandFiltered: "mvn test -Dtest=ClassName#methodName", typecheckCommand: "", lintCommand: "mvn checkstyle:check", prCommand: "mvn verify" };
|
|
251
400
|
}
|
|
252
401
|
if (lang.includes("ruby")) {
|
|
253
|
-
return { buildCommand: "bundle exec rake", testCommand: "bundle exec rspec", typecheckCommand: "", lintCommand: "rubocop", prCommand: "rubocop && bundle exec rspec" };
|
|
402
|
+
return { buildCommand: "bundle exec rake", testCommand: "bundle exec rspec", testCommandFiltered: 'bundle exec rspec -e "name"', typecheckCommand: "", lintCommand: "rubocop", prCommand: "rubocop && bundle exec rspec" };
|
|
403
|
+
}
|
|
404
|
+
if (fw.includes("swiftui") || fw.includes("uikit")) {
|
|
405
|
+
return { buildCommand: "xcodebuild -scheme App build", testCommand: "xcodebuild -scheme App test", testCommandFiltered: "xcodebuild -only-testing:App/<TestName> test", typecheckCommand: "swift build", lintCommand: "swiftlint", prCommand: "swift build && xcodebuild -scheme App test" };
|
|
254
406
|
}
|
|
255
407
|
if (lang.includes("swift")) {
|
|
256
|
-
return { buildCommand: "swift build", testCommand: "swift test", typecheckCommand: "", lintCommand: "swiftlint", prCommand: "swift test" };
|
|
408
|
+
return { buildCommand: "swift build", testCommand: "swift test", testCommandFiltered: 'swift test --filter "TestName"', typecheckCommand: "", lintCommand: "swiftlint", prCommand: "swift test" };
|
|
257
409
|
}
|
|
258
410
|
if (lang.includes("kotlin")) {
|
|
259
|
-
return { buildCommand: "./gradlew build", testCommand: "./gradlew test", typecheckCommand: "", lintCommand: "./gradlew ktlintCheck", prCommand: "./gradlew test" };
|
|
411
|
+
return { buildCommand: "./gradlew build", testCommand: "./gradlew test", testCommandFiltered: './gradlew test --tests "*.TestName"', typecheckCommand: "", lintCommand: "./gradlew ktlintCheck", prCommand: "./gradlew test" };
|
|
260
412
|
}
|
|
261
413
|
if (lang.includes("php")) {
|
|
262
|
-
return { buildCommand: "composer install", testCommand: "phpunit", typecheckCommand: "", lintCommand: "phpcs", prCommand: "phpunit" };
|
|
414
|
+
return { buildCommand: "composer install", testCommand: "phpunit", testCommandFiltered: "phpunit --filter testName", typecheckCommand: "", lintCommand: "phpcs", prCommand: "phpunit" };
|
|
263
415
|
}
|
|
264
|
-
return { buildCommand: "npm run build", testCommand: "npm run test", typecheckCommand: "", lintCommand: "npm run lint", prCommand: "npm run lint && npm run test" };
|
|
416
|
+
return { buildCommand: "npm run build", testCommand: "npm run test", testCommandFiltered: "npm run test", typecheckCommand: "", lintCommand: "npm run lint", prCommand: "npm run lint && npm run test" };
|
|
265
417
|
}
|
|
266
418
|
/** Suggest frameworks based on selected languages */
|
|
267
419
|
function getFrameworkPreselect(languages) {
|
|
@@ -275,6 +427,12 @@ function getFrameworkPreselect(languages) {
|
|
|
275
427
|
preselect.push("Bubbletea");
|
|
276
428
|
if (langSet.has("ruby"))
|
|
277
429
|
preselect.push("Rails");
|
|
430
|
+
if (langSet.has("swift"))
|
|
431
|
+
preselect.push("SwiftUI");
|
|
432
|
+
if (langSet.has("kotlin"))
|
|
433
|
+
preselect.push("Jetpack Compose");
|
|
434
|
+
if (langSet.has("dart"))
|
|
435
|
+
preselect.push("Flutter");
|
|
278
436
|
return preselect;
|
|
279
437
|
}
|
|
280
438
|
// ─── Component ───────────────────────────────────────────────────────────────
|
|
@@ -285,7 +443,7 @@ export default function StackStyle({ onComplete }) {
|
|
|
285
443
|
const [selectedFrameworks, setSelectedFrameworks] = useState([]);
|
|
286
444
|
// ── QuickStart ──
|
|
287
445
|
if (mode === "quickstart") {
|
|
288
|
-
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Select a preset:" }) }), _jsx(GutteredSelect, { options: QUICKSTART_OPTIONS, onChange: (val) => {
|
|
446
|
+
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Select a preset:" }) }), _jsx(GutteredSelect, { options: QUICKSTART_OPTIONS, maxVisible: 10, onChange: (val) => {
|
|
289
447
|
if (val === "advanced") {
|
|
290
448
|
setMode("advanced");
|
|
291
449
|
return;
|
|
@@ -297,19 +455,19 @@ export default function StackStyle({ onComplete }) {
|
|
|
297
455
|
}
|
|
298
456
|
// ── Advanced ──
|
|
299
457
|
if (advancedStep === "language") {
|
|
300
|
-
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Mode: " }), _jsx(Text, { color: C.inputed, children: "manual configuration" })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Programming languages:" }) }), _jsx(GutteredMultiSelect, { options: LANGUAGE_OPTIONS, allowCustom: true, customPlaceholder: "e.g. Elixir, Zig, C++", onSubmit: (values) => {
|
|
458
|
+
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Mode: " }), _jsx(Text, { color: C.inputed, children: "manual configuration" })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Programming languages:" }) }), _jsx(GutteredMultiSelect, { options: LANGUAGE_OPTIONS, allowCustom: true, customPlaceholder: "e.g. Elixir, Zig, C++", maxVisible: 10, onSubmit: (values) => {
|
|
301
459
|
setSelectedLanguages(values);
|
|
302
460
|
setAdvancedStep("framework");
|
|
303
461
|
} })] }));
|
|
304
462
|
}
|
|
305
463
|
if (advancedStep === "framework") {
|
|
306
|
-
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Languages: " }), _jsx(Text, { color: C.inputed, children: selectedLanguages.join(", ") })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Frameworks:" }) }), _jsx(GutteredMultiSelect, { options: FRAMEWORK_OPTIONS, initialSelected: getFrameworkPreselect(selectedLanguages), allowCustom: true, customPlaceholder: "e.g. Hono, Remix, Astro", onSubmit: (values) => {
|
|
464
|
+
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Languages: " }), _jsx(Text, { color: C.inputed, children: selectedLanguages.join(", ") })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Frameworks:" }) }), _jsx(GutteredMultiSelect, { options: FRAMEWORK_OPTIONS, initialSelected: getFrameworkPreselect(selectedLanguages), allowCustom: true, customPlaceholder: "e.g. Hono, Remix, Astro", maxVisible: 10, onSubmit: (values) => {
|
|
307
465
|
setSelectedFrameworks(values);
|
|
308
466
|
setAdvancedStep("codeStyle");
|
|
309
467
|
} })] }));
|
|
310
468
|
}
|
|
311
469
|
// codeStyle step
|
|
312
|
-
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Languages: " }), _jsx(Text, { color: C.inputed, children: selectedLanguages.join(", ") })] }) }), _jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Frameworks: " }), _jsx(Text, { color: C.inputed, children: selectedFrameworks.join(", ") })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Code style conventions:" }) }), _jsx(GutteredMultiSelect, { options: CODE_STYLE_OPTIONS, allowCustom: true, customPlaceholder: "e.g. tabs over spaces, max 80 chars", onSubmit: (values) => {
|
|
470
|
+
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Languages: " }), _jsx(Text, { color: C.inputed, children: selectedLanguages.join(", ") })] }) }), _jsx(GutterLine, { children: _jsxs(Text, { children: [_jsx(Text, { color: C.label, children: "Frameworks: " }), _jsx(Text, { color: C.inputed, children: selectedFrameworks.join(", ") })] }) }), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Code style conventions:" }) }), _jsx(GutteredMultiSelect, { options: CODE_STYLE_OPTIONS, allowCustom: true, customPlaceholder: "e.g. tabs over spaces, max 80 chars", maxVisible: 10, onSubmit: (values) => {
|
|
313
471
|
const language = selectedLanguages.join(", ");
|
|
314
472
|
const framework = selectedFrameworks.join(", ");
|
|
315
473
|
onComplete({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-style.js","sourceRoot":"","sources":["../../src/steps/stack-style.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stack-style.js","sourceRoot":"","sources":["../../src/steps/stack-style.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/AGENTS.md.hbs
CHANGED
|
@@ -7,11 +7,11 @@ This file provides tool-agnostic instructions for AI coding agents working on th
|
|
|
7
7
|
## Build & Test
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
{{buildCommand}} # Build
|
|
11
|
-
{{typecheckCommand}} # Typecheck
|
|
12
|
-
{{testCommand}} # Run tests
|
|
13
|
-
{{lintCommand}} # Lint
|
|
14
|
-
{{prCommand}} # Pre-PR checks
|
|
10
|
+
{{{buildCommand}}} # Build
|
|
11
|
+
{{{typecheckCommand}}} # Typecheck
|
|
12
|
+
{{{testCommand}}} # Run tests
|
|
13
|
+
{{{lintCommand}}} # Lint
|
|
14
|
+
{{{prCommand}}} # Pre-PR checks
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
Run typecheck before build. Run all checks before submitting a PR.
|
|
@@ -62,16 +62,23 @@ When a user reports a bug:
|
|
|
62
62
|
|
|
63
63
|
## Understanding, Planning & Approval
|
|
64
64
|
|
|
65
|
-
-
|
|
66
|
-
-
|
|
65
|
+
- Confirm understanding and present the approach in Vietnamese before implementing
|
|
66
|
+
- Code, identifiers, comments, commit messages, and committed docs stay in English
|
|
67
67
|
- Always wait for the user's approval on the understanding and the approach
|
|
68
68
|
- Make a task after being approved
|
|
69
69
|
|
|
70
|
+
## Documentation Sync
|
|
71
|
+
|
|
72
|
+
- After EVERY implementation: update CLAUDE.md, README.md, and product artifacts (docs/PRD.md, docs/USER-STORIES.md) to reflect the current state
|
|
73
|
+
- **AGENTS.md must always stay in sync with CLAUDE.md** — CLAUDE.md is the source of truth. After any change to CLAUDE.md, propagate relevant updates to AGENTS.md immediately
|
|
74
|
+
- Architecture descriptions, step counts, component lists, and behavioral descriptions must match the actual code
|
|
75
|
+
- Never leave docs describing removed features, old step numbers, or stale behavior
|
|
76
|
+
|
|
70
77
|
## Testing
|
|
71
78
|
|
|
72
|
-
1. Run `{{typecheckCommand}}` — must pass with no errors
|
|
73
|
-
2. Run `{{testCommand}}` — all tests must pass
|
|
74
|
-
3. Run `{{lintCommand}}` — no lint violations
|
|
79
|
+
1. Run `{{{typecheckCommand}}}` — must pass with no errors
|
|
80
|
+
2. Run `{{{testCommand}}}` — all tests must pass
|
|
81
|
+
3. Run `{{{lintCommand}}}` — no lint violations
|
|
75
82
|
|
|
76
83
|
When adding new functionality, add corresponding tests. When fixing a bug, add a regression test.
|
|
77
84
|
|
|
@@ -80,7 +87,7 @@ When adding new functionality, add corresponding tests. When fixing a bug, add a
|
|
|
80
87
|
- Keep commits focused — one logical change per commit
|
|
81
88
|
- Write descriptive commit messages explaining **why**, not just what
|
|
82
89
|
- After any implementation change, verify that documentation (README.md, docs/PRD.md, docs/USER-STORIES.md) still reflects the current state
|
|
83
|
-
- Run `{{prCommand}}` before opening a PR
|
|
90
|
+
- Run `{{{prCommand}}}` before opening a PR
|
|
84
91
|
|
|
85
92
|
## Security
|
|
86
93
|
|
package/templates/CLAUDE.md.hbs
CHANGED
|
@@ -7,12 +7,13 @@ See docs/PRD.md for product requirements and docs/USER-STORIES.md for user stori
|
|
|
7
7
|
## Build & Test
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
{{buildCommand}} # Build
|
|
11
|
-
{{typecheckCommand}} # Typecheck (fast — run first)
|
|
12
|
-
{{
|
|
13
|
-
{{testCommand}} # Test (full suite)
|
|
14
|
-
{{
|
|
15
|
-
{{
|
|
10
|
+
{{{buildCommand}}} # Build
|
|
11
|
+
{{{typecheckCommand}}} # Typecheck (fast — run first)
|
|
12
|
+
{{{testCommandFiltered}}} # Test (specific)
|
|
13
|
+
{{{testCommand}}} # Test (full suite)
|
|
14
|
+
{{#if e2eTestCommand}}{{{e2eTestCommand}}} # E2E tests
|
|
15
|
+
{{/if}}{{{lintCommand}}} # Lint
|
|
16
|
+
{{{prCommand}}} # Before creating a PR
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
## Documentation Lookup
|
|
@@ -30,6 +31,58 @@ See docs/PRD.md for product requirements and docs/USER-STORIES.md for user stori
|
|
|
30
31
|
|
|
31
32
|
{{{architecture}}}
|
|
32
33
|
|
|
34
|
+
{{#contains techStack "Supabase"}}
|
|
35
|
+
## Auth & RLS
|
|
36
|
+
|
|
37
|
+
This project uses Supabase. Key rules:
|
|
38
|
+
|
|
39
|
+
- **Defense in depth**: every gated mutation is checked at three layers — UI visibility, server-route helpers, and DB-level RLS policies. Never rely on a single layer.
|
|
40
|
+
- **RLS-first**: every new table needs an RLS policy in the same migration. `authenticated` SELECT and owner-scoped INSERT/UPDATE/DELETE are the default; widen explicitly.
|
|
41
|
+
- **Server vs client**: use `@supabase/ssr` for server components and route handlers; `@supabase/supabase-js` for client components. Never mix sessions across the boundary.
|
|
42
|
+
- **Mutations must be awaited**: `supabase.from(...).update(...).eq(...)` returns a lazy thenable — a bare statement is a silent no-op. Always `await` or `.then()`.
|
|
43
|
+
{{/contains}}
|
|
44
|
+
{{#contains techStack "Upstash"}}
|
|
45
|
+
## Rate-limiting
|
|
46
|
+
|
|
47
|
+
Rate limits are enforced via Upstash Redis (`@upstash/ratelimit`). When adding a new endpoint:
|
|
48
|
+
|
|
49
|
+
- Pick the right tier: public unauthenticated routes ≤ 10/min/IP, authenticated reads ≤ 600/min, mutations ≤ 120/min.
|
|
50
|
+
- Fail-open if Upstash env vars are absent — never block production traffic on a missing credential.
|
|
51
|
+
- Emit `security.rate_limited` audit events for tripped limits.
|
|
52
|
+
{{/contains}}
|
|
53
|
+
{{#contains techStack "MCP SDK"}}
|
|
54
|
+
## MCP Tools
|
|
55
|
+
|
|
56
|
+
This project exposes Model Context Protocol tools via `@modelcontextprotocol/sdk`. Conventions:
|
|
57
|
+
|
|
58
|
+
- Tool definitions live in `src/mcp/tools/` — one file per tool, default-exporting `{ name, description, inputSchema, handler }`.
|
|
59
|
+
- Server entry point in `src/mcp/server.ts` registers all tools and wires transport.
|
|
60
|
+
- Document each tool's `name`, args, and side effects in this section as you add them — agents discover tools by name only.
|
|
61
|
+
{{/contains}}
|
|
62
|
+
{{#contains techStack "Vercel"}}
|
|
63
|
+
## Deployment
|
|
64
|
+
|
|
65
|
+
Deployment runbook lives in [`deployment/`](./deployment/). Single source of truth for:
|
|
66
|
+
|
|
67
|
+
- Env-var matrix (`deployment/01-env-vars.md`)
|
|
68
|
+
- Vercel project settings & domains (`deployment/02-vercel-checklist.md`)
|
|
69
|
+
- Migration log
|
|
70
|
+
- Preflight script run before infra-affecting commits
|
|
71
|
+
|
|
72
|
+
Update `deployment/` **in the same commit** as any infrastructure change.
|
|
73
|
+
{{else}}{{#contains techStack "Fly.io"}}
|
|
74
|
+
## Deployment
|
|
75
|
+
|
|
76
|
+
Deployment runbook lives in [`deployment/`](./deployment/) — Fly.io app config (`fly.toml`), env-var matrix, release commands. Update `deployment/` in the same commit as any infra change.
|
|
77
|
+
{{else}}{{#contains techStack "Railway"}}
|
|
78
|
+
## Deployment
|
|
79
|
+
|
|
80
|
+
Deployment runbook lives in [`deployment/`](./deployment/) — Railway service config, env-var matrix, migration log. Update `deployment/` in the same commit as any infra change.
|
|
81
|
+
{{else}}{{#contains techStack "Cloudflare"}}
|
|
82
|
+
## Deployment
|
|
83
|
+
|
|
84
|
+
Deployment runbook lives in [`deployment/`](./deployment/) — Cloudflare Workers config (`wrangler.toml`), env-var matrix, secret bindings. Update `deployment/` in the same commit as any infra change.
|
|
85
|
+
{{/contains}}{{/contains}}{{/contains}}{{/contains}}
|
|
33
86
|
{{#if (eq framework "Ink")}}
|
|
34
87
|
## Ink TUI Development
|
|
35
88
|
|
|
@@ -88,14 +141,15 @@ All colors accessed through `C` from `src/lib/theme.ts`. **Never hardcode hex va
|
|
|
88
141
|
- A good plan lets you one-shot the implementation
|
|
89
142
|
|
|
90
143
|
### Understanding, Planning & Approval
|
|
91
|
-
-
|
|
92
|
-
-
|
|
144
|
+
- Confirm understanding and present the approach in Vietnamese before implementing
|
|
145
|
+
- Code, identifiers, comments, commit messages, and committed docs stay in English
|
|
93
146
|
- Always wait for the user's approval on the understanding and the approach
|
|
94
147
|
- Make a task after being approved
|
|
95
148
|
- Leverage team agents if possible
|
|
96
149
|
|
|
97
150
|
### Documentation Sync
|
|
98
151
|
- After EVERY implementation: update CLAUDE.md, README.md, and product artifacts (docs/PRD.md, docs/USER-STORIES.md) to reflect the current state
|
|
152
|
+
- **AGENTS.md must always stay in sync with CLAUDE.md** — CLAUDE.md is the source of truth. After any change to CLAUDE.md, propagate relevant updates to AGENTS.md immediately
|
|
99
153
|
- Architecture descriptions, step counts, component lists, and behavioral descriptions must match the actual code
|
|
100
154
|
- Never leave docs describing removed features, old step numbers, or stale behavior
|
|
101
155
|
|
|
@@ -176,6 +230,7 @@ When a user reports a bug:
|
|
|
176
230
|
2. **If valid** — append a new `CR-` entry to `CODE-REVIEW.md` following the code review logging procedure (Entry ID, Scope, Validation Matrix, Findings with `file:line` evidence and severity, Verification Notes).
|
|
177
231
|
3. **If not valid** — explain to the user why the reported behavior is expected or not reproducible.
|
|
178
232
|
|
|
233
|
+
{{#if hasReleaseScript}}
|
|
179
234
|
## Release
|
|
180
235
|
|
|
181
236
|
```bash
|
|
@@ -190,6 +245,7 @@ The release script (`~/bin/{{projectName}}-release`) will:
|
|
|
190
245
|
3. Bump version via `npm version`
|
|
191
246
|
4. Push branch + tags to origin
|
|
192
247
|
5. Publish to registry
|
|
248
|
+
{{/if}}
|
|
193
249
|
|
|
194
250
|
## Core Principles
|
|
195
251
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Deployment — {{projectName}}
|
|
2
|
+
|
|
3
|
+
Single source of truth for shipping {{projectName}} to **{{deployTarget}}**. After any infrastructure-affecting change, update the relevant file in this folder **in the same commit** as the code.
|
|
4
|
+
|
|
5
|
+
## Files in this folder
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|------|---------|
|
|
9
|
+
| `00-README.md` | This index — overview and update protocol |
|
|
10
|
+
| `01-env-vars.md` | Env-var matrix (name, scope, source, rotation) |
|
|
11
|
+
| `02-{{deployTarget}}-checklist.md` | Provider-specific deploy checklist |
|
|
12
|
+
| `05-migrations.md` | DB migration log (append-only) |
|
|
13
|
+
| `07-scripts/01-preflight.sh` | Local preflight: typecheck + lint + build + env audit |
|
|
14
|
+
|
|
15
|
+
## Update protocol
|
|
16
|
+
|
|
17
|
+
1. **Add or rename an env var** → update `01-env-vars.md`, `02-{{deployTarget}}-checklist.md`, and `.env.example` in the same commit.
|
|
18
|
+
2. **New migration** → append to `05-migrations.md`. Bump any generated DB types.
|
|
19
|
+
3. **New third-party integration** → add to `02-{{deployTarget}}-checklist.md` plus an integration-specific doc.
|
|
20
|
+
4. **Change preflight or release scripts** → the script file itself + reference here.
|
|
21
|
+
|
|
22
|
+
## Preflight
|
|
23
|
+
|
|
24
|
+
Run `bash deployment/07-scripts/01-preflight.sh` before pushing infra-touching commits. It exercises typecheck, lint, build, and the env audit. CI runs the same script — if it fails locally, it will fail in CI.
|
|
25
|
+
|
|
26
|
+
{{#contains techStack "Supabase"}}
|
|
27
|
+
## Supabase notes
|
|
28
|
+
|
|
29
|
+
- Migrations live in `supabase/migrations/` — apply with `supabase db push` against the linked project.
|
|
30
|
+
- Auth URL allowlist must be updated in the Supabase dashboard whenever a new domain is added.
|
|
31
|
+
- RLS policies are part of the migration file that creates the table — never enable RLS in a separate commit.
|
|
32
|
+
{{/contains}}
|
|
33
|
+
{{#contains techStack "Upstash"}}
|
|
34
|
+
## Upstash notes
|
|
35
|
+
|
|
36
|
+
- Rate-limit env vars: `UPSTASH_REDIS_REST_URL`, `UPSTASH_REDIS_REST_TOKEN`.
|
|
37
|
+
- Rate-limit code is fail-open: if env vars are absent, requests pass through. Audit the `01-env-vars.md` matrix to confirm presence in every environment.
|
|
38
|
+
{{/contains}}
|