Changes in src/services/guardianship/gated.js [72d8eff:792af53] in Klonkt
- File:
-
- 1 edited
-
src/services/guardianship/gated.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/guardianship/gated.js
r72d8eff r792af53 97 97 export function gateRows({ settings = {}, guardianCount = null, proposals = [], waiting = {} } = {}) { 98 98 return GATE_CATALOGUE.map((g) => { 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; 99 const value = Object.prototype.hasOwnProperty.call(settings, g.feature) ? settings[g.feature] : null; 105 100 // De trap: het bovenliggende moet OPEN staan. Onbekend telt niet als dicht -- 106 101 // bij een ward elders kennen we de stand niet, en verbergen betekende daar 107 102 // ooit dat een voorstel nooit geopend kon worden. 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; 103 const blockedBy = g.needs && settings[g.needs] === false ? g.needs : null; 113 104 return { 114 105 feature: g.feature, … … 116 107 reversible: !!g.reversible, 117 108 value, 118 decided: beslist,119 109 // Vast staat vast: tonen mag, verzetten niet. 120 110 adjustable: !g.fixed && !blockedBy, … … 284 274 } 285 275 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 de290 * kolom op onze eigen sites-tabel is voor een ward altijd leeg. Wat een guardian291 * wel heeft is de UITSLAG van besluiten -- een geaccepteerd voorstel met waarde292 * true betekent dat de poort openging.293 *294 * Geeft { value, decided }:295 * decided true we hebben een aangenomen besluit gezien; value is die waarde296 * 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 van302 * een mede-guardian, dan komt de uitslag wel binnen (gated_outcome) maar wordt303 * hij niet bewaard -- handshake.js legt alleen vast voor sent-rijen die van ons304 * zijn. Een gate die een ander heeft geopend leest hier dus als "uit". Dat is de305 * 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_sent310 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 317 276 export function settleSent(offerId, outcome) { 318 277 try { db.prepare('UPDATE ap_gated_sent SET status = ? WHERE offer_id = ?').run(outcome, offerId); } catch { /* non-fatal */ } … … 340 299 341 300 export default { 342 GATE_CATALOGUE, gateRows, knownSetting,301 GATE_CATALOGUE, gateRows, 343 302 tallyGatedSetting, thresholdFor, featureColumn, recordGatedVote, gatedProgress, GATED_WINDOW_MS, 344 303 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)