1719 Commits
Author SHA1 Message Date
admin 7ef174a478 Merge pull request 'chore(ui): document upstream/legacy component exceptions' (#23) from feat/component-allowlist-20261105 into main
masterplan-lock / check (push) Successful in 8s
ci / sonar (push) Failing after 9s
2026-11-05 21:59:01 +00:00
Claude Code 9a3de47b81 chore(ui): document upstream/legacy component exceptions
masterplan-lock / check (push) Successful in 5s
masterplan-lock / check (pull_request) Successful in 18s
2026-11-05 22:57:30 +01:00
SIAX Provenance ca226cce2f fix(recovery): use the schema-valid 30d retention in accounted's backup record
masterplan-lock / check (pull_request) Successful in 5s
masterplan-lock / check (push) Successful in 6s
ci / sonar (push) Failing after 7s
2026-11-04 03:48:37 +01:00
SIAX Provenance 16a69a0fb9 chore(recovery): record the accounted backup policy and repo restore drill
masterplan-lock / check (pull_request) Successful in 8s
masterplan-lock / check (push) Successful in 6s
ci / sonar (push) Failing after 8s
Fresh clone restore drill of the canonical Gitea repo (1.8s) and the fleet nightly backup record. This is repo/config restore evidence; it does not claim a database restore.
2026-11-04 03:27:17 +01:00
siax-bot 39c0f75f89 Merge pull request 'fix(deps): next 16.4.1/15.5.28 (GHSA-2464-fhr4-w9xw CRITICAL RCE)' (#20) from fix/next-16.4.1-20261031 into main
ci / sonar (push) Failing after 14s
masterplan-lock / check (push) Successful in 19s
2026-10-31 16:53:43 +00:00
admin d7253f1b77 fix(deps): next 16.4.1 (GHSA-2464-fhr4-w9xw CRITICAL RCE)
masterplan-lock / check (push) Successful in 12s
masterplan-lock / check (pull_request) Successful in 8s
2026-10-31 17:51:51 +01:00
siax-bot 49e939f1df Merge pull request 'fix(deps): patch HIGH/CRITICAL advisories' (#19) from fix/cve-lockfile-2026-09-30 into main
masterplan-lock / check (push) Successful in 8s
ci / sonar (push) Failing after 9s
merge PR #19
2026-10-01 15:52:10 +00:00
Claude CodeandClaude Sonnet 5.5 ddc4cce3eb fix(deps): next 16.3.3 -> 16.3.6 (GHSA-vcvr-r3jv-pc5j, CRITICAL)
masterplan-lock / check (pull_request) Successful in 9s
masterplan-lock / check (push) Successful in 35s
Remote code execution in next/og ImageResponse, fixed in 16.3.6.
Same minor line; the exact pin in package.json moves too and the
lockfile follows (next, @next/env, @next/swc-* platform binaries,
sharp optional range ^0.35.4).

Not fixed here (need a direct-dependency major bump or have no fix):
- nodemailer 9.1.1: GHSA-prgh-xp8r-p3m5 / GHSA-v53p-9fqp-m79j fixed only in 10.0.5/10.0.6 (major)
- xlsx 0.20.3: GHSA-4r6h-8v6p-xvw6 / GHSA-5pgg-2g8v-p4x9 have no published fix

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 18:50:50 +02:00
Claude CodeandClaude Sonnet 5.5 0250b4bab2 fix(deps): patch HIGH/CRITICAL advisories
masterplan-lock / check (push) Successful in 6s
masterplan-lock / check (pull_request) Successful in 33s
Lockfile-level update of the packages trivy flags on main, all within
their current major:

- next 16.3.1 -> 16.3.3 (CVE-2026-75604, CRITICAL)
- js-yaml 4.3.1 -> 4.3.2 (CVE-2026-84375)
- nodemailer 9.0.5 -> 9.1.1 (GHSA-2x7j-588g-ccc2, GHSA-8m3c-c648-2xjj)
- sharp 0.35.3 -> 0.35.5 (GHSA-rgj7-g3m4-5g8c)
- undici 6.28.0 -> 6.29.0 (CVE-2026-19534)
- brace-expansion -> 1.1.21 / 2.1.7 (CVE-2026-102276, CVE-2026-102278, dev)
- minimatch 9.0.5 -> 9.0.9 (CVE-2026-26996/27903/27904, dev)

next, js-yaml and nodemailer were exact-pinned, so their pins move too.
PINNED_DEPS in the antipattern guard follows nodemailer to 9.1.1; without
it the pinned-dep guard fails.

Remaining: nodemailer GHSA-v53p-9fqp-m79j is only fixed in 10.x (major
bump of a direct dependency, left for a separate reviewed change).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 17:17:51 +02:00
admin 23f99f94b9 Merge pull request 'fix(pay): PSP-deklaration (Stripe — kodverifierad)' (#18) from fix/pay-consumer-2026-09-29 into main
masterplan-lock / check (push) Successful in 8s
ci / sonar (push) Failing after 11s
2026-09-29 22:28:03 +00:00
siax-bot 4269404a2c fix(pay): payment-consumer-deklaration med äkta PSP-SDK-scope (Stripe webhook/checkout/connect/sync — kodverifierat)
masterplan-lock / check (push) Successful in 6s
masterplan-lock / check (pull_request) Successful in 10s
2026-09-30 00:23:36 +02:00
admin 91f17af5c8 Merge pull request 'chore(ci): koppla in SonarQube-analys mot självhostad sonar.siax.io' (#16) from chore/sonarqube-analysis into main
ci / sonar (push) Failing after 8s
masterplan-lock / check (push) Successful in 22s
2026-09-28 10:03:14 +00:00
Claude CodeandClaude Sonnet 5 73d24a81cc chore(ci): koppla in SonarQube-analys mot självhostad sonar.siax.io
masterplan-lock / check (push) Successful in 8s
masterplan-lock / check (pull_request) Successful in 7s
accounted: ny sonar-job i .gitea/workflows/ci.yml (endast push mot main)
plus sonar-project.properties. SONAR_TOKEN-secreten sätts INTE av denna
commit -- kräver manuell körning, se PR-beskrivningen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 00:58:42 +02:00
admin b3c8d88f0d Merge pull request 'ci: add missing timeout-minutes and concurrency guards' (#15) from ci/timeout-and-concurrency-guards into main
masterplan-lock / check (push) Successful in 11s
2026-09-27 02:31:24 +00:00
Claude CodeandClaude Sonnet 5 f687158138 fix(ci): add timeout-minutes and concurrency guard to masterplan-lock
masterplan-lock / check (push) Successful in 10s
masterplan-lock / check (pull_request) Successful in 7s
Fleet-wide CI-speed pass: masterplan-lock.yml had no job-level
timeout-minutes (a hung runner could block indefinitely) and triggers
on both push (branches: ["**"]) and pull_request, which runs the same
check twice per PR commit. Add a 10-minute timeout for this cheap
single-check job and a concurrency group (matching the pattern already
used in admin/serv0, admin/s0cial, admin/ppl0, admin/pers0n) to cancel
the superseded duplicate run without changing what triggers CI.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-27 04:30:47 +02:00
admin 9228896b62 Merge pull request 'fix(worklist): skattekonto count-test tidsbomb (förfallodatum passerat)' (#14) from fix/skattekonto-count-timebomb into main
masterplan-lock / check (push) Successful in 6s
2026-09-24 13:17:33 +00:00
Claude Code 5d9b220fa8 fix(worklist): countSkattekontoPaymentDue accepts today — test time-bomb (due date 2026-09-12 expired vs wall clock)
masterplan-lock / check (push) Successful in 6s
masterplan-lock / check (pull_request) Successful in 6s
2026-09-24 15:16:46 +02:00
admin e0d2923d4c Merge pull request 'fix(ci): use internal pinned action mirrors' (#13) from fix/internal-action-mirrors into main
masterplan-lock / check (push) Successful in 8s
2026-09-24 12:43:19 +00:00
Claude Code a909043176 fix(ci): use internal pinned action mirrors (github.com egress flaky from runners)
masterplan-lock / check (push) Successful in 12s
masterplan-lock / check (pull_request) Successful in 11s
2026-09-24 14:42:40 +02:00
admin e60f2af6cd Merge pull request 'chore(deps): update dependency mailparser to v3.9.28' (#11) from renovate/mailparser-3.x-lockfile into main
masterplan-lock / check (push) Failing after 38s
2026-09-24 12:11:19 +00:00
admin c90ccc9c42 Merge branch 'main' into renovate/mailparser-3.x-lockfile
masterplan-lock / check (pull_request) Failing after 36s
masterplan-lock / check (push) Failing after 7m33s
2026-09-24 12:11:15 +00:00
admin 7b0e59257e Merge pull request 'chore(deps): update dependency vitest to v4.1.11' (#12) from renovate/vitest-monorepo into main
masterplan-lock / check (push) Failing after 5m28s
2026-09-24 12:11:12 +00:00
Renovate 14e6aead84 chore(deps): update dependency vitest to v4.1.11
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (pull_request) Successful in 10s
masterplan-lock / check (push) Successful in 12s
2026-09-24 03:08:10 +00:00
Renovate 4986cfe27b chore(deps): update dependency mailparser to v3.9.28
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (push) Successful in 9s
masterplan-lock / check (pull_request) Successful in 11s
2026-09-24 03:07:58 +00:00
Claude Code 48c762f7e0 feat(estate): härlett siax.repo.v3.json (estate-manifest-gen v0)
masterplan-lock / check (pull_request) Successful in 13s
masterplan-lock / check (push) Successful in 58s
Tekniska fält härledda ur checkouten (runtime, gitHost/canonicalRemote,
neutrala persistence/observability/reliability — aldrig påstådda).
POLICY-FÄLT (tier/category/appId) är neutral-baseline MED appIdJustification
som säger att ägaren ska sätta dem (D4) — förgranska och korrigera.
2026-09-24 01:22:27 +02:00
admin 2046ef4089 Merge pull request 'chore(deps): update dependency eslint to v9.39.5' (#8) from renovate/eslint-monorepo into main
masterplan-lock / check (push) Successful in 37s
Reviewed-on: sax3l/accounted#8
2026-09-23 21:22:05 +00:00
admin 66e65390c2 Merge branch 'main' into renovate/eslint-monorepo
masterplan-lock / check (push) Successful in 22s
masterplan-lock / check (pull_request) Successful in 39s
2026-09-23 21:21:55 +00:00
admin ac88b1a6a0 Merge pull request 'chore(deps): update dependency jszip to v3.10.2' (#9) from renovate/jszip-3.x-lockfile into main
masterplan-lock / check (push) Successful in 14s
2026-09-23 21:20:07 +00:00
Renovate 592cfd1ed7 chore(deps): update dependency jszip to v3.10.2
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (pull_request) Successful in 8s
masterplan-lock / check (push) Successful in 9s
2026-09-23 03:05:16 +00:00
Renovate 3299eeec47 chore(deps): update dependency eslint to v9.39.5
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (push) Successful in 10s
masterplan-lock / check (pull_request) Successful in 9s
2026-09-23 03:05:13 +00:00
admin e1484e74f9 Merge pull request 'fix(deps): replace dependency framer-motion with motion' (#4) from renovate/framer-motion-replacement into main
masterplan-lock / check (push) Successful in 13s
2026-09-22 11:00:36 +00:00
admin dd1c05f114 Merge branch 'main' into renovate/framer-motion-replacement
masterplan-lock / check (push) Successful in 5s
masterplan-lock / check (pull_request) Successful in 1m15s
2026-09-22 10:20:19 +00:00
admin 5f2df18abe Merge pull request 'chore(deps): update dependency @supabase/ssr to v0.12.7' (#5) from renovate/supabase-ssr-0.x-lockfile into main
masterplan-lock / check (push) Successful in 6s
2026-09-22 10:20:18 +00:00
admin 8e8c8f66a4 Merge branch 'main' into renovate/supabase-ssr-0.x-lockfile
masterplan-lock / check (push) Successful in 6s
masterplan-lock / check (pull_request) Successful in 7s
2026-09-22 10:20:04 +00:00
admin 4bc9bb64bc Merge pull request 'chore(deps): update dependency @upstash/redis to v1.38.4' (#6) from renovate/upstash-redis-1.x-lockfile into main
masterplan-lock / check (push) Successful in 1m24s
2026-09-22 10:20:02 +00:00
Renovate 5aabd3d41a chore(deps): update dependency @upstash/redis to v1.38.4
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (pull_request) Successful in 6s
masterplan-lock / check (push) Successful in 11s
2026-09-22 03:07:46 +00:00
Renovate 1169e0ddff chore(deps): update dependency @supabase/ssr to v0.12.7
renovate/stability-days Updates have met minimum release age requirement
masterplan-lock / check (push) Successful in 5s
masterplan-lock / check (pull_request) Successful in 5s
2026-09-22 03:07:39 +00:00
Renovate 8ef8e8bb52 fix(deps): replace dependency framer-motion with motion
renovate/stability-days Updates have not met minimum release age requirement
masterplan-lock / check (pull_request) Successful in 16s
masterplan-lock / check (push) Successful in 16s
2026-09-22 03:07:31 +00:00
admin 11f02686d5 Merge pull request 'chore: Configure Renovate' (#1) from renovate/configure into main
masterplan-lock / check (push) Successful in 6s
2026-09-21 21:39:09 +00:00
admin feb5e765f2 Merge branch 'main' into renovate/configure
masterplan-lock / check (push) Successful in 5s
masterplan-lock / check (pull_request) Successful in 1m20s
2026-09-21 21:20:56 +00:00
admin e4c35c344d Merge pull request 'chore(backup): initial siax.backup-post (RW-002)' (#3) from chore/backup-post-2026-09-21 into main
masterplan-lock / check (push) Successful in 5s
2026-09-21 02:47:23 +00:00
siax-ci 0b296b927f chore(backup): initial backup-policy post (RW-002 automat) — källa: flottloggar
masterplan-lock / check (push) Successful in 6s
masterplan-lock / check (pull_request) Successful in 1m13s
2026-09-21 02:41:06 +00:00
admin 6a0ba9faaa Merge pull request 'feat(toolchain): W4-slutvåg — mise task-kontrakt + lefthook + template-pin + dokumentation' (#2) from feat/selected-toolchain-w4 into main
masterplan-lock / check (push) Successful in 7s
2026-09-15 00:38:13 +00:00
admin 42241a9ad3 feat(toolchain): W4-slutvåg — mise task-kontrakt (genererad ur toolchain-discovery) + lefthook + template-pin + dokumentation
masterplan-lock / check (push) Successful in 8s
masterplan-lock / check (pull_request) Successful in 5s
2026-09-15 02:30:45 +02:00
admin 07eb82af5d feat(toolchain): W4-slutvåg — mise task-kontrakt + lefthook + template-pin + dokumentation
masterplan-lock / check (push) Successful in 5s
2026-09-15 02:28:57 +02:00
Renovate 97e17964ad Add renovate.json
masterplan-lock / check (push) Successful in 16s
masterplan-lock / check (pull_request) Successful in 6s
2026-09-11 03:05:21 +00:00
siax-bot 5b7015d88d fix(plan): komplettera lock-scriptet-krav (aldrig egen SQL, frontend-tenant-trust, PRODUCTION_READY)
masterplan-lock / check (push) Successful in 5s
2026-09-10 13:30:37 +02:00
siax-bot d8463e7ffe feat(scaffold): SIAX masterplan-lock-gate + PLAN/MASTERPLAN_INDEX.md integrering
masterplan-lock / check (push) Failing after 5s
2026-09-10 13:27:19 +02:00
MattssonandClaude Fable 5.1 51f05ffeba feat(dashboard): dismissible system notice banner for every signed-in user (#2464)
CodeQL / Analyze (javascript-typescript) (push) Failing after 10m53s
CodeQL / Analyze (actions) (push) Failing after 10m43s
Build and Push Docker Image / Build linux/arm64 (push) Has been cancelled
Build and Push Docker Image / Merge, sign and scan (push) Has been cancelled
Build and Push Docker Image / Build linux/amd64 (push) Failing after 3m4s
Workflow audit (zizmor) / Audit workflows (push) Failing after 5m54s
* feat(dashboard): dismissible system notice banner for every signed-in user

Operator-set banner ("high load right now, some pages may respond slowly
or fail") rendered under the dashboard chrome for every signed-in user
while NEXT_PUBLIC_SYSTEM_NOTICE_UNTIL (ISO timestamp with offset) is in
the future. Closing it stores the deadline in localStorage, so each
browser sees it once; the banner hides itself at the deadline in open
tabs and is not rendered at all after it.

Why the problem occurred: there was no way to tell every user something
about the system itself. The existing banners are all per-company state
(sandbox, seat grace), so an operator notice had no home.

What was removed or simplified instead: no notices table, no migration,
no admin UI. One public env var carries both the on/off switch and the
expiry, and the same value is the dismiss key, so a later notice re-shows
once without any code change. No DB read, which matters because the
first use is a DB restart window.

Why this over the proposed shape: the request was a banner "until 23:00
tonight". Hardcoding that in code would need a second PR to switch off
or reuse; a DB-backed notice would read the database that is about to
go down. The env var expires on its own, and unset means gone.

Fixes #2463

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs9PfHL7KpdidvUdxVkHXF

* fix(dashboard): system notice survives long deadlines, blocked storage, and every layout shell

Skeptic findings on 839a255f3:
- setTimeout clamps delays above 2^31-1 ms to ~1 ms, so a deadline more
  than 24.8 days out hid the banner instantly. Wait in bounded steps and
  re-check the clock.
- window.localStorage is a throwing property access when a browser blocks
  site data; read it behind a try so the dashboard never crashes over a
  notice.
- The close button was a hand-rolled 22px icon button; design.md requires
  the shadcn icon Button (40px target).
- The byrå-consultant shell and the stale-cookie shell rendered no banner,
  so "every signed-in user" was not true. The banner is now computed once,
  before the shell branches, and mounted in all three.

Refs #2463

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs9PfHL7KpdidvUdxVkHXF

* fix(dashboard): system notice deadline requires a UTC offset

A date-time without Z or a numeric offset parses as local time, which is
UTC on Vercel and the operator's zone locally, so the same value would
mean different instants. Reject it instead (CodeRabbit on #2464).

Declined: scoping the dismissal key by user id. The notice is about the
system, not the account; per-browser dismissal is the sandbox banner's
semantics and keeps identity out of layout chrome.

Refs #2463

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fs9PfHL7KpdidvUdxVkHXF

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-10 13:15:27 +02:00
MattssonandClaude Fable 5.1 a84d2723e0 feat(import): keep the source system's #BTRANS/#RTRANS correction history at SIE import (#2458)
* feat(import): keep the source system's #BTRANS/#RTRANS correction history at SIE import

A verifikat migrated from Fortnox/Visma lost the trail of what had been
corrected in the source system: the parser skipped #BTRANS (struck lines)
and #RTRANS (lines added by a rättelse) and nothing else read them. The
final state is still built from #TRANS only, exactly as SIE 4B prescribes
(#RTRANS is always twinned by an identical #TRANS, so summing all three
double-counts, #63). The two history record types now ride along the
voucher as `corrections` and land, inside the same atomic import
transaction, as one journal_entry_rattelse_log row per corrected voucher
with source='sie_import', the file's sie_import_id and the SIE `sign`
(who corrected in the source system; SIE carries who, never when).

Why the problem occurred: the March fix for double-counting chose "skip"
over "keep aside" because nowhere existed to keep the history. The inline
rättelse log (July) created that place, and every reader of it (verifikat
page, "Rättad" marker, behandlingshistorik, full archive) already renders
struck/added snapshots, so the history now flows through one table.

What was removed or simplified instead: no new table, no per-import
toggle, no fifth RPC parameter (sie_import_id travels inside each payload
entry so the (uuid,uuid,uuid,jsonb) signature, grants and
statement_timeout stay put and PostgREST sees no overload). The parser's
three identical TRANS/RTRANS/BTRANS field parsers collapsed into one
helper; the TRANS-only ledger path is byte-for-byte the same.

Why this over the proposed shape: the reporter suggested an own table or
column. A separate store would need its own readers, RLS, archive
classification and behandlingshistorik wiring; the rättelselogg already
has all four. Storing history in sie_imports.migration_documentation was
rejected as aggregate JSON that no per-verifikat surface reads.
Import-sourced log rows survive undo/replace like every other log row
(no FK on purpose); a re-import writes fresh rows against fresh entry ids.

Parser also warns when an #RTRANS is not followed by its identical #TRANS
twin (a spec violation that would silently drop a line from the final
state) and the record-type comments now match the spec wording.

Migration 20260909132618: three nullable/defaulted columns + CHECKs on
journal_entry_rattelse_log, sie_correction_snapshots() helper,
import_sie_journal_entries body verbatim plus the history insert. No
backfill; existing imports and log rows untouched.

Fixes #2427

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W2FcXNv8qRp4GaXCtzEdyn

* fix(import): verify the SIE import id before it becomes provenance, keep per-line signatures

Review findings on PR #2458, one pass:

- Superagent P2: import_sie_journal_entries stored the caller-supplied
  sieImportId as WORM audit provenance without checking it. The RPC now
  requires the id to be one of the importing company's own sie_imports
  rows and fails closed (42501, whole import rolled back) on a foreign
  or fabricated id. pg-real test added.
- Compliance review: the voucher-level external_signature collapsed
  distinct correctors per line. Each struck/added snapshot now carries
  its own SIE sign (importer + sie_correction_snapshots), the summary
  column stays as the first one.
- Compliance review: created_at on imported rows is the import moment.
  Behandlingshistoriken now says so in the event details instead of
  leaving it implicit (the verifikat page already avoided a date).

Migration file is unshipped (not on main); staging re-applied under the
same version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W2FcXNv8qRp4GaXCtzEdyn

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 14:45:29 +02:00