@intentius/chant 0.85.0 → 0.87.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/main.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +13 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +13 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts +23 -0
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -0
- package/dist/workspace/checks/records.d.ts +1 -0
- package/dist/workspace/checks/records.d.ts.map +1 -1
- package/dist/workspace/checks.d.ts +4 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/composites.d.ts +14 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/conformance/index.d.ts +211 -0
- package/dist/workspace/conformance/index.d.ts.map +1 -0
- package/dist/workspace/conformance/vitest.d.ts +11 -0
- package/dist/workspace/conformance/vitest.d.ts.map +1 -0
- package/dist/workspace/declaration.d.ts +28 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +40 -0
- package/dist/workspace/declared-kinds.d.ts +43 -0
- package/dist/workspace/declared-kinds.d.ts.map +1 -0
- package/dist/workspace/graph-cli.d.ts +11 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/intent-cli.d.ts +2 -1
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-joins.d.ts +45 -8
- package/dist/workspace/intent-joins.d.ts.map +1 -1
- package/dist/workspace/intent.d.ts +71 -7
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/ls.d.ts +31 -1
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/reason-codes.d.ts +47 -4
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-sessions.d.ts +51 -0
- package/dist/workspace/record-sessions.d.ts.map +1 -0
- package/dist/workspace/record-source.d.ts +2 -0
- package/dist/workspace/record-source.d.ts.map +1 -1
- package/dist/workspace/records-cli.d.ts +71 -4
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-since.d.ts +90 -0
- package/dist/workspace/records-since.d.ts.map +1 -0
- package/dist/workspace/records-write.d.ts +171 -0
- package/dist/workspace/records-write.d.ts.map +1 -0
- package/dist/workspace/records.d.ts +244 -15
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/runtimes.d.ts +60 -0
- package/dist/workspace/runtimes.d.ts.map +1 -0
- package/dist/workspace/status-gates.d.ts +90 -0
- package/dist/workspace/status-gates.d.ts.map +1 -0
- package/dist/workspace/status.d.ts +17 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/trust/seal.d.ts +85 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -0
- package/dist/workspace/trust/ssh-commit.d.ts +7 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/work.d.ts +56 -0
- package/dist/workspace/work.d.ts.map +1 -0
- package/package.json +19 -1
- package/src/cli/main.ts +55 -3
- package/src/cli/registry.ts +13 -1
- package/src/lifecycle/gate-ledger.ts +14 -0
- package/src/workspace/__fixtures__/sessions.ts +66 -0
- package/src/workspace/checks/records.ts +19 -0
- package/src/workspace/checks.test.ts +2 -0
- package/src/workspace/checks.ts +7 -1
- package/src/workspace/composites.schema.json +65 -3
- package/src/workspace/composites.test.ts +95 -5
- package/src/workspace/composites.ts +28 -7
- package/src/workspace/conformance/__fixture__/app/package.json +7 -0
- package/src/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/src/workspace/conformance/__fixture__/decisions/decision.kind.mjs +32 -0
- package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +376 -0
- package/src/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/src/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/src/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/src/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/src/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/src/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/src/workspace/conformance/conformance.test.ts +149 -0
- package/src/workspace/conformance/index.mjs +31 -0
- package/src/workspace/conformance/index.ts +453 -0
- package/src/workspace/conformance/vitest.ts +62 -0
- package/src/workspace/declaration.schema.json +40 -0
- package/src/workspace/declaration.ts +62 -0
- package/src/workspace/declared-kinds.test.ts +321 -0
- package/src/workspace/declared-kinds.ts +76 -0
- package/src/workspace/graph-cli.ts +8 -0
- package/src/workspace/intent-cli.ts +29 -6
- package/src/workspace/intent-gaps.test.ts +217 -0
- package/src/workspace/intent-joins.test.ts +60 -0
- package/src/workspace/intent-joins.ts +71 -19
- package/src/workspace/intent.schema.json +304 -7
- package/src/workspace/intent.test.ts +99 -0
- package/src/workspace/intent.ts +365 -46
- package/src/workspace/ls.schema.json +34 -0
- package/src/workspace/ls.ts +69 -4
- package/src/workspace/read-contract.test.ts +30 -9
- package/src/workspace/reason-codes.test.ts +16 -4
- package/src/workspace/reason-codes.ts +55 -4
- package/src/workspace/record-assets.test.ts +3 -1
- package/src/workspace/record-sessions.ts +105 -0
- package/src/workspace/record-source.ts +14 -5
- package/src/workspace/records-amend.schema.json +167 -0
- package/src/workspace/records-cli.ts +308 -19
- package/src/workspace/records-contract.test.ts +57 -2
- package/src/workspace/records-formats.test.ts +640 -0
- package/src/workspace/records-new.schema.json +158 -0
- package/src/workspace/records-quorum.test.ts +196 -0
- package/src/workspace/records-review.schema.json +227 -0
- package/src/workspace/records-sessions.test.ts +108 -0
- package/src/workspace/records-since.schema.json +193 -0
- package/src/workspace/records-since.test.ts +174 -0
- package/src/workspace/records-since.ts +259 -0
- package/src/workspace/records-write-contract.test.ts +125 -0
- package/src/workspace/records-write.test.ts +373 -0
- package/src/workspace/records-write.ts +765 -0
- package/src/workspace/records.schema.json +202 -9
- package/src/workspace/records.ts +700 -41
- package/src/workspace/runtimes.ts +107 -0
- package/src/workspace/status-contract.test.ts +163 -0
- package/src/workspace/status-gates.ts +215 -0
- package/src/workspace/status.schema.json +69 -3
- package/src/workspace/status.ts +35 -2
- package/src/workspace/trust/seal.test.ts +232 -0
- package/src/workspace/trust/seal.ts +195 -0
- package/src/workspace/trust/ssh-commit.ts +2 -2
- package/src/workspace/work.test.ts +390 -0
- package/src/workspace/work.ts +163 -0
|
@@ -3,8 +3,44 @@
|
|
|
3
3
|
"$id": "https://intentius.io/chant/schemas/workspace/records/v1/records.schema.json",
|
|
4
4
|
"title": "chant workspace records output",
|
|
5
5
|
"description": "What `chant workspace records --json` prints, version 1 of the read contract for records (#2536). This is the first-test slice (#2546): records are unsealed and there is no workspace declaration yet. Readers ignore fields they do not know; a field is only ever added within a version. The reason and error codes are closed lists: a new code is a new contract version. Contract version 1 is written by chant 0.81.0 and newer; a reader that needs it refuses output whose `contract` it doesn't know. Every code is in the one closed list of `reason-codes.ts`.",
|
|
6
|
-
"oneOf": [{ "$ref": "#/$defs/result" }, { "$ref": "#/$defs/failure" }],
|
|
6
|
+
"oneOf": [{ "$ref": "#/$defs/result" }, { "$ref": "#/$defs/failure" }, { "$ref": "#/$defs/set" }],
|
|
7
7
|
"$defs": {
|
|
8
|
+
"set": {
|
|
9
|
+
"description": "Added in contract 1 by #2680. What records prints without --kind when the workspace declaration names record kinds: one result or failure per declared kind, in the declaration's order (the workspace's own kinds, then each member's in member order). Exit code 1 when any kind's read failed; the others are still read and listed.",
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": ["$schema", "contract", "kinds"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"$schema": { "const": "https://intentius.io/chant/schemas/workspace/records/v1/records.schema.json" },
|
|
14
|
+
"contract": { "const": 1 },
|
|
15
|
+
"kinds": {
|
|
16
|
+
"type": "array",
|
|
17
|
+
"items": {
|
|
18
|
+
"allOf": [
|
|
19
|
+
{ "oneOf": [{ "$ref": "#/$defs/result" }, { "$ref": "#/$defs/failure" }] },
|
|
20
|
+
{
|
|
21
|
+
"type": "object",
|
|
22
|
+
"required": ["declared"],
|
|
23
|
+
"properties": {
|
|
24
|
+
"declared": {
|
|
25
|
+
"description": "The declaration's entry for the kind.",
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["member", "path", "name"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"member": { "type": ["string", "null"], "description": "The member that declares the kind, or null for the workspace's own." },
|
|
30
|
+
"path": { "type": "string", "description": "The kind file from the workspace root, with / separators." },
|
|
31
|
+
"name": { "type": ["string", "null"], "description": "The name the declaration gives the kind, or null; kind.name is the kind file's own." }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"kind": false,
|
|
40
|
+
"records": false,
|
|
41
|
+
"error": false
|
|
42
|
+
}
|
|
43
|
+
},
|
|
8
44
|
"result": {
|
|
9
45
|
"description": "The read worked. Exit code 0, even when some records are invalid.",
|
|
10
46
|
"type": "object",
|
|
@@ -18,7 +54,11 @@
|
|
|
18
54
|
"properties": {
|
|
19
55
|
"name": { "type": "string", "description": "The kind's name, such as \"decision\"." },
|
|
20
56
|
"schema": { "type": "string", "description": "The `$id` of the schema each record was validated against." },
|
|
21
|
-
"file": { "type": "string", "description": "The kind file, relative to the repository root, with / separators." }
|
|
57
|
+
"file": { "type": "string", "description": "The kind file, relative to the repository root, with / separators." },
|
|
58
|
+
"format": {
|
|
59
|
+
"enum": ["markdown-front-matter", "json"],
|
|
60
|
+
"description": "Added in contract 1 by #2664 (ws-053). How each record file holds its structured core: the YAML front matter of a Markdown file, or the whole file as one JSON object, read as I-JSON (no repeated member name)."
|
|
61
|
+
}
|
|
22
62
|
}
|
|
23
63
|
},
|
|
24
64
|
"at": {
|
|
@@ -47,16 +87,40 @@
|
|
|
47
87
|
"invalid": { "type": "integer", "minimum": 0 },
|
|
48
88
|
"superseded": { "type": "integer", "minimum": 0, "description": "Records a closed record supersedes, counted before --current leaves them out." }
|
|
49
89
|
}
|
|
90
|
+
},
|
|
91
|
+
"decisions": {
|
|
92
|
+
"description": "Added in contract 1 by #2683, for a work kind only. Every decision the kind file named in the work kind's work.decisions reads at the same revision, whether or not a work record names it, each with the work records implementing it. A decision with an empty implementedBy has no work item yet.",
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": { "$ref": "#/$defs/decisionWork" }
|
|
50
95
|
}
|
|
51
96
|
}
|
|
52
97
|
},
|
|
98
|
+
"workLink": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"required": ["id", "state"],
|
|
101
|
+
"properties": {
|
|
102
|
+
"id": { "type": "string" },
|
|
103
|
+
"state": { "type": ["string", "null"], "description": "The linked record's state as it writes it, or null when no record has the id." }
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"decisionWork": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"required": ["id", "path", "state", "supersededBy", "implementedBy"],
|
|
109
|
+
"properties": {
|
|
110
|
+
"id": { "type": "string" },
|
|
111
|
+
"path": { "type": "string", "description": "From the repository root, with / separators." },
|
|
112
|
+
"state": { "type": ["string", "null"] },
|
|
113
|
+
"supersededBy": { "type": ["string", "null"] },
|
|
114
|
+
"implementedBy": { "type": "array", "items": { "$ref": "#/$defs/workLink" }, "description": "The work records whose implements list names the decision, in path order." }
|
|
115
|
+
}
|
|
116
|
+
},
|
|
53
117
|
"record": {
|
|
54
118
|
"type": "object",
|
|
55
119
|
"required": ["id", "path", "state", "valid", "reasons", "supersededBy", "data"],
|
|
56
120
|
"properties": {
|
|
57
|
-
"id": { "type": ["string", "null"], "description": "Null when the
|
|
121
|
+
"id": { "type": ["string", "null"], "description": "Null when the record could not be parsed or has no string id. For a content-addressed kind (idFrom sha256, added by #2664), the lowercase hex SHA-256 of the file's bytes, the same string a pin of the file carries." },
|
|
58
122
|
"path": { "type": "string", "description": "From the repository root, with / separators." },
|
|
59
|
-
"state": { "type": ["string", "null"], "description": "The state as the record writes it. Supersession is reported in supersededBy, not here." },
|
|
123
|
+
"state": { "type": ["string", "null"], "description": "The state as the record writes it. Supersession is reported in supersededBy, not here. Null for every record of a kind without states (#2664)." },
|
|
60
124
|
"valid": { "type": "boolean", "description": "True exactly when reasons is empty." },
|
|
61
125
|
"reasons": { "type": "array", "items": { "$ref": "#/$defs/reason" } },
|
|
62
126
|
"supersededBy": {
|
|
@@ -65,18 +129,46 @@
|
|
|
65
129
|
},
|
|
66
130
|
"data": {
|
|
67
131
|
"type": ["object", "null"],
|
|
68
|
-
"description": "The
|
|
132
|
+
"description": "The record's structured core as JSON: the front matter, or for a kind of format json the whole file (#2664). It follows the kind's schema when valid is true. Null when it could not be parsed."
|
|
69
133
|
},
|
|
70
134
|
"provenance": { "$ref": "#/$defs/provenance" },
|
|
71
135
|
"assets": {
|
|
72
|
-
"description": "Added in contract 1 by #2549. Each workspace file the record pins by hash, checked against the tree read: the working tree, or the revision under --at. Empty for a kind that pins nothing.",
|
|
136
|
+
"description": "Added in contract 1 by #2549. Each workspace file the record pins by hash, checked against the tree read: the working tree, or the revision under --at. Empty for a kind that pins nothing. A record of a content-addressed kind (#2664) whose file name claims a hash other than its bytes' lists itself here as drifted, with sha256 the hash the name claims and actual its id.",
|
|
73
137
|
"type": "array",
|
|
74
138
|
"items": { "$ref": "#/$defs/asset" }
|
|
75
139
|
},
|
|
76
140
|
"warnings": {
|
|
77
|
-
"description": "Added in contract 1 by #2549. Findings that leave the record valid: a pinned file that changed, went missing or did not follow a superseding decision, a supersedes link that has no effect yet,
|
|
141
|
+
"description": "Added in contract 1 by #2549. Findings that leave the record valid: a pinned file that changed, went missing or did not follow a superseding decision, a supersedes link that has no effect yet, (added by #2654) an evidence list that is empty, (added by #2672) a verdict that names no digest, or (added by #2683) a work record's links and dates. A work record never carries record-no-evidence; a done one with no evidence carries work-done-unpinned. valid and --current do not look at them.",
|
|
78
142
|
"type": "array",
|
|
79
143
|
"items": { "$ref": "#/$defs/warning" }
|
|
144
|
+
},
|
|
145
|
+
"digest": {
|
|
146
|
+
"description": "Added in contract 1 by #2672. The lowercase hex SHA-256 of the record file's text, with LF line endings and without the kind's reviews block in the front matter, or for a kind of format json without the top-level reviews member and one comma beside it (#2664). A review verdict names it in its digest field, and stops counting once the record's digest moves on. For a kind with no reviews list, the digest of the whole text.",
|
|
147
|
+
"type": "string",
|
|
148
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
149
|
+
},
|
|
150
|
+
"quorum": {
|
|
151
|
+
"description": "Added in contract 1 by #2671, on every record of a kind with a reviews list. Null when the front matter could not be parsed.",
|
|
152
|
+
"oneOf": [{ "type": "null" }, { "$ref": "#/$defs/quorum" }]
|
|
153
|
+
},
|
|
154
|
+
"citedBy": {
|
|
155
|
+
"description": "Added in contract 1 by #2673, on every record of a session kind and on no other. The review entries of the records the session kind names as its subjects (decisions, for the reference session kind) whose session field names this record's id, in path order and then list order.",
|
|
156
|
+
"type": "array",
|
|
157
|
+
"items": { "$ref": "#/$defs/citation" }
|
|
158
|
+
},
|
|
159
|
+
"ready": {
|
|
160
|
+
"description": "Added in contract 1 by #2683, on every parsed record of a work kind. True when the record is valid, not superseded, in the kind's open state, not in a needs cycle, and every work id its needs list names is done.",
|
|
161
|
+
"type": "boolean"
|
|
162
|
+
},
|
|
163
|
+
"blockedBy": {
|
|
164
|
+
"description": "Added in contract 1 by #2683, on every parsed record of a work kind. Each need that is not done, with its state now; null for an id no record has.",
|
|
165
|
+
"type": "array",
|
|
166
|
+
"items": { "$ref": "#/$defs/workLink" }
|
|
167
|
+
},
|
|
168
|
+
"implements": {
|
|
169
|
+
"description": "Added in contract 1 by #2683, on every parsed record of a work kind. Each decision the record implements, with its state now; null for an id no decision has.",
|
|
170
|
+
"type": "array",
|
|
171
|
+
"items": { "$ref": "#/$defs/workLink" }
|
|
80
172
|
}
|
|
81
173
|
},
|
|
82
174
|
"allOf": [
|
|
@@ -101,10 +193,109 @@
|
|
|
101
193
|
"type": "object",
|
|
102
194
|
"required": ["code", "message"],
|
|
103
195
|
"properties": {
|
|
104
|
-
"code": {
|
|
196
|
+
"code": {
|
|
197
|
+
"enum": [
|
|
198
|
+
"asset-drift",
|
|
199
|
+
"asset-missing",
|
|
200
|
+
"asset-stale",
|
|
201
|
+
"record-supersedes-pending",
|
|
202
|
+
"record-no-evidence",
|
|
203
|
+
"review-undigested",
|
|
204
|
+
"work-needs-unknown",
|
|
205
|
+
"work-implements-unknown",
|
|
206
|
+
"work-needs-cycle",
|
|
207
|
+
"work-implements-undecided",
|
|
208
|
+
"work-done-unpinned",
|
|
209
|
+
"work-closed-without-date",
|
|
210
|
+
"work-done-gap-open"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
105
213
|
"message": { "type": "string" }
|
|
106
214
|
}
|
|
107
215
|
},
|
|
216
|
+
"quorum": {
|
|
217
|
+
"description": "Added in contract 1 by #2671. The record's review verdicts counted against the quorum the workspace declares. A met quorum with an open concern is met with objections, never consensus: a reader shows consensus only when met is true and metWithObjections is false.",
|
|
218
|
+
"type": "object",
|
|
219
|
+
"required": ["need", "needFrom", "agreed", "counted", "notCounted", "openConcerns", "met", "metWithObjections"],
|
|
220
|
+
"properties": {
|
|
221
|
+
"need": { "type": "integer", "minimum": 0, "description": "How many counted agree verdicts, besides the decider's, the record needs: the declaration's quorum, or 2." },
|
|
222
|
+
"needFrom": { "enum": ["declaration", "default"], "description": "declaration when the workspace declaration in the tree read sets quorum; default otherwise, including when there is no declaration or it can't be read." },
|
|
223
|
+
"agreed": { "type": "integer", "minimum": 0, "description": "Counted verdicts whose verdict is agree." },
|
|
224
|
+
"counted": {
|
|
225
|
+
"description": "The verdicts that count: at most one per principal, the latest, in the order of the reviews list.",
|
|
226
|
+
"type": "array",
|
|
227
|
+
"items": { "allOf": [{ "$ref": "#/$defs/verdict" }, { "type": "object", "properties": { "reason": false } }] }
|
|
228
|
+
},
|
|
229
|
+
"notCounted": {
|
|
230
|
+
"description": "The verdicts that don't count, each with a reason.",
|
|
231
|
+
"type": "array",
|
|
232
|
+
"items": { "allOf": [{ "$ref": "#/$defs/verdict" }, { "type": "object", "required": ["reason"] }] }
|
|
233
|
+
},
|
|
234
|
+
"openConcerns": {
|
|
235
|
+
"description": "Every dissent with neither addressed_by nor withdrawn_on, counted or not.",
|
|
236
|
+
"type": "array",
|
|
237
|
+
"items": { "$ref": "#/$defs/concern" }
|
|
238
|
+
},
|
|
239
|
+
"met": { "type": "boolean", "description": "agreed is at least need." },
|
|
240
|
+
"metWithObjections": { "type": "boolean", "description": "met, and openConcerns is not empty." }
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"verdict": {
|
|
244
|
+
"type": "object",
|
|
245
|
+
"required": ["index", "principal", "reviewer", "verdict", "digest"],
|
|
246
|
+
"properties": {
|
|
247
|
+
"index": { "type": "integer", "minimum": 0, "description": "The entry's position in the record's reviews list, from 0." },
|
|
248
|
+
"principal": { "type": "string", "description": "The reviewer after NFKC normalisation, trimming and lower-casing, so alice and \"Alice \" are one principal." },
|
|
249
|
+
"reviewer": { "type": "string", "description": "The reviewer as the record writes it." },
|
|
250
|
+
"verdict": { "enum": ["agree", "dissent", "abstain"] },
|
|
251
|
+
"digest": { "type": ["string", "null"], "description": "The digest the verdict names, or null when it names none (a warning review-undigested on the record)." },
|
|
252
|
+
"attested": {
|
|
253
|
+
"type": ["boolean", "null"],
|
|
254
|
+
"description": "Added in contract 1 by #2687. true when the verdict's seal verifies for its reviewer against the signers file at base. false when a signers file is active at base and the verdict has no seal, or when a seal fails, with or without one. null when nothing here can say: no seal and no signers file, a seal checked with no signers file (its signature is intact, and nothing says whose key it is), or no ssh-keygen. Under an active signers file only true counts."
|
|
255
|
+
},
|
|
256
|
+
"attestation": {
|
|
257
|
+
"description": "Added in contract 1 by #2687. What the verdict's seal establishes, and why when it is not attested.",
|
|
258
|
+
"type": "object",
|
|
259
|
+
"required": ["message"],
|
|
260
|
+
"properties": {
|
|
261
|
+
"code": { "enum": ["seal-missing", "seal-signer-unlisted", "seal-signature-invalid", "seal-unverifiable"], "description": "Absent exactly when attested is true." },
|
|
262
|
+
"message": { "type": "string" },
|
|
263
|
+
"key": { "type": "string", "description": "The fingerprint of the key that made the signature, when the signature was checked." }
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"reason": {
|
|
267
|
+
"description": "Why the verdict does not count. Present exactly on the entries in notCounted.",
|
|
268
|
+
"type": "object",
|
|
269
|
+
"required": ["code", "message"],
|
|
270
|
+
"properties": {
|
|
271
|
+
"code": { "enum": ["review-decider", "review-agent", "review-duplicate", "review-older-digest", "review-unattested"] },
|
|
272
|
+
"message": { "type": "string" }
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"concern": {
|
|
278
|
+
"type": "object",
|
|
279
|
+
"required": ["index", "principal", "reviewer", "note"],
|
|
280
|
+
"properties": {
|
|
281
|
+
"index": { "type": "integer", "minimum": 0 },
|
|
282
|
+
"principal": { "type": "string" },
|
|
283
|
+
"reviewer": { "type": "string" },
|
|
284
|
+
"note": { "type": ["string", "null"], "description": "The dissent's reason." },
|
|
285
|
+
"proposes": { "type": "string", "description": "The proposed decision the dissent opened, when it names one." }
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"citation": {
|
|
289
|
+
"type": "object",
|
|
290
|
+
"required": ["id", "path", "index", "reviewer", "verdict"],
|
|
291
|
+
"properties": {
|
|
292
|
+
"id": { "type": "string", "description": "The subject record's id." },
|
|
293
|
+
"path": { "type": "string", "description": "The subject record's path from the repository root, with / separators." },
|
|
294
|
+
"index": { "type": "integer", "minimum": 0, "description": "The entry's position in the subject's reviews list, from 0." },
|
|
295
|
+
"reviewer": { "type": ["string", "null"], "description": "The reviewer as the entry writes it, or null when it names none." },
|
|
296
|
+
"verdict": { "type": ["string", "null"], "description": "The verdict as the entry writes it, or null when it names none." }
|
|
297
|
+
}
|
|
298
|
+
},
|
|
108
299
|
"trust": {
|
|
109
300
|
"description": "Added in contract 1 by #2547. Where provenance was judged from: the policy read at the base revision, never the tree read.",
|
|
110
301
|
"type": "object",
|
|
@@ -143,7 +334,9 @@
|
|
|
143
334
|
"record-schema-invalid",
|
|
144
335
|
"record-id-duplicate",
|
|
145
336
|
"record-supersedes-unknown",
|
|
146
|
-
"record-supersedes-conflict"
|
|
337
|
+
"record-supersedes-conflict",
|
|
338
|
+
"session-seal-mismatch",
|
|
339
|
+
"session-verdict-unknown-record"
|
|
147
340
|
]
|
|
148
341
|
},
|
|
149
342
|
"message": { "type": "string" }
|