Thema
De ontwikkellus
Een wijziging in een kit is pas zichtbaar bij zijn afnemer na bump → publish → install. Dat is inherent aan het registry-only-model, geen defect.
Sla die stappen niet over
En bouw er geen omweg omheen. Een symlink "om even snel te testen" test iets anders dan wat je afnemer krijgt — dat is precies de fout die het model wegneemt.
De lus
bash
bin/local-registry up # Verdaccio op :4873, vereist Docker
bin/foundation publish # topologisch, idempotent
bin/foundation install
npm run verify
bin/local-registry down # opruimen als je klaar bentRuim je registry op
bin/local-registry down als je klaar bent. Een blijvend draaiende Verdaccio is een val: je volgende schone install lijkt te werken terwijl hij uit een stale cache trekt.
De poorten
| Commando | Wat het doet |
|---|---|
npm run build | Alle packages bouwen |
npm run typecheck | src én backend/templates |
npm run test | Unit tests |
npm run no-symlinks | Faalt op elke symlink |
npm run verify | build + typecheck + test + no-symlinks |
npm run verify:full | verify + alles wat Docker nodig heeft (per-module testcontainer-e2e's) |
Waarom typecheck twee doelen heeft
Elke module sluit backend/templates uit in zijn tsconfig.json; alleen tsconfig.backend.json dekt de gematerialiseerde surface. Zonder die fan-out compileert niemand die bestanden — en precies zo bleef media's storage-v2-breuk maandenlang onzichtbaar.
verify:full bevat de negen-module-poort níet
Die woont sinds 2026-08-17 in showcase/, en die consumeert de packages als gepubliceerde tarball. Hem vanuit foundation aanroepen zou testen wat er de vorige keer is gepubliceerd, niet wat er in je werkmap staat.
Publiceren naar npmjs
Daarvoor is een apart gereedschap: foundation/bin/kit-publish, met subcommando's status · plan · publish · verify · hooks · renumber · audit.
Gates vóór elke publicatie: auth, metadata, prepublishOnly, git-schoon, umbrella-imports, externe pins, rangeconsistentie. Daarna een dry-run per golf, bevestiging per golf, na-controle, en een auditlog in ~/.config/kit-publish/audit.jsonl.
De golven worden runtime uit de package.json's gerekend, niet opgeschreven — een vaste lijst is vandaag goed en morgen stil fout. Dat bleek meteen: toen frontend-forms een dependency op kit-frontend-i18n kreeg, schoof hij vanzelf van golf 1 naar golf 2.
Drie dingen die tijd kosten als je ze niet weet
Een 404 direct ná een geslaagde publish is normaal
Een nieuw restricted package is pas na 1,5 tot 4,5 minuut leesbaar. De exitcode van npm publish is het bewijs, niet npm view.
npm access get status is géén bestaanscontrole
Voor een naam die niet bestaat antwoordt hij ook private — dat is de scope-default. Alleen bruikbaar voor een package waarvan je al weet dat het bestaat.
npm view geeft 404 voor een restricted package
…aan een token dat het wel mag publiceren maar niet mag lezen. Zonder geldige auth is "nooit gepubliceerd" dus een gok, geen vaststelling.
Publicatie-zichtbaarheid
Twee regimes wonen naast elkaar in deze repo:
| Scope | Zichtbaarheid |
|---|---|
@seifer-webapp-factory/* (34 packages) | restricted |
@for-the-people-initiative/wireframe-kit | publiek |
De zichtbaarheidsval
Zet nooit ongevraagd publishConfig.access om en publiceer nooit uit eigen beweging naar npmjs. Een package dat één keer publiek is geweest, kan niet met terugwerkende kracht privé worden voor wie het al gespiegeld heeft.
En: npm-zichtbaarheid geldt per package, niet per versie. Een al-gepubliceerd package privé zetten breekt de schone npm ci van elke consument meteen — ook als die op een oude versie gepind staat.
Lockfiles
foundation/ en showcase/ negeren package-lock.json met een reden die in hun eigen .gitignore staat uitgeschreven: Verdaccio herschrijft elke resolved-URL naar localhost:4873. Herstel dat niet zonder eerst US-058 op te lossen.