@ixo/topic-protocol 1.0.0-rc.1 → 1.0.0-rc.2

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 (40) hide show
  1. package/README.md +1 -1
  2. package/dist/schemas/topic-contract-body.schema.json +12 -21
  3. package/dist/schemas/topic-contract-state.schema.json +18 -93
  4. package/dist/schemas/topic-operation.schema.json +2 -2
  5. package/dist/schemas/topic-root.schema.json +5 -1
  6. package/dist/schemas/topic-shape.schema.json +5 -4
  7. package/dist/src/contracts/schemas.d.ts +394 -75
  8. package/dist/src/contracts/topic-contract.d.ts +15 -1
  9. package/dist/src/contracts/topic-contract.js.map +1 -1
  10. package/dist/src/index.d.ts +4 -4
  11. package/dist/src/index.js +1 -1
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/projector/payload.d.ts +34 -0
  14. package/dist/src/projector/payload.js +93 -2
  15. package/dist/src/projector/payload.js.map +1 -1
  16. package/dist/src/projector/state.js +54 -0
  17. package/dist/src/projector/state.js.map +1 -1
  18. package/dist/src/projector/types.d.ts +44 -2
  19. package/dist/src/projector/types.js.map +1 -1
  20. package/dist/src/shapes/now.d.ts +2 -2
  21. package/dist/src/shapes/now.js +38 -19
  22. package/dist/src/shapes/now.js.map +1 -1
  23. package/dist/src/shapes/progress.d.ts +3 -3
  24. package/dist/src/shapes/progress.js +391 -77
  25. package/dist/src/shapes/progress.js.map +1 -1
  26. package/dist/src/shapes/recipes.js +102 -53
  27. package/dist/src/shapes/recipes.js.map +1 -1
  28. package/dist/src/shapes/resolver.js +13 -3
  29. package/dist/src/shapes/resolver.js.map +1 -1
  30. package/dist/src/shapes/state.d.ts +72 -20
  31. package/dist/src/shapes/state.js +1 -0
  32. package/dist/src/shapes/state.js.map +1 -1
  33. package/dist/src/shapes/types.d.ts +155 -4
  34. package/dist/src/shapes/types.js +3 -1
  35. package/dist/src/shapes/types.js.map +1 -1
  36. package/package.json +1 -1
  37. package/recipes/agent-delivery.json +166 -33
  38. package/recipes/registry.json +6 -6
  39. package/recipes/research-brief.json +148 -30
  40. package/recipes/verified-work-payment.json +172 -34
@@ -1,5 +1,5 @@
1
1
  export declare const SHAPE_PHASES: readonly ["forming", "working", "verifying", "deciding", "effecting", "settling", "complete", "dormant"];
2
- export declare const SHAPE_CONDITIONS: readonly ["on-track", "needs-input", "needs-acceptance", "waiting", "blocked", "failed", "disputed", "degraded"];
2
+ export declare const SHAPE_CONDITIONS: readonly ["on-track", "needs-input", "needs-confirmation", "review-due", "expired", "waiting", "blocked", "failed", "disputed", "degraded"];
3
3
  export declare const SHAPE_ATTENTION_STATES: readonly ["none", "viewer-action-required", "viewer-review-required", "viewer-confirmation-required"];
4
4
  export declare const BASE_RECIPE_CODES: readonly ["project", "flow", "proposal", "evaluation", "claims", "research", "discussion", "incident"];
5
5
  export declare const TOPIC_RECIPE_CODES: readonly ["research-brief", "agent-delivery", "verified-work-payment"];
@@ -15,7 +15,56 @@ export type ShapeEvidenceRequirementV1 = {
15
15
  readonly type: string;
16
16
  readonly finality?: "observed" | "accepted" | "verified" | "final";
17
17
  };
