Changeset 72d8eff in Klonkt for src/services/guardianship/gated.js
- Timestamp:
- 08/07/2026 07:16:27 PM (5 weeks ago)
- Branches:
- main
- Children:
- a66266d
- Parents:
- 01fb44f
- git-author:
- Robin <roboburr@…> (08/07/2026 07:16:25 PM)
- git-committer:
- roboburr <roboburr@…> (08/07/2026 07:16:27 PM)
- File:
-
- 1 edited
-
src/services/guardianship/gated.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/guardianship/gated.js
r01fb44f r72d8eff 97 97 export function gateRows({ settings = {}, guardianCount = null, proposals = [], waiting = {} } = {}) { 98 98 return GATE_CATALOGUE.map((g) => { 99 const value = Object.prototype.hasOwnProperty.call(settings, g.feature) ? settings[g.feature] : null; 99 // Een stand kan drie dingen zijn: beslist-aan, beslist-uit, of de standaard 100 // omdat er nooit iets besloten is. Dat derde als "uit" tonen zou een besluit 101 // suggereren dat niemand nam. 102 const raw = Object.prototype.hasOwnProperty.call(settings, g.feature) ? settings[g.feature] : null; 103 const beslist = raw && typeof raw === 'object' ? !!raw.decided : (raw === true || raw === false); 104 const value = raw && typeof raw === 'object' ? raw.value : raw; 100 105 // De trap: het bovenliggende moet OPEN staan. Onbekend telt niet als dicht -- 101 106 // bij een ward elders kennen we de stand niet, en verbergen betekende daar 102 107 // ooit dat een voorstel nooit geopend kon worden. 103 const blockedBy = g.needs && settings[g.needs] === false ? g.needs : null; 108 const bovenliggend = settings[g.needs]; 109 const bovenWaarde = bovenliggend && typeof bovenliggend === 'object' ? bovenliggend.value : bovenliggend; 110 const bovenBeslist = bovenliggend && typeof bovenliggend === 'object' ? bovenliggend.decided : (bovenWaarde === true || bovenWaarde === false); 111 // Alleen dichthouden als we ZEKER weten dat het bovenliggende uit staat. 112 const blockedBy = (g.needs && bovenBeslist && bovenWaarde === false) ? g.needs : null; 104 113 return { 105 114 feature: g.feature, … … 107 116 reversible: !!g.reversible, 108 117 value, 118 decided: beslist, 109 119 // Vast staat vast: tonen mag, verzetten niet. 110 120 adjustable: !g.fixed && !blockedBy, … … 274 284 } 275 285 286 /** 287 * De stand van een gate zoals DEZE guardian hem kent. 288 * 289 * Er zijn geen lokale accounts: elke ward woont op een andere server, dus de 290 * kolom op onze eigen sites-tabel is voor een ward altijd leeg. Wat een guardian 291 * wel heeft is de UITSLAG van besluiten -- een geaccepteerd voorstel met waarde 292 * true betekent dat de poort openging. 293 * 294 * Geeft { value, decided }: 295 * decided true we hebben een aangenomen besluit gezien; value is die waarde 296 * decided false we hebben er geen; value is de standaard voor een ward (uit) 297 * 298 * Dat verschil hoort zichtbaar te blijven. "Uit" en "voor zover wij weten uit" 299 * zijn niet hetzelfde, en het tweede is wat we meestal hebben. 300 * 301 * BEKEND GAT: dit ziet alleen onze EIGEN voorstellen. Antwoordde je op dat van 302 * een mede-guardian, dan komt de uitslag wel binnen (gated_outcome) maar wordt 303 * hij niet bewaard -- handshake.js legt alleen vast voor sent-rijen die van ons 304 * zijn. Een gate die een ander heeft geopend leest hier dus als "uit". Dat is de 305 * onveilige kant en het hoort gerepareerd te worden. 306 */ 307 export function knownSetting(guardianSlug, wardUri, feature) { 308 try { 309 const r = db.prepare(`SELECT value FROM ap_gated_sent 310 WHERE guardian_slug = ? AND ward_uri = ? AND feature = ? AND status = 'accepted' 311 ORDER BY created_at DESC LIMIT 1`).get(guardianSlug, wardUri, feature); 312 if (r) return { value: !!r.value, decided: true }; 313 } catch { /* val terug op de standaard */ } 314 return { value: false, decided: false }; 315 } 316 276 317 export function settleSent(offerId, outcome) { 277 318 try { db.prepare('UPDATE ap_gated_sent SET status = ? WHERE offer_id = ?').run(outcome, offerId); } catch { /* non-fatal */ } … … 299 340 300 341 export default { 301 GATE_CATALOGUE, gateRows, 342 GATE_CATALOGUE, gateRows, knownSetting, 302 343 tallyGatedSetting, thresholdFor, featureColumn, recordGatedVote, gatedProgress, GATED_WINDOW_MS, 303 344 parseGatedSetting, buildGatedOffer, rememberGatedOffer, recallGatedOffer,
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)