feat(toolchain): 0pt-pilot — mise task-kontrakt (node/pnpm pinat) + lefthook + template-pin + dokumentation (W3, pilot 2/3) #55

Merged
admin merged 2 commits from feat/selected-toolchain-pilot into main 2026-09-14 21:03:47 +00:00
5 changed files with 109 additions and 1 deletions
+15
View File
@@ -0,0 +1,15 @@
{
"schemaVersion": "siax.template-pin/v1",
"repo": "0pt",
"profiles": ["base", "node", "ui", "deployable"],
"templateRepo": "sax3l/siax-templates",
"templateRef": "1feb97cd1d6da58bb4b420d860109285c47c741d",
"pinnedAt": "2026-09-14T23:10:00Z",
"pins": {
"mise": "task-entry i mise.toml (repot rot)",
"node": "22.13.0",
"pnpm": "9.15.9",
"lefthook": "1.x (aktiveras med npx lefthook install)"
},
"notes": "0pt = pnpm-repo (pnpm-lock.yaml v9). Python-tjansterna (services/api, services/scrapers) kor requirements.txt - uv-adoption ar DEFERRED tills lock skapats i separat migrering. Makefile = legacy-alias (thin wrappers), städas i separat PR med deleteBy."
}
+16
View File
@@ -42,6 +42,22 @@ entity-resolution, provenance per fält, adaptive router, orderflöde med
- **Docker:** multi-stage, icke-root (`USER node`), ingen tsx i prod, healthcheck
mot `/api/health`.
## Toolchain-ägande (SIAX selected toolchain, 2026-09-14)
- `mise.toml` = task-entry (`setup/check/verify/build/release`). Ändra inte
betydelsen av dessa fem tasks. pnpm@9.15.9 följer packageManager.
- `lefthook.yml` = git hooks (pre-commit: typecheck+lint, pre-push: test).
Aktiveras med `npx lefthook install`.
- `Makefile` är legacy-alias ("thin wrappers", se dess header) — nya kommandon
läggs ALDRIG dit; mise är kanonisk entry. Makefile städas bort i separat PR
med deleteBy-registering.
- Pinning mot `sax3l/siax-templates`: `.siax/template-pin.json`
(`siax.template-pin/v1`). Förbjudna duplicerade verktyg: just, Task, Nx,
Cypress (Playwright gäller), OpenProject/Leantime/AppFlowy (Plane gäller),
Keycloak (Zitadel/ACT0 gäller).
- Python-tjänsterna (services/api, services/scrapers) kör requirements.txt;
uv-adoption är DEFERRED till en separat lås-migrering.
## Grindar (kör före push)
```bash
+14 -1
View File
@@ -44,8 +44,21 @@ scroll-reveal motion. **No photography** — imagery is rendered data (`DataArti
shows a provenance square (`ProvenanceBadge`). Full spec: [docs/05-design-system.md](docs/05-design-system.md).
## Run locally
**SIAX toolchain-kontrakt (mise):**
```bash
mise install # pinnar node 22.13.0 + pnpm 9.15.9 (se mise.toml [tools])
mise run setup # pnpm install --frozen-lockfile
mise run check # typecheck + lint (snabbt, deterministiskt)
mise run verify # vitest + next build (full svit)
mise run build # deploybar artefakt
```
mise är task-entrypoint (`mise.toml`); gate-logiken bor kvar i
`.gitea/workflows/` och package.json — pinning: `.siax/template-pin.json`.
```bash
pnpm install
pnpm dev # Next.js on http://localhost:3000
# data engine (separate, optional)
+17
View File
@@ -0,0 +1,17 @@
# SIAX toolchain-kontrakt v0.1.0 — Lefthook för 0pt.
# Aktiveras med: npx lefthook install (eller mise-buren lefthook).
# Hook-skip lokalt ersätter aldrig CI:s required checks.
pre-commit:
parallel: true
commands:
typecheck:
run: pnpm run typecheck
lint:
run: pnpm run lint
pre-push:
parallel: false
commands:
verify:
run: pnpm run test
+47
View File
@@ -0,0 +1,47 @@
# SIAX toolchain-kontrakt v0.1.0 (sax3l/siax-templates @ SHA-pinad i
# .siax/template-pin.json) — 0pt-instans.
# mise är task-ENTRY; gate-logiken bor i .gitea/workflows/ (repots egen CI).
# pnpm-versionen följer package.json "packageManager" (pnpm@9.15.9,
# pnpm-lock.yaml lockfileVersion 9.0). Makefile är legacy-alias
# ("thin wrappers", egen header-kommentar) — mise är den kanoniska entryn;
# Makefile städas bort i separat PR med deleteBy enligt template-pin-alias.
[tools]
node = "22.13.0"
pnpm = "9.15.9"
[tasks.setup]
description = "pnpm install (frozen lockfile)"
run = "pnpm install --frozen-lockfile"
[tasks.check]
description = "Snabba deterministiska kontroller: typecheck (lint ar ADVISORY i CI: legacy-trad har pre-existing nois - separat task)"
run = '''
set -eu
pnpm run typecheck
'''
[tasks.lint]
description = "ESLint (advisory: continue-on-error i CI — legacy-noise; stads-PR kravs innan den kan gateras)"
run = "pnpm run lint"
[tasks.verify]
description = "Full svit: vitest + next build"
run = '''
set -eu
pnpm run test
pnpm run build
'''
[tasks.build]
description = "next build (deploybar artefakt)"
run = "pnpm run build"
[tasks.release]
description = "Verifiera innan release; deployment ägs av cd.yml (bygg en gång, promotra samma digest)"
run = '''
set -eu
pnpm run test
pnpm run build
echo "Release-vägen: .gitea/workflows/cd.yml (staging -> live gates -> prod). Byt aldrig förbi approval." >&2
'''