tamperward 2.37.1 → 2.38.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/dist/cli/index.js +1147 -190
- package/package.json +1 -1
- package/schemas/audit-v1.schema.json +1 -1
- package/schemas/check-v1.schema.json +1 -1
- package/schemas/doctor-v1.schema.json +1 -1
- package/schemas/receipt-v1.schema.json +90 -0
- package/schemas/reconcile-v1.schema.json +211 -0
- package/schemas/research-stdio-v1.schema.json +1 -1
- package/schemas/research-v1.schema.json +1 -1
- package/schemas/run-v1.schema.json +1 -1
- package/schemas/runtime-qualification-v1.schema.json +1 -1
- package/schemas/stats-v1.schema.json +1 -1
- package/schemas/status-v1.schema.json +1 -1
- package/schemas/verify-v1.schema.json +5 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tamperward",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.38.0",
|
|
4
4
|
"description": "The deterministic agent-integrity gate. One ruleset, evaluated on the actual diff/commands as a verdict, enforced everywhere a change can be made.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "hexrift",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/audit-v1.schema.json",
|
|
4
4
|
"title": "TamperWard audit event v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"additionalProperties": false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/check-v1.schema.json",
|
|
4
4
|
"title": "TamperWard check JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/doctor-v1.schema.json",
|
|
4
4
|
"title": "TamperWard doctor JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/receipt-v1.schema.json",
|
|
4
|
+
"title": "TamperWard local verification receipt v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"verdict",
|
|
9
|
+
"tw_version",
|
|
10
|
+
"verified_at",
|
|
11
|
+
"binding",
|
|
12
|
+
"stages",
|
|
13
|
+
"evidence_digest"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schema_version": {
|
|
17
|
+
"const": 1
|
|
18
|
+
},
|
|
19
|
+
"verdict": {
|
|
20
|
+
"const": "VERIFIED"
|
|
21
|
+
},
|
|
22
|
+
"tw_version": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"verified_at": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"binding": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"description": "The load-bearing verification identity, carried verbatim from the first-class verification record (#600). A receipt applies to CI only when every one of these matches the identity CI computes independently.",
|
|
31
|
+
"required": [
|
|
32
|
+
"tree",
|
|
33
|
+
"head",
|
|
34
|
+
"base",
|
|
35
|
+
"policy",
|
|
36
|
+
"verifier",
|
|
37
|
+
"surface",
|
|
38
|
+
"intervention",
|
|
39
|
+
"dependencies"
|
|
40
|
+
],
|
|
41
|
+
"properties": {
|
|
42
|
+
"tree": { "type": "string" },
|
|
43
|
+
"head": { "type": "string" },
|
|
44
|
+
"base": { "type": "string" },
|
|
45
|
+
"policy": { "type": "string" },
|
|
46
|
+
"verifier": { "type": "string" },
|
|
47
|
+
"surface": { "type": "string" },
|
|
48
|
+
"intervention": { "type": "string" },
|
|
49
|
+
"dependencies": { "type": "string" }
|
|
50
|
+
},
|
|
51
|
+
"additionalProperties": true
|
|
52
|
+
},
|
|
53
|
+
"stages": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"required": ["candidate", "pristine", "integrity"],
|
|
56
|
+
"properties": {
|
|
57
|
+
"candidate": { "enum": ["PASS", "FAIL"] },
|
|
58
|
+
"pristine": { "enum": ["PASS", "FAIL"] },
|
|
59
|
+
"integrity": { "enum": ["CLEAN", "CHANGED"] }
|
|
60
|
+
},
|
|
61
|
+
"additionalProperties": true
|
|
62
|
+
},
|
|
63
|
+
"evidence_digest": {
|
|
64
|
+
"type": "string",
|
|
65
|
+
"description": "sha256 over the canonical {schema_version, verdict, binding, stages}. A consumer recomputes it to detect an internally-inconsistent (tampered) receipt; it is not a substitute for CI's independent identity check."
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"additionalProperties": true,
|
|
69
|
+
"description": "Emitted by `tamperward verify` after a genuine VERIFIED local adjudication and by `tamperward receipt export` (#601). A bounded, non-sensitive projection of the first-class verification record (#600): fixed-width digests and commit ids, closed-enum stage results, a verdict and a timestamp — never prompt text, source, command bodies, secrets/environment, absolute local paths or logs. The receipt is EVIDENCE, not authority: CI reruns verification independently and reconciles the claim (see reconcile-v1.schema.json). Additive within schema major 1.",
|
|
70
|
+
"examples": [
|
|
71
|
+
{
|
|
72
|
+
"schema_version": 1,
|
|
73
|
+
"verdict": "VERIFIED",
|
|
74
|
+
"tw_version": "2.38.0",
|
|
75
|
+
"verified_at": "2026-09-23T12:00:00.000Z",
|
|
76
|
+
"binding": {
|
|
77
|
+
"tree": "0123456789abcdef",
|
|
78
|
+
"head": "8ef12c1aaa0000000000000000000000000000aa",
|
|
79
|
+
"base": "8ef12c1aaa0000000000000000000000000000aa",
|
|
80
|
+
"policy": "aaaa",
|
|
81
|
+
"verifier": "bbbb",
|
|
82
|
+
"surface": "cccc",
|
|
83
|
+
"intervention": "dddd",
|
|
84
|
+
"dependencies": "eeee"
|
|
85
|
+
},
|
|
86
|
+
"stages": { "candidate": "PASS", "pristine": "PASS", "integrity": "CLEAN" },
|
|
87
|
+
"evidence_digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/reconcile-v1.schema.json",
|
|
4
|
+
"title": "TamperWard receipt reconciliation v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"command",
|
|
9
|
+
"result",
|
|
10
|
+
"ci",
|
|
11
|
+
"local",
|
|
12
|
+
"reconciliation"
|
|
13
|
+
],
|
|
14
|
+
"properties": {
|
|
15
|
+
"schema_version": {
|
|
16
|
+
"const": 1
|
|
17
|
+
},
|
|
18
|
+
"command": {
|
|
19
|
+
"const": "reconcile"
|
|
20
|
+
},
|
|
21
|
+
"result": {
|
|
22
|
+
"description": "The reconciled verdict. This is ALWAYS CI's own verdict, recomputed from trusted inputs \u2014 no receipt state (stale, mismatched, tampered, missing or unknown-schema) can change it. A receipt can never promote or strengthen a CI result.",
|
|
23
|
+
"enum": [
|
|
24
|
+
"VERIFIED",
|
|
25
|
+
"MASKED_FAILURE",
|
|
26
|
+
"SUITE_RED",
|
|
27
|
+
"BUDGET_EXCEEDED",
|
|
28
|
+
"CANNOT_VERIFY"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"ci": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"required": [
|
|
34
|
+
"verdict"
|
|
35
|
+
],
|
|
36
|
+
"properties": {
|
|
37
|
+
"verdict": {
|
|
38
|
+
"enum": [
|
|
39
|
+
"VERIFIED",
|
|
40
|
+
"MASKED_FAILURE",
|
|
41
|
+
"SUITE_RED",
|
|
42
|
+
"BUDGET_EXCEEDED",
|
|
43
|
+
"CANNOT_VERIFY"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"additionalProperties": true
|
|
48
|
+
},
|
|
49
|
+
"local": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"required": [
|
|
52
|
+
"disposition"
|
|
53
|
+
],
|
|
54
|
+
"properties": {
|
|
55
|
+
"disposition": {
|
|
56
|
+
"enum": [
|
|
57
|
+
"PRESENT",
|
|
58
|
+
"ABSENT",
|
|
59
|
+
"MALFORMED",
|
|
60
|
+
"UNKNOWN_SCHEMA"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"verdict": {
|
|
64
|
+
"const": "VERIFIED"
|
|
65
|
+
},
|
|
66
|
+
"verified_at": {
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
"detail": {
|
|
70
|
+
"type": "string"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"additionalProperties": true
|
|
74
|
+
},
|
|
75
|
+
"reconciliation": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"required": [
|
|
78
|
+
"agreement",
|
|
79
|
+
"applicable",
|
|
80
|
+
"divergence",
|
|
81
|
+
"environment_divergence"
|
|
82
|
+
],
|
|
83
|
+
"properties": {
|
|
84
|
+
"agreement": {
|
|
85
|
+
"enum": [
|
|
86
|
+
"AGREE",
|
|
87
|
+
"DIVERGENCE",
|
|
88
|
+
"NON_APPLICABLE",
|
|
89
|
+
"NO_CLAIM"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"applicable": {
|
|
93
|
+
"type": "boolean"
|
|
94
|
+
},
|
|
95
|
+
"mismatched_input": {
|
|
96
|
+
"description": "For a NON_APPLICABLE claim, the first CANDIDATE-IDENTITY input that diverged from the identity CI computed. Only the reproducible, cross-machine candidate identity decides applicability; the machine-local environment inputs are never reported here.",
|
|
97
|
+
"enum": [
|
|
98
|
+
"tree",
|
|
99
|
+
"head",
|
|
100
|
+
"base",
|
|
101
|
+
"policy",
|
|
102
|
+
"verifier",
|
|
103
|
+
"surface"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"divergence": {
|
|
107
|
+
"type": "array",
|
|
108
|
+
"items": {
|
|
109
|
+
"type": "string"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"environment_divergence": {
|
|
113
|
+
"description": "Machine-local environment inputs that differ between the receipt and CI's identity. INFORMATIONAL only: they are expected to differ across machines and never make a receipt non-applicable or change `result`.",
|
|
114
|
+
"type": "array",
|
|
115
|
+
"items": {
|
|
116
|
+
"enum": [
|
|
117
|
+
"intervention",
|
|
118
|
+
"dependencies"
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"additionalProperties": true
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"additionalProperties": true,
|
|
127
|
+
"description": "Emitted by `tamperward receipt reconcile --json` (#601). CI reruns the canonical TamperWard verification first, then reconciles a claimed local receipt against its own adjudication. `result` and `ci.verdict` are CI's authority; `local` classifies the claimed receipt and `reconciliation` states whether it applies to the exact CI-adjudicated state and whether the two agree. A stale/mismatched/tampered/missing/unknown-schema receipt is NON_APPLICABLE or NO_CLAIM and never changes `result`. Additive within schema major 1.",
|
|
128
|
+
"examples": [
|
|
129
|
+
{
|
|
130
|
+
"schema_version": 1,
|
|
131
|
+
"command": "reconcile",
|
|
132
|
+
"result": "VERIFIED",
|
|
133
|
+
"ci": {
|
|
134
|
+
"verdict": "VERIFIED"
|
|
135
|
+
},
|
|
136
|
+
"local": {
|
|
137
|
+
"disposition": "PRESENT",
|
|
138
|
+
"verdict": "VERIFIED",
|
|
139
|
+
"verified_at": "2026-09-23T12:00:00.000Z"
|
|
140
|
+
},
|
|
141
|
+
"reconciliation": {
|
|
142
|
+
"agreement": "AGREE",
|
|
143
|
+
"applicable": true,
|
|
144
|
+
"divergence": [],
|
|
145
|
+
"environment_divergence": []
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"schema_version": 1,
|
|
150
|
+
"command": "reconcile",
|
|
151
|
+
"result": "MASKED_FAILURE",
|
|
152
|
+
"ci": {
|
|
153
|
+
"verdict": "MASKED_FAILURE"
|
|
154
|
+
},
|
|
155
|
+
"local": {
|
|
156
|
+
"disposition": "PRESENT",
|
|
157
|
+
"verdict": "VERIFIED",
|
|
158
|
+
"verified_at": "2026-09-23T12:00:00.000Z"
|
|
159
|
+
},
|
|
160
|
+
"reconciliation": {
|
|
161
|
+
"agreement": "DIVERGENCE",
|
|
162
|
+
"applicable": true,
|
|
163
|
+
"divergence": [
|
|
164
|
+
"local claim VERIFIED, CI MASKED_FAILURE",
|
|
165
|
+
"local pristine: PASS / CI pristine: FAIL"
|
|
166
|
+
],
|
|
167
|
+
"environment_divergence": []
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"schema_version": 1,
|
|
172
|
+
"command": "reconcile",
|
|
173
|
+
"result": "SUITE_RED",
|
|
174
|
+
"ci": {
|
|
175
|
+
"verdict": "SUITE_RED"
|
|
176
|
+
},
|
|
177
|
+
"local": {
|
|
178
|
+
"disposition": "PRESENT",
|
|
179
|
+
"verdict": "VERIFIED",
|
|
180
|
+
"verified_at": "2026-09-23T12:00:00.000Z"
|
|
181
|
+
},
|
|
182
|
+
"reconciliation": {
|
|
183
|
+
"agreement": "NON_APPLICABLE",
|
|
184
|
+
"applicable": false,
|
|
185
|
+
"mismatched_input": "tree",
|
|
186
|
+
"divergence": [
|
|
187
|
+
"receipt binds a different `tree` than CI computed \u2014 the receipt describes another state"
|
|
188
|
+
],
|
|
189
|
+
"environment_divergence": []
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"schema_version": 1,
|
|
194
|
+
"command": "reconcile",
|
|
195
|
+
"result": "VERIFIED",
|
|
196
|
+
"ci": {
|
|
197
|
+
"verdict": "VERIFIED"
|
|
198
|
+
},
|
|
199
|
+
"local": {
|
|
200
|
+
"disposition": "ABSENT",
|
|
201
|
+
"detail": "no local verification receipt was provided"
|
|
202
|
+
},
|
|
203
|
+
"reconciliation": {
|
|
204
|
+
"agreement": "NO_CLAIM",
|
|
205
|
+
"applicable": false,
|
|
206
|
+
"divergence": [],
|
|
207
|
+
"environment_divergence": []
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/research-stdio-v1.schema.json",
|
|
4
4
|
"title": "TamperWard research stdio JSONL protocol v1",
|
|
5
5
|
"description": "One JSON object per line. Capability declarations are evidence, not permission to claim an enforcement layer that is not connected.",
|
|
6
6
|
"oneOf": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/research-v1.schema.json",
|
|
4
4
|
"title": "TamperWard research JSON output v1",
|
|
5
5
|
"description": "Emitted by `tamperward research run --json` (one `pair` document per line, identical to the ledger record under <out>/pairs/) and `tamperward research summarize` (one `summary` document). `document` is the shape discriminator. Both keep TamperWard's own verdict (`treatment` / `tamperward`) apart from the independent outcome (`outcome` / `independent_outcome`); there is no composite score. Additive within schema major 1.",
|
|
6
6
|
"type": "object",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/run-v1.schema.json",
|
|
4
4
|
"title": "TamperWard run JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/runtime-qualification-v1.schema.json",
|
|
4
4
|
"title": "TamperWard runtime qualification JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/stats-v1.schema.json",
|
|
4
4
|
"title": "TamperWard audit stats v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"additionalProperties": false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/status-v1.schema.json",
|
|
4
4
|
"title": "TamperWard status JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hexrift/tamperward/v2.38.0/schemas/verify-v1.schema.json",
|
|
4
4
|
"title": "TamperWard verify JSON output v1",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -95,6 +95,10 @@
|
|
|
95
95
|
"oob_signoff": {
|
|
96
96
|
"type": "string"
|
|
97
97
|
},
|
|
98
|
+
"adjudicated_tree": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Optional. The candidate tree fingerprint this run actually adjudicated — the same identity `verify` binds into the local record. In a `pull_request` run the enforcement verify runs over the MERGE result, so this can differ from the branch-tip tree a receipt binds; `receipt reconcile` compares it to the receipt's `tree` and reports NON_APPLICABLE when they differ rather than attribute CI's verdict to a tree it never ran. Present on a verdict-bearing run; absent on documents produced before this field existed."
|
|
101
|
+
},
|
|
98
102
|
"materialization_reason": {
|
|
99
103
|
"enum": [
|
|
100
104
|
"TRACKED_NODE_MODULES_CONFLICT",
|