Skip to content

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/Caddyfile
  • deploy.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

LaagLeidt de naam af vanResultaat
deploymentde repo-map-basenamefamily-choirs
scaffolderde app-naam / env-prefixfamily-choresFAMILYCHORES_

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

  1. 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 expliciet app/docker-compose.dev.yml — alleen lokaal.
  2. De scaffolder emit een deploy-metadata.json (envPrefix, health-pad, poorten, needs_postgres/mail/auth, image-namen) die onboard-solution consumeert in plaats van her-af te leiden.
  3. Één naamcontract: product- = repo- = image-naam. De app-interne prefix mag apart blijven.
  4. Healthcheck-fix en andere plumbing-bugs upstream in de scaffolder.

Gerelateerde gaps

#GapFix-eigenaar
G3Scaffolder-CI verkeerd geplaatst + push:falsescaffolder
G4Compose-eigenaarschap botst (dev vs co-host)scaffolder + deployment
G5Geen deploy-metadata → deployment her-afleidtscaffolder
G6Healthcheck localhost/IPv6-bugscaffolder (upstream)
G7Naam-mismatch product/appconventie
G8Git-repo + tokens handmatigorchestratie (gh)

Volledige gap-lijst

Seifer — interne documentatie. Bron van waarheid blijft de repo zelf.