@cassiomc1/forgeloop 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/project-loop.mdc +3 -2
- package/.github/copilot-instructions.md +1 -0
- package/AGENTS.md +2 -1
- package/CLAUDE.md +1 -0
- package/DOCS_INDEX.md +36 -0
- package/ENG/design-code-eng.md +31 -0
- package/ENG/documentation-quality-eng.md +400 -0
- package/EXECUTION_STATE.md +23 -13
- package/GUIDE_ROUTER.md +23 -8
- package/LOOP_ENGINEERING.md +77 -12
- package/PROTOCOL_INTEGRATION.md +9 -6
- package/README.md +82 -39
- package/docs/ARTIFACT_REFERENCE.md +442 -0
- package/docs/CLI_REFERENCE.md +892 -0
- package/docs/CROSS_HARNESS_CONTINUITY.md +198 -0
- package/docs/DOCUMENTATION_GUIDE.md +161 -0
- package/docs/GETTING_STARTED.md +348 -0
- package/docs/RECIPES.md +250 -0
- package/docs/TROUBLESHOOTING.md +345 -0
- package/docs/assets/forgeloop-flow.svg +1 -1
- package/docs/forgeloop-flow.mmd +1 -1
- package/package.json +13 -2
- package/schemas/task-descriptor.schema.json +56 -0
- package/schemas/work-state.schema.json +18 -1
- package/scripts/CI_VALIDATORS.md +7 -0
- package/src/cli.js +280 -388
- package/src/commands/advance.js +5 -2
- package/src/commands/audit.js +11 -1
- package/src/commands/clear-continuity.js +5 -2
- package/src/commands/clear-state.js +5 -2
- package/src/commands/complete.js +9 -1
- package/src/commands/continuity.js +5 -2
- package/src/commands/inspect.js +10 -2
- package/src/commands/next.js +5 -2
- package/src/commands/preflight.js +9 -1
- package/src/commands/prepare-completion.js +5 -2
- package/src/commands/reconcile-continuity.js +5 -2
- package/src/commands/record-check.js +7 -1
- package/src/commands/record-continuity.js +21 -14
- package/src/commands/record-terminal-result.js +7 -1
- package/src/commands/route.js +22 -18
- package/src/commands/run-check.js +52 -44
- package/src/commands/status.js +18 -12
- package/src/commands/task-create.js +94 -0
- package/src/commands/task-list.js +48 -0
- package/src/commands/task-migrate.js +34 -0
- package/src/commands/task-scope.js +75 -0
- package/src/commands/task-show.js +81 -0
- package/src/commands/task-unlock.js +35 -0
- package/src/commands/validate-protocol.js +37 -20
- package/src/commands/validate-state.js +24 -18
- package/src/config/guides.json +42 -0
- package/src/core/activation.js +8 -4
- package/src/core/artifact-registry.js +166 -0
- package/src/core/audit.js +65 -12
- package/src/core/bundles.js +76 -50
- package/src/core/cli-command-definitions.js +611 -0
- package/src/core/cli-metadata.js +23 -0
- package/src/core/completion-artifacts.js +161 -74
- package/src/core/completion.js +134 -76
- package/src/core/continuity.js +20 -13
- package/src/core/contract.js +6 -3
- package/src/core/error-codes.js +197 -0
- package/src/core/events.js +19 -14
- package/src/core/execution.js +38 -6
- package/src/core/gate-artifact.js +12 -9
- package/src/core/gates.js +4 -2
- package/src/core/guide-metadata.js +7 -11
- package/src/core/guide-registry.js +29 -0
- package/src/core/inspect.js +7 -4
- package/src/core/native-adapters.js +6 -0
- package/src/core/phase.js +85 -33
- package/src/core/preflight-consistency.js +24 -14
- package/src/core/preflight-loaders.js +16 -11
- package/src/core/preflight.js +44 -25
- package/src/core/protocol.js +2 -11
- package/src/core/receipt.js +1 -1
- package/src/core/report.js +2 -2
- package/src/core/repository.js +46 -12
- package/src/core/resumability.js +6 -4
- package/src/core/route-artifact.js +9 -5
- package/src/core/router.js +11 -7
- package/src/core/schema-validation.js +1 -0
- package/src/core/task-command.js +41 -0
- package/src/core/task-context.js +126 -0
- package/src/core/task-descriptor.js +81 -0
- package/src/core/task-discovery.js +116 -0
- package/src/core/task-identity.js +76 -0
- package/src/core/task-lock.js +209 -0
- package/src/core/task-migration-validation.js +140 -0
- package/src/core/task-migration.js +361 -0
- package/src/core/task-paths.js +96 -0
- package/src/core/task-scope.js +179 -0
- package/src/core/templates.js +3 -9
- package/src/core/work-state.js +24 -13
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
# ForgeLoop Artifact Reference
|
|
2
|
+
|
|
3
|
+
This reference documents the canonical artifacts persisted in the `.forgeloop/` directory.
|
|
4
|
+
|
|
5
|
+
All artifact schemas are defined in `schemas/*.schema.json`. Persisted artifact shapes are strictly bound to these schemas and validated during protocol transitions.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Artifact Registry Summary
|
|
10
|
+
|
|
11
|
+
<!-- BEGIN FORGELOOP GENERATED: artifact-registry -->
|
|
12
|
+
|
|
13
|
+
| Artifact File | Schema | Ownership | Mutability | Trust Role |
|
|
14
|
+
| --- | --- | --- | --- | --- |
|
|
15
|
+
| `task-state/<task-key>/task.json` | `task-descriptor` | Protocol Managed | Mutable Before Execution | Task Descriptor |
|
|
16
|
+
| `task-state/<task-key>/contract.json` | `current-contract` | Agent Authored | Mutable Before Execution | Operational Specification |
|
|
17
|
+
| `task-state/<task-key>/routing-result.json` | `routing-result` | Protocol Generated | Mutable On Reroute | Guide Routing Specification |
|
|
18
|
+
| `task-state/<task-key>/preflight.json` | `preflight` | Protocol Generated | Overwritten On Preflight | Readiness Attestation |
|
|
19
|
+
| `sources.json` | `source-registry` | Operator Or Agent | Mutable On Discovery | Source Attestation |
|
|
20
|
+
| `task-state/<task-key>/events.ndjson` | `event` | Protocol Appended | Append Only | Audit Ledger |
|
|
21
|
+
| `sessions/<session-id>.json` | `activation` | Protocol Generated | Overwritten On Activate | Session Marker |
|
|
22
|
+
| `config.json` | `config` | Operator Or Agent | Mutable Configuration | Project Configuration |
|
|
23
|
+
| `task-state/<task-key>/gates/<gate>.json` | `gate` | Agent Authored Or Reviewer | Overwritten On Gate Satisfaction | Gate Approval Attestation |
|
|
24
|
+
| `task-state/<task-key>/work-state.json` | `work-state` | Protocol Managed | Atomic State Transitions | Canonical Lifecycle State |
|
|
25
|
+
| `task-state/<task-key>/continuity.json` | `continuity` | Agent Or Harness | Mutable Handoff Notes | Non Evidence Handoff |
|
|
26
|
+
| `task-state/<task-key>/execution-receipt.json` | `execution-receipt` | Protocol Compiled | Atomic Compilation | Evidence Compilation |
|
|
27
|
+
| `task-state/<task-key>/executions/exec-<id>.json` | `execution` | Protocol Executed | Immutable Once Written | Execution Provenance |
|
|
28
|
+
|
|
29
|
+
<!-- END FORGELOOP GENERATED: artifact-registry -->
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Canonical Artifact Specifications
|
|
34
|
+
|
|
35
|
+
### 2.1 `task-state/<taskKey>/contract.json`
|
|
36
|
+
|
|
37
|
+
<!-- forgeloop-doc: schema=current-contract artifact=.forgeloop/task-state/<task-key>/contract.json -->
|
|
38
|
+
|
|
39
|
+
The operational task specification authored before execution begins.
|
|
40
|
+
|
|
41
|
+
#### Canonical Fields
|
|
42
|
+
|
|
43
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:current-contract -->
|
|
44
|
+
|
|
45
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
46
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
47
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
48
|
+
- `objective` *(string, required, minLength: 1)*
|
|
49
|
+
- `assumptions` *(array<object>, optional)*
|
|
50
|
+
- `value` *(string, required, minLength: 1)*
|
|
51
|
+
- `reason` *(string, required, minLength: 1)*
|
|
52
|
+
- `scope` *(string, required, minLength: 1)*
|
|
53
|
+
- `reversible` *(boolean, required, const: true)*
|
|
54
|
+
- `source` *(string, required, const: `agent-default`)*
|
|
55
|
+
- `deliverables` *(array<string>, required)*
|
|
56
|
+
- `constraints` *(array<string>, required)*
|
|
57
|
+
- `risks` *(array<string>, required)*
|
|
58
|
+
- `verification` *(array<string or requirement>, required)*
|
|
59
|
+
*requirement items:*
|
|
60
|
+
- `id` *(string, optional, minLength: 1)*
|
|
61
|
+
- `text` *(string, required, minLength: 1)*
|
|
62
|
+
- `type` *(string, optional, enum: `PRODUCT`, `VERIFICATION`, `LIFECYCLE`, `PUBLICATION`, `PRODUCTION_READINESS`)*
|
|
63
|
+
- `operator` *(string, optional, enum: `SINGLE`, `ALL`)*
|
|
64
|
+
- `requiredEvidenceKind` *(string, optional, enum: `OBSERVED`, `INFERRED`, `NOT_VERIFIED`, `BLOCKED`, `HYPOTHESIS`)*
|
|
65
|
+
- `lifecycleOwned` *(boolean, optional)*
|
|
66
|
+
- `terminalOwned` *(boolean, optional)*
|
|
67
|
+
- `mixedTerminal` *(boolean, optional)*
|
|
68
|
+
- `requiredPublicationStatus` *(string, optional, enum: `committed`, `pushed`, `published`, `deployed`)*
|
|
69
|
+
- `requirements` *(array<string or requirement>, optional)*
|
|
70
|
+
- `successCriteria` *(array<string or requirement>, required)*
|
|
71
|
+
*requirement items:*
|
|
72
|
+
- `id` *(string, optional, minLength: 1)*
|
|
73
|
+
- `text` *(string, required, minLength: 1)*
|
|
74
|
+
- `type` *(string, optional, enum: `PRODUCT`, `VERIFICATION`, `LIFECYCLE`, `PUBLICATION`, `PRODUCTION_READINESS`)*
|
|
75
|
+
- `operator` *(string, optional, enum: `SINGLE`, `ALL`)*
|
|
76
|
+
- `requiredEvidenceKind` *(string, optional, enum: `OBSERVED`, `INFERRED`, `NOT_VERIFIED`, `BLOCKED`, `HYPOTHESIS`)*
|
|
77
|
+
- `lifecycleOwned` *(boolean, optional)*
|
|
78
|
+
- `terminalOwned` *(boolean, optional)*
|
|
79
|
+
- `mixedTerminal` *(boolean, optional)*
|
|
80
|
+
- `requiredPublicationStatus` *(string, optional, enum: `committed`, `pushed`, `published`, `deployed`)*
|
|
81
|
+
- `requirements` *(array<string or requirement>, optional)*
|
|
82
|
+
- `stopConditions` *(array<string>, required)*
|
|
83
|
+
- `unresolvedDecisions` *(array<string>, required)*
|
|
84
|
+
- `sourceRefs` *(array<string>, required)*
|
|
85
|
+
|
|
86
|
+
<!-- END FORGELOOP GENERATED: schema:current-contract -->
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 2.2 `task-state/<taskKey>/routing-result.json`
|
|
91
|
+
|
|
92
|
+
<!-- forgeloop-doc: schema=routing-result artifact=.forgeloop/task-state/<task-key>/routing-result.json -->
|
|
93
|
+
|
|
94
|
+
The deterministic result of routing task signals against the engineering guide router.
|
|
95
|
+
|
|
96
|
+
#### Canonical Fields
|
|
97
|
+
|
|
98
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:routing-result -->
|
|
99
|
+
|
|
100
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
101
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
102
|
+
- `contractFingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
103
|
+
- `input` *(object, required)*
|
|
104
|
+
- `primary` *(string or null, required)*
|
|
105
|
+
- `guides` *(array<string>, required)*
|
|
106
|
+
- `reasons` *(object, required)*
|
|
107
|
+
- `excluded` *(object, required)*
|
|
108
|
+
|
|
109
|
+
<!-- END FORGELOOP GENERATED: schema:routing-result -->
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### 2.3 `task-state/<taskKey>/preflight.json`
|
|
114
|
+
|
|
115
|
+
<!-- forgeloop-doc: schema=preflight artifact=.forgeloop/task-state/<task-key>/preflight.json -->
|
|
116
|
+
|
|
117
|
+
Readiness attestation evaluated prior to implementation.
|
|
118
|
+
|
|
119
|
+
#### Canonical Fields
|
|
120
|
+
|
|
121
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:preflight -->
|
|
122
|
+
|
|
123
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
124
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
125
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
126
|
+
- `status` *(string, required, enum: `READY`, `BLOCKED`)*
|
|
127
|
+
- `profile` *(object, required)*
|
|
128
|
+
- `contract` *(object, required)*
|
|
129
|
+
- `routing` *(object, required)*
|
|
130
|
+
- `requiredGates` *(array<string>, required)*
|
|
131
|
+
- `satisfiedGates` *(array<string>, required)*
|
|
132
|
+
- `errors` *(array<object>, required)*
|
|
133
|
+
- `fingerprints` *(object, optional)*
|
|
134
|
+
- `sources` *(object, optional)*
|
|
135
|
+
- `policy` *(object, optional)*
|
|
136
|
+
|
|
137
|
+
<!-- END FORGELOOP GENERATED: schema:preflight -->
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 2.4 `sources.json`
|
|
142
|
+
|
|
143
|
+
<!-- forgeloop-doc: schema=source-registry artifact=.forgeloop/sources.json -->
|
|
144
|
+
|
|
145
|
+
Discovered repository facts, platforms, runtimes, and dependencies.
|
|
146
|
+
|
|
147
|
+
#### Canonical Fields
|
|
148
|
+
|
|
149
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:source-registry -->
|
|
150
|
+
|
|
151
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
152
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
153
|
+
- `sources` *(object, required)*
|
|
154
|
+
|
|
155
|
+
<!-- END FORGELOOP GENERATED: schema:source-registry -->
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### 2.5 `task-state/<taskKey>/events.ndjson`
|
|
160
|
+
|
|
161
|
+
<!-- forgeloop-doc: schema=event artifact=.forgeloop/task-state/<task-key>/events.ndjson -->
|
|
162
|
+
|
|
163
|
+
The append-only cryptographic event ledger. Each line is a single JSON event object.
|
|
164
|
+
|
|
165
|
+
#### Canonical Line Fields
|
|
166
|
+
|
|
167
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:event -->
|
|
168
|
+
|
|
169
|
+
- `seq` *(integer, required, minimum: 1)*
|
|
170
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
171
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
172
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
173
|
+
- `event` *(string, required, minLength: 1)*
|
|
174
|
+
- `at` *(string, required, minLength: 1)*
|
|
175
|
+
- `fingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
176
|
+
- `previousHash` *(string or null, required)*
|
|
177
|
+
- `hash` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
178
|
+
- `details` *(object, optional)*
|
|
179
|
+
|
|
180
|
+
<!-- END FORGELOOP GENERATED: schema:event -->
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### 2.6 `sessions/<sessionId>.json`
|
|
185
|
+
|
|
186
|
+
<!-- forgeloop-doc: schema=activation artifact=.forgeloop/sessions/<session-id>.json -->
|
|
187
|
+
|
|
188
|
+
The active harness session marker created by `forgeloop activate`.
|
|
189
|
+
|
|
190
|
+
#### Canonical Fields
|
|
191
|
+
|
|
192
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:activation -->
|
|
193
|
+
|
|
194
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
195
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
196
|
+
- `sessionId` *(string, required, minLength: 1)*
|
|
197
|
+
- `activationMarker` *(string, required, minLength: 1)*
|
|
198
|
+
- `createdAt` *(string, required, minLength: 1)*
|
|
199
|
+
|
|
200
|
+
<!-- END FORGELOOP GENERATED: schema:activation -->
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 2.7 `config.json`
|
|
205
|
+
|
|
206
|
+
<!-- forgeloop-doc: schema=config artifact=.forgeloop/config.json -->
|
|
207
|
+
|
|
208
|
+
Local ForgeLoop configuration settings and policy bindings.
|
|
209
|
+
|
|
210
|
+
#### Canonical Fields
|
|
211
|
+
|
|
212
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:config -->
|
|
213
|
+
|
|
214
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
215
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
216
|
+
- `complianceMode` *(string, required, enum: `advisory`, `standard`, `strict`)*
|
|
217
|
+
- `policy` *(string, optional, minLength: 1)*
|
|
218
|
+
- `requiredGates` *(array<string>, optional)*
|
|
219
|
+
- `requiredEvidence` *(array<string>, optional)*
|
|
220
|
+
|
|
221
|
+
<!-- END FORGELOOP GENERATED: schema:config -->
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
### 2.8 `task-state/<taskKey>/gates/<gate>.json`
|
|
226
|
+
|
|
227
|
+
<!-- forgeloop-doc: schema=gate artifact=.forgeloop/task-state/<task-key>/gates/<gate>.json -->
|
|
228
|
+
|
|
229
|
+
Pre-implementation gate approval artifact recording decisions, bound artifact hashes, and evidence.
|
|
230
|
+
|
|
231
|
+
#### Canonical Fields
|
|
232
|
+
|
|
233
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:gate -->
|
|
234
|
+
|
|
235
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
236
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
237
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
238
|
+
- `gate` *(string, required, minLength: 1)*
|
|
239
|
+
- `status` *(string, required, enum: `satisfied`, `unverified`, `blocked`)*
|
|
240
|
+
- `requiredBy` *(array<string>, required)*
|
|
241
|
+
- `artifacts` *(array<object>, required)*
|
|
242
|
+
- `path` *(string, required, minLength: 1)*
|
|
243
|
+
- `sha256` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
244
|
+
- `decisions` *(array<string>, required)*
|
|
245
|
+
- `unknowns` *(array<string>, required)*
|
|
246
|
+
- `approvedAssumptions` *(array<string>, required)*
|
|
247
|
+
- `evidence` *(array<object>, required)*
|
|
248
|
+
|
|
249
|
+
<!-- END FORGELOOP GENERATED: schema:gate -->
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
### 2.9 `task-state/<taskKey>/work-state.json`
|
|
254
|
+
|
|
255
|
+
<!-- forgeloop-doc: schema=work-state artifact=.forgeloop/task-state/<task-key>/work-state.json -->
|
|
256
|
+
|
|
257
|
+
The canonical, authoritative lifecycle work state.
|
|
258
|
+
|
|
259
|
+
#### Canonical Fields
|
|
260
|
+
|
|
261
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:work-state -->
|
|
262
|
+
|
|
263
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
264
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
265
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
266
|
+
- `contractFingerprint` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
267
|
+
- `routeFingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
268
|
+
- `repositoryFingerprint` *(object, required)*
|
|
269
|
+
- `branch` *(string or null, required)*
|
|
270
|
+
- `head` *(string or null, required)*
|
|
271
|
+
- `phase` *(string, required, enum: `RECEIVED`, `DISCOVERING`, `CONTRACT_READY`, `ROUTED`, `DESIGNING`, `PLANNED`, `EXECUTING`, `VERIFYING`, `DIAGNOSING`, `CORRECTING`, `REVIEWING`, `COMPLETE`, `BLOCKED`)*
|
|
272
|
+
- `selectedGuides` *(array<string>, required)*
|
|
273
|
+
- `requiredGates` *(array<string>, optional)*
|
|
274
|
+
- `satisfiedGates` *(array<string>, optional)*
|
|
275
|
+
- `complianceMode` *(string, optional, enum: `advisory`, `standard`, `strict`)*
|
|
276
|
+
- `completedSteps` *(array<string>, required)*
|
|
277
|
+
- `pendingSteps` *(array<string>, required)*
|
|
278
|
+
- `requiredArtifacts` *(array<object>, optional)*
|
|
279
|
+
- `path` *(string, required, minLength: 1)*
|
|
280
|
+
- `sha256` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
281
|
+
- `checks` *(array<object>, required)*
|
|
282
|
+
- `failures` *(array<object>, required)*
|
|
283
|
+
- `blockers` *(array<object>, required)*
|
|
284
|
+
- `lastUpdated` *(string, required, minLength: 1)*
|
|
285
|
+
- `previousPhase` *(string, optional)*
|
|
286
|
+
- `diagnosedHypothesis` *(string, optional, minLength: 1)*
|
|
287
|
+
- `verificationEvidence` *(array<object>, optional)*
|
|
288
|
+
- `evidenceCoverage` *(array<object>, optional)*
|
|
289
|
+
- `publicationStatus` *(string, optional, enum: `not-published`, `local-only`, `committed`, `pushed`, `published`, `deployed`)*
|
|
290
|
+
- `verificationCycle` *(integer, optional, minimum: 1)*
|
|
291
|
+
- `lastCompletionAttempt` *(object, optional)*
|
|
292
|
+
- `status` *(string, required, const: `REJECTED`)*
|
|
293
|
+
- `reasonCodes` *(array<string>, required)*
|
|
294
|
+
- `missingRequirementIds` *(array<string>, required)*
|
|
295
|
+
- `verificationCycle` *(integer, required, minimum: 1)*
|
|
296
|
+
- `stateFingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
297
|
+
- `receiptFingerprint` *(string or null, optional)*
|
|
298
|
+
- `timestamp` *(string, required, minLength: 1)*
|
|
299
|
+
|
|
300
|
+
<!-- END FORGELOOP GENERATED: schema:work-state -->
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
### 2.10 `task-state/<taskKey>/continuity.json`
|
|
305
|
+
|
|
306
|
+
<!-- forgeloop-doc: schema=continuity artifact=.forgeloop/task-state/<task-key>/continuity.json -->
|
|
307
|
+
|
|
308
|
+
Cross-harness non-evidence handoff notes.
|
|
309
|
+
|
|
310
|
+
#### Canonical Fields
|
|
311
|
+
|
|
312
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:continuity -->
|
|
313
|
+
|
|
314
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
315
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
316
|
+
- `taskId` *(string, required, minLength: 1, maxLength: 128)*
|
|
317
|
+
- `workStateFingerprint` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
318
|
+
- `contractFingerprint` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
319
|
+
- `phase` *(string, required, minLength: 1)*
|
|
320
|
+
- `verificationCycle` *(integer, optional, minimum: 1)*
|
|
321
|
+
- `repositoryFingerprint` *(object, required)*
|
|
322
|
+
- `branch` *(string or null, required)*
|
|
323
|
+
- `head` *(string or null, required)*
|
|
324
|
+
- `updatedAt` *(string, required, minLength: 1)*
|
|
325
|
+
- `currentFocus` *(workItem, optional)*
|
|
326
|
+
- `id` *(string, required, minLength: 1, maxLength: 128)*
|
|
327
|
+
- `summary` *(string, required, minLength: 1, maxLength: 1000)*
|
|
328
|
+
- `remainingWork` *(array<workItem>, required, maxItems: 40)*
|
|
329
|
+
- `id` *(string, required, minLength: 1, maxLength: 128)*
|
|
330
|
+
- `summary` *(string, required, minLength: 1, maxLength: 1000)*
|
|
331
|
+
- `knownIssues` *(array<workItem>, required, maxItems: 40)*
|
|
332
|
+
- `id` *(string, required, minLength: 1, maxLength: 128)*
|
|
333
|
+
- `summary` *(string, required, minLength: 1, maxLength: 1000)*
|
|
334
|
+
- `changedAreas` *(array<string>, required, maxItems: 80)*
|
|
335
|
+
- `inspectFirst` *(array<string>, required, maxItems: 40)*
|
|
336
|
+
- `resumeNote` *(string, optional, minLength: 1, maxLength: 2000)*
|
|
337
|
+
|
|
338
|
+
<!-- END FORGELOOP GENERATED: schema:continuity -->
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
### 2.11 `task-state/<taskKey>/execution-receipt.json`
|
|
343
|
+
|
|
344
|
+
<!-- forgeloop-doc: schema=execution-receipt artifact=.forgeloop/task-state/<task-key>/execution-receipt.json -->
|
|
345
|
+
|
|
346
|
+
The cryptographically compiled verification receipt required for task completion.
|
|
347
|
+
|
|
348
|
+
#### Canonical Fields
|
|
349
|
+
|
|
350
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:execution-receipt -->
|
|
351
|
+
|
|
352
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
353
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
354
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
355
|
+
- `contractFingerprint` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
356
|
+
- `routeFingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
357
|
+
- `stateFingerprint` *(string, optional, pattern: `^[a-f0-9]{64}$`)*
|
|
358
|
+
- `verificationCycle` *(integer, optional, minimum: 1)*
|
|
359
|
+
- `status` *(string, optional, enum: `in-progress`, `complete`, `blocked`, `complete-with-concerns`)*
|
|
360
|
+
- `taskStatus` *(string, optional, enum: `in-progress`, `complete`, `blocked`, `incomplete`)*
|
|
361
|
+
- `verificationStatus` *(string, optional, enum: `valid`, `invalid`, `not-verified`, `blocked`)*
|
|
362
|
+
- `publicationStatus` *(string, optional, enum: `not-published`, `local-only`, `committed`, `pushed`, `published`, `deployed`)*
|
|
363
|
+
- `productionReadiness` *(string, optional, enum: `ready`, `not-verified`, `blocked`)*
|
|
364
|
+
- `selectedGuides` *(array<string>, required)*
|
|
365
|
+
- `changedPaths` *(array<string>, required)*
|
|
366
|
+
- `checks` *(array<object>, required)*
|
|
367
|
+
- `evidence` *(array<object>, optional)*
|
|
368
|
+
- `schemaVersion` *(number, optional, const: 1)*
|
|
369
|
+
- `kind` *(string, required, enum: `OBSERVED`, `INFERRED`, `NOT_VERIFIED`, `BLOCKED`)*
|
|
370
|
+
- `source` *(string, required, minLength: 1)*
|
|
371
|
+
- `result` *(string, required, minLength: 1)*
|
|
372
|
+
- `verificationCycle` *(integer, optional, minimum: 1)*
|
|
373
|
+
- `details` *(object, optional)*
|
|
374
|
+
- `evidenceCoverage` *(array<object>, optional)*
|
|
375
|
+
- `review` *(object, required)*
|
|
376
|
+
- `limitations` *(array<string>, required)*
|
|
377
|
+
- `publication` *(object, required)*
|
|
378
|
+
- `committed` *(boolean, required)*
|
|
379
|
+
- `pushed` *(boolean, required)*
|
|
380
|
+
- `pullRequest` *(string or null, required)*
|
|
381
|
+
- `deployed` *(boolean, required)*
|
|
382
|
+
|
|
383
|
+
<!-- END FORGELOOP GENERATED: schema:execution-receipt -->
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
### 2.12 `task-state/<taskKey>/executions/exec-<id>.json`
|
|
388
|
+
|
|
389
|
+
<!-- forgeloop-doc: schema=execution artifact=.forgeloop/task-state/<task-key>/executions/exec-<id>.json -->
|
|
390
|
+
|
|
391
|
+
Attested command execution provenance artifact generated by `forgeloop run-check`.
|
|
392
|
+
|
|
393
|
+
#### Canonical Fields
|
|
394
|
+
|
|
395
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:execution -->
|
|
396
|
+
|
|
397
|
+
- `schemaVersion` *(number, required, const: 1)*
|
|
398
|
+
- `protocolVersion` *(number, required, const: 1)*
|
|
399
|
+
- `executionId` *(string, required, minLength: 1)*
|
|
400
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
401
|
+
- `checkId` *(string, required, minLength: 1)*
|
|
402
|
+
- `requirement` *(string, required, minLength: 1)*
|
|
403
|
+
- `verificationCycle` *(integer, required, minimum: 1)*
|
|
404
|
+
- `kind` *(string, required, const: `COMMAND_EXECUTION`)*
|
|
405
|
+
- `argv` *(array<string>, required, minItems: 1)*
|
|
406
|
+
- `cwd` *(string, required, minLength: 1)*
|
|
407
|
+
- `resolution` *(object, required)*
|
|
408
|
+
- `resolutionMode` *(string, required, minLength: 1)*
|
|
409
|
+
- `mayInstall` *(boolean, required)*
|
|
410
|
+
- `installer` *(string or null, required)*
|
|
411
|
+
- `tool` *(string or null, required)*
|
|
412
|
+
- `dispatch` *(object, optional)*
|
|
413
|
+
- `kind` *(string, optional, minLength: 1)*
|
|
414
|
+
- `scriptName` *(string, optional, minLength: 1)*
|
|
415
|
+
- `startedAt` *(string, required, minLength: 1)*
|
|
416
|
+
- `finishedAt` *(string, required, minLength: 1)*
|
|
417
|
+
- `status` *(string, required, enum: `passed`, `failed`)*
|
|
418
|
+
- `exitCode` *(integer or null, required)*
|
|
419
|
+
|
|
420
|
+
<!-- END FORGELOOP GENERATED: schema:execution -->
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
### 2.13 `task-state/<taskKey>/task.json`
|
|
425
|
+
|
|
426
|
+
<!-- forgeloop-doc: schema=task-descriptor artifact=.forgeloop/task-state/<task-key>/task.json -->
|
|
427
|
+
|
|
428
|
+
Canonical task descriptor declaring task identity, key, timestamps, and write claims.
|
|
429
|
+
|
|
430
|
+
#### Canonical Fields
|
|
431
|
+
|
|
432
|
+
<!-- BEGIN FORGELOOP GENERATED: schema:task-descriptor -->
|
|
433
|
+
|
|
434
|
+
- `schemaVersion` *(integer, required, const: 1)*
|
|
435
|
+
- `protocolVersion` *(integer, required, const: 1)*
|
|
436
|
+
- `taskId` *(string, required, minLength: 1)*
|
|
437
|
+
- `taskKey` *(string, required, pattern: `^[a-f0-9]{64}$`)*
|
|
438
|
+
- `createdAt` *(string, required)*
|
|
439
|
+
- `updatedAt` *(string, required)*
|
|
440
|
+
- `writeClaims` *(array<string>, required)*
|
|
441
|
+
|
|
442
|
+
<!-- END FORGELOOP GENERATED: schema:task-descriptor -->
|