- Mijn taak: onderhoud het PrototypeFramework — nu en in elke volgende opdracht. Dit is de runtime (PHP backend + Angular frontend) waarnaar de Ampersand compiler een formele ADL-specificatie vertaalt naar een werkende webapplicatie.
- Samenwerking met de compiler: ik werk samen met de Ampersand compiler. Het framework levert generieke, vaste runtime-code; de compiler vult die per applicatie met gegenereerde code/JSON. Wijzigingen aan het framework mogen die contract-grens (zie §6) niet breken.
- Begrijpen voor handelen: voor framework-onderhoud moet ik drie dingen kennen — (1) de architectuur van een Ampersand-applicatie, (2) het framework zelf, (3) de deployment van een gegenereerd prototype. Verwijzingen daarvoor staan in §6.
- Backend: PHP (gegenereerd vanuit Ampersand ADL)
- Frontend: Angular + TypeScript + SCSS
- Webserver: Apache
- Database: MariaDB 10.6 (gegenereerd schema,
--lower-case-table-names=1,ANSI,TRADITIONALmode, UTF-8) - Infrastructuur: Docker & Docker Compose
- Ecosysteem: Dit is het framework (PHP/Angular) waarnaar Ampersand compileert.
Gebruik UITSLUITEND ./generate.sh om het project te compileren en bouwen.
- NOOIT
ng serveofng builddirect gebruiken. - NOOIT andere docker commando's gebruiken dan
docker compose up -d(en down/logs).
Standaard cyclus voor testprojecten:
- Start containers:
docker compose up -d(alleen als ze nog niet draaien) - Genereer en bouw:
./generate.sh <test-project-map> <entry-file.adl>(bijv../generate.sh box-filtered-dropdown main.adl). Geldige<test-project-map>= een submap vantest/projects/(default:hello-world). - Test in browser op
http://localhost(controleer console op JS errors)
Verifieer vóór elke merge met de runner; noem in het merge-rapport welke projecten je draaide en hun verdict.
test/run-regression.sh <project>— één project: eigen stack (poort 9400), model compileren, installeren, spec draaien, afbreken. Exitcode = verdict.test/run-regression.sh all— alle projecten + contributierapport (verdict, duur, en wat elk project bewaakt).test/run-regression.sh --list— wat elk project bewaakt (uit de**Guards:**-regel van zijn README).
Raakt je wijziging gedrag dat nog geen project bewaakt? Voeg dan een project of spec toe (test/projects/<p>/e2e/) — de reproductie die de bug aantoonde wordt de regressie die de fix bewaakt. Zie issue #402; browser-specs zijn Playwright. Runs serialiseren zichzelf met een lock (flock bestaat niet op macOS, dus de runner gebruikt een mkdir-lock).
De runner compileert het model in je werkkopie: ná een run staan in backend/generics/ en html/ de bestanden van het laatst gedraaide project (allebei gitignored). Draai ./generate.sh <project> om je dev-stack terug te zetten op het project waaraan je werkt.
Het base image (ampersandtarski/prototype-framework:local) wordt gebruikt in FROM statements van alle test- en klantprojecten.
ALTIJD bouwen voor linux/amd64, ook op Apple Silicon:
docker buildx build \
--platform linux/amd64 \
--load \
-t ampersandtarski/prototype-framework:local \
/Users/stef/git/PrototypeFramework(Gebruik nooit docker tag om een bestaand image te overschrijven, bouw altijd opnieuw).
- Starten (poort 9080):
cd /Users/stef/git/PrototypeFramework/test docker compose -f docker-compose.yml -f docker-compose.override.yml -p bfdd up -d --build - Installeren (ignoreInvariantRules):
docker exec bfdd-prototype curl -s "http://localhost/api/v1/admin/installer?ignoreInvariantRules=true"
- Opruimen:
cd /Users/stef/git/PrototypeFramework/test docker compose -f docker-compose.yml -f docker-compose.override.yml -p bfdd down -v - Toegang: App op
http://localhost:9080, PhpMyAdmin ophttp://localhost:9081.
Broncode: ~/git/FC5 (container ecert-prototype; app op poort 8090, phpMyAdmin 8091, Swagger 8092). Bouwt op het gepubliceerde base image (FROM ampersandtarski/prototype-framework:<versie> in project/Dockerfile) — frameworkwijzigingen bereiken FC5 dus pas na een release + rebuild.
- Alleen frontend gewijzigd:
cd ~/git/FC5 && docker compose up -d --build
- Backend/Datamodel gewijzigd (wist database!):
cd ~/git/FC5 && ./nvwa_prototype_init.sh
- Puppeteer-repro's/demoscripts:
~/git/FC5/project/demo/(draaien vanuit~/git/FC5).
- Cline-dialoog opvragen: Gebruik
cline-sessieom het pad naar de meest recenteapi_conversation_history.jsonte krijgen.
Lees eerst hier voordat je gaat zoeken. Paden zijn geverifieerd op 2026-05-31.
- Gegenereerd (compiler-output, niet handmatig editen):
backend/generics/*.json+database.sql(concepts, relations, interfaces, rules, conjuncts, views, roles, populations, settings),frontend/src/app/generated/, build-output inhtml/. - Vast (framework, hier onderhouden):
backend/src/Ampersand/(PHP-runtime:AmpersandApp.php,Model.php,Session.php,Transaction.php+ mappen API/Controller/Core/Event/Frontend/Interfacing/Rule/Plugs),frontend/src/app/shared/(atomic- & box-components),frontend/src/app/{layout,admin}/,frontend/src/app/generated/.templates/(template-voorbeelden). - Compilerversie-contract:
backend/generics/compiler-version.txt(nu>=5.0.0 <6.0.0). Check bij compiler-upgrades.
CompilationProcess.md— pipeline ADL → P_Context (parse) → A_Context (typecheck, lattice/typologies) → FSpec (enrichment) → generatie. Lezen bij type-/compilatievragen.reference-material/architecture-of-an-ampersand-application.md— MVC, monolithische deployment, ExecEngine, hookpoints.reference-material/interfaces.md— interface-syntax, BOX-layout (TABS/TABLE/FORM), CRUD-annotaties, sub-interfaces.reference-material/concept-hierarchies-and-database-mapping.md— concepts/typologies → DB-tabellen.modeling/conceptual-modeling.md+conceptual/automated-rules.md— domeinmodellering en regel-automatisering (ExecEngine).
README.md— ingang tot de docs.reference-material/prototype-framework.md— frameworkoverzicht: config, logging, generics, Event Dispatcher, compilerversies.reference-material/box-template-architecture.md+guides/creating-custom-box-templates.md— BOX-templates + template-variabelen ($name$,$crud$, …).reference-material/frontend-components.md+frontend-component-internals.md— atomic/box-components, type-mapping, CRUD, multipliciteit.reference-material/data_flow_analysis.md— dataflow backend-API → frontend.guides/frontender-quick-start.md,guides/back-end-services.md,guides/creating-custom-view-templates.md— dev-setup, PHP-extensie (plugins/listeners/ExecEngine), VIEW-templates.guides/measuring-performance-with-opentelemetry.md— performancemetingen op gegenereerde prototypes: OTel aanzetten (env-vars, default uit), Jaeger-overlaycompose.otel.yaml, spans lezen.
- Base image
ampersandtarski/prototype-framework:local←Dockerfile(prod, PHP 8.3-apache) /dev.Dockerfile(dev). Altijd--platform linux/amd64bouwen (zie §3). compose.yaml— dev-stack (prototype + MariaDB + phpmyadmin);test/docker-compose*.yml— testprojecten.generate.sh— orkestreert ADL → backend + frontend →npm run build:dev→ kopie naarhtml/. Vereist een draaiendeprototype-container.docker/apache/000-default.conf+apache-conf/.htaccess— Apache SPA-rewrite;db-init-scripts/01_grant_ampersand.sql— DB-user.- Valkuilen: schema-incompatibiliteit bij upgrades (reset via
docker compose down -v, wist data → eerst backup); platform-mismatch (arm64 ≠ amd64);--loadniet vergeten bij buildx.
Lees-eerst per onderwerp:
- Architectuur/interfaces:
ampersand-interface-architectuur.md(BOX-atomen, compositie, interface-debugging),ampersand-crud-rules.md,ampersand-concept-type-mapping.md,ampersand-ontwerp-methodiek.md,ampersandSyntax.md,ampersand-operators-reference.md. - Framework/frontend:
frontend-development.md,systemPatterns.md,techContext.md,productcontext.md,projectbrief.md,atomic-*.md. - Deployment/DB:
build-commando-cheatsheet.md,deployment-framework-updates.md,database-schema-compatibility-warnings.md,ampersand-database-inspection-guide.md,ampersand-test-project-workflow.md,werkdirectory-richtlijnen.md.