12 · Signalen en voorkeuren — wat we weten, wat ontbreekt, en de weg naar de graaf

Onderzoeksagent R12 · 24 september 2026 · alleen lezen in ~/Developer/mi-casa-presentatie, niets gewijzigd, geen git, geen sleutels geraadpleegd. Bronnen: code-commentaarkoppen, server/README.md, OVERDRACHT.md §4/§7, CONCEPT-V3.md §6–9/§13, brainstorm 10/11/13/15, onderzoek/07-recht-en-ethiek.md.

Samenvatting in tien regels

  1. We tellen al veel, maar bijna alles is óf per persoon (web, tafel, fans) óf volledig anoniem zonder vorm (bewijsbord). Er is nog niets ertussenin: geaggregeerd, met een thema.
  2. "Leuk vinden" zien we alleen indirect: een ♥, een beantwoorde kleine vraag, warm/griezelig. Geen van die signalen wordt geteld per thema, straat of bouwperiode.
  3. De rijm-thema's (ochtend·licht·buiten·rust·beneden·tuin·water·ov, teksten.json sleutel rijm.themas) worden live herkend in elk gesprek, maar nergens bijgehouden na afloop.
  4. Chip-keuzes ("Wat weet je nog meer?", "Bewaar mijn huis") tellen expliciet niet mee in het bewijsbord — lib/telling.mjs noemt ze met naam als voorbeeld van wat bewust ongeteld blijft.
  5. Precedent bestaat al: de Mi Data-toggle "wijkscore" (routes/midata.mjs, D15/D44) is voorbereid als opt-in doel, maar er is nog geen wijkscore die hij voedt.
  6. Het huis-web (lib/web-graaf.mjs) is al een graaf met knopen en kanten in twee talen — het juiste schema om een geaggregeerde laag náást te zetten, niet in.
  7. De harde grenzen (OVERDRACHT §4) raken deze laag rechtstreeks: geen coördinaten, geen prijs, en aggregatie moet aggregatie blíjven, ook in het ontwerp van de teller zelf.
  8. Een geaggregeerde kant heeft dezelfde vorm als een feitelijke kant (huis→bron, feit→bron), maar zijn bron is nooit een register — "wat mensen hier zeiden", nooit "wie", zichtbaar in de graaf zelf.
  9. Voor zaterdag kan het bewijsbord (al gebouwd, al gepland om 0:40) zonder nieuwe bouw getoond worden; een thema-telling voor de sessie zelf is met een paar uur werk haalbaar.
  10. Wat we niet weten: of het huidige bezoekersvolume snel genoeg de drempel van vijf haalt om iets zinnigs te laten zien — een meetvraag, geen ontwerpvraag.

2 · Inventaris — signalen die we al vastleggen

Signaal Zegt over "leuk vinden" Persoon of geaggregeerd Waar Bewaard In de graaf?
♥ op een huis sterkste signaal: iemand koos dit huis per persoon (persoonId+huisId) lib/fans.mjs, staat.fans blijvend, tot wis/reset ja — knoop fans + naamloze fan-knopen met maand
Gast-♥ zelfde, vóór login per apparaat, niet per persoon web/src/lib/gastharten.js, localStorage tot login (dan overgedragen) of browser wist hem nee, pas na draagOver()
Wensen / rijm-thema's welk thema (water, ochtend, tuin, …) iemand noemt per gesprek, live, niet bewaard lib/gesprek/wijk.mjs (herkenThemas), thema's in teksten.json niet — alleen gebruikt om drie straten te kiezen nee
Antwoorden kleine vragen expliciete, zelfgekozen zin over het huis per persoon, bron gezegd lib/relaties.mjs, staat.relaties+relatieVragen blijvend, tot correctie/wis ja — knoop zin
Reacties per station warm/griezelig/weet-niet, vijf plekken anoniem: station+oordeel+tijd routes/bewijs.mjs, staat.reacties blijvend (wél mee in reset) nee — eigen bord
Vragen aan brein (kennisbank) welke vraag vaak genoeg is om te cachen geaggregeerd op vraag+straat/wijk lib/gesprek/brein-kennisbank.mjs 30 dagen (schijf) nee
Dingen op tafel wat een eigenaar zag en hield per persoon/huis, met wanneer/sinds lib/tafel.mjs, staat.tafel blijvend, verliesvrij ja — direct gelezen
Stemgebruik zin kreeg geluid (cache/vers) geaggregeerd getal/dag, geen tekst lib/telling.mjs stemzinnen, routes/stem.mjs blijvend (niet in reset) nee
Chips (nog meer/bewaar) welke vervolgstap iemand kiest niet geteld — telling.mjs noemt ze als voorbeeld van wat bewust ongeteld blijft — — nee
Bewijsbord-tellers 6 gebeurtenissen: gesprek, bevestiging, huis-paneel, strookje, vel, stemzin geaggregeerd/dag+totaal lib/telling.mjs, tabel tellers groep bewijs blijvend (niet in reset) nee
Keuzes (D-besluiten) teamkeuze, geen bezoekerssignaal intern, met wie besliste lib/keuzes.mjs blijvend nee, hoort er ook niet
Tijden in de tafel wanneer iets laatst op tafel kwam per persoon lib/tafel.mjs blijvend ja — bestaande velden

