@abelxiaoxing/cadence 1.3.0 → 1.4.1

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 (76) hide show
  1. package/README.md +172 -13
  2. package/agents/design-explorer.md +17 -11
  3. package/agents/diagnosis-worker.md +9 -1
  4. package/agents/implementation-worker.md +3 -1
  5. package/config/plan-draft.example.json +122 -0
  6. package/config/plan-draft.multiple-tasks.example.json +345 -0
  7. package/package.json +9 -5
  8. package/prompts/abel-design.md +141 -38
  9. package/prompts/abel-diagnose.md +10 -1
  10. package/prompts/abel-implement.md +118 -20
  11. package/prompts/abel-init.md +9 -2
  12. package/src/activity-contracts.ts +82 -0
  13. package/src/apply-transaction.ts +16 -14
  14. package/src/artifact-store.ts +17 -0
  15. package/src/candidate-artifact.ts +143 -0
  16. package/src/candidate-patch.ts +33 -12
  17. package/src/candidate-workspace.ts +74 -0
  18. package/src/canonical.ts +16 -0
  19. package/src/change-contract-schema.ts +191 -0
  20. package/src/change-contract.ts +273 -0
  21. package/src/change-verification.ts +896 -0
  22. package/src/child-model.ts +129 -0
  23. package/src/child-session.ts +296 -328
  24. package/src/contracts.ts +325 -109
  25. package/src/control-contracts.ts +51 -1
  26. package/src/delivery-compiler.ts +241 -141
  27. package/src/delivery-revision.ts +42 -0
  28. package/src/design-control.ts +182 -15
  29. package/src/design-diagnostics.ts +150 -0
  30. package/src/design-journal.ts +216 -72
  31. package/src/durable-contracts.ts +210 -0
  32. package/src/durable-workflow.ts +963 -0
  33. package/src/evidence-draft.ts +122 -0
  34. package/src/implement-graph.ts +14 -16
  35. package/src/implement-plan.ts +70 -0
  36. package/src/index.ts +341 -1405
  37. package/src/isolation-backend.ts +84 -23
  38. package/src/model-source.ts +22 -0
  39. package/src/package-candidate.ts +224 -0
  40. package/src/package-delivery.ts +486 -0
  41. package/src/package-verification.ts +509 -0
  42. package/src/package-workflow.ts +253 -0
  43. package/src/packet-runtime.ts +27 -48
  44. package/src/parent-provider.ts +86 -198
  45. package/src/phase-execution.ts +2248 -0
  46. package/src/pi-adapter.ts +19 -0
  47. package/src/plan-draft-summary.ts +146 -0
  48. package/src/plan-draft.ts +493 -0
  49. package/src/route-policy.ts +1 -11
  50. package/src/run-state.ts +4 -16
  51. package/src/run-store.ts +5 -144
  52. package/src/scoped-grep-worker.mjs +23 -0
  53. package/src/scoped-tools.ts +312 -116
  54. package/src/sqlite-schema.ts +171 -0
  55. package/src/storage-schema.ts +352 -0
  56. package/src/subagent-activity.ts +46 -67
  57. package/src/submit-tool.ts +40 -61
  58. package/src/task-ledger.ts +14 -55
  59. package/src/transport-budget.ts +32 -0
  60. package/src/verification-capability.ts +298 -102
  61. package/src/verification-environment.ts +213 -0
  62. package/src/verification-identity.ts +77 -0
  63. package/src/worker-broker.ts +134 -91
  64. package/src/workflow-engine.ts +28 -8285
  65. package/src/workflow-policy.ts +1388 -0
  66. package/src/workflow-recovery-policy.ts +95 -0
  67. package/src/workflow-scheduling.ts +105 -0
  68. package/src/workflow-state-machine.ts +4086 -0
  69. package/src/workflow-status.ts +384 -0
  70. package/src/workspace-io-entry.mjs +58 -0
  71. package/src/workspace-io-worker.mjs +991 -0
  72. package/src/workspace-io.ts +84 -0
  73. package/src/workspace-store.ts +125 -19
  74. package/skills/abel-workflow/SKILL.md +0 -205
  75. package/src/empty-resource-loader.ts +0 -38
  76. package/src/parent-payload-bridge.ts +0 -523
