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

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 (77) hide show
  1. package/README.md +5 -2
  2. package/dist/profiles/releases/1.0.0-rc.3.json +8442 -0
  3. package/dist/schemas/external-project-snapshot.schema.json +121 -0
  4. package/dist/schemas/external-work-state-map.schema.json +1 -1
  5. package/dist/schemas/project-plan.schema.json +75 -0
  6. package/dist/schemas/project-projection.schema.json +187 -0
  7. package/dist/schemas/topic-contract-body.schema.json +1 -0
  8. package/dist/schemas/topic-operation.schema.json +155 -13
  9. package/dist/schemas/topic-recipe.schema.json +53 -3
  10. package/dist/schemas/topic-root.schema.json +1 -1
  11. package/dist/schemas/topic-shape.schema.json +1 -1
  12. package/dist/schemas/topic-state.schema.json +1 -0
  13. package/dist/src/contracts/schemas.d.ts +734 -54
  14. package/dist/src/contracts/schemas.js +6 -0
  15. package/dist/src/contracts/schemas.js.map +1 -1
  16. package/dist/src/contracts/topic-contract.d.ts +4 -2
  17. package/dist/src/contracts/topic-contract.js +6 -1
  18. package/dist/src/contracts/topic-contract.js.map +1 -1
  19. package/dist/src/contracts/validator.js +53 -3
  20. package/dist/src/contracts/validator.js.map +1 -1
  21. package/dist/src/index.d.ts +11 -2
  22. package/dist/src/index.js +9 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/projector/payload.d.ts +53 -3
  25. package/dist/src/projector/payload.js +107 -15
  26. package/dist/src/projector/payload.js.map +1 -1
  27. package/dist/src/projector/project.js +3 -3
  28. package/dist/src/projector/project.js.map +1 -1
  29. package/dist/src/projector/state.d.ts +2 -2
  30. package/dist/src/projector/state.js +103 -3
  31. package/dist/src/projector/state.js.map +1 -1
  32. package/dist/src/projector/types.d.ts +10 -4
  33. package/dist/src/projector/types.js +1 -0
  34. package/dist/src/projector/types.js.map +1 -1
  35. package/dist/src/projects/project.d.ts +7 -0
  36. package/dist/src/projects/project.js +294 -0
  37. package/dist/src/projects/project.js.map +1 -0
  38. package/dist/src/projects/types.d.ts +127 -0
  39. package/dist/src/projects/types.js +14 -0
  40. package/dist/src/projects/types.js.map +1 -0
  41. package/dist/src/shapes/availability.d.ts +2 -0
  42. package/dist/src/shapes/availability.js +19 -0
  43. package/dist/src/shapes/availability.js.map +1 -0
  44. package/dist/src/shapes/commands.d.ts +3 -0
  45. package/dist/src/shapes/commands.js +10 -0
  46. package/dist/src/shapes/commands.js.map +1 -0
  47. package/dist/src/shapes/fields.d.ts +9 -0
  48. package/dist/src/shapes/fields.js +41 -0
  49. package/dist/src/shapes/fields.js.map +1 -0
  50. package/dist/src/shapes/now.js +4 -1
  51. package/dist/src/shapes/now.js.map +1 -1
  52. package/dist/src/shapes/progress.d.ts +5 -1
  53. package/dist/src/shapes/progress.js +99 -49
  54. package/dist/src/shapes/progress.js.map +1 -1
  55. package/dist/src/shapes/reachability.d.ts +3 -0
  56. package/dist/src/shapes/reachability.js +29 -0
  57. package/dist/src/shapes/reachability.js.map +1 -0
  58. package/dist/src/shapes/recipes.js +124 -21
  59. package/dist/src/shapes/recipes.js.map +1 -1
  60. package/dist/src/shapes/releases.d.ts +9 -0
  61. package/dist/src/shapes/releases.js +12 -0
  62. package/dist/src/shapes/releases.js.map +1 -0
  63. package/dist/src/shapes/resolver.d.ts +3 -0
  64. package/dist/src/shapes/resolver.js +62 -16
  65. package/dist/src/shapes/resolver.js.map +1 -1
  66. package/dist/src/shapes/types.d.ts +16 -2
  67. package/dist/src/shapes/types.js +2 -0
  68. package/dist/src/shapes/types.js.map +1 -1
  69. package/dist/src/work-bridge/types.d.ts +14 -1
  70. package/package.json +1 -1
  71. package/profiles/releases/1.0.0-rc.3.json +8442 -0
  72. package/recipes/agent-delivery.json +54 -4
  73. package/recipes/blueprint-design.json +613 -0
  74. package/recipes/registry.json +30 -6
  75. package/recipes/research-brief.json +53 -2
  76. package/recipes/software-build.json +566 -0
  77. package/recipes/verified-work-payment.json +56 -5
