diff --git a/CITATIONS-UNRESOLVED.md b/CITATIONS-UNRESOLVED.md index 5917c52..7df7ac4 100644 --- a/CITATIONS-UNRESOLVED.md +++ b/CITATIONS-UNRESOLVED.md @@ -1,7 +1,7 @@ # Citations in this repository that you cannot open This file is generated by the publication stager of this repository (scripts/legaturi-declaratie.cjs in the Aere working -tree) and enforced by legaturi.cjs. It is the complete list, measured on 2026-10-27, of every path cited in this +tree) and enforced by legaturi.cjs. It is the complete list, measured on 2026-10-28, of every path cited in this repository that does not resolve to a published file. A citation is a promise that a claim is checkable. Where the target is not published, or names a file the reader creates diff --git a/payments/proba-verifica-chitanta.mjs b/payments/proba-verifica-chitanta.mjs index dafa3ef..5bb3c21 100644 --- a/payments/proba-verifica-chitanta.mjs +++ b/payments/proba-verifica-chitanta.mjs @@ -110,8 +110,14 @@ try { await ruleaza([FISIER]), 2, 'PARTIAL', /not consulted/); cer('V4 (NEW) the reference verifier answers PARTIAL, finality PENDING (a receipt checked right after it was issued): PARTIAL, exit 2 (the route says PARTIAL)', await ruleaza([FISIER, '--rpc', RPC('bun'), '--verify-proof', VP], { AERE_STUB_FIN: 'PENDING' }), 2, 'PARTIAL', /finality PENDING/); - cer('V5 (NEW) finality UNMEASURED: PARTIAL, exit 2', - await ruleaza([FISIER, '--rpc', RPC('bun'), '--verify-proof', VP], { AERE_STUB_FIN: 'UNMEASURED' }), 2, 'PARTIAL', /finality UNMEASURED/); + // 2026-10-28 (R10-STRAIN-05, NEW3): with UNMEASURED the reader must not state that the notarization is not under an anchor (a fact + // about the chain nobody measured); the old reader wrote exactly that for every state but PASSED + cer('V5 (NEW, NEW3) finality UNMEASURED: PARTIAL, exit 2, the notarization NOT MEASURED, never "not under an anchor yet"', + await ruleaza([FISIER, '--rpc', RPC('bun'), '--verify-proof', VP], { AERE_STUB_FIN: 'UNMEASURED' }), 2, 'PARTIAL', + /^(?![\s\S]*is not under a post-quantum certified anchor yet)[\s\S]*was not measured under a post-quantum certified anchor \(finality UNMEASURED/); + cer('V5b (NEW3) finality PENDING keeps the statement about the chain: "not under a post-quantum certified anchor yet"', + await ruleaza([FISIER, '--rpc', RPC('bun'), '--verify-proof', VP], { AERE_STUB_FIN: 'PENDING' }), 2, 'PARTIAL', + /is not under a post-quantum certified anchor yet \(finality PENDING/); cer('V6 finality FAILED (the verifier says INVALID): INVALID, exit 1 (the route says INVALID)', await ruleaza([FISIER, '--rpc', RPC('bun'), '--verify-proof', VP], { AERE_STUB_FIN: 'FAILED' }), 1, 'INVALID'); cer('V7 (NEW) the chain does not answer (HTTP 500): PARTIAL, exit 2, said (the route says PARTIAL since 2026-10-27)', diff --git a/payments/verifica-chitanta.mjs b/payments/verifica-chitanta.mjs index fd78510..5d6e324 100644 --- a/payments/verifica-chitanta.mjs +++ b/payments/verifica-chitanta.mjs @@ -11,14 +11,17 @@ // notarization under a post-quantum certified anchor (finality PASSED). Exit 1 INVALID, with the reasons; a file that is not a receipt // (not JSON, or no instruction and settlement envelope objects) is INVALID by name. Exit 2 PARTIAL: something was not measured (no // --rpc, no chain answer, an RPC of another chain, no --verify-proof or no verifier at that path, a verifier that ran and gave no -// verdict, the policy or the inputs missing from the file, or the notarization not under an anchor yet: finality PENDING or -// UNMEASURED), or the reader itself stopped before a verdict. These are the verdicts of POST /v1/payments/verify on the same rules. +// verdict, the policy or the inputs missing from the file, the notarization not under an anchor yet: finality PENDING, or the +// notarization not measured: finality UNMEASURED or absent), or the reader itself stopped before a verdict. These are the verdicts of POST /v1/payments/verify on the same rules. // (Corrected 2026-10-27: until this date the tool wrote VALID and exited 0 without --verify-proof, and when the notarization was PENDING // or UNMEASURED; a file without policy or inputs was INVALID. An envelope that the reference verifier calls PARTIAL on ANOTHER level, // the Bitcoin witness or a signature scheme it cannot check, with the finality of its notarization PASSED, is VALID here as on the // route, which decides on finality. Corrected again the same day: an RPC of another chain was handed on to the reference verifier, // which answered FAILED, so an authentic receipt came out INVALID; it is now judged offline and the verdict is PARTIAL. A file that -// was not a receipt ended in an exception with the exit code of INVALID; it is now refused by name.) +// was not a receipt ended in an exception with the exit code of INVALID; it is now refused by name. Corrected 2026-10-28: with the +// finality UNMEASURED, for example a chain that did not answer, the reader said that the notarization is not under a post-quantum +// certified anchor yet, a statement about the chain that nothing had measured; it now says the notarization was not measured, and +// keeps "not under an anchor yet" for PENDING.) import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; @@ -94,7 +97,11 @@ async function citeste(f) { const invalid = motiveRele.length > 0; // as POST /v1/payments/verify: VALID only with the finality of the notarization PASSED (and the chain compared); PENDING, UNMEASURED or // no finality level at all is PARTIAL. On an RPC of another chain the envelope was judged offline, and the reason is already named. - if (verdictPlic && !invalid && altLant === null && !(fin && fin.state === 'PASSED')) nem.push(`the notarization is not under a post-quantum certified anchor yet (finality ${fin ? fin.state + ': ' + String(fin.detail).slice(0, 120) : 'absent'})`); + // 2026-10-28 (R10-STRAIN-05): "not under an anchor yet" is a fact about the chain and is said only for PENDING; UNMEASURED or no finality + // level is a gap of this run, said as such (the same receipt read through an endpoint that answers can come out PASSED) + if (verdictPlic && !invalid && altLant === null && !(fin && fin.state === 'PASSED')) nem.push(fin && fin.state === 'PENDING' + ? `the notarization is not under a post-quantum certified anchor yet (finality PENDING: ${String(fin.detail).slice(0, 120)})` + : `the notarization was not measured under a post-quantum certified anchor (finality ${fin ? fin.state + ': ' + String(fin.detail).slice(0, 120) : 'absent'})`); const s = (x, n) => (typeof x === 'string' ? x.slice(0, n) : '?'); const rate = obj(ins.rate) ? ins.rate : {}, risk = obj(ins.risk) ? ins.risk : {}; const randuri = [`receipt: ${ins.amountUsd ?? '?'} USD = ${ins.amount ?? '?'} units of ${ins.asset ?? '?'} at ${rate.usdPerUnit ?? '?'} USD/unit (${rate.source ?? '?'}), ${s(ins.payer, 10)}.. -> ${s(ins.payee, 10)}.., tx ${s(ins.txHash, 18)}.., risk ${risk.decision ?? '?'} under policy ${s(risk.policyHash, 18)}..`,