* feat(registry): move community registry source of truth into the public repo
The site's registry page says "Lägg till en egen" and links here, but the
MDX entries lived in the private website repo, so an external contributor
had no path to open the PR we were inviting (found by the first person who
tried). This makes the invitation real:
- registry/entries/ + registry/authors/ hold the 20 existing entries and
2 author profiles, migrated verbatim from the website repo, which now
syncs FROM this directory instead of owning the content
- registry/README.md documents the frontmatter convention and the flow
- scripts/validate-registry.ts (npm run validate:registry, wired into
core-build) checks structure and rejects JSX/import/export in bodies:
the site renders entries through MDX, which would execute those inside
the website build
- CONTRIBUTING.md points at the registry for listing community work
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
* fix(registry): close MDX-safety gaps and correct six compliance claims from PR review
Review bot findings on #1458, both verified and addressed:
- The body safety gate only rejected capitalized JSX tags, but MDX also
evaluates lowercase HTML tags (<div>, <img onerror=...>) and bare {...}
expressions. The validator now rejects any raw tag and any brace outside
fenced code and backtick inline code; literal tags in prose go in
backticks. Verified: a crafted entry with all three bypasses fails, all
existing content still passes.
- Six factual errors in migrated entries, each checked against the skill
sources in .claude/skills/ before editing (these were live on the site
already): traktamente 2026 is 300 kr not 260; employer contributions for
66+ at year start (67+ from 2026) are 10.21% not "65+: 16.36%", and the
under-18 0% claim is replaced with the documented 18-22 youth reduction;
electronics reverse-charge threshold is 100 000 kr excl VAT per invoice
not 250 000; half prisbasbelopp 2026 is 29 600 not 24 750; kostnadsställe
is SIE dimension 1 not 7; SRU period suffixes encode the fiscal-year end
range (P1 jan-apr, P2 maj-aug, P4 sep-dec) not fixed months.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
---------
Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>