@ixo/decision-oracle 0.2.7 → 0.2.8
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 +1 -1
- package/dist/lib/sanitise.d.ts +10 -0
- package/dist/lib/sanitise.d.ts.map +1 -0
- package/dist/lib/sanitise.js +53 -0
- package/dist/lib/sanitise.js.map +1 -0
- package/dist/routes/v1/claims.d.ts.map +1 -1
- package/dist/routes/v1/claims.js +4 -1
- package/dist/routes/v1/claims.js.map +1 -1
- package/dist/routes/v1/reviews.js +4 -1
- package/dist/routes/v1/reviews.js.map +1 -1
- package/dist/routes/v1/shared.d.ts +18 -0
- package/dist/routes/v1/shared.d.ts.map +1 -1
- package/dist/routes/v1/shared.js +25 -0
- package/dist/routes/v1/shared.js.map +1 -1
- package/docs/api.md +2 -2
- package/package.json +1 -1
- package/templates/project/package.json +1 -1
package/README.md
CHANGED
|
@@ -781,6 +781,6 @@ symlinks are not packed). CI diffs them — change one, copy it to the other.
|
|
|
781
781
|
|
|
782
782
|
## Status
|
|
783
783
|
|
|
784
|
-
Published on npm: `@ixo/decision-oracle` 0.2.
|
|
784
|
+
Published on npm: `@ixo/decision-oracle` 0.2.8 and `@ixo/decision-oracle-client` 0.1.1.
|
|
785
785
|
|
|
786
786
|
Apache License 2.0: `LICENSE` at the repo root and in each package.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a model or a handler wrote, minus anything that could identify someone — for a reader who
|
|
3
|
+
* may not see the evidence itself (a claim's submitter reading why it was decided). Contact details,
|
|
4
|
+
* identifiers (DIDs, CIDs, addresses, hashes — what could name another claim or person), places,
|
|
5
|
+
* long numbers, plate-shaped tokens and long verbatim quotes become `[hidden]`; whitespace is
|
|
6
|
+
* collapsed and the result capped. Ported from the IXO-run OpenHands oracles' claimant view, which
|
|
7
|
+
* served it on mainnet first.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sanitise(text: string): string;
|
|
10
|
+
//# sourceMappingURL=sanitise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitise.d.ts","sourceRoot":"","sources":["../../src/lib/sanitise.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgCH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkB7C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a model or a handler wrote, minus anything that could identify someone — for a reader who
|
|
3
|
+
* may not see the evidence itself (a claim's submitter reading why it was decided). Contact details,
|
|
4
|
+
* identifiers (DIDs, CIDs, addresses, hashes — what could name another claim or person), places,
|
|
5
|
+
* long numbers, plate-shaped tokens and long verbatim quotes become `[hidden]`; whitespace is
|
|
6
|
+
* collapsed and the result capped. Ported from the IXO-run OpenHands oracles' claimant view, which
|
|
7
|
+
* served it on mainnet first.
|
|
8
|
+
*/
|
|
9
|
+
const REASON_CAP = 280;
|
|
10
|
+
const HIDDEN = "[hidden]";
|
|
11
|
+
const URL_RE = /\b(?:https?:\/\/|www\.)\S+/gi;
|
|
12
|
+
const EMAIL_RE = /[\w.+-]+@[\w-]+(?:\.[\w-]+)+/g;
|
|
13
|
+
const DID_RE = /\bdid:[a-z0-9]+:[^\s,;)]+/gi;
|
|
14
|
+
const ID_TOKEN_RE = /\b(?:baf[a-z2-7]{20,}|[A-Za-z0-9]{30,}|(?=[A-Za-z0-9]*\d)(?=[A-Za-z0-9]*[A-Za-z])[A-Za-z0-9]{12,})\b/g;
|
|
15
|
+
/** A lat/lon pair, or one coordinate precise enough to place someone (4+ decimals). */
|
|
16
|
+
const COORD_PAIR_RE = /-?\d{1,3}\.\d+\s*[,;/ ]\s*-?\d{1,3}\.\d+/g;
|
|
17
|
+
const COORD_ONE_RE = /-?\d{1,3}\.\d{4,}/g;
|
|
18
|
+
/** Phone-shaped runs; only hidden when they carry 7+ digits, so "2 - 3 bags" survives. */
|
|
19
|
+
const PHONE_RE = /\+?\(?\d[\d\s().-]{5,}\d/g;
|
|
20
|
+
const LONG_DIGITS_RE = /\d{6,}/g;
|
|
21
|
+
/** One token of 5–8 letters/digits — a plate when it mixes 2+ letters with 2+ digits. */
|
|
22
|
+
const PLATE_TOKEN_RE = /\b[A-Za-z0-9]{5,8}\b/g;
|
|
23
|
+
/** Two short upper-case groups split by a space or hyphen — "AB12 CDE", "KA-01 MX". */
|
|
24
|
+
const PLATE_SPACED_RE = /\b[A-Z0-9]{2,4}[ -][A-Z0-9]{2,4}\b/g;
|
|
25
|
+
/**
|
|
26
|
+
* Text quoted verbatim (a sign, a label) once it runs to 4+ words. A single quote only opens after
|
|
27
|
+
* whitespace, so the apostrophes in "claimant's … isn't" never pair up into a quote.
|
|
28
|
+
*/
|
|
29
|
+
const QUOTED_RE = /["“]([^"“”]*)["”]|‘([^‘’]*)’|(?<=^|\s)'([^']*)'(?=[\s.,;:!?)]|$)/g;
|
|
30
|
+
const digits = (s) => (s.match(/\d/g) ?? []).length;
|
|
31
|
+
const letters = (s) => (s.match(/[A-Za-z]/g) ?? []).length;
|
|
32
|
+
const plateLike = (s) => {
|
|
33
|
+
const alnum = s.replace(/[^A-Za-z0-9]/g, "");
|
|
34
|
+
return alnum.length >= 5 && alnum.length <= 8 && digits(alnum) >= 2 && letters(alnum) >= 2;
|
|
35
|
+
};
|
|
36
|
+
export function sanitise(text) {
|
|
37
|
+
const out = text
|
|
38
|
+
.replace(URL_RE, HIDDEN)
|
|
39
|
+
.replace(EMAIL_RE, HIDDEN)
|
|
40
|
+
.replace(DID_RE, HIDDEN)
|
|
41
|
+
.replace(ID_TOKEN_RE, HIDDEN)
|
|
42
|
+
.replace(COORD_PAIR_RE, HIDDEN)
|
|
43
|
+
.replace(COORD_ONE_RE, HIDDEN)
|
|
44
|
+
.replace(PHONE_RE, (m) => (digits(m) >= 7 ? HIDDEN : m))
|
|
45
|
+
.replace(LONG_DIGITS_RE, HIDDEN)
|
|
46
|
+
.replace(PLATE_SPACED_RE, (m) => (plateLike(m) ? HIDDEN : m))
|
|
47
|
+
.replace(PLATE_TOKEN_RE, (m) => (plateLike(m) ? HIDDEN : m))
|
|
48
|
+
.replace(QUOTED_RE, (m, a, b, c) => (a ?? b ?? c ?? "").trim().split(/\s+/).length >= 4 ? `"${HIDDEN}"` : m)
|
|
49
|
+
.replace(/\s+/g, " ")
|
|
50
|
+
.trim();
|
|
51
|
+
return out.length <= REASON_CAP ? out : `${out.slice(0, REASON_CAP - 1)}…`;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=sanitise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitise.js","sourceRoot":"","sources":["../../src/lib/sanitise.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAe5C,eAAO,MAAM,MAAM,qDAAqB,CAAC"}
|
package/dist/routes/v1/claims.js
CHANGED
|
@@ -23,7 +23,7 @@ import { eraseChainClaim } from "../../lib/claim-erase.js";
|
|
|
23
23
|
import { decodeCursor, encodeCursor } from "../../lib/cursor.js";
|
|
24
24
|
import { AppError } from "../../lib/errors.js";
|
|
25
25
|
import { validate } from "../../lib/validator.js";
|
|
26
|
-
import { assertCanRead, assertChainOwner, decisionBody, ingestBody, reviewBody } from "./shared.js";
|
|
26
|
+
import { assertCanRead, assertChainOwner, checksOf, decisionBody, ingestBody, reviewBody, } from "./shared.js";
|
|
27
27
|
export const claims = new Hono();
|
|
28
28
|
// Same garbage guard as the workflow: real claimIds are CIDs and Matrix event ids — anything
|
|
29
29
|
// printable-ASCII of sane length; the row lookup is the actual validation.
|
|
@@ -117,6 +117,9 @@ claims.get("/:claimId", validate("param", ClaimParam), async (c) => {
|
|
|
117
117
|
decision: decisionView && asAgent
|
|
118
118
|
? { ...decisionView, chainError: null, erroredFacts: null }
|
|
119
119
|
: decisionView,
|
|
120
|
+
// The breakdown — every check and what it said. The submitter's copy is cleaned (`sanitise`):
|
|
121
|
+
// they read why, not another claim's ids or someone's details.
|
|
122
|
+
checks: decision ? checksOf(decision.facts, asAgent) : null,
|
|
120
123
|
review: reviewView && asAgent ? { ...reviewView, answers: null, reviewerDid: null } : reviewView,
|
|
121
124
|
});
|
|
122
125
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../../../src/routes/v1/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../../../src/routes/v1/claims.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ import { getDIDWeb } from "../../lib/ixo/identity.js";
|
|
|
42
42
|
import { verifyReviewAttestation } from "../../lib/review/attestation.js";
|
|
43
43
|
import { checkReviewerGrant } from "../../lib/review/reviewer-grant.js";
|
|
44
44
|
import { validate } from "../../lib/validator.js";
|
|
45
|
-
import { assertCanRead, reviewBody, watchedOr404 } from "./shared.js";
|
|
45
|
+
import { assertCanRead, checksOf, reviewBody, watchedOr404 } from "./shared.js";
|
|
46
46
|
export const reviews = new Hono();
|
|
47
47
|
// Same garbage guard as the workflow: real claimIds are CIDs and Matrix event ids — anything
|
|
48
48
|
// printable-ASCII of sane length; the row lookup is the actual validation.
|
|
@@ -228,6 +228,9 @@ reviews.get("/:claimId", validate("param", ClaimParam), async (c) => {
|
|
|
228
228
|
pendingTasks: decision.decision?.pendingTasks ?? [],
|
|
229
229
|
// Which facts errored and why — the reviewer's "why was this held"; null when none did.
|
|
230
230
|
erroredFacts: decision.erroredFacts,
|
|
231
|
+
// Every check the decision was made on, with the checker's own reason — what a reviewer reads
|
|
232
|
+
// before deciding (a passed AI check's reasoning appears nowhere else). Never a transcript.
|
|
233
|
+
checks: checksOf(decision.facts, false),
|
|
231
234
|
review: review ? reviewBody(review) : null,
|
|
232
235
|
});
|
|
233
236
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../../src/routes/v1/reviews.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAA6B,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../../src/routes/v1/reviews.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAA6B,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7E,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,EAAU,CAAC;AAE1C,6FAA6F;AAC7F,2EAA2E;AAC3E,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;AAEnF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3F;;6FAEyF;IACzF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACpD;sGACkG;IAClG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH;gGACgG;AAChG,MAAM,oBAAoB,GAAyC;IACjE,mBAAmB,EAAE,qEAAqE;IAC1F,uBAAuB,EACrB,8EAA8E;IAChF,2BAA2B,EAAE,mDAAmD;IAChF,oBAAoB,EAAE,mDAAmD;IACzE,wBAAwB,EAAE,qDAAqD;CAChF,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAA0B,EAAE,QAAkB,EAAY,EAAE;AACpF,6FAA6F;AAC7F,mFAAmF;AACnF,IAAI,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE1F;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,CAAa,EAAE,OAAe;IAC/D,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ;YAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAC9E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY;YAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,aAAa,CAAC,CAAa,EAAE,OAAe;IACzD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;QAClD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7C,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ;QAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IACtF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,IAAI,CACV,WAAW,EACX,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,EAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5B,KAAK,EAAE,CAAC,EAAE,EAAE;IACV,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/B,6FAA6F;IAC7F,6FAA6F;IAC7F,2FAA2F;IAC3F,yFAAyF;IACzF,oFAAoF;IACpF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;YAC9E,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,2FAA2F;IAC3F,6DAA6D;IAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,QAAQ,CAChB,0EAA0E,EAC1E;YACE,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAC9B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACpC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EACvD,aAAa,EACb,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,EAAE,CACpE,CAAC;IACF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC;IAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,gBAAgB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,QAAQ,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,QAAQ,CAAC,UAAU,CAAC,qDAAqD,EAAE;YAC/E,OAAO;YACP,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;QACrD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7C,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE,QAAQ;QAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAE1E,2FAA2F;IAC3F,8FAA8F;IAC9F,+FAA+F;IAC/F,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;IACrE,CAAC;IACD,8EAA8E;IAC9E,6FAA6F;IAC7F,+EAA+E;IAC/E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAChG,8FAA8F;IAC9F,2FAA2F;IAC3F,+BAA+B;IAC/B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,QAAQ,CAAC,QAAQ,CAAC,YAAY,OAAO,yCAAyC,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE;QACtE,MAAM,EAAE,SAAS,CAAC,GAAG;QACrB,SAAS,EAAE,UAAU;QACrB,OAAO;QACP,eAAe,EAAE,QAAQ,CAAC,YAAY;QACtC,OAAO;KACR,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC;IAEpC,MAAM,MAAM,GAAG;QACb,OAAO;QACP,WAAW,EAAE,SAAS,CAAC,GAAG;QAC1B,cAAc,EAAE,WAAW;QAC3B,2FAA2F;QAC3F,yFAAyF;QACzF,wEAAwE;QACxE,aAAa,EAAE,KAAK,CAAC,UAAU;QAC/B,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;KAChB,CAAC;IACF,8FAA8F;IAC9F,4EAA4E;IAC5E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;SACnB,MAAM,CAAC,YAAY,CAAC;SACpB,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;SAC9B,kBAAkB,CAAC;QAClB,MAAM,EAAE,YAAY,CAAC,OAAO;QAC5B,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;KACxC,CAAC;SACD,SAAS,EAAE,CAAC;IACf,IAAI,CAAC,GAAG;QAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAE5D,MAAM,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACtC,OAAO;QACP,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,WAAW,EAAE,SAAS,CAAC,GAAG;QAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,gFAAgF;QAChF,MAAM,EAAE,CAAC,CAAC,WAAW;QACrB,cAAc;QACd,QAAQ,EAAE,KAAK,CAAC,GAAG;QACnB,SAAS,EAAE,KAAK,CAAC,OAAO;QACxB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,CAAC,CAAC,QAAQ;KACnB,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC,CACF,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;QACnD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,OAAO;QACP,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE;QACnD,wFAAwF;QACxF,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,8FAA8F;QAC9F,4FAA4F;QAC5F,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACvC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* What the v1 route files share: the gates every collection-scoped read/write runs, and the
|
|
3
3
|
* row → response projections (dates as ISO strings, and nothing that shouldn't leave).
|
|
4
4
|
*/
|
|
5
|
+
import type { ActFacts } from "../../act.js";
|
|
5
6
|
import type { AppContext } from "../../context.js";
|
|
6
7
|
import { type ClaimIngest, type ClaimReview, type DecisionRow, type WatchedCollection } from "../../db/schema.js";
|
|
7
8
|
/**
|
|
@@ -522,6 +523,23 @@ export declare function ingestBody(row: ClaimIngest): {
|
|
|
522
523
|
updatedAt: string;
|
|
523
524
|
};
|
|
524
525
|
/** The engine's answer verbatim — codes, scores and identifiers; the row never held answer values. */
|
|
526
|
+
/**
|
|
527
|
+
* Every check a decision was made on — its frozen `ext` / `ai` facts — with the checker's own
|
|
528
|
+
* reason (a passed AI check's reasoning included; an error's detail), never a transcript or a
|
|
529
|
+
* prompt. `clean` for a reader who may not see the evidence (the claim's submitter): the text goes
|
|
530
|
+
* through `sanitise`. Null on a row with no facts (a facts-lane outcome).
|
|
531
|
+
*/
|
|
532
|
+
export declare function checksOf(facts: ActFacts | null, clean: boolean): ({
|
|
533
|
+
name: string;
|
|
534
|
+
status: "ok";
|
|
535
|
+
value: number | boolean;
|
|
536
|
+
reason: string | null;
|
|
537
|
+
} | {
|
|
538
|
+
name: string;
|
|
539
|
+
status: "error";
|
|
540
|
+
value: null;
|
|
541
|
+
reason: string | null;
|
|
542
|
+
})[] | null;
|
|
525
543
|
export declare function decisionBody(row: DecisionRow): {
|
|
526
544
|
rubricId: string | null;
|
|
527
545
|
factsDigest: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/v1/shared.js
CHANGED
|
@@ -9,6 +9,7 @@ import { hasEvaluateGrant } from "../../lib/ixo/authz.js";
|
|
|
9
9
|
import { getClaimById, getCollection, getEntityOwner } from "../../lib/ixo/blocksync/index.js";
|
|
10
10
|
import { readCache } from "../../lib/metrics.js";
|
|
11
11
|
import { liveReviewerGrants } from "../../lib/review/reviewer-grant.js";
|
|
12
|
+
import { sanitise } from "../../lib/sanitise.js";
|
|
12
13
|
/** How long the read gate trusts a chain-owner read (F2: ≤ 5 min, like the grant read beside it). */
|
|
13
14
|
const OWNER_CACHE_TTL_SEC = 300;
|
|
14
15
|
/** A claim's submitter never changes on chain, so its read is cached long (a portal polls it). */
|
|
@@ -192,6 +193,30 @@ export function ingestBody(row) {
|
|
|
192
193
|
};
|
|
193
194
|
}
|
|
194
195
|
/** The engine's answer verbatim — codes, scores and identifiers; the row never held answer values. */
|
|
196
|
+
/**
|
|
197
|
+
* Every check a decision was made on — its frozen `ext` / `ai` facts — with the checker's own
|
|
198
|
+
* reason (a passed AI check's reasoning included; an error's detail), never a transcript or a
|
|
199
|
+
* prompt. `clean` for a reader who may not see the evidence (the claim's submitter): the text goes
|
|
200
|
+
* through `sanitise`. Null on a row with no facts (a facts-lane outcome).
|
|
201
|
+
*/
|
|
202
|
+
export function checksOf(facts, clean) {
|
|
203
|
+
if (!facts)
|
|
204
|
+
return null;
|
|
205
|
+
const said = (text) => (text && clean ? sanitise(text) : text);
|
|
206
|
+
return ["ext", "ai"].flatMap((lane) => Object.entries(facts[lane] ?? {}).map(([name, fact]) => fact.status === "ok"
|
|
207
|
+
? {
|
|
208
|
+
name: `${lane}.${name}`,
|
|
209
|
+
status: "ok",
|
|
210
|
+
value: fact.value,
|
|
211
|
+
reason: said(fact.reason),
|
|
212
|
+
}
|
|
213
|
+
: {
|
|
214
|
+
name: `${lane}.${name}`,
|
|
215
|
+
status: "error",
|
|
216
|
+
value: null,
|
|
217
|
+
reason: said(fact.detail),
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
195
220
|
export function decisionBody(row) {
|
|
196
221
|
return {
|
|
197
222
|
rubricId: row.rubricId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/routes/v1/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/routes/v1/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAKL,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,qGAAqG;AACrG,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,kGAAkG;AAClG,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,CAAa,EACb,YAAoB,EACpB,IAAI,GAA8C,EAAE;IAEpD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAa,EAAE,YAAoB;IACvE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACpD,4FAA4F;IAC5F,IAAI,GAAG,KAAK,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAChG,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC;IAC3D,IAAI,CAAC,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,QAAQ,CAAC,SAAS,CAAC,8DAA8D,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,QAAQ,CAAC,SAAS,CACtB,gCAAgC,YAAY,mGAAmG,CAChJ,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,CAAa,EACb,YAAoB;AACpB,oDAAoD;AACpD,IAAI,GAAG,qBAAqB;IAE5B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;QACnD,MAAM,QAAQ,CAAC,SAAS,CAAC,gCAAgC,YAAY,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAa,EAAE,OAAe,EAAE,YAAoB,EAAE,EAAE,CAC1E,gBAAgB,CACd,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EACzE,OAAO,EACP,YAAY,CACb,CAAC;AAEJ;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,YAAY,EAAE,kBAAkB,CAAC,YAAY;IAC7C,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;IACrC,aAAa,EAAE,kBAAkB,CAAC,aAAa;IAC/C,MAAM,EAAE,kBAAkB,CAAC,MAAM;IACjC,MAAM,EAAE,kBAAkB,CAAC,MAAM;CAClC,CAAC;AAGF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAa,EAAE,YAAoB;IACpE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,WAAW,CAAC;SACnB,IAAI,CAAC,kBAAkB,CAAC;SACxB,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,QAAQ,CAAC,cAAc,YAAY,gCAAgC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,KAAK,UAAU,YAAY,CACzB,CAAa,EACb,OAAoB,EACpB,EAAE,SAAS,EAAE,OAAO,EAA6C;IAEjE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACjC,IAAI,MAAM,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,SAAS,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,OAAO,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,QAAQ,CAAC,SAAS,CACtB,4FAA4F,CAC7F,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,YAAY,CACzB,CAAa,EACb,OAAe,EACf,YAAoB;IAEpB,MAAM,GAAG,GAAG,eAAe,OAAO,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,GAAsB,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,KAAK,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QAC/F,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACnD,aAAa,EAAE,mBAAmB;SACnC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,CACL,KAAK,CAAC,YAAY,KAAK,YAAY;QACnC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CACvF,CAAC;AACJ,CAAC;AAID,iGAAiG;AACjG,KAAK,UAAU,SAAS,CAAC,CAAa,EAAE,YAAoB;IAC1D,MAAM,GAAG,GAAG,SAAS,YAAY,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,IAAI,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC,KAAK,CACtF,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAAC,CAAa,EAAE,YAAoB,EAAE,GAAW;IAC5E,MAAM,IAAI,GAAG,MAAM,kBAAkB,CACnC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAClD,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAChB,YAAY,EACZ,EAAE,SAAS,EAAE,GAAG,EAAE,CACnB,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,WAAW;IACd,aAAa,EAAE,GAAG,CAAS,GAAG,aAAa,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;CAC3E,CAAC;AAGF,+DAA+D;AAC/D,MAAM,UAAU,MAAM,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,IAAI,EAAqB;IACvE,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,OAAO;QACL,GAAG,GAAG;QACN,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,IAAI;QACnE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,IAAI;QACvD,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAgB;IACzC,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAsB,EAAE,KAAc;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAQ,CAAC,KAAK,EAAE,IAAI,CAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CACrD,IAAI,CAAC,MAAM,KAAK,IAAI;QAClB,CAAC,CAAC;YACE,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE;YACvB,MAAM,EAAE,IAAa;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;SAC1B;QACH,CAAC,CAAC;YACE,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE;YACvB,MAAM,EAAE,OAAgB;YACxB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;SAC1B,CACN,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,gFAAgF;QAChF,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAgB;IACzC,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B;;kEAE0D;QAC1D,MAAM,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;QACnC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;QACxC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,IAAI;QAC7C,8GAA8G;QAC9G,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC"}
|
package/docs/api.md
CHANGED
|
@@ -1776,9 +1776,9 @@ check.**
|
|
|
1776
1776
|
| `POST /v1/collections/:id/reviewers` | UCAN `collections/reviewers-grant` (never `*`) + a **current controller** of the collection's entity (read live off Blocksync), who must be the grant's issuer | `{ delegation }` — a base64 CAR the controller signed: a reviewer grant (below). Checked as the review gate checks it (no revocation step), then filed in `collection_reviewers`. A controller may name **themselves**, and a grant to the collection's owner is filed like any other: one person may post an ask and review it (the owner's seat in the review room only lets them see reviews; answering always takes a grant). `201` + the grant row (`memberDid`, `rootDid`, `delegationCid`, `delegation`, `expiresAt`, `revokedAt`, `createdAt`). The same CAR again answers the same row; a revoked one is `409` (sign a new one). `400 REVIEWER_GRANT_INVALID` / `403 REVIEWER_NOT_AUTHORIZED` as the gate, `404` unwatched |
|
|
1777
1777
|
| `GET /v1/collections/:id/reviewers` | UCAN `collections/reviewers-read` (never `*`) | A current controller: `{ reviewers: [...] }`, every grant on the collection; a reviewer: only their own, CAR included (the Portal sends it with an answer); anyone else `403` |
|
|
1778
1778
|
| `POST /v1/collections/:id/reviewers/:delegationCid/revoke` | UCAN `collections/reviewers-revoke` (never `*`) + a current controller | Stamps `revokedAt` (once) and kicks the reviewer from the collection's review room. Every later answer and every pending fold under that grant is refused. `404` for an unknown grant |
|
|
1779
|
-
| `GET /v1/claims/:claimId` | UCAN `claims/read` + read gate, or a live reviewer of the claim's collection (a filed, unrevoked grant inside its window whose root is still a controller — read live, so Blocksync down is `503`), or the claim's own submitter (matched by EITHER the claim's on-chain agent DID or its agent address, invoking as themselves; one Blocksync claim read, cached a day — a claim Blocksync does not know yet is not cached — tried only after the other doors; Blocksync down is `503`) | The full record: ingest ⟕ decision ⟕ review. The submitter sees the decision and its public receipt (which names who reviewed), but never the review's answers: `review.answers` and `review.reviewerDid` come back `null`, and so do the internal failure texts `ingest.error`, `decision.chainError` and `decision.erroredFacts`. `404` when this oracle has not seen the claim. The submitter gets no other read: not the list, not `/v1/reviews`, not another claim |
|
|
1779
|
+
| `GET /v1/claims/:claimId` | UCAN `claims/read` + read gate, or a live reviewer of the claim's collection (a filed, unrevoked grant inside its window whose root is still a controller — read live, so Blocksync down is `503`), or the claim's own submitter (matched by EITHER the claim's on-chain agent DID or its agent address, invoking as themselves; one Blocksync claim read, cached a day — a claim Blocksync does not know yet is not cached — tried only after the other doors; Blocksync down is `503`) | The full record: ingest ⟕ decision ⟕ review. The submitter sees the decision and its public receipt (which names who reviewed), but never the review's answers: `review.answers` and `review.reviewerDid` come back `null`, and so do the internal failure texts `ingest.error`, `decision.chainError` and `decision.erroredFacts`. `404` when this oracle has not seen the claim. The submitter gets no other read: not the list, not `/v1/reviews`, not another claim. Plus `checks` — the breakdown: every check the decision was made on, `[{ name, status, value, reason }]` (`reason` the checker's own words, a passed AI check's included; an error's detail), never a transcript or a prompt, `null` when the claim has no decision or its row has no facts. The submitter's copy is **cleaned**: URLs, emails, DIDs, CIDs and other identifiers, exact coordinates, phone-shaped and long numbers, plate-shaped tokens and long quotes become `[hidden]`, capped at 280 characters — they read why, not another claim's ids or someone's details |
|
|
1780
1780
|
| `DELETE /v1/claims/:claimId/body` | UCAN `claims/erase` (never `*`) + the collection's **current** chain owner (read live off Blocksync; the enroller, grant holders and `ORACLE_ADMIN_DIDS` are `403`) — `404` when this oracle has not seen the claim or it is a Decision API claim, `503` on chain trouble | `204`; `409 CONFLICT` while the claim is still `queued` or `processing` (erase it once it is decided). Erases the claim's answer copies now: strips every `transcript` from `decisions.facts` (the AI prompts and HTTP payloads; the fact values stay), nulls the duplicate registry's `normalizedText`, drops its fact-cache rows, and stamps `claim_ingests.erasedAt`. The decision, its receipt and the registry digests stay, so the receipt still verifies and duplicates are still caught. Idempotent: `204` again, the first `erasedAt` kept. Logged `claims.erased`, counted `claims.erased` (`op: chain`). The CLI's `decision-oracle erase` loops over it |
|
|
1781
|
-
| `GET /v1/reviews/:claimId` | UCAN `reviews/read` + read gate, or a live reviewer of the claim's collection | The pending tasks, the stored answers, why a fold failed,
|
|
1781
|
+
| `GET /v1/reviews/:claimId` | UCAN `reviews/read` + read gate, or a live reviewer of the claim's collection | The pending tasks, the stored answers, why a fold failed, `erroredFacts` (below; null when none errored), and `checks` — every frozen `ext` / `ai` fact the decision was made on, `[{ name: "ai.judge", status: "ok" \| "error", value, reason }]`, `reason` the checker's own words (a passed AI check's reasoning included; an error's `detail`), never a transcript or a prompt; `null` on a row with no facts (a facts-lane outcome). What a reviewer reads before deciding (the same list `GET /v1/claims/:claimId` serves) |
|
|
1782
1782
|
| `GET /v1/admin/status` | UCAN `admin/status` + `ORACLE_ADMIN_DIDS` or `STATUS_READER_DIDS` (`403` otherwise — everyone, while both are unset) | `{ readiness: { ok, checks: { <name>: { ok, ms, critical, detail? } } }, backlog: { review: { pending }, collections: { paused: { total, <reason>: n } }, sources?: { paused }, webhooks?: { due, oldestAgeS } }, engine: { billingStatus, manageSubscriptionUrl } \| null }` — `sources`/`webhooks` only with `API_LANE` on; `engine` is the engine's `GET /v1/oracles/me`, `null` when it did not answer within 2 s; `detail` is set only on a failed `identity` or `owner-delegation` check and names the command to run. Outside the `/v1/api` contract |
|
|
1783
1783
|
| `POST /v1/admin/collections/relink` | UCAN `admin/collections-relink` (strict: never `*`) + `ORACLE_ADMIN_DIDS` (`403` otherwise) | The operator's backfill of register's company links. Body `{ collectionIds?: string[] }` (1–100 ids); absent ⇒ every watched collection, lowest id first, up to 100 (`truncated: true` says more exist — name them). Per collection, the same engine read and the same link register makes (no `active` source left unlinked ⇒ `unchanged`, no engine call) → `{ items: [{ collectionId, outcome: "linked" \| "unchanged" \| "no-company" \| "disputed" \| "unavailable" \| "not-watched", linkedSources }], truncated }`. Idempotent. CLI: `decision-oracle relink [--collection <id>]…`. Outside the `/v1/api` contract |
|
|
1784
1784
|
| `GET /v1/oauth/approvals/:approvalId` | UCAN `oauth/approval/read`, invoker AuthHub's `did:web` only (`403` otherwise; `*` is never accepted here); no `X-Auth-Type` needed | What AuthHub's approve page shows: `{ did, grantId, clientName, protocol: { did, name \| null }, price: { display, maxAmountUpay }, billingMode: "x402" \| "none", status, expiresAt }` (`expiresAt` in unix seconds). `404` unless the approval exists, is `pending` and has not expired. Never the delegation. `404` without `API_LANE`. Outside the `/v1/api` contract |
|
package/package.json
CHANGED