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
- 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.
- "Leuk vinden" zien we alleen indirect: een ♥, een beantwoorde kleine vraag, warm/griezelig. Geen van die signalen wordt geteld per thema, straat of bouwperiode.
- De rijm-thema's (
ochtend·licht·buiten·rust·beneden·tuin·water·ov,teksten.jsonsleutelrijm.themas) worden live herkend in elk gesprek, maar nergens bijgehouden na afloop. - Chip-keuzes ("Wat weet je nog meer?", "Bewaar mijn huis") tellen expliciet niet mee in het
bewijsbord —
lib/telling.mjsnoemt ze met naam als voorbeeld van wat bewust ongeteld blijft. - 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. - 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. - 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.
- 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.
- 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.
- 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
soortuit een vaste lijst (zoalsSOORTENintelling.mjs): onbekende soorten tellen niet.- Geen
persoonId, geen sessie-id, geen IP, geen vrije tekst. Alleen buckets: wijk-code (niet straatnaam, tenzij het signaal per straat is), bouwjaar afgerond op tien jaar, thema-sleutel uit een vaste lijst, dag (Amsterdam, zoalsdagVan()), taal. - Geen rauw event-log. Zoals bij
telling.mjs: de teller gaat meteen omhoog, er wordt geen losse rij met tijdstip en context bewaard — zo dwingt de code "geaggregeerd, nooit per persoon" af. - Drempel k ≥ 5 vóór iets van deze laag naar buiten gaat — strenger dan het bestaande fan-voorbeeld ("van de dertien schreven er vier over licht", v3 §9, dat op "meer dan één" zit). Onder de drempel bestaat het getal wel in de tabel, maar geeft geen route het terug.
- Eigenaar ziet: alles van zíjn eigen huis, ook onder de drempel (zoals nu bij tafel en web). Bezoeker/zoeker ziet: nooit iets over een individueel huis of andermans straat; hooguit een wijk-brede zin bij k ≥ 5, in dezelfde toon als het fan-voorbeeld.
- Bewaartermijn: de tellers blijven staan zoals het bewijsbord vandaag blijft staan (niet geraakt
door
POST /api/reset, dit is bewijs voor de zaal, geen demo-data) — zie §8 voor de juridische vraag of dat zonder einddatum mag. - Demo-modus: verandert nergens gedrag; voegt alleen een paneel toe aan het bestaande bewijsbord
(
/#/bewijs) — precies "demo-modus verbergt presentatie, nooit gedrag" (D51).
5 · Naar de graaf
Nieuwe, geaggregeerde kanten (nooit vertrekkend vanuit een jij-knoop):
thema—vaak-gewenst-in→wijk, eigenschappen{ aantal, periode }weetje—vaak-leuk-gevonden-bij→bouwperiode(decennium-knoop, nieuw)straat—vaak-gevraagd→wijk(of een teller-eigenschap op de bestaande straat-knoop)soort feit—krijgt-vervolg→themaofwijk, afhankelijk van wat het feit is
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):
- 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).
- 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. - 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)
- Of k ≥ 5 volstaat, of hoger moet in een kleine wijk met weinig verkeer (open vraag, brainstorm 10 §"Later toetsen").
- Of wijk + bouwperiode + thema, ook geaggregeerd, bij een kleine steekproef herleidbaar wordt — het uitsluitingsrisico dat 07-recht-en-ethiek en brainstorm 11 al signaleren, nu op een nieuwe telling.
- Bewaartermijn van de tellers: mogen ze zonder einddatum blijven, of moeten ze net als een relatie "afkoelen"?
- Grondslag voor het tellen van
gedaan/afgeleid-achtig gedrag ten behoeve van een geaggregeerd getal, ook al mag het nooit individueel klinken (magKlinken()) — is aggregeren zelf al een aparte verwerking? - Verhouding tot de Mi Data-toggle "wijkscore" (D15/D44): dezelfde belofte, of moet hij expliciet gekoppeld worden voordat hij iets telt?
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.