Changeset df70d8e in Klonkt
- Timestamp:
- 08/08/2026 09:47:27 PM (4 weeks ago)
- Branches:
- main
- Children:
- 1d76e0e
- Parents:
- f3c7a05
- git-author:
- Robin <roboburr@…> (08/08/2026 09:47:26 PM)
- git-committer:
- roboburr <roboburr@…> (08/08/2026 09:47:27 PM)
- Location:
- tools/ward-farm
- Files:
-
- 2 edited
-
farm.mjs (modified) (4 diffs)
-
offer-many.mjs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
tools/ward-farm/farm.mjs
rf3c7a05 rdf70d8e 123 123 // juist dit het moment waarop iemand moet nadenken; dat staat er hier expliciet 124 124 // bij zodat deze code nooit ergens anders terechtkomt. 125 // 126 // HET OFFER IS AL DE TOESTEMMING VAN DE KANDIDAAT, en daar zat mijn fout. Ik 127 // wachtte op een afsluitende Accept van de kandidaat, en die komt bij een VRIJE 128 // ward nooit -- terecht. Klonkt zegt het met zoveel woorden in handshake.js: 129 // "The Offer carries the candidate's agreement -- a free ward then commits on 130 // its own accept." Dev deed dus precies wat het hoorde te doen; mijn daemon 131 // bleef wachten op iets dat het protocol niet stuurt. 132 // 133 // De afsluitende Accept van de kandidaat bestaat WEL, maar in het meerpartijen- 134 // geval: heeft het kind al guardians, dan moeten die eerst ja zeggen en sluit de 135 // kandidaat af. Vandaar de telling hieronder in plaats van "commit bij mijn 136 // eigen ja" -- dat laatste zou werken voor de eerste guardian en stilletjes fout 137 // zijn voor de tweede. 125 138 126 139 /** … … 139 152 } 140 153 154 /** 155 * Een ja bijschrijven, en committen zodra iedereen ja heeft gezegd. 156 * 157 * Dezelfde regel als readyToCommit in Klonkt: de ward, de kandidaat, en -- als 158 * het kind er al had -- minstens een van de bestaande guardians. 159 */ 160 function telAccept(w, offerId, wie) { 161 const off = w.offers[offerId]; 162 if (!off || off.commit) return 'onbekend offer'; 163 if (wie && !off.accepts.includes(wie)) off.accepts.push(wie); 164 const iedereen = off.partijen.every((p) => off.accepts.includes(p)); 165 if (!iedereen) { noteer(w, { wacht_op: off.partijen.filter((p) => !off.accepts.includes(p)) }); return 'nog niet compleet'; } 166 off.commit = new Date().toISOString(); 167 if (!w.guardians.includes(off.kandidaat)) w.guardians.push(off.kandidaat); 168 noteer(w, { commit: off.kandidaat }); 169 return 'guardian erbij'; 170 } 171 141 172 async function verwerkInbox(w, activity) { 142 173 const type = Array.isArray(activity.type) ? activity.type[0] : activity.type; … … 151 182 if (subject !== uriVan(w.naam)) return 'niet voor mij'; 152 183 const kandidaat = typeof o.object === 'string' ? o.object : (o.object && o.object.id); 153 w.offers[activity.id] = { kandidaat, at: Date.now() }; 184 // De partijen: de kandidaat, ikzelf, en mijn bestaande guardians (die staan 185 // in `to`). De kandidaat telt meteen als ja -- zijn Offer IS zijn instemming. 186 const partijen = [...new Set([ 187 kandidaat, 188 uriVan(w.naam), 189 ...(Array.isArray(activity.to) ? activity.to : []), 190 ])].filter(Boolean); 191 w.offers[activity.id] = { kandidaat, at: Date.now(), partijen, accepts: [kandidaat] }; 154 192 bewaarStaat(staat); 155 193 // Accepteren, gericht aan iedereen die in `to` stond plus de kandidaat, zodat … … 174 212 } catch (e) { noteer(w, { fout: String(e.message), naar: doel }); } 175 213 } 176 bewaarStaat(staat);214 telAccept(w, activity.id, uriVan(w.naam)); 177 215 return 'geaccepteerd'; 178 216 } 179 217 180 218 if (type === 'Accept') { 181 // De laatste Accept van de kandidaat is de commit (3.1.3). Wij houden hem 182 // gewoon bij: wie ons bewaakt is het enige dat wij hoeven te weten. 183 const binnenste = o && o.object; 184 const rel = binnenste && (Array.isArray(binnenste.type) ? binnenste.type[0] : binnenste.type) === 'Relationship' 185 ? binnenste : (relType === 'Relationship' ? o : null); 186 const kandidaat = rel && (typeof rel.object === 'string' ? rel.object : (rel.object && rel.object.id)); 187 const wie = kandidaat || actor; 188 if (wie && !w.guardians.includes(wie)) { 189 w.guardians.push(wie); 190 bewaarStaat(staat); 191 return 'guardian erbij'; 192 } 193 return 'al bekend'; 219 // Een ja van een mede-partij (een bestaande guardian, of de kandidaat die in 220 // het meerpartijengeval afsluit). `object` is de offer-id. 221 const offerId = typeof o === 'string' ? o : (o && o.id); 222 if (!offerId || !w.offers[offerId]) return 'onbekend offer'; 223 return telAccept(w, offerId, actor); 194 224 } 195 225 -
tools/ward-farm/offer-many.mjs
rf3c7a05 rdf70d8e 69 69 try { 70 70 const uit = await AP.ingestOutboxActivity(site, { id: site.owner_id, username: slug }, activity); 71 if (uit && (uit.status === 201 || uit.status === 200)) gestuurd++; 71 // 202 is hier de NORMALE uitkomst: de handshake is aangenomen en loopt, de 72 // commit valt pas als de ward antwoordt. Ik telde hem als mislukt, en de 73 // eindregel zei daardoor "verstuurd 0" terwijl alles goed ging -- een 74 // verzonnen mislukking is net zo verwarrend als een verzwegen fout. 75 if (uit && uit.status >= 200 && uit.status < 300) gestuurd++; 72 76 else { mislukt++; console.warn(` ${naam}: ${uit && uit.status} ${uit && uit.error}`); } 73 77 } catch (e) {
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)