Changeset 294207e in Klonkt for src/services/guardianship


Ignore:
Timestamp:
08/09/2026 05:53:38 PM (4 weeks ago)
Author:
Bart <bart@…>
Branches:
main
Children:
d3aa63b
Parents:
89d3c06
Message:

Een vaste poort zegt "altijd", niet "onbekend"

"Volgverzoeken: onbekend" stond er niet omdat we het niet wisten, maar omdat
shaer:follows geen kolom heeft: vast staat vast, dus er valt niets te bewaren.
De rij viel daardoor door naar "nooit besloten" en las eeuwig als een open
vraag. Er is geen vraag. §5.3 eist dat een Follow naar een ward langs de
guardians gaat.

gateRows geeft nu fixed mee en zet de stand van een vaste poort zelf, uit
fixedValue in de catalogus. adjustable was daar geen vervanging voor: die is
ook false bij geblokkeerd en bij nog-niet-gebouwd, dus een client die alleen dat
ziet weet niet WAAROM er geen knop is.

Dat werd urgent door de tweede volgpoort ernaast: twee rijen over volgen, waarvan
de ene een echte stand toont en de andere voor altijd "onbekend" -- dat leest als
kapot in plaats van als vastgelegd.

Co-Authored-By: Claude Opus 5 <claude@…>

File:
1 edited

Legend:

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

    r89d3c06 r294207e  
    121121  // Inkomend is vast: §5.3 EIST dat een Follow naar een ward langs de guardians
    122122  // gaat, dus die staat aan en blijft aanstaan. Tonen mag, verzetten niet.
    123   { feature: 'shaer:follows', kind: 'perRequest', reversible: true, fixed: true },
     123  // fixedValue false: de poort staat DICHT en blijft dicht -- een Follow naar
     124  // een ward gaat altijd langs de guardians. Dezelfde polariteit als de rest
     125  // van de familie, waar `value` "mag het zonder tussenkomst?" betekent.
     126  { feature: 'shaer:follows', kind: 'perRequest', reversible: true, fixed: true, fixedValue: false },
    124127  // Uitgaand is verstelbaar, en dat verschil is opzet. De FEP zegt over deze
    125128  // richting niets: §5.3 gaat alleen over een Follow die op een ward AF komt.
     
    164167    // suggereren dat niemand nam.
    165168    const raw = Object.prototype.hasOwnProperty.call(settings, g.feature) ? settings[g.feature] : null;
    166     const beslist = raw && typeof raw === 'object' ? !!raw.decided : (raw === true || raw === false);
    167     const value = raw && typeof raw === 'object' ? raw.value : raw;
     169    let beslist = raw && typeof raw === 'object' ? !!raw.decided : (raw === true || raw === false);
     170    let value = raw && typeof raw === 'object' ? raw.value : raw;
     171    // Een VASTE poort heeft geen kolom om een stand in te bewaren, want er valt
     172    // niets te bewaren: hij staat zoals de spec hem zet. Zonder dit viel hij
     173    // door naar "nooit besloten" en las het paneel eeuwig "onbekend" -- wat een
     174    // vraag suggereert die er niet is. §5.3 EIST dat een Follow naar een ward
     175    // langs de guardians gaat, dus dat is beslist, alleen niet door ons.
     176    if (g.fixed) { value = !!g.fixedValue; beslist = true; }
    168177    // De trap: het bovenliggende moet OPEN staan. Onbekend telt niet als dicht --
    169178    // bij een ward elders kennen we de stand niet, en verbergen betekende daar
     
    184193      // strandt is erger dan geen knop.
    185194      available: g.available !== false,
     195      // Vast is iets anders dan geblokkeerd of afwezig, en alle drie maken ze
     196      // `adjustable` false. Een client die alleen dat ziet weet niet WAAROM er
     197      // geen knop is; met dit veld kan hij "altijd" zeggen in plaats van een
     198      // stand te tonen alsof er ooit nog iets aan verandert.
     199      fixed: !!g.fixed,
    186200      adjustable: g.available !== false && !g.fixed && !blockedBy,
    187201      blockedBy: blockedBy || undefined,
Note: See TracChangeset for help on using the changeset viewer.