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,93 @@
|
|
|
1
|
+
# iOS On Linux Portable Scaffold Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook when the request is iOS-targeted but the workflow is executing on Linux or another non-Xcode host.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Create an honest baseline that:
|
|
8
|
+
|
|
9
|
+
- sets up the requested iOS-facing codebase or shared codebase correctly
|
|
10
|
+
- stays baseline-only, not feature-complete
|
|
11
|
+
- exposes one honest broad test command that works on Linux
|
|
12
|
+
- does not fake native iOS runtime or simulator proof
|
|
13
|
+
|
|
14
|
+
## Runtime contract
|
|
15
|
+
|
|
16
|
+
- required Docker command: `docker compose up --build`
|
|
17
|
+
- required broad test command: `./run_tests.sh`
|
|
18
|
+
- both commands must be real and working
|
|
19
|
+
- if a real host-side helper exists, `./run_app.sh` may also exist, but it does not replace the required Docker baseline
|
|
20
|
+
- do not claim native iOS runtime proof from Linux
|
|
21
|
+
|
|
22
|
+
## Baseline rule
|
|
23
|
+
|
|
24
|
+
- follow the requested stack first
|
|
25
|
+
- use safe defaults unless the prompt clearly asks for something else
|
|
26
|
+
- Expo-managed React Native is the default safe baseline when the goal is iOS-targeted work from Linux
|
|
27
|
+
- if the stack supports shared JS/TS or portable logic tests, wire those now
|
|
28
|
+
- if true native iOS runtime/build proof requires macOS/Xcode, state that clearly in `README.md` during scaffold
|
|
29
|
+
- never treat web preview, screenshots, or static bundle export as standalone native iOS proof
|
|
30
|
+
|
|
31
|
+
## Safe default iOS-on-Linux baseline
|
|
32
|
+
|
|
33
|
+
Prefer an Expo-managed TypeScript baseline that honestly proves the parts Linux can cover:
|
|
34
|
+
|
|
35
|
+
- shared React Native UI/state code
|
|
36
|
+
- containerized Jest and typecheck coverage
|
|
37
|
+
- `expo export --platform ios` or equivalent JS/assets export as build-shape proof
|
|
38
|
+
- Expo dev-server startup for manual device-adjacent checks when appropriate
|
|
39
|
+
|
|
40
|
+
Do **not** claim these prove:
|
|
41
|
+
|
|
42
|
+
- Xcode build success
|
|
43
|
+
- CocoaPods/native module integration quality on macOS
|
|
44
|
+
- iOS simulator behavior
|
|
45
|
+
- code signing, archive, or App Store readiness
|
|
46
|
+
|
|
47
|
+
## Minimal real test floor
|
|
48
|
+
|
|
49
|
+
At scaffold, include at least:
|
|
50
|
+
|
|
51
|
+
- one real portable test
|
|
52
|
+
- one real lint/typecheck/build-shape verification in `./run_tests.sh`
|
|
53
|
+
- one real Docker-backed runtime/build path behind `docker compose up --build`
|
|
54
|
+
- one honest statement of what cannot yet be proven on Linux
|
|
55
|
+
- no committed `.env`
|
|
56
|
+
|
|
57
|
+
Recommended Linux broad path for an Expo baseline:
|
|
58
|
+
|
|
59
|
+
- `tsc --noEmit`
|
|
60
|
+
- `jest --runInBand`
|
|
61
|
+
- `expo export --platform ios`
|
|
62
|
+
|
|
63
|
+
## README floor
|
|
64
|
+
|
|
65
|
+
`README.md` must already state:
|
|
66
|
+
|
|
67
|
+
- scaffold status versus implemented scope
|
|
68
|
+
- required Docker command: `docker compose up --build`
|
|
69
|
+
- broad test command: `./run_tests.sh`
|
|
70
|
+
- host-side helper command when one honestly exists
|
|
71
|
+
- whether `./run_app.sh` is the closest manual device-adjacent flow
|
|
72
|
+
- native iOS runtime/build proof is out of scope on Linux unless a separate macOS/Xcode checkpoint exists
|
|
73
|
+
- whether the scaffold proves Expo/shared-code behavior only versus native standalone app behavior
|
|
74
|
+
|
|
75
|
+
## Common pitfalls
|
|
76
|
+
|
|
77
|
+
- pretending Linux scaffold proves native iOS runtime quality
|
|
78
|
+
- hiding the macOS/Xcode dependency for native proof
|
|
79
|
+
- leaving `docker compose up --build` or `./run_tests.sh` empty because true native iOS runtime is unavailable
|
|
80
|
+
- relying on `.env` during scaffold when safe defaults work
|
|
81
|
+
- implying that Expo Go or a JS bundle export equals native binary proof
|
|
82
|
+
|
|
83
|
+
## Acceptance checklist
|
|
84
|
+
|
|
85
|
+
Scaffold is acceptable when:
|
|
86
|
+
|
|
87
|
+
- the portable baseline is real
|
|
88
|
+
- `docker compose up --build` works honestly
|
|
89
|
+
- `./run_tests.sh` works honestly on Linux
|
|
90
|
+
- `./run_app.sh` exists when it materially improves the closest honest local flow
|
|
91
|
+
- no `.env` file is required for the baseline
|
|
92
|
+
- proof limitations are documented clearly
|
|
93
|
+
- README is honest about the boundary
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# iOS Native Objective-C Scaffold Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook only when the prompt explicitly requires a native Objective-C iOS app or the existing repo is already Objective-C-first.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Create an honest baseline that:
|
|
8
|
+
|
|
9
|
+
- keeps Objective-C native iOS as the selected family
|
|
10
|
+
- uses the real Apple/Xcode bootstrap concept instead of an invented Linux-native starter
|
|
11
|
+
- preserves a real Linux verification contract without faking native iOS build or runtime proof
|
|
12
|
+
- proves the strongest Linux boundary with a committed Xcode-shaped project, shared scheme, and static verification report
|
|
13
|
+
- keeps the family explicit opt-in and non-default on Linux
|
|
14
|
+
|
|
15
|
+
## Family status
|
|
16
|
+
|
|
17
|
+
- this is a **non-default** family
|
|
18
|
+
- do **not** auto-select it for open-ended iOS work on Linux
|
|
19
|
+
- when the prompt is iOS-targeted on Linux without a native Objective-C requirement, prefer the Linux-portable Expo path instead
|
|
20
|
+
|
|
21
|
+
## Best bootstrap / init path
|
|
22
|
+
|
|
23
|
+
Conceptually, the right scaffold starts from the official Apple project shape:
|
|
24
|
+
|
|
25
|
+
1. bootstrap on **macOS with Xcode** using the iOS **App** template in **Objective-C**
|
|
26
|
+
2. keep the generated native app target, test target, shared scheme, plist, storyboard/resources, and Xcode project/workspace as the source of truth
|
|
27
|
+
3. commit that generated baseline, then add only the minimum repo-local wrappers and portable checks needed for Linux-side verification
|
|
28
|
+
4. on Linux, validate the committed Xcode surface; do **not** replace the Xcode bootstrap with a Linux-only generator and call it equivalent
|
|
29
|
+
|
|
30
|
+
Do **not**:
|
|
31
|
+
|
|
32
|
+
- invent a fake Linux-native Objective-C iOS bootstrap CLI
|
|
33
|
+
- treat GNUstep or generic clang Objective-C compilation as proof of an iOS app scaffold
|
|
34
|
+
- claim Linux can initialize, build, sign, or run the real iOS app target
|
|
35
|
+
|
|
36
|
+
If the repo contains shared portable code outside the app target, keep that code in a clearly separate portable module and test it honestly on Linux.
|
|
37
|
+
|
|
38
|
+
## Runtime contract
|
|
39
|
+
|
|
40
|
+
- required Docker command: `docker compose up --build`
|
|
41
|
+
- required broad test command: `./run_tests.sh`
|
|
42
|
+
- both commands must be real and working
|
|
43
|
+
- `./run_app.sh` is usually **not** useful on Linux for this family
|
|
44
|
+
- native iOS build/run proof still requires a separate macOS/Xcode checkpoint
|
|
45
|
+
- prefer a one-shot verification/report flow over a fake long-running "app" container
|
|
46
|
+
|
|
47
|
+
## What `docker compose up --build` should mean
|
|
48
|
+
|
|
49
|
+
For this family, `docker compose up --build` should mean:
|
|
50
|
+
|
|
51
|
+
- build and run a **Linux verification/support environment**, not a fake iOS runtime
|
|
52
|
+
- install pinned portable tools for static Xcode-project inspection (for example Ruby + `xcodeproj`)
|
|
53
|
+
- open the committed `.xcodeproj` and shared scheme and validate targets, product types, plist values, storyboard/resources, and Objective-C source presence
|
|
54
|
+
- write a stable host-visible verification report so the result is observable and repeatable
|
|
55
|
+
|
|
56
|
+
It must **not** mean:
|
|
57
|
+
|
|
58
|
+
- `xcodebuild` proof
|
|
59
|
+
- simulator or device runtime proof
|
|
60
|
+
- `.app`, `.ipa`, archive, signing, or App Store readiness proof
|
|
61
|
+
- CocoaPods integration proof on macOS
|
|
62
|
+
|
|
63
|
+
## What `./run_tests.sh` should mean
|
|
64
|
+
|
|
65
|
+
`./run_tests.sh` is the honest Linux broad verification wrapper for this family.
|
|
66
|
+
|
|
67
|
+
It should run the portable checks Linux can really prove, such as:
|
|
68
|
+
|
|
69
|
+
- any real tests for shared portable modules when they exist
|
|
70
|
+
- at least one real test of the Linux verifier itself (for example, a negative-path check that missing scheme/project wiring fails)
|
|
71
|
+
- static validation of the committed Xcode project shape, shared scheme, plist/config files, storyboard/resources, and script wiring
|
|
72
|
+
- consistency checks for dependency/config metadata that can be inspected without Xcode
|
|
73
|
+
|
|
74
|
+
If no portable shared modules exist, `./run_tests.sh` should still be a real static-validation gate and should state clearly that native Objective-C app build/runtime proof requires macOS/Xcode.
|
|
75
|
+
|
|
76
|
+
It must never silently imply native iOS build success.
|
|
77
|
+
|
|
78
|
+
## Is `./run_app.sh` useful?
|
|
79
|
+
|
|
80
|
+
Usually **no** on Linux.
|
|
81
|
+
|
|
82
|
+
Only add `./run_app.sh` when it is an honest handoff helper, for example:
|
|
83
|
+
|
|
84
|
+
- printing the exact macOS/Xcode next step
|
|
85
|
+
- opening or documenting the intended scheme/workspace handoff
|
|
86
|
+
- starting an adjacent non-iOS support surface that the repo genuinely needs
|
|
87
|
+
|
|
88
|
+
It must never pretend to launch the native iOS app from Linux.
|
|
89
|
+
|
|
90
|
+
In the strongest truthful baseline tested so far, omit `./run_app.sh` entirely because it adds no Linux proof.
|
|
91
|
+
|
|
92
|
+
## Honest Linux proof boundary
|
|
93
|
+
|
|
94
|
+
Linux can honestly prove only the portable boundary, such as:
|
|
95
|
+
|
|
96
|
+
- repo shape and scaffold completeness
|
|
97
|
+
- that a committed Xcode project and shared scheme can be parsed and inspected from Linux
|
|
98
|
+
- shared non-app module tests when those modules are truly portable
|
|
99
|
+
- static Xcode-project/config validation
|
|
100
|
+
- the reproducibility of the Linux verification container itself
|
|
101
|
+
|
|
102
|
+
Linux cannot honestly prove:
|
|
103
|
+
|
|
104
|
+
- native Objective-C app compilation against the iOS SDK
|
|
105
|
+
- simulator behavior
|
|
106
|
+
- on-device behavior
|
|
107
|
+
- code signing
|
|
108
|
+
- archive/export quality
|
|
109
|
+
- App Store readiness
|
|
110
|
+
|
|
111
|
+
## Minimal real test floor
|
|
112
|
+
|
|
113
|
+
At scaffold, include at least:
|
|
114
|
+
|
|
115
|
+
- one real static project/config validation step
|
|
116
|
+
- one real validation of the shared scheme / target wiring inside the committed Xcode project
|
|
117
|
+
- one real portable test when portable shared logic exists
|
|
118
|
+
- one real verifier test when no portable app logic exists yet
|
|
119
|
+
- one real `./run_tests.sh` path that fails on actual validation problems
|
|
120
|
+
- one honest README statement that macOS/Xcode is still required for native iOS proof
|
|
121
|
+
|
|
122
|
+
## README floor
|
|
123
|
+
|
|
124
|
+
`README.md` must already state:
|
|
125
|
+
|
|
126
|
+
- scaffold status versus implemented scope
|
|
127
|
+
- this is a native Objective-C iOS scaffold, not the default Linux iOS family
|
|
128
|
+
- required Docker command: `docker compose up --build`
|
|
129
|
+
- broad test command: `./run_tests.sh`
|
|
130
|
+
- whether `./run_app.sh` exists and why
|
|
131
|
+
- what artifact/report `docker compose up --build` produces or what observable success condition it reaches
|
|
132
|
+
- the exact Linux proof boundary versus the required macOS/Xcode checkpoint
|
|
133
|
+
|
|
134
|
+
## Common pitfalls
|
|
135
|
+
|
|
136
|
+
- pretending Linux can prove the native Objective-C iOS app target
|
|
137
|
+
- hand-rolling a non-Xcode starter and calling it equivalent to the official bootstrap path
|
|
138
|
+
- using static validation output wording that sounds like simulator or device proof
|
|
139
|
+
- adding `./run_app.sh` even though it adds no honest value
|
|
140
|
+
- leaving `./run_tests.sh` as a placeholder because Linux cannot run the app
|
|
141
|
+
|
|
142
|
+
## Acceptance checklist
|
|
143
|
+
|
|
144
|
+
Scaffold is acceptable when:
|
|
145
|
+
|
|
146
|
+
- the official/bootstrap concept is documented as Xcode-on-macOS
|
|
147
|
+
- `docker compose up --build` gives a real Linux verification/support environment
|
|
148
|
+
- `./run_tests.sh` gives a real portable verification gate
|
|
149
|
+
- `./run_app.sh` is absent unless it adds honest handoff value
|
|
150
|
+
- the Linux proof boundary is documented clearly
|
|
151
|
+
- the family remains explicit opt-in and non-default
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# Native iOS Swift Scaffold Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook only when the prompt explicitly requires a native Swift iOS app or the existing repo is already a native Swift iOS codebase.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Create an honest native iOS scaffold that:
|
|
8
|
+
|
|
9
|
+
- stays truly native Swift for the app target
|
|
10
|
+
- uses Linux only for the portable proof it can really provide
|
|
11
|
+
- does not fake Xcode, simulator, signing, or `.app` proof
|
|
12
|
+
- still gives the repo a real Docker baseline and a real broad test wrapper
|
|
13
|
+
|
|
14
|
+
## Runtime contract
|
|
15
|
+
|
|
16
|
+
- required Docker command: `docker compose up --build`
|
|
17
|
+
- required broad test command: `./run_tests.sh`
|
|
18
|
+
- both commands must be real and working
|
|
19
|
+
- `./run_app.sh` is usually **not** useful on Linux and should stay optional
|
|
20
|
+
- do not claim native iOS runtime proof from Linux
|
|
21
|
+
|
|
22
|
+
## Verified baseline notes
|
|
23
|
+
|
|
24
|
+
From a real Linux lab verification on 2026-04-15:
|
|
25
|
+
|
|
26
|
+
- the strongest honest baseline was a **partial-proof native Swift iOS scaffold**, not a fake native app build
|
|
27
|
+
- the verified Docker image used the official Swift Linux toolchain family (`swift:6.1-jammy`) only for the portable proof boundary
|
|
28
|
+
- `docker compose up --build -d --wait` reached a stable healthy state with one long-running verifier container and no published ports
|
|
29
|
+
- the healthy state was a passed proof report written to `artifacts/linux-proof-report.txt` plus `artifacts/linux-proof-report.json`
|
|
30
|
+
- the real Linux-verifiable work was: static validation of the checked-in Xcode project/scheme/package wiring plus `swift build` and `swift test` for a portable SwiftPM module
|
|
31
|
+
- the verified `./run_tests.sh` pattern was: start the Compose verifier, rerun `./container-verify.sh` via `docker compose exec`, then smoke-check the passed proof report
|
|
32
|
+
- `./run_app.sh` was only acceptable as a macOS/Xcode handoff helper that opens or points at the `.xcodeproj`; it must not imply Linux can launch the native app
|
|
33
|
+
- the experimentally verified proof boundary is still partial: Linux can prove portable Swift code + static native repo shape, but not `xcodebuild`, Simulator runtime, signing, or archive/export
|
|
34
|
+
|
|
35
|
+
## Official/bootstrap/init path
|
|
36
|
+
|
|
37
|
+
- use the official Xcode **App** template in **Swift** as the conceptual app bootstrap
|
|
38
|
+
- choose **SwiftUI App** when the prompt is open; keep **UIKit** only when the prompt or repo requires it
|
|
39
|
+
- treat Xcode version, iOS SDK selection, signing setup, simulator choice, and archive behavior as a **macOS/Xcode checkpoint**, not a Linux scaffold promise
|
|
40
|
+
- if scaffold automation is needed from Linux, create the repo shape and portable Swift package surfaces that match the chosen app structure; do **not** pretend there is a stable official Linux CLI for full native iOS app generation
|
|
41
|
+
- when shared logic belongs outside the app target, prefer a real Swift Package Manager module so Linux can prove something portable
|
|
42
|
+
|
|
43
|
+
## Safe default shape
|
|
44
|
+
|
|
45
|
+
Prefer this split when the prompt leaves room:
|
|
46
|
+
|
|
47
|
+
- native iOS app target owned by Xcode/macOS
|
|
48
|
+
- one or more portable SwiftPM modules for shared domain, model, formatting, validation, or networking logic
|
|
49
|
+
- tests for those SwiftPM modules that run on Linux with `swift test`
|
|
50
|
+
|
|
51
|
+
Concrete verified baseline shape:
|
|
52
|
+
|
|
53
|
+
- `Package.swift` at the repo root for the portable shared module
|
|
54
|
+
- `Sources/<ModuleName>/` and `Tests/<ModuleName>Tests/` for real Linux SwiftPM proof
|
|
55
|
+
- `App/` (or similarly clear app-source folder) containing SwiftUI entry files meant for Xcode
|
|
56
|
+
- `<AppName>.xcodeproj/project.pbxproj`
|
|
57
|
+
- `<AppName>.xcodeproj/project.xcworkspace/contents.xcworkspacedata`
|
|
58
|
+
- `<AppName>.xcodeproj/xcshareddata/xcschemes/<AppName>.xcscheme`
|
|
59
|
+
- a checked-in local Swift package reference from the Xcode project to the portable module when shared logic exists
|
|
60
|
+
|
|
61
|
+
If the repo has only an app target and no portable module yet, keep the documentation honest that Linux can validate repo shape only until a macOS/Xcode checkpoint happens.
|
|
62
|
+
|
|
63
|
+
## What `docker compose up --build` means
|
|
64
|
+
|
|
65
|
+
For this family on Linux, `docker compose up --build` must mean a **real partial-proof baseline**, not a fake iOS build.
|
|
66
|
+
|
|
67
|
+
Acceptable meaning:
|
|
68
|
+
|
|
69
|
+
1. build a pinned Swift Linux container for portable verification
|
|
70
|
+
2. run any portable `swift build` / `swift test` work for SwiftPM modules that actually exist
|
|
71
|
+
3. run static repo-shape validation for the native iOS surface, such as checking that the expected Xcode project/workspace files, schemes, manifest files, and portable module wiring exist
|
|
72
|
+
4. expose a small stable report/health surface if Compose needs a long-running healthy state after verification
|
|
73
|
+
|
|
74
|
+
Concrete verified pattern:
|
|
75
|
+
|
|
76
|
+
1. use one verifier service based on the official Swift Linux image family
|
|
77
|
+
2. bind-mount the workspace into the container
|
|
78
|
+
3. persist Swift build/cache directories with named volumes so reruns avoid unnecessary recompilation
|
|
79
|
+
4. run a single repo-local verification script that performs static Xcode-shape checks and `swift build` + `swift test`
|
|
80
|
+
5. write a repo-visible proof artifact under `artifacts/`
|
|
81
|
+
6. keep the container alive after success so Compose health reflects a verified baseline instead of an exited process
|
|
82
|
+
7. prefer zero published host ports unless a report/support surface truly benefits from one
|
|
83
|
+
|
|
84
|
+
Unacceptable meaning:
|
|
85
|
+
|
|
86
|
+
- claiming the container built an iOS `.app`
|
|
87
|
+
- claiming simulator success
|
|
88
|
+
- claiming CocoaPods integration quality on macOS
|
|
89
|
+
- claiming code-signing, archive, or App Store readiness
|
|
90
|
+
|
|
91
|
+
If no portable SwiftPM modules exist yet, the Docker path must still do honest static validation and report that native app build proof is blocked on macOS/Xcode.
|
|
92
|
+
|
|
93
|
+
## What `./run_tests.sh` means
|
|
94
|
+
|
|
95
|
+
`./run_tests.sh` is the broad portable verification wrapper for Linux.
|
|
96
|
+
|
|
97
|
+
It should cover the strongest honest Linux proof available, typically:
|
|
98
|
+
|
|
99
|
+
- `swift test` for portable SwiftPM modules when present
|
|
100
|
+
- `swift build` for portable modules when that adds useful build-shape proof
|
|
101
|
+
- lint or formatting checks when the repo already uses a real portable Swift tool for them
|
|
102
|
+
- static validation that the native iOS project shape and portable module references are present and coherent
|
|
103
|
+
|
|
104
|
+
Concrete verified execution pattern:
|
|
105
|
+
|
|
106
|
+
1. `docker compose up --build -d --wait`
|
|
107
|
+
2. reuse the same running verifier container with `docker compose exec`
|
|
108
|
+
3. rerun the repo-local verification script there
|
|
109
|
+
4. smoke-check the generated proof report under `artifacts/`
|
|
110
|
+
5. tear the stack down at the end of the wrapper script
|
|
111
|
+
|
|
112
|
+
If no portable testable module exists yet, `./run_tests.sh` must say so plainly and fail or partial-out honestly according to project policy; it must not silently pass by pretending the native app was tested.
|
|
113
|
+
|
|
114
|
+
## Is `./run_app.sh` useful?
|
|
115
|
+
|
|
116
|
+
Usually **no** on Linux.
|
|
117
|
+
|
|
118
|
+
Only add `./run_app.sh` when it clearly helps with a documented macOS/Xcode handoff, for example:
|
|
119
|
+
|
|
120
|
+
- detecting macOS and opening the Xcode project/workspace
|
|
121
|
+
- printing the exact simulator or scheme command a macOS user should run next
|
|
122
|
+
- routing to a documented local bootstrap step that still tells the truth about the proof boundary
|
|
123
|
+
|
|
124
|
+
The experimentally verified Swift baseline supports this pattern well:
|
|
125
|
+
|
|
126
|
+
- on Linux, print the proof boundary and the exact `.xcodeproj` handoff path
|
|
127
|
+
- on macOS, open the checked-in `.xcodeproj` with `xed` or `open`
|
|
128
|
+
|
|
129
|
+
Do not add `./run_app.sh` just to wrap a no-op or to imply Linux can run the app.
|
|
130
|
+
|
|
131
|
+
## Honest Linux proof boundary
|
|
132
|
+
|
|
133
|
+
Linux can honestly prove only these things for this family:
|
|
134
|
+
|
|
135
|
+
- portable SwiftPM modules compile
|
|
136
|
+
- portable SwiftPM tests pass
|
|
137
|
+
- the native iOS repo shape exists and matches the documented scaffold contract
|
|
138
|
+
- shared code packaging and references are wired coherently enough for a later macOS/Xcode checkpoint
|
|
139
|
+
|
|
140
|
+
Linux does **not** prove:
|
|
141
|
+
|
|
142
|
+
- Xcode build success
|
|
143
|
+
- SwiftUI/UIKit rendering in an iOS simulator
|
|
144
|
+
- CocoaPods/SPM integration behavior inside Xcode
|
|
145
|
+
- provisioning/signing
|
|
146
|
+
- archive/export behavior
|
|
147
|
+
- App Store readiness
|
|
148
|
+
|
|
149
|
+
## Minimal real test floor
|
|
150
|
+
|
|
151
|
+
At scaffold, include at least:
|
|
152
|
+
|
|
153
|
+
- one real portable Swift test when a portable SwiftPM module exists
|
|
154
|
+
- one real portable build or lint/format verification path
|
|
155
|
+
- one honest Docker-backed Linux verification path behind `docker compose up --build`
|
|
156
|
+
- one explicit README statement that native app build/runtime proof still requires macOS/Xcode
|
|
157
|
+
|
|
158
|
+
If there is truly no portable module yet, replace the first two bullets with strong static validation plus explicit documentation that the family is non-default on Linux because portable proof is narrow.
|
|
159
|
+
|
|
160
|
+
## README floor
|
|
161
|
+
|
|
162
|
+
`README.md` must already state:
|
|
163
|
+
|
|
164
|
+
- scaffold status versus implemented scope
|
|
165
|
+
- required Docker command: `docker compose up --build`
|
|
166
|
+
- broad test command: `./run_tests.sh`
|
|
167
|
+
- whether `./run_app.sh` exists and why
|
|
168
|
+
- that native iOS app build/runtime proof requires a separate macOS/Xcode checkpoint
|
|
169
|
+
- exactly what Linux does and does not prove for this repo
|
|
170
|
+
|
|
171
|
+
## Common pitfalls
|
|
172
|
+
|
|
173
|
+
- pretending `swift build` on Linux built the iOS app target
|
|
174
|
+
- implying simulator or archive proof without macOS
|
|
175
|
+
- leaving `docker compose up --build` empty because full native proof is unavailable
|
|
176
|
+
- adding `./run_app.sh` as a decorative no-op
|
|
177
|
+
- hiding that this family is non-default on Linux
|
|
178
|
+
|
|
179
|
+
## Acceptance checklist
|
|
180
|
+
|
|
181
|
+
Scaffold is acceptable when:
|
|
182
|
+
|
|
183
|
+
- the family is treated as explicit opt-in, not the Linux default
|
|
184
|
+
- `docker compose up --build` performs real portable verification honestly
|
|
185
|
+
- `./run_tests.sh` performs the broad portable verification honestly
|
|
186
|
+
- `./run_app.sh` is omitted unless it adds a truthful macOS/Xcode handoff
|
|
187
|
+
- README documents the Linux proof boundary clearly
|
|
188
|
+
- no fake native iOS build/runtime claims are made
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Laravel Default Scaffold Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook when the prompt explicitly asks for a Laravel/PHP baseline and does not need product-specific feature work.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
Ship a concrete Laravel baseline that is:
|
|
8
|
+
|
|
9
|
+
- bootstrapped from the official Laravel path
|
|
10
|
+
- Docker-first
|
|
11
|
+
- safe by default
|
|
12
|
+
- wired to a real database path without `.env`
|
|
13
|
+
- verified with real Laravel tests
|
|
14
|
+
- limited to baseline infrastructure only
|
|
15
|
+
|
|
16
|
+
Verified lab:
|
|
17
|
+
|
|
18
|
+
- `/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/laravel-baseline`
|
|
19
|
+
|
|
20
|
+
## Official bootstrap path
|
|
21
|
+
|
|
22
|
+
Use the official Composer create-project flow:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
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" laravel-baseline
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Observed bootstrap result for the verified lab:
|
|
29
|
+
|
|
30
|
+
- `laravel/laravel v12.12.2`
|
|
31
|
+
- `laravel/framework v12.56.0`
|
|
32
|
+
- `phpunit/phpunit v11.5.55`
|
|
33
|
+
|
|
34
|
+
## Safe pinned defaults
|
|
35
|
+
|
|
36
|
+
- Docker base image: `php:8.4-cli-bookworm`
|
|
37
|
+
- Composer image: `composer:2.8`
|
|
38
|
+
- Laravel skeleton: `laravel/laravel v12.12.2`
|
|
39
|
+
- Lockfile-pinned framework: `laravel/framework v12.56.0`
|
|
40
|
+
- Lockfile-pinned test runner: `phpunit/phpunit v11.5.55`
|
|
41
|
+
- database default: SQLite file in a Docker-managed volume
|
|
42
|
+
|
|
43
|
+
The lockfile is the real dependency pin. Keep it committed.
|
|
44
|
+
|
|
45
|
+
## No-`.env` rule
|
|
46
|
+
|
|
47
|
+
- do not commit `.env`
|
|
48
|
+
- do not require users to create `.env` before startup
|
|
49
|
+
- point Laravel at a committed empty environment stub instead of `.env`
|
|
50
|
+
- load runtime app/database values from a generated runtime config file in a Docker-managed volume
|
|
51
|
+
|
|
52
|
+
Verified lab pattern:
|
|
53
|
+
|
|
54
|
+
- `bootstrap/runtime-environment.stub` is the environment file Laravel loads
|
|
55
|
+
- `bootstrap/runtime-config.php` loads JSON from `APP_CONFIG_PATH`
|
|
56
|
+
- `scripts/bootstrap_runtime.sh` generates the JSON config and SQLite path
|
|
57
|
+
|
|
58
|
+
## Database pattern
|
|
59
|
+
|
|
60
|
+
- default to SQLite for the baseline
|
|
61
|
+
- place the SQLite file in `/runtime/database/app.sqlite`
|
|
62
|
+
- keep `/runtime` on a named Docker volume
|
|
63
|
+
- run migrations from a single entrypoint script before app start and inside test execution
|
|
64
|
+
- expose one real persistence-backed endpoint so DB wiring is proven, not implied
|
|
65
|
+
|
|
66
|
+
Verified lab surface:
|
|
67
|
+
|
|
68
|
+
- `GET /health`
|
|
69
|
+
- `POST /api/items`
|
|
70
|
+
- `GET /api/items`
|
|
71
|
+
|
|
72
|
+
## Runtime contract
|
|
73
|
+
|
|
74
|
+
Required commands:
|
|
75
|
+
|
|
76
|
+
- `docker compose up --build`
|
|
77
|
+
- `./run_tests.sh`
|
|
78
|
+
|
|
79
|
+
Helpful extra command:
|
|
80
|
+
|
|
81
|
+
- `./init_db.sh`
|
|
82
|
+
|
|
83
|
+
All three commands are real in the verified lab.
|
|
84
|
+
|
|
85
|
+
## Docker / Compose pattern
|
|
86
|
+
|
|
87
|
+
- use `compose.yaml`
|
|
88
|
+
- one app service published to loopback only with a random host port
|
|
89
|
+
- one tester service behind a `test` profile
|
|
90
|
+
- named volume for runtime state
|
|
91
|
+
- healthcheck against `/health`
|
|
92
|
+
- same image for runtime and tests
|
|
93
|
+
|
|
94
|
+
Verified lab details:
|
|
95
|
+
|
|
96
|
+
- host bind example during detached verification: `127.0.0.1:32786->8000`
|
|
97
|
+
- host bind example during interactive verification: `127.0.0.1:32788->8000`
|
|
98
|
+
|
|
99
|
+
## Testing baseline
|
|
100
|
+
|
|
101
|
+
Minimum real Laravel/PHP test floor:
|
|
102
|
+
|
|
103
|
+
- one unit test that proves runtime config defaults select SQLite without `.env`
|
|
104
|
+
- one feature test for health/database readiness
|
|
105
|
+
- one feature test for persistence-backed create/list behavior
|
|
106
|
+
- containerized `./run_tests.sh` that performs both HTTP smoke checks and `php artisan test`
|
|
107
|
+
|
|
108
|
+
Verified lab test files:
|
|
109
|
+
|
|
110
|
+
- `tests/Unit/RuntimeConfigTest.php`
|
|
111
|
+
- `tests/Feature/BaselineApiTest.php`
|
|
112
|
+
|
|
113
|
+
Verified lab test result:
|
|
114
|
+
|
|
115
|
+
- `3 passed (10 assertions)`
|
|
116
|
+
|
|
117
|
+
## README requirements
|
|
118
|
+
|
|
119
|
+
The README must honestly state:
|
|
120
|
+
|
|
121
|
+
- this is a baseline, not a feature app
|
|
122
|
+
- exact stack and pins used
|
|
123
|
+
- exact runtime command: `docker compose up --build`
|
|
124
|
+
- exact broad test command: `./run_tests.sh`
|
|
125
|
+
- no `.env` requirement
|
|
126
|
+
- safe database/config pattern
|
|
127
|
+
- what is intentionally excluded
|
|
128
|
+
- exact verification commands and observed results
|
|
129
|
+
|
|
130
|
+
## Commands actually run for the verified lab
|
|
131
|
+
|
|
132
|
+
All commands below were executed in `/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/laravel-baseline`.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
docker compose config
|
|
136
|
+
|
|
137
|
+
docker compose up --build -d
|
|
138
|
+
|
|
139
|
+
docker compose ps
|
|
140
|
+
|
|
141
|
+
docker compose port app 8000
|
|
142
|
+
|
|
143
|
+
curl -fsS "http://127.0.0.1:32786/health"
|
|
144
|
+
|
|
145
|
+
curl -fsS -X POST "http://127.0.0.1:32786/api/items" -H "content-type: application/json" -d '{"name":"manual-smoke-item"}'
|
|
146
|
+
|
|
147
|
+
curl -fsS "http://127.0.0.1:32786/api/items"
|
|
148
|
+
|
|
149
|
+
docker compose down --volumes --remove-orphans
|
|
150
|
+
|
|
151
|
+
./run_tests.sh
|
|
152
|
+
|
|
153
|
+
./init_db.sh
|
|
154
|
+
|
|
155
|
+
python3 - <<'PY'
|
|
156
|
+
import signal
|
|
157
|
+
import subprocess
|
|
158
|
+
import time
|
|
159
|
+
from urllib.request import urlopen
|
|
160
|
+
|
|
161
|
+
cwd = "/Users/yohannesakd/code/eaglepoint/demonstration/scaffold-lab/laravel-baseline"
|
|
162
|
+
proc = subprocess.Popen(["docker", "compose", "up", "--build"], cwd=cwd)
|
|
163
|
+
error = None
|
|
164
|
+
try:
|
|
165
|
+
deadline = time.time() + 180
|
|
166
|
+
while time.time() < deadline:
|
|
167
|
+
try:
|
|
168
|
+
port = subprocess.check_output(["docker", "compose", "port", "app", "8000"], cwd=cwd, text=True).strip().rsplit(":", 1)[-1]
|
|
169
|
+
with urlopen(f"http://127.0.0.1:{port}/health", timeout=2) as response:
|
|
170
|
+
if response.status == 200:
|
|
171
|
+
print(f"health reached while docker compose up --build was active on port {port}")
|
|
172
|
+
break
|
|
173
|
+
except Exception as exc:
|
|
174
|
+
error = exc
|
|
175
|
+
time.sleep(2)
|
|
176
|
+
else:
|
|
177
|
+
raise RuntimeError(f"health never became ready: {error}")
|
|
178
|
+
finally:
|
|
179
|
+
proc.send_signal(signal.SIGINT)
|
|
180
|
+
try:
|
|
181
|
+
proc.wait(timeout=30)
|
|
182
|
+
except subprocess.TimeoutExpired:
|
|
183
|
+
proc.kill()
|
|
184
|
+
proc.wait(timeout=30)
|
|
185
|
+
subprocess.run(["docker", "compose", "down", "--volumes", "--remove-orphans"], cwd=cwd, check=True)
|
|
186
|
+
PY
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Observed results
|
|
190
|
+
|
|
191
|
+
- `docker compose config` resolved cleanly
|
|
192
|
+
- `docker compose up --build -d` started the app and `docker compose port app 8000` returned `127.0.0.1:32786`
|
|
193
|
+
- `curl -fsS "http://127.0.0.1:32786/health"` returned `{"status":"ok","database":"ready"}`
|
|
194
|
+
- `curl -fsS -X POST "http://127.0.0.1:32786/api/items" ...` returned `{"data":{"name":"manual-smoke-item",...,"id":1}}`
|
|
195
|
+
- `curl -fsS "http://127.0.0.1:32786/api/items"` returned `{"data":[{"id":1,"name":"manual-smoke-item",...}]}`
|
|
196
|
+
- `./run_tests.sh` passed and ended with `3 passed (10 assertions)`
|
|
197
|
+
- `./init_db.sh` passed and ran the `2026_04_15_000000_create_items_table` migration in Docker
|
|
198
|
+
- the interactive `docker compose up --build` path reached `/health` successfully and printed `health reached while docker compose up --build was active on port 32788`
|
|
199
|
+
|
|
200
|
+
## Acceptance checklist
|
|
201
|
+
|
|
202
|
+
Baseline is acceptable when:
|
|
203
|
+
|
|
204
|
+
- official Laravel bootstrap path is used
|
|
205
|
+
- dependencies are pinned by lockfile and explicit Docker image tags
|
|
206
|
+
- runtime does not rely on `.env`
|
|
207
|
+
- database defaults are safe and real
|
|
208
|
+
- `docker compose up --build` works
|
|
209
|
+
- `./run_tests.sh` works
|
|
210
|
+
- minimal real Laravel tests are present and passing
|
|
211
|
+
- README is honest about included versus excluded scope
|
|
212
|
+
- the lab stops at baseline infrastructure
|
|
213
|
+
|
|
214
|
+
## Experimental verification status
|
|
215
|
+
|
|
216
|
+
Yes. This playbook is based on an experimentally verified lab, not a hypothetical template.
|