synops/maskinrommet
vegard e25b5a11ef Valider fase 13–14: fiks size-inkonsistens, sikkerhet og konsistens i traits + publisering
Feil funnet og fikset:

1. truncate() UTF-8-panikkfeil: Brukte byte-indeksering s[..max] som
   panikker på flerbyte-tegn (æ, ø, å). Byttet til char_indices().

2. VALID_TRAITS manglet 'mixer' og 'ai_tool': Dokumentert i
   docs/primitiver/traits.md men avvist av backend-validering.

3. Planlagte artikler synlige før publish_at: serve_article og alle
   listevisninger (forside, arkiv, kategori, søk) eksponerte artikler
   med fremtidig publish_at. Lagt til tidsfiltere i alle spørringer.

4. A/B klikk-attribusjon logget alle varianter: serve_article logget
   klikk for ALLE aktive varianter ved direkte artikkelbesøk, ikke
   bare den viste. Fjernet feilaktig attribusjon — klikk logges kun
   via track_click-endepunktet med spesifikk variant-parameter.

5. JSON-LD XSS via </script>: serde_json escaper ikke </script>-
   sekvenser, så brukertitler kunne bryte ut av <script>-blokken.
   Lagt til .replace("</", "<\\/") etter serialisering.

6. Hardkodet farge i search.html: Brukte rgba(233,69,96,0.1) i stedet
   for tema-variabel. Byttet til color-mix() med --color-accent.

Nye tester: truncate med UTF-8, truncate kort streng, JSON-LD XSS-escape.
2026-03-18 15:27:38 +00:00
..
src Valider fase 13–14: fiks size-inkonsistens, sikkerhet og konsistens i traits + publisering 2026-03-18 15:27:38 +00:00
.gitignore Maskinrommet Rust-skjelett med Dockerfile (oppgave 2.1) 2026-03-17 12:20:39 +01:00
Cargo.lock WebSocket-lag i portvokteren: PG LISTEN/NOTIFY + WS-endepunkt (oppgave 22.1) 2026-03-18 11:54:34 +00:00
Cargo.toml WebSocket-lag i portvokteren: PG LISTEN/NOTIFY + WS-endepunkt (oppgave 22.1) 2026-03-18 11:54:34 +00:00
Dockerfile Skrivestien: POST /intentions/create_node (oppgave 2.4) 2026-03-17 13:09:50 +01:00