@action-state-group/capsule-viewer 0.0.0-stage → 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.
Files changed (45) hide show
  1. package/LICENSE +201 -0
  2. package/LICENSE-BSD-3-Clause +28 -0
  3. package/README.md +24 -2
  4. package/dist/browser.d.ts +4 -0
  5. package/dist/browser.js +11 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/compliance-presentation.d.ts +51 -0
  8. package/dist/compliance-presentation.js +140 -0
  9. package/dist/compliance-presentation.js.map +1 -0
  10. package/dist/compliance-styles.d.ts +8 -0
  11. package/dist/compliance-styles.js +66 -0
  12. package/dist/compliance-styles.js.map +1 -0
  13. package/dist/compliance-view.d.ts +6 -0
  14. package/dist/compliance-view.js +394 -0
  15. package/dist/compliance-view.js.map +1 -0
  16. package/dist/compliance.d.ts +92 -0
  17. package/dist/compliance.js +333 -0
  18. package/dist/compliance.js.map +1 -0
  19. package/dist/composed-view.d.ts +24 -0
  20. package/dist/composed-view.js +179 -0
  21. package/dist/composed-view.js.map +1 -0
  22. package/dist/emitter-shell.html +136 -0
  23. package/dist/emitter.d.ts +69 -0
  24. package/dist/emitter.js +266 -0
  25. package/dist/emitter.js.map +1 -0
  26. package/dist/evidence-graph-view.d.ts +96 -0
  27. package/dist/evidence-graph-view.js +1480 -0
  28. package/dist/evidence-graph-view.js.map +1 -0
  29. package/dist/evidence-graph.iife.js +11373 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +7 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/outcome-report-styles.d.ts +16 -0
  34. package/dist/outcome-report-styles.js +225 -0
  35. package/dist/outcome-report-styles.js.map +1 -0
  36. package/dist/outcome-report-view.d.ts +5 -0
  37. package/dist/outcome-report-view.js +885 -0
  38. package/dist/outcome-report-view.js.map +1 -0
  39. package/dist/presentation-builder.d.ts +247 -0
  40. package/dist/presentation-builder.js +552 -0
  41. package/dist/presentation-builder.js.map +1 -0
  42. package/dist/presentation-mount.d.ts +26 -0
  43. package/dist/presentation-mount.js +45 -0
  44. package/dist/presentation-mount.js.map +1 -0
  45. package/package.json +53 -4
