Värd: 0pt — orders har CSV-export sedan våg 3.4 → symmetrisk CSV-import är det naturligaste; befintlig admin-yta + befintlig orderlogik = billigast äkta behov.
Nya ytor
POST /api/orders/import — mode validate | dry_run | execute; server-parsad RFC4180 (ingen eval), server-omvalidering via @siax/contracts-kerneln (validateRows) + hostregler; exekvering via befintlig createOrder (tenant-guardad via requireOrderOwner, per-rad-atomsäk, radtak 500 → 413, okänd header → 400, ingen principal → 401).
/admin/import — renderar @siax/ui ImportWizard (0.14.0) över @siax/import-export runtime-store (0.2.0). Hosten äger alla steg-callbacks och allt server-I/O.
Beviskedja
import → validation (kernel + host) → progress (wizard executing-steg) → partial/error (per-rad rapport row/field/code; OK-rader importeras) → resulting data (order_ids) → audit (AUD0 via createAud0Client, durable outbox; emission-fel loggas, blockerar ej) → reload-persistens (efter execute läses /api/orders om och nya rader listas på sidan) → browser E2E (efter merge/deploy).
Ärliga gap
Batch-importen är per-rad-atomsäk, inte en gemensam DB-transaktion (medvetet: en felrad får inte rulla tillbaka OK-rader).
AUD0-emission är fire-and-forget med loggning vid fel (outbox-mönstret äger leveransen).
ui 0.14.0 deklarerar @siax/contracts 0.11.0 + @siax/import-export 0.2.1 som ännu ej publicerats → pnpm-overrides till 0.10.0/0.2.0 (ImportWizard-API:t finns i båda).
Symmetrisk mot våg 3.4 CSV-export: POST /api/orders/import (validate |
dry_run | execute) + /admin/import som renderar @siax/ui ImportWizard
(0.14.0) över @siax/import-export runtime (0.2.0).
- Servern är enda auktoritet: RFC4180-parse (ingen eval), omvalidering
via frysta @siax/contracts-kerneln (validateRows) + hostregler,
exekvering genom BEFINTLIG orderlogik (createOrder, tenant-guardad).
- Fail-closed: 401 utan principal, 400 okänd header, 413 vid radtak
(500), per-rad-atomsäkra inserts — felrad kan aldrig skada OK-rader.
- Partiell import: OK-rader skapas, felrader rapporteras per rad
(row/field/code). AUD0-audit via 0pts enda producer-boundary
(durable outbox under DATABASE_URL).
- Reload-persistens: efter execute läses /api/orders om och de nya
raderna listas på sidan.
- Tester: 12 route-test (happy, partial, auth fail-closed, tak,
no-write validate, header, quoting, rad-fel mitt i batch) + 3
SSR-render-test av ImportWizard över runtime-storen.
- Deps: @siax/ui ^0.14.0, @siax/charts ^0.5.0, @siax/import-export
^0.2.0; pnpm-overrides till contracts 0.10.0 / import-export 0.2.0
(ui 0.14.0 deklarerar 0.11.0/0.2.1 som ännu ej publicerats).
CODEOWNERS rules
requested review from sax3l 2026-09-30 13:36:49 +00:00
admin
merged commit a32a64e91d into main2026-09-30 13:41:31 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
C8 IMPORTWIZARD-HOST — 0pt
Värd: 0pt — orders har CSV-export sedan våg 3.4 → symmetrisk CSV-import är det naturligaste; befintlig admin-yta + befintlig orderlogik = billigast äkta behov.
Nya ytor
POST /api/orders/import— modevalidate | dry_run | execute; server-parsad RFC4180 (ingen eval), server-omvalidering via@siax/contracts-kerneln (validateRows) + hostregler; exekvering via befintligcreateOrder(tenant-guardad viarequireOrderOwner, per-rad-atomsäk, radtak 500 → 413, okänd header → 400, ingen principal → 401)./admin/import— renderar@siax/uiImportWizard (0.14.0) över@siax/import-exportruntime-store (0.2.0). Hosten äger alla steg-callbacks och allt server-I/O.Beviskedja
import → validation (kernel + host) → progress (wizard executing-steg) → partial/error (per-rad rapport row/field/code; OK-rader importeras) → resulting data (
order_ids) → audit (AUD0 viacreateAud0Client, durable outbox; emission-fel loggas, blockerar ej) → reload-persistens (efter execute läses/api/ordersom och nya rader listas på sidan) → browser E2E (efter merge/deploy).Ärliga gap
@siax/contracts 0.11.0+@siax/import-export 0.2.1som ännu ej publicerats → pnpm-overrides till 0.10.0/0.2.0 (ImportWizard-API:t finns i båda).Tester: 12 route-test + 3 SSR-render-test; full svit 1169 gröna; typecheck + lint + build gröna (
/admin/import+/api/orders/importi build-output).