18
- export type ShapeGateV1 = {
18
+ export type TopicSubjectRefV1 = {
19
+ readonly kind: "actor";
20
+ readonly id: string;
21
+ } | {
22
+ readonly kind: "role";
23
+ readonly id: string;
24
+ };
25
+ export interface TopicConfirmationPolicyV1 {
26
+ readonly mode: "any" | "all" | "threshold";
27
+ readonly subjects: readonly TopicSubjectRefV1[];
28
+ readonly threshold?: number;
29
+ }
30
+ export interface TopicAssentPolicyV1 {
31
+ readonly mode: "any" | "all" | "threshold";
32
+ readonly signatories: readonly TopicSubjectRefV1[];
33
+ readonly threshold?: number;
34
+ }
35
+ export interface TopicDisputePolicyV1 {
36
+ readonly resolvers?: readonly TopicSubjectRefV1[];
37
+ readonly process?: {
38
+ readonly kind: "flow" | "resource";
39
+ readonly id: string;
40
+ readonly label?: string;
41
+ };
42
+ }
43
+ export interface TopicActivationPolicyV1 {
44
+ /** Drafts may leave any activation detail unresolved; effectiveness may not. */
45
+ readonly editors?: readonly TopicSubjectRefV1[];
46
+ readonly confirmation?: TopicConfirmationPolicyV1;
47
+ readonly lifecycle?: {
48
+ readonly effectiveAt?: string;
49
+ readonly reviewAt?: string;
50
+ readonly expiresAt?: string;
51
+ readonly onExpiry: "pause-consequential";
52
+ };
53
+ readonly dispute?: TopicDisputePolicyV1;
54
+ }
55
+ export interface ShapeRequirementPresentationV1 {
56
+ readonly code: string;
57
+ readonly labelKey: string;
58
+ readonly promptKey: string;
59
+ readonly purposeKey: string;
60
+ readonly priority: number;
61
+ readonly focusPath?: string;
62
+ readonly assignedTo?: {
63
+ readonly kind: "actor" | "role";
64
+ readonly value: string;
65
+ };
66
+ }
67
+ export type ShapeGateV1 = ({
19
68
  readonly kind: "field";
20
69
  readonly path: string;
21
70
  readonly predicate: "present" | "accepted";
@@ -41,6 +90,8 @@ export type ShapeGateV1 = {
41
90
  } | {
42
91
  readonly kind: "condition";
43
92
  readonly states: readonly ("waiting" | "blocked" | "failed" | "disputed")[];
93
+ }) & {
94
+ readonly requirement?: ShapeRequirementPresentationV1;
44
95
  };
45
96
  export interface ShapeStateDefinitionV1 {
46
97
  readonly code: string;
@@ -84,6 +135,11 @@ export interface ShapeTransitionV1 {
84
135
  readonly presentation?: {
85
136
  readonly reasonCode: string;
86
137
  readonly actionLabelKey?: string;
138
+ readonly bodyKey?: string;
139
+ readonly purposeKey?: string;
140
+ readonly unlocksKey?: string;
141
+ readonly priority?: number;
142
+ readonly focusPath?: string;
87
143
  };
88
144
  }
89
145
  export interface ShapeProgressRuleV1 {
@@ -159,6 +215,29 @@ export interface TopicProgressSourceV1 {
159
215
  readonly status?: string;
160
216
  readonly finality?: "observed" | "accepted" | "verified" | "final";
161
217
  }
218
+ export interface TopicProgressSourceV2 extends TopicProgressSourceV1 {
219
+ readonly actor?: string;
220
+ readonly contractRevision?: string;
221
+ readonly bodyHash?: `sha256:${string}`;
222
+ readonly policyDigest?: `sha256:${string}`;
223
+ readonly authorityProofRef?: string;
224
+ }
225
+ export interface TopicEvaluationTimeV1 {
226
+ readonly at: string;
227
+ readonly source: "matrix" | "server" | "system" | "client";
228
+ readonly trusted: boolean;
229
+ readonly freshUntil?: string;
230
+ }
231
+ export interface TopicDisputeV1 {
232
+ readonly id: string;
233
+ readonly status: "open" | "resolved";
234
+ readonly reasonCode: string;
235
+ readonly raisedBy: string;
236
+ readonly affectedRevision: string;
237
+ readonly resolver: TopicSubjectRefV1;
238
+ readonly process?: TopicDisputePolicyV1["process"];
239
+ readonly resolutionRef?: string;
240
+ }
162
241
  export interface TopicProgressBlockV1 {
163
242
  readonly condition: "waiting" | "blocked" | "failed" | "disputed";
164
243
  readonly sourceId: string;
@@ -198,13 +277,52 @@ export interface TopicStateTagV1 {
198
277
  export interface TopicTransitionCandidateV1 {
199
278
  readonly transition: ShapeTransitionV1;
200
279
  readonly assignedActor?: string;
280
+ readonly assignedActors?: readonly string[];
201
281
  readonly gateStatus: readonly {
202
282
  readonly gate: ShapeGateV1;
203
283
  readonly satisfied: boolean;
204
284
  }[];
205
285
  }
206
- export interface TopicProgressProjectionV1 {
207
- readonly version: 1;
286
+ export type TopicObligationKindV1 = "safety" | "input" | "confirmation" | "assent" | "transition" | "wait" | "review" | "expiry" | "dispute";
287
+ export type TopicObligationStatusV1 = "open" | "ready" | "waiting" | "blocked" | "unavailable";
288
+ export interface TopicObligationV1 {
289
+ readonly id: string;
290
+ readonly code: string;
291
+ readonly kind: TopicObligationKindV1;
292
+ readonly phase: ShapePhaseV1;
293
+ readonly status: TopicObligationStatusV1;
294
+ readonly priority: number;
295
+ readonly blocking: boolean;
296
+ readonly responsibility?: {
297
+ readonly kind: "actor" | "role";
298
+ readonly value: string;
299
+ };
300
+ readonly assignedActors: readonly string[];
301
+ readonly requiredAbility?: string;
302
+ readonly consequence: ShapeConsequenceClassV1;
303
+ readonly focusPath?: string;
304
+ readonly transitionCode?: string;
305
+ readonly command?: string;
306
+ readonly handoff?: ShapeTransitionV1["handoff"];
307
+ readonly presentation: {
308
+ readonly labelKey: string;
309
+ readonly promptKey: string;
310
+ readonly purposeKey: string;
311
+ readonly unlocksKey?: string;
312
+ };
313
+ readonly provenance: readonly string[];
314
+ }
315
+ export type TopicProgressInputV2 = Omit<TopicProgressInputV1, "sources" | "shape"> & {
316
+ readonly shape?: EffectiveTopicShapeV1;
317
+ readonly sources: readonly TopicProgressSourceV2[];
318
+ readonly contractBodyHash: `sha256:${string}`;
319
+ readonly policyDigest: `sha256:${string}`;
320
+ readonly activationPolicy?: TopicActivationPolicyV1;
321
+ readonly assentPolicy?: TopicAssentPolicyV1;
322
+ readonly evaluationTime?: TopicEvaluationTimeV1;
323
+ readonly dispute?: TopicDisputeV1;
324
+ };
325
+ interface TopicProgressProjectionCommonV1 {
208
326
  readonly topicId: string;
209
327
  readonly topicRevision: string;
210
328
  readonly contractRevision: string;
@@ -218,6 +336,16 @@ export interface TopicProgressProjectionV1 {
218
336
  readonly provenance: readonly string[];
219
337
  readonly block?: TopicProgressBlockV1;
220
338
  }
339
+ export interface TopicProgressProjectionV1 extends TopicProgressProjectionCommonV1 {
340
+ readonly version: 1;
341
+ }
342
+ export interface TopicProgressProjectionV2 extends TopicProgressProjectionCommonV1 {
343
+ readonly version: 2;
344
+ readonly obligations: readonly TopicObligationV1[];
345
+ readonly primaryObligationId?: string;
346
+ readonly evaluatedAt?: TopicEvaluationTimeV1;
347
+ readonly dispute?: TopicDisputeV1;
348
+ }
221
349
  export interface TopicViewerAuthorityV1 {
222
350
  readonly viewerId: string;
223
351
  readonly matrixWrite: boolean;
@@ -239,3 +367,26 @@ export interface TopicNowProjectionV1 {
239
367
  };
240
368
  readonly blockedOn?: TopicProgressBlockV1["target"];
241
369
  }
370
+ export type TopicObligationActionabilityV1 = "mine" | "theirs" | "unassigned" | "unauthorized" | "unavailable";
371
+ export interface TopicNowObligationV1 extends TopicObligationV1 {
372
+ readonly actionability: TopicObligationActionabilityV1;
373
+ }
374
+ export interface TopicNowProjectionV2 {
375
+ readonly version: 2;
376
+ readonly phase: ShapePhaseV1;
377
+ readonly condition: ShapeConditionV1;
378
+ readonly attention: ShapeAttentionV1;
379
+ readonly reasonCode: string;
380
+ readonly stateTags: readonly TopicStateTagV1[];
381
+ readonly transitions: readonly ShapeTransitionV1[];
382
+ readonly obligations: readonly TopicNowObligationV1[];
383
+ readonly primaryObligation?: TopicNowObligationV1;
384
+ readonly remainingCount: number;
385
+ readonly cacheKey: {
386
+ readonly topicRevision: string;
387
+ readonly contractRevision: string;
388
+ readonly shapeDigest: `sha256:${string}`;
389
+ };
390
+ readonly blockedOn?: TopicProgressBlockV1["target"];
391
+ }
392
+ export {};
@@ -11,7 +11,9 @@ export const SHAPE_PHASES = [
11
11
  export const SHAPE_CONDITIONS = [
12
12
  "on-track",
13
13
  "needs-input",
14
- "needs-acceptance",
14
+ "needs-confirmation",
15
+ "review-due",
16
+ "expired",
15
17
  "waiting",
16
18
  "blocked",
17
19
  "failed",
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shapes/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS;IACT,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU;IACV,aAAa;IACb,kBAAkB;IAClB,SAAS;IACT,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,wBAAwB;IACxB,wBAAwB;IACxB,8BAA8B;CACtB,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,MAAM;IACN,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;CACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shapes/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS;IACT,SAAS;IACT,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU;IACV,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;IACR,UAAU;IACV,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,wBAAwB;IACxB,wBAAwB;IACxB,8BAA8B;CACtB,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,MAAM;IACN,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;CACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ixo/topic-protocol",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.2",
4
4
  "description": "Reference contracts and deterministic projection for IXO Topics",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -2,7 +2,7 @@
2
2
  "version": 1,
3
3
  "code": "agent-delivery",
4
4
  "id": "https://topic-protocol.ixo.world/recipes/agent-delivery",
5
- "recipeVersion": "1.0.0-rc.1",
5
+ "recipeVersion": "1.0.0-rc.2",
6
6
  "label": "Agent delivery",
7
7
  "description": "Commission agent work, review its delivery, and explicitly confirm any external Action.",
8
8
  "baseRecipe": "flow",
@@ -15,13 +15,13 @@
15
15
  "code": "contract",
16
16
  "phase": "forming",
17
17
  "required": true,
18
- "initialState": "draft",
18
+ "initialState": "proposed",
19
19
  "states": [
20
20
  {
21
- "code": "draft"
21
+ "code": "proposed"
22
22
  },
23
23
  {
24
- "code": "accepted",
24
+ "code": "effective",
25
25
  "terminal": true
26
26
  }
27
27
  ]
@@ -110,21 +110,21 @@
110
110
  ],
111
111
  "transitions": [
112
112
  {
113
- "code": "edit-terms",
113
+ "code": "edit-setup",
114
114
  "phase": "forming",
115
115
  "predecessor": {
116
116
  "axis": "contract",
117
- "state": "draft"
117
+ "state": "proposed"
118
118
  },
119
119
  "target": {
120
120
  "axis": "contract",
121
- "state": "draft"
121
+ "state": "proposed"
122
122
  },
123
- "command": "topic.edit-terms",
123
+ "command": "topic.edit-setup",
124
124
  "requiredAbility": "topic/write",
125
125
  "assignedTo": {
126
126
  "kind": "role",
127
- "value": "contract-acceptor"
127
+ "value": "setup-editor"
128
128
  },
129
129
  "gates": [],
130
130
  "confirmation": "none",
@@ -134,35 +134,45 @@
134
134
  "type": "update-contract"
135
135
  },
136
136
  "presentation": {
137
- "reasonCode": "terms-need-input"
137
+ "reasonCode": "setup-needs-input",
138
+ "actionLabelKey": "topic.action.edit-setup.label",
139
+ "bodyKey": "topic.setup.edit.body",
140
+ "purposeKey": "topic.setup.edit.purpose",
141
+ "unlocksKey": "topic.setup.edit.unlocks",
142
+ "priority": 800
138
143
  }
139
144
  },
140
145
  {
141
- "code": "accept-terms",
146
+ "code": "confirm-setup",
142
147
  "phase": "forming",
143
148
  "predecessor": {
144
149
  "axis": "contract",
145
- "state": "draft"
150
+ "state": "proposed"
146
151
  },
147
152
  "target": {
148
153
  "axis": "contract",
149
- "state": "accepted"
154
+ "state": "effective"
150
155
  },
151
- "command": "topic.accept-terms",
152
- "requiredAbility": "topic/accept-contract",
156
+ "command": "topic.confirm-setup",
157
+ "requiredAbility": "topic/confirm-setup",
153
158
  "assignedTo": {
154
159
  "kind": "role",
155
- "value": "contract-acceptor"
160
+ "value": "setup-confirmer"
156
161
  },
157
162
  "gates": [],
158
- "confirmation": "viewer",
163
+ "confirmation": "authority",
159
164
  "consequence": "shared-state",
160
165
  "evidence": {
161
166
  "kind": "operation",
162
- "type": "accept-contract"
167
+ "type": "confirm-setup"
163
168
  },
164
169
  "presentation": {
165
- "reasonCode": "terms-await-acceptance"
170
+ "reasonCode": "setup-awaits-confirmation",
171
+ "actionLabelKey": "topic.action.confirm-setup.label",
172
+ "bodyKey": "topic.setup.confirm.body",
173
+ "purposeKey": "topic.setup.confirm.purpose",
174
+ "unlocksKey": "topic.setup.confirm.unlocks",
175
+ "priority": 700
166
176
  }
167
177
  },
168
178
  {
@@ -187,7 +197,7 @@
187
197
  "kind": "axis",
188
198
  "axis": "contract",
189
199
  "states": [
190
- "accepted"
200
+ "effective"
191
201
  ]
192
202
  }
193
203
  ],
@@ -198,7 +208,85 @@
198
208
  "type": "change-progress"
199
209
  },
200
210
  "presentation": {
201
- "reasonCode": "start-work"
211
+ "reasonCode": "start-work",
212
+ "actionLabelKey": "topic.action.start-work.label",
213
+ "bodyKey": "topic.action.start-work.prompt",
214
+ "purposeKey": "topic.action.start-work.purpose",
215
+ "unlocksKey": "topic.action.start-work.unlocks",
216
+ "priority": 900
217
+ }
218
+ },
219
+ {
220
+ "code": "raise-dispute",
221
+ "phase": "working",
222
+ "predecessor": {
223
+ "axis": "topic",
224
+ "state": "open"
225
+ },
226
+ "target": {
227
+ "axis": "topic",
228
+ "state": "open"
229
+ },
230
+ "command": "topic.raise-dispute",
231
+ "requiredAbility": "topic/raise-dispute",
232
+ "assignedTo": {
233
+ "kind": "role",
234
+ "value": "participant"
235
+ },
236
+ "gates": [],
237
+ "confirmation": "none",
238
+ "consequence": "shared-state",
239
+ "evidence": {
240
+ "kind": "operation",
241
+ "type": "raise-dispute"
242
+ },
243
+ "presentation": {
244
+ "reasonCode": "dispute-available",
245
+ "actionLabelKey": "topic.action.raise-dispute.label",
246
+ "bodyKey": "topic.action.raise-dispute.prompt",
247
+ "purposeKey": "topic.action.raise-dispute.purpose",
248
+ "unlocksKey": "topic.action.raise-dispute.unlocks",
249
+ "priority": 900
250
+ }
251
+ },
252
+ {
253
+ "code": "resolve-dispute",
254
+ "phase": "working",
255
+ "predecessor": {
256
+ "axis": "topic",
257
+ "state": "open"
258
+ },
259
+ "target": {
260
+ "axis": "topic",
261
+ "state": "open"
262
+ },
263
+ "command": "topic.resolve-dispute",
264
+ "requiredAbility": "topic/resolve-dispute",
265
+ "assignedTo": {
266
+ "kind": "role",
267
+ "value": "dispute-resolver"
268
+ },
269
+ "gates": [
270
+ {
271
+ "kind": "condition",
272
+ "states": [
273
+ "disputed"
274
+ ]
275
+ }
276
+ ],
277
+ "confirmation": "authority",
278
+ "consequence": "shared-state",
279
+ "evidence": {
280
+ "kind": "operation",
281
+ "type": "resolve-dispute"
282
+ },
283
+ "presentation": {
284
+ "reasonCode": "dispute-awaits-resolution",
285
+ "actionLabelKey": "topic.action.resolve-dispute.label",
286
+ "bodyKey": "topic.action.resolve-dispute.prompt",
287
+ "purposeKey": "topic.action.resolve-dispute.purpose",
288
+ "unlocksKey": "topic.action.resolve-dispute.unlocks",
289
+ "priority": 900
202
290
  }
203
291
  },
204
292
  {
@@ -232,7 +320,12 @@
232
320
  "type": "answer-question"
233
321
  },
234
322
  "presentation": {
235
- "reasonCode": "question-awaits-answer"
323
+ "reasonCode": "question-awaits-answer",
324
+ "actionLabelKey": "topic.action.answer-question.label",
325
+ "bodyKey": "topic.action.answer-question.prompt",
326
+ "purposeKey": "topic.action.answer-question.purpose",
327
+ "unlocksKey": "topic.action.answer-question.unlocks",
328
+ "priority": 900
236
329
  }
237
330
  },
238
331
  {
@@ -266,7 +359,12 @@
266
359
  "type": "change-due-date"
267
360
  },
268
361
  "presentation": {
269
- "reasonCode": "due-date-review"
362
+ "reasonCode": "due-date-review",
363
+ "actionLabelKey": "topic.action.change-due-date.label",
364
+ "bodyKey": "topic.action.change-due-date.prompt",
365
+ "purposeKey": "topic.action.change-due-date.purpose",
366
+ "unlocksKey": "topic.action.change-due-date.unlocks",
367
+ "priority": 900
270
368
  }
271
369
  },
272
370
  {
@@ -301,7 +399,12 @@
301
399
  "type": "unblock-topic"
302
400
  },
303
401
  "presentation": {
304
- "reasonCode": "topic-blocked"
402
+ "reasonCode": "topic-blocked",
403
+ "actionLabelKey": "topic.action.unblock-topic.label",
404
+ "bodyKey": "topic.action.unblock-topic.prompt",
405
+ "purposeKey": "topic.action.unblock-topic.purpose",
406
+ "unlocksKey": "topic.action.unblock-topic.unlocks",
407
+ "priority": 900
305
408
  }
306
409
  },
307
410
  {
@@ -330,7 +433,12 @@
330
433
  "finality": "accepted"
331
434
  },
332
435
  "presentation": {
333
- "reasonCode": "submit-work"
436
+ "reasonCode": "submit-work",
437
+ "actionLabelKey": "topic.action.submit-work.label",
438
+ "bodyKey": "topic.action.submit-work.prompt",
439
+ "purposeKey": "topic.action.submit-work.purpose",
440
+ "unlocksKey": "topic.action.submit-work.unlocks",
441
+ "priority": 900
334
442
  }
335
443
  },
336
444
  {
@@ -367,7 +475,12 @@
367
475
  },
368
476
  "completesTopic": true,
369
477
  "presentation": {
370
- "reasonCode": "complete-topic"
478
+ "reasonCode": "complete-topic",
479
+ "actionLabelKey": "topic.action.complete-topic.label",
480
+ "bodyKey": "topic.action.complete-topic.prompt",
481
+ "purposeKey": "topic.action.complete-topic.purpose",
482
+ "unlocksKey": "topic.action.complete-topic.unlocks",
483
+ "priority": 900
371
484
  }
372
485
  },
373
486
  {
@@ -408,7 +521,12 @@
408
521
  "binding": "evaluation"
409
522
  },
410
523
  "presentation": {
411
- "reasonCode": "verification-required"
524
+ "reasonCode": "verification-required",
525
+ "actionLabelKey": "topic.action.record-verification.label",
526
+ "bodyKey": "topic.action.record-verification.prompt",
527
+ "purposeKey": "topic.action.record-verification.purpose",
528
+ "unlocksKey": "topic.action.record-verification.unlocks",
529
+ "priority": 900
412
530
  }
413
531
  },
