Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/guardianship/gated.js

    r72d8eff r792af53  
    9797export function gateRows({ settings = {}, guardianCount = null, proposals = [], waiting = {} } = {}) {
    9898  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;
    105100    // De trap: het bovenliggende moet OPEN staan. Onbekend telt niet als dicht --
    106101    // bij een ward elders kennen we de stand niet, en verbergen betekende daar
    107102    // 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;
    113104    return {
    114105      feature: g.feature,
     
    116107      reversible: !!g.reversible,
    117108      value,
    118       decided: beslist,
    119109      // Vast staat vast: tonen mag, verzetten niet.
    120110      adjustable: !g.fixed && !blockedBy,
     
    284274}
    285275
    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 
    317276export function settleSent(offerId, outcome) {
    318277  try { db.prepare('UPDATE ap_gated_sent SET status = ? WHERE offer_id = ?').run(outcome, offerId); } catch { /* non-fatal */ }
     
    340299
    341300export default {
    342   GATE_CATALOGUE, gateRows, knownSetting,
     301  GATE_CATALOGUE, gateRows,
    343302  tallyGatedSetting, thresholdFor, featureColumn, recordGatedVote, gatedProgress, GATED_WINDOW_MS,
    344303  parseGatedSetting, buildGatedOffer, rememberGatedOffer, recallGatedOffer,
Note: See TracChangeset for help on using the changeset viewer.