@action-state-group/capsule-viewer 0.0.0 → 0.1.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/LICENSE +201 -0
- package/LICENSE-BSD-3-Clause +28 -0
- package/README.md +23 -1
- package/dist/browser.d.ts +4 -0
- package/dist/browser.js +11 -0
- package/dist/browser.js.map +1 -0
- package/dist/compliance-presentation.d.ts +51 -0
- package/dist/compliance-presentation.js +140 -0
- package/dist/compliance-presentation.js.map +1 -0
- package/dist/compliance-styles.d.ts +8 -0
- package/dist/compliance-styles.js +66 -0
- package/dist/compliance-styles.js.map +1 -0
- package/dist/compliance-view.d.ts +6 -0
- package/dist/compliance-view.js +394 -0
- package/dist/compliance-view.js.map +1 -0
- package/dist/compliance.d.ts +92 -0
- package/dist/compliance.js +333 -0
- package/dist/compliance.js.map +1 -0
- package/dist/composed-view.d.ts +24 -0
- package/dist/composed-view.js +179 -0
- package/dist/composed-view.js.map +1 -0
- package/dist/emitter-shell.html +136 -0
- package/dist/emitter.d.ts +69 -0
- package/dist/emitter.js +266 -0
- package/dist/emitter.js.map +1 -0
- package/dist/evidence-graph-view.d.ts +96 -0
- package/dist/evidence-graph-view.js +1480 -0
- package/dist/evidence-graph-view.js.map +1 -0
- package/dist/evidence-graph.iife.js +11373 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/outcome-report-styles.d.ts +16 -0
- package/dist/outcome-report-styles.js +225 -0
- package/dist/outcome-report-styles.js.map +1 -0
- package/dist/outcome-report-view.d.ts +5 -0
- package/dist/outcome-report-view.js +885 -0
- package/dist/outcome-report-view.js.map +1 -0
- package/dist/presentation-builder.d.ts +247 -0
- package/dist/presentation-builder.js +552 -0
- package/dist/presentation-builder.js.map +1 -0
- package/dist/presentation-mount.d.ts +26 -0
- package/dist/presentation-mount.js +45 -0
- package/dist/presentation-mount.js.map +1 -0
- package/package.json +47 -4
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
import { asString, isObject, } from "@action-state-group/agent-action-capsule";
|
|
3
|
+
import { findTranscript, NOT_STATED, readableId, } from "@action-state-group/agent-action-capsule";
|
|
4
|
+
import { REQUIREMENT_CLAIM, } from "@action-state-group/agent-action-capsule";
|
|
5
|
+
/**
|
|
6
|
+
* The EU AI Act obligations-report card, rendered from a verified Result v0
|
|
7
|
+
* root. Results are stated as counts of sessions per TEST; there is no
|
|
8
|
+
* per-conversation roll-up and no overall compliance percentage anywhere in
|
|
9
|
+
* this model.
|
|
10
|
+
*
|
|
11
|
+
* Where each thing on the page comes from:
|
|
12
|
+
*
|
|
13
|
+
* - From the sealed records (or "not stated"): which obligations and tests
|
|
14
|
+
* exist (the requirement claims' `requirement_ref`s, `<obligation>.<test>`,
|
|
15
|
+
* in the order the claims first name them), every verdict and count, the
|
|
16
|
+
* pack id and version (the claims' one `contract_ref`), each test's wording
|
|
17
|
+
* (the cited reports' `clause_claim`, when they all agree), each test's
|
|
18
|
+
* tier (the cited reports' `epistemic_type`, when they all agree), the
|
|
19
|
+
* contract and judge pin, the rationale, and the transcript (only when the
|
|
20
|
+
* bundle carries it verifiably; see `findTranscript`).
|
|
21
|
+
* - From the producer's `eu-ai-act-compliance/v1` extension, outside the
|
|
22
|
+
* signed records: the regulatory mapping -- article, obligation title,
|
|
23
|
+
* plain-language summary, applicability, method, the not-evaluable note and
|
|
24
|
+
* the finding templates (severity, recommendation, owner). The page labels
|
|
25
|
+
* it as the producer's mapping. An obligation the claims name but the
|
|
26
|
+
* extension does not map reads "not stated"; a test the extension names but
|
|
27
|
+
* no claim does is not drawn.
|
|
28
|
+
*
|
|
29
|
+
* A finding is drawn only for a test whose finding template exists AND whose
|
|
30
|
+
* sealed not-met count is above zero.
|
|
31
|
+
*/
|
|
32
|
+
const CLAIM_ID_SEPARATOR = "::";
|
|
33
|
+
function drawnVerdict(claim) {
|
|
34
|
+
if (claim.failed)
|
|
35
|
+
return "failed";
|
|
36
|
+
if (claim.support === "unsupported")
|
|
37
|
+
return "unsupported";
|
|
38
|
+
return claim.verdict;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The claim's cited `evaluation-report/v1`, resolved against this bundle.
|
|
42
|
+
* A book record's own agent_input is the book's header, not the report: the
|
|
43
|
+
* report is the agent_input of the capsule the record carries
|
|
44
|
+
* (`carriedInput`, digest-checked by result-root.ts).
|
|
45
|
+
*/
|
|
46
|
+
function reportPayload(records, claim) {
|
|
47
|
+
const digest = claim.evidence[0]?.digest;
|
|
48
|
+
if (digest === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
const record = records.get(digest);
|
|
51
|
+
if (record === undefined)
|
|
52
|
+
return undefined;
|
|
53
|
+
const input = record.carriedInput ?? record.agentInput;
|
|
54
|
+
if (input.state !== "disclosed")
|
|
55
|
+
return undefined;
|
|
56
|
+
return isObject(input.payload) ? input.payload : undefined;
|
|
57
|
+
}
|
|
58
|
+
function dayOf(payload) {
|
|
59
|
+
const period = asString(payload?.period);
|
|
60
|
+
if (period === undefined)
|
|
61
|
+
return NOT_STATED;
|
|
62
|
+
const colon = period.indexOf(":");
|
|
63
|
+
return colon === -1 ? period : period.slice(colon + 1);
|
|
64
|
+
}
|
|
65
|
+
function sealedTier(payload) {
|
|
66
|
+
const type = asString(payload?.epistemic_type);
|
|
67
|
+
if (type === "semantic_judgment")
|
|
68
|
+
return "judged";
|
|
69
|
+
if (type === "recomputed_determination")
|
|
70
|
+
return "recomputed";
|
|
71
|
+
return "not stated";
|
|
72
|
+
}
|
|
73
|
+
function agree(values, none, mixed) {
|
|
74
|
+
const distinct = new Set(values.filter((v) => v !== none));
|
|
75
|
+
if (distinct.size === 0)
|
|
76
|
+
return none;
|
|
77
|
+
return distinct.size === 1 ? [...distinct][0] : mixed;
|
|
78
|
+
}
|
|
79
|
+
function parseClaim(claim) {
|
|
80
|
+
if (claim.type !== REQUIREMENT_CLAIM)
|
|
81
|
+
return undefined;
|
|
82
|
+
const sep = claim.id.indexOf(CLAIM_ID_SEPARATOR);
|
|
83
|
+
if (sep <= 0)
|
|
84
|
+
return undefined;
|
|
85
|
+
const dot = claim.requirementRef.indexOf(".");
|
|
86
|
+
if (dot <= 0 || dot === claim.requirementRef.length - 1)
|
|
87
|
+
return undefined;
|
|
88
|
+
return {
|
|
89
|
+
claim,
|
|
90
|
+
conversationId: claim.id.slice(0, sep),
|
|
91
|
+
obligationKey: claim.requirementRef.slice(0, dot),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The claims this card counts, and the pack they belong to. When the claims
|
|
96
|
+
* name one `contract_ref`, all of them. When they name more than one (a
|
|
97
|
+
* bundle carrying a different pack's claims too), only the claims whose test
|
|
98
|
+
* the producer's extension maps, and the pack reads not stated: a different
|
|
99
|
+
* pack's claim is never grouped into this card's sessions.
|
|
100
|
+
*/
|
|
101
|
+
function countedClaims(result, presentation) {
|
|
102
|
+
const parsed = result.claims.flatMap((c) => {
|
|
103
|
+
const p = parseClaim(c);
|
|
104
|
+
return p === undefined ? [] : [p];
|
|
105
|
+
});
|
|
106
|
+
const refs = new Set(parsed.map((p) => p.claim.contractRef));
|
|
107
|
+
if (refs.size === 1) {
|
|
108
|
+
const ref = [...refs][0];
|
|
109
|
+
const at = ref.lastIndexOf("@");
|
|
110
|
+
return {
|
|
111
|
+
claims: parsed,
|
|
112
|
+
pack: {
|
|
113
|
+
id: at <= 0 ? NOT_STATED : ref.slice(0, at),
|
|
114
|
+
version: at <= 0 || at === ref.length - 1 ? NOT_STATED : ref.slice(at + 1),
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const mapped = new Set(presentation.obligations.flatMap((o) => o.rows.map((r) => r.criterionId)));
|
|
119
|
+
return {
|
|
120
|
+
claims: parsed.filter((p) => mapped.has(p.claim.requirementRef)),
|
|
121
|
+
pack: { id: NOT_STATED, version: NOT_STATED },
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function buildSessions(result, claims, testIds) {
|
|
125
|
+
const byConversation = new Map();
|
|
126
|
+
for (const p of claims) {
|
|
127
|
+
const list = byConversation.get(p.conversationId) ?? [];
|
|
128
|
+
list.push(p.claim);
|
|
129
|
+
byConversation.set(p.conversationId, list);
|
|
130
|
+
}
|
|
131
|
+
const sessions = [];
|
|
132
|
+
for (const [conversationId, conversationClaims] of byConversation) {
|
|
133
|
+
const tests = [];
|
|
134
|
+
const sources = new Set();
|
|
135
|
+
let day = NOT_STATED;
|
|
136
|
+
for (const criterionId of testIds) {
|
|
137
|
+
const claim = conversationClaims.find((c) => c.requirementRef === criterionId);
|
|
138
|
+
if (claim === undefined) {
|
|
139
|
+
// The Result v0 schema has no not_applicable verdict: a test the
|
|
140
|
+
// roll-up left out for this conversation reads not_applicable,
|
|
141
|
+
// never a silent gap.
|
|
142
|
+
tests.push({
|
|
143
|
+
criterionId,
|
|
144
|
+
verdict: "not_applicable",
|
|
145
|
+
tier: "not stated",
|
|
146
|
+
});
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const payload = reportPayload(result.records, claim);
|
|
150
|
+
const rationale = asString(payload?.rationale);
|
|
151
|
+
// The Result's own schema-checked contract_ref first, then what the
|
|
152
|
+
// report states.
|
|
153
|
+
const contract = claim.contractRef ||
|
|
154
|
+
asString(payload?.contract_ref) ||
|
|
155
|
+
asString(payload?.contract);
|
|
156
|
+
const judgePinDigest = asString(payload?.judge_pin_digest);
|
|
157
|
+
const source = asString(payload?.source_capsule_id);
|
|
158
|
+
if (source !== undefined)
|
|
159
|
+
sources.add(source);
|
|
160
|
+
if (day === NOT_STATED)
|
|
161
|
+
day = dayOf(payload);
|
|
162
|
+
const reportDigest = claim.evidence[0]?.digest;
|
|
163
|
+
tests.push({
|
|
164
|
+
criterionId,
|
|
165
|
+
verdict: drawnVerdict(claim),
|
|
166
|
+
tier: sealedTier(payload),
|
|
167
|
+
claim,
|
|
168
|
+
...(reportDigest === undefined ? {} : { reportDigest }),
|
|
169
|
+
...(rationale === undefined ? {} : { rationale }),
|
|
170
|
+
...(contract === undefined ? {} : { contract }),
|
|
171
|
+
...(judgePinDigest === undefined ? {} : { judgePinDigest }),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
const sourceCapsuleId = sources.size === 1 ? [...sources][0] : undefined;
|
|
175
|
+
sessions.push({
|
|
176
|
+
conversationId,
|
|
177
|
+
day,
|
|
178
|
+
tests,
|
|
179
|
+
...(sourceCapsuleId === undefined ? {} : { sourceCapsuleId }),
|
|
180
|
+
transcript: findTranscript(result, conversationId, conversationClaims, sourceCapsuleId),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
sessions.sort((a, b) => a.day === b.day
|
|
184
|
+
? a.conversationId.localeCompare(b.conversationId)
|
|
185
|
+
: a.day.localeCompare(b.day));
|
|
186
|
+
return sessions;
|
|
187
|
+
}
|
|
188
|
+
function sealedWording(result, claims, criterionId) {
|
|
189
|
+
const texts = new Set();
|
|
190
|
+
for (const p of claims) {
|
|
191
|
+
if (p.claim.requirementRef !== criterionId)
|
|
192
|
+
continue;
|
|
193
|
+
const text = asString(reportPayload(result.records, p.claim)?.clause_claim);
|
|
194
|
+
if (text !== undefined)
|
|
195
|
+
texts.add(text);
|
|
196
|
+
}
|
|
197
|
+
if (texts.size === 1)
|
|
198
|
+
return { text: [...texts][0], source: "sealed" };
|
|
199
|
+
return { text: NOT_STATED, source: texts.size === 0 ? "unstated" : "mixed" };
|
|
200
|
+
}
|
|
201
|
+
function buildRow(criterionId, mapping, wording, sessions) {
|
|
202
|
+
const byVerdict = new Map([
|
|
203
|
+
["met", []],
|
|
204
|
+
["not_met", []],
|
|
205
|
+
["not_evaluable", []],
|
|
206
|
+
["not_applicable", []],
|
|
207
|
+
]);
|
|
208
|
+
const tiers = [];
|
|
209
|
+
for (const session of sessions) {
|
|
210
|
+
const test = session.tests.find((t) => t.criterionId === criterionId);
|
|
211
|
+
if (test === undefined)
|
|
212
|
+
continue;
|
|
213
|
+
tiers.push(test.tier);
|
|
214
|
+
// failed/unsupported (a claim that failed verification, or cites
|
|
215
|
+
// evidence this bundle can't resolve) is never read as met: it folds
|
|
216
|
+
// into not_met.
|
|
217
|
+
const bucket = test.verdict === "failed" || test.verdict === "unsupported"
|
|
218
|
+
? "not_met"
|
|
219
|
+
: test.verdict;
|
|
220
|
+
byVerdict.get(bucket).push(session.conversationId);
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
criterionId,
|
|
224
|
+
name: mapping?.name ??
|
|
225
|
+
readableId(criterionId.slice(criterionId.indexOf(".") + 1)),
|
|
226
|
+
wording,
|
|
227
|
+
tier: agree(tiers, "not stated", "mixed"),
|
|
228
|
+
...(mapping?.notEvaluableNote === undefined
|
|
229
|
+
? {}
|
|
230
|
+
: { notEvaluableNote: mapping.notEvaluableNote }),
|
|
231
|
+
...(mapping?.finding === undefined ? {} : { finding: mapping.finding }),
|
|
232
|
+
metCount: byVerdict.get("met").length,
|
|
233
|
+
notMetCount: byVerdict.get("not_met").length,
|
|
234
|
+
notEvaluableCount: byVerdict.get("not_evaluable").length,
|
|
235
|
+
notApplicableCount: byVerdict.get("not_applicable").length,
|
|
236
|
+
sessionsByVerdict: byVerdict,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function buildObligation(key, mapping, rows) {
|
|
240
|
+
if (mapping === undefined)
|
|
241
|
+
return {
|
|
242
|
+
key,
|
|
243
|
+
mapped: false,
|
|
244
|
+
article: NOT_STATED,
|
|
245
|
+
title: readableId(key),
|
|
246
|
+
plain: NOT_STATED,
|
|
247
|
+
judgedTerms: [],
|
|
248
|
+
applicability: { status: "not stated", note: NOT_STATED },
|
|
249
|
+
method: NOT_STATED,
|
|
250
|
+
rows,
|
|
251
|
+
};
|
|
252
|
+
return {
|
|
253
|
+
key,
|
|
254
|
+
mapped: true,
|
|
255
|
+
article: mapping.article,
|
|
256
|
+
title: mapping.title,
|
|
257
|
+
plain: mapping.plain,
|
|
258
|
+
judgedTerms: mapping.judgedTerms,
|
|
259
|
+
applicability: mapping.applicability,
|
|
260
|
+
method: mapping.method,
|
|
261
|
+
rows,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function buildRunInfo(sessions) {
|
|
265
|
+
const contracts = new Set();
|
|
266
|
+
const pins = new Set();
|
|
267
|
+
for (const session of sessions)
|
|
268
|
+
for (const test of session.tests) {
|
|
269
|
+
if (test.contract !== undefined)
|
|
270
|
+
contracts.add(test.contract);
|
|
271
|
+
if (test.judgePinDigest !== undefined)
|
|
272
|
+
pins.add(test.judgePinDigest);
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
...(contracts.size === 1 ? { contract: [...contracts][0] } : {}),
|
|
276
|
+
...(pins.size === 1 ? { judgePinDigest: [...pins][0] } : {}),
|
|
277
|
+
pinned: contracts.size <= 1 && pins.size <= 1,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function buildFindings(obligations) {
|
|
281
|
+
const findings = [];
|
|
282
|
+
for (const obligation of obligations)
|
|
283
|
+
for (const row of obligation.rows) {
|
|
284
|
+
// Derived from the sealed verdicts: a test with no finding template
|
|
285
|
+
// can never produce one, and a test WITH one produces nothing when
|
|
286
|
+
// its not-met count is zero.
|
|
287
|
+
if (row.finding === undefined || row.notMetCount === 0)
|
|
288
|
+
continue;
|
|
289
|
+
findings.push({
|
|
290
|
+
id: row.finding.id,
|
|
291
|
+
criterionId: row.criterionId,
|
|
292
|
+
obligationKey: obligation.key,
|
|
293
|
+
article: obligation.article,
|
|
294
|
+
testName: row.name,
|
|
295
|
+
severity: row.finding.severity,
|
|
296
|
+
recommendation: row.finding.recommendation,
|
|
297
|
+
ownerDue: row.finding.ownerDue,
|
|
298
|
+
sessionIds: row.sessionsByVerdict.get("not_met") ?? [],
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
return findings;
|
|
302
|
+
}
|
|
303
|
+
export function buildComplianceModel(result, presentation) {
|
|
304
|
+
const { claims, pack } = countedClaims(result, presentation);
|
|
305
|
+
// Obligations and tests in the order the claims first name them.
|
|
306
|
+
const tests = new Map();
|
|
307
|
+
for (const p of claims) {
|
|
308
|
+
const list = tests.get(p.obligationKey) ?? [];
|
|
309
|
+
if (!list.includes(p.claim.requirementRef))
|
|
310
|
+
list.push(p.claim.requirementRef);
|
|
311
|
+
tests.set(p.obligationKey, list);
|
|
312
|
+
}
|
|
313
|
+
const testIds = [...tests.values()].flat();
|
|
314
|
+
const sessions = buildSessions(result, claims, testIds);
|
|
315
|
+
const mappings = new Map(presentation.obligations.map((o) => [o.key, o]));
|
|
316
|
+
const obligations = [...tests.entries()].map(([key, ids]) => {
|
|
317
|
+
const mapping = mappings.get(key);
|
|
318
|
+
const rowMappings = new Map((mapping?.rows ?? []).map((r) => [r.criterionId, r]));
|
|
319
|
+
return buildObligation(key, mapping, ids.map((id) => buildRow(id, rowMappings.get(id), sealedWording(result, claims, id), sessions)));
|
|
320
|
+
});
|
|
321
|
+
return {
|
|
322
|
+
regulation: presentation.regulation,
|
|
323
|
+
pack,
|
|
324
|
+
obligations,
|
|
325
|
+
sessions,
|
|
326
|
+
findings: buildFindings(obligations),
|
|
327
|
+
totalSessions: sessions.length,
|
|
328
|
+
runInfo: buildRunInfo(sessions),
|
|
329
|
+
qualityProtocol: presentation.qualityProtocol,
|
|
330
|
+
capsuleId: result.capsuleId,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../src/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ComposedResult } from "@action-state-group/agent-action-capsule";
|
|
2
|
+
import type { PresentationModule } from "@action-state-group/agent-action-capsule";
|
|
3
|
+
/**
|
|
4
|
+
* The composition section: a generic view of the `composed/v1` block's
|
|
5
|
+
* verification, as the verify core computed it (`composed.ts`). It reports
|
|
6
|
+
* what draft-mih-zhang-agent-disclosure-bundle-01 "Verifying composed/v1"
|
|
7
|
+
* says a verifier reports, separately: the composed digest, each member,
|
|
8
|
+
* composition closure, each join's declared and derived state, and per
|
|
9
|
+
* derived agreement whether it is redundant or corroborating on declared
|
|
10
|
+
* custody. It shows no product wording and names no party's business role;
|
|
11
|
+
* an observer's `role` is shown as the block declares it, uninterpreted.
|
|
12
|
+
*
|
|
13
|
+
* It never verifies: every value it shows is read from the context's one
|
|
14
|
+
* verification result.
|
|
15
|
+
*/
|
|
16
|
+
type Verified = Extract<ComposedResult, {
|
|
17
|
+
malformed: false;
|
|
18
|
+
}>;
|
|
19
|
+
export interface ComposedSectionModel {
|
|
20
|
+
readonly result: Verified;
|
|
21
|
+
}
|
|
22
|
+
/** The built-in composition section module (`aac.builtin.composed/v0`). */
|
|
23
|
+
export declare const composedSectionModule: PresentationModule<ComposedSectionModel>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { BUILTIN_MANIFEST_COMPOSED } from "@action-state-group/agent-action-capsule";
|
|
2
|
+
import { COMPOSED_KIND, } from "@action-state-group/agent-action-capsule";
|
|
3
|
+
/** The well-formed composed/v1 result the core verified, if there is one. */
|
|
4
|
+
function composedResult(context) {
|
|
5
|
+
const entry = context.verification.extensions.find((extension) => extension.kind === COMPOSED_KIND);
|
|
6
|
+
const composed = entry?.composed;
|
|
7
|
+
return composed !== undefined && !composed.malformed ? composed : undefined;
|
|
8
|
+
}
|
|
9
|
+
function element(tag, text) {
|
|
10
|
+
const node = document.createElement(tag);
|
|
11
|
+
if (text !== undefined)
|
|
12
|
+
node.textContent = text;
|
|
13
|
+
return node;
|
|
14
|
+
}
|
|
15
|
+
function row(cells, header = false) {
|
|
16
|
+
const tr = element("tr");
|
|
17
|
+
for (const cell of cells)
|
|
18
|
+
tr.append(element(header ? "th" : "td", cell));
|
|
19
|
+
return tr;
|
|
20
|
+
}
|
|
21
|
+
function table(name, columns, rows) {
|
|
22
|
+
const node = element("table");
|
|
23
|
+
node.setAttribute(`data-${name}`, "");
|
|
24
|
+
const head = element("thead");
|
|
25
|
+
head.append(row(columns, true));
|
|
26
|
+
const body = element("tbody");
|
|
27
|
+
body.append(...rows);
|
|
28
|
+
node.append(head, body);
|
|
29
|
+
return node;
|
|
30
|
+
}
|
|
31
|
+
const NOT_APPLICABLE = "—";
|
|
32
|
+
const findingsText = (findings) => findings.length === 0 ? "none" : findings.join(", ");
|
|
33
|
+
const claimText = (claim) => claim === undefined
|
|
34
|
+
? NOT_APPLICABLE
|
|
35
|
+
: claim.findings.length === 0
|
|
36
|
+
? claim.status
|
|
37
|
+
: `${claim.status} (${claim.findings.join(", ")})`;
|
|
38
|
+
const pairText = (members) => `${members[0]} – ${members[1]}`;
|
|
39
|
+
// The values two members hold at one compare pointer, as text. No winner is
|
|
40
|
+
// named (draft "Joins": "names no winner").
|
|
41
|
+
function renderDifference(difference, host) {
|
|
42
|
+
const list = element("dl");
|
|
43
|
+
list.dataset.pointer = difference.pointer;
|
|
44
|
+
list.append(element("dt", difference.pointer));
|
|
45
|
+
for (const value of difference.values)
|
|
46
|
+
list.append(element("dd", value.resolved
|
|
47
|
+
? `${value.member}: ${JSON.stringify(value.value)}`
|
|
48
|
+
: `${value.member}: does not resolve`));
|
|
49
|
+
host.append(list);
|
|
50
|
+
}
|
|
51
|
+
// go/bundle/composed.go:102-114 and draft "Observers and Redundancy": a
|
|
52
|
+
// redundant pair is presented as "redundant, not corroborating" with its
|
|
53
|
+
// reason; a corroborating one is qualified as resting on declared custody.
|
|
54
|
+
function corroborationText(c) {
|
|
55
|
+
switch (c.result) {
|
|
56
|
+
case "redundant":
|
|
57
|
+
return `${c.report} (${c.reasons.join(", ")})`;
|
|
58
|
+
case "corroborating":
|
|
59
|
+
return "corroborating, on declared custody";
|
|
60
|
+
case "not_applicable":
|
|
61
|
+
return "not applicable: the join did not derive agree";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function renderComposed(model, host, services) {
|
|
65
|
+
const result = model.result;
|
|
66
|
+
const section = element("section");
|
|
67
|
+
section.dataset.section = "composition";
|
|
68
|
+
section.dataset.module = BUILTIN_MANIFEST_COMPOSED.id;
|
|
69
|
+
section.append(element("h2", "Composition"));
|
|
70
|
+
const status = element("p", `composed/v1 check: ${result.status}`);
|
|
71
|
+
status.dataset.compositionStatus = result.status;
|
|
72
|
+
section.append(status);
|
|
73
|
+
if (result.findings.length > 0)
|
|
74
|
+
section.append(element("p", `findings: ${result.findings.join(", ")}`));
|
|
75
|
+
// capsule-cli internal/cli/composed.go:69, the same statement of scope.
|
|
76
|
+
section.append(element("p", "Composition closure covers the declared members only; it is not completeness of participation."));
|
|
77
|
+
section.append(element("h3", "Composed digest"));
|
|
78
|
+
const digest = element("dl");
|
|
79
|
+
digest.dataset.composedDigest = result.composedDigest.declared;
|
|
80
|
+
digest.dataset.matches = String(result.composedDigest.matches);
|
|
81
|
+
digest.append(element("dt", "declared"), element("dd", result.composedDigest.declared), element("dt", "recomputed"), element("dd", result.composedDigest.recomputed || "uncomputable"), element("dt", "matches"), element("dd", result.composedDigest.matches ? "yes" : "no"));
|
|
82
|
+
section.append(digest);
|
|
83
|
+
section.append(element("h3", "Members"));
|
|
84
|
+
section.append(table("composition-members", [
|
|
85
|
+
"member",
|
|
86
|
+
"observer",
|
|
87
|
+
"outcome",
|
|
88
|
+
"body",
|
|
89
|
+
"digest",
|
|
90
|
+
"graph closure",
|
|
91
|
+
"interval coverage",
|
|
92
|
+
"per-record membership",
|
|
93
|
+
"refusal signature",
|
|
94
|
+
"findings",
|
|
95
|
+
], result.members.map((m) => {
|
|
96
|
+
const tr = row([
|
|
97
|
+
m.id,
|
|
98
|
+
m.observer,
|
|
99
|
+
m.outcome,
|
|
100
|
+
m.body,
|
|
101
|
+
m.digest,
|
|
102
|
+
claimText(m.bundle?.graphClosure),
|
|
103
|
+
claimText(m.bundle?.intervalCoverage),
|
|
104
|
+
claimText(m.bundle?.perRecordMembership),
|
|
105
|
+
m.refusalSignature ?? NOT_APPLICABLE,
|
|
106
|
+
findingsText(m.findings),
|
|
107
|
+
]);
|
|
108
|
+
tr.dataset.memberId = m.id;
|
|
109
|
+
tr.dataset.body = m.body;
|
|
110
|
+
tr.dataset.digest = m.digest;
|
|
111
|
+
return tr;
|
|
112
|
+
})));
|
|
113
|
+
section.append(element("h3", "Observers"));
|
|
114
|
+
section.append(table("composition-observers", ["observer", "role", "custody domain"], result.observers.map((o) => {
|
|
115
|
+
const tr = row([o.id, o.role, o.custodyDomain]);
|
|
116
|
+
tr.dataset.observerId = o.id;
|
|
117
|
+
return tr;
|
|
118
|
+
})));
|
|
119
|
+
// Draft "Observers and Redundancy": custody labels can only downgrade.
|
|
120
|
+
section.append(element("p", "Custody domains are labels declared by whoever composed this block. Identical labels make an agreeing pair redundant; distinct labels do not establish that two observers are independent."));
|
|
121
|
+
section.append(element("h3", "Composition closure"));
|
|
122
|
+
const closure = element("p", `${result.compositionClosure.status}; missing: ${result.compositionClosure.missing.length === 0
|
|
123
|
+
? "none"
|
|
124
|
+
: result.compositionClosure.missing.join(", ")}; findings: ${findingsText(result.compositionClosure.findings)}`);
|
|
125
|
+
closure.dataset.closureStatus = result.compositionClosure.status;
|
|
126
|
+
section.append(closure);
|
|
127
|
+
section.append(element("h3", "Joins"));
|
|
128
|
+
if (result.joins.length === 0)
|
|
129
|
+
section.append(element("p", "No joins."));
|
|
130
|
+
else {
|
|
131
|
+
section.append(table("composition-joins", ["members", "basis", "declared", "derived", "result"], result.joins.map((j) => {
|
|
132
|
+
const tr = row([
|
|
133
|
+
pairText(j.members),
|
|
134
|
+
j.basis,
|
|
135
|
+
j.declared,
|
|
136
|
+
j.derived ?? "not derivable",
|
|
137
|
+
j.result,
|
|
138
|
+
]);
|
|
139
|
+
tr.dataset.joinMembers = j.members.join(",");
|
|
140
|
+
tr.dataset.joinDeclared = j.declared;
|
|
141
|
+
tr.dataset.joinDerived = j.derived ?? "not_derivable";
|
|
142
|
+
tr.dataset.joinResult = j.result;
|
|
143
|
+
return tr;
|
|
144
|
+
})));
|
|
145
|
+
for (const j of result.joins) {
|
|
146
|
+
if (j.differences.length === 0)
|
|
147
|
+
continue;
|
|
148
|
+
const details = services.details(`Differing values: ${pairText(j.members)}`);
|
|
149
|
+
details.dataset.joinDifferences = j.members.join(",");
|
|
150
|
+
for (const difference of j.differences)
|
|
151
|
+
renderDifference(difference, details);
|
|
152
|
+
section.append(details);
|
|
153
|
+
}
|
|
154
|
+
// Per pair, never combined into a count or a score.
|
|
155
|
+
section.append(element("h3", "Agreement"));
|
|
156
|
+
section.append(table("composition-agreement", ["members", "result"], result.corroboration.map((c) => {
|
|
157
|
+
const tr = row([pairText(c.members), corroborationText(c)]);
|
|
158
|
+
tr.dataset.agreementMembers = c.members.join(",");
|
|
159
|
+
tr.dataset.corroboration = c.result;
|
|
160
|
+
if (c.result === "redundant")
|
|
161
|
+
tr.dataset.reasons = c.reasons.join(",");
|
|
162
|
+
return tr;
|
|
163
|
+
})));
|
|
164
|
+
}
|
|
165
|
+
host.L1.append(section);
|
|
166
|
+
}
|
|
167
|
+
/** The built-in composition section module (`aac.builtin.composed/v0`). */
|
|
168
|
+
export const composedSectionModule = {
|
|
169
|
+
manifest: BUILTIN_MANIFEST_COMPOSED,
|
|
170
|
+
canRender: (context) => composedResult(context) !== undefined,
|
|
171
|
+
buildModel: (context) => {
|
|
172
|
+
const result = composedResult(context);
|
|
173
|
+
if (result === undefined)
|
|
174
|
+
throw new Error(`${BUILTIN_MANIFEST_COMPOSED.id}: buildModel called although canRender was false`);
|
|
175
|
+
return { result };
|
|
176
|
+
},
|
|
177
|
+
render: renderComposed,
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=composed-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composed-view.js","sourceRoot":"","sources":["../src/composed-view.ts"],"names":[],"mappings":"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"}
|