@intentset/verification 0.6.0 → 0.7.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 (51) hide show
  1. package/README.md +50 -0
  2. package/dist/adapters/common.d.ts +6 -0
  3. package/dist/adapters/common.d.ts.map +1 -1
  4. package/dist/adapters/common.js +2 -0
  5. package/dist/adapters/common.js.map +1 -1
  6. package/dist/adapters/playwright.d.ts +3 -0
  7. package/dist/adapters/playwright.d.ts.map +1 -0
  8. package/dist/adapters/playwright.js +78 -0
  9. package/dist/adapters/playwright.js.map +1 -0
  10. package/dist/binding.d.ts +31 -0
  11. package/dist/binding.d.ts.map +1 -0
  12. package/dist/binding.js +46 -0
  13. package/dist/binding.js.map +1 -0
  14. package/dist/classify.d.ts +35 -7
  15. package/dist/classify.d.ts.map +1 -1
  16. package/dist/classify.js +104 -14
  17. package/dist/classify.js.map +1 -1
  18. package/dist/fixture.d.ts +18 -2
  19. package/dist/fixture.d.ts.map +1 -1
  20. package/dist/fixture.js +23 -3
  21. package/dist/fixture.js.map +1 -1
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/records.d.ts +8 -1
  27. package/dist/records.d.ts.map +1 -1
  28. package/dist/records.js +24 -1
  29. package/dist/records.js.map +1 -1
  30. package/dist/report.d.ts.map +1 -1
  31. package/dist/report.js +4 -0
  32. package/dist/report.js.map +1 -1
  33. package/dist/stale.d.ts +65 -0
  34. package/dist/stale.d.ts.map +1 -0
  35. package/dist/stale.js +95 -0
  36. package/dist/stale.js.map +1 -0
  37. package/dist/subject.d.ts +92 -0
  38. package/dist/subject.d.ts.map +1 -0
  39. package/dist/subject.js +247 -0
  40. package/dist/subject.js.map +1 -0
  41. package/package.json +9 -2
  42. package/src/adapters/common.ts +8 -0
  43. package/src/adapters/playwright.ts +94 -0
  44. package/src/binding.ts +68 -0
  45. package/src/classify.ts +165 -14
  46. package/src/fixture.ts +36 -3
  47. package/src/index.ts +4 -0
  48. package/src/records.ts +40 -2
  49. package/src/report.ts +4 -0
  50. package/src/stale.ts +160 -0
  51. package/src/subject.ts +277 -0
package/dist/fixture.d.ts CHANGED
@@ -12,9 +12,19 @@
12
12
  * 4. Check locators against the tree's paths (documents and sources) only
13
13
  * when the case supplies `sources`; a case without them has no tree to
14
14
  * check against, and its locators are reported unresolved instead.
15
- * 5. The case's diagnostics are validation's plus the reader's plus the check's.
15
+ * 5. Decide the binding (`resolveBinding`): the case's `.intentset/config.yaml`
16
+ * `evidence.binding`, else subject where the graph has slice claims, else
17
+ * commit with EVID004. Under subject binding the driver resolves what the
18
+ * architecture package knows (claimed files, import closures) over the
19
+ * tree of documents and sources into a `SubjectSource`, and every
20
+ * verification's subject is computed from it (`subjectsFor`).
21
+ * 6. The case's `changedSince`, when it has one, answers the question git
22
+ * would: the files changed between a record's commit and the snapshot.
23
+ * A commit it does not list is one that is not an ancestor.
24
+ * 7. The case's diagnostics are validation's plus the reader's plus the check's.
16
25
  */
17
- import { type Diagnostic, type Graph, type Level } from "@intentset/core";
26
+ import { type Diagnostic, type EvidenceBinding, type Graph, type Level } from "@intentset/core";
27
+ import { type SubjectSource } from "./binding.ts";
18
28
  import { type EvidenceCheck } from "./check.ts";
19
29
  import type { EvidenceSnapshot } from "./classify.ts";
20
30
  export declare const FIXTURE_EVIDENCE_PATH = "evidence.json";
@@ -33,6 +43,12 @@ export interface FixtureEvidenceInput {
33
43
  documents: Iterable<string>;
34
44
  /** Paths of the case's `sources`. */
35
45
  sources: Iterable<string>;
46
+ /** `evidence.binding` of the case's configuration; null or absent when it states none. */
47
+ configuredBinding?: EvidenceBinding | null;
48
+ /** What the architecture package resolved over the tree; needed only when the binding in force is subject. */
49
+ subjectSource?: SubjectSource;
50
+ /** The case's `changedSince`: for a commit, the files changed between it and the snapshot. */
51
+ changedSince?: Readonly<Record<string, readonly string[]>>;
36
52
  }
37
53
  export interface FixtureEvidenceRun extends EvidenceCheck {
38
54
  snapshot: EvidenceSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAa,KAAK,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItD,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,yDAAyD;IACzD,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,mEAAmE;IACnE,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,qCAAqC;IACrC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,sGAAsG;IACtG,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,kBAAkB,CAmBpF"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,KAAK,EAEV,KAAK,KAAK,EAEX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAkC,KAAK,aAAa,EAAe,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItD,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,yDAAyD;IACzD,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,mEAAmE;IACnE,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,qCAAqC;IACrC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3C,8GAA8G;IAC9G,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,8FAA8F;IAC9F,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,sGAAsG;IACtG,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,kBAAkB,CA6BpF"}