@@ -0,0 +1,294 @@
1
+ import { TopicProtocolError } from "../errors.js";
2
+ import { shapeDigest } from "../shapes/canonical.js";
3
+ import { PROJECT_CHILD_KINDS, } from "./types.js";
4
+ export function emptyTopicProjectProjection() {
5
+ return { version: 1, lifecycle: "proposed", milestones: [], childObligations: [] };
6
+ }
7
+ function invalid(operation, message) {
8
+ throw new TopicProtocolError("INVALID_OPERATION_PAYLOAD", `${operation.type} ${operation.operationId}: ${message}`, {
9
+ operationId: operation.operationId,
10
+ operationType: operation.type,
11
+ });
12
+ }
13
+ function record(value) {
14
+ return typeof value === "object" && value !== null && !Array.isArray(value)
15
+ ? value
16
+ : undefined;
17
+ }
18
+ function projectDefinition(contract) {
19
+ const body = record(contract?.bodyRef);
20
+ const kindRef = record(body?.kindRef);
21
+ if (kindRef?.source !== "standard" || kindRef.kind !== "project")
22
+ return undefined;
23
+ const project = record(body?.project);
24
+ if (project?.version !== 1)
25
+ return undefined;
26
+ return project;
27
+ }
28
+ function synchroniseDefinitions(state, contract, operation) {
29
+ const definition = projectDefinition(contract);
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)
38
+ return state;
39
+ return {
40
+ version: 1,
41
+ lifecycle: "proposed",
42
+ ...(definition.lead === undefined ? {} : { lead: definition.lead }),
43
+ ...(definition.closer === undefined ? {} : { closer: definition.closer }),
44
+ milestones: (definition.milestones ?? []).map((item) => ({
45
+ ...item,
46
+ status: "pending",
47
+ evidenceRefs: [],
48
+ })),
49
+ childObligations: (definition.childObligations ?? []).map((item) => ({
50
+ ...item,
51
+ status: item.topicId === undefined ? "unmet" : "linked",
52
+ })),
53
+ ...(definition.currentBlockingChildObligationId === undefined ? {} : { currentBlockingChildObligationId: definition.currentBlockingChildObligationId }),
54
+ ...(definition.methodManifestRef === undefined ? {} : { methodManifestRef: definition.methodManifestRef }),
55
+ ...(contract?.revision === undefined ? {} : { sourceContractRevision: contract.revision }),
56
+ };
57
+ }
58
+ function requireEffective(state, operation) {
59
+ if (state.lifecycle !== "effective" && state.lifecycle !== "closing") {
60
+ invalid(operation, "Project work operations require an effective Project");
61
+ }
62
+ }
63
+ function updateMilestone(state, operation, payload) {
64
+ requireEffective(state, operation);
65
+ const target = state.milestones.find(({ id }) => id === payload.milestoneId);
66
+ if (target === undefined)
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
+ }
71
+ return {
72
+ ...state,
73
+ milestones: state.milestones.map((milestone) => milestone.id === payload.milestoneId
74
+ ? { ...milestone, status: payload.status, evidenceRefs: payload.evidenceRefs, lastOperationId: operation.operationId }
75
+ : milestone),
76
+ };
77
+ }
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) {
88
+ requireEffective(state, operation);
89
+ const target = state.childObligations.find(({ id }) => id === payload.obligationId);
90
+ if (target === undefined)
91
+ return invalid(operation, `unknown Project child obligation: ${payload.obligationId}`);
92
+ if (payload.kind === "link-project-child") {
93
+ if (!PROJECT_CHILD_KINDS.includes(payload.childKind))
94
+ return invalid(operation, `unsupported Project child Kind: ${payload.childKind}`);
95
+ if (target.kind !== undefined && target.kind !== payload.childKind)
96
+ return invalid(operation, "linked child Kind does not match the obligation");
97
+ return {
98
+ ...state,
99
+ childObligations: state.childObligations.map((child) => child.id === target.id
100
+ ? { ...child, kind: payload.childKind, topicId: payload.topicId, status: "linked", lastOperationId: operation.operationId }
101
+ : child),
102
+ };
103
+ }
104
+ if (payload.kind === "unlink-project-child") {
105
+ return {
106
+ ...state,
107
+ childObligations: state.childObligations.map((child) => child.id === target.id
108
+ ? resetUnlinkedChild(child, definition)
109
+ : child),
110
+ };
111
+ }
112
+ if (payload.kind === "waive-project-child") {
113
+ return {
114
+ ...state,
115
+ childObligations: state.childObligations.map((child) => child.id === target.id
116
+ ? { ...child, status: "waived", waiverReason: payload.reason, lastOperationId: operation.operationId }
117
+ : child),
118
+ };
119
+ }
120
+ if (target.topicId !== payload.topicId)
121
+ return invalid(operation, "child status Topic does not match the linked child");
122
+ return {
123
+ ...state,
124
+ childObligations: state.childObligations.map((child) => child.id === target.id
125
+ ? {
126
+ ...child,
127
+ status: payload.status,
128
+ childRevision: payload.childRevision,
129
+ childShapeDigest: payload.childShapeDigest,
130
+ sourceEventId: payload.sourceEventId,
131
+ lastOperationId: operation.operationId,
132
+ }
133
+ : child),
134
+ };
135
+ }
136
+ function unresolvedRiskIds(state) {
137
+ return [
138
+ ...state.milestones.filter(({ status }) => status !== "met" && status !== "waived").map(({ id }) => `milestone:${id}`),
139
+ ...state.childObligations.filter(({ status }) => status !== "complete" && status !== "waived").map(({ id }) => `child:${id}`),
140
+ ].sort();
141
+ }
142
+ function validateCloseBinding(operation, payload, contract, actorAssignments) {
143
+ const body = record(contract?.bodyRef);
144
+ const project = record(body?.project);
145
+ const closer = record(project?.closer);
146
+ if (closer?.kind !== "actor" && closer?.kind !== "role")
147
+ invalid(operation, "Project closer is not assigned");
148
+ if (closer.kind === "actor" && closer.id !== operation.actor)
149
+ invalid(operation, "Project closer is not the accepting actor");
150
+ if (closer.kind === "role" && !actorAssignments?.[closer.id]?.includes(operation.actor)) {
151
+ invalid(operation, "Project closer role is not assigned to the accepting actor");
152
+ }
153
+ if (operation.capability !== "topic/close-project")
154
+ invalid(operation, "Project closer capability is not bound to the operation");
155
+ const contractBodyHash = contract?.bodyHash.startsWith("sha256:") ? contract.bodyHash : `sha256:${contract?.bodyHash}`;
156
+ if (contract?.revision !== payload.contractRevision || contractBodyHash !== payload.bodyHash) {
157
+ invalid(operation, "Project close acceptance is not bound to the effective contract");
158
+ }
159
+ if (typeof body?.shapeDigest === "string" && body.shapeDigest !== payload.shapeDigest) {
160
+ invalid(operation, "Project close acceptance is not bound to the effective Shape");
161
+ }
162
+ if (body?.activationPolicy !== undefined && shapeDigest(body.activationPolicy) !== payload.policyDigest) {
163
+ invalid(operation, "Project close acceptance is not bound to the effective activation policy");
164
+ }
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
+ }
178
+ function validateCloseEvidence(operation, payload, recipe) {
179
+ for (const required of recipe?.requiredCloseEvidenceTypes ?? []) {
180
+ if (!payload.evidenceRefs.some(({ type }) => type === required)) {
181
+ invalid(operation, `Project close requires evidence type: ${required}`);
182
+ }
183
+ }
184
+ }
185
+ function closeProject(state, operation, payload, contract, recipe, actorAssignments) {
186
+ if (state.lifecycle !== "closing")
187
+ return invalid(operation, "Project must enter closing before close acceptance");
188
+ validateCloseBinding(operation, payload, contract, actorAssignments);
189
+ const blocker = state.currentBlockingChildObligationId === undefined
190
+ ? undefined
191
+ : state.childObligations.find(({ id }) => id === state.currentBlockingChildObligationId);
192
+ if (blocker !== undefined && blocker.status !== "complete" && blocker.status !== "waived") {
193
+ return invalid(operation, "current blocking child must be completed or waived before close");
194
+ }
195
+ const accepted = [...new Set(payload.acceptedRemainingRiskIds)].sort();
196
+ const unresolved = unresolvedRiskIds(state);
197
+ if (accepted.length !== unresolved.length || unresolved.some((id) => !accepted.includes(id)))
198
+ return invalid(operation, "close acceptance must enumerate every remaining risk");
199
+ validateCloseEvidence(operation, payload, recipe);
200
+ return {
201
+ ...state,
202
+ lifecycle: "closed",
203
+ closeAcceptance: {
204
+ acceptedBy: operation.actor,
205
+ acceptedAt: operation.createdAt,
206
+ contractRevision: payload.contractRevision,
207
+ bodyHash: payload.bodyHash,
208
+ shapeDigest: payload.shapeDigest,
209
+ policyDigest: payload.policyDigest,
210
+ requiredAbility: "topic/close-project",
211
+ authorityProofRef: payload.authorityProofRef,
212
+ acceptedRemainingRiskIds: accepted,
213
+ note: payload.note,
214
+ evidenceRefs: payload.evidenceRefs,
215
+ operationId: operation.operationId,
216
+ },
217
+ };
218
+ }
219
+ function applyProjectSetupEvidence(state, operation, activationSatisfied) {
220
+ if (activationSatisfied && state.lead === undefined)
221
+ return invalid(operation, "Project setup cannot become effective before a lead is assigned");
222
+ if (activationSatisfied || (state.lifecycle !== "effective" && state.lifecycle !== "closing"))
223
+ return state;
224
+ const { closeRequest, ...withoutCloseRequest } = state;
225
+ void closeRequest;
226
+ return { ...withoutCloseRequest, lifecycle: "proposed" };
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
+ }
240
+ export function applyProjectOperation(current, operation, contract, recipe, activationSatisfied = false, actorAssignments) {
241
+ let state = synchroniseDefinitions(current, contract, operation);
242
+ const payload = operation.parsedPayload;
243
+ if (state.lifecycle === "proposed" && activationSatisfied && state.sourceContractRevision !== undefined && state.lead !== undefined) {
244
+ state = { ...state, lifecycle: "effective" };
245
+ }
246
+ if (["confirm-setup", "withdraw-setup-confirmation", "record-assent", "withdraw-assent"].includes(payload.kind)) {
247
+ return applyProjectSetupEvidence(state, operation, activationSatisfied);
248
+ }
249
+ if (payload.kind === "record-project-milestone")
250
+ return updateMilestone(state, operation, payload);
251
+ if (["link-project-child", "unlink-project-child", "record-project-child-status", "waive-project-child"].includes(payload.kind)) {
252
+ return updateChild(state, operation, payload, projectDefinition(contract));
253
+ }
254
+ if (payload.kind === "set-project-blocker")
255
+ return updateProjectBlocker(state, operation, payload, contract, actorAssignments);
256
+ if (payload.kind === "request-project-close") {
257
+ requireEffective(state, operation);
258
+ const body = record(contract?.bodyRef);
259
+ const project = record(body?.project);
260
+ const closer = record(project?.closer);
261
+ if (closer?.kind !== "actor" && closer?.kind !== "role")
262
+ return invalid(operation, "Project cannot enter closing before a closer is assigned");
263
+ return {
264
+ ...state,
265
+ lifecycle: "closing",
266
+ closeRequest: {
267
+ requestedBy: operation.actor,
268
+ requestedAt: operation.createdAt,
269
+ operationId: operation.operationId,
270
+ ...(payload.note === undefined ? {} : { note: payload.note }),
271
+ },
272
+ };
273
+ }
274
+ if (payload.kind === "close-project")
275
+ return closeProject(state, operation, payload, contract, recipe, actorAssignments);
276
+ return state;
277
+ }
278
+ export function projectProgressBlock(project) {
279
+ if (project.lifecycle !== "effective" && project.lifecycle !== "closing")
280
+ return undefined;
281
+ const id = project.currentBlockingChildObligationId;
282
+ const child = id === undefined ? undefined : project.childObligations.find((candidate) => candidate.id === id);
283
+ if (child === undefined || child.status === "complete" || child.status === "waived")
284
+ return undefined;
285
+ return {
286
+ condition: "blocked",
287
+ sourceId: child.lastOperationId ?? `project-child:${child.id}`,
288
+ target: child.topicId === undefined
289
+ ? { kind: "resource", id: `project-child-obligation:${child.id}` }
290
+ : { kind: "resource", id: child.topicId },
291
+ reasonCode: "project.child-blocking",
292
+ };
293
+ }
294
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/projects/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import type { TopicSubjectRefV1 } from "../shapes/types.js";
2
+ export declare const PROJECT_CHILD_KINDS: readonly ["task", "agent_task", "proposal", "evaluation", "claims", "incident", "question", "discussion"];
3
+ export declare const PROJECT_MILESTONE_STATUSES: readonly ["pending", "in-progress", "met", "waived"];
4
+ export declare const PROJECT_CHILD_STATUSES: readonly ["unmet", "linked", "complete", "waived"];
5
+ export declare const PROJECT_LIFECYCLE_STATES: readonly ["proposed", "effective", "closing", "closed"];
6
+ export type ProjectChildKindV1 = (typeof PROJECT_CHILD_KINDS)[number];
7
+ export type ProjectMilestoneStatusV1 = (typeof PROJECT_MILESTONE_STATUSES)[number];
8
+ export type ProjectChildStatusV1 = (typeof PROJECT_CHILD_STATUSES)[number];
9
+ export type ProjectLifecycleStateV1 = (typeof PROJECT_LIFECYCLE_STATES)[number];
10
+ export interface ProjectMilestoneDefinitionV1 {
11
+ readonly id: string;
12
+ readonly name: string;
13
+ readonly evidenceRequired?: readonly string[];
14
+ }
15
+ export interface ProjectChildObligationDefinitionV1 {
16
+ readonly id: string;
17
+ readonly title: string;
18
+ readonly kind?: ProjectChildKindV1;
19
+ readonly topicId?: string;
20
+ }
21
+ export interface ProjectMethodManifestRefV1 {
22
+ readonly id: string;
23
+ readonly version: string;
24
+ readonly digest: `sha256:${string}`;
25
+ }
26
+ /**
27
+ * A reviewed slot for a provider-neutral tracker binding. A slot is only
28
+ * configuration: it neither creates an external resource nor grants the
29
+ * bridge authority to write either system.
30
+ */
31
+ export interface ProjectTrackerBindingSlotV1 {
32
+ readonly id: string;
33
+ readonly resourceClass: "project" | "work-item";
34
+ readonly role: "primary" | "supporting" | "verification" | "delivery";
35
+ readonly provider?: string;
36
+ readonly resourceType?: string;
37
+ readonly bindingId?: string;
38
+ readonly label?: string;
39
+ }
40
+ /**
41
+ * Project setup. Recipes may suggest values, but only accepted contract content
42
+ * belongs here. In particular, no recipe may manufacture a lead, milestone,
43
+ * child Topic, authority, or date.
44
+ */
45
+ export interface TopicProjectDefinitionV1 {
46
+ readonly version: 1;
47
+ readonly lead?: TopicSubjectRefV1;
48
+ readonly closer?: TopicSubjectRefV1;
49
+ readonly milestones?: readonly ProjectMilestoneDefinitionV1[];
50
+ readonly childObligations?: readonly ProjectChildObligationDefinitionV1[];
51
+ readonly currentBlockingChildObligationId?: string;
52
+ readonly methodManifestRef?: ProjectMethodManifestRefV1;
53
+ readonly trackerBindings?: readonly ProjectTrackerBindingSlotV1[];
54
+ }
55
+ export interface ProjectRecipeEntryPointV1 {
56
+ readonly code: string;
57
+ readonly label: string;
58
+ readonly kind: "action" | "flow";
59
+ readonly target: string;
60
+ readonly suggestedChildKinds: readonly ProjectChildKindV1[];
61
+ readonly requiresReview: true;
62
+ }
63
+ export interface ProjectRecipeMilestoneSuggestionV1 {
64
+ readonly code: string;
65
+ readonly label: string;
66
+ readonly provenance: "recipe";
67
+ readonly requiresAcceptance: true;
68
+ }
69
+ export interface ProjectRecipeConfigurationV1 {
70
+ readonly version: 1;
71
+ readonly compatibleKind: "project";
72
+ readonly compatibleShapeVersion: 1;
73
+ readonly methodManifestRef?: ProjectMethodManifestRefV1;
74
+ readonly allowedChildKinds: readonly ProjectChildKindV1[];
75
+ readonly entryPoints: readonly ProjectRecipeEntryPointV1[];
76
+ readonly milestoneSuggestions: readonly ProjectRecipeMilestoneSuggestionV1[];
77
+ readonly requiredCloseEvidenceTypes?: readonly string[];
78
+ }
79
+ export interface ProjectMilestoneProjectionV1 extends ProjectMilestoneDefinitionV1 {
80
+ readonly status: ProjectMilestoneStatusV1;
81
+ readonly evidenceRefs: readonly string[];
82
+ readonly lastOperationId?: string;
83
+ }
84
+ export interface ProjectChildProjectionV1 extends ProjectChildObligationDefinitionV1 {
85
+ readonly waiverReason?: string;
86
+ readonly status: ProjectChildStatusV1;
87
+ readonly childRevision?: string;
88
+ readonly childShapeDigest?: `sha256:${string}`;
89
+ readonly sourceEventId?: string;
90
+ readonly lastOperationId?: string;
91
+ }
92
+ export interface ProjectCloseRequestV1 {
93
+ readonly requestedBy: string;
94
+ readonly requestedAt: string;
95
+ readonly operationId: string;
96
+ readonly note?: string;
97
+ }
98
+ export interface ProjectCloseAcceptanceV1 {
99
+ readonly acceptedBy: string;
100
+ readonly acceptedAt: string;
101
+ readonly contractRevision: string;
102
+ readonly bodyHash: `sha256:${string}`;
103
+ readonly shapeDigest: `sha256:${string}`;
104
+ readonly policyDigest: `sha256:${string}`;
105
+ readonly requiredAbility: "topic/close-project";
106
+ readonly authorityProofRef: string;
107
+ readonly acceptedRemainingRiskIds: readonly string[];
108
+ readonly note: string;
109
+ readonly evidenceRefs: readonly {
110
+ readonly type: string;
111
+ readonly id: string;
112
+ }[];
113
+ readonly operationId: string;
114
+ }
115
+ export interface TopicProjectProjectionV1 {
116
+ readonly version: 1;
117
+ readonly lifecycle: ProjectLifecycleStateV1;
118
+ readonly lead?: TopicSubjectRefV1;
119
+ readonly closer?: TopicSubjectRefV1;
120
+ readonly milestones: readonly ProjectMilestoneProjectionV1[];
121
+ readonly childObligations: readonly ProjectChildProjectionV1[];
122
+ readonly currentBlockingChildObligationId?: string;
123
+ readonly methodManifestRef?: ProjectMethodManifestRefV1;
124
+ readonly closeRequest?: ProjectCloseRequestV1;
125
+ readonly closeAcceptance?: ProjectCloseAcceptanceV1;
126
+ readonly sourceContractRevision?: string;
127
+ }
@@ -0,0 +1,14 @@
1
+ export const PROJECT_CHILD_KINDS = [
2
+ "task",
3
+ "agent_task",
4
+ "proposal",
5
+ "evaluation",
6
+ "claims",
7
+ "incident",
8
+ "question",
9
+ "discussion",
10
+ ];
11
+ export const PROJECT_MILESTONE_STATUSES = ["pending", "in-progress", "met", "waived"];
12
+ export const PROJECT_CHILD_STATUSES = ["unmet", "linked", "complete", "waived"];
13
+ export const PROJECT_LIFECYCLE_STATES = ["proposed", "effective", "closing", "closed"];
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/projects/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAU,CAAC;AAC/F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AACzF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC"}
@@ -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"}
@@ -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,3 +1,7 @@
1
- import type { TopicProgressInputV2, TopicProgressProjectionV2 } from "./types.js";
1
+ import type { TopicProgressInputV2, TopicProgressProjectionV2, TopicProgressSourceV2 } from "./types.js";
2
+ /** Evaluate the current activation evidence without preserving an earlier effective axis state. */
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>>;
2
6
  export declare function projectTopicProgress(input: TopicProgressInputV2): TopicProgressProjectionV2;
3
7
  export declare function replayTopicShape(input: Omit<TopicProgressInputV2, "axisStates">, initialAxisStates?: Readonly<Record<string, string>>): Readonly<Record<string, string>>;