@ixo/topic-protocol 1.0.0-rc.3 → 1.0.0-rc.5

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 (90) hide show
  1. package/README.md +12 -1
  2. package/dist/profiles/releases/1.0.0-rc.3.json +8442 -0
  3. package/dist/schemas/project-projection.schema.json +178 -12
  4. package/dist/schemas/topic-operation.schema.json +155 -13
  5. package/dist/schemas/topic-shape.schema.json +1 -1
  6. package/dist/schemas/v2/capsule.schema.json +29 -0
  7. package/dist/schemas/v2/common.schema.json +68 -0
  8. package/dist/schemas/v2/operation.schema.json +308 -0
  9. package/dist/schemas/v2/projection.schema.json +205 -0
  10. package/dist/schemas/v2/record.schema.json +56 -0
  11. package/dist/schemas/v2/topic.schema.json +84 -0
  12. package/dist/src/contracts/schemas.d.ts +8 -0
  13. package/dist/src/contracts/validator.js +34 -3
  14. package/dist/src/contracts/validator.js.map +1 -1
  15. package/dist/src/index.d.ts +7 -0
  16. package/dist/src/index.js +7 -0
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/projector/payload.d.ts +6 -2
  19. package/dist/src/projector/payload.js +8 -2
  20. package/dist/src/projector/payload.js.map +1 -1
  21. package/dist/src/projector/state.js +11 -3
  22. package/dist/src/projector/state.js.map +1 -1
  23. package/dist/src/projector/types.d.ts +1 -1
  24. package/dist/src/projector/types.js.map +1 -1
  25. package/dist/src/projects/project.js +55 -19
  26. package/dist/src/projects/project.js.map +1 -1
  27. package/dist/src/projects/types.d.ts +1 -0
  28. package/dist/src/shapes/availability.d.ts +2 -0
  29. package/dist/src/shapes/availability.js +19 -0
  30. package/dist/src/shapes/availability.js.map +1 -0
  31. package/dist/src/shapes/canonical.js +3 -2
  32. package/dist/src/shapes/canonical.js.map +1 -1
  33. package/dist/src/shapes/commands.d.ts +3 -0
  34. package/dist/src/shapes/commands.js +10 -0
  35. package/dist/src/shapes/commands.js.map +1 -0
  36. package/dist/src/shapes/fields.d.ts +9 -0
  37. package/dist/src/shapes/fields.js +41 -0
  38. package/dist/src/shapes/fields.js.map +1 -0
  39. package/dist/src/shapes/now.js +4 -1
  40. package/dist/src/shapes/now.js.map +1 -1
  41. package/dist/src/shapes/progress.d.ts +3 -1
  42. package/dist/src/shapes/progress.js +74 -27
  43. package/dist/src/shapes/progress.js.map +1 -1
  44. package/dist/src/shapes/reachability.d.ts +3 -0
  45. package/dist/src/shapes/reachability.js +29 -0
  46. package/dist/src/shapes/reachability.js.map +1 -0
  47. package/dist/src/shapes/recipes.js +42 -18
  48. package/dist/src/shapes/recipes.js.map +1 -1
  49. package/dist/src/shapes/releases.d.ts +9 -0
  50. package/dist/src/shapes/releases.js +12 -0
  51. package/dist/src/shapes/releases.js.map +1 -0
  52. package/dist/src/shapes/resolver.d.ts +3 -0
  53. package/dist/src/shapes/resolver.js +56 -16
  54. package/dist/src/shapes/resolver.js.map +1 -1
  55. package/dist/src/shapes/types.d.ts +12 -0
  56. package/dist/src/v2/canonical.d.ts +3 -0
  57. package/dist/src/v2/canonical.js +25 -0
  58. package/dist/src/v2/canonical.js.map +1 -0
  59. package/dist/src/v2/capsule.d.ts +10 -0
  60. package/dist/src/v2/capsule.js +46 -0
  61. package/dist/src/v2/capsule.js.map +1 -0
  62. package/dist/src/v2/compat.d.ts +14 -0
  63. package/dist/src/v2/compat.js +96 -0
  64. package/dist/src/v2/compat.js.map +1 -0
  65. package/dist/src/v2/ids.d.ts +3 -0
  66. package/dist/src/v2/ids.js +11 -0
  67. package/dist/src/v2/ids.js.map +1 -0
  68. package/dist/src/v2/index.d.ts +9 -0
  69. package/dist/src/v2/index.js +9 -0
  70. package/dist/src/v2/index.js.map +1 -0
  71. package/dist/src/v2/matrix.d.ts +46 -0
  72. package/dist/src/v2/matrix.js +151 -0
  73. package/dist/src/v2/matrix.js.map +1 -0
  74. package/dist/src/v2/project.d.ts +14 -0
  75. package/dist/src/v2/project.js +268 -0
  76. package/dist/src/v2/project.js.map +1 -0
  77. package/dist/src/v2/types.d.ts +195 -0
  78. package/dist/src/v2/types.js +19 -0
  79. package/dist/src/v2/types.js.map +1 -0
  80. package/dist/src/v2/validate.d.ts +650 -0
  81. package/dist/src/v2/validate.js +45 -0
  82. package/dist/src/v2/validate.js.map +1 -0
  83. package/package.json +7 -1
  84. package/profiles/releases/1.0.0-rc.3.json +8442 -0
  85. package/recipes/agent-delivery.json +54 -4
  86. package/recipes/blueprint-design.json +4 -3
  87. package/recipes/registry.json +12 -12
  88. package/recipes/research-brief.json +53 -2
  89. package/recipes/software-build.json +2 -2
  90. package/recipes/verified-work-payment.json +56 -5