414
532
  {
@@ -445,7 +563,12 @@
445
563
  "finality": "accepted"
446
564
  },
447
565
  "presentation": {
448
- "reasonCode": "decision-required"
566
+ "reasonCode": "decision-required",
567
+ "actionLabelKey": "topic.action.record-decision.label",
568
+ "bodyKey": "topic.action.record-decision.prompt",
569
+ "purposeKey": "topic.action.record-decision.purpose",
570
+ "unlocksKey": "topic.action.record-decision.unlocks",
571
+ "priority": 900
449
572
  }
450
573
  },
451
574
  {
@@ -489,7 +612,12 @@
489
612
  "binding": "action"
490
613
  },
491
614
  "presentation": {
492
- "reasonCode": "action-request-required"
615
+ "reasonCode": "action-request-required",
616
+ "actionLabelKey": "topic.action.request-action.label",
617
+ "bodyKey": "topic.action.request-action.prompt",
618
+ "purposeKey": "topic.action.request-action.purpose",
619
+ "unlocksKey": "topic.action.request-action.unlocks",
620
+ "priority": 900
493
621
  }
494
622
  },
495
623
  {
@@ -522,7 +650,12 @@
522
650
  "binding": "action"
523
651
  },
524
652
  "presentation": {
525
- "reasonCode": "action-confirmation-required"
653
+ "reasonCode": "action-confirmation-required",
654
+ "actionLabelKey": "topic.action.confirm-action.label",
655
+ "bodyKey": "topic.action.confirm-action.prompt",
656
+ "purposeKey": "topic.action.confirm-action.purpose",
657
+ "unlocksKey": "topic.action.confirm-action.unlocks",
658
+ "priority": 900
526
659
  }