3 · Wat ontbreekt en goedkoop toe te voegen is

Signaal Vorm van de gebeurtenis Aggregatie Wat we ermee doen
Weetje krijgt ♥ of "nog een" soort: 'weetjeGeliked'/'weetjeNogEen', bouwjaarDecennium+taal per decennium, k ≥ 5 Carmen kiest vaker het type dat elders aansloeg
Welke chip gekozen wordt soort: 'chipGekozen', chip-sleutel + stap per dag/stap, k ≥ 5 oogst richt zich op stappen waar men vastloopt
Tijd dat een kaartje in beeld staat afgerond (bucket 0–5s/5–15s/15s+), nooit een losse tijdstempel per soort kaartje, k ≥ 5 signaal voor "dit werkt", nooit individueel
Welk soort feit een vervolgvraag krijgt soort: 'vervolgvraagOp', feit.soort per soort feit/wijk, k ≥ 5 Carmen leert wat nieuwsgierig maakt
Thema's in wensen, per wijk soort: 'wensThema', thema-sleutel uit rijm.themas + wijk-code per wijk/thema/maand, k ≥ 5 voedt het "weerbericht van behoeften" (v3 §13)
Vaakst gevraagde straten soort: 'straatGevraagd', straat-sleutel (normalisatie als bewijs.mjs) per straat, k ≥ 5 Carmen weet welke straat eerst een redactie verdient
Vaakst voorgelezen weetjes soort: 'weetjeVoorgelezen', jaar/decennium, geen tekst per decennium, k ≥ 5 stuurt welke jaarweetjes-categorie breder aanslaat

(Alle sleutels landen in dezelfde tellerstabel, §4.) Geen cijfers hier: er is nog geen gemeten volume.

4 · De signalenlaag: schema en regels

Eén gebeurtenistabel, naar het patroon van lib/telling.mjs (tabel tellers, een groep en een sleutel die je ophoogt — geen rij per gebeurtenis, één teller per combinatie):

groep: 'signalen'
sleutel: '<soort>:<dag>:<wijkCode|"-">:<straatCode|"-">:<bouwjaarDecennium|"-">:<thema|"-">:<taal>'
waarde: geheel getal

5 · Naar de graaf

Nieuwe, geaggregeerde kanten (nooit vertrekkend vanuit een jij-knoop):

Herkenbaar naast de feitelijke kanten. De bestaande kanten weet-uit/komt-uit wijzen naar een bron-knoop met een uitgever (BAG, EP-Online, Wikipedia, …). Een geaggregeerde kant krijgt dezelfde vorm maar wijst naar een bron-knoop "Mi casa su casa, bezoekers" (analoog aan de bestaande bron "Mi casa su casa, demo") — nooit een naam, altijd "wat mensen hier zeiden". Dat houdt het spraakrecht uit relaties.mjs (magKlinken) overeind: een geaggregeerd gegeven is geen gezegd-relatie van één persoon en krijgt dus geen ik-vorm in de mond van een huis — het is weerbericht, geen citaat.