package/dist/fixture.js CHANGED
@@ -12,19 +12,39 @@
12
12
  * 4. Check locators against the tree's paths (documents and sources) only
13
13
  * when the case supplies `sources`; a case without them has no tree to
14
14
  * check against, and its locators are reported unresolved instead.
15
- * 5. The case's diagnostics are validation's plus the reader's plus the check's.
15
+ * 5. Decide the binding (`resolveBinding`): the case's `.intentset/config.yaml`
16
+ * `evidence.binding`, else subject where the graph has slice claims, else
17
+ * commit with EVID004. Under subject binding the driver resolves what the
18
+ * architecture package knows (claimed files, import closures) over the
19
+ * tree of documents and sources into a `SubjectSource`, and every
20
+ * verification's subject is computed from it (`subjectsFor`).
21
+ * 6. The case's `changedSince`, when it has one, answers the question git
22
+ * would: the files changed between a record's commit and the snapshot.
23
+ * A commit it does not list is one that is not an ancestor.
24
+ * 7. The case's diagnostics are validation's plus the reader's plus the check's.
16
25
  */
17
- import { graphHash, sortDiagnostics } from "@intentset/core";
26
+ import { graphHash, sortDiagnostics, } from "@intentset/core";
27
+ import { hasSliceClaims, resolveBinding, subjectsFor } from "./binding.js";
18
28
  import { checkEvidence } from "./check.js";
19
29
  import { bindPlaceholders, FIXTURE_COMMIT, requestedScope } from "./placeholders.js";
20
30
  import { readRunRecords } from "./records.js";
21
31
  export const FIXTURE_EVIDENCE_PATH = "evidence.json";