527
660
  }
528
661
  ],
@@ -575,15 +708,15 @@
575
708
  }
576
709
  },
577
710
  {
578
- "code": "needs-acceptance",
579
- "condition": "needs-acceptance",
711
+ "code": "needs-confirmation",
712
+ "condition": "needs-confirmation",
580
713
  "priority": 350,
581
714
  "source": {
582
715
  "kind": "axis",
583
716
  "value": "contract"
584
717
  },
585
718
  "states": [
586
- "draft"
719
+ "proposed"
587
720
  ]
588
721
  }
589
722
  ],
@@ -9,8 +9,8 @@
9
9
  "creates": "draft",
10
10
  "ref": {
11
11
  "id": "https://topic-protocol.ixo.world/recipes/research-brief",
12
- "version": "1.0.0-rc.1",
13
- "digest": "sha256:deae09bfdc76592fdc749d1c2d893b972acaca1dcbbeb4677e7cf4b7da8d1878"
12
+ "version": "1.0.0-rc.2",
13
+ "digest": "sha256:76aa6428b3a41ea0652c078f8020ba7918fe0f8c3ac79ef941c88b33ee62294b"
14
14
  }
15
15
  },
16
16
  {
@@ -21,8 +21,8 @@
21
21
  "creates": "draft",
22
22
  "ref": {
23
23
  "id": "https://topic-protocol.ixo.world/recipes/agent-delivery",
24
- "version": "1.0.0-rc.1",
25
- "digest": "sha256:5d92d85cd9a6aeef0d4d0c89588412328ad98ca111f1f58d78dee6c98b2a14a0"
24
+ "version": "1.0.0-rc.2",
25
+ "digest": "sha256:fc646487e42ae88984b644449a90fe5b30769380d73b391cd44f46926f406e5e"
26
26
  }
27
27
  },
28
28
  {
@@ -33,8 +33,8 @@
33
33
  "creates": "draft",
34
34
  "ref": {
35
35
  "id": "https://topic-protocol.ixo.world/recipes/verified-work-payment",
36
- "version": "1.0.0-rc.1",
37
- "digest": "sha256:ce7401ed4f2d94c536108fd1ff35b79d68be9a3df42edb73800f480a415ce77c"
36
+ "version": "1.0.0-rc.2",
37
+ "digest": "sha256:27c0e70c6bfac1557ae402673bd4aa8bace7ff50c82c5e30cf5e6f356114fb86"
38
38
  }
39
39
  }
40
40
  ]