@real-life/trust-protocol 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -11
- package/dist/carrier-identity.d.ts +9 -0
- package/dist/carrier-identity.d.ts.map +1 -1
- package/dist/carrier-identity.js +32 -2
- package/dist/carrier-identity.js.map +1 -1
- package/dist/ceremony.d.ts +3 -0
- package/dist/ceremony.d.ts.map +1 -0
- package/dist/ceremony.js +29 -0
- package/dist/ceremony.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/probe/acks.d.ts +27 -0
- package/dist/probe/acks.d.ts.map +1 -0
- package/dist/probe/acks.js +152 -0
- package/dist/probe/acks.js.map +1 -0
- package/dist/probe/continuity.d.ts +3 -82
- package/dist/probe/continuity.d.ts.map +1 -1
- package/dist/probe/continuity.js +636 -147
- package/dist/probe/continuity.js.map +1 -1
- package/dist/probe/encounter.d.ts +26 -0
- package/dist/probe/encounter.d.ts.map +1 -0
- package/dist/probe/encounter.js +938 -0
- package/dist/probe/encounter.js.map +1 -0
- package/dist/probe/trust.d.ts +114 -74
- package/dist/probe/trust.d.ts.map +1 -1
- package/dist/probe/trust.js +1120 -232
- package/dist/probe/trust.js.map +1 -1
- package/dist/probe.d.ts +0 -2
- package/dist/probe.d.ts.map +1 -1
- package/dist/probe.js +8 -7
- package/dist/probe.js.map +1 -1
- package/dist/schemas.js +22 -22
- package/dist/schemas.js.map +1 -1
- package/dist/visibility.d.ts +6 -0
- package/dist/visibility.d.ts.map +1 -0
- package/dist/visibility.js +31 -0
- package/dist/visibility.js.map +1 -0
- package/dist/wire.d.ts +28 -26
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js.map +1 -1
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/probe/continuity.ts"],"names":[],"mappings":"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","sourcesContent":["// continuity.mjs — rltp-visibility §6a im Simulator: continuity-probe@1 +\n// continuity-mapping@1. „Kontinuität wird NACH der Zeremonie aufgelöst,\n// nie in ihr\" (Encounter 4.4): jedes Enactment UND jede Vorstellung prägt\n// ein frisches Tupel; ob es ein Wiedersehen war, klärt die Probe über den\n// frischen Kanal — automatisch, ohne Dialog, ohne Namen.\n//\n// Die Probe ist das dritte Mitglied EINER Familie (Stern, Mapping, Probe:\n// geblendete Werte unter Beziehungs-Schlüsseln): die EIGENEN bisherigen\n// pair-Anker reisen als HMAC unter k_p (DH des NEUEN Kanals), gepolstert\n// auf Vielfache von 256, sortiert, sequenziert. Nur wer eine der\n// Beziehungen wirklich hält, kann matchen; ein leerer Bestand sendet\n// trotzdem (sonst leakte die Abwesenheit die Kardinalität „null\").\n//\n// Die Maschine (6a.4): EIN Wähler (Record-Seite = lexikographisch\n// kleinerer neuer pair-Anker), EINE endgültige Wahl (eingefroren,\n// Abweichung = Äquivokation), EIN Auslöser (Record-Seite kettet atomar\n// mit ihrer Wahl; die Gegenseite NUR auf deren verifiziertes Mapping —\n// ihr eigenes ist ein Match-Report). Kette: neues Tupel wird Kopf, das\n// alte deaktiviert; Evidenz akkumuliert AUF DER BEZIEHUNG (✓ bleibt ✓),\n// für Dritte unsichtbar. Wer die Probe nicht beantworten kann, IST\n// protokollisch eine neue Beziehung (Identity 9.3).\nimport { jcs } from '../core.js'\nimport * as C from './deps.js'\nimport type { Person } from './deps.js'\nimport { hmac } from './trust.js'\n\nconst say = (p: Person, m: string) => p.log.push(m)\nconst CHUNK = 256\n\n// ── Schlüssel (Spec-Infostrings, richtungsgebunden) ─────────────────────\n// k_p = HKDF(ECDH(newPairX_sender, newPairX_recipient),\n// 'rltp/visibility/blind/probe/' + senderNewPair + '/' + recipientNewPair)\nconst kProbe = async (xPriv: CryptoKey, theirKa: string, senderAnchor: string, recipientAnchor: string) =>\n C.hkdf(await C.ecdh(xPriv, C.xRawOfMk(theirKa)!), 'rltp/visibility/blind/probe/' + senderAnchor + '/' + recipientAnchor)\nconst kMac = async (xPriv: CryptoKey, theirKa: string, info: string) =>\n C.hkdf(await C.ecdh(xPriv, C.xRawOfMk(theirKa)!), info)\n\n// ── Schnappschuss-Helfer (Prior-Candidate-Set, Sicht des Halters) ───────\n// wird von introduce.mjs BEI TUPEL-ERZEUGUNG aufgerufen: aktive Heads,\n// das frische Tupel selbst ausgeschlossen; deaktivierte Glieder nie.\nexport const snapshotPriors = (p: Person) => ({\n own: [...p.contacts.values()].filter((c) => !c.deactivated && c.channel?.own).map((c) => c.channel.own.anchor),\n counterpart: [...p.contacts.entries()].filter(([, c]) => !c.deactivated).map(([k]) => k),\n})\n\n// ── continuity-probe@1: bauen ───────────────────────────────────────────\nexport async function buildProbe (p: Person, newKey: string, ent: any = {}) {\n const t = p.contacts.get(newKey)\n if (!t?.channel?.own) return null\n t.probeSeqOut = (t.probeSeqOut ?? 0) + 1\n const kp = await kProbe(t.channel.own.x.priv, t.channel.counterpartKa, t.channel.own.anchor, newKey)\n const entries = []\n for (const a of t.priorCands?.own ?? []) entries.push(await hmac(kp, a))\n // Polstern auf das nächste Vielfache von 256 (leerer Bestand → 1 Voll-Polster-Chunk)\n const total = Math.max(CHUNK, Math.ceil(entries.length / CHUNK) * CHUNK)\n while (entries.length < total) entries.push(C.b64uOf(ent.pad ?? C.rand(32)))\n entries.sort()\n const outbound = []\n for (let i = 0; i * CHUNK < entries.length; i++) {\n const body = { type: 'continuity-probe@1', probe: String(t.probeSeqOut), seq: String(i + 1), last: (i + 1) * CHUNK >= entries.length, blinded: entries.slice(i * CHUNK, (i + 1) * CHUNK) }\n outbound.push({ to: t, kind: 'continuity-probe@1 (geblendet, gepolstert, versiegelt)', env: await C.seal({ ...body, mac: await hmac(kp, jcs(body)) }, t.channel.counterpartKa, ent) })\n }\n say(p, `Kontinuitäts-Probe an ${t.name}: ${t.priorCands?.own.length ?? 0} eigene Beziehungs-Anker, geblendet + gepolstert (${entries.length})`)\n return outbound\n}\n\n// ── continuity-mapping@1: bauen ─────────────────────────────────────────\n// prior = EIGENER alter pair-Anker · next = eigener neuer · to = neuer der\n// Gegenseite; mac1 unter dem ALTEN Beziehungs-Schlüssel, mac2 unter dem\n// NEUEN — nur derselbe Schlüssel-Inhaber kann beide (für die Adressatin\n// fälschbar: Klasse V, abstreitbar).\nasync function buildMapping (p: Person, newKey: string, oldKey: string, when: number, ent: any = {}) {\n const t = p.contacts.get(newKey), old = p.contacts.get(oldKey)\n const body = { type: 'continuity-mapping@1', prior: old.channel.own.anchor, next: t.channel.own.anchor, to: newKey, revision: '1', issuedAt: C.iso(when) }\n const msg = jcs(body)\n const doc = { ...body,\n mac1: await hmac(await kMac(old.channel.own.x.priv, old.channel.counterpartKa, 'rltp/visibility/mac/cont1'), msg),\n mac2: await hmac(await kMac(t.channel.own.x.priv, t.channel.counterpartKa, 'rltp/visibility/mac/cont2'), msg) }\n return { to: t, kind: 'continuity-mapping@1 (mac1 alt · mac2 neu, versiegelt)', env: await C.seal(doc, t.channel.counterpartKa, ent) }\n}\n\n// ── die Kette: neues Tupel wird Kopf, das alte deaktiviert ──────────────\n// Tupel-Ebene bleibt (Stern-Salts, Probe-Sequenzen); KETTEN-Ebene wandert:\n// Kontakt-Gedächtnis, Evidenz (✓ akkumuliert), Offenlegungen, Gruppen.\nfunction chainTuple (p: Person, newKey: string, oldKey: string) {\n const head = p.contacts.get(newKey), old = p.contacts.get(oldKey)\n if (!head || !old || old.deactivated) return false // idempotent\n old.deactivated = true\n old.chainedInto = newKey\n head.chain = [...(old.chain ?? []), oldKey]\n if (old.state === '✓' || head.state === '✓') { head.state = '✓'; head.provenance = 'ceremony' }\n else if (old.state === '⇄' || head.state === '⇄') head.state = '⇄'\n head.since = [old.since, head.since].filter(Boolean).sort()[0]\n head.name = old.name // lokales Kontakt-Gedächtnis\n head.selfAnchor ??= old.selfAnchor; head.mapping ??= old.mapping\n head.trustGiven ??= old.trustGiven; head.trustReceived ??= old.trustReceived\n head.trustPaused ??= old.trustPaused; head.sentMapping ??= old.sentMapping\n head.starReceived ??= old.starReceived; head.starInfo ??= old.starInfo\n head.sharedGroups = [...new Set([...(old.sharedGroups ?? []), ...(head.sharedGroups ?? [])])]\n say(p, `Kontinuität: ${head.name} wiedererkannt — neues Tupel an die Beziehung gekettet (${head.state}, ${head.chain.length + 1} Enactments)`)\n return true\n}\n\n// ── Empfangs-Dispatch ───────────────────────────────────────────────────\nconst iAmRecord = (t: any, newKey: string) => t.channel.own.anchor < newKey // lexikographisch kleinerer NEUER Anker\nconst tupleOf = (p: Person, rkid: string) => {\n const ctx = p.contexts.get(rkid)\n if (!ctx) return null\n const e = [...p.contacts.entries()].find(([, c]) => c.channel?.own?.anchor === ctx.anchor)\n return e ? { key: e[0], t: e[1], ctx } : null\n}\n\nexport async function receiveContinuity (p: Person, env: any, when: number, ent: any = {}) {\n const opened = await C.openEnvelope(p, env) // Stufen 1–4, Cache-Lesung\n if (opened.duplicate) return { handled: true, duplicate: true }\n if (opened.error) return { handled: false }\n const r = await receiveContinuityInner(p, env, opened.doc, when, ent)\n if (r?.handled && !(r as any).error) C.effectDone(p, opened.digest)\n return r\n}\nasync function receiveContinuityInner (p: Person, env: any, doc: any, when: number, ent: any = {}) {\n const hit = tupleOf(p, env.rkid)\n if (!hit) return { handled: false }\n if (doc?.type === 'continuity-probe@1') return handleProbe(p, hit, doc, when, ent)\n if (doc?.type === 'continuity-mapping@1') return handleMapping(p, hit, doc, when, ent)\n return { handled: false, doc }\n}\n\nasync function handleProbe (p: Person, { key, t }: any, doc: any, when: number, ent: any) {\n // form BEFORE fields (M-3): mac, sequence and chunk list as used below\n if (!C.shaped(doc, { mac: 'string', probe: 'string', seq: 'string', blinded: 'array' }) || typeof doc.last !== 'boolean'\n || !C.intStr(doc.probe) || !C.intStr(doc.seq) // NaN in probeSeqIn wäre Replay-Zustandskorruption (Review 9, P-B1)\n || doc.blinded.length !== 256 // die Chunkform ist FEST: genau 256 Einträge (Review 10, P-B1-Rest)\n || !doc.blinded.every((b: any) => typeof b === 'string')) return { handled: true, error: 'malformed probe' }\n // Senderseitiger k_p, aus Empfängersicht nachgerechnet (Richtung!)\n const kp = await kProbe(t.channel.own.x.priv, t.channel.counterpartKa, key, t.channel.own.anchor)\n const { mac, ...body } = doc\n if ((await hmac(kp, jcs(body))) !== mac) return { handled: true, error: 'probe mac' }\n if (BigInt(doc.probe) <= BigInt(t.probeSeqIn ?? '0')) return { handled: true, error: 'probe replay (nicht streng größer)' }\n // Chunk-Sammlung pro (Tupel, probe); höhere probe verwirft die offene\n if (t.probeAsm?.probe !== doc.probe) t.probeAsm = { probe: doc.probe, blinded: [], next: 1 }\n if (Number(doc.seq) !== t.probeAsm.next) return { handled: true, error: 'malformed probe (chunk order)' }\n t.probeAsm.next += 1\n t.probeAsm.blinded.push(...doc.blinded)\n if (!doc.last) return { handled: true, partial: true }\n // finaler Chunk: union lesen, dann vollzieht sich der EFFEKT (consume\n // + Wahl + Kette) VOR dem fehlbaren Mapping-Bau — bewusst, denn die\n // Frische-Regel verbietet Chunk-Replays als Retry-Weg; ein Bau-Fehler\n // wird als getypte Pflicht persistiert und über flushContinuity()\n // eingelöst (Reviews 5–8)\n const union = t.probeAsm.blinded\n const consume = () => { t.probeAsm = null; t.probeSeqIn = doc.probe } // als STRING — BigInt-Vergleich, 18 Stellen exakt\n // Schnitt gegen die GEGENSEITEN-Anker des eigenen Prior-Candidate-Sets\n const matches = []\n for (const cp of t.priorCands?.counterpart ?? []) {\n if (union.includes(await hmac(kp, cp))) matches.push(cp)\n }\n if (!matches.length) { consume(); say(p, `Probe von ${t.name}: kein Match — ehrlich eine neue Beziehung`); return { handled: true, matches: 0 } }\n const outbound = []\n let chained = false\n let outboundError\n if (iAmRecord(t, key)) {\n // Record-Seite: einmal wählen, endgültig; Kette atomar mit der Wahl\n if (!t.contChosen) {\n const choice = matches[0] // Wahl frei — hier: erster Match (reichste Historie wäre App-Sache)\n consume()\n t.contChosen = choice\n chained = chainTuple(p, key, choice)\n try { outbound.push(await buildMapping(p, key, choice, when, ent)) }\n catch (err: any) { t.contMappingDue = { prior: choice, kind: 'choice' }; outboundError = String(err?.message ?? err) }\n } else consume()\n } else {\n // Nicht-Record: Match-Report (löst NIE eine Kette aus)\n if (!t.contReported) {\n consume()\n t.contReported = matches[0]\n try { outbound.push(await buildMapping(p, key, matches[0], when, ent)) }\n catch (err: any) { t.contMappingDue = { prior: matches[0], kind: 'report' }; outboundError = String(err?.message ?? err) }\n } else consume()\n }\n return { handled: true, matches: matches.length, chained, name: chained ? t.name : undefined, outbound, outboundError }\n}\n\nasync function handleMapping (p: Person, { key, t }: any, doc: any, when: number, ent: any) {\n if (!C.shaped(doc, { mac1: 'string', mac2: 'string', prior: 'string', next: 'string', to: 'string' })) return { handled: true, error: 'malformed mapping' }\n const { mac1, mac2, ...body } = doc\n const fail = (why: string) => { say(p, `Kontinuitäts-Mapping verworfen: ${why}`); return { handled: true, error: why } }\n if (body.to !== t.channel.own.anchor) return fail('to ≠ eigener neuer Anker')\n if (body.next !== key) return fail('next ≠ neuer Anker der Gegenseite')\n // prior MUSS im Schnappschuss liegen (nie das frische Tupel, nie tiefere Kettenglieder)\n if (!(t.priorCands?.counterpart ?? []).includes(body.prior)) return fail('prior nicht im Prior-Candidate-Set')\n const old = p.contacts.get(body.prior)\n if (!old?.channel?.own) return fail('alte Beziehung ohne eigenen Kontext')\n const msg = jcs(body)\n if ((await hmac(await kMac(old.channel.own.x.priv, old.channel.counterpartKa, 'rltp/visibility/mac/cont1'), msg)) !== mac1) return fail('mac1 (alter Beziehungs-Schlüssel)')\n if ((await hmac(await kMac(t.channel.own.x.priv, t.channel.counterpartKa, 'rltp/visibility/mac/cont2'), msg)) !== mac2) return fail('mac2 (neuer Beziehungs-Schlüssel)')\n const senderIsRecord = key < t.channel.own.anchor\n const outbound = []\n if (senderIsRecord) {\n // Record-Freeze: abweichendes prior derselben (next,to) = Äquivokation\n if (t.contRecordPrior && t.contRecordPrior !== body.prior) return fail('Äquivokation — Record-Wahl ist eingefroren')\n // fehlbare Arbeit VOR der Mutation (B-2): erst das Alignment-Mapping\n // bauen, dann Freeze + Kette in einem synchronen Zug\n t.contRecordPrior = body.prior\n chainTuple(p, key, body.prior)\n if (!t.contAligned) {\n try { const mapping = await buildMapping(p, key, body.prior, when, ent); t.contAligned = true; if (t.contMappingDue?.prior === body.prior) delete t.contMappingDue; outbound.push(mapping) }\n catch (err: any) { t.contMappingDue = { prior: body.prior, kind: 'align' }; return { handled: true, chained: p.contacts.get(body.prior)?.deactivated === true, name: t.name, outbound, outboundError: String(err?.message ?? err) } }\n }\n } else {\n // Match-Report der Nicht-Record-Seite: darf die Wahl INFORMIEREN, kettet nie\n if (iAmRecord(t, key) && !t.contChosen) {\n const mapping = await buildMapping(p, key, body.prior, when, ent)\n t.contChosen = body.prior\n chainTuple(p, key, body.prior)\n outbound.push(mapping)\n }\n }\n return { handled: true, chained: p.contacts.get(body.prior)?.deactivated === true, name: t.name, outbound }\n}\n\n/**\n * The host's producing call for a mapping the receiver still owes\n * (review 6, B-3): a transient seal failure during probe/mapping\n * handling persists the obligation in contMappingDue; this call — not a\n * redelivery, which the freshness rule forbids — builds and returns it.\n */\nexport async function flushContinuity (p: Person, newKey: string, when: number, ent: any = {}) {\n const t = p.contacts.get(newKey)\n if (!t?.contMappingDue) return { outbound: [] }\n // Single-Flight (Review 7, B-3): zwei parallele Flushes liefern nie\n // zwei Mappings für EINE Pflicht\n if (t.contFlushPending) return { outbound: [], pending: true }\n t.contFlushPending = true\n try {\n const due = t.contMappingDue\n const mapping = await buildMapping(p, newKey, due.prior, when, ent)\n // der Flush stellt GENAU den Zustand her, den der gelungene\n // Direktpfad hinterlassen hätte — kind-bewusst. Und er löscht NUR\n // die Pflicht, die er selbst gebaut hat: ist während des await eine\n // NEUERE an ihre Stelle getreten, bleibt sie stehen (Review 8, B-3)\n if (due.kind === 'align') t.contAligned = true\n if (t.contMappingDue === due) delete t.contMappingDue\n return { outbound: [mapping] }\n } finally { t.contFlushPending = false }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/probe/continuity.ts"],"names":[],"mappings":"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","sourcesContent":["// continuity.mjs — rltp-visibility §6a im Simulator: continuity-probe@1 +\n// continuity-mapping@1. „Kontinuität wird NACH der Zeremonie aufgelöst,\n// nie in ihr\" (Encounter 4.4): jedes Enactment UND jede Vorstellung prägt\n// ein frisches Tupel; ob es ein Wiedersehen war, klärt die Probe über den\n// frischen Kanal — automatisch, ohne Dialog, ohne Namen.\n//\n// Die Probe ist das dritte Mitglied EINER Familie (Stern, Mapping, Probe:\n// geblendete Werte unter Beziehungs-Schlüsseln): die EIGENEN bisherigen\n// pair-Anker reisen als HMAC unter k_p (DH des NEUEN Kanals), gepolstert\n// auf Vielfache von 256, sortiert, sequenziert. Nur wer eine der\n// Beziehungen wirklich hält, kann matchen; ein leerer Bestand sendet\n// trotzdem (sonst leakte die Abwesenheit die Kardinalität „null\").\n//\n// Die Maschine (6a.4): EIN Wähler (Record-Seite = lexikographisch\n// kleinerer neuer pair-Anker), EINE endgültige Wahl (eingefroren,\n// Abweichung = Äquivokation), EIN Auslöser (Record-Seite kettet atomar\n// mit ihrer Wahl; die Gegenseite NUR auf deren verifiziertes Mapping —\n// ihr eigenes ist ein Match-Report). Kette: neues Tupel wird Kopf, das\n// alte deaktiviert; Evidenz akkumuliert AUF DER BEZIEHUNG (✓ bleibt ✓),\n// für Dritte unsichtbar. Wer die Probe nicht beantworten kann, IST\n// protokollisch eine neue Beziehung (Identity 9.3).\nimport { jcs, makeValidator } from '../core.js'\nimport { SCHEMAS } from '../schemas.js'\nimport * as C from './deps.js'\nimport type { Person } from './deps.js'\nimport { hmac, hmacU, reissueTrust, chainAdmission, withContactLock, withIssueLock } from './trust.js'\nimport { buildAck, ACK_TYPE } from './acks.js'\n\nconst say = (p: Person, m: string) => p.log.push(m)\nconst CHUNK = 256\nconst V = makeValidator(SCHEMAS)\nconst schemaOk = (file: string, data: any) => V.validate(data, SCHEMAS[file], SCHEMAS[file]).length === 0\n\n// ── Schlüssel (Spec-Infostrings, richtungsgebunden) ─────────────────────\n// k_p = HKDF(ECDH(newPairX_sender, newPairX_recipient),\n// 'rltp/visibility/blind/probe/' + senderNewPair + '/' + recipientNewPair)\nconst kProbe = async (xPriv: CryptoKey, theirKa: string, senderAnchor: string, recipientAnchor: string) =>\n C.hkdf(await C.ecdh(xPriv, C.xRawOfMk(theirKa)!), 'rltp/visibility/blind/probe/' + senderAnchor + '/' + recipientAnchor)\nconst kMac = async (xPriv: CryptoKey, theirKa: string, info: string) =>\n C.hkdf(await C.ecdh(xPriv, C.xRawOfMk(theirKa)!), info)\n\n// ── Schnappschuss-Helfer (Prior-Candidate-Set, Sicht des Halters) ───────\n// wird von introduce.mjs BEI TUPEL-ERZEUGUNG aufgerufen: aktive Heads,\n// das frische Tupel selbst ausgeschlossen; deaktivierte Glieder nie.\nexport const snapshotPriors = (p: Person) => ({\n own: [...p.contacts.values()].filter((c) => !c.deactivated && c.channel?.own).map((c) => c.channel.own.anchor),\n counterpart: [...p.contacts.entries()].filter(([, c]) => !c.deactivated).map(([k]) => k),\n})\n\n// ── continuity-probe@1: bauen ───────────────────────────────────────────\n// Sequenzvergabe SYNCHRON (BigInt-String — 18 Stellen exakt), Bau je\n// Kontakt serialisiert: zwei parallele buildProbe-Aufrufe teilen nie\n// eine Sequenz, und der Wire-Wert ist der reservierte (Review 2, B-1)\nconst withContLock = withContactLock // EIN Lock je Kontakt, geteilt mit trust (Review 4, B-1)\nexport async function buildProbe (p: Person, newKey: string, when: number, ent: any = {}) {\n const t = p.contacts.get(newKey)\n if (!t?.channel?.own || t.deactivated) return null // deaktivierte Tupel stellen nichts aus (Review 8, B-2)\n return withContLock(t, async () => {\n if (t.deactivated) return null // Re-Check nach dem Lock-Erwerb\n // Sequenz nur GEPEEKT (Review 25): „assigning … and committing are\n // one step\" — ein Bau-Fehler verbraucht nichts, auch am letzten\n // Wert entsteht nie falsche Erschöpfung; committet wird synchron\n // mit der Outbox (persisted atomically before send)\n const nextProbe = BigInt(t.probeSeqOut ?? '0') + 1n\n if (nextProbe > 10n ** 18n - 1n) throw new Error('scope exhausted — issues nothing further (2.1)')\n const probeSeq = String(nextProbe)\n const kp = await kProbe(t.channel.own.x.priv, t.channel.counterpartKa, t.channel.own.anchor, newKey)\n const entries = []\n // §6a: prior ist „nie das frische Tupel\" — Hygiene am NUTZUNGSORT:\n // ein Host, der das Set nach der Tupel-Anlage (neu) schnappschießt,\n // darf keine Selbst-Kette provozieren können (Selbst-Match →\n // chainTuple(key, key) deaktivierte den eigenen Kopf)\n for (const a of t.priorCands?.own ?? []) if (a !== t.channel.own.anchor) entries.push(await hmacU(kp, a))\n // Polstern auf das nächste Vielfache von 256 (leerer Bestand → 1 Voll-Polster-Chunk);\n // KOLLISION → Neusampling (Review 6, MAJOR: „the padding value is\n // resampled\") — ein injizierter ent.pad wird höchstens EINMAL\n // verwendet, Duplikate fallen auf frische Zufallswerte zurück\n const total = Math.max(CHUNK, Math.ceil(entries.length / CHUNK) * CHUNK)\n const used = new Set(entries)\n while (entries.length < total) {\n let v = 'u' + C.b64uOf(ent.pad ?? C.rand(32))\n while (used.has(v)) v = 'u' + C.b64uOf(C.rand(32))\n used.add(v)\n entries.push(v)\n }\n entries.sort()\n // Bau + Seal + Digest sind FEHLBAR und warten — vorbereiten, dann\n // Re-Check, dann Outbox-Schreibungen synchron (Review 9, B-3: ein\n // während der Awaits deaktiviertes Tupel stellt nichts aus)\n const preps = []\n const threadId = ent.threadId ?? globalThis.crypto.randomUUID()\n for (let i = 0; i * CHUNK < entries.length; i++) {\n const body = { type: 'continuity-probe@1', probe: probeSeq, seq: String(i + 1), last: (i + 1) * CHUNK >= entries.length, blinded: entries.slice(i * CHUNK, (i + 1) * CHUNK) }\n const artifact = { body, proof: { mac: await hmacU(kp, jcs(body)) } }\n const doc = { id: globalThis.crypto.randomUUID(), type: 'https://real-life.org/trust-tasks/continuity-probe/0.1', issuer: t.channel.own.anchor, recipient: newKey, threadId, issuedAt: C.iso(when), payload: artifact }\n const env = await C.seal(doc, t.channel.counterpartKa, ent)\n const digest = await C.digestDoc(doc)\n preps.push({ digest, env })\n }\n if (t.deactivated) return null // Re-Check (B-3), danach kein await\n // COMMIT — Sequenz + Outbox in EINEM synchronen Zug (Review 25):\n // byte-identische Redelivery-Zuordnung fürs Ack-Matching (4.2;\n // erneut SENDEN tut ein Retry nie, §6a)\n t.probeSeqOut = probeSeq\n const outbound = []\n for (const { digest, env } of preps) {\n ;(t.outbox ??= new Map()).set(digest, { env, threadId, kind: 'continuity-probe' })\n outbound.push({ to: t, kind: 'continuity-probe/0.1 (geblendet, gepolstert, versiegelt)', env })\n }\n say(p, `Kontinuitäts-Probe an ${t.name}: ${t.priorCands?.own.length ?? 0} eigene Beziehungs-Anker, geblendet + gepolstert (${entries.length})`)\n return outbound\n })\n}\n\n// ── continuity-mapping@1: bauen ─────────────────────────────────────────\n// prior = EIGENER alter pair-Anker · next = eigener neuer · to = neuer der\n// Gegenseite; mac1 unter dem ALTEN Beziehungs-Schlüssel, mac2 unter dem\n// NEUEN — nur derselbe Schlüssel-Inhaber kann beide (für die Adressatin\n// fälschbar: Klasse V, abstreitbar).\n// PREPARE (fehlbar: MACs, Seal, Digest — mutiert nichts) und COMMIT\n// (synchron: Zähler + Outbox) getrennt (Review 12, B-2): die Record-\n// Wahl kettet ATOMAR mit der Ausgabe ihres Mappings — beide Schritte\n// liegen dann in EINEM synchronen Zug. Alle Aufrufer laufen unter dem\n// Kontakt-Lock des Tupels (Handler + Flush), der die Revisionsvergabe\n// serialisiert; buildMapping hält zusätzlich den Issue-Lock.\nasync function prepareContMapping (p: Person, newKey: string, oldKey: string, when: number, ent: any = {}, duty?: string) {\n const t = p.contacts.get(newKey), old = p.contacts.get(oldKey)\n if (t.deactivated) throw new Error('tuple deactivated — issues nothing (§6.4)')\n // 6.4/6a.4: Revision je (next, to) monoton — nur gepeekt, ein\n // Fehlschlag verbraucht nichts (§6.4: one step per scope)\n const nextRev = BigInt(t.contRevOut ?? '0') + 1n\n if (nextRev > 10n ** 18n - 1n) throw new Error('scope exhausted — issues nothing further (2.1)')\n const rev = String(nextRev)\n const body = { type: 'continuity-mapping@1', prior: old.channel.own.anchor, next: t.channel.own.anchor, to: newKey, revision: rev, issuedAt: C.iso(when) }\n const msg = jcs(body)\n const artifact = { body, proof: {\n mac1: await hmacU(await kMac(old.channel.own.x.priv, old.channel.counterpartKa, 'rltp/visibility/mac/cont1'), msg),\n mac2: await hmacU(await kMac(t.channel.own.x.priv, t.channel.counterpartKa, 'rltp/visibility/mac/cont2'), msg) } }\n const doc = { id: globalThis.crypto.randomUUID(), type: 'https://real-life.org/trust-tasks/continuity-mapping/0.1', issuer: t.channel.own.anchor, recipient: newKey, threadId: ent.threadId ?? globalThis.crypto.randomUUID(), issuedAt: C.iso(when), payload: artifact }\n const env = await C.seal(doc, t.channel.counterpartKa, ent)\n const digest = await C.digestDoc(doc)\n return { t, rev, env, digest, threadId: doc.threadId, duty, prior: old.channel.own.anchor }\n}\nconst commitContMapping = (prep: any) => {\n prep.t.contRevOut = prep.rev\n ;(prep.t.outbox ??= new Map()).set(prep.digest, { env: prep.env, threadId: prep.threadId, kind: 'continuity-mapping', duty: prep.duty, prior: prep.prior })\n return { to: prep.t, kind: 'continuity-mapping/0.1 (mac1 alt · mac2 neu, versiegelt)', env: prep.env }\n}\nasync function buildMapping (p: Person, newKey: string, oldKey: string, when: number, ent: any = {}, duty?: string) {\n const t = p.contacts.get(newKey)\n return withIssueLock(t, async () => {\n const prep = await prepareContMapping(p, newKey, oldKey, when, ent, duty)\n if (t.deactivated) throw new Error('tuple deactivated — issues nothing (§6.4)') // Re-Check (B-2), danach kein await\n return commitContMapping(prep)\n })\n}\n\n// ── die Kette: neues Tupel wird Kopf, das alte deaktiviert ──────────────\n// Visibility 0.29 §6.4: PER-TUPEL-ZUSTAND WANDERT NICHT — Grade,\n// Stern-Salts, Baseline und empfangene Sterne sterben mit dem alten\n// Kopf (der neue beginnt fail-closed; das Fenster schließen 5.5s\n// Neuausstellung und das New-Head-Korollar von 5.4, nie eine\n// Migration). KETTEN-Ebene wandert: Kontakt-Gedächtnis, Evidenz\n// (✓ akkumuliert), das WISSEN um den offengelegten Anker (die\n// Admissionsschicht hängt an der Beziehung), die eigene\n// Vertrauens-ENTSCHEIDUNG (trustGiven) und die Pause.\nfunction chainTuple (p: Person, newKey: string, oldKey: string, when: number) {\n const head = p.contacts.get(newKey), old = p.contacts.get(oldKey)\n if (!head || !old || head === old || old.deactivated) return false // idempotent; NIE Selbst-Kette (§6a)\n old.deactivated = true\n old.chainedInto = newKey\n head.chain = [...(old.chain ?? []), oldKey]\n // Zustands-Vorrang entlang der Kette (Encounter 4.2, „evidence accumulates\n // on the relationship through its chain\"): ✓ > Zeremonie-Richtung (→/←)\n // > Vorstellung (⇄). Eine einseitige Zeremonie ist stärker als eine\n // Vorstellung — der Kopf verliert seine Richtung nicht an ein ⇄\n if (old.state === '✓' || head.state === '✓') { head.state = '✓'; head.provenance = 'ceremony' }\n else if (head.state === '→' || head.state === '←') { /* die Richtung des Kopfes bleibt */ }\n else if (old.state === '→' || old.state === '←') { head.state = old.state; head.provenance = 'ceremony' }\n else if (old.state === '⇄' || head.state === '⇄') head.state = '⇄'\n head.since = [old.since, head.since].filter(Boolean).sort()[0]\n head.name = old.name // lokales Kontakt-Gedächtnis\n head.selfAnchor ??= old.selfAnchor // Ketten-WISSEN: wer das ist (das Mapping selbst stirbt mit dem Tupel, §6.4)\n const oldRel = old.relId ?? oldKey\n // Admission (B-4): der neue Kopf löst über die überlebende Beziehung\n // auf; ein schon existierender Eintrag der frischen Beziehung\n // verschmilzt atomar (früheste Position, Aliase, k−1). Die\n // IDENTITÄT ist die des TATSÄCHLICH überlebenden Eintrags (Review\n // 36: „the merged relationship's identity is the surviving\n // entry's\") — existiert nur der frische, bleibt DESSEN Identität;\n // existiert keiner, die des jüngsten Kopfs (Review 4, B-4)\n const survivor = chainAdmission(p, oldRel, newKey, newKey, when)\n // Ketten-Identität = die des Survivors NUR, wenn sie zu DIESER Kette\n // gehört (Review 36 + 37, B-1): die kanonische Identität eines\n // Weg-2-Merges gehört einer ANDEREN, weiterhin aktiven Beziehung —\n // Admission-Identität und Beziehungsstrang bleiben unterscheidbar,\n // der Abgang dieser Kette darf die andere nie mitreißen\n const sid = survivor?.id\n const sidInChain = sid !== undefined && (sid === oldRel || sid === newKey || (p.contacts.get(sid)?.relId ?? null) === oldRel)\n head.relId = sidInChain ? sid : (survivor ? oldRel : newKey)\n // die GANZE Kette identifiziert sich als DIESE Beziehung — auch der\n // alte Kopf (Review 36: der Abgang räumt sämtliche Ketten-Aliase)\n old.relId = head.relId\n head.trustGiven ??= old.trustGiven // die Entscheidung gehört der Beziehung (V2)\n // 5.5: „MUST re-issue its most recently ISSUED grade\" — der\n // Ordnungsstempel entscheidet, nie der zufällig frischere Kopf\n // (Review 27: setGrade auf dem alten Kopf NACH dem Trust-Akt des\n // frischen muss die Kettung überleben)\n if (old.gradeOutLast !== undefined && (head.gradeOutLast === undefined || (old.gradeOutOrder ?? 0n) > (head.gradeOutOrder ?? 0n))) {\n head.gradeOutLast = old.gradeOutLast\n head.gradeOutOrder = old.gradeOutOrder\n }\n // Pause ist chain-level und ÜBERLEBT die Kettung (Review 37, B-2):\n // der Zustand der Beziehung, auf die gekettet wird, gewinnt gegen\n // Vor-Kettungs-Akte des frischen Tupels\n head.trustPaused = old.trustPaused ?? head.trustPaused\n head.sharedGroups = [...new Set([...(old.sharedGroups ?? []), ...(head.sharedGroups ?? [])])]\n // NICHT migriert (per Tupel, stirbt mit dem alten Kopf):\n // trustReceived, starReceived, starInfo, starSaltIn, sentMapping,\n // sub (Baseline/inFlight), starSeqNext. Die 5.5-Neuausstellung ist\n // die stehende Pflicht des neuen Kopfs; ihr Producer ist\n // trust.reissueTrust via starRefreshAll.\n // die Pflicht entsteht, wenn eine DECLARATION ausgestellt war (5.5:\n // „a subject holding an issued declaration … MUST re-issue\") — auch\n // ohne Trust-Akt (eigenständiges setGrade); Review 33, B-1\n if (head.trustGiven || head.gradeOutLast !== undefined) head.trustReissueDue = true\n say(p, `Kontinuität: ${head.name} wiedererkannt — neues Tupel an die Beziehung gekettet (${head.state}, ${head.chain.length + 1} Enactments)`)\n return true\n}\n\n// V2-Hook (5.5): direkt nach der Kettung wird die Neuausstellung\n// versucht; ein Bau-Fehler lässt die Pflicht (trustReissueDue) stehen —\n// ihr Producer ist starRefreshAll, nie eine Wiederzustellung.\nasync function v2Reissue (p: Person, newKey: string, when: number, ent: any, outbound: any[]): Promise<string | undefined> {\n const t = p.contacts.get(newKey)\n if (!t?.trustReissueDue) return undefined\n try {\n const r = await reissueTrust(p, newKey, when, ent)\n if (r) outbound.push(...r.outbound)\n return undefined\n } catch (e: any) { return String(e?.message ?? e) }\n}\n\n// ── Empfangs-Dispatch ───────────────────────────────────────────────────\nconst iAmRecord = (t: any, newKey: string) => t.channel.own.anchor < newKey // lexikographisch kleinerer NEUER Anker\nconst tupleOf = (p: Person, rkid: string) => {\n const ctx = p.contexts.get(rkid)\n if (!ctx) return null\n const e = [...p.contacts.entries()].find(([, c]) => c.channel?.own?.anchor === ctx.anchor)\n return e ? { key: e[0], t: e[1], ctx } : null\n}\n\nconst TT_PROBE = 'https://real-life.org/trust-tasks/continuity-probe/0.1'\nconst TT_MAP = 'https://real-life.org/trust-tasks/continuity-mapping/0.1'\nexport async function receiveContinuity (p: Person, env: any, when: number, ent: any = {}) {\n const opened = await C.openEnvelope(p, env) // Stufen 1–4, Cache-Lesung\n if (opened.error) return { handled: false }\n const hit = tupleOf(p, env.rkid)\n if (!hit) return { handled: false }\n if (opened.duplicate) {\n // 4.2: byte-identischer Re-Ack innerhalb der Retention\n const stored = hit.t.ackStore?.get(opened.digest)\n return { handled: true, duplicate: true, ack: stored ? { to: hit.t, kind: 'delivery-ack/0.1 (Re-Ack, byte-identisch)', env: stored } : undefined }\n }\n const doc = opened.doc\n if (doc?.type !== TT_PROBE && doc?.type !== TT_MAP) return { handled: false, doc }\n // Dokumentprofil (Delivery §3) + Artefakt-Schema (Stufen 5/7)\n if (!schemaOk('rltp-delivery-document.schema.json', doc) || doc.proof !== undefined) return { handled: true, error: 'malformed document' }\n // Stufe 5: recipient; die issuer-Bindung (Stufe 8) läuft NACH den\n // Payload-Schemata (Review 32)\n if (doc.recipient !== hit.t.channel.own.anchor) return { handled: true, error: 'outer binding (recipient)' }\n // Kalender-Validität des DOKUMENTS (Review 12, B-3); die PAYLOAD-\n // Kalenderprüfung sitzt NACH dem Artefakt-Schema (Review 31)\n if (!C.calOK(doc.issuedAt)) return { handled: true, error: 'calendar-invalid issuedAt' }\n if (doc.type === TT_PROBE && !schemaOk('visibility-continuity-probe.schema.json', doc.payload)) return { handled: true, error: 'malformed probe' }\n if (doc.type === TT_MAP && !schemaOk('visibility-continuity-mapping.schema.json', doc.payload)) return { handled: true, error: 'malformed mapping' }\n if (doc.type === TT_MAP && !C.calOK(doc.payload?.body?.issuedAt)) return { handled: true, error: 'calendar-invalid issuedAt' } // Stufe 8, nach dem Schema (Review 31)\n if (doc.issuer !== hit.key) return { handled: true, error: 'outer binding (issuer, Stufe 8)' }\n // Profil-Regel (Review 29/30): Stufe 8 NACH dem Payload-Schema —\n // ein präsentes ceremony.enactment kann bei diesen Payloads nie\n // nachrechnen (kein umschlossenes Bindungsmaterial) →\n // failed(validation-failed); andere Framework-Member passieren (§4.11.1)\n if (doc.ceremony?.enactment !== undefined) return { handled: true, error: 'ceremony.enactment kann nicht nachrechnen (validation-failed)' }\n // GESAMTER Empfang unter dem Kontakt-Lock (B-1: kein Rollback durch\n // parallele Handler); der Ack entsteht IN den Handlern nach der\n // vollen Validierung (M-2), Commit hier atomar mit Cache+Store\n return withContLock(hit.t, async () => {\n // §6.4: ein deaktiviertes Tupel nimmt nichts mehr an (Review 5, B-1)\n if (hit.t.deactivated) return { handled: true, error: 'tuple deactivated' }\n // Stage-4-Reentry nach Lock-Wartezeit: ein inzwischen verarbeitetes\n // Duplikat erhält den gespeicherten Ack byte-identisch\n if ((p.deliveryCache ?? new Set()).has(opened.digest!)) {\n const stored = hit.t.ackStore?.get(opened.digest)\n return { handled: true, duplicate: true, ack: stored ? { to: hit.t, kind: 'delivery-ack/0.1 (Re-Ack, byte-identisch)', env: stored } : undefined }\n }\n const mkAck = () => buildAck(p, hit.t, opened.digest!, doc.threadId, when).then((a: any) => a.env)\n // Effekt + completed-effect cache + gespeicherter Ack committen in\n // EINEM synchronen Zug IM Handler (Review 6, B-5: „inside the\n // effect's transaction\") — die Outbound-PRODUKTION (buildMapping,\n // V2) läuft danach; ihr Scheitern hinterlässt eine Pflicht, nie\n // einen halben Empfangs-Commit\n const commitAck = (ackEnv: any) => {\n C.effectDone(p, opened.digest)\n ;(hit.t.ackStore ??= new Map()).set(opened.digest, ackEnv)\n return { to: hit.t, kind: 'delivery-ack/0.1', env: ackEnv }\n }\n return doc.type === TT_PROBE\n ? handleProbe(p, hit, doc.payload, doc.threadId, when, ent, mkAck, commitAck)\n : handleMapping(p, hit, doc.payload, when, ent, mkAck, commitAck)\n })\n}\n\nasync function handleProbe (p: Person, { key, t }: any, artifact: any, threadId: string, when: number, ent: any, mkAck: () => Promise<any>, commitAck: (env: any) => any) {\n // Schema lief im Dispatch; hier die wertgebundenen Reste (M-3)\n const doc = artifact.body\n if (!C.intStr(doc.probe) || !C.intStr(doc.seq) // NaN in probeSeqIn wäre Replay-Zustandskorruption (Review 9, P-B1)\n || doc.blinded.length !== 256) // die Chunkform ist FEST: genau 256 Einträge (Review 10, P-B1-Rest)\n return { handled: true, error: 'malformed probe' }\n // Senderseitiger k_p, aus Empfängersicht nachgerechnet (Richtung!)\n const kp = await kProbe(t.channel.own.x.priv, t.channel.counterpartKa, key, t.channel.own.anchor)\n if ((await hmacU(kp, jcs(doc))) !== artifact.proof.mac) return { handled: true, error: 'probe mac' }\n if (BigInt(doc.probe) <= BigInt(t.probeSeqIn ?? '0')) return { handled: true, error: 'probe replay (nicht streng größer)' }\n // VERGIFTETE Probe (Review 21): nach einem Assembly-Konflikt wird\n // KEIN weiterer Chunk dieser Lieferung quittiert — sonst\n // kombinieren früh geackte, verlorene Pufferwirkungen mit späteren\n // Acks zu einer falschen Completion (§6a.2 übernimmt die\n // 5.2a-Konfliktregeln in kind)\n if (t.probePoison?.has(doc.probe)) return { handled: true, error: 'probe vergiftet (assembly conflict)' }\n // Re-Check nach den MAC-Awaits (Review 6, B-1): die Assembly ist\n // Tupel-Zustand und nimmt nach einer Deaktivierung nichts mehr auf\n if (t.deactivated) return { handled: true, error: 'tuple deactivated' }\n // Chunk-Sammlung pro (Tupel, probe): LÜCKEN PUFFERN (Ankunftsreihen-\n // folge irrelevant, 5.2a in kind), nur eine STRIKT HÖHERE probe\n // verdrängt die offene, eine niedrigere wird verworfen; threadId-\n // Dissens verwirft; seq-Konflikt (andere Bytes) verwirft (byte-\n // identische Wiederholung fängt duplicate-known auf Envelope-Ebene).\n // Entscheidungen auf LOCALS (Review 6, B-1) — GESCHRIEBEN wird erst\n // nach Ack-Bau und letztem Re-Check, synchron mit dem Commit\n const cur = t.probeAsm\n const displaced = cur && BigInt(doc.probe) > BigInt(cur.probe)\n if (cur && !displaced && BigInt(doc.probe) < BigInt(cur.probe)) return { handled: true, error: 'below open probe assembly' }\n const a = (!cur || displaced) ? { probe: doc.probe, threadId, chunks: new Map(), lastSeq: undefined as string | undefined } : cur\n if (threadId !== a.threadId) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'probe assembly conflict (threadId)' } }\n const seq = BigInt(doc.seq)\n if (a.chunks.has(doc.seq)) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'probe assembly conflict (seq)' } }\n if (doc.last && a.lastSeq !== undefined) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'probe assembly conflict (two last)' } }\n const candLast = doc.last ? doc.seq : a.lastSeq\n if (candLast !== undefined && seq > BigInt(candLast)) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'seq beyond last' } }\n // auch BEREITS GEPUFFERTE Chunks oberhalb von last verwerfen die\n // Assembly (Review 16, B-1 — 5.2a in kind, Ankunftsreihenfolge egal)\n if (candLast !== undefined) for (const s of a.chunks.keys()) if (BigInt(s) > BigInt(candLast)) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'seq beyond last (gepuffert)' } }\n // Komplettierung VOR dem Puffern vorhersagen (Review 5, B-4 — die\n // Star-Struktur gespiegelt): jeder NICHT-komplettierende Chunk (auch\n // ein früh eintreffender last:true) wird nach den Per-Chunk-Gates\n // quittiert und gepuffert; NUR der KOMPLETTIERENDE wartet auf die\n // Union-Validierung (M-2) — Ankunftsreihenfolge ist irrelevant (5.2a)\n const complete = candLast !== undefined && (() => {\n for (let i = 1n; i <= BigInt(candLast); i++) if (String(i) !== doc.seq && !a.chunks.has(String(i))) return false\n return true\n })()\n if (!complete) {\n const __ackEnv = await mkAck()\n if (t.deactivated) return { handled: true, error: 'tuple deactivated' } // Re-Check (B-1), danach kein await\n t.probeAsm = a // Übernahme JETZT — synchron mit Puffern + Commit (B-5)\n if (doc.last) a.lastSeq = doc.seq\n a.chunks.set(doc.seq, doc.blinded)\n return { handled: true, partial: true, ack: commitAck(__ackEnv) }\n }\n // Union aus Puffer + aktuellem Chunk OHNE Mutation; globale\n // Sortierung + Duplikatfreiheit (§6a.2)\n const union: string[] = []\n for (let i = 1n; i <= BigInt(candLast!); i++) union.push(...(String(i) === doc.seq ? doc.blinded : a.chunks.get(String(i))))\n if (!union.every((x, i, arr) => i === 0 || arr[i - 1] < x)) { t.probeAsm = null; (t.probePoison ??= new Set()).add(doc.probe); return { handled: true, error: 'probe assembly invalid (order/duplicates)' } }\n // Schnitt gegen die GEGENSEITEN-Anker des eigenen Prior-Candidate-Sets\n // — reine Rechnung, VOR dem Ack-Bau, damit zwischen Re-Check und\n // Übernahme kein await mehr liegt (Review 5, B-1)\n const matches = []\n for (const cp of t.priorCands?.counterpart ?? []) {\n if (cp === key) continue // §6a: das frische Tupel selbst ist NIE ein prior (Selbst-Ketten-Schutz)\n if (union.includes(await hmacU(kp, cp))) matches.push(cp)\n }\n const __ackEnv = await mkAck() // JETZT ist alles validiert (M-2)\n if (t.deactivated) return { handled: true, error: 'tuple deactivated' } // Re-Check (B-1), danach kein await bis zum Commit\n // Übernahme + Cache + Ack in EINEM synchronen Zug (B-5); die\n // Kettenwahl mutiert ebenfalls synchron — erst DANACH die fehlbare\n // Outbound-Produktion (ihr Scheitern hinterlässt eine Pflicht)\n t.probeAsm = null\n if (BigInt(doc.probe) > BigInt(t.probeSeqIn ?? '0')) t.probeSeqIn = doc.probe // monoton (B-1)\n if (t.probePoison) for (const ps of t.probePoison) if (BigInt(ps) <= BigInt(t.probeSeqIn)) t.probePoison.delete(ps) // Gift unterhalb des High-Water ist gegenstandslos\n const ack = commitAck(__ackEnv)\n if (!matches.length) { say(p, `Probe von ${t.name}: kein Match — ehrlich eine neue Beziehung`); return { handled: true, matches: 0, ack } }\n const outbound = []\n let chained = false\n let outboundError\n if (iAmRecord(t, key)) {\n // Record-Seite: einmal wählen, endgültig — „the record side chains\n // atomically with issuing its choice\" (Review 12, B-2): erst das\n // Wahl-Mapping FEHLBAR vorbereiten, dann Wahl + Kette + Ausgabe in\n // EINEM synchronen Zug; scheitert die Vorbereitung, wird NICHT\n // gekettet und die volle Wahl-Pflicht bleibt stehen (Flush holt sie\n // atomar nach)\n if (!t.contChosen) {\n // Wahl frei — hier: der erste LEBENDE, KETTBARE Match (Review 19,\n // B-4: ein von einem konkurrierenden Tupel verbrauchter erster\n // Match blockiert die weiteren gültigen nicht; reichste Historie\n // wäre App-Sache). Kette ZUERST (Review 13, B-1): „chains\n // atomically with issuing its choice\" heißt beides oder keins.\n for (const choice of matches) {\n if (p.contacts.get(choice)?.deactivated) continue // toter prior → nächster Match\n let prep: any\n try { prep = await prepareContMapping(p, key, choice, when, ent) }\n catch (err: any) {\n // die Pflicht trägt ALLE Matches (Review 20, B-3): wird der\n // erste vor dem Flush unkettbar, versucht der Flush die\n // übrigen lebenden Kandidaten\n t.contMappingDue = { prior: choice, kind: 'choice', alts: matches.filter((x) => x !== choice) }\n outboundError = String(err?.message ?? err)\n break\n }\n if (t.deactivated || t.contChosen) break\n chained = chainTuple(p, key, choice, when)\n if (!chained) continue // Rennen verloren → nächster lebender Match\n t.contChosen = choice\n if (t.contMappingDue?.kind === 'choice') delete t.contMappingDue // die alte Bau-Pflicht ist ERFÜLLT (Review 14, B-2)\n outbound.push(commitContMapping(prep))\n const v2Err = await v2Reissue(p, key, when, ent, outbound)\n if (v2Err) outboundError = outboundError ? outboundError + ' · ' + v2Err : v2Err\n break\n }\n }\n } else {\n // Nicht-Record: Match-Report (löst NIE eine Kette aus)\n if (!t.contReported) {\n t.contReported = matches[0]\n try { outbound.push(await buildMapping(p, key, matches[0], when, ent)) }\n catch (err: any) { t.contMappingDue = { prior: matches[0], kind: 'report' }; outboundError = String(err?.message ?? err) }\n }\n }\n return { handled: true, matches: matches.length, chained, name: chained ? t.name : undefined, outbound, outboundError, ack }\n}\n\nasync function handleMapping (p: Person, { key, t }: any, artifact: any, when: number, ent: any, mkAck: () => Promise<any>, commitAck: (env: any) => any) {\n if (!C.shaped(artifact ?? {}, { body: 'object', proof: 'object' })\n || !C.shaped(artifact.body, { prior: 'string', next: 'string', to: 'string' })\n || typeof artifact.proof.mac1 !== 'string' || typeof artifact.proof.mac2 !== 'string') return { handled: true, error: 'malformed mapping' }\n const body = artifact.body\n const { mac1, mac2 } = artifact.proof\n const fail = (why: string) => { say(p, `Kontinuitäts-Mapping verworfen: ${why}`); return { handled: true, error: why } }\n if (body.to !== t.channel.own.anchor) return fail('to ≠ eigener neuer Anker')\n if (body.next !== key) return fail('next ≠ neuer Anker der Gegenseite')\n // prior MUSS im Schnappschuss liegen (nie das frische Tupel, nie tiefere Kettenglieder)\n if (body.prior === key) return fail('prior = frisches Tupel (§6a)') // Selbst-Ketten-Schutz, auch bei vergiftetem Schnappschuss\n if (!(t.priorCands?.counterpart ?? []).includes(body.prior)) return fail('prior nicht im Prior-Candidate-Set')\n const old = p.contacts.get(body.prior)\n if (!old?.channel?.own) return fail('alte Beziehung ohne eigenen Kontext')\n const msg = jcs(body)\n if ((await hmacU(await kMac(old.channel.own.x.priv, old.channel.counterpartKa, 'rltp/visibility/mac/cont1'), msg)) !== mac1) return fail('mac1 (alter Beziehungs-Schlüssel)')\n if ((await hmacU(await kMac(t.channel.own.x.priv, t.channel.counterpartKa, 'rltp/visibility/mac/cont2'), msg)) !== mac2) return fail('mac2 (neuer Beziehungs-Schlüssel)')\n // 6.4, die GENERISCHE Revisionsregel im (next, to)-Scope (Review 11,\n // B-2): höher ersetzt · gleich + JCS-identischer Body = idempotenter\n // Repeat (No-op, geackt) · gleich + anderer Body = Äquivokation ·\n // niedriger = reject. Der Revisionsstand rückt erst NACH allen\n // Ablehnungsgründen vor (Record-Freeze gilt whatever its revision)\n if (BigInt(body.revision) === BigInt(t.contRevIn ?? '0')) {\n if (t.contBodyIn && msg === t.contBodyIn) {\n const __ackEnv = await mkAck()\n if (t.deactivated) return fail('tuple deactivated')\n return { handled: true, idempotent: true, ack: commitAck(__ackEnv) }\n }\n return fail('Äquivokation — gleiche Revision, anderer Body')\n }\n if (BigInt(body.revision) < BigInt(t.contRevIn ?? '0')) return fail('mapping revision (niedriger)')\n const senderIsRecord = key < t.channel.own.anchor\n // Record-Freeze VOR Ack und Revisionsstand (B-3): ein verworfenes\n // Dokument konsumiert weder Revision noch Krypto\n if (senderIsRecord && t.contRecordPrior && t.contRecordPrior !== body.prior) return fail('Äquivokation — Record-Wahl ist eingefroren')\n // §6a.4/6.4: „On verification of a record-side mapping, chain\" —\n // wurde der genannte alte Kopf von einem KONKURRIERENDEN Tupel\n // gekettet, ist die Kette hier nicht möglich: ablehnen statt\n // Freeze + Ack + Alignment ohne Kette (Review 14, B-3). ABER: „a\n // head deactivated by THIS VERY chaining remains a valid prior for\n // this tuple\" (Review 15) — eine höhere Revision derselben\n // eingefrorenen Wahl wird per 6.4 normal verarbeitet\n const priorTaken = () => old.deactivated && old.chainedInto !== key\n if (senderIsRecord && priorTaken()) return fail('prior von konkurrierendem Tupel gekettet (§6.4) — nicht kettbar')\n const __ackEnv = await mkAck() // alle Gates bestanden — VOR der Mutation\n if (t.deactivated) return fail('tuple deactivated') // Re-Check (B-1), danach kein await bis zum Commit\n if (senderIsRecord && priorTaken()) return fail('prior von konkurrierendem Tupel gekettet (§6.4) — nicht kettbar') // Re-Check (B-3)\n // Effekt (Revision, Freeze, Kette) + Cache + Ack in EINEM synchronen\n // Zug (Review 6, B-5/B-1); die fehlbare Outbound-Produktion läuft\n // DANACH — ihr Scheitern hinterlässt die Pflicht (contMappingDue),\n // nie einen halben Commit\n t.contRevIn = body.revision\n t.contBodyIn = msg // für den Idempotenz-Vergleich (Review 11, B-2)\n const outbound: any[] = []\n let chainedNow = false // das ECHTE Kettenergebnis (Review 14, B-3), nie eine Ableitung\n const done = (extra: any = {}) => ({ handled: true, chained: chainedNow, name: t.name, outbound, ack, ...extra })\n let ack: any\n if (senderIsRecord) {\n t.contRecordPrior = body.prior\n // nach den Re-Checks garantiert kettbar ODER schon in GENAU dieses\n // Tupel gekettet (Re-Verifikation derselben Wahl, Review 15)\n chainedNow = chainTuple(p, key, body.prior, when) || old.chainedInto === key\n // „the non-record side's match-report duty … dies on verifying the\n // record side's mapping on that tuple\" (Review 11, B-3): der alte\n // Match-Report wird retired — nie mehr gesendet (stale\n // counter-claim MUST NOT be sent), sein Ack-Ref bleibt erhalten\n for (const o of (t.outbox ?? new Map()).values()) if (o.kind === 'continuity-mapping' && o.duty !== 'align') o.retired = true\n if (t.contMappingDue?.kind === 'report') delete t.contMappingDue\n ack = commitAck(__ackEnv)\n if (!t.contAligned) {\n // ein noch UNQUITTIERTES Alignment wird byte-identisch erneut\n // gesendet (Review 16, B-2: „is resent — same revision,\n // idempotent by 6.4\") — eine höhere Record-Revision derselben\n // Wahl prägt NIE eine zweite Alignment-Revision für dieselbe\n // offene Pflicht\n const pending = [...(t.outbox ?? new Map()).values()].find((o: any) => o.kind === 'continuity-mapping' && o.duty === 'align' && !o.retired)\n if (pending) outbound.push({ to: t, kind: 'continuity-mapping/0.1 (Retry, byte-identisch)', env: pending.env })\n else {\n // Produktion registriert in der Outbox; die Pflicht stirbt erst\n // mit dem QUITTIERTEN Dokument (Ack-Pfad setzt contAligned)\n try { outbound.push(await buildMapping(p, key, body.prior, when, ent, 'align')); if (t.contMappingDue?.prior === body.prior) delete t.contMappingDue }\n catch (err: any) { t.contMappingDue = { prior: body.prior, kind: 'align' }; return done({ outboundError: String(err?.message ?? err) }) }\n }\n }\n const v2Err = await v2Reissue(p, key, when, ent, outbound)\n if (v2Err) return done({ outboundError: v2Err })\n } else {\n // Match-Report der Nicht-Record-Seite: darf die Wahl INFORMIEREN,\n // kettet nie selbst. Die Record-Wahl darauf kettet ATOMAR mit der\n // Ausgabe ihres Mappings (Review 12, B-2): erst vorbereiten, dann\n // Wahl + Kette + Ausgabe synchron; Fehlschlag → volle Wahl-Pflicht\n if (iAmRecord(t, key) && !t.contChosen) {\n ack = commitAck(__ackEnv) // der EMPFANGS-Effekt (Revision) committet unabhängig von der Wahl\n let prep: any\n try { prep = await prepareContMapping(p, key, body.prior, when, ent) }\n catch (err: any) { t.contMappingDue = { prior: body.prior, kind: 'choice' }; return done({ outboundError: String(err?.message ?? err) }) }\n if (t.deactivated || t.contChosen) return done()\n // Kette ZUERST (Review 13, B-1): scheitert sie, keine Wahl, keine Ausgabe\n chainedNow = chainTuple(p, key, body.prior, when)\n if (chainedNow) {\n t.contChosen = body.prior\n if (t.contMappingDue?.kind === 'choice') delete t.contMappingDue // die alte Bau-Pflicht ist ERFÜLLT (Review 14, B-2)\n outbound.push(commitContMapping(prep))\n const v2Err = await v2Reissue(p, key, when, ent, outbound)\n if (v2Err) return done({ outboundError: v2Err })\n }\n } else {\n // NUR das Gegen-Mapping AUF DER GEWÄHLTEN Beziehung ist die\n // ALIGNMENT-Antwort (Review 14, B-1): body.prior = der eigene\n // alte Anker des Senders = unser Kontaktschlüssel der gewählten\n // alten Beziehung (t.contChosen). Ein Match-Report für eine\n // ANDERE gemeinsame Altbeziehung beantwortet die Wahl NICHT —\n // erst die echte Antwort beendet die Resend-Pflicht (retiren,\n // Ack-Ref bleibt; Review 13, B-2)\n if (t.contChosen && body.prior === t.contChosen) for (const o of (t.outbox ?? new Map()).values()) if (o.kind === 'continuity-mapping') o.retired = true\n ack = commitAck(__ackEnv)\n }\n }\n return done()\n}\n\n/**\n * The host's producing call for a mapping the receiver still owes\n * (review 6, B-3): a transient seal failure during probe/mapping\n * handling persists the obligation in contMappingDue; this call — not a\n * redelivery, which the freshness rule forbids — builds and returns it.\n */\nexport async function flushContinuity (p: Person, newKey: string, when: number, ent: any = {}) {\n const t = p.contacts.get(newKey)\n if (!t || t.deactivated) return { outbound: [] } // Per-Tupel-Pflichten sterben mit dem Tupel (Review 8, B-2)\n // Retry-ENTSCHEIDUNG und Pflicht-Bau laufen unter dem Kontakt-Lock\n // (Review 12, B-1): der Empfang (der Reports retired) hält denselben\n // Lock — kein Fenster, in dem ein gestarteter Flush eine gerade\n // gestorbene Report-Pflicht doch noch ausstellt („a match report\n // flushed after the choice … MUST NOT be sent\"). Nur der frische\n // Probe-Neubau läuft danach (buildProbe nimmt denselben Lock selbst).\n const r: any = await withContactLock(t, async () => {\n if (t.deactivated) return { outbound: [] }\n // unquittierte MAPPINGS: byte-identischer Retry (4.2), retired nie\n // (gestorbene Match-Report-Pflicht, Review 11, B-3). PROBEN nie\n // byte-identisch — §6a: „a resend is always a fresh probe sequence\n // with freshly sampled padding\" (Review 5, B-3): stale Einträge\n // werden RETIRED (Ack-Ref bleibt, Review 6, B-3), EINE frische\n // Probe ersetzt sie (Bau nach der Lock-Sektion)\n const retries: any[] = [...(t.outbox ?? new Map()).values()]\n .filter((o: any) => o.kind === 'continuity-mapping' && !o.retired)\n .map((o: any) => ({ to: t, kind: o.kind + '/0.1 (Retry, byte-identisch)', env: o.env }))\n const staleProbes = [...(t.outbox ?? new Map()).values()].filter((o: any) => o.kind === 'continuity-probe' && !o.retired)\n let probeDue = false\n if (staleProbes.length) { for (const o of staleProbes) o.retired = true; probeDue = true }\n if (!t.contMappingDue) return { outbound: retries, probeDue }\n // Single-Flight (Review 7, B-3): zwei parallele Flushes liefern nie\n // zwei Mappings für EINE Pflicht\n if (t.contFlushPending) return { outbound: retries, pending: true, probeDue }\n t.contFlushPending = true\n try {\n const due = t.contMappingDue\n // eine Choice-Pflicht nach bereits GEFALLENER Wahl ist tot\n // (Review 14, B-2): der Direktpfad hat sie erfüllt oder ersetzt —\n // sie darf NIE in den generischen Bau fallen (der eine frische\n // Revision prägte statt der Same-Revision-Wiederholung)\n if (due.kind === 'choice' && t.contChosen) {\n if (t.contMappingDue === due) delete t.contMappingDue\n return { outbound: retries, probeDue }\n }\n if (due.kind === 'choice' && !t.contChosen) {\n // die nachgeholte RECORD-WAHL kettet atomar mit der Ausgabe\n // (Review 12, B-2) und ITERIERT alle bekannten Matches\n // (Review 20, B-3): erster lebender, kettbarer Kandidat\n // gewinnt; sind alle tot, stirbt die Pflicht ehrlich\n // ungekettet (spätere Probes wählen neu). Ein Bau-Fehler\n // wirft → der äußere catch hält die Pflicht am Leben.\n const cands = [...new Set([due.prior, ...(due.alts ?? [])])]\n for (const cand of cands) {\n if (p.contacts.get(cand)?.deactivated) continue\n const prep = await prepareContMapping(p, newKey, cand, when, ent)\n if (t.deactivated) return { outbound: retries, probeDue }\n if (t.contChosen) break\n if (!chainTuple(p, newKey, cand, when)) continue // Rennen verloren → nächster Kandidat\n t.contChosen = cand\n retries.push(commitContMapping(prep))\n break\n }\n if (t.contMappingDue === due) delete t.contMappingDue\n return { outbound: retries, probeDue }\n }\n const mapping = await buildMapping(p, newKey, due.prior, when, ent, due.kind)\n // der Flush stellt GENAU den Zustand her, den der gelungene\n // Direktpfad hinterlassen hätte — kind-bewusst. Und er löscht NUR\n // die Pflicht, die er selbst gebaut hat: ist während des await\n // eine NEUERE an ihre Stelle getreten, bleibt sie stehen (Review\n // 8, B-3); aligned setzt erst der ACK — hier stirbt die BAU-Pflicht\n if (t.contMappingDue === due) delete t.contMappingDue\n return { outbound: [...retries, mapping], probeDue }\n } catch (err: any) {\n return { outbound: retries, probeDue, outboundError: String(err?.message ?? err) }\n } finally { t.contFlushPending = false }\n })\n if (r.probeDue) {\n try { r.outbound.push(...(await buildProbe(p, newKey, when, { ...ent, pad: undefined, threadId: undefined }) ?? [])) }\n catch (err: any) { r.outboundError = r.outboundError ? r.outboundError + ' · ' + String(err?.message ?? err) : String(err?.message ?? err) }\n }\n delete r.probeDue\n return r\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Person } from './deps.js';
|
|
2
|
+
export declare const BUNDLE_TYPE: string;
|
|
3
|
+
export declare const DELIVERY_TYPE: string;
|
|
4
|
+
export declare const CHALLENGE_MAX_AGE: number;
|
|
5
|
+
export declare const ISSUANCE_WINDOW: number;
|
|
6
|
+
export declare const SKEW_TOLERANCE: number;
|
|
7
|
+
/** total resolution by precedence: recorded → open → unknown; the one
|
|
8
|
+
* write is the aging latch (set-only, whole-second boundary, lock-free) */
|
|
9
|
+
export declare function resolve(p: Person, value: string, now: number): 'recorded' | 'open' | 'unknown';
|
|
10
|
+
export declare function show(p: Person, when: number, ent?: any): Promise<any>;
|
|
11
|
+
export declare function scan(p: Person, peerCardIn: any, when: number, ent?: any): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* Resume owed issuance after a failure between record and outbox (the
|
|
14
|
+
* scanner's bundle, the deferred counter-step document). Idempotent; the
|
|
15
|
+
* host calls it before flushEncounter. Returns the documents produced now.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resumeEncounter(p: Person, when: number): Promise<{
|
|
18
|
+
outbound: any[];
|
|
19
|
+
}>;
|
|
20
|
+
export declare function counter(p: Person, peerAnchor: string, when: number, ent?: any): Promise<any>;
|
|
21
|
+
export declare function captureSentCard(p: Person, cardIn: any, when: number): Promise<any>;
|
|
22
|
+
export declare function receiveEncounter(p: Person, env: any, when: number, ent?: any): Promise<any>;
|
|
23
|
+
export declare function flushEncounter(p: Person): {
|
|
24
|
+
outbound: any[];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=encounter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encounter.d.ts","sourceRoot":"","sources":["../../src/probe/encounter.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAQvC,eAAO,MAAM,WAAW,QAA8B,CAAA;AACtD,eAAO,MAAM,aAAa,QAA2C,CAAA;AAErE,eAAO,MAAM,iBAAiB,QAAa,CAAA;AAC3C,eAAO,MAAM,eAAe,QAAiB,CAAA;AAC7C,eAAO,MAAM,cAAc,QAAa,CAAA;AAgBxC;4EAC4E;AAC5E,wBAAgB,OAAO,CAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAM/F;AA6ED,wBAAsB,IAAI,CAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAYjE;AA+ED,wBAAsB,IAAI,CAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBA8ClF;AAiCD;;;;GAIG;AACH,wBAAsB,eAAe,CAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;GAa7D;AASD,wBAAsB,OAAO,CAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAQxF;AAgDD,wBAAsB,eAAe,CAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAoC1E;AAGD,wBAAsB,gBAAgB,CAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,GAAQ,gBAYvF;AA6RD,wBAAgB,cAAc,CAAE,CAAC,EAAE,MAAM;;EAMxC"}
|