22
32
  export function checkFixtureEvidence(input) {
23
- const snapshot = {
33
+ const decision = resolveBinding(input.configuredBinding ?? null, hasSliceClaims(input.graph));
34
+ const base = {
24
35
  commit: FIXTURE_COMMIT,
25
36
  graphHash: graphHash(input.graph),
26
37
  scope: requestedScope(input.request),
27
38
  };
39
+ const snapshot = { ...base, binding: decision.binding, bindingReason: decision.reason };
40
+ if (decision.binding === "subject" && input.subjectSource !== undefined) {
41
+ snapshot.subjects = subjectsFor(input.graph, input.subjectSource);
42
+ snapshot.covers = input.subjectSource.covers;
43
+ if (input.changedSince !== undefined) {
44
+ const changed = input.changedSince;
45
+ snapshot.changedSince = (commit) => changed[commit] ?? null;
46
+ }
47
+ }
28
48
  const read = readRunRecords(bindPlaceholders(input.evidence, snapshot), FIXTURE_EVIDENCE_PATH);
29
49
  const sources = [...input.sources];
30
50
  const files = sources.length > 0 ? new Set([...input.documents, ...sources]) : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAA+B,SAAS,EAAc,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtG,OAAO,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAsBrD,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,MAAM,QAAQ,GAAqB;QACjC,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;KACrC,CAAC;IACF,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACjE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK;QACL,YAAY,EAAE,qBAAqB;KACpC,CAAC,CAAC;IACH,OAAO;QACL,GAAG,OAAO;QACV,QAAQ;QACR,WAAW,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAIL,SAAS,EAET,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAsB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAsB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AA4BrD,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAqB;QAC7B,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QACjC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;KACrC,CAAC;IACF,MAAM,QAAQ,GAAqB,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC1G,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACxE,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAClE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;QAC7C,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;YACnC,QAAQ,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACjE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK;QACL,YAAY,EAAE,qBAAqB;KACpC,CAAC,CAAC;IACH,OAAO;QACL,GAAG,OAAO;QACV,QAAQ;QACR,WAAW,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,7 +6,9 @@
6
6
  */
7
7
  export * from "./adapters/common.ts";
8
8
  export * from "./adapters/node-test.ts";
9
+ export * from "./adapters/playwright.ts";
9
10
  export * from "./adapters/vitest.ts";
11
+ export * from "./binding.ts";
10
12
  export * from "./check.ts";
11
13
  export * from "./classify.ts";
12
14
  export * from "./coverage.ts";
@@ -14,4 +16,6 @@ export * from "./fixture.ts";
14
16
  export * from "./placeholders.ts";
15
17
  export * from "./records.ts";
16
18
  export * from "./report.ts";
19
+ export * from "./stale.ts";
20
+ export * from "./subject.ts";
17
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,9 @@
6
6
  */
7
7
  export * from "./adapters/common.js";
8
8
  export * from "./adapters/node-test.js";
9
+ export * from "./adapters/playwright.js";
9
10
  export * from "./adapters/vitest.js";
11
+ export * from "./binding.js";
10
12
  export * from "./check.js";
11
13
  export * from "./classify.js";
12
14
  export * from "./coverage.js";
@@ -14,4 +16,6 @@ export * from "./fixture.js";
14
16
  export * from "./placeholders.js";
15
17
  export * from "./records.js";
16
18
  export * from "./report.js";
19
+ export * from "./stale.js";
20
+ export * from "./subject.js";
17
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
package/dist/records.d.ts CHANGED
@@ -12,12 +12,15 @@
12
12
  import { type Diagnostic } from "@intentset/core";
13
13
  export declare const RUN_RESULTS: readonly ["pass", "fail", "skip", "error"];
14
14
  export type RunResult = (typeof RUN_RESULTS)[number];
15
+ /** What a record is bound to (Core §8): the subject the run checked, or the commit and graph hash it ran at. */
16
+ export declare const RUN_BINDINGS: readonly ["subject", "commit"];
17
+ export type RunBinding = (typeof RUN_BINDINGS)[number];
15
18
  /** The literal a fixture writes for "the snapshot's commit" or "the snapshot's graph hash". */
16
19
  export declare const CURRENT = "@current";
17
20
  export interface RunScope {
18
21
  /** The product's artifact ID. */
19
22
  product: string;
20
- /** The exact release label; v0.1 matches release labels exactly (Core §7). */
23
+ /** The exact release label; v0.2 matches release labels exactly (Core §7). */
21
24
  release: string;
22
25
  }
23
26
  export interface RunTool {
@@ -42,6 +45,10 @@ export interface RunRecord {
42
45
  finishedAt: string;
43
46
  result: RunResult;
44
47
  uri: string;
48
+ /** Absent means commit binding, as every record written before the field existed. */
49
+ binding?: RunBinding;
50
+ /** SHA-256 of the subject the run checked (subject.ts); present on every subject-binding record. */
51
+ subjectHash?: string;
45
52
  rationale?: string;
46
53
  /** Namespaced extensions (`org.example/key`), preserved and never interpreted. */
47
54
  extensions?: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAiB,KAAK,UAAU,EAA+B,MAAM,iBAAiB,CAAC;AAG9F,eAAO,MAAM,WAAW,YAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AACtE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,+FAA+F;AAC/F,eAAO,MAAM,OAAO,aAAa,CAAC;AAElC,MAAM,WAAW,QAAQ;IACvB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,wGAAwG;IACxG,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,uGAAuG;IACvG,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAwBD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAMjE;AAED,MAAM,WAAW,cAAc;IAC7B,2FAA2F;IAC3F,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,8CAA8C;IAC9C,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAwC1E"}
1
+ {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAiB,KAAK,UAAU,EAA+B,MAAM,iBAAiB,CAAC;AAG9F,eAAO,MAAM,WAAW,YAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AACtE,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,gHAAgH;AAChH,eAAO,MAAM,YAAY,YAAI,SAAS,EAAE,QAAQ,CAAU,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,+FAA+F;AAC/F,eAAO,MAAM,OAAO,aAAa,CAAC;AAElC,MAAM,WAAW,QAAQ;IACvB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,wGAAwG;IACxG,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,uGAAuG;IACvG,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAwBD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAMjE;AAED,MAAM,WAAW,cAAc;IAC7B,2FAA2F;IAC3F,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,8CAA8C;IAC9C,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAwC1E"}
package/dist/records.js CHANGED
@@ -12,6 +12,8 @@
12
12
  import { canonicalJson, ID_PATTERN, sortDiagnostics } from "@intentset/core";
13
13
  import { compareStrings, evidenceDiagnostic, pointerToken } from "./diagnostic.js";
14
14
  export const RUN_RESULTS = ["pass", "fail", "skip", "error"];
15
+ /** What a record is bound to (Core §8): the subject the run checked, or the commit and graph hash it ran at. */
16
+ export const RUN_BINDINGS = ["subject", "commit"];
15
17
  /** The literal a fixture writes for "the snapshot's commit" or "the snapshot's graph hash". */
16
18
  export const CURRENT = "@current";
17
19
  const REQUIRED = [
@@ -28,7 +30,7 @@ const REQUIRED = [
28
30
  "result",
29
31
  "uri",
30
32
  ];
31
- const KNOWN = new Set([...REQUIRED, "rationale", "extensions"]);
33
+ const KNOWN = new Set([...REQUIRED, "binding", "subjectHash", "rationale", "extensions"]);
32
34
  const TIMESTAMP = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,9}))?Z$/;
33
35
  const GRAPH_HASH = /^[0-9a-f]{64}$/;
34
36
  const NO_SPACE = /^\S+$/;
@@ -169,6 +171,23 @@ function readRecord(entry, index, problems) {
169
171
  else
170
172
  problem("result", `\`result\` of run record ${index} must be pass, fail, skip or error, but it is ${describe(entry.result)}.`, "Record one of the four results; anything else is not evidence (Core §8).");
171
173
  }
174
+ let binding;
175
+ if (Object.hasOwn(entry, "binding")) {
176
+ if (RUN_BINDINGS.includes(entry.binding))
177
+ binding = entry.binding;
178
+ else
179
+ problem("binding", `\`binding\` of run record ${index} must be subject or commit, but it is ${describe(entry.binding)}.`, "Write `binding: subject` for a record bound to its subject, or leave it out for a commit-binding record (Core §8).");
180
+ }
181
+ let subjectHash;
182
+ if (Object.hasOwn(entry, "subjectHash")) {
183
+ if (typeof entry.subjectHash === "string" && GRAPH_HASH.test(entry.subjectHash))
184
+ subjectHash = entry.subjectHash;
185
+ else
186
+ problem("subjectHash", `\`subjectHash\` of run record ${index} must be 64 lowercase hex characters, but it is ${describe(entry.subjectHash)}.`, "Record the subject hash `intentset evidence import` computed for the verification (Core §8).");
187
+ }
188
+ if (binding === "subject" && !Object.hasOwn(entry, "subjectHash")) {
189
+ problem("subjectHash", `Run record ${index} has binding subject but no \`subjectHash\`, so nothing says what it was bound to.`, "Add the subject hash, or leave `binding` out to make it a commit-binding record (Core §8).");
190
+ }
172
191
  let rationale;
173
192
  if (Object.hasOwn(entry, "rationale")) {
174
193
  if (typeof entry.rationale === "string" && /\S/.test(entry.rationale))
@@ -222,6 +241,10 @@ function readRecord(entry, index, problems) {
222
241
  result: result,
223
242
  uri: uri,
224
243
  };
244
+ if (binding !== undefined)
245
+ record.binding = binding;
246
+ if (subjectHash !== undefined)
247
+ record.subjectHash = subjectHash;
225
248
  if (rationale !== undefined)
226
249
  record.rationale = rationale;
227
250
  if (extensions !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAmB,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAGtE,+FAA+F;AAC/F,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAqClC,MAAM,QAAQ,GAAG;IACf,YAAY;IACZ,gBAAgB;IAChB,QAAQ;IACR,WAAW;IACX,aAAa;IACb,OAAO;IACP,MAAM;IACN,UAAU;IACV,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,KAAK;CACG,CAAC;AACX,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAExE,MAAM,SAAS,GAAG,oEAAoE,CAAC;AACvF,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,QAAQ,GAAG,OAAO,CAAC;AACzB,MAAM,GAAG,GAAG,+BAA+B,CAAC;AAC5C,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACrF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC7D,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,CAAY,EAAE,CAAY;IACvD,OAAO,CACL,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC5D,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC;QAC1C,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,IAAY;IACxD,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CACd,kBAAkB,CAAC;YACjB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI;YACd,IAAI;YACJ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,mBAAmB,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,gCAAgC;YACrF,WAAW,EAAE,0EAA0E;SACxF,CAAC,CACH,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,IAAI,KAAK,aAAa;oBAC7B,OAAO,EAAE,eAAe,MAAM,CAAC,UAAU,aAAa,KAAK,kBAAkB,KAAK,GAAG;oBACrF,WAAW,EAAE,6EAA6E;iBAC3F,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;AAChE,CAAC;AAQD,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;IAChC,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,KAAa,EAAE,QAAmB;IACpE,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,IAAI,KAAK,EAAE;YAClB,OAAO,EAAE,kBAAkB,KAAK,OAAO,QAAQ,CAAC,KAAK,CAAC,qBAAqB;YAC3E,WAAW,EAAE,4DAA4D;SAC1E,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,WAAmB,EAAE,EAAE,CACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAE1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CACL,GAAG,EACH,cAAc,KAAK,0BAA0B,GAAG,KAAK,EACrD,6FAA6F,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CACL,GAAG,EACH,cAAc,KAAK,aAAa,GAAG,KAAK,EACxC,SAAS,GAAG,8CAA8C,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,GAAG,CAC5I,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,IAAY,EAAE,WAAmB,EAAsB,EAAE;QACnG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,oBAAoB,KAAK,YAAY,IAAI,eAAe,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC9G,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CACrB,YAAY,EACZ,QAAQ,EACR,mCAAmC,EACnC,yEAAyE,CAC1E,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,CACzB,gBAAgB,EAChB,UAAU,EACV,4BAA4B,EAC5B,sEAAsE,CACvE,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CACjB,QAAQ,EACR,QAAQ,EACR,+BAA+B,EAC/B,oDAAoD,CACrD,CAAC;IACF,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,CACtB,aAAa,EACb,IAAI,EACJ,oBAAoB,EACpB,gEAAgE,CACjE,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,4DAA4D,CAAC,CAAC;IAClH,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAEjE,IAAI,MAA6B,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnC,IAAK,WAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;;YAEjG,OAAO,CACL,QAAQ,EACR,4BAA4B,KAAK,iDAAiD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAC3G,0EAA0E,CAC3E,CAAC;IACN,CAAC;IAED,IAAI,SAA6B,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;QACtC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;;YAEjG,OAAO,CACL,WAAW,EACX,+BAA+B,KAAK,0CAA0C,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAC1G,mFAAmF,CACpF,CAAC;IACN,CAAC;IAED,IAAI,UAA+C,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CACL,YAAY,EACZ,gCAAgC,KAAK,qBAAqB,EAC1D,2CAA2C,CAC5C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;wBACjD,OAAO,EAAE,mBAAmB,GAAG,oBAAoB,KAAK,qBAAqB;wBAC7E,WAAW,EAAE,sEAAsE;qBACpF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC7E,OAAO,CACL,MAAM,EACN,cAAc,KAAK,sFAAsF,EACzG,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;QAClG,OAAO,CACL,WAAW,EACX,qBAAqB,KAAK,OAAO,QAAQ,sBAAsB,EAC/D,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IACD,IACE,SAAS,KAAK,SAAS;QACvB,UAAU,KAAK,SAAS;QACxB,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAC3D,CAAC;QACD,OAAO,CACL,YAAY,EACZ,cAAc,KAAK,gBAAgB,UAAU,0BAA0B,SAAS,GAAG,EACnF,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAc;QACxB,UAAU,EAAE,UAAoB;QAChC,cAAc,EAAE,cAAwB;QACxC,MAAM,EAAE,MAAgB;QACxB,SAAS,EAAE,SAAmB;QAC9B,WAAW,EAAE,WAAqB;QAClC,KAAK,EAAE,KAAiB;QACxB,IAAI,EAAE,IAAsB;QAC5B,QAAQ,EAAE,QAAyB;QACnC,SAAS,EAAE,SAAmB;QAC9B,UAAU,EAAE,UAAoB;QAChC,MAAM,EAAE,MAAmB;QAC3B,GAAG,EAAE,GAAa;KACnB,CAAC;IACF,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1D,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC7D,OAAO,MAAM,CAAC;AAChB,CAAC;AAID,SAAS,aAAa,CAAC,KAA8B,EAAE,OAAe,EAAE,KAAa;IACnF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7F,OAAO,CACL,WAAW,EACX,+BAA+B,KAAK,mDAAmD,QAAQ,CAAC,KAAK,CAAC,GAAG,EACzG,sGAAsG,CACvG,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAA8B,EAAE,GAAW,EAAE,OAAe,EAAE,KAAa;IAC3F,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,CACL,GAAG,EACH,KAAK,GAAG,oBAAoB,KAAK,oEAAoE,QAAQ,CAAC,KAAK,CAAC,GAAG,EACvH,2EAA2E,CAC5E,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAA8B,EAAE,OAAe,EAAE,KAAa;IAClF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC7B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,CACL,UAAU,EACV,8BAA8B,KAAK,qDAAqD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAC1G,+EAA+E,CAChF,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAChB,KAA8B,EAC9B,EAA2B,EAC3B,QAAmB,EACnB,KAAa;IAEb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC;YAClB,OAAO,EAAE,2BAA2B,KAAK,0DAA0D,QAAQ,CAAC,KAAK,CAAC,GAAG;YACrH,WAAW,EAAE,kEAAkE;SAChF,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBAC5C,OAAO,EAAE,2BAA2B,KAAK,0BAA0B,GAAG,KAAK;gBAC3E,WAAW,EAAE,yDAAyD;aACvE,CAAC,CAAC;YACH,EAAE,GAAG,KAAK,CAAC;QACb,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzE,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU;YAC/B,OAAO,EAAE,mCAAmC,KAAK,oCAAoC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;YAC/G,WAAW,EAAE,iDAAiD;SAC/D,CAAC,CAAC;QACH,EAAE,GAAG,KAAK,CAAC;IACb,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU;YAC/B,OAAO,EAAE,mCAAmC,KAAK,uCAAuC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;YAClH,WAAW,EAAE,iEAAiE;SAC/E,CAAC,CAAC;QACH,EAAE,GAAG,KAAK,CAAC;IACb,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjG,CAAC;AAED,SAAS,QAAQ,CACf,KAA8B,EAC9B,EAA2B,EAC3B,QAAmB,EACnB,KAAa;IAEb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,0BAA0B,KAAK,gEAAgE,QAAQ,CAAC,KAAK,CAAC,GAAG;YAC1H,WAAW,EAAE,qFAAqF;SACnG,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,GAAG,IAAI,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAC1D,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBAC3C,OAAO,EAAE,0BAA0B,KAAK,0BAA0B,GAAG,KAAK;gBAC1E,WAAW,EAAE,kDAAkD;aAChE,CAAC,CAAC;YACH,EAAE,GAAG,KAAK,CAAC;QACb,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAU,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;gBAC7B,OAAO,EAAE,UAAU,GAAG,oBAAoB,KAAK,0CAA0C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG;gBAChH,WAAW,EAAE,qBAAqB,GAAG,GAAG;aACzC,CAAC,CAAC;YACH,EAAE,GAAG,KAAK,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjH,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IAClD,OAAO,OAAO,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CA4B3F"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAgC3F"}
package/dist/report.js CHANGED
@@ -6,10 +6,14 @@ export function evidenceReport(check, records) {
6
6
  graphHash: classification.snapshot.graphHash,
7
7
  scope: classification.snapshot.scope,
8
8
  records,
9
+ binding: classification.snapshot.binding,
10
+ bindingReason: classification.snapshot.bindingReason,
9
11
  verifications: Object.values(classification.verifications).map((v) => ({
10
12
  id: v.verificationId,
11
13
  method: v.method,
12
14
  status: v.status,
15
+ binding: v.binding,
16
+ subject: v.subject,
13
17
  note: v.note ?? null,
14
18
  latest: v.latest,
15
19
  atSnapshot: { ...v.atSnapshot },
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAUA,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,OAAe;IAClE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;QACtC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,SAAS;QAC5C,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK;QACpC,OAAO;QACP,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,EAAE,EAAE,CAAC,CAAC,cAAc;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE;YAC/B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;QACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAUA,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,KAAoB,EAAE,OAAe;IAClE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;QACtC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,SAAS;QAC5C,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK;QACpC,OAAO;QACP,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO;QACxC,aAAa,EAAE,cAAc,CAAC,QAAQ,CAAC,aAAa;QACpD,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,EAAE,EAAE,CAAC,CAAC,cAAc;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE;YAC/B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;QACH,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * What needs a run (ADR 0013, "Slow suites"): the automated verifications
3
+ * whose evidence at the snapshot is not a current pass, grouped for a person
4
+ * and written as the arguments a test runner takes to run just those tests.
5
+ * Selection reads a classification and changes nothing; the runner formats are
6
+ * strings and know nothing of the repository.
7
+ *
8
+ * A selector is matched by Intentset as a whole token (`selectorMatches`); a
9
+ * runner's own `--grep` or `-t` is a regular expression that matches a
10
+ * substring of a title. The arguments here therefore select every test the
11
+ * token rule would, and possibly a few more (a selector that is a prefix of
12
+ * another's), never fewer.
13
+ */
14
+ import type { Graph } from "@intentset/core";
15
+ import { type Classification, type EvidenceStatus } from "./classify.ts";
16
+ /** The statuses that mean a run is needed: everything but a current pass. */
17
+ export declare const NEEDS_RUN: ("current-fail" | "error" | "missing" | "skip" | "stale" | "unresolved")[];
18
+ export type NeedsRun = Exclude<EvidenceStatus, "current-pass">;
19
+ export interface StaleEntry {
20
+ verification: string;
21
+ selector: string;
22
+ locator: string;
23
+ status: NeedsRun;
24
+ /** The note that names what moved, for the statuses where it says something a reader needs. */
25
+ note?: string;
26
+ }
27
+ export interface ManualEntry {
28
+ verification: string;
29
+ locator: string;
30
+ status: NeedsRun;
31
+ note?: string;
32
+ }
33
+ export interface StaleCounts {
34
+ /** Automated verifications that are not retired. */
35
+ automated: number;
36
+ /** Of those, the ones with a current pass. */
37
+ current: number;
38
+ /** Of those, the ones that need a run: the sum of `byStatus`. */
39
+ needRun: number;
40
+ byStatus: Record<NeedsRun, number>;
41
+ /** Manual verifications without a current review, which no runner re-runs. */
42
+ manual: number;
43
+ }
44
+ export interface StaleReport {
45
+ needRun: StaleEntry[];
46
+ manual: ManualEntry[];
47
+ counts: StaleCounts;
48
+ }
49
+ /** Every verification that is not retired, split by method, with those not currently passing listed and counted. */
50
+ export declare function staleReport(graph: Graph, classification: Classification): StaleReport;
51
+ /** "3 of 12 automated verifications need a run: stale 2, missing 1." */
52
+ export declare function staleSummary(counts: StaleCounts): string;
53
+ export declare const RUNNER_FORMATS: readonly ["playwright", "vitest", "node-test"];
54
+ export type RunnerFormat = (typeof RUNNER_FORMATS)[number];
55
+ /** A string as a JavaScript regular expression matching it literally; `/` is escaped so a pattern never reads as `/re/flags`. */
56
+ export declare function escapeRegExp(text: string): string;
57
+ /** One word for a POSIX shell: as it is when nothing in it is special, else in single quotes with each `'` closed, escaped and reopened. */
58
+ export declare function shellQuote(text: string): string;
59
+ /**
60
+ * The arguments that run just these tests, on one line to paste after the runner's own command (`playwright test`,
61
+ * `vitest run`, `node --test`). Empty when there is nothing to run. Selectors are sorted and unique; the locator
62
+ * files are the ones the entries name.
63
+ */
64
+ export declare function runnerArguments(format: RunnerFormat, entries: readonly Pick<StaleEntry, "selector" | "locator">[]): string;
65
+ //# sourceMappingURL=stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.d.ts","sourceRoot":"","sources":["../src/stale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAqB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAG5F,6EAA6E;AAC7E,eAAO,MAAM,SAAS,4EAAkE,CAAC;AACzF,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB;AAKD,oHAAoH;AACpH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAG,WAAW,CAuCrF;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CASxD;AAED,eAAO,MAAM,cAAc,YAAI,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAC7E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,iIAAiI;AACjI,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AASD,4IAA4I;AAC5I,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,EAAE,GAC3D,MAAM,CAgBR"}
package/dist/stale.js ADDED
@@ -0,0 +1,95 @@
1
+ import { EVIDENCE_STATUSES } from "./classify.js";
2
+ import { compareStrings } from "./diagnostic.js";
3
+ /** The statuses that mean a run is needed: everything but a current pass. */
4
+ export const NEEDS_RUN = EVIDENCE_STATUSES.filter((status) => status !== "current-pass");
5
+ /** The statuses whose note says why or what moved; for the others the note only says how a pass was judged. */
6
+ const NOTED = new Set(["stale", "missing", "unresolved"]);
7
+ /** Every verification that is not retired, split by method, with those not currently passing listed and counted. */
8
+ export function staleReport(graph, classification) {
9
+ const needRun = [];
10
+ const manual = [];
11
+ const byStatus = Object.fromEntries(NEEDS_RUN.map((status) => [status, 0]));
12
+ let automated = 0;
13
+ for (const [id, evidence] of Object.entries(classification.verifications)) {
14
+ const meta = graph.artifacts.get(id)?.meta;
15
+ if (meta?.type !== "verification" || meta.status === "retired" || meta.verification === undefined)
16
+ continue;
17
+ const { locator, selector } = meta.verification;
18
+ const note = NOTED.has(evidence.status) && evidence.note !== undefined ? { note: evidence.note } : {};
19
+ if (meta.verification.method === "manual") {
20
+ if (evidence.status !== "current-pass") {
21
+ manual.push({ verification: id, locator, status: evidence.status, ...note });
22
+ }
23
+ continue;
24
+ }
25
+ automated++;
26
+ if (evidence.status === "current-pass")
27
+ continue;
28
+ byStatus[evidence.status]++;
29
+ needRun.push({ verification: id, selector, locator, status: evidence.status, ...note });
30
+ }
31
+ needRun.sort((a, b) => compareStrings(a.locator, b.locator) ||
32
+ compareStrings(a.selector, b.selector) ||
33
+ compareStrings(a.verification, b.verification));
34
+ manual.sort((a, b) => compareStrings(a.locator, b.locator) || compareStrings(a.verification, b.verification));
35
+ return {
36
+ needRun,
37
+ manual,
38
+ counts: {
39
+ automated,
40
+ current: automated - needRun.length,
41
+ needRun: needRun.length,
42
+ byStatus,
43
+ manual: manual.length,
44
+ },
45
+ };
46
+ }
47
+ /** "3 of 12 automated verifications need a run: stale 2, missing 1." */
48
+ export function staleSummary(counts) {
49
+ const parts = NEEDS_RUN.filter((status) => counts.byStatus[status] > 0).map((status) => `${status} ${counts.byStatus[status]}`);
50
+ const manual = counts.manual === 0
51
+ ? ""
52
+ : ` ${counts.manual} manual verification${counts.manual === 1 ? " has" : "s have"} no current review, which a runner does not re-run.`;
53
+ return `${counts.needRun} of ${counts.automated} automated verification${counts.automated === 1 ? "" : "s"} need a run${parts.length === 0 ? "" : `: ${parts.join(", ")}`}.${manual}`;
54
+ }
55
+ export const RUNNER_FORMATS = ["playwright", "vitest", "node-test"];
56
+ /** A string as a JavaScript regular expression matching it literally; `/` is escaped so a pattern never reads as `/re/flags`. */
57
+ export function escapeRegExp(text) {
58
+ return text.replace(/[\\^$.*+?()[\]{}|/]/g, "\\$&");
59
+ }
60
+ /** The same, for a file filter that is a regular expression but reads as a path: a dot stays a dot, which only matches more. */
61
+ function pathPattern(path) {
62
+ return path.replace(/[\\^$*+?()[\]{}|]/g, "\\$&");
63
+ }
64
+ const PLAIN = /^[A-Za-z0-9_@%+=:,./-]+$/;
65
+ /** One word for a POSIX shell: as it is when nothing in it is special, else in single quotes with each `'` closed, escaped and reopened. */
66
+ export function shellQuote(text) {
67
+ if (PLAIN.test(text))
68
+ return text;
69
+ return `'${text.replaceAll("'", "'\\''")}'`;
70
+ }
71
+ const unique = (values) => [...new Set(values)].sort(compareStrings);
72
+ /**
73
+ * The arguments that run just these tests, on one line to paste after the runner's own command (`playwright test`,
74
+ * `vitest run`, `node --test`). Empty when there is nothing to run. Selectors are sorted and unique; the locator
75
+ * files are the ones the entries name.
76
+ */
77
+ export function runnerArguments(format, entries) {
78
+ if (entries.length === 0)
79
+ return "";
80
+ const selectors = unique(entries.map((entry) => entry.selector));
81
+ const files = unique(entries.map((entry) => entry.locator));
82
+ const alternation = selectors.map(escapeRegExp).join("|");
83
+ switch (format) {
84
+ case "playwright":
85
+ return ["--grep", shellQuote(alternation), ...files.map((file) => shellQuote(pathPattern(file)))].join(" ");
86
+ case "vitest":
87
+ return [...files.map(shellQuote), "-t", shellQuote(alternation)].join(" ");
88
+ case "node-test":
89
+ return [
90
+ ...selectors.map((selector) => `--test-name-pattern=${shellQuote(escapeRegExp(selector))}`),
91
+ ...files.map(shellQuote),
92
+ ].join(" ");
93
+ }
94
+ }
95
+ //# sourceMappingURL=stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.js","sourceRoot":"","sources":["../src/stale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * The subject of a verification (Core §8, ADR 0013): a hash of what the check
3
+ * is about, so a run record can stay current while the subject is unchanged.
4
+ * Pure: it reads nothing but what it is given, so the same inputs give the
5
+ * same hash on every machine.
6
+ *
7
+ * The subject is:
8
+ *
9
+ * - the verification record and what it verifies (each verified behavior, the
10
+ * rules that govern it and the scenarios that illustrate it), each by the
11
+ * source hash of its whole record: its prose is its promise;
12
+ * - the slices that implement the verified behaviors, the transitive closure
13
+ * of their `dependsOn`, and those the verification names in
14
+ * `verification.exercises`: each by the hash of its **binding fields**
15
+ * (`implements`, `dependsOn`, `claims`, `usesResources`, `entrypoints`;
16
+ * never its prose) and the content of every file its claims resolve to;
17
+ * - the resources those slices use, and any resource `exercises` names: each
18
+ * by its registry entry and the content of the files its path matches;
19
+ * - the test file (`locator`) and the local files it imports, transitively,
20
+ * which the caller resolves (`localImports`) with the architecture
21
+ * package's resolver and stops at a package boundary;
22
+ * - the repository's global inputs, which the caller has expanded to paths.
23
+ *
24
+ * The slices' and resources' files are resolved by the architecture package
25
+ * and passed in, so this package does not depend on it. The hash is the
26
+ * SHA-256 of the canonical JSON of the sorted entries (ADR 0005), like
27
+ * `graphHash`; a file is its content's SHA-256, a missing one the word
28
+ * `absent`, so a deleted file moves the subject. `parts` carries each entry,
29
+ * so a report can say which part moved (`movedParts`).
30
+ */
31
+ import { type Graph } from "@intentset/core";
32
+ export declare const SUBJECT_PART_KINDS: readonly ["verification", "verified", "slice", "slice-file", "resource", "resource-file", "test", "test-import", "global-input"];
33
+ export type SubjectPartKind = (typeof SUBJECT_PART_KINDS)[number];
34
+ /** One thing that went into the hash: `id` is a record ID or a path, `hash` its content or source hash. */
35
+ export interface SubjectPart {
36
+ kind: SubjectPartKind;
37
+ id: string;
38
+ hash: string;
39
+ /** For a slice or a resource: why it is included (`implements`, `dependsOn`, `exercises`, `usesResources`; sorted, joined by a comma). */
40
+ why?: string;
41
+ /** For a slice file or a resource file: the slice or resource it belongs to. */
42
+ owner?: string;
43
+ /** The repository-relative file the part is, or the record's file: what a `git diff` names when the part moves. */
44
+ path?: string;
45
+ }
46
+ export interface Subject {
47
+ hash: string;
48
+ /** Sorted by kind, then ID. */
49
+ parts: SubjectPart[];
50
+ }
51
+ /** A registry resource as the subject sees it: its record, and the files its path matches. */
52
+ export interface SubjectResource {
53
+ record: unknown;
54
+ files: readonly string[];
55
+ }
56
+ export interface SubjectInput {
57
+ graph: Graph;
58
+ verificationId: string;
59
+ /** Repository-relative path to its bytes; undefined when the file does not exist. */
60
+ readFile: (path: string) => Uint8Array | undefined;
61
+ /** A memoized hash of a file's content (or `absent`), for a caller hashing many subjects; default: hash `readFile`. */
62
+ fileHash?: (path: string) => string;
63
+ /** Slice ID to the repository-relative files it claims, as the architecture package resolves them. */
64
+ sliceFiles: ReadonlyMap<string, readonly string[]> | Readonly<Record<string, readonly string[]>>;
65
+ /** Registry resource ID to its record and files; absent means the repository declares none. */
66
+ resources?: ReadonlyMap<string, SubjectResource>;
67
+ /** The local files a file imports, transitively and without the file itself, stopping at a package boundary. */
68
+ localImports?: (path: string) => readonly string[];
69
+ /** Files whose change affects every check and that belong to no slice (`evidence.globalInputs`), as paths. */
70
+ globalInputs: readonly string[];
71
+ }
72
+ /** What a missing file hashes as, so a deleted file moves the subject and is told apart from an empty one. */
73
+ export declare const ABSENT = "absent";
74
+ /** The verification's `verification.exercises`, or none. */
75
+ export declare function exercisesOf(graph: Graph, id: string): string[];
76
+ /** The behaviors a verification is about: those it verifies, those governed by a rule it verifies, those a scenario it verifies illustrates. */
77
+ export declare function verifiedBehaviors(graph: Graph, verificationId: string): string[];
78
+ /** The slices a subject includes, each with why: implementers, their `dependsOn` closure, and the exercised slices. */
79
+ export declare function includedSlices(graph: Graph, verificationId: string): Map<string, string>;
80
+ /** The binding fields of a slice record, canonical: what the subject hashes of it instead of the whole record. */
81
+ export declare function sliceBinding(graph: Graph, id: string): unknown;
82
+ export declare function computeSubject(input: SubjectInput): Subject;
83
+ /** The parts that differ between two subjects, as `kind id` keys, sorted: added, removed or changed. */
84
+ export declare function movedParts(before: Subject, after: Subject): string[];
85
+ /**
86
+ * The parts of a subject whose file or record is among `changed`: what a
87
+ * `git diff --name-only` since a record's commit says may have moved. A record
88
+ * file that changed only in prose is named too, since the diff cannot tell it
89
+ * from a change to a binding field; the hash decided the subject moved.
90
+ */
91
+ export declare function partsChangedAmong(subject: Subject, changed: ReadonlySet<string>): string[];
92
+ //# sourceMappingURL=subject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../src/subject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAiB,KAAK,KAAK,EAAa,MAAM,iBAAiB,CAAC;AAEvE,eAAO,MAAM,kBAAkB,YAC7B,cAAc,EACd,UAAU,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EACV,eAAe,EACf,MAAM,EACN,aAAa,EACb,cAAc,CACN,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,2GAA2G;AAC3G,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,0IAA0I;IAC1I,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mHAAmH;IACnH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACnD,uHAAuH;IACvH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sGAAsG;IACtG,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IACjG,+FAA+F;IAC/F,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,gHAAgH;IAChH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IACnD,8GAA8G;IAC9G,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED,8GAA8G;AAC9G,eAAO,MAAM,MAAM,WAAW,CAAC;AAI/B,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAG9D;AAED,gJAAgJ;AAChJ,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAchF;AAED,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BxF;AAED,kHAAkH;AAClH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAe9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAyF3D;AAID,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAK1F"}