theslopmachine 0.6.2 → 0.7.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/MANUAL.md +21 -6
- package/README.md +55 -7
- package/RELEASE.md +16 -1
- package/assets/agents/developer.md +41 -1
- package/assets/agents/slopmachine-claude.md +101 -60
- package/assets/agents/slopmachine.md +40 -17
- package/assets/claude/agents/developer.md +42 -5
- package/assets/skills/clarification-gate/SKILL.md +25 -5
- package/assets/skills/claude-worker-management/SKILL.md +290 -57
- package/assets/skills/developer-session-lifecycle/SKILL.md +83 -38
- package/assets/skills/development-guidance/SKILL.md +21 -1
- package/assets/skills/evaluation-triage/SKILL.md +34 -23
- package/assets/skills/final-evaluation-orchestration/SKILL.md +88 -50
- package/assets/skills/hardening-gate/SKILL.md +17 -3
- package/assets/skills/integrated-verification/SKILL.md +3 -3
- package/assets/skills/planning-gate/SKILL.md +32 -3
- package/assets/skills/planning-guidance/SKILL.md +72 -13
- package/assets/skills/retrospective-analysis/SKILL.md +2 -2
- package/assets/skills/scaffold-guidance/SKILL.md +129 -124
- package/assets/skills/submission-packaging/SKILL.md +33 -27
- package/assets/skills/verification-gates/SKILL.md +44 -14
- package/assets/slopmachine/backend-evaluation-prompt.md +1 -1
- package/assets/slopmachine/frontend-evaluation-prompt.md +5 -5
- package/assets/slopmachine/scaffold-playbooks/android-kotlin-compose.md +81 -0
- package/assets/slopmachine/scaffold-playbooks/android-kotlin-views.md +191 -0
- package/assets/slopmachine/scaffold-playbooks/android-native-java.md +203 -0
- package/assets/slopmachine/scaffold-playbooks/angular-default.md +181 -0
- package/assets/slopmachine/scaffold-playbooks/backend-baseline.md +142 -0
- package/assets/slopmachine/scaffold-playbooks/backend-family-matrix.md +80 -0
- package/assets/slopmachine/scaffold-playbooks/database-module-matrix.md +80 -0
- package/assets/slopmachine/scaffold-playbooks/django-default.md +166 -0
- package/assets/slopmachine/scaffold-playbooks/docker-baseline.md +189 -0
- package/assets/slopmachine/scaffold-playbooks/docker-shared-contract.md +334 -0
- package/assets/slopmachine/scaffold-playbooks/electron-vite-default.md +124 -0
- package/assets/slopmachine/scaffold-playbooks/expo-react-native-default.md +73 -0
- package/assets/slopmachine/scaffold-playbooks/fastapi-default.md +134 -0
- package/assets/slopmachine/scaffold-playbooks/frontend-baseline.md +160 -0
- package/assets/slopmachine/scaffold-playbooks/frontend-family-matrix.md +134 -0
- package/assets/slopmachine/scaffold-playbooks/generic-unknown-tech-guide.md +136 -0
- package/assets/slopmachine/scaffold-playbooks/go-chi-default.md +160 -0
- package/assets/slopmachine/scaffold-playbooks/ios-linux-portable.md +93 -0
- package/assets/slopmachine/scaffold-playbooks/ios-native-objective-c.md +151 -0
- package/assets/slopmachine/scaffold-playbooks/ios-native-swift.md +188 -0
- package/assets/slopmachine/scaffold-playbooks/laravel-default.md +216 -0
- package/assets/slopmachine/scaffold-playbooks/livewire-default.md +265 -0
- package/assets/slopmachine/scaffold-playbooks/overlay-module-matrix.md +130 -0
- package/assets/slopmachine/scaffold-playbooks/platform-family-matrix.md +79 -0
- package/assets/slopmachine/scaffold-playbooks/selection-matrix.md +72 -0
- package/assets/slopmachine/scaffold-playbooks/spring-boot-default.md +182 -0
- package/assets/slopmachine/scaffold-playbooks/tauri-default.md +80 -0
- package/assets/slopmachine/scaffold-playbooks/vue-vite-default.md +162 -0
- package/assets/slopmachine/scaffold-playbooks/web-default.md +96 -0
- package/assets/slopmachine/templates/AGENTS.md +41 -3
- package/assets/slopmachine/templates/CLAUDE.md +111 -0
- package/assets/slopmachine/test-coverage-prompt.md +561 -0
- package/assets/slopmachine/utils/claude_create_session.mjs +3 -2
- package/assets/slopmachine/utils/claude_live_channel.mjs +188 -0
- package/assets/slopmachine/utils/claude_live_common.mjs +411 -0
- package/assets/slopmachine/utils/claude_live_hook.py +47 -0
- package/assets/slopmachine/utils/claude_live_launch.mjs +187 -0
- package/assets/slopmachine/utils/claude_live_status.mjs +25 -0
- package/assets/slopmachine/utils/claude_live_stop.mjs +46 -0
- package/assets/slopmachine/utils/claude_live_turn.mjs +277 -0
- package/assets/slopmachine/utils/claude_resume_session.mjs +3 -2
- package/assets/slopmachine/utils/claude_wait_for_rate_limit_reset.mjs +23 -0
- package/assets/slopmachine/utils/claude_wait_for_rate_limit_reset.sh +5 -0
- package/assets/slopmachine/utils/claude_worker_common.mjs +361 -4
- package/assets/slopmachine/utils/cleanup_delivery_artifacts.py +4 -0
- package/assets/slopmachine/utils/export_ai_session.mjs +1 -1
- package/assets/slopmachine/utils/normalize_claude_session.py +153 -0
- package/assets/slopmachine/utils/package_claude_session.mjs +123 -0
- package/assets/slopmachine/utils/prepare_strict_audit_workspace.mjs +65 -0
- package/package.json +1 -1
- package/src/constants.js +42 -3
- package/src/init.js +173 -28
- package/src/install.js +156 -8
- package/src/send-data.js +56 -57
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Laravel Livewire Default Scaffold Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook when the prompt explicitly asks for a Laravel Livewire baseline and does not need product-specific feature work.
|
|
4
|
+
|
|
5
|
+
This playbook follows the shared Docker contract in:
|
|
6
|
+
|
|
7
|
+
- `/Users/yohannesakd/code/eaglepoint/demonstration/slopmachine-0.3/assets/slopmachine/scaffold-playbooks/docker-shared-contract.md`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Ship a concrete Laravel Livewire baseline that is:
|
|
12
|
+
|
|
13
|
+
- bootstrapped from the official Laravel path
|
|
14
|
+
- upgraded with a real Livewire package install
|
|
15
|
+
- Docker-first
|
|
16
|
+
- Tailwind-preferred without pretending a richer design system exists
|
|
17
|
+
- safe by default
|
|
18
|
+
- wired to a real database path without `.env`
|
|
19
|
+
- verified with real Livewire page/component tests inside containers
|
|
20
|
+
- limited to baseline infrastructure only
|
|
21
|
+
|
|
22
|
+
Verified lab:
|
|
23
|
+
|
|
24
|
+
- `/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline`
|
|
25
|
+
|
|
26
|
+
## Official bootstrap path
|
|
27
|
+
|
|
28
|
+
Use the official Composer create-project flow, then install Livewire in the created app:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
docker run --rm -u "$(id -u):$(id -g)" -v "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab:/workspace" -w /workspace composer:2.8 create-project --prefer-dist laravel/laravel="^12.0" livewire-baseline
|
|
32
|
+
|
|
33
|
+
docker run --rm -u "$(id -u):$(id -g)" -v "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline:/app" -w /app composer:2.8 require livewire/livewire
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Observed bootstrap result for the verified lab:
|
|
37
|
+
|
|
38
|
+
- `laravel/laravel v12.12.2`
|
|
39
|
+
- `laravel/framework v12.56.0`
|
|
40
|
+
- `livewire/livewire v4.2.4`
|
|
41
|
+
- `phpunit/phpunit v11.5.55`
|
|
42
|
+
|
|
43
|
+
## Safe pinned defaults
|
|
44
|
+
|
|
45
|
+
- Docker runtime image: `php:8.4-cli-bookworm`
|
|
46
|
+
- Node asset build image: `node:22-bookworm-slim`
|
|
47
|
+
- Composer image: `composer:2.8`
|
|
48
|
+
- Laravel skeleton: `laravel/laravel v12.12.2`
|
|
49
|
+
- lockfile-pinned Livewire package: `livewire/livewire v4.2.4`
|
|
50
|
+
- lockfile-pinned test runner: `phpunit/phpunit v11.5.55`
|
|
51
|
+
- database default: SQLite file in a Docker-managed volume
|
|
52
|
+
- frontend styling default: Tailwind via Vite build during image creation
|
|
53
|
+
|
|
54
|
+
The lockfiles are the real dependency pins. Keep them committed.
|
|
55
|
+
|
|
56
|
+
## No-`.env` rule
|
|
57
|
+
|
|
58
|
+
- do not commit `.env`
|
|
59
|
+
- do not require users to create `.env` before startup
|
|
60
|
+
- point Laravel at a committed empty environment stub instead of `.env`
|
|
61
|
+
- load runtime app/database values from a generated runtime config file in a Docker-managed volume
|
|
62
|
+
|
|
63
|
+
Verified lab pattern:
|
|
64
|
+
|
|
65
|
+
- `bootstrap/runtime-environment.stub` is the environment file Laravel loads
|
|
66
|
+
- `bootstrap/runtime-config.php` loads JSON from `APP_CONFIG_PATH`
|
|
67
|
+
- `scripts/bootstrap_runtime.sh` generates the JSON config and SQLite path
|
|
68
|
+
|
|
69
|
+
## Livewire baseline pattern
|
|
70
|
+
|
|
71
|
+
- use a full-page Livewire component as the baseline surface
|
|
72
|
+
- use `Route::livewire('/', App\Livewire\ShoppingListPage::class)` for the root page
|
|
73
|
+
- provide a real layout with `@vite`, `@livewireStyles`, and `@livewireScripts`
|
|
74
|
+
- keep the UI honest: Tailwind-styled baseline only, not a product-grade feature set
|
|
75
|
+
- back the component with one real persistence path so Livewire behavior and DB wiring are both proven
|
|
76
|
+
|
|
77
|
+
Verified lab surface:
|
|
78
|
+
|
|
79
|
+
- `GET /health`
|
|
80
|
+
- `GET /`
|
|
81
|
+
|
|
82
|
+
Verified lab component flow:
|
|
83
|
+
|
|
84
|
+
- add an item from the full-page Livewire form
|
|
85
|
+
- persist it into SQLite
|
|
86
|
+
- rerender the saved list
|
|
87
|
+
|
|
88
|
+
## Runtime contract
|
|
89
|
+
|
|
90
|
+
Required commands:
|
|
91
|
+
|
|
92
|
+
- `docker compose up --build`
|
|
93
|
+
- `./run_tests.sh`
|
|
94
|
+
|
|
95
|
+
Both commands are real in the verified lab.
|
|
96
|
+
|
|
97
|
+
## Docker / Compose pattern
|
|
98
|
+
|
|
99
|
+
- use `compose.yaml`
|
|
100
|
+
- one app service published to loopback only with a random host port
|
|
101
|
+
- one tester service behind a `test` profile
|
|
102
|
+
- named volume for runtime state
|
|
103
|
+
- healthcheck against `/health`
|
|
104
|
+
- same application image for runtime and tests
|
|
105
|
+
- multi-stage Dockerfile: Composer dependency stage, Node/Tailwind asset stage, PHP runtime stage
|
|
106
|
+
|
|
107
|
+
Verified lab details:
|
|
108
|
+
|
|
109
|
+
- detached verification host bind: `127.0.0.1:32800->8000`
|
|
110
|
+
- interactive verification host bind: `127.0.0.1:32801->8000`
|
|
111
|
+
|
|
112
|
+
## Tailwind stance
|
|
113
|
+
|
|
114
|
+
- Tailwind is preferred and used here
|
|
115
|
+
- build Tailwind assets ahead of runtime with Vite
|
|
116
|
+
- do not pretend there is a live Vite dev-server contract when the Docker baseline serves built assets from `public/build`
|
|
117
|
+
|
|
118
|
+
Verified lab files:
|
|
119
|
+
|
|
120
|
+
- `resources/css/app.css`
|
|
121
|
+
- `resources/views/layouts/app.blade.php`
|
|
122
|
+
- `resources/views/livewire/shopping-list-page.blade.php`
|
|
123
|
+
|
|
124
|
+
## Testing baseline
|
|
125
|
+
|
|
126
|
+
Minimum real Livewire/Laravel test floor:
|
|
127
|
+
|
|
128
|
+
- one unit test that proves runtime config defaults select SQLite without `.env`
|
|
129
|
+
- one feature test for health/database readiness
|
|
130
|
+
- one page-render test that proves the root Livewire page responds and includes Livewire markup
|
|
131
|
+
- one Livewire component test that mutates state, saves data, and proves persistence
|
|
132
|
+
- containerized `./run_tests.sh` that performs HTTP smoke checks plus `php artisan test`
|
|
133
|
+
|
|
134
|
+
Verified lab test files:
|
|
135
|
+
|
|
136
|
+
- `tests/Unit/RuntimeConfigTest.php`
|
|
137
|
+
- `tests/Feature/LivewireBaselineTest.php`
|
|
138
|
+
- `tests/Feature/ShoppingListPageTest.php`
|
|
139
|
+
|
|
140
|
+
Verified lab test result:
|
|
141
|
+
|
|
142
|
+
- `4 passed (13 assertions)`
|
|
143
|
+
|
|
144
|
+
## README requirements
|
|
145
|
+
|
|
146
|
+
The README must honestly state:
|
|
147
|
+
|
|
148
|
+
- this is a baseline, not a feature app
|
|
149
|
+
- exact stack and pins used
|
|
150
|
+
- exact runtime command: `docker compose up --build`
|
|
151
|
+
- exact broad test command: `./run_tests.sh`
|
|
152
|
+
- no `.env` requirement
|
|
153
|
+
- safe database/config pattern
|
|
154
|
+
- Tailwind/Vite build boundary
|
|
155
|
+
- what is intentionally excluded
|
|
156
|
+
- exact verification commands and observed results
|
|
157
|
+
|
|
158
|
+
## Commands actually run for the verified lab
|
|
159
|
+
|
|
160
|
+
All commands below were executed in `/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline` unless otherwise noted.
|
|
161
|
+
|
|
162
|
+
Bootstrap and dependency commands:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
docker run --rm -u "$(id -u):$(id -g)" -v "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab:/workspace" -w /workspace composer:2.8 create-project --prefer-dist laravel/laravel="^12.0" livewire-baseline
|
|
166
|
+
|
|
167
|
+
docker run --rm -u "$(id -u):$(id -g)" -v "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline:/app" -w /app composer:2.8 require livewire/livewire
|
|
168
|
+
|
|
169
|
+
docker run --rm -u "$(id -u):$(id -g)" -e npm_config_cache=/app/.npm-cache -v "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline:/app" -w /app node:22-bookworm-slim npm install
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Verification commands:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
docker compose config
|
|
176
|
+
|
|
177
|
+
docker compose up --build -d
|
|
178
|
+
|
|
179
|
+
docker compose ps
|
|
180
|
+
|
|
181
|
+
docker compose port app 8000
|
|
182
|
+
|
|
183
|
+
curl -fsS "http://127.0.0.1:32800/health"
|
|
184
|
+
|
|
185
|
+
python3 - <<'PY'
|
|
186
|
+
from urllib.request import urlopen
|
|
187
|
+
html = urlopen('http://127.0.0.1:32800/', timeout=10).read().decode()
|
|
188
|
+
print('title=', 'Livewire baseline' in html)
|
|
189
|
+
print('snapshot=', 'wire:snapshot' in html)
|
|
190
|
+
print('saved_items=', 'Saved items' in html)
|
|
191
|
+
PY
|
|
192
|
+
|
|
193
|
+
docker compose down --volumes --remove-orphans
|
|
194
|
+
|
|
195
|
+
./run_tests.sh
|
|
196
|
+
|
|
197
|
+
python3 - <<'PY'
|
|
198
|
+
import signal
|
|
199
|
+
import subprocess
|
|
200
|
+
import time
|
|
201
|
+
from urllib.request import urlopen
|
|
202
|
+
|
|
203
|
+
cwd = "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/livewire-baseline"
|
|
204
|
+
proc = subprocess.Popen(["docker", "compose", "up", "--build"], cwd=cwd)
|
|
205
|
+
last_error = None
|
|
206
|
+
try:
|
|
207
|
+
deadline = time.time() + 240
|
|
208
|
+
while time.time() < deadline:
|
|
209
|
+
try:
|
|
210
|
+
port_line = subprocess.check_output(["docker", "compose", "port", "app", "8000"], cwd=cwd, text=True).strip()
|
|
211
|
+
if not port_line:
|
|
212
|
+
raise RuntimeError("port not published yet")
|
|
213
|
+
port = port_line.rsplit(":", 1)[-1]
|
|
214
|
+
with urlopen(f"http://127.0.0.1:{port}/health", timeout=3) as response:
|
|
215
|
+
health_body = response.read().decode()
|
|
216
|
+
root_html = urlopen(f"http://127.0.0.1:{port}/", timeout=3).read().decode()
|
|
217
|
+
if 'Livewire baseline' in root_html and 'wire:snapshot' in root_html:
|
|
218
|
+
print(f"interactive docker compose up --build reached /health and / on port {port}")
|
|
219
|
+
print(health_body)
|
|
220
|
+
break
|
|
221
|
+
raise RuntimeError("root page missing Livewire markers")
|
|
222
|
+
except Exception as exc:
|
|
223
|
+
last_error = exc
|
|
224
|
+
time.sleep(2)
|
|
225
|
+
else:
|
|
226
|
+
raise RuntimeError(f"interactive compose never became ready: {last_error}")
|
|
227
|
+
finally:
|
|
228
|
+
proc.send_signal(signal.SIGINT)
|
|
229
|
+
try:
|
|
230
|
+
proc.wait(timeout=30)
|
|
231
|
+
except subprocess.TimeoutExpired:
|
|
232
|
+
proc.kill()
|
|
233
|
+
proc.wait(timeout=30)
|
|
234
|
+
subprocess.run(["docker", "compose", "down", "--volumes", "--remove-orphans"], cwd=cwd, check=True)
|
|
235
|
+
PY
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Observed results
|
|
239
|
+
|
|
240
|
+
- `docker compose config` resolved cleanly
|
|
241
|
+
- `docker compose up --build -d` started the app and `docker compose port app 8000` returned `127.0.0.1:32800`
|
|
242
|
+
- `docker compose ps` reported `Up ... (healthy)`
|
|
243
|
+
- `curl -fsS "http://127.0.0.1:32800/health"` returned `{"status":"ok","database":"ready"}`
|
|
244
|
+
- the root page marker script printed `title= True`, `snapshot= True`, and `saved_items= True`
|
|
245
|
+
- `./run_tests.sh` passed and ended with `4 passed (13 assertions)`
|
|
246
|
+
- the interactive `docker compose up --build` path reached both `/health` and `/` successfully and printed `interactive docker compose up --build reached /health and / on port 32801`
|
|
247
|
+
|
|
248
|
+
## Acceptance checklist
|
|
249
|
+
|
|
250
|
+
Baseline is acceptable when:
|
|
251
|
+
|
|
252
|
+
- official Laravel bootstrap path is used
|
|
253
|
+
- Livewire is installed for real and pinned by lockfile
|
|
254
|
+
- Tailwind is used honestly as the default styling layer
|
|
255
|
+
- runtime does not rely on `.env`
|
|
256
|
+
- database defaults are safe and real
|
|
257
|
+
- `docker compose up --build` works
|
|
258
|
+
- `./run_tests.sh` works
|
|
259
|
+
- minimal real Livewire page/component tests are present and passing
|
|
260
|
+
- README is honest about included versus excluded scope
|
|
261
|
+
- the lab stops at baseline infrastructure
|
|
262
|
+
|
|
263
|
+
## Experimental verification status
|
|
264
|
+
|
|
265
|
+
Yes. This playbook is based on an experimentally verified lab, not a hypothetical template.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Overlay / Module Matrix for Scaffold Composition
|
|
2
|
+
|
|
3
|
+
Use this after selecting the scaffold root playbook. The root establishes the primary runtime and honest baseline contract; overlays add predictable non-root capabilities that recur across many prompts.
|
|
4
|
+
|
|
5
|
+
## Core rule
|
|
6
|
+
|
|
7
|
+
- **scaffold root:** the minimum stack needed to boot, run, test, and explain the chosen platform honestly
|
|
8
|
+
- **overlay module:** a repeatable capability that is common enough to standardize but not universal enough to force into every root
|
|
9
|
+
- **later prompt-specific development:** product/domain behavior, provider-specific integrations, and feature depth that depends on the actual app brief
|
|
10
|
+
|
|
11
|
+
## Root vs overlay vs later work
|
|
12
|
+
|
|
13
|
+
| Concern | Put in scaffold root when | Put in overlay when | Defer to later prompt-specific work when |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| Runtime/framework | it defines how the app starts and is built | almost never | never |
|
|
16
|
+
| Minimal testing | one real test path is required for honesty | extra test layers are requested or predictably valuable | the test only exists for a future feature |
|
|
17
|
+
| Config/secrets | the app cannot start safely without it | advanced secret/auth/policy layers are needed | provider-specific secret rotation or cloud policy details are unknown |
|
|
18
|
+
| Logging/validation | tiny baseline wiring is obviously required by the stack | structured, reusable cross-cutting policy is needed | domain-specific rules and business validations are not known yet |
|
|
19
|
+
| UI system | only a tiny shell/layout needed to prove the frontend runs | reusable design system, theme, component primitives, or form layer are wanted | product-specific screens and workflows are not yet defined |
|
|
20
|
+
| Database | a minimal persistence path is required to prove the backend honestly | network DB, ORM, migrations, cache, or multi-service persistence is needed | schema-heavy product models are not yet known |
|
|
21
|
+
| Jobs/search/export/reporting | rarely | when the prompt already implies platform support for them | when reports, indexes, or jobs depend on product logic not yet defined |
|
|
22
|
+
|
|
23
|
+
## Overlay matrix
|
|
24
|
+
|
|
25
|
+
| Overlay family | Typical module contents | Apply to | Keep out of root by default because |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| Testing overlays | browser E2E harness, API integration test container, contract-test wiring, visual regression setup | frontend, backend, fullstack, mobile, desktop | roots only need one honest baseline test path; deeper test stacks are optional cost |
|
|
28
|
+
| Auth / security / config overlays | session/JWT wiring, user model stub, RBAC shell, CORS/CSRF/rate-limit policy, secret-file/config loader, secure cookie defaults | backend, fullstack, frontend shells with protected routes | many scaffolds do not need auth yet, and provider choice is often prompt-specific |
|
|
29
|
+
| Logging / validation overlays | structured logger, request IDs, error envelope, schema validation, input parsing, shared DTO/schema package | backend, fullstack, API-heavy frontend | baseline roots can survive with light defaults; standardized policy is reusable but not universal |
|
|
30
|
+
| UI system overlays | design tokens, theme switch, component primitives, layout shell, form helpers, icon setup, toast/notification shell | frontend, fullstack, desktop, some mobile | not every scaffold needs a reusable design system on day one |
|
|
31
|
+
| Database overlays | Postgres/MySQL service, ORM module, migrations tool, seed path, DB admin helper, cache/Redis sidecar when persistence model requires it | backend, fullstack | some roots only need a very small default persistence story; network DB choice should stay modular |
|
|
32
|
+
| Queue / job / scheduler overlays | worker service, queue broker, retry policy, cron/scheduler entrypoint, job health metrics | backend, fullstack | background processing is expensive to add and often unused in simple scaffolds |
|
|
33
|
+
| Search / export / reporting overlays | search engine service stub, export pipeline shell, report generation worker, storage/export directory contract | backend, fullstack, admin-heavy frontend/fullstack | these usually depend on real domain models, so only scaffold them when the prompt already signals the need |
|
|
34
|
+
|
|
35
|
+
## Reusable overlay guidance by category
|
|
36
|
+
|
|
37
|
+
### Testing overlays
|
|
38
|
+
|
|
39
|
+
- keep **one real baseline test path in the root**
|
|
40
|
+
- add overlays for:
|
|
41
|
+
- browser E2E
|
|
42
|
+
- API integration/container tests
|
|
43
|
+
- contract testing
|
|
44
|
+
- visual regression or snapshot systems
|
|
45
|
+
- do **not** pre-add heavyweight E2E browsers to every root
|
|
46
|
+
|
|
47
|
+
### Auth / security / config overlays
|
|
48
|
+
|
|
49
|
+
- keep **safe config loading and no-secret defaults in the root**
|
|
50
|
+
- use overlays for:
|
|
51
|
+
- local auth stub or session/JWT baseline
|
|
52
|
+
- RBAC/permission shell
|
|
53
|
+
- hardened API security middleware
|
|
54
|
+
- provider-ready secret/config abstraction
|
|
55
|
+
- defer:
|
|
56
|
+
- OAuth provider specifics
|
|
57
|
+
- enterprise SSO details
|
|
58
|
+
- tenant-specific policy logic
|
|
59
|
+
|
|
60
|
+
### Logging / validation overlays
|
|
61
|
+
|
|
62
|
+
- root may include very light logging/validation when the framework already exposes it naturally
|
|
63
|
+
- overlay should standardize:
|
|
64
|
+
- structured logs
|
|
65
|
+
- correlation/request IDs
|
|
66
|
+
- shared validation schemas
|
|
67
|
+
- normalized error responses
|
|
68
|
+
- defer domain validation rules that depend on real business entities
|
|
69
|
+
|
|
70
|
+
### UI system overlays
|
|
71
|
+
|
|
72
|
+
- root should only prove the frontend can render and be tested
|
|
73
|
+
- overlay is the right place for:
|
|
74
|
+
- theme tokens
|
|
75
|
+
- reusable components
|
|
76
|
+
- navigation shell
|
|
77
|
+
- form system
|
|
78
|
+
- notification primitives
|
|
79
|
+
- defer product screens, dashboards, and specialized flows
|
|
80
|
+
|
|
81
|
+
### Database overlays
|
|
82
|
+
|
|
83
|
+
- **yes, database modules belong in this matrix** when they are a reusable composition choice beyond the minimal root persistence story
|
|
84
|
+
- keep in root:
|
|
85
|
+
- only the smallest honest persistence needed for the selected backend/fullstack scaffold
|
|
86
|
+
- use overlay for:
|
|
87
|
+
- network DB service selection
|
|
88
|
+
- ORM/migrations package
|
|
89
|
+
- seed/reset helpers
|
|
90
|
+
- caching sidecars closely tied to persistence shape
|
|
91
|
+
- defer schema-rich domain modeling and app-specific query logic
|
|
92
|
+
|
|
93
|
+
### Queue / job / scheduler overlays
|
|
94
|
+
|
|
95
|
+
- add only when the prompt already implies async work, scheduled work, ingestion, notifications, or heavy exports
|
|
96
|
+
- overlay should own:
|
|
97
|
+
- separate worker runtime
|
|
98
|
+
- queue/broker service
|
|
99
|
+
- retry/dead-letter defaults
|
|
100
|
+
- scheduler entrypoint
|
|
101
|
+
- defer actual business jobs until features are defined
|
|
102
|
+
|
|
103
|
+
### Search / export / reporting overlays
|
|
104
|
+
|
|
105
|
+
- include at scaffold time only when these are clearly part of the platform ask, such as admin/reporting systems, catalog/search products, or export-heavy back offices
|
|
106
|
+
- overlay may establish:
|
|
107
|
+
- search service wiring
|
|
108
|
+
- export job shell
|
|
109
|
+
- report generation/storage contracts
|
|
110
|
+
- defer report definitions, search ranking rules, and domain-specific exports
|
|
111
|
+
|
|
112
|
+
## Composition examples
|
|
113
|
+
|
|
114
|
+
| Composition | When it fits | Notes |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| frontend root + UI system overlay + testing overlay | product asks for a polished web UI but feature scope is still open | keep domain pages out; ship reusable shell and stronger frontend verification |
|
|
117
|
+
| backend root + database overlay + logging/validation overlay | API scaffold needs production-shaped persistence and cross-cutting API quality | root proves API baseline; overlays add Postgres/ORM/migrations plus structured request handling |
|
|
118
|
+
| frontend root + backend root + database overlay + auth overlay | fullstack app with real accounts and persistent data | roots define separate runtime surfaces; overlays add shared auth and stronger persistence |
|
|
119
|
+
| frontend root + backend root + database overlay + queue overlay + reporting overlay | admin/back-office or workflow app with async exports/reports | only do this when the prompt already signals jobs/reports early |
|
|
120
|
+
| mobile/desktop root + backend root + auth overlay + logging/validation overlay | client app depends on API-backed identity and reusable service policy | keep platform runtime separate; centralize auth/API policy in overlays |
|
|
121
|
+
|
|
122
|
+
## Decision shortcuts
|
|
123
|
+
|
|
124
|
+
- if the item is required for **every** app of that root family to start honestly, keep it in the root
|
|
125
|
+
- if the item is **common but optional** across many apps, make it an overlay
|
|
126
|
+
- if the item depends on domain nouns, product workflows, or provider selection not yet in evidence, defer it to later development
|
|
127
|
+
|
|
128
|
+
## Practical stop rule
|
|
129
|
+
|
|
130
|
+
After root selection, layer only the overlays already justified by the prompt or clearly implied platform category. Stop before product-specific implementation begins.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Platform Family Scaffold Matrix
|
|
2
|
+
|
|
3
|
+
Use this matrix to choose a real scaffold family for Android, iOS, and desktop requests.
|
|
4
|
+
Do **not** collapse these into one generic `mobile` or `desktop` bucket: the bootstrap path, Linux-proof boundary, and wrapper-script meaning differ too much across families.
|
|
5
|
+
|
|
6
|
+
## Family selection rule
|
|
7
|
+
|
|
8
|
+
1. follow the prompt and existing repo first
|
|
9
|
+
2. choose a concrete family, not a generic platform bucket
|
|
10
|
+
3. apply that family's official/bootstrap path and proof boundary honestly
|
|
11
|
+
4. keep `docker compose up --build` and `./run_tests.sh` real for every family
|
|
12
|
+
5. treat `./run_app.sh` as an optional helper only
|
|
13
|
+
|
|
14
|
+
## Current defaults vs backlog
|
|
15
|
+
|
|
16
|
+
- **current default families**
|
|
17
|
+
- `android-java-views`
|
|
18
|
+
- `ios-expo-react-native`
|
|
19
|
+
- `desktop-electron-vite`
|
|
20
|
+
- **current opt-in families when the prompt or repo clearly requires them**
|
|
21
|
+
- `android-kotlin-views`
|
|
22
|
+
- `ios-native-swift` → see [`ios-native-swift.md`](./ios-native-swift.md)
|
|
23
|
+
- **current non-default families with a concrete playbook**
|
|
24
|
+
- `android-kotlin-compose` → see [`android-kotlin-compose.md`](./android-kotlin-compose.md)
|
|
25
|
+
- `ios-native-objective-c` → see [`ios-native-objective-c.md`](./ios-native-objective-c.md)
|
|
26
|
+
- **future / non-default backlog families**
|
|
27
|
+
- none
|
|
28
|
+
|
|
29
|
+
## Android families
|
|
30
|
+
|
|
31
|
+
| Family | Use when | Official/bootstrap/init path | Safe default versions/config direction | What `docker compose up --build` means | What `./run_tests.sh` means | `./run_app.sh` helpful? | Honest Linux proof | Status |
|
|
32
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
33
|
+
| `android-java-views` | prompt says native Android and does not require Kotlin or Compose | official Android Studio phone/tablet **Empty Views Activity** in **Java**; for automation, commit the equivalent Gradle/AGP skeleton rather than pretending there is a stable non-interactive official CLI | AGP `8.5.x`, Gradle `8.7`, Java `17`, `compileSdk = 34`, `targetSdk = 34`, `minSdk = 29`, XML Views | containerized Gradle build path that at least lints and assembles a debug APK or equivalent artifact; no emulator claims | containerized lint + assemble + JVM/Robolectric tests + schema verification when Room exists | **yes**; useful to normalize `JAVA_HOME` / `ANDROID_HOME`, build a debug APK, and optionally install via `adb` when available | a real APK/debug artifact is produced and JVM tests pass on Linux; no device/emulator proof claimed | **current default, experimentally verified** |
|
|
34
|
+
| `android-kotlin-views` | prompt or repo explicitly requires Kotlin but not Compose | official Android Studio **Empty Views Activity** in **Kotlin** | same Android baseline as Java Views, but pin one AGP-compatible Kotlin plugin version and keep XML Views unless prompt says otherwise | same containerized assemble/lint artifact path as Java Views | same broad path as Java Views, but using Kotlin sources | **yes**; same value as Java family | Kotlin Android app assembles on Linux and passes JVM/Robolectric proof without pretending emulator coverage | **current opt-in** |
|
|
35
|
+
| `android-kotlin-compose` | prompt explicitly requires Compose or existing repo already uses Compose | official Android Studio **Empty Activity** / Compose-first app template in **Kotlin** | keep AGP `8.5.x`, Gradle `8.7`, Java `17`, SDK levels aligned with other Android families; pin one AGP-compatible Kotlin version and one tested stable Compose BOM; keep Material 3 defaults | containerized Compose-capable build path that assembles the app and emits the artifact; do not pretend `docker compose` proves interactive device UX | lint + assemble + JVM/unit coverage that is honest on Linux; only include instrumentation/device checks when a real device/emulator path exists outside the portable baseline | **yes**; useful for local build/install convenience | Compose code now assembles on Linux, `docker compose up --build` reaches artifact-serving healthy state, and containerized lint/JVM tests pass; still no emulator/device proof | **current opt-in, experimentally verified** |
|
|
36
|
+
|
|
37
|
+
## iOS families
|
|
38
|
+
|
|
39
|
+
| Family | Use when | Official/bootstrap/init path | Safe default versions/config direction | What `docker compose up --build` means | What `./run_tests.sh` means | `./run_app.sh` helpful? | Honest Linux proof | Status |
|
|
40
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
41
|
+
| `ios-expo-react-native` | work is iOS-targeted but running from Linux, and the prompt does not require a native-only iOS codebase | `npx create-expo-app@latest <app> --template blank-typescript` | Expo-managed workflow, TypeScript, current stable Expo SDK, Jest, React Native Testing Library; keep native modules minimal until a real native requirement exists | containerized Expo-oriented baseline such as dependency install plus Expo dev-server startup and/or `expo export --platform ios`; this proves shared RN wiring, not native iOS runtime | `tsc --noEmit`, `jest --runInBand`, and `expo export --platform ios` or equivalent portable iOS build-shape checks | **yes**; useful to wrap `npx expo start` and print the closest device-adjacent flow | shared JS/TS code, tests, and iOS-targeted Expo export pass on Linux; no Xcode, CocoaPods, simulator, signing, or archive proof claimed | **current default on Linux** |
|
|
42
|
+
| `ios-native-swift` | prompt explicitly requires native Swift iOS or repo already is a native Swift iOS app | official Xcode **App** template in **Swift**; UIKit vs SwiftUI follows prompt/repo; detailed rules live in [`ios-native-swift.md`](./ios-native-swift.md) | treat Xcode/iOS SDK selection as a macOS checkpoint; on Linux, only portable SwiftPM/shared-module defaults may be pinned and tested honestly | on Linux, this means a real **partial-proof** container path: portable SwiftPM build/test when such modules exist, plus static repo-shape validation; it must **not** claim `.app`, simulator, or archive proof | portable Swift package tests, build/lint when available, and static validation only; if there are no portable modules, the script must say native proof requires macOS/Xcode rather than faking success | **usually no** on Linux; only add it if it cleanly hands off to a documented macOS/Xcode flow | shared SwiftPM modules and static Xcode-shape validation are experimentally verified on Linux; the actual iOS app target remains unproven until a real macOS/Xcode checkpoint | **current opt-in, experimentally verified partial-proof** |
|
|
43
|
+
| `ios-native-objective-c` | prompt explicitly requires native Objective-C iOS or repo already is Objective-C | official Xcode **App** template in **Objective-C**; detailed Linux-boundary rules live in [`ios-native-objective-c.md`](./ios-native-objective-c.md) | same macOS/Xcode dependency as native Swift; do not invent a Linux-first default beyond portable shared modules if they exist | on Linux, this means a real verification/support container for static checks and any portable modules only; never pretend it builds or runs the native iOS app | static validation plus any portable shared-module tests only; if there are no portable modules, keep this as a real static gate rather than fake native success | **usually no** on Linux; only add it when it is an honest macOS/Xcode handoff helper | static Xcode-project validation is experimentally verified on Linux; native iOS app proof is still blocked on macOS/Xcode | **current explicit opt-in, experimentally verified partial-proof** |
|
|
44
|
+
|
|
45
|
+
### iOS honesty boundary
|
|
46
|
+
|
|
47
|
+
For native Swift and Objective-C families, Linux is a **partial-proof** environment only.
|
|
48
|
+
Honest proof on Linux does **not** include Xcode build success, CocoaPods integration quality, simulator behavior, signing, archives, or App Store readiness.
|
|
49
|
+
|
|
50
|
+
## Desktop families
|
|
51
|
+
|
|
52
|
+
| Family | Use when | Official/bootstrap/init path | Safe default versions/config direction | What `docker compose up --build` means | What `./run_tests.sh` means | `./run_app.sh` helpful? | Honest Linux proof | Status |
|
|
53
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
54
|
+
| `desktop-electron-vite` | prompt says desktop app and does not require another desktop shell | `npm create @quick-start/electron@latest <app> -- --template vanilla-ts`, then harden/pin the generated baseline | Electron + Vite + TypeScript, repo-tested pinned versions, `contextIsolation` on, no unnecessary `nodeIntegration`, explicit preload bridge, Linux packaging kept to `electron-builder --linux dir` at scaffold time | containerized build/package/smoke gate: install deps, build renderer/main, create unpacked Linux output, and run one headless smoke under Xvfb/Playwright or equivalent | unit/renderer/main tests plus the headless Electron smoke/build check | **yes**; useful for host-side launch convenience | an unpacked Linux Electron build launches a real window process headlessly and passes smoke/build checks | **current default, experimentally verified** |
|
|
55
|
+
| `desktop-tauri` | prompt explicitly requires Tauri, Rust footprint, or existing repo already uses Tauri | official Tauri bootstrap such as `npm create tauri-app@latest <app>` | Tauri `2.x`, Rust stable, TS frontend by default, Linux WebView/runtime dependencies documented explicitly; do not default to Tauri when prompt is open | containerized Rust + frontend build path that emits a Linux binary/bundle when dependencies permit; keep claims limited to what the container actually proves | `cargo test` plus frontend tests and static checks such as clippy/typecheck as appropriate | **yes** when host Rust/WebView deps are present | Linux now proves a Tauri build/bundle/startup baseline honestly through Docker, but this remains an explicit opt-in family rather than the generic default | **current non-default, experimentally verified** |
|
|
56
|
+
|
|
57
|
+
## Wrapper meaning by family
|
|
58
|
+
|
|
59
|
+
- `docker compose up --build`
|
|
60
|
+
- always means a **real** containerized baseline path
|
|
61
|
+
- for Android: build/lint/test/artifact proof without pretending emulator runtime
|
|
62
|
+
- for Expo iOS on Linux: shared-code/runtime-export proof without pretending Xcode proof
|
|
63
|
+
- for native iOS families: only partial Linux proof; for Swift, follow [`ios-native-swift.md`](./ios-native-swift.md) and do not choose it as a default; for Objective-C, follow [`ios-native-objective-c.md`](./ios-native-objective-c.md) and keep it explicit opt-in only
|
|
64
|
+
- for desktop: build/package/headless-smoke proof rather than pretending a container is the final end-user desktop runtime
|
|
65
|
+
- `./run_tests.sh`
|
|
66
|
+
- always means the broad portable verification path
|
|
67
|
+
- should be the command an owner can run on a clean Linux machine with Docker
|
|
68
|
+
- must never silently downgrade into `NO-SOURCE`, placeholder, or documentation-only success
|
|
69
|
+
- `./run_app.sh`
|
|
70
|
+
- useful for Android, Expo, Electron, and often Tauri
|
|
71
|
+
- usually **not** useful for native iOS-on-Linux families unless it is explicitly a macOS/Xcode handoff helper
|
|
72
|
+
- never replaces the Docker baseline contract
|
|
73
|
+
|
|
74
|
+
## Decision summary
|
|
75
|
+
|
|
76
|
+
- when the prompt says **Android**, split into `android-java-views`, `android-kotlin-views`, or `android-kotlin-compose` instead of one generic native-mobile bucket
|
|
77
|
+
- when the prompt says **iOS on Linux**, default to `ios-expo-react-native`; only choose native Swift or Objective-C families when the prompt explicitly requires them and the proof boundary is documented honestly; both native families now have experimentally verified partial-proof Linux baselines
|
|
78
|
+
- when the prompt says **desktop**, default to `desktop-electron-vite`; treat Tauri as explicit opt-in, and currently only partial-lab-state rather than fully verified
|
|
79
|
+
- if a family cannot produce honest Linux proof for the requested baseline, keep it out of the default path and label it backlog or exception-driven
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Scaffold Playbook Selection Matrix
|
|
2
|
+
|
|
3
|
+
Use this as owner-side reference when composing the scaffold request.
|
|
4
|
+
|
|
5
|
+
## Selection order
|
|
6
|
+
|
|
7
|
+
1. follow the original prompt and existing repo first
|
|
8
|
+
2. read `docker-shared-contract.md`
|
|
9
|
+
3. if the stack is not directly covered, read `generic-unknown-tech-guide.md`
|
|
10
|
+
4. choose the primary platform family using `platform-family-matrix.md`
|
|
11
|
+
5. choose the frontend family using `frontend-family-matrix.md` when a frontend surface exists
|
|
12
|
+
6. choose the backend family and database module using `backend-family-matrix.md` and `database-module-matrix.md` when a backend surface exists
|
|
13
|
+
7. choose the matching concrete scaffold playbook for the selected family default
|
|
14
|
+
8. add any scaffold-time overlays from `overlay-module-matrix.md`
|
|
15
|
+
9. choose the framework bootstrap path that best matches the prompt
|
|
16
|
+
10. restate the relevant directives in the developer prompt instead of passing external file paths
|
|
17
|
+
|
|
18
|
+
## Shared references
|
|
19
|
+
|
|
20
|
+
- shared Docker contract:
|
|
21
|
+
- `docker-shared-contract.md`
|
|
22
|
+
- generic fallback guide:
|
|
23
|
+
- `generic-unknown-tech-guide.md`
|
|
24
|
+
- family matrices:
|
|
25
|
+
- `frontend-family-matrix.md`
|
|
26
|
+
- `backend-family-matrix.md`
|
|
27
|
+
- `database-module-matrix.md`
|
|
28
|
+
- `platform-family-matrix.md`
|
|
29
|
+
- `overlay-module-matrix.md`
|
|
30
|
+
|
|
31
|
+
## Primary playbooks
|
|
32
|
+
|
|
33
|
+
- open-ended web product with no narrower family already selected:
|
|
34
|
+
- `web-default.md`
|
|
35
|
+
- for explicit frontend families, prefer `frontend-baseline.md`, `vue-vite-default.md`, or `angular-default.md` as appropriate
|
|
36
|
+
- for explicit backend families, prefer `backend-baseline.md`, `fastapi-default.md`, `spring-boot-default.md`, `django-default.md`, `laravel-default.md`, or `go-chi-default.md` as appropriate
|
|
37
|
+
- for explicit Laravel server-driven UI work, prefer `livewire-default.md`
|
|
38
|
+
- native Android request:
|
|
39
|
+
- `android-native-java.md` (current experimentally verified default)
|
|
40
|
+
- `android-kotlin-views.md` when the prompt explicitly requires Kotlin + Views
|
|
41
|
+
- `android-kotlin-compose.md` when the prompt explicitly requires Compose; now experimentally verified
|
|
42
|
+
- if the prompt explicitly requires Kotlin or Compose, keep the Android runtime/test contract but adapt the language/UI defaults accordingly
|
|
43
|
+
- cross-platform mobile request with no native-only requirement:
|
|
44
|
+
- `expo-react-native-default.md`
|
|
45
|
+
- desktop app request:
|
|
46
|
+
- `electron-vite-default.md` (current experimentally verified default)
|
|
47
|
+
- `tauri-default.md` only when the prompt explicitly requires Tauri; experimentally verified but still explicit opt-in only
|
|
48
|
+
- iOS-targeted work on Linux:
|
|
49
|
+
- `ios-linux-portable.md`
|
|
50
|
+
- if the prompt explicitly requires native Swift, use `ios-native-swift.md` (experimentally verified partial-proof baseline)
|
|
51
|
+
- if the prompt explicitly requires native Objective-C, use `ios-native-objective-c.md` (experimentally verified partial-proof baseline)
|
|
52
|
+
|
|
53
|
+
## Framework bootstrap guidance
|
|
54
|
+
|
|
55
|
+
- when the prompt explicitly names a framework with a strong official starter, use that framework's official or best-known bootstrap path and then apply the matching playbook contract
|
|
56
|
+
- examples:
|
|
57
|
+
- Next.js, Nuxt, Laravel, Rails, Django, Expo, Electron
|
|
58
|
+
- when the prompt names only a language or only a placeholder label, resolve that through the corresponding family matrix before picking a bootstrap command
|
|
59
|
+
- when the prompt leaves the framework open, use the safest package default for that platform family rather than inventing a custom starter
|
|
60
|
+
|
|
61
|
+
## Runtime contract reminders
|
|
62
|
+
|
|
63
|
+
- web always requires working `docker compose up --build`
|
|
64
|
+
- web always requires containerized `./run_tests.sh`
|
|
65
|
+
- Android, mobile, iOS, and desktop projects also require working `docker compose up --build` plus containerized `./run_tests.sh`
|
|
66
|
+
- for non-web app platforms, the Docker runtime command may start a meaningful build, artifact, preview, or support environment rather than pretending to be native runtime proof
|
|
67
|
+
- `./run_app.sh` may still exist for non-web local convenience, but it does not replace the Docker-based baseline contract
|
|
68
|
+
|
|
69
|
+
## Scaffold stop rule
|
|
70
|
+
|
|
71
|
+
Stop scaffold once the baseline stack, required technologies, runtime contract, wrapper scripts, minimal real tests, and honest README are in place.
|
|
72
|
+
Do not start prompt-specific feature implementation during scaffold unless the runtime baseline genuinely depends on it.
|