@@ -0,0 +1,345 @@
1
+ {
2
+ "changeContract": {
3
+ "goal": "Fix integer addition and doubling through add",
4
+ "acceptance": [
5
+ {
6
+ "id": "integer-addition",
7
+ "statement": "add(2, 3) returns 5 and add(0, 0) remains 0",
8
+ "verification": {
9
+ "kind": "static-check",
10
+ "id": "add-acceptance",
11
+ "runner": {
12
+ "kind": "node",
13
+ "script": "test/add.test.mjs"
14
+ },
15
+ "args": [],
16
+ "classification": "expected-green"
17
+ }
18
+ },
19
+ {
20
+ "id": "integer-double",
21
+ "statement": "double(3) returns 6 via add(3, 3)",
22
+ "verification": {
23
+ "kind": "steps",
24
+ "id": "double-green",
25
+ "classification": "expected-green",
26
+ "steps": [
27
+ {
28
+ "kind": "static-check",
29
+ "id": "double-green-add",
30
+ "runner": {
31
+ "kind": "node",
32
+ "script": "test/add.test.mjs"
33
+ },
34
+ "args": [],
35
+ "classification": "expected-green"
36
+ },
37
+ {
38
+ "kind": "static-check",
39
+ "id": "double-green-own",
40
+ "runner": {
41
+ "kind": "node",
42
+ "script": "test/double.test.mjs"
43
+ },
44
+ "args": [],
45
+ "classification": "expected-green"
46
+ }
47
+ ]
48
+ }
49
+ }
50
+ ],
51
+ "constraints": [
52
+ {
53
+ "id": "no-dependencies",
54
+ "statement": "Keep the existing function signature and add no dependencies"
55
+ }
56
+ ],
57
+ "policy": {
58
+ "writeRoots": [
59
+ "src/add.mjs",
60
+ "test/add.test.mjs",
61
+ "src/double.mjs",
62
+ "test/double.test.mjs"
63
+ ],
64
+ "dependencies": [],
65
+ "verificationModes": ["behavior"]
66
+ }
67
+ },
68
+ "changeId": "fix-add-and-double",
69
+ "tasks": [
70
+ {
71
+ "taskId": "fix-add",
72
+ "dependsOn": [],
73
+ "objective": "Preserve the existing zero assertion; add a failing positive-integer assertion with [ADD:positive-integers], then fix addition",
74
+ "context": {
75
+ "agents": "No AGENTS.md in this example consumer; use the actual repository instructions when adapting",
76
+ "contract": "Gate A integer-addition acceptance; only src/add.mjs and test/add.test.mjs may change"
77
+ },
78
+ "roots": ["."],
79
+ "phases": {
80
+ "red": {
81
+ "write": ["test/add.test.mjs"],
82
+ "delete": [],
83
+ "verification": {
84
+ "use": "add-test",
85
+ "expectedFailure": "[ADD:positive-integers]"
86
+ }
87
+ },
88
+ "green": {
89
+ "write": ["src/add.mjs"],
90
+ "delete": [],
91
+ "verification": {
92
+ "use": "add-test"
93
+ }
94
+ }
95
+ },
96
+ "affectedVerification": {
97
+ "use": "add-test"
98
+ },
99
+ "repairVerification": {
100
+ "use": "add-test"
101
+ },
102
+ "scheduling": {
103
+ "conflicts": [],
104
+ "resources": []
105
+ },
106
+ "agents": {
107
+ "impact": "none"
108
+ },
109
+ "approvedDependencies": [],
110
+ "impactClosure": {
111
+ "changedSurfaces": ["none"],
112
+ "searchEvidence": [
113
+ "Example consumer: src/add.mjs exports add; test/add.test.mjs is its only caller and existing test"
114
+ ],
115
+ "relatedTests": [
116
+ {
117
+ "path": "test/add.test.mjs",
118
+ "evidence": "Existing add(0, 0) assertion passes; preserve it while adding the positive-integer regression"
119
+ }
120
+ ],
121
+ "affectedSuite": ["test/add.test.mjs"]
122
+ },
123
+ "read": ["package.json", "src/add.mjs", "test/add.test.mjs"]
124
+ },
125
+ {
126
+ "taskId": "fix-double",
127
+ "dependsOn": ["fix-add"],
128
+ "objective": "Keep double(0) passing; add the [DOUBLE:positive-integers] failure then use add(value, value)",
129
+ "context": {
130
+ "agents": "No AGENTS.md in this example consumer; use the actual repository instructions when adapting",
131
+ "contract": "Gate A integer-double acceptance; depends on corrected addition"
132
+ },
133
+ "roots": ["."],
134
+ "phases": {
135
+ "red": {
136
+ "write": ["test/double.test.mjs"],
137
+ "delete": [],
138
+ "verification": {
139
+ "kind": "steps",
140
+ "id": "double-red",
141
+ "classification": "expected-red",
142
+ "steps": [
143
+ {
144
+ "kind": "static-check",
145
+ "id": "double-red-add",
146
+ "runner": {
147
+ "kind": "node",
148
+ "script": "test/add.test.mjs"
149
+ },
150
+ "args": [],
151
+ "classification": "expected-green"
152
+ },
153
+ {
154
+ "kind": "static-check",
155
+ "id": "double-red-own",
156
+ "runner": {
157
+ "kind": "node",
158
+ "script": "test/double.test.mjs"
159
+ },
160
+ "args": [],
161
+ "classification": "expected-red",
162
+ "expectedFailure": "[DOUBLE:positive-integers]"
163
+ }
164
+ ]
165
+ }
166
+ },
167
+ "green": {
168
+ "write": ["src/double.mjs"],
169
+ "delete": [],
170
+ "verification": {
171
+ "kind": "steps",
172
+ "id": "double-green",
173
+ "classification": "expected-green",
174
+ "steps": [
175
+ {
176
+ "kind": "static-check",
177
+ "id": "double-green-add",
178
+ "runner": {
179
+ "kind": "node",
180
+ "script": "test/add.test.mjs"
181
+ },
182
+ "args": [],
183
+ "classification": "expected-green"
184
+ },
185
+ {
186
+ "kind": "static-check",
187
+ "id": "double-green-own",
188
+ "runner": {
189
+ "kind": "node",
190
+ "script": "test/double.test.mjs"
191
+ },
192
+ "args": [],
193
+ "classification": "expected-green"
194
+ }
195
+ ]
196
+ }
197
+ }
198
+ },
199
+ "affectedVerification": {
200
+ "kind": "steps",
201
+ "id": "double-affectedVerification",
202
+ "classification": "expected-green",
203
+ "steps": [
204
+ {
205
+ "kind": "static-check",
206
+ "id": "double-green-add-affectedVerification",
207
+ "runner": {
208
+ "kind": "node",
209
+ "script": "test/add.test.mjs"
210
+ },
211
+ "args": [],
212
+ "classification": "expected-green"
213
+ },
214
+ {
215
+ "kind": "static-check",
216
+ "id": "double-green-own-affectedVerification",
217
+ "runner": {
218
+ "kind": "node",
219
+ "script": "test/double.test.mjs"
220
+ },
221
+ "args": [],
222
+ "classification": "expected-green"
223
+ }
224
+ ]
225
+ },
226
+ "repairVerification": {
227
+ "kind": "steps",
228
+ "id": "double-repairVerification",
229
+ "classification": "expected-green",
230
+ "steps": [
231
+ {
232
+ "kind": "static-check",
233
+ "id": "double-green-add-repairVerification",
234
+ "runner": {
235
+ "kind": "node",
236
+ "script": "test/add.test.mjs"
237
+ },
238
+ "args": [],
239
+ "classification": "expected-green"
240
+ },
241
+ {
242
+ "kind": "static-check",
243
+ "id": "double-green-own-repairVerification",
244
+ "runner": {
245
+ "kind": "node",
246
+ "script": "test/double.test.mjs"
247
+ },
248
+ "args": [],
249
+ "classification": "expected-green"
250
+ }
251
+ ]
252
+ },
253
+ "scheduling": {
254
+ "conflicts": [],
255
+ "resources": []
256
+ },
257
+ "agents": {
258
+ "impact": "none"
259
+ },
260
+ "approvedDependencies": [],
261
+ "impactClosure": {
262
+ "changedSurfaces": ["none"],
263
+ "searchEvidence": [
264
+ "Example consumer: double imports add; each has an existing zero assertion; all.test.mjs imports both test files"
265
+ ],
266
+ "relatedTests": [
267
+ {
268
+ "path": "test/add.test.mjs",
269
+ "evidence": "Producer task owns the addition regression, checked before the double regression"
270
+ },
271
+ {
272
+ "path": "test/double.test.mjs",
273
+ "evidence": "Preserve the existing double(0) assertion while adding double(3)"
274
+ }
275
+ ],
276
+ "affectedSuite": ["test/add.test.mjs", "test/double.test.mjs"]
277
+ },
278
+ "read": [
279
+ "package.json",
280
+ "src/add.mjs",
281
+ "test/add.test.mjs",
282
+ "src/double.mjs",
283
+ "test/double.test.mjs"
284
+ ]
285
+ }
286
+ ],
287
+ "outputs": [
288
+ {
289
+ "id": "add-regression",
290
+ "path": "test/add.test.mjs",
291
+ "producer": {
292
+ "taskId": "fix-add",
293
+ "phase": "red"
294
+ },
295
+ "postcondition": "regular-file"
296
+ }
297
+ ],
298
+ "verification": {
299
+ "baseline": {
300
+ "fullSuite": {
301
+ "use": "full-suite"
302
+ }
303
+ },
304
+ "change": {
305
+ "fullSuite": {
306
+ "use": "full-suite"
307
+ },
308
+ "postApply": {
309
+ "use": "full-suite"
310
+ }
311
+ },
312
+ "artifactCorrection": {
313
+ "maxAttempts": 2
314
+ },
315
+ "repair": {
316
+ "maxAttempts": 1
317
+ }
318
+ },
319
+ "verificationDefinitions": {
320
+ "add-test": {
321
+ "kind": "static-check",
322
+ "runner": {
323
+ "kind": "node",
324
+ "script": "test/add.test.mjs"
325
+ },
326
+ "args": []
327
+ },
328
+ "full-suite": {
329
+ "kind": "static-check",
330
+ "runner": {
331
+ "kind": "node",
332
+ "script": "test/all.test.mjs"
333
+ },
334
+ "args": []
335
+ },
336
+ "double-test": {
337
+ "kind": "static-check",
338
+ "runner": {
339
+ "kind": "node",
340
+ "script": "test/double.test.mjs"
341
+ },
342
+ "args": []
343
+ }
344
+ }
345
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abelxiaoxing/cadence",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "Four explicit Abel workflow prompts with stage-isolated design and diagnosis, durable resumable implementation, and three package-owned professional Agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -40,16 +40,19 @@
40
40
  "pack:check": "node scripts/pack-check.mjs",
41
41
  "traceability:check": "node scripts/traceability-check.mjs",
42
42
  "verify": "bun run check && bun run lint && bun run test && bun run pack:check",
43
- "check": "node scripts/check-syntax.mjs && tsc --noEmit",
43
+ "check": "node scripts/check-syntax.mjs && bun scripts/build-workspace-io.mjs --check && tsc --noEmit",
44
44
  "lint": "biome check . && rumdl check .",
45
45
  "test": "vitest run",
46
46
  "test:target": "vitest run",
47
- "check:agents": "node scripts/check-agents.mjs"
47
+ "check:agents": "node scripts/check-agents.mjs",
48
+ "build:workspace-io": "bun scripts/build-workspace-io.mjs",
49
+ "eval:workflow": "node --experimental-strip-types scripts/evaluate-workflow.mjs"
48
50
  },
49
51
  "peerDependencies": {
50
52
  "@earendil-works/pi-coding-agent": "*",
51
53
  "@earendil-works/pi-tui": "*",
52
- "typebox": "*"
54
+ "typebox": "*",
55
+ "@earendil-works/pi-ai": "*"
53
56
  },
54
57
  "devDependencies": {
55
58
  "@biomejs/biome": "^2.4.16",
@@ -58,7 +61,8 @@
58
61
  "@types/node": "^22.15.3",
59
62
  "rumdl": "^0.2.10",
60
63
  "typescript": "^6.0.3",
61
- "vitest": "^4.1.8"
64
+ "vitest": "^4.1.8",
65
+ "@earendil-works/pi-ai": "0.84.3"
62
66
  },
63
67
  "repository": {
64
68
  "type": "git",