Changeset 792af53 in Klonkt for src/routes/guardian.js


Ignore:
Timestamp:
08/07/2026 12:47:33 PM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
0475b13, a29c8c8
Parents:
0db68bd
git-author:
Robin <roboburr@…> (08/07/2026 12:47:31 PM)
git-committer:
roboburr <roboburr@…> (08/07/2026 12:47:33 PM)
Message:

Het gate-paneel: een rij per gate, met het soort en de drempel (shaer-ahy.1)

Een guardian zag twee knoppen en moest zelf uitzoeken wat er verder voor dit kind
gold. Wat niet verstelbaar is stond nergens -- terwijl dat de helft is van het
antwoord op "wat mag dit kind".

EEN BRON VAN WAARHEID. GATE_CATALOGUE in gated.js is nu de lijst van gates die
deze Klonkt kent. Wat gated wordt is een ontwerpkeuze van de implementatie: de
FEP levert het mechanisme (voorstel, tally, settle) en een paar voorbeelden, niet
de lijst. Een gate erbij is daarmee een regel data en geen nieuw stuk scherm.

HET SOORT STAAT ERBIJ, want ze werken niet hetzelfde:

setting een stand, aan of uit, terug te draaien
perRequest geen stand maar een stroom beslissingen (5.3 volgverzoeken)
handover draagt gezag OVER, onomkeerbaar zodra de ward hem gebruikt

Die derde bestaat nog niet (shaer-90v), maar de rij kan hem al dragen -- inclusief
"niet terug te draaien", zodat dat er niet later ingebouwd hoeft te worden.

Volgverzoeken staan er nu ook in, met het aantal dat wacht. Ze zijn niet te
verzetten (altijd aan voor een ward, 5.3) en juist daarom horen ze zichtbaar te
zijn.

TWEE DINGEN DIE HET PANEEL NIET VERZINT. Een onbekende stand is ONBEKEND en niet
uit: bij een ward op een andere server staat die kolom daar. En zonder bekend
aantal guardians komt er geen drempel op het scherm -- nul of een gok leest als
een feit, en dit is precies waar een guardian op afgaat voordat hij iets
voorstelt.

De trap uit shaer-ahy blijft: afspelen is pas te bewegen als linkvoorbeelden
aanstaan. Met dezelfde uitzondering als voorheen -- onbekend telt niet als dicht,
want dat kostte ooit een hele voorstelronde.

Terugval ingebouwd: serveert een oudere Klonkt de catalogus nog niet, dan
verschijnen de twee knoppen zoals ze waren in plaats van een leeg vak.

9 tests op gateRows, dat pure stuk waar de regels in zitten. nl/en/de. Suite
565/565. Niet gedekt: de weergave zelf, dat is client-JS.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/guardian.js

    r0db68bd r792af53  
    5757    'prop_line', 'prop_embeds', 'prop_play', 'prop_on', 'prop_off',
    5858    'prop_st_open', 'prop_st_accepted', 'prop_st_rejected', 'prop_st_expired',
    59     'panel_guards_far'];
     59    'panel_guards_far',
     60    // Het gate-paneel per ward (shaer-ahy.1): een rij per gate, met het soort en
     61    // de drempel erbij. De namen volgen de catalogus in gated.js.
     62    'gate_externalEmbeds', 'gate_externalPlayback', 'gate_follows',
     63    'gate_kind_setting', 'gate_kind_perRequest', 'gate_kind_handover',
     64    'gate_unknown', 'gate_threshold', 'gate_threshold_unknown',
     65    'gate_irreversible', 'gate_waiting', 'gate_blocked', 'gate_propose'];
    6066  const s = Object.fromEntries(keys.map((k) => [k, i18nT(L, `guardian.${k}`)]));
    6167  s.wave = i18nT(L, 'guardian.wave');
     
    103109        status: Guardianship.gated.sentStatus(p, Date.now()),
    104110      })),
     111      // Alles wat voor dit kind gated is op EEN plek, met per gate het soort en
     112      // de drempel (shaer-ahy.1). Losse knoppen lieten een guardian zelf
     113      // uitzoeken wat er allemaal geldt; wat niet verstelbaar is stond nergens.
     114      gates: wardGates(site.slug, w.other_uri),
    105115    })),
    106116    offers: Guardianship.offersCollection(`${me}/queues/offers`, site.slug, me).orderedItems,
     
    538548/** The playback gate of a ward we host (5.6): the heavier sibling. */
    539549function wardPlaybackSetting(uri) { return wardGateSetting(uri, 'external_playback'); }
     550/**
     551 * De gate-rijen van een ward voor het paneel.
     552 *
     553 * De standen komen uit onze eigen kolommen als we het kind hosten; bij een ward
     554 * elders weten we ze niet en blijft het NULL -- onbekend, niet uit. Het aantal
     555 * guardians idem: dat wordt op de server van die ward bijgehouden, en zonder dat
     556 * getal wordt er geen drempel verzonnen.
     557 */
     558function wardGates(mySlug, wardUri) {
     559  const statuses = wardGuardianStatuses(wardUri);
     560  const wachtend = Guardianship.follows.listReviewsByDirection(mySlug, 'incoming')
     561    .filter((r) => r.ward_uri === wardUri).length;
     562  return Guardianship.gated.gateRows({
     563    settings: {
     564      'shaer:externalEmbeds': wardEmbedSetting(wardUri),
     565      'shaer:externalPlayback': wardPlaybackSetting(wardUri),
     566    },
     567    guardianCount: statuses ? statuses.length : null,
     568    proposals: Guardianship.gated.listSent(mySlug, wardUri).map((p) => ({
     569      feature: p.feature, value: !!p.value, status: Guardianship.gated.sentStatus(p, Date.now()),
     570    })),
     571    waiting: { 'shaer:follows': wachtend || undefined },
     572  });
     573}
     574
    540575function wardGateSetting(uri, column) {
    541576  const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
Note: See TracChangeset for help on using the changeset viewer.