Thema
Naad B · scaffolder → deployment
Het contract tussen de code-spine en de live werking. Eén skill overbrugt hem: onboard-solution.
Vandaag
onboard-solution leest de productdefinitie én de app/-code, en genereert zelf:
- de co-host
docker-compose.yml proxy/Caddyfiledeploy.env- registry-CI
…en registreert het product in platform.yaml.
De frictie
Alle zes punten hieronder zijn concreet geraakt in de family-choirs-run.
1. Compose-eigenaarschap botst
De scaffolder emit een dev-compose (hostpoorten 3000/3001, inline dev-secrets) en beschouwt dat als plumbing die sync bezit. Deployment wil een co-host-compose: geen hostpoorten, een edge-netwerk, stack-unieke aliassen.
Opgelost door deployment's compose in de repo-root te zetten en de scaffolder-compose in app/ te laten. Werkt — maar het is een impliciete conventie.
2. CI verkeerd geplaatst
De scaffolder schrijft app/.github/workflows/…. GitHub leest alleen .github/ in de repo-root, en de workflow staat bovendien op push: false. Dood gewicht. Bij family-choirs verwijderd en vervangen door een root-CI die naar GHCR pusht.
3. Naamgeving
| Laag | Leidt de naam af van | Resultaat |
|---|---|---|
| deployment | de repo-map-basename | family-choirs |
| scaffolder | de app-naam / env-prefix | family-chores → FAMILYCHORES_ |
Een mismatch die je met de hand moet managen.
4. Geen deploy-metadata
De scaffolder levert geen machine-leesbaar bestand met envPrefix, health-pad, exposed poorten en needs_postgres / needs_mail / needs_auth — terwijl ResolvedConfig en docker.ts dat allemaal al berekenen. Deployment moet het nu her-afleiden door de app te lezen.
5. Plumbing-bug lekt door
De backend-Dockerfile-healthcheck gebruikt localhost, wat naar IPv6 ::1 resolvet, terwijl de app op IPv4 luistert. Gevolg: de container is false-unhealthy. Bij family-choirs in de deploy-laag geoverridet naar 127.0.0.1 — maar dit hoort upstream in de scaffolder gefixt.
6. Git-repo is handmatig
Er is nog geen automatische gh repo create.
Het doelcontract
- Repo-layout-conventie vastleggen: app-code in
app/, deploy-artefacten + CI in de repo-root. De scaffolder stopt met deploy-CI emitten; zijn compose wordt explicietapp/docker-compose.dev.yml— alleen lokaal. - De scaffolder emit een
deploy-metadata.json(envPrefix, health-pad, poorten, needs_postgres/mail/auth, image-namen) dieonboard-solutionconsumeert in plaats van her-af te leiden. - Één naamcontract: product- = repo- = image-naam. De app-interne prefix mag apart blijven.
- Healthcheck-fix en andere plumbing-bugs upstream in de scaffolder.
Gerelateerde gaps
| # | Gap | Fix-eigenaar |
|---|---|---|
| G3 | Scaffolder-CI verkeerd geplaatst + push:false | scaffolder |
| G4 | Compose-eigenaarschap botst (dev vs co-host) | scaffolder + deployment |
| G5 | Geen deploy-metadata → deployment her-afleidt | scaffolder |
| G6 | Healthcheck localhost/IPv6-bug | scaffolder (upstream) |
| G7 | Naam-mismatch product/app | conventie |
| G8 | Git-repo + tokens handmatig | orchestratie (gh) |