@@ -25,9 +25,16 @@ function projectDefinition(contract) {
25
25
  return undefined;
26
26
  return project;
27
27
  }
28
- function synchroniseDefinitions(state, contract) {
28
+ function synchroniseDefinitions(state, contract, operation) {
29
29
  const definition = projectDefinition(contract);
30
- if (definition === undefined || state.sourceContractRevision === contract?.revision)
30
+ if (definition === undefined) {
31
+ return state.sourceContractRevision === undefined ? state : emptyTopicProjectProjection();
32
+ }
33
+ if (definition.currentBlockingChildObligationId !== undefined
34
+ && !(definition.childObligations ?? []).some(({ id }) => id === definition.currentBlockingChildObligationId)) {
35
+ return invalid(operation, "Project current blocking child obligation is not declared");
36
+ }
37
+ if (state.sourceContractRevision === contract?.revision)
31
38
  return state;
32
39
  return {
33
40
  version: 1,
@@ -58,6 +65,9 @@ function updateMilestone(state, operation, payload) {
58
65
  const target = state.milestones.find(({ id }) => id === payload.milestoneId);
59
66
  if (target === undefined)
60
67
  return invalid(operation, `unknown Project milestone: ${payload.milestoneId}`);
68
+ if (payload.status === "met" && (target.evidenceRequired?.length ?? 0) > 0 && payload.evidenceRefs.length === 0) {
69
+ return invalid(operation, "Milestone completion requires evidence references");
70
+ }
61
71
  return {
62
72
  ...state,
63
73
  milestones: state.milestones.map((milestone) => milestone.id === payload.milestoneId
@@ -65,7 +75,16 @@ function updateMilestone(state, operation, payload) {
65
75
  : milestone),
66
76
  };
67
77
  }
68
- function updateChild(state, operation, payload) {
78
+ function resetUnlinkedChild(child, definition) {
79
+ const declared = definition?.childObligations?.find(({ id }) => id === child.id);
80
+ return {
81
+ id: child.id,
82
+ title: declared?.title ?? child.title,
83
+ ...(declared?.kind === undefined ? {} : { kind: declared.kind }),
84
+ status: "unmet",
85
+ };
86
+ }
87
+ function updateChild(state, operation, payload, definition) {
69
88
  requireEffective(state, operation);
70
89
  const target = state.childObligations.find(({ id }) => id === payload.obligationId);
71
90
  if (target === undefined)
@@ -86,7 +105,7 @@ function updateChild(state, operation, payload) {
86
105
  return {
87
106
  ...state,
88
107
  childObligations: state.childObligations.map((child) => child.id === target.id
89
- ? { id: child.id, title: child.title, ...(child.kind === undefined ? {} : { kind: child.kind }), status: "unmet" }
108
+ ? resetUnlinkedChild(child, definition)
90
109
  : child),
91
110
  };
92
111
  }
@@ -94,7 +113,7 @@ function updateChild(state, operation, payload) {
94
113
  return {
95
114
  ...state,
96
115
  childObligations: state.childObligations.map((child) => child.id === target.id
97
- ? { ...child, status: "waived", lastOperationId: operation.operationId }
116
+ ? { ...child, status: "waived", waiverReason: payload.reason, lastOperationId: operation.operationId }
98
117
  : child),
99
118
  };
100
119
  }
@@ -144,6 +163,18 @@ function validateCloseBinding(operation, payload, contract, actorAssignments) {
144
163
  invalid(operation, "Project close acceptance is not bound to the effective activation policy");
145
164
  }
146
165
  }
166
+ function validateLeadAssignment(operation, contract, actorAssignments) {
167
+ const body = record(contract?.bodyRef);
168
+ const project = record(body?.project);
169
+ const lead = record(project?.lead);
170
+ if (lead?.kind !== "actor" && lead?.kind !== "role")
171
+ invalid(operation, "Project lead is not assigned");
172
+ if (lead.kind === "actor" && lead.id !== operation.actor)
173
+ invalid(operation, "Project lead is not the acting actor");
174
+ if (lead.kind === "role" && !actorAssignments?.[lead.id]?.includes(operation.actor)) {
175
+ invalid(operation, "Project lead role is not assigned to the acting actor");
176
+ }
177
+ }
147
178
  function validateCloseEvidence(operation, payload, recipe) {
148
179
  for (const required of recipe?.requiredCloseEvidenceTypes ?? []) {
149
180
  if (!payload.evidenceRefs.some(({ type }) => type === required)) {
@@ -163,7 +194,7 @@ function closeProject(state, operation, payload, contract, recipe, actorAssignme
163
194
  }
164
195
  const accepted = [...new Set(payload.acceptedRemainingRiskIds)].sort();
165
196
  const unresolved = unresolvedRiskIds(state);
166
- if (unresolved.some((id) => !accepted.includes(id)))
197
+ if (accepted.length !== unresolved.length || unresolved.some((id) => !accepted.includes(id)))
167
198
  return invalid(operation, "close acceptance must enumerate every remaining risk");
168
199
  validateCloseEvidence(operation, payload, recipe);
169
200
  return {
@@ -194,8 +225,20 @@ function applyProjectSetupEvidence(state, operation, activationSatisfied) {
194
225
  void closeRequest;
195
226
  return { ...withoutCloseRequest, lifecycle: "proposed" };
196
227
  }
228
+ function updateProjectBlocker(state, operation, payload, contract, actorAssignments) {
229
+ requireEffective(state, operation);
230
+ validateLeadAssignment(operation, contract, actorAssignments);
231
+ if (payload.obligationId !== undefined && !state.childObligations.some(({ id }) => id === payload.obligationId)) {
232
+ return invalid(operation, `unknown Project child obligation: ${payload.obligationId}`);
233
+ }
234
+ if (payload.obligationId !== undefined)
235
+ return { ...state, currentBlockingChildObligationId: payload.obligationId };
236
+ const next = { ...state };
237
+ delete next.currentBlockingChildObligationId;
238
+ return next;
239
+ }
197
240
  export function applyProjectOperation(current, operation, contract, recipe, activationSatisfied = false, actorAssignments) {
198
- let state = synchroniseDefinitions(current, contract);
241
+ let state = synchroniseDefinitions(current, contract, operation);
199
242
  const payload = operation.parsedPayload;
200
243
  if (state.lifecycle === "proposed" && activationSatisfied && state.sourceContractRevision !== undefined && state.lead !== undefined) {
201
244
  state = { ...state, lifecycle: "effective" };
@@ -206,19 +249,10 @@ export function applyProjectOperation(current, operation, contract, recipe, acti
206
249
  if (payload.kind === "record-project-milestone")
207
250
  return updateMilestone(state, operation, payload);
208
251
  if (["link-project-child", "unlink-project-child", "record-project-child-status", "waive-project-child"].includes(payload.kind)) {
209
- return updateChild(state, operation, payload);
210
- }
211
- if (payload.kind === "set-project-blocker") {
212
- requireEffective(state, operation);
213
- if (payload.obligationId !== undefined && !state.childObligations.some(({ id }) => id === payload.obligationId)) {
214
- return invalid(operation, `unknown Project child obligation: ${payload.obligationId}`);
215
- }
216
- if (payload.obligationId !== undefined)
217
- return { ...state, currentBlockingChildObligationId: payload.obligationId };
218
- const next = { ...state };
219
- delete next.currentBlockingChildObligationId;
220
- return next;
252
+ return updateChild(state, operation, payload, projectDefinition(contract));
221
253
  }
254
+ if (payload.kind === "set-project-blocker")
255
+ return updateProjectBlocker(state, operation, payload, contract, actorAssignments);
222
256
  if (payload.kind === "request-project-close") {
223
257
  requireEffective(state, operation);
224
258
  const body = record(contract?.bodyRef);
@@ -242,6 +276,8 @@ export function applyProjectOperation(current, operation, contract, recipe, acti
242
276
  return state;
243
277
  }
244
278
  export function projectProgressBlock(project) {
279
+ if (project.lifecycle !== "effective" && project.lifecycle !== "closing")
280
+ return undefined;
245
281
  const id = project.currentBlockingChildObligationId;
246
282
  const child = id === undefined ? undefined : project.childObligations.find((candidate) => candidate.id === id);
247
283
  if (child === undefined || child.status === "complete" || child.status === "waived")
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/projects/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/projects/project.ts"],"names":[],"mappings":"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"}
@@ -82,6 +82,7 @@ export interface ProjectMilestoneProjectionV1 extends ProjectMilestoneDefinition
82
82
  readonly lastOperationId?: string;
83
83
  }
84
84
  export interface ProjectChildProjectionV1 extends ProjectChildObligationDefinitionV1 {
85
+ readonly waiverReason?: string;
85
86
  readonly status: ProjectChildStatusV1;
86
87
  readonly childRevision?: string;
87
88
  readonly childShapeDigest?: `sha256:${string}`;
@@ -0,0 +1,2 @@
1
+ import type { TopicObligationV1, TopicProgressInputV2, TopicTransitionCandidateV1 } from "./types.js";
2
+ export declare function transitionAvailabilityObligations(candidates: readonly TopicTransitionCandidateV1[], input: TopicProgressInputV2): readonly TopicObligationV1[];
@@ -0,0 +1,19 @@
1
+ export function transitionAvailabilityObligations(candidates, input) {
2
+ return candidates.flatMap(({ transition, gateStatus }) => {
3
+ const unsupported = input.supportedCommands !== undefined && !input.supportedCommands.includes(transition.command);
4
+ const missing = gateStatus.find(({ gate, satisfied }) => gate.kind === "binding" && !satisfied);
5
+ if (!unsupported && missing === undefined)
6
+ return [];
7
+ const code = unsupported ? "safety.command-unsupported" : "setup.binding-missing";
8
+ return [{
9
+ id: `${code}:${transition.code}`, code, kind: unsupported ? "safety" : "input",
10
+ phase: transition.phase, status: unsupported ? "unavailable" : "open",
11
+ priority: 60, blocking: true, consequence: "none",
12
+ responsibility: { kind: "role", value: "setup-editor" }, assignedActors: input.actorAssignments?.["setup-editor"] ?? [],
13
+ ...(unsupported ? {} : { requiredAbility: "topic/write", focusPath: "/bindings", command: "topic.edit-setup" }),
14
+ presentation: { labelKey: `topic.${code}.label`, promptKey: `topic.${code}.prompt`, purposeKey: `topic.${code}.purpose` },
15
+ provenance: input.sources.map(({ id }) => id),
16
+ }];
17
+ });
18
+ }
19
+ //# sourceMappingURL=availability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability.js","sourceRoot":"","sources":["../../../src/shapes/availability.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iCAAiC,CAC/C,UAAiD,EAAE,KAA2B;IAE9E,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;QACvD,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnH,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC;QAChG,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAClF,OAAO,CAAC;gBACN,EAAE,EAAE,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,OAAgB;gBAChG,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,aAAsB,CAAC,CAAC,CAAC,MAAe;gBACvF,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAe;gBAC1D,cAAc,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;gBAChI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;gBAC/G,YAAY,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE;gBACzH,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;aAC9C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,5 @@
1
- import { createHash } from "node:crypto";
1
+ import { sha256 } from "@noble/hashes/sha2.js";
2
+ import { bytesToHex, utf8ToBytes } from "@noble/hashes/utils.js";
2
3
  function canonicalValue(value) {
3
4
  if (Array.isArray(value))
4
5
  return value.map(canonicalValue);
@@ -14,7 +15,7 @@ export function canonicalShapeJson(value) {
14
15
  return JSON.stringify(canonicalValue(value));
15
16
  }
16
17
  export function shapeDigest(value) {
17
- const digest = createHash("sha256").update(canonicalShapeJson(value)).digest("hex");
18
+ const digest = bytesToHex(sha256(utf8ToBytes(canonicalShapeJson(value))));
18
19
  return `sha256:${digest}`;
19
20
  }
20
21
  //# sourceMappingURL=canonical.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/shapes/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAA0C,CAAC;SACvE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,OAAO,UAAU,MAAM,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/shapes/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEjE,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAA0C,CAAC;SACvE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,UAAU,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TopicOperationType } from "../projector/types.js";
2
+ /** Transport operations for built-in commands. A mapping never grants authority. */
3
+ export declare const TOPIC_COMMAND_OPERATIONS: Readonly<Record<string, TopicOperationType>>;
@@ -0,0 +1,10 @@
1
+ /** Transport operations for built-in commands. A mapping never grants authority. */
2
+ export const TOPIC_COMMAND_OPERATIONS = Object.freeze({
3
+ "topic.edit-setup": "update-contract", "topic.confirm-setup": "confirm-setup", "topic.record-assent": "record-assent",
4
+ "topic.raise-dispute": "raise-dispute", "topic.resolve-dispute": "resolve-dispute", "topic.start-work": "change-progress",
5
+ "topic.answer-question": "answer-question", "topic.change-due-date": "change-due-date", "topic.unblock": "unblock-topic",
6
+ "topic.record-outcome": "record-outcome", "topic.complete": "complete-topic", "topic.close-project": "close-project",
7
+ "topic.request-action": "request-action", "topic.confirm-action": "record-action-receipt",
8
+ "topic.record-verification": "record-review", "topic.record-decision": "record-review", "topic.record-settlement": "record-settlement",
9
+ });
10
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/shapes/commands.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,wBAAwB,GAAiD,MAAM,CAAC,MAAM,CAAC;IAClG,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe;IACrH,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB;IACzH,uBAAuB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe;IACxH,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe;IACpH,sBAAsB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB;IACzF,2BAA2B,EAAE,eAAe,EAAE,uBAAuB,EAAE,eAAe,EAAE,yBAAyB,EAAE,mBAAmB;CACvI,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ShapeGateV1, TopicProgressInputV2 } from "./types.js";
2
+ /** Derive gate inputs from a schema-validated contract body, never from UI defaults. */
3
+ export declare function topicSetupFieldState(body: Readonly<Record<string, unknown>>): {
4
+ readonly presentFields: readonly string[];
5
+ readonly fieldValues: Readonly<Record<string, string>>;
6
+ };
7
+ export declare function topicFieldGateSatisfied(gate: Extract<ShapeGateV1, {
8
+ kind: "field" | "field-any";
9
+ }>, input: Pick<TopicProgressInputV2, "presentFields" | "acceptedFields" | "fieldValues">): boolean;
@@ -0,0 +1,41 @@
1
+ function meaningful(value) {
2
+ if (typeof value === "string")
3
+ return value.trim().length > 0;
4
+ if (Array.isArray(value))
5
+ return value.some(meaningful);
6
+ if (value === null || value === undefined)
7
+ return false;
8
+ if (typeof value !== "object")
9
+ return true;
10
+ const object = value;
11
+ if ("text" in object)
12
+ return meaningful(object.text);
13
+ return Object.values(object).some(meaningful);
14
+ }
15
+ /** Derive gate inputs from a schema-validated contract body, never from UI defaults. */
16
+ export function topicSetupFieldState(body) {
17
+ const presentFields = [];
18
+ const fieldValues = {};
19
+ function visit(value, path) {
20
+ if (!meaningful(value))
21
+ return;
22
+ if (path)
23
+ presentFields.push(path);
24
+ if (typeof value === "string")
25
+ fieldValues[path] = value;
26
+ if (value === null || typeof value !== "object" || Array.isArray(value))
27
+ return;
28
+ for (const [key, child] of Object.entries(value))
29
+ visit(child, `${path}/${key.replace(/~/gu, "~0").replace(/\//gu, "~1")}`);
30
+ }
31
+ visit(body, "");
32
+ return { presentFields: presentFields.sort(), fieldValues };
33
+ }
34
+ export function topicFieldGateSatisfied(gate, input) {
35
+ const fields = gate.predicate === "accepted" ? input.acceptedFields : input.presentFields;
36
+ if (gate.kind === "field")
37
+ return fields?.includes(gate.path) === true;
38
+ return gate.paths.some((path) => fields?.includes(path) === true
39
+ && (gate.values?.[path] === undefined || gate.values[path].includes(input.fieldValues?.[path] ?? "")));
40
+ }
41
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/shapes/fields.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,IAAI,MAAM;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,oBAAoB,CAAC,IAAuC;IAI1E,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,SAAS,KAAK,CAAC,KAAc,EAAE,IAAY;QACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QAC/B,IAAI,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO;QAChF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAA2D,EACjG,KAAqF;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACvE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI;WAC3D,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3G,CAAC"}
@@ -2,11 +2,14 @@ function assignedToViewer(actors, authority) {
2
2
  return actors.includes(authority.viewerId);
3
3
  }
4
4
  function candidateAuthorized(candidate, authority) {
5
- return authority.matrixWrite
5
+ return (authority.supportedCommands === undefined || authority.supportedCommands.includes(candidate.transition.command))
6
+ && authority.matrixWrite
6
7
  && authority.verifiedAbilities.includes(candidate.transition.requiredAbility)
7
8
  && assignedToViewer(candidate.assignedActors ?? [], authority);
8
9
  }
9
10
  function actionability(obligation, authority) {
11
+ if (obligation.command !== undefined && authority.supportedCommands !== undefined && !authority.supportedCommands.includes(obligation.command))
12
+ return "unavailable";
10
13
  if (obligation.status === "unavailable" || obligation.kind === "safety")
11
14
  return "unavailable";
12
15
  if (obligation.assignedActors.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"now.js","sourceRoot":"","sources":["../../../src/shapes/now.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"now.js","sourceRoot":"","sources":["../../../src/shapes/now.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import type { TopicProgressInputV2, TopicProgressProjectionV2 } from "./types.js";
1
+ import type { TopicProgressInputV2, TopicProgressProjectionV2, TopicProgressSourceV2 } from "./types.js";
2
2
  /** Evaluate the current activation evidence without preserving an earlier effective axis state. */
3
3
  export declare function currentTopicActivationSatisfied(input: TopicProgressInputV2): boolean;
4
+ /** The host must authenticate the source and verify its capability before admission. */
5
+ export declare function applyTopicShapeEvidence(input: TopicProgressInputV2, source: TopicProgressSourceV2): Readonly<Record<string, string>>;
4
6
  export declare function projectTopicProgress(input: TopicProgressInputV2): TopicProgressProjectionV2;
5
7
  export declare function replayTopicShape(input: Omit<TopicProgressInputV2, "axisStates">, initialAxisStates?: Readonly<Record<string, string>>): Readonly<Record<string, string>>;
@@ -1,4 +1,6 @@
1
+ import { topicFieldGateSatisfied } from "./fields.js";
1
2
  import { SHAPE_PHASES } from "./types.js";
3
+ import { transitionAvailabilityObligations } from "./availability.js";
2
4
  const EMPTY_DIGEST = `sha256:${"0".repeat(64)}`;
3
5
  const PAUSED_PHASES = new Set(["verifying", "deciding", "effecting", "settling", "complete"]);
4
6
  const CONDITION_PRIORITY = {
@@ -58,7 +60,9 @@ function requiredCount(policy) {
58
60
  }
59
61
  function policySatisfied(policy, actors, subjects, input) {
60
62
  const resolved = resolveSubjects(subjects, input);
61
- if (resolved.length === 0 || resolved.length < subjects.length)
63
+ if (resolved.length === 0 || subjects.some((subject) => resolveSubjects([subject], input).length === 0))
64
+ return false;
65
+ if (policy.mode === "threshold" && (!Number.isInteger(policy.threshold) || policy.threshold < 1 || policy.threshold > resolved.length))
62
66
  return false;
63
67
  const matching = resolved.filter((actor) => actors.includes(actor));
64
68
  if (policy.mode === "all")
@@ -92,6 +96,7 @@ function activationSatisfied(input) {
92
96
  const policy = input.activationPolicy;
93
97
  return policy !== undefined
94
98
  && resolveSubjects(policy.editors ?? [], input).length > 0
99
+ && input.shape?.shape.transitions.find(({ code }) => code === "confirm-setup")?.gates.every((gate) => gateSatisfied(gate, input)) === true
95
100
  && confirmationSatisfied(input)
96
101
  && assentSatisfied(input)
97
102
  && reached(policy.lifecycle?.effectiveAt, input);
@@ -105,7 +110,11 @@ function activationPolicyComplete(input) {
105
110
  return policy !== undefined
106
111
  && resolveSubjects(policy.editors ?? [], input).length > 0
107
112
  && policy.confirmation !== undefined
108
- && resolveSubjects(policy.confirmation.subjects, input).length > 0;
113
+ && policy.confirmation.subjects.every((subject) => resolveSubjects([subject], input).length > 0)
114
+ && policy.confirmation.subjects.length > 0
115
+ && (policy.confirmation.mode !== "threshold" || (Number.isInteger(policy.confirmation.threshold)
116
+ && policy.confirmation.threshold > 0
117
+ && policy.confirmation.threshold <= resolveSubjects(policy.confirmation.subjects, input).length));
109
118
  }
110
119
  function sourceMatches(source, kind, type, status) {
111
120
  if (source.kind !== kind || source.type !== type)
@@ -115,14 +124,8 @@ function sourceMatches(source, kind, type, status) {
115
124
  function gateSatisfied(gate, input) {
116
125
  if (gate.kind === "axis")
117
126
  return gate.states.includes(input.axisStates[gate.axis] ?? "");
118
- if (gate.kind === "field") {
119
- const fields = gate.predicate === "accepted" ? input.acceptedFields : input.presentFields;
120
- return fields?.includes(gate.path) === true;
121
- }
122
- if (gate.kind === "field-any") {
123
- const fields = gate.predicate === "accepted" ? input.acceptedFields : input.presentFields;
124
- return gate.paths.some((path) => fields?.includes(path) === true);
125
- }
127
+ if (gate.kind === "field" || gate.kind === "field-any")
128
+ return topicFieldGateSatisfied(gate, input);
126
129
  if (gate.kind === "binding")
127
130
  return input.bindings?.includes(gate.type) === true;
128
131
  if (gate.kind === "condition") {
@@ -130,7 +133,8 @@ function gateSatisfied(gate, input) {
130
133
  return true;
131
134
  return input.block !== undefined && gate.states.includes(input.block.condition);
132
135
  }
133
- return input.sources.some((source) => sourceMatches(source, gate.kind, gate.type, gate.status));
136
+ const sources = gate.status === undefined ? input.sources : currentResultSources(input);
137
+ return sources.some((source) => sourceIsCurrent(source, input) && sourceMatches(source, gate.kind, gate.type, gate.status));
134
138
  }
135
139
  function transitionActors(transition, input) {
136
140
  if (transition.code === "confirm-setup") {
@@ -244,7 +248,7 @@ function policyObligations(input) {
244
248
  if (resolveSubjects(input.activationPolicy?.editors ?? [], input).length === 0) {
245
249
  obligations.push(policyInputObligation(input, "setup.editors", 600, "/activationPolicy/editors"));
246
250
  }
247
- if (input.activationPolicy?.confirmation === undefined) {
251
+ if (input.activationPolicy?.confirmation === undefined || !activationPolicyComplete(input)) {
248
252
  obligations.push(policyInputObligation(input, "setup.confirmation-policy", 610, "/activationPolicy/confirmation"));
249
253
  }
250
254
  if (input.assentPolicy !== undefined && !assentSatisfied(input)) {
@@ -343,7 +347,7 @@ function contextualObligations(input, phase) {
343
347
  function obligationRank(obligation, input) {
344
348
  if (input.status === "archived" || input.status === "redirected" || obligation.code.startsWith("safety.shape"))
345
349
  return 0;
346
- if (obligation.kind === "dispute" || input.sources.some(({ status }) => status === "failed"))
350
+ if (obligation.kind === "dispute" || currentResultSources(input).some(({ status }) => ["failed", "rejected", "cancelled"].includes(status ?? "")))
347
351
  return 10;
348
352
  if (obligation.kind === "expiry")
349
353
  return 20;
@@ -354,7 +358,7 @@ function obligationRank(obligation, input) {
354
358
  if (obligation.kind === "confirmation" || obligation.kind === "assent")
355
359
  return 50;
356
360
  if (obligation.kind === "transition")
357
- return 60;
361
+ return obligation.code === "raise-dispute" ? 75 : 60;
358
362
  if (obligation.kind === "review")
359
363
  return 70;
360
364
  return 80;
@@ -363,12 +367,22 @@ function choosePrimary(obligations, input) {
363
367
  return [...obligations].sort((left, right) => obligationRank(left, input) - obligationRank(right, input)
364
368
  || left.priority - right.priority || left.code.localeCompare(right.code))[0]?.id;
365
369
  }
370
+ function currentResultSources(input) {
371
+ const latest = new Map();
372
+ for (const source of input.sources.filter((source) => sourceIsCurrent(source, input))) {
373
+ if (source.type === "request-action")
374
+ latest.delete("ixo.action-receipt");
375
+ if (source.status !== undefined)
376
+ latest.set(source.type, source);
377
+ }
378
+ return [...latest.values()];
379
+ }
366
380
  function deriveCondition(input, obligations) {
367
381
  if (input.shape === undefined || !input.historyCompatible)
368
382
  return "degraded";
369
- if (input.dispute?.status === "open" || input.sources.some(({ status }) => status === "disputed"))
383
+ if (input.dispute?.status === "open" || currentResultSources(input).some(({ status }) => status === "disputed"))
370
384
  return "disputed";
371
- if (input.sources.some(({ status }) => status === "failed"))
385
+ if (currentResultSources(input).some(({ status }) => ["failed", "rejected", "cancelled"].includes(status ?? "")))
372
386
  return "failed";
373
387
  if (obligations.some(({ kind }) => kind === "expiry"))
374
388
  return "expired";
@@ -405,10 +419,25 @@ function stateTags(input, phase, condition) {
405
419
  return tags;
406
420
  return [...tags, { code: `condition:${condition}`, source: { progressRule: `condition:${condition}` }, priority: CONDITION_PRIORITY[condition], tone: conditionTone(condition), provenance: input.block === undefined ? input.sources.map(({ id }) => id) : [input.block.sourceId] }];
407
421
  }
422
+ /** A recorded confirmation is not asked for again; the rest of activation (assent, effectiveAt) carries the Topic forward. */
423
+ function withoutRecordedConfirmations(candidates, input) {
424
+ if (confirmationSatisfied(input))
425
+ return candidates.filter(({ transition }) => transition.code !== "confirm-setup");
426
+ const confirmed = activeActors("confirm-setup", "withdraw-setup-confirmation", input);
427
+ return candidates.flatMap((candidate) => {
428
+ if (candidate.transition.code !== "confirm-setup")
429
+ return [candidate];
430
+ const [assignedActor, ...rest] = (candidate.assignedActors ?? []).filter((actor) => !confirmed.includes(actor));
431
+ return assignedActor === undefined ? [] : [{ ...candidate, assignedActor, assignedActors: [assignedActor, ...rest] }];
432
+ });
433
+ }
408
434
  function readyCandidates(matches, input) {
409
435
  let candidates = matches.filter(({ gateStatus }) => gateStatus.every(({ satisfied }) => satisfied));
436
+ if (input.supportedCommands !== undefined)
437
+ candidates = candidates.filter(({ transition }) => input.supportedCommands.includes(transition.command));
410
438
  if (!activationPolicyComplete(input))
411
439
  candidates = candidates.filter(({ transition }) => transition.code !== "confirm-setup");
440
+ candidates = withoutRecordedConfirmations(candidates, input);
412
441
  if (input.dispute?.status === "open")
413
442
  candidates = candidates.filter(({ transition }) => transition.code === "resolve-dispute" && input.dispute?.resolver !== undefined);
414
443
  const lifecycle = lifecycleState(input);
@@ -420,6 +449,21 @@ function readyCandidates(matches, input) {
420
449
  candidates = candidates.filter(({ transition }) => !PAUSED_PHASES.has(transition.phase));
421
450
  return candidates;
422
451
  }
452
+ /** The host must authenticate the source and verify its capability before admission. */
453
+ export function applyTopicShapeEvidence(input, source) {
454
+ if (!sourceIsCurrent(source, input) || safetyObligation(input, activePhase(input)) !== undefined)
455
+ return input.axisStates;
456
+ const sources = [...input.sources, source];
457
+ let axisStates = input.axisStates;
458
+ if (axisStates.contract === "proposed" && activationSatisfied({ ...input, sources }))
459
+ axisStates = { ...axisStates, contract: "effective" };
460
+ const current = { ...input, axisStates };
461
+ const admission = { ...current };
462
+ delete admission.supportedCommands;
463
+ const candidates = readyCandidates(potentialTransitions(admission, activePhase(admission)), admission);
464
+ const match = candidates.find(({ transition }) => transition.predecessor.axis !== "contract" && evidenceMatches(source, transition));
465
+ return match === undefined ? axisStates : { ...axisStates, [match.transition.target.axis]: match.transition.target.state };
466
+ }
423
467
  function safetyObligation(input, phase) {
424
468
  if (input.status === "archived" || input.status === "redirected")
425
469
  return {
@@ -446,6 +490,7 @@ export function projectTopicProgress(input) {
446
490
  const obligations = [
447
491
  ...(safety === undefined ? [] : [safety]),
448
492
  ...contextualObligations(input, phase),
493
+ ...transitionAvailabilityObligations(matches, input),
449
494
  ...missing,
450
495
  ...policies,
451
496
  ...transitionObligations,
@@ -480,26 +525,28 @@ function evidenceMatches(source, transition) {
480
525
  const evidence = transition.evidence;
481
526
  if (source.kind !== evidence.kind || source.type !== evidence.type)
482
527
  return false;
483
- return evidence.finality === undefined || source.finality === evidence.finality;
528
+ return (evidence.finality === undefined || source.finality === evidence.finality)
529
+ && (evidence.status === undefined || source.status === evidence.status)
530
+ && !["failed", "rejected", "cancelled", "disputed"].includes(source.status ?? "");
484
531
  }
485
532
  export function replayTopicShape(input, initialAxisStates = {}) {
486
533
  const axes = input.shape?.shape.axes ?? [];
487
534
  let states = Object.fromEntries(axes.map((axis) => [axis.code, initialAxisStates[axis.code] ?? axis.initialState]));
488
535
  const processedSources = [];
489
536
  for (const source of input.sources) {
537
+ if (!sourceIsCurrent(source, input))
538
+ continue;
539
+ const historical = { ...input };
540
+ delete historical.block;
541
+ delete historical.dispute;
542
+ delete historical.evaluationTime;
543
+ const context = source.context === undefined ? input : { ...historical, ...source.context };
544
+ const replayInput = { ...context, sources: processedSources, axisStates: states };
545
+ states = applyTopicShapeEvidence(replayInput, source);
490
546
  processedSources.push(source);
491
- const replayInput = { ...input, sources: processedSources, axisStates: states };
492
- if (states.contract === "proposed" && activationSatisfied(replayInput))
493
- states = { ...states, contract: "effective" };
494
- const transition = input.shape?.shape.transitions.find((candidate) => candidate.predecessor.axis !== "contract"
495
- && states[candidate.predecessor.axis] === candidate.predecessor.state
496
- && evidenceMatches(source, candidate)
497
- && candidate.gates.every((gate) => gateSatisfied(gate, replayInput)));
498
- if (transition !== undefined)
499
- states = { ...states, [transition.target.axis]: transition.target.state };
500
547
  }
501
548
  const finalInput = { ...input, sources: processedSources, axisStates: states };
502
- if (states.contract === "proposed" && activationSatisfied(finalInput))
549
+ if (states.contract === "proposed" && safetyObligation(finalInput, activePhase(finalInput)) === undefined && activationSatisfied(finalInput))
503
550
  states = { ...states, contract: "effective" };
504
551
  return states;
505
552
  }