@@ -0,0 +1,394 @@
1
+ import { buildComplianceModel, } from "./compliance.js";
2
+ import { COMPLIANCE_CSS } from "./compliance-styles.js";
3
+ import { NOT_STATED } from "@action-state-group/agent-action-capsule";
4
+ /**
5
+ * The EU AI Act obligations-report card. Called from
6
+ * `evidence-graph-view.ts` in place of `renderResultPage` when the bundle's
7
+ * `eu-ai-act-compliance/v1` extension opts in, after the same verify-first
8
+ * gate every other root family goes through -- nothing here ever runs on a
9
+ * bundle that did not verify. See compliance.ts for where every value on the
10
+ * page comes from: counts, verdicts, test wording, tiers and the pack from
11
+ * the sealed records (or "not stated"); the regulatory mapping from the
12
+ * producer's extension, labelled as such.
13
+ *
14
+ * The whole card renders inside one `.cc`-classed wrapper with its own
15
+ * `<style>` (`COMPLIANCE_CSS`) as its first child. Drill-down uses native
16
+ * `<details>`/`<summary>`: keyboard-accessible, no script-driven modal.
17
+ */
18
+ function element(tag, text) {
19
+ const value = document.createElement(tag);
20
+ if (text !== undefined)
21
+ value.textContent = text;
22
+ return value;
23
+ }
24
+ function el(tag, className, text) {
25
+ const value = element(tag, text);
26
+ value.className = className;
27
+ return value;
28
+ }
29
+ const fmt = (n) => n.toLocaleString();
30
+ const SEVERITY_CLASS = {
31
+ High: "high",
32
+ Medium: "medium",
33
+ Low: "low",
34
+ };
35
+ function severityPill(severity) {
36
+ const cls = SEVERITY_CLASS[severity] ?? "medium";
37
+ return el("span", `sev ${cls}`, severity);
38
+ }
39
+ function tierBadge(tier) {
40
+ const text = tier === "judged"
41
+ ? "judged"
42
+ : tier === "recomputed"
43
+ ? "recomputed"
44
+ : tier === "mixed"
45
+ ? "tier differs across reports"
46
+ : "tier not stated";
47
+ const badge = el("span", `kind ${tier === "judged" || tier === "recomputed" ? tier : "unstated"}`, text);
48
+ badge.dataset.tier = tier;
49
+ return badge;
50
+ }
51
+ function statusPill(statusClass, text) {
52
+ return el("span", `st ${statusClass}`, text);
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Header
56
+ // ---------------------------------------------------------------------------
57
+ function renderHeader(host, model) {
58
+ const hd = el("div", "hd");
59
+ hd.dataset.section = "header";
60
+ hd.append(el("div", "kicker", "EU AI Act obligations report"));
61
+ hd.append(el("h1", "", model.regulation));
62
+ const pack = model.pack.id === NOT_STATED
63
+ ? `Pack ${NOT_STATED}`
64
+ : `Pack ${model.pack.id} v${model.pack.version}`;
65
+ hd.append(el("div", "sub", `${pack} · ${fmt(model.obligations.length)} obligations · ${fmt(model.totalSessions)} sessions · Result capsule ${model.capsuleId}`));
66
+ const basis = el("p", "na", `Counts, verdicts, test wording, tiers and the pack are read from the sealed claims and reports in this bundle, or marked "${NOT_STATED}". The article, applicability, method and finding recommendations are the producer's mapping, carried on this bundle's eu-ai-act-compliance/v1 extension outside the signed records.`);
67
+ basis.dataset.basis = "terms";
68
+ hd.append(basis);
69
+ host.append(hd);
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Section 1: summary
73
+ // ---------------------------------------------------------------------------
74
+ function obligationStatus(obligation) {
75
+ const exceptions = obligation.rows.reduce((sum, r) => sum + r.notMetCount, 0);
76
+ if (obligation.applicability.status === "not stated")
77
+ return exceptions > 0
78
+ ? { cls: "exc", text: `Exceptions noted (${fmt(exceptions)})` }
79
+ : { cls: "ok", text: "No exceptions" };
80
+ if (obligation.applicability.status === "future")
81
+ return exceptions > 0
82
+ ? {
83
+ cls: "future",
84
+ text: `Not yet applicable · ${fmt(exceptions)} exceptions (readiness)`,
85
+ }
86
+ : { cls: "future", text: "Not yet applicable · no exceptions" };
87
+ return exceptions > 0
88
+ ? { cls: "exc", text: `Exceptions noted (${fmt(exceptions)})` }
89
+ : { cls: "ok", text: "No exceptions" };
90
+ }
91
+ function renderSummary(host, model) {
92
+ const section = el("section", "");
93
+ section.dataset.section = "summary";
94
+ section.append(el("h2", "", "1. Summary"));
95
+ section.append(el("p", "lede", "Results are stated as counts of sessions; no overall compliance percentage is given."));
96
+ const table = document.createElement("table");
97
+ table.className = "grid";
98
+ table.dataset.rows = "summary";
99
+ const thead = document.createElement("thead");
100
+ const headRow = document.createElement("tr");
101
+ headRow.append(element("th", "Article"), element("th", "Obligation"), element("th", "Applicability"), element("th", "Status"));
102
+ thead.append(headRow);
103
+ table.append(thead);
104
+ const tbody = document.createElement("tbody");
105
+ for (const obligation of model.obligations) {
106
+ const row = document.createElement("tr");
107
+ row.dataset.obligation = obligation.key;
108
+ const status = obligationStatus(obligation);
109
+ row.append(el("td", "b", obligation.article), element("td", obligation.title), element("td", obligation.applicability.note));
110
+ const statusCell = document.createElement("td");
111
+ statusCell.append(statusPill(status.cls, status.text));
112
+ row.append(statusCell);
113
+ tbody.append(row);
114
+ }
115
+ table.append(tbody);
116
+ section.append(table);
117
+ host.append(section);
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // Sessions drill-down (shared by test rows and findings)
121
+ // ---------------------------------------------------------------------------
122
+ function checkItBlock(test) {
123
+ const box = el("div", "ck");
124
+ box.dataset.crit = test.criterionId;
125
+ box.dataset.critVerdict = test.verdict;
126
+ const head = el("div", "h");
127
+ const label = test.verdict === "met"
128
+ ? "✓ met"
129
+ : test.verdict === "not_met"
130
+ ? "✗ not met"
131
+ : test.verdict === "not_applicable"
132
+ ? "— not applicable"
133
+ : test.verdict === "failed"
134
+ ? "✗ failed verification (counted as an exception)"
135
+ : test.verdict === "unsupported"
136
+ ? "✗ unsupported: its evidence is not in this bundle (counted as an exception)"
137
+ : "– not evaluable";
138
+ head.append(element("span", label));
139
+ head.append(tierBadge(test.tier));
140
+ box.append(head);
141
+ if (test.rationale !== undefined)
142
+ box.append(el("div", "why", test.rationale));
143
+ const ev = el("div", "ev");
144
+ ev.append(element("span", "Evidence: "));
145
+ if (test.reportDigest !== undefined)
146
+ ev.append(element("code", test.reportDigest));
147
+ if (test.contract !== undefined)
148
+ ev.append(element("code", test.contract));
149
+ if (test.judgePinDigest !== undefined)
150
+ ev.append(element("code", test.judgePinDigest));
151
+ if (test.reportDigest === undefined)
152
+ ev.append(element("span", "absent"));
153
+ box.append(ev);
154
+ return box;
155
+ }
156
+ function renderTranscript(session) {
157
+ const t = session.transcript;
158
+ const wrap = el("div", "tx");
159
+ wrap.dataset.transcript = t.state;
160
+ if (t.state !== "verified") {
161
+ wrap.append(el("div", "ev", t.state === "absent"
162
+ ? `Transcript: not in this bundle. The conversation is sealed in the case record ${session.sourceCapsuleId ?? "(not stated by the reports)"}; this page cannot show it and does not vouch for it.`
163
+ : `Transcript: not shown: ${t.reason ?? "the cited transcript does not check"}.`));
164
+ return wrap;
165
+ }
166
+ wrap.append(el("div", "ev", `Transcript: sealed in record ${t.transcriptRecordId}; its digest equals what the judged case capsule committed to (${t.inputDigest}), checked on this page. ${t.turns.length} messages, in order.`));
167
+ for (const turn of t.turns) {
168
+ const line = el("div", `turn ${turn.role}`);
169
+ line.append(el("b", "", `${turn.role}: `));
170
+ if (turn.content !== undefined)
171
+ line.append(element("span", turn.content));
172
+ for (const call of turn.toolCalls)
173
+ line.append(el("code", "", ` ${call.name}(${call.arguments})`));
174
+ wrap.append(line);
175
+ }
176
+ return wrap;
177
+ }
178
+ function renderSessionDetails(session) {
179
+ const details = document.createElement("details");
180
+ details.className = "session";
181
+ details.dataset.session = session.conversationId;
182
+ const summary = document.createElement("summary");
183
+ summary.textContent = `${session.conversationId} · ${session.day}`;
184
+ details.append(summary);
185
+ for (const test of session.tests)
186
+ details.append(checkItBlock(test));
187
+ details.append(renderTranscript(session));
188
+ return details;
189
+ }
190
+ function renderSessionList(host, conversationIds, sessions) {
191
+ const byId = new Map(sessions.map((s) => [s.conversationId, s]));
192
+ const details = document.createElement("details");
193
+ details.dataset.records = "sessions";
194
+ const summary = document.createElement("summary");
195
+ summary.textContent = `${fmt(conversationIds.length)} sessions`;
196
+ details.append(summary);
197
+ for (const id of conversationIds) {
198
+ const session = byId.get(id);
199
+ if (session !== undefined)
200
+ details.append(renderSessionDetails(session));
201
+ }
202
+ host.append(details);
203
+ }
204
+ // ---------------------------------------------------------------------------
205
+ // Section 2: test results
206
+ // ---------------------------------------------------------------------------
207
+ function renderTests(host, model) {
208
+ const section = el("section", "");
209
+ section.dataset.section = "tests";
210
+ section.append(el("h2", "", "2. Test results"));
211
+ section.append(el("p", "lede", "Population is the sessions a test has a sealed result for; a session with none for a test is not applicable to it and is not counted. Recomputed tests are deterministic checks anyone " +
212
+ "can repeat from the records. Judged tests apply a frozen rubric with a pinned model."));
213
+ const table = document.createElement("table");
214
+ table.className = "grid";
215
+ table.dataset.rows = "tests";
216
+ const thead = document.createElement("thead");
217
+ const headRow = document.createElement("tr");
218
+ headRow.append(element("th", "Test"), element("th", "Requirement"), element("th", "Type"), el("th", "n", "Population"), el("th", "n", "Exceptions"), el("th", "n", "Not evaluable"), element("th", "Result"));
219
+ thead.append(headRow);
220
+ table.append(thead);
221
+ const tbody = document.createElement("tbody");
222
+ for (const obligation of model.obligations)
223
+ for (const row of obligation.rows) {
224
+ const tr = document.createElement("tr");
225
+ tr.dataset.criterion = row.criterionId;
226
+ const typeCell = document.createElement("td");
227
+ typeCell.append(tierBadge(row.tier));
228
+ const resultCell = document.createElement("td");
229
+ const population = model.totalSessions - row.notApplicableCount;
230
+ if (population > 0 &&
231
+ row.notEvaluableCount === population &&
232
+ row.notMetCount === 0 &&
233
+ row.metCount === 0) {
234
+ resultCell.append(statusPill("ne", "Not evaluable"));
235
+ if (row.notEvaluableNote !== undefined)
236
+ resultCell.append(el("div", "applic", row.notEvaluableNote));
237
+ }
238
+ else {
239
+ resultCell.append(statusPill(row.notMetCount > 0 ? "exc" : "ok", row.notMetCount > 0 ? "Exceptions" : "No exceptions"));
240
+ }
241
+ tr.append(el("td", "b", `${obligation.article}`), element("td", row.name), typeCell, el("td", "n", fmt(population)), el("td", "n", fmt(row.notMetCount)), el("td", "n", fmt(row.notEvaluableCount)), resultCell);
242
+ tbody.append(tr);
243
+ const drill = document.createElement("tr");
244
+ const drillCell = document.createElement("td");
245
+ drillCell.colSpan = 7;
246
+ const sessionIds = [
247
+ ...(row.sessionsByVerdict.get("not_met") ?? []),
248
+ ...(row.sessionsByVerdict.get("not_evaluable") ?? []),
249
+ ];
250
+ if (sessionIds.length > 0)
251
+ renderSessionList(drillCell, sessionIds, model.sessions);
252
+ drill.append(drillCell);
253
+ tbody.append(drill);
254
+ }
255
+ table.append(tbody);
256
+ section.append(table);
257
+ host.append(section);
258
+ }
259
+ // ---------------------------------------------------------------------------
260
+ // Section 3: findings
261
+ // ---------------------------------------------------------------------------
262
+ function renderFindings(host, model) {
263
+ const section = el("section", "");
264
+ section.dataset.section = "findings";
265
+ section.append(el("h2", "", "3. Findings"));
266
+ if (model.findings.length === 0) {
267
+ section.append(el("p", "lede", "No findings: every test with a not-met session count above zero would have produced one."));
268
+ host.append(section);
269
+ return;
270
+ }
271
+ for (const finding of model.findings) {
272
+ const box = el("div", "fnd");
273
+ box.dataset.finding = finding.id;
274
+ const fh = el("div", "fh");
275
+ fh.append(el("b", "", finding.id), severityPill(finding.severity), element("span", finding.article), el("span", "", finding.testName));
276
+ box.append(fh);
277
+ const table = document.createElement("table");
278
+ table.className = "fk";
279
+ const evRow = document.createElement("tr");
280
+ evRow.append(element("th", "Evidence"), element("td", `${fmt(finding.sessionIds.length)} sessions`));
281
+ const recRow = document.createElement("tr");
282
+ recRow.append(element("th", "Recommendation"), el("td", "", finding.recommendation));
283
+ const ownerRow = document.createElement("tr");
284
+ ownerRow.append(element("th", "Owner · due"), element("td", finding.ownerDue));
285
+ table.append(evRow, recRow, ownerRow);
286
+ box.append(table);
287
+ renderSessionList(box, finding.sessionIds, model.sessions);
288
+ section.append(box);
289
+ }
290
+ host.append(section);
291
+ }
292
+ // ---------------------------------------------------------------------------
293
+ // Section 4: quality of judged results
294
+ // ---------------------------------------------------------------------------
295
+ function renderQuality(host, model) {
296
+ const section = el("section", "");
297
+ section.dataset.section = "quality";
298
+ section.append(el("h2", "", "4. Quality of judged results"));
299
+ const protocol = model.qualityProtocol;
300
+ if (protocol === undefined) {
301
+ section.append(el("p", "lede", "No quality protocol declared in this pack."));
302
+ host.append(section);
303
+ return;
304
+ }
305
+ section.append(el("p", "lede", `Protocol ${protocol.protocol ?? "unspecified"}${protocol.cadence === undefined ? "" : `, ${protocol.cadence}`}. Recomputed tests are not sampled.`));
306
+ if (protocol.note !== undefined)
307
+ section.append(el("p", "na", protocol.note));
308
+ host.append(section);
309
+ }
310
+ // ---------------------------------------------------------------------------
311
+ // Section 5: methodology / what ran
312
+ // ---------------------------------------------------------------------------
313
+ function renderWhatRan(host, model) {
314
+ const section = el("section", "");
315
+ section.dataset.section = "methodology";
316
+ section.append(el("h2", "", "5. Methodology"));
317
+ const ran = el("div", "ran");
318
+ const field = (label, value) => {
319
+ const it = el("div", "it");
320
+ it.append(el("div", "k", label), el("div", "v", value));
321
+ ran.append(it);
322
+ };
323
+ field("Contract", model.runInfo.contract ??
324
+ (model.runInfo.pinned ? "no conversations" : "disagrees across sessions"));
325
+ field("Judge pin digest", model.runInfo.judgePinDigest ??
326
+ (model.runInfo.pinned
327
+ ? "no judged sessions cited"
328
+ : "disagrees across sessions"));
329
+ field("Sessions", fmt(model.totalSessions));
330
+ section.append(ran);
331
+ host.append(section);
332
+ }
333
+ // ---------------------------------------------------------------------------
334
+ // Per-obligation detail (plain-language text, method, judged terms)
335
+ // ---------------------------------------------------------------------------
336
+ function renderObligationDetail(host, obligation) {
337
+ const details = document.createElement("details");
338
+ details.dataset.obligationDetail = obligation.key;
339
+ const summary = document.createElement("summary");
340
+ summary.textContent = `${obligation.article} · ${obligation.title}`;
341
+ details.append(summary);
342
+ details.dataset.mapped = String(obligation.mapped);
343
+ details.append(el("p", "na", obligation.mapped
344
+ ? "Article, summary and method: the producer's mapping, not a sealed record."
345
+ : `The producer's extension does not map this obligation: article, summary and method ${NOT_STATED}.`));
346
+ details.append(el("p", "", obligation.plain));
347
+ if (obligation.judgedTerms.length > 0)
348
+ details.append(el("p", "applic", `Judged terms: ${obligation.judgedTerms.join(", ")}`));
349
+ details.append(el("p", "", obligation.method));
350
+ for (const row of obligation.rows) {
351
+ const rowBox = el("div", "ck");
352
+ rowBox.dataset.wording = row.wording.source;
353
+ const h = el("div", "h");
354
+ h.append(element("span", row.name), tierBadge(row.tier));
355
+ rowBox.append(h);
356
+ rowBox.append(el("div", "why", row.wording.source === "sealed"
357
+ ? `Wording run (sealed): ${row.wording.text}`
358
+ : row.wording.source === "mixed"
359
+ ? `Wording ${NOT_STATED}: the cited reports state different wordings.`
360
+ : `Wording ${NOT_STATED}: no cited report states it.`));
361
+ if (row.notEvaluableNote !== undefined)
362
+ rowBox.append(el("div", "ev", row.notEvaluableNote));
363
+ details.append(rowBox);
364
+ }
365
+ host.append(details);
366
+ }
367
+ function renderObligationDetails(host, model) {
368
+ const section = el("section", "");
369
+ section.dataset.section = "obligation-detail";
370
+ section.append(el("h2", "", "Obligation detail"));
371
+ for (const obligation of model.obligations)
372
+ renderObligationDetail(section, obligation);
373
+ host.append(section);
374
+ }
375
+ // ---------------------------------------------------------------------------
376
+ // Assembly
377
+ // ---------------------------------------------------------------------------
378
+ export function renderCompliancePage(result, presentation, _bundle, _verified, root) {
379
+ const model = buildComplianceModel(result, presentation);
380
+ const wrapper = el("div", "cc");
381
+ wrapper.dataset.page = "compliance";
382
+ const style = document.createElement("style");
383
+ style.textContent = COMPLIANCE_CSS;
384
+ wrapper.append(style);
385
+ renderHeader(wrapper, model);
386
+ renderSummary(wrapper, model);
387
+ renderObligationDetails(wrapper, model);
388
+ renderTests(wrapper, model);
389
+ renderFindings(wrapper, model);
390
+ renderQuality(wrapper, model);
391
+ renderWhatRan(wrapper, model);
392
+ root.append(wrapper);
393
+ }
394
+ //# sourceMappingURL=compliance-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-view.js","sourceRoot":"","sources":["../src/compliance-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { ComplianceApplicability, ComplianceFinding, CompliancePresentation } from "./compliance-presentation.js";
2
+ import { type ConversationTranscript } from "@action-state-group/agent-action-capsule";
3
+ import { type ResultClaim, type ResultRoot } from "@action-state-group/agent-action-capsule";
4
+ export type TestVerdict = "met" | "not_met" | "not_evaluable" | "not_applicable" | "failed" | "unsupported";
5
+ /** A test's tier as the sealed reports state it. */
6
+ export type TierReading = "judged" | "recomputed" | "not stated" | "mixed";
7
+ export interface SealedText {
8
+ readonly text: string;
9
+ readonly source: "sealed" | "unstated" | "mixed";
10
+ }
11
+ export interface SessionTest {
12
+ readonly criterionId: string;
13
+ readonly verdict: TestVerdict;
14
+ readonly tier: TierReading;
15
+ readonly rationale?: string;
16
+ readonly claim?: ResultClaim;
17
+ readonly reportDigest?: string;
18
+ readonly judgePinDigest?: string;
19
+ readonly contract?: string;
20
+ }
21
+ export interface Session {
22
+ readonly conversationId: string;
23
+ readonly day: string;
24
+ readonly tests: readonly SessionTest[];
25
+ readonly sourceCapsuleId?: string;
26
+ readonly transcript: ConversationTranscript;
27
+ }
28
+ export interface ObligationRowModel {
29
+ readonly criterionId: string;
30
+ /** The producer's short label when it maps this test, else the test id made readable. */
31
+ readonly name: string;
32
+ /** The wording the test was run against: the sealed `clause_claim`, or not stated. */
33
+ readonly wording: SealedText;
34
+ readonly tier: TierReading;
35
+ readonly notEvaluableNote?: string;
36
+ readonly finding?: ComplianceFinding;
37
+ readonly metCount: number;
38
+ readonly notMetCount: number;
39
+ readonly notEvaluableCount: number;
40
+ readonly notApplicableCount: number;
41
+ /** verdict bucket -> conversation ids, for the row's own drill-down. failed/unsupported fold into not_met here. */
42
+ readonly sessionsByVerdict: ReadonlyMap<"met" | "not_met" | "not_evaluable" | "not_applicable", readonly string[]>;
43
+ }
44
+ export interface ObligationModel {
45
+ readonly key: string;
46
+ /** True when the producer's extension maps this obligation; otherwise every mapping field reads not stated. */
47
+ readonly mapped: boolean;
48
+ readonly article: string;
49
+ readonly title: string;
50
+ readonly plain: string;
51
+ readonly judgedTerms: readonly string[];
52
+ readonly applicability: {
53
+ readonly status: ComplianceApplicability["status"] | "not stated";
54
+ readonly note: string;
55
+ };
56
+ readonly method: string;
57
+ readonly rows: readonly ObligationRowModel[];
58
+ }
59
+ export interface ComplianceFindingModel {
60
+ readonly id: string;
61
+ readonly criterionId: string;
62
+ readonly obligationKey: string;
63
+ readonly article: string;
64
+ readonly testName: string;
65
+ readonly severity: string;
66
+ readonly recommendation: string;
67
+ readonly ownerDue: string;
68
+ readonly sessionIds: readonly string[];
69
+ }
70
+ export interface ComplianceRunInfo {
71
+ readonly contract?: string;
72
+ readonly judgePinDigest?: string;
73
+ readonly pinned: boolean;
74
+ }
75
+ export interface CompliancePack {
76
+ /** `<contract_id>` of the one `contract_ref` the counted claims name, else not stated. */
77
+ readonly id: string;
78
+ /** `<version>` of that `contract_ref`, else not stated. */
79
+ readonly version: string;
80
+ }
81
+ export interface ComplianceModel {
82
+ readonly regulation: string;
83
+ readonly pack: CompliancePack;
84
+ readonly obligations: readonly ObligationModel[];
85
+ readonly sessions: readonly Session[];
86
+ readonly findings: readonly ComplianceFindingModel[];
87
+ readonly totalSessions: number;
88
+ readonly runInfo: ComplianceRunInfo;
89
+ readonly qualityProtocol: CompliancePresentation["qualityProtocol"];
90
+ readonly capsuleId: string;
91
+ }
92
+ export declare function buildComplianceModel(result: ResultRoot, presentation: CompliancePresentation): ComplianceModel;