Waterschap Brabantse Delta · R&D-lab · research-artifact

Hoe de artefact-pipeline werkt: git als enige bron, het id als adres

R&D-lab · HELIX eerste versie 2026-07-14 laatst bijgewerkt 2026-07-14 versie 1.0 definitief

Het principe in één alinea

Elk research-artefact van het lab is één zelfstandig HTML-bestand dat leeft in de git-repository RnD/helix-artifactsgit is de enige bron van waarheid. De app serveert een lokale spiegel van die repo en niets anders: wat niet in git staat, bestaat niet (en wordt bij de eerstvolgende synchronisatie ook fysiek opgeruimd). Het adres van een artefact is zijn onveranderlijke id: /artifacts/<art_id>/<leesbare-naam>.html. De naam erachter is cosmetiek; het id is wat notities, versies, koppelingen en gedeelde links bijeenhoudt. Sinds 2026-07-14 geldt dit voor alle artefacten: de 22 oude "baked" artefacten die nog in de app-image zaten zijn naar de repo gemigreerd, en elk oud pad stuurt bezoekers met een 301 door naar het id-adres.

Twee routes erin — allebei eindigen ze in git

Route A — maken in de app (of via een agent/API)
1 · Upload"+ Upload artefact" in /admin/artifacts, of POST /api/artifacts met {name, html, track?, private?}
2 · Identiteit & huisstijlde app munt (of behoudt) het art_…-id en injecteert ontbrekende huisstijl-includes
3 · Direct servablebestand landt in de store-spiegel (/data/artifact-store) — meteen live, géén deploy
4 · Commitde app commit het bestand via de Gitea-API naar RnD/helix-artifacts — de versie van record, met auteur
Route B — rechtstreeks in git werken
1 · Pushcommit naar RnD/helix-artifacts (main), pad artifacts/<art_id>/<naam>.html
2 · Webhookde repo-workflow roept POST /api/artifacts/sync aan
3 · Atomic swapde app spiegelt de héle repo-boom opnieuw; verwijderingen propageren mee
4 · Registratieid's, versies en privé-markeringen worden bijgeschreven

Route A en B convergeren gegarandeerd: de spiegel wordt bij elke sync volledig vervangen door de repo-inhoud. Een bestand dat ooit buiten git om op de server zou belanden, overleeft de eerstvolgende sync dus niet — het systeem herstelt zichzelf altijd richting git. Dat maakt de pipeline deterministisch: dezelfde repo-stand geeft altijd dezelfde site-stand.

Waarom het id het adres is

Vroeger was het pad /artifacts/<spoor-map>/<naam>.html. Dat had twee problemen: de URL suggereerde spoor-lidmaatschap dat er niet hoefde te zijn, en elke hernoeming of verplaatsing brak alle gedeelde links. Nu:

Serveren, privacy en geschiedenis

Spelregels voor auteurs (en agents)

Aanname / afbakening: dit document beschrijft de werking per 2026-07-14, na de migratie van alle baked artefacten (PR's #113/#114/#117/#122–#127 in RnD/helix). De huisstijl-assets onder /artifacts/lib/ zijn bewust géén artefacten en reizen met de app-image mee.

Verantwoording

Methode: gedrag live geverifieerd op lab.wbd-rd.nl (2026-07-14): upload→commit→serve-keten, sync-atomic-swap, 301's van alle 30 gemigreerde oude paden, privé-gating na migratie, permalink- en slug-geschiedenis-gedrag, en de delete-commit-flow. Code: RnD/helix (src/lib/server/artifactStore.ts, src/lib/server/slugs.ts, src/routes/artifacts/[...path], src/routes/p/[id]) en RnD/helix-artifacts (.gitea/workflows/deploy.yml). Contact: R&D-lab.