# Erfaring: Access-propagering for chat-meldinger (mars 2026)

## Problemet

Bot-svar i chatter var usynlige for brukere. Meldingene ble
skrevet til PG, men brukerne hadde ingen `node_access`-rad
for dem. Frontend filtrerte dem bort som "hidden".

## Rotårsak

`synops-respond` (og `chat-reply.sh`) opprettet svar-noder med
`visibility: 'hidden'` og `belongs_to`-edge til chatten, men
propagerte ikke `node_access` til chat-deltakerne.

Maskinrommets intention-system (create_node med context_id)
propagerer access automatisk. Men verktøy som skriver direkte
til PG må gjøre det selv.

## Fiks

Etter INSERT av belongs_to-edge, propager access til alle
deltakere i chatten:

```sql
INSERT INTO node_access (subject_id, object_id, access, via_edge)
SELECT e.source_id, $reply_id, 'reader', $edge_id
FROM edges e
WHERE e.target_id = $communication_id
AND e.edge_type IN ('owner', 'member_of')
ON CONFLICT DO NOTHING
```

## Lærdommer

1. **Alle som skriver til PG direkte må propagere access.**
   Maskinrommets intention-system gjør det automatisk, men
   CLI-verktøy, scripts og direkte INSERT gjør det ikke.
   Det er lett å glemme — og resultatet er usynlige noder.

2. **Test med en annen bruker.** Utvikleren ser egne noder
   uansett (created_by). Buggen er bare synlig for *andre*
   deltakere i chatten.

3. **WebSocket-filtrering forsterker problemet.** Selv om
   noden er i PG, filtrerer portvokteren den bort for
   brukere uten access. Dobbel usynlighet.

## Påvirket kode

- `tools/synops-respond/src/main.rs` — fikset
- `scripts/chat-reply.sh` — hadde allerede propagering
- Alle andre verktøy som skriver noder med belongs_to-edge
  bør sjekkes