Drie inzichten, realistisch binnen een maand, gegeven dat vandaag alleen Wittevrouwen als pilot-wijk draait (OVERDRACHT.md §3):

  1. Thema-verdeling van wensen binnen Wittevrouwen, per straatcluster i.p.v. per wijk (er is er nog maar één) — een eerste, kleine versie van het "weerbericht van behoeften" (brainstorm 15 §3).
  2. Welk station (deur/huis/straat/wijk/web) het vaakst "griezelig" scoort — bestaat al (routes/bewijs.mjs), geen nieuwe bouw nodig, precies het gesprek van 0:40 zaterdag.
  3. Welk type vervolgvraag (chip) het vaakst volgt op welk soort feit — pas mogelijk zodra §3/§4 gebouwd is, met beperkt werk (twee, drie plekken in machine.mjs).

Eerlijk erbij: of 1 en 3 de drempel van vijf binnen een maand halen, hangt af van hoeveel bezoekers door de wijk bladeren — een meetvraag, geen ontwerpvraag.

6 · Voor de teamsessie van zaterdag

Zonder nieuwe bouw: het bewijsbord staat al op het programma (TEAMSESSIE.md, 0:40 "Warm of griezelig") en telt al zes gebeurtenissen plus reacties per station — een eerste "de stad droomt"-bord, alleen nog zonder thema.

Met een paar uur, licht en tijdelijk: tel tijdens de sessie zelf, in het geheugen van het proces (geen nieuwe opslag, geen migratie), hoe vaak herkenThemas() elk thema herkende in de wensen die de zaal typt — een eerlijk, live staafje "waar de zaal vandaag van droomde", zonder de grenzen te raken.

Het eerlijke verhaal: we weten nog niet welk weetje echt raakt, welke chip het vaakst gekozen wordt, of welke straat het meest gevraagd wordt — een gat in het meten, niet in het ontwerp, en precies wat deze signalenlaag oplost zodra hij er is.

7 · Plan op agent-niveau

Stap Agent/model Uren Risico
1. Schema + drempel vastleggen (soort, buckets, k-waarde) Opus (privacygevoelig ontwerp) 2–3 Veldtype ontbreekt, later alsnog migratie nodig
2. Teller-module naar patroon telling.mjs (groep signalen) Sonnet 2–3 Kopieerfout t.o.v. bestaand hoogOp-patroon
3. Event-hooks per signaal (wijk.mjs, machine.mjs, brein-tools) Sonnet 4–6/soort Dubbeltelling of verkeerd moment — telling.mjs liep hier zelf al tegenaan
4. Drempel-laag (k ≥ 5) + route die alleen geaggregeerd teruggeeft Sonnet, Opus-review op privacylogica 3–4 Drempel per ongeluk client-side i.p.v. server-side
5. Graaf-uitbreiding, apart van web-graaf.mjs (dat blijft het huis-web) Opus (architectuur), Sonnet (bouw) 6–8 Vermenging van per-huis- en geaggregeerde conventies
6. Weigertest-suite naar patroon 07-recht-en-ethiek.md §6 Sonnet 3–4 Edge case net onder drempel (k=4) niet getest
7. Lichte, tijdelijke thema-telling voor zaterdag (los van 1–6) Haiku/Sonnet 1–2 Te laat af vóór 26-09 — moet als eerste, niet als laatste
8. QA en privacy-review tegen OVERDRACHT §4 Fable (regie + eigen QA) 2 —

8 · Waar de jurist later naar moet kijken (kort, niet remmend)


Niet vastgesteld: er is geen enkele bestaande aggregatie van thema/straat/weetje-frequentie aangetroffen in de code — sectie 3 is dus een ontwerp, geen beschrijving van iets dat al draait. Ook is onbekend hoeveel verkeer de pilot vandaag draait, dus of de drempel k ≥ 5 binnen een maand gehaald wordt, kon ik niet vaststellen.