foottrace 1.2.0 → 1.4.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/README.md +32 -71
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/lib/cause/explain.js +7 -7
- package/dist/esm/lib/cause/queryMemo.d.ts +18 -0
- package/dist/esm/lib/cause/queryMemo.js +46 -0
- package/dist/esm/lib/cause/recordAdapter.js +12 -19
- package/dist/esm/lib/cause/recordChildren.d.ts +3 -3
- package/dist/esm/lib/cause/recordChildren.js +3 -4
- package/dist/esm/lib/cause/recordCoverage.d.ts +2 -2
- package/dist/esm/lib/cause/recordCoverage.js +1 -1
- package/dist/esm/lib/cause/recordIdentity.js +5 -5
- package/dist/esm/lib/cause/recordLoading.js +3 -3
- package/dist/esm/lib/cause/recordQuery.d.ts +9 -0
- package/dist/esm/lib/cause/recordQuery.js +22 -0
- package/dist/esm/lib/cause/recordScope.js +13 -13
- package/dist/esm/lib/cause/recordValidation.d.ts +4 -4
- package/dist/esm/lib/cause/recordValidation.js +17 -17
- package/dist/esm/lib/cause/session.js +9 -6
- package/dist/esm/lib/cause/storedRecordAdapter.js +16 -10
- package/dist/esm/lib/cause/types.d.ts +2 -1
- package/dist/esm/lib/cause/validation.d.ts +4 -4
- package/dist/esm/lib/cause/validation.js +19 -36
- package/dist/esm/lib/{cause → evidence}/admission.d.ts +5 -1
- package/dist/esm/lib/{cause → evidence}/admission.js +14 -1
- package/dist/esm/lib/evidence/codes.d.ts +33 -0
- package/dist/esm/lib/evidence/codes.js +28 -0
- package/dist/esm/lib/evidence/requirementTypes.d.ts +46 -0
- package/dist/esm/lib/evidence/requirementTypes.js +1 -0
- package/dist/esm/lib/evidence/requirements.d.ts +24 -0
- package/dist/esm/lib/evidence/requirements.js +185 -0
- package/dist/index.js +5 -1
- package/dist/lib/cause/explain.js +6 -6
- package/dist/lib/cause/queryMemo.js +52 -0
- package/dist/lib/cause/recordAdapter.js +10 -17
- package/dist/lib/cause/recordChildren.js +3 -4
- package/dist/lib/cause/recordCoverage.js +1 -1
- package/dist/lib/cause/recordIdentity.js +4 -4
- package/dist/lib/cause/recordLoading.js +2 -2
- package/dist/lib/cause/recordQuery.js +27 -0
- package/dist/lib/cause/recordScope.js +12 -12
- package/dist/lib/cause/recordValidation.js +21 -21
- package/dist/lib/cause/session.js +8 -5
- package/dist/lib/cause/storedRecordAdapter.js +15 -9
- package/dist/lib/cause/validation.js +23 -40
- package/dist/lib/{cause → evidence}/admission.js +14 -1
- package/dist/lib/evidence/codes.js +33 -0
- package/dist/lib/evidence/requirementTypes.js +2 -0
- package/dist/lib/evidence/requirements.js +190 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/lib/cause/queryMemo.d.ts +18 -0
- package/dist/types/lib/cause/recordChildren.d.ts +3 -3
- package/dist/types/lib/cause/recordCoverage.d.ts +2 -2
- package/dist/types/lib/cause/recordQuery.d.ts +9 -0
- package/dist/types/lib/cause/recordValidation.d.ts +4 -4
- package/dist/types/lib/cause/types.d.ts +2 -1
- package/dist/types/lib/cause/validation.d.ts +4 -4
- package/dist/types/lib/{cause → evidence}/admission.d.ts +5 -1
- package/dist/types/lib/evidence/codes.d.ts +33 -0
- package/dist/types/lib/evidence/requirementTypes.d.ts +46 -0
- package/dist/types/lib/evidence/requirements.d.ts +24 -0
- package/package.json +7 -3
- /package/dist/esm/lib/cause/{recordParents.d.ts → recordInspection.d.ts} +0 -0
- /package/dist/esm/lib/cause/{recordParents.js → recordInspection.js} +0 -0
- /package/dist/lib/cause/{recordParents.js → recordInspection.js} +0 -0
- /package/dist/types/lib/cause/{recordParents.d.ts → recordInspection.d.ts} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** One vocabulary; true marks a domain evidence reason, false a trace/admission gap only. */
|
|
2
|
+
export declare const GAP_CODES: Readonly<{
|
|
3
|
+
readonly 'not-collected': true;
|
|
4
|
+
readonly 'untracked-input': false;
|
|
5
|
+
readonly redacted: true;
|
|
6
|
+
readonly conservative: false;
|
|
7
|
+
readonly 'scope-boundary': false;
|
|
8
|
+
readonly 'invalid-data': true;
|
|
9
|
+
readonly unavailable: true;
|
|
10
|
+
readonly timeout: true;
|
|
11
|
+
readonly cancelled: false;
|
|
12
|
+
readonly cycle: false;
|
|
13
|
+
readonly 'node-limit': false;
|
|
14
|
+
readonly 'depth-limit': false;
|
|
15
|
+
readonly 'edge-limit': false;
|
|
16
|
+
readonly 'call-limit': false;
|
|
17
|
+
readonly truncated: false;
|
|
18
|
+
readonly 'strategy-failed': false;
|
|
19
|
+
readonly 'not-checked': true;
|
|
20
|
+
readonly 'no-match': true;
|
|
21
|
+
readonly ambiguous: true;
|
|
22
|
+
readonly stale: true;
|
|
23
|
+
readonly incompatible: true;
|
|
24
|
+
readonly unsupported: true;
|
|
25
|
+
readonly 'not-permitted': true;
|
|
26
|
+
}>;
|
|
27
|
+
export type GapCode = keyof typeof GAP_CODES;
|
|
28
|
+
/** Producer-asserted evidence reasons, excluding traversal and admission bounds. */
|
|
29
|
+
export type RequirementReason = {
|
|
30
|
+
[Code in GapCode]: (typeof GAP_CODES)[Code] extends true ? Code : never;
|
|
31
|
+
}[GapCode];
|
|
32
|
+
export declare const isGapCode: (value: unknown) => value is "not-collected" | "untracked-input" | "redacted" | "conservative" | "scope-boundary" | "invalid-data" | "unavailable" | "timeout" | "cancelled" | "cycle" | "node-limit" | "depth-limit" | "edge-limit" | "call-limit" | "truncated" | "strategy-failed" | "not-checked" | "no-match" | "ambiguous" | "stale" | "incompatible" | "unsupported" | "not-permitted";
|
|
33
|
+
export declare const isRequirementReason: (value: unknown) => value is RequirementReason;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { RequirementReason } from './codes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Existing check wire words; a disposition records a producer assertion, not authorization.
|
|
4
|
+
* `unreachable` means the check could not run; its reason identifies why.
|
|
5
|
+
*/
|
|
6
|
+
export type RequirementCheckDisposition = 'checked-pass' | 'checked-fail' | 'unreachable' | 'not-applicable';
|
|
7
|
+
/** References to a real check and its retained evidence. No synthetic attempt is required or invented. */
|
|
8
|
+
export interface RequirementCheck {
|
|
9
|
+
readonly checkRef: string;
|
|
10
|
+
readonly disposition: RequirementCheckDisposition;
|
|
11
|
+
readonly reason?: RequirementReason;
|
|
12
|
+
/** A namespaced adapter detail ID, never a message, subject or payload. */
|
|
13
|
+
readonly detail?: string;
|
|
14
|
+
readonly evidenceRefs: readonly string[];
|
|
15
|
+
readonly attemptRefs: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
interface RequirementBinding {
|
|
18
|
+
/** This result's identity, not the enclosing artifact reference minted by storage. */
|
|
19
|
+
readonly id: string;
|
|
20
|
+
/** Reference to the requirement definition or policy. */
|
|
21
|
+
readonly requirementRef: string;
|
|
22
|
+
readonly findingRef: string;
|
|
23
|
+
readonly windowRef: string;
|
|
24
|
+
readonly affects: readonly string[];
|
|
25
|
+
readonly evidenceRefs: readonly string[];
|
|
26
|
+
readonly checks: readonly RequirementCheck[];
|
|
27
|
+
/** References into a host-owned closed action registry; never executable tool names or arguments. */
|
|
28
|
+
readonly actionRefs: readonly string[];
|
|
29
|
+
/** A namespaced adapter detail ID, never a message, subject or payload. */
|
|
30
|
+
readonly detail?: string;
|
|
31
|
+
/** Source validity and learned time are separate opaque references; no freshness inference is made. */
|
|
32
|
+
readonly validTimeRef?: string;
|
|
33
|
+
readonly learnedTimeRef?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A producer assertion. Structural admission does not verify its source, scope, bindings, validity or truth.
|
|
37
|
+
* Hosts must verify those facts and must not let a satisfied record override an unresolved affected claim.
|
|
38
|
+
*/
|
|
39
|
+
export type RequirementResult = RequirementBinding & ({
|
|
40
|
+
readonly state: 'satisfied';
|
|
41
|
+
readonly reason?: never;
|
|
42
|
+
} | {
|
|
43
|
+
readonly state: 'unresolved';
|
|
44
|
+
readonly reason: RequirementReason;
|
|
45
|
+
});
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EvidenceRefusal } from './admission.js';
|
|
2
|
+
import { type GapCode } from './codes.js';
|
|
3
|
+
import type { RequirementResult } from './requirementTypes.js';
|
|
4
|
+
/** Fixed per-call ceilings; characters are UTF-16 code units, not serialized transport bytes. */
|
|
5
|
+
export declare const REQUIREMENT_RESULT_LIMITS: Readonly<{
|
|
6
|
+
results: 512;
|
|
7
|
+
checks: 16;
|
|
8
|
+
affects: 32;
|
|
9
|
+
refs: 16;
|
|
10
|
+
name: 512;
|
|
11
|
+
fields: 32768;
|
|
12
|
+
characters: 1048576;
|
|
13
|
+
}>;
|
|
14
|
+
/** No input, field value or originating exception is retained on a refusal. */
|
|
15
|
+
export declare class RequirementValidationError extends EvidenceRefusal {
|
|
16
|
+
constructor(code?: GapCode);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Atomically project detached, frozen reference-only records. This is structural admission only.
|
|
20
|
+
* The host must authenticate producers, resolve authorized artifacts, verify current query/run/scope and
|
|
21
|
+
* domain validity, and enforce every unresolved affects reference before rendering any factual claim.
|
|
22
|
+
* Identifier grammar does not classify secrets; producers must supply non-secret identifiers only.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readRequirementResults(value: unknown): readonly RequirementResult[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "foottrace",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "Execution records, replay, time travel and honest attribution \u2014 independent of the engine that produced them",
|
|
6
6
|
"license": "MIT",
|
|
@@ -59,6 +59,10 @@
|
|
|
59
59
|
"import": {
|
|
60
60
|
"types": "./dist/esm/cause.d.ts",
|
|
61
61
|
"default": "./dist/esm/cause.js"
|
|
62
|
+
},
|
|
63
|
+
"require": {
|
|
64
|
+
"types": "./dist/types/cause.d.ts",
|
|
65
|
+
"default": "./dist/cause.js"
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
},
|
|
@@ -71,7 +75,7 @@
|
|
|
71
75
|
"dist/types/paths.d.ts"
|
|
72
76
|
],
|
|
73
77
|
"cause": [
|
|
74
|
-
"dist/
|
|
78
|
+
"dist/types/cause.d.ts"
|
|
75
79
|
]
|
|
76
80
|
}
|
|
77
81
|
},
|
|
@@ -81,7 +85,7 @@
|
|
|
81
85
|
"test:coverage": "vitest run --coverage",
|
|
82
86
|
"typecheck": "tsc -p tsconfig.test.json",
|
|
83
87
|
"check:layering": "node scripts/check-layering.mjs",
|
|
84
|
-
"check:package": "publint && attw --pack --
|
|
88
|
+
"check:package": "publint && attw --pack --profile strict && tsc -p test/consumer/cause/tsconfig.json",
|
|
85
89
|
"lint": "eslint 'src/**/*.ts'",
|
|
86
90
|
"format": "prettier --check 'src/**/*.ts' 'test/**/*.ts'",
|
|
87
91
|
"test:examples": "tsc -p examples/tsconfig.json",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|