@siax/scaffold (0.1.0)
Installation
@siax:registry=https://git.cloud.siax.io/api/packages/sax3l/npm/npm install @siax/scaffold@0.1.0"@siax/scaffold": "0.1.0"About this package
siax-scaffold
siax-scaffold genererar de mallbara BLOCK-artefakterna ur SIAX Golden
Standard v2.0 i vilket SIAX-repo som helst. Zero-dependency Node ESM (endast
Node ≥ 20), samma ärlighetsanda som siax-doctor: den stänger det som går
att stänga med en mall, och lämnar resten synligt rött.
Varför: K1-mätningen (docs/rollout/K1-ASSESSMENT-2026-08-09.md) visade att
exakt tio BLOCK-kontroller saknades i samtliga tolv K1-repon. Nio av dem är
ren boilerplate. Att skriva dem för hand tolv gånger är tolv chanser att
avvika — därför en generator, en gång, centralt.
Användning
node src/scaffold.mjs --repo <mål> # DRY-RUN: rapporterar planen, skriver ingenting
node src/scaffold.mjs --repo <mål> --apply # skriver de filer som saknas
node src/scaffold.mjs --repo <mål> --json # maskinstabil JSON (plan + todos + härledda värden)
Exit-kod är 0, utom om den genererade siax.repo.json inte validerar mot
schemat — då skrivs den inte alls och exit är 1.
Vad som genereras
| Kontroll | Fil | Not |
|---|---|---|
| REPO-03/04 | siax.repo.json |
Valideras mot schema/siax.repo.schema.json innan den skrivs |
| DOC-06 | docs/runbook/{deploy,incident,backup-restore,oncall}.md |
deploy.md fylls från siax.config.json om den finns |
| DOC-07 | — | Stängs inte. Med flit. Se nedan |
| DOC-12 | AGENTS.md |
Start-/testkommandon härleds ur package.json-skript |
| API-01 | contracts/openapi.yaml |
Endast om inget kontrakt hittas någon annanstans — annars flyttförslag |
| CI-10 | .gitea/workflows/security.yml |
gitleaks, Trivy, OSV-Scanner, Semgrep |
| CI-14 | .gitea/CODEOWNERS |
Ägare ärvs från befintlig CODEOWNERS/deskriptor |
| DX-02 | compose.dev.yaml |
Tom med TODO — hittar inte på tjänster |
| DX-03 | .devcontainer/devcontainer.json |
Bild väljs efter upptäckt körtid (node/python/go/rust) |
| AGENT-02 | prompts/000-INDEX.md |
Indexet listar generatorns egna öppna punkter |
| — | docs/compliance/SCAFFOLD-TODO.md |
Bevisliggörare: varje härlett värde med källa, varje öppen punkt |
Ärlighetskontrakt
- AR-1 — inget skrivs över. En fil som finns och har innehåll rapporteras
som
skipmed skäl. Bara saknade eller tomma filer skrivs. Generatorn raderar aldrig något och flyttar aldrig något. - Ingen genererad fil innehåller ett påhittat faktum. Allt som inte går att
härleda ur repot skrivs som
TODO:/EJ BEVISAD, så att doctorn fortsätter flagga tills påståendet är sant. - DOC-07 lämnas röd. Doctorn letar efter ett datum i
backup-restore.md. Ett genererat datum skulle göra kontrollen grön utan att någon återställning ägt rum — en maskinellt trovärdig lögn. Mallen innehåller därför inget datum alls; den skriverEJ BEVISAD. Kontrollen stängs av en människa som faktiskt kört återställningen. Detta är testat (scaffold.test.mjs).Observerat i estatet (2026-08-11, EJ åtgärdat här): doctorns DOC-07 är i dag en lös datumsökning i hela filen — vilket datum som helst räcker.
c0nf0rm/docs/runbook/backup-restore.mdskriver ordagrant "Senast bevisad restore: ALDRIG UTFÖRD" och får ändåDOC-07 PASS, eftersom en "Senast granskad"-rad innehåller ett datum. En grön DOC-07 i ett annat repo är alltså inte bevis för en bevisad återställning. Att skärpa kontrollen hör hemma ipackages/doctoroch är medvetet inte gjort i denna branch. operationalStatesänker aldrig kraven. Doctorn använder fältet för att avgöra om REPO-06, CD-01 och API-01 ska mätas. Har repot driftsartefakter sättsdegraded— det värde som håller kontrollerna aktiva utan att påstå att tjänsten är frisk. Annarsplanned. Båda är märkta EJ VERIFIERADE iSCAFFOLD-TODO.mdoch ska rättas motdocker ps(GOV-06).appIdblirnullmed motivering, aldrig ett påhittat ID som ser konformt ut och pekar på ingenting i CL0UD APP_REGISTRY (REPO-05).- Ett genererat kontraktsskelett är märkt ofullständigt. API-01 är en ren existenskontroll och blir grön; API-02/03/04 förblir röda. Det står i filen.
API-01 — flytt före generering
Kontraktet finns redan i 8 av 12 K1-repon, men på fel sökväg. Generatorn letar
i tur och ordning i contracts/, packages/contract{,s}/, roten, api/,
docs/, spec/. Hittas ett kontrakt någon annanstans genereras inget —
den rapporterar flytten med kommandot:
git mv packages/contract/openapi.yaml contracts/openapi.yaml
Flytten körs inte automatiskt: sökvägen kan vara refererad från bygg, kod eller CI, och det är ett per-repo-beslut.
Härledning i stället för frågor
| Värde | Härleds ur |
|---|---|
| reponamn | befintlig siax.repo.json → git remote.origin.url → katalognamnet |
| kategori/livscykel/nod | befintlig siax.repo.json, annars konservativ default + TODO |
| domäner | siax.config.json → environments[].domain |
children[] |
faktiska kataloger under apps/, packages/, services/ |
packageName |
package.json → name (endast om den matchar schemats mönster) |
| codeowners | befintlig .gitea/CODEOWNERS eller deskriptorns codeowners |
| start-/testkommandon | package.json → scripts + vilken lockfil som finns |
| devcontainer-bild | package.json / pyproject.toml / go.mod / Cargo.toml |
Tester
node test/scaffold.test.mjs # 16 tester, exit 0
Det verkliga beviset är testet som kör siax-doctor före och efter
--apply mot samma träd och jämför poängen — plus dess spegelbild, som kräver
att DOC-07 fortfarande är röd efteråt.
Licens / ägare
SIAX Technology AB (@sax3l). Paketnamn @siax/scaffold.
Bidra
Se CONTRIBUTING.md i roten. Krav: kontroll-ID:n exakta enligt
standard/SIAX-F0KUSREPO-PROMPT-v2.0.md, test för varje ny mall (att den skapas
och att den inte skriver över), ingen ny dependency utan ADR.