Skip to content

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 bent

Ruim 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

CommandoWat het doet
npm run buildAlle packages bouwen
npm run typechecksrc én backend/templates
npm run testUnit tests
npm run no-symlinksFaalt op elke symlink
npm run verifybuild + typecheck + test + no-symlinks
npm run verify:fullverify + 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:

ScopeZichtbaarheid
@seifer-webapp-factory/* (34 packages)restricted
@for-the-people-initiative/wireframe-kitpubliek

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.

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