@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
@@ -7,6 +7,7 @@ import decisionToPayTemplateV2 from "../../schemas/decision-to-pay-template-v2.s
7
7
  import deliveryDecision from "../../schemas/delivery-decision.schema.json" with { type: "json" };
8
8
  import deliveryPacket from "../../schemas/delivery-packet.schema.json" with { type: "json" };
9
9
  import evaluationAssertion from "../../schemas/evaluation-assertion.schema.json" with { type: "json" };
10
+ import externalProjectSnapshot from "../../schemas/external-project-snapshot.schema.json" with { type: "json" };
10
11
  import externalWorkBinding from "../../schemas/external-work-binding.schema.json" with { type: "json" };
11
12
  import externalWorkStateMap from "../../schemas/external-work-state-map.schema.json" with { type: "json" };
12
13
  import externalSessionBinding from "../../schemas/external-session-binding.schema.json" with { type: "json" };
@@ -15,6 +16,8 @@ import payableObligation from "../../schemas/payable-obligation.schema.json" wit
15
16
  import payableObligationV2 from "../../schemas/payable-obligation-v2.schema.json" with { type: "json" };
16
17
  import paymentTerms from "../../schemas/payment-terms.schema.json" with { type: "json" };
17
18
  import paymentTermsV2 from "../../schemas/payment-terms-v2.schema.json" with { type: "json" };
19
+ import projectPlan from "../../schemas/project-plan.schema.json" with { type: "json" };
20
+ import projectProjection from "../../schemas/project-projection.schema.json" with { type: "json" };
18
21
  import roomPolicy from "../../schemas/room-policy.schema.json" with { type: "json" };
19
22
  import settlementReceipt from "../../schemas/settlement-receipt.schema.json" with { type: "json" };
20
23
  import topicCapsule from "../../schemas/topic-capsule.schema.json" with { type: "json" };
@@ -48,6 +51,7 @@ export const SCHEMA_REGISTRY = Object.freeze({
48
51
  "delivery-decision": deliveryDecision,
49
52
  "delivery-packet": deliveryPacket,
50
53
  "evaluation-assertion": evaluationAssertion,
54
+ "external-project-snapshot": externalProjectSnapshot,
51
55
  "external-session-binding": externalSessionBinding,
52
56
  "external-work-binding": externalWorkBinding,
53
57
  "external-work-state-map": externalWorkStateMap,
@@ -56,6 +60,8 @@ export const SCHEMA_REGISTRY = Object.freeze({
56
60
  "payable-obligation-v2": payableObligationV2,
57
61
  "payment-terms": paymentTerms,
58
62
  "payment-terms-v2": paymentTermsV2,
63
+ "project-plan": projectPlan,
64
+ "project-projection": projectProjection,
59
65
  "room-policy": roomPolicy,
60
66
  "settlement-receipt": settlementReceipt,
61
67
  "topic-capsule": topicCapsule,
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/contracts/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/contracts/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import type { TopicProjectDefinitionV1 } from "../projects/types.js";
1
2
  import type { TopicKindProfileRef, TopicKindResourceBinding } from "./topic-kind-profile.js";
2
3
  import type { BaseRecipeCodeV1, TopicActivationPolicyV1, TopicAssentPolicyV1, TopicClaimBindingV1, TopicRecipeRefV1, TopicShapeSourceRefV1 } from "../shapes/types.js";
3
- export declare const PERSISTED_TOPIC_KINDS: readonly ["task", "agent_task", "proposal", "evaluation", "claims", "question", "discussion", "incident"];
4
+ export declare const PERSISTED_TOPIC_KINDS: readonly ["project", "task", "agent_task", "proposal", "evaluation", "claims", "question", "discussion", "incident"];
4
5
  export declare const BASE_TOPIC_RECIPES: readonly ["project", "flow", "proposal", "evaluation", "claims", "research", "discussion", "incident"];
5
6
  /** @deprecated v1 writers use BASE_TOPIC_RECIPES and the baseRecipe field. */
6
7
  export declare const TOPIC_CONTRACT_RECIPES: readonly ["project", "flow", "proposal", "evaluation", "claims", "research", "discussion", "incident"];
@@ -17,7 +18,7 @@ export type TopicKindRef = {
17
18
  readonly label: string;
18
19
  readonly baseKind: PersistedTopicKind;
19
20
  };
20
- export type TopicIconName = "task" | "agent" | "proposal" | "evaluation" | "claims" | "question" | "discussion" | "incident";
21
+ export type TopicIconName = "project" | "task" | "agent" | "proposal" | "evaluation" | "claims" | "question" | "discussion" | "incident";
21
22
  export type TopicAppearance = {
22
23
  readonly glyph?: {
23
24
  readonly type: "emoji";
@@ -102,6 +103,7 @@ interface TopicContractBodyCommon {
102
103
  readonly reviewAt?: string;
103
104
  };
104
105
  readonly ownerId?: string;
106
+ readonly project?: TopicProjectDefinitionV1;
105
107
  readonly scope?: {
106
108
  readonly included?: readonly TopicStatementV2[];
107
109
  readonly excluded?: readonly TopicStatementV2[];
@@ -1,5 +1,6 @@
1
1
  import { TopicProtocolError } from "../errors.js";
2
2
  export const PERSISTED_TOPIC_KINDS = [
3
+ "project",
3
4
  "task",
4
5
  "agent_task",
5
6
  "proposal",
@@ -22,6 +23,7 @@ export const BASE_TOPIC_RECIPES = [
22
23
  /** @deprecated v1 writers use BASE_TOPIC_RECIPES and the baseRecipe field. */
23
24
  export const TOPIC_CONTRACT_RECIPES = BASE_TOPIC_RECIPES;
24
25
  const RECIPE_BY_KIND = {
26
+ project: "project",
25
27
  task: "project",
26
28
  agent_task: "flow",
27
29
  proposal: "proposal",
@@ -48,12 +50,15 @@ function acceptedOutcome(body) {
48
50
  return [];
49
51
  }
50
52
  function outcomeRequirements(body, kind) {
51
- if (!["task", "agent_task", "proposal", "evaluation", "claims", "question"].includes(kind))
53
+ if (!["project", "task", "agent_task", "proposal", "evaluation", "claims", "question"].includes(kind))
52
54
  return [];
53
55
  return requiredText(body.outcome?.statement?.text, "/outcome/statement/text", `Accepted ${kind} contracts require an outcome`);
54
56
  }
55
57
  function kindRequirements(body, kind) {
56
58
  const issues = [];
59
+ if (kind === "project" && body.project?.lead === undefined) {
60
+ issues.push({ path: "/project/lead", message: "Accepted Projects require a lead" });
61
+ }
57
62
  if (kind === "task" && !body.ownerId) {
58
63
  issues.push({ path: "/ownerId", message: "Accepted Tasks require an owner" });
59
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"topic-contract.js","sourceRoot":"","sources":["../../../src/contracts/topic-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topic-contract.js","sourceRoot":"","sources":["../../../src/contracts/topic-contract.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,25 @@ const ajv = new Ajv2020({ allErrors: true, strict: true });
6
6
  const validators = new Map();
7
7
  const addFormats = formatsModule.default;
8
8
  addFormats(ajv);
9
+ ajv.addKeyword({
10
+ keyword: "uniqueItemProperty",
11
+ type: "array",
12
+ schemaType: "string",
13
+ validate: (property, data) => {
14
+ if (!Array.isArray(data))
15
+ return true;
16
+ const seen = new Set();
17
+ for (const item of data) {
18
+ if (typeof item !== "object" || item === null || Array.isArray(item))
19
+ continue;
20
+ const value = item[property];
21
+ if (seen.has(value))
22
+ return false;
23
+ seen.add(value);
24
+ }
25
+ return true;
26
+ },
27
+ });
9
28
  for (const schema of Object.values(SCHEMA_REGISTRY))
10
29
  ajv.addSchema(schema);
11
30
  const dateTimeValidator = ajv.compile({ type: "string", format: "date-time" });
@@ -34,14 +53,45 @@ function normaliseError(error) {
34
53
  message: `${path} ${error.message ?? "is invalid"}`,
35
54
  };
36
55
  }
56
+ function projectBlockerReferenceError(value, prefix = "") {
57
+ if (typeof value !== "object" || value === null || Array.isArray(value))
58
+ return undefined;
59
+ const project = value;
60
+ const blockerId = project.currentBlockingChildObligationId;
61
+ if (typeof blockerId !== "string")
62
+ return undefined;
63
+ const childObligations = project.childObligations;
64
+ if (Array.isArray(childObligations) && childObligations.some((child) => (typeof child === "object"
65
+ && child !== null
66
+ && !Array.isArray(child)
67
+ && child.id === blockerId)))
68
+ return undefined;
69
+ const instancePath = `${prefix}/currentBlockingChildObligationId`;
70
+ return {
71
+ instancePath,
72
+ keyword: "projectBlockerReference",
73
+ message: `${instancePath} must name a declared child obligation`,
74
+ };
75
+ }
76
+ function semanticErrors(name, value) {
77
+ if (name === "project-plan") {
78
+ const error = projectBlockerReferenceError(value);
79
+ return error === undefined ? [] : [error];
80
+ }
81
+ if (name !== "topic-contract-body" || typeof value !== "object" || value === null || Array.isArray(value))
82
+ return [];
83
+ const error = projectBlockerReferenceError(value.project, "/project");
84
+ return error === undefined ? [] : [error];
85
+ }
37
86
  export function validateContract(name, value) {
38
87
  if (!isContractName(name)) {
39
88
  throw new TopicProtocolError("UNKNOWN_CONTRACT", `Unknown Topic Protocol contract: ${String(name)}`, { name });
40
89
  }
41
90
  const validator = validatorFor(name);
42
- if (validator(value))
43
- return { ok: true };
44
- return { ok: false, errors: (validator.errors ?? []).map(normaliseError) };
91
+ if (!validator(value))
92
+ return { ok: false, errors: (validator.errors ?? []).map(normaliseError) };
93
+ const errors = semanticErrors(name, value);
94
+ return errors.length === 0 ? { ok: true } : { ok: false, errors };
45
95
  }
46
96
  export function assertContract(name, value) {
47
97
  const result = validateContract(name, value);
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/contracts/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/contracts/validator.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export { TOPIC_ACTION_RUNTIME_PROVIDERS, TOPIC_ACTION_STATUSES, type ActionReceiptReference, type ActionReceiptV2, type ProjectedTopicAction, type Sha256Uri, type TopicActionRequestV1, type TopicActionRuntimeProvider, type TopicActionStatus, type TopicFlowBindingV1, } from "./action-runtime/types.js";
2
2
  export { CONTRACT_NAMES, type ContractName, } from "./contracts/schemas.js";
3
3
  export { assertContract, validateContract, type ContractValidationError, type ContractValidationResult, } from "./contracts/validator.js";
4
- export { PERSISTED_TOPIC_KINDS, BASE_TOPIC_RECIPES, TOPIC_CONTRACT_RECIPES, assertContractComplete, baseTopicKind, contractCompleteness, topicRecipeForKind, type PersistedTopicKind, type TemporalTarget, type TopicAppearance, type TopicAutomationBindingV2, type TopicContractBodyV2, type TopicContractBodyV3, type TopicContractBodyV4, type BaseTopicRecipe, type TopicContractCompletenessIssue, type TopicContractRecipe, type TopicIconName, type TopicKindRef, type TopicRecurrence, type TopicReminder, type TopicRiskV2, type TopicStatementV2, type TopicUserSettings, type Weekday, } from "./contracts/topic-contract.js";
4
+ export { PERSISTED_TOPIC_KINDS, BASE_TOPIC_RECIPES, TOPIC_CONTRACT_RECIPES, assertContractComplete, baseTopicKind, contractCompleteness, topicRecipeForKind, type PersistedTopicKind, type TemporalTarget, type TopicAppearance, type TopicAutomationBindingV2, type TopicContractBodyV2, type TopicContractBodyV3, type TopicContractBodyV4, type BaseTopicRecipe, type TopicContractCompletenessIssue, type TopicContractRecipe, type TopicIconName, type TopicKindRef, type TopicRecurrence, type TopicReminder, type TopicRiskV2, type TopicOutcomeV2, type TopicStatementV2, type TopicUserSettings, type Weekday, } from "./contracts/topic-contract.js";
5
5
  export { JOB_CARD_KIND_PROFILE, JOB_CARD_KIND_PROFILE_REF, JOB_CARD_KIND_REF, JOB_CARD_PHASES, JOB_CARD_PRIORITIES, contractCompletenessWithProfiles, resolveTopicKindProfile, topicKindProfileActionIssues, type JobCardPhase, type JobCardPriority, type JobCardV1, type TopicKindProfileRef, type TopicKindActionReference, type TopicKindProfile, type TopicKindProfileV1, type TopicKindProfileV2, type TopicActionContractDescriptor, type TopicActionManifestIndex, type TopicKindProfileActionIssue, type TopicKindResourceBinding, } from "./contracts/topic-kind-profile.js";
6
6
  export { TopicProtocolError, type TopicProtocolErrorCode, } from "./errors.js";
7
7
  export { projectTopic } from "./projector/project.js";
@@ -19,7 +19,9 @@ export { searchTopicIndex } from "./indexing/search.js";
19
19
  export { rankTopicIndex } from "./indexing/rank.js";
20
20
  export { TOPIC_INDEX_COMPLETENESS, TOPIC_INDEX_RANK_REASONS, TOPIC_INDEX_STORAGE_STATES, TOPIC_INDEX_UNREAD_STATES, TOPIC_NOTIFICATION_MODES, type RankedTopicIndexEntry, type TopicAttentionSignalMap, type TopicAttentionSignals, type TopicIndexCompleteness, type TopicIndexDomain, type TopicIndexEntry, type TopicIndexObservation, type TopicIndexRankReason, type TopicIndexReconciliation, type TopicIndexSearchFilters, type TopicIndexSnapshot, type TopicIndexStorageState, type TopicIndexTombstone, type TopicIndexUnreadState, type TopicNotificationMode, type TopicPreference, type TopicPreferenceMap, } from "./indexing/types.js";
21
21
  export { mapExternalWorkState } from "./work-bridge/mapping.js";
22
- export { EXTERNAL_WORK_HEALTH_STATES, EXTERNAL_WORK_STATES, EXTERNAL_WORKFLOW_CATEGORIES, type ApprovalDecisionV1, type ClaimRecordV1, type DeliveryDecisionV1, type DeliveryPacketV1, type EvaluationAssertionV1, type ExternalWorkBindingV1, type ExternalWorkCheckpoint, type ExternalWorkHealth, type ExternalWorkSync, type ExternalWorkTombstone, type ExternalWorkflowCategory, type ExternalWorkflowStateInput, type ExternalWorkState, type ExternalWorkStateMapV1, type ExternalWorkStateMapping, type ExternalWorkStateMappingResult, type ProjectedExternalWorkBinding, type SettlementReceiptV1, type Sha256Digest, type TopicWorkBridgeProjection, type WorkArtifactReference, type WorkEvidenceReference, type WorkItemSnapshotV1, } from "./work-bridge/types.js";
22
+ export { EXTERNAL_WORK_HEALTH_STATES, EXTERNAL_WORK_STATES, EXTERNAL_WORKFLOW_CATEGORIES, type ApprovalDecisionV1, type ClaimRecordV1, type DeliveryDecisionV1, type DeliveryPacketV1, type EvaluationAssertionV1, type ExternalProjectSnapshotV1, type ExternalWorkBindingV1, type ExternalWorkCheckpoint, type ExternalWorkHealth, type ExternalWorkSync, type ExternalWorkTombstone, type ExternalWorkflowCategory, type ExternalWorkflowStateInput, type ExternalWorkState, type ExternalWorkStateMapV1, type ExternalWorkStateMapping, type ExternalWorkStateMappingResult, type ExternalWorkSnapshotV1, type ProjectedExternalWorkBinding, type SettlementReceiptV1, type Sha256Digest, type TopicWorkBridgeProjection, type WorkArtifactReference, type WorkEvidenceReference, type WorkItemSnapshotV1, } from "./work-bridge/types.js";
23
+ export { applyProjectOperation, emptyTopicProjectProjection, projectProgressBlock } from "./projects/project.js";
24
+ export { PROJECT_CHILD_KINDS, PROJECT_CHILD_STATUSES, PROJECT_LIFECYCLE_STATES, PROJECT_MILESTONE_STATUSES, type ProjectChildKindV1, type ProjectChildObligationDefinitionV1, type ProjectChildProjectionV1, type ProjectChildStatusV1, type ProjectCloseAcceptanceV1, type ProjectCloseRequestV1, type ProjectLifecycleStateV1, type ProjectMethodManifestRefV1, type ProjectMilestoneDefinitionV1, type ProjectMilestoneProjectionV1, type ProjectMilestoneStatusV1, type ProjectRecipeConfigurationV1, type ProjectRecipeEntryPointV1, type ProjectRecipeMilestoneSuggestionV1, type ProjectTrackerBindingSlotV1, type TopicProjectDefinitionV1, type TopicProjectProjectionV1, } from "./projects/types.js";
23
25
  export { canonicalShapeJson, shapeDigest } from "./shapes/canonical.js";
24
26
  export { inferredRecordMayAutoAccept, resolveTopicClaimBinding, type TopicClaimCollectionResolutionV1, } from "./shapes/claims.js";
25
27
  export { projectTopicNow } from "./shapes/now.js";
@@ -28,3 +30,10 @@ export { BASE_RECIPE_REGISTRY, KIND_SHAPE_REGISTRY, TOPIC_RECIPE_REGISTRY } from
28
30
  export { resolveEffectiveTopicShape, topicRecipeRef, type ResolveEffectiveTopicShapeInputV1, } from "./shapes/resolver.js";
29
31
  export { TOPIC_STATE_PROFILE_V3, TOPIC_STATE_PROFILE_V4, type TopicContractAssentV1, type TopicContractConfirmationV1, type TopicContractHeadsV4, type TopicContractReferenceV3, type TopicContractReferenceV4, type TopicContractStateV3, type TopicContractStateV4, } from "./shapes/state.js";
30
32
  export { BASE_RECIPE_CODES, SHAPE_ATTENTION_STATES, SHAPE_CONDITIONS, SHAPE_PHASES, TOPIC_RECIPE_CODES, type BaseRecipeCodeV1, type EffectiveTopicShapeV1, type ResolvedTopicClaimBindingV1, type ShapeAttentionV1, type ShapeConditionV1, type ShapeConfirmationPolicyV1, type ShapeConsequenceClassV1, type ShapeEvidenceRequirementV1, type ShapeGateV1, type ShapePhaseV1, type ShapeProgressRuleV1, type ShapeStateAxisV1, type ShapeStateDefinitionV1, type ShapeTransitionV1, type TopicClaimBindingV1, type TopicActivationPolicyV1, type TopicAssentPolicyV1, type TopicConfirmationPolicyV1, type TopicDisputePolicyV1, type TopicDisputeV1, type TopicEvaluationTimeV1, type TopicNowProjectionV1, type TopicNowProjectionV2, type TopicNowObligationV1, type TopicObligationActionabilityV1, type TopicObligationKindV1, type TopicObligationStatusV1, type TopicObligationV1, type TopicProgressBlockV1, type TopicProgressInputV1, type TopicProgressInputV2, type TopicProgressProjectionV1, type TopicProgressProjectionV2, type TopicProgressSourceV1, type TopicProgressSourceV2, type TopicRecipeCodeV1, type TopicRecipeRefV1, type TopicRecipeV1, type TopicShapeSourceRefV1, type TopicShapeOverlayV1, type TopicShapeV1, type TopicStateTagV1, type TopicTransitionCandidateV1, type TopicSubjectRefV1, type TopicViewerAuthorityV1, } from "./shapes/types.js";
33
+ export { topicSetupFieldState } from "./shapes/fields.js";
34
+ export { TOPIC_SHAPE_RELEASE } from "./shapes/releases.js";
35
+ export { applyTopicShapeEvidence } from "./shapes/progress.js";
36
+ export { resolveTopicRecipe } from "./shapes/resolver.js";
37
+ export { parsePayload as parseTopicOperationPayload } from "./projector/payload.js";
38
+ export { topicFieldGateSatisfied } from "./shapes/fields.js";
39
+ export { TOPIC_COMMAND_OPERATIONS } from "./shapes/commands.js";
package/dist/src/index.js CHANGED
@@ -20,6 +20,8 @@ export { rankTopicIndex } from "./indexing/rank.js";
20
20
  export { TOPIC_INDEX_COMPLETENESS, TOPIC_INDEX_RANK_REASONS, TOPIC_INDEX_STORAGE_STATES, TOPIC_INDEX_UNREAD_STATES, TOPIC_NOTIFICATION_MODES, } from "./indexing/types.js";
21
21
  export { mapExternalWorkState } from "./work-bridge/mapping.js";
22
22
  export { EXTERNAL_WORK_HEALTH_STATES, EXTERNAL_WORK_STATES, EXTERNAL_WORKFLOW_CATEGORIES, } from "./work-bridge/types.js";
23
+ export { applyProjectOperation, emptyTopicProjectProjection, projectProgressBlock } from "./projects/project.js";
24
+ export { PROJECT_CHILD_KINDS, PROJECT_CHILD_STATUSES, PROJECT_LIFECYCLE_STATES, PROJECT_MILESTONE_STATUSES, } from "./projects/types.js";
23
25
  export { canonicalShapeJson, shapeDigest } from "./shapes/canonical.js";
24
26
  export { inferredRecordMayAutoAccept, resolveTopicClaimBinding, } from "./shapes/claims.js";
25
27
  export { projectTopicNow } from "./shapes/now.js";
@@ -28,4 +30,11 @@ export { BASE_RECIPE_REGISTRY, KIND_SHAPE_REGISTRY, TOPIC_RECIPE_REGISTRY } from
28
30
  export { resolveEffectiveTopicShape, topicRecipeRef, } from "./shapes/resolver.js";
29
31
  export { TOPIC_STATE_PROFILE_V3, TOPIC_STATE_PROFILE_V4, } from "./shapes/state.js";
30
32
  export { BASE_RECIPE_CODES, SHAPE_ATTENTION_STATES, SHAPE_CONDITIONS, SHAPE_PHASES, TOPIC_RECIPE_CODES, } from "./shapes/types.js";
33
+ export { topicSetupFieldState } from "./shapes/fields.js";
34
+ export { TOPIC_SHAPE_RELEASE } from "./shapes/releases.js";
35
+ export { applyTopicShapeEvidence } from "./shapes/progress.js";
36
+ export { resolveTopicRecipe } from "./shapes/resolver.js";
37
+ export { parsePayload as parseTopicOperationPayload } from "./projector/payload.js";
38
+ export { topicFieldGateSatisfied } from "./shapes/fields.js";
39
+ export { TOPIC_COMMAND_OPERATIONS } from "./shapes/commands.js";
31
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,GAStB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,gBAAgB,GAGjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,GAoBnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gCAAgC,EAChC,uBAAuB,EACvB,4BAA4B,GAa7B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,EACb,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,+BAA+B,EAC/B,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,GAS/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAA4B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,GAkB3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EAoCvB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,GAkBzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,GA0B7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjH,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,GAkB3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACL,0BAA0B,EAC1B,cAAc,GAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAQvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GA8CnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,IAAI,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { ActionReceiptV2, TopicActionRequestV1, TopicFlowBindingV1 } from "../action-runtime/types.js";
2
2
  import { type ApprovalDecisionV1, type ClaimRecordV1, type DeliveryDecisionV1, type DeliveryPacketV1, type EvaluationAssertionV1, type ExternalWorkBindingV1, type ExternalWorkSync, type SettlementReceiptV1 } from "../work-bridge/types.js";
3
+ import { type ProjectChildKindV1, type ProjectMilestoneStatusV1 } from "../projects/types.js";
3
4
  import { type TopicContext, type EffectiveTopicContractReference, type TopicAutomationBinding, type TopicContractReference, type TopicFileAttachmentIdentity, type TopicOperation, type TopicOverview, type TopicStatus, type TopicVfsFileReference } from "./types.js";
4
5
  interface DecisionPayload {
5
6
  readonly id: string;
@@ -11,6 +12,10 @@ export type ParsedPayload = {
11
12
  } | {
12
13
  readonly kind: "change-status";
13
14
  readonly status: TopicStatus;
15
+ } | {
16
+ readonly kind: "change-progress" | "unblock-topic" | "complete-topic";
17
+ readonly transitionCode: string;
18
+ readonly changedPaths: readonly string[];
14
19
  } | {
15
20
  readonly kind: "update-overview";
16
21
  readonly overview: TopicOverview;
@@ -28,14 +33,14 @@ export type ParsedPayload = {
28
33
  readonly kind: "record-decision";
29
34
  readonly decision: DecisionPayload;
30
35
  } | {
31
- readonly kind: "record-outcome";
36
+ readonly kind: "record-outcome" | "record-review";
32
37
  readonly transitionCode: string;
33
38
  readonly transitionEvidenceId: string;
34
39
  readonly transitionEvidenceEventId: string;
35
40
  readonly transitionEvidenceDigest: `sha256:${string}`;
36
41
  readonly transitionEvidence: Readonly<Record<string, unknown>>;
37
42
  } | {
38
- readonly kind: "propose-contract" | "update-contract";
43
+ readonly kind: "propose-contract" | "update-contract" | "answer-question" | "change-due-date";
39
44
  readonly contract: TopicContractReference;
40
45
  readonly changedPaths: readonly string[];
41
46
  } | {
@@ -54,7 +59,7 @@ export type ParsedPayload = {
54
59
  readonly disputeId: string;
55
60
  readonly reasonCode: string;
56
61
  readonly affectedRevision: string;
57
- readonly resolver: {
62
+ readonly resolver?: {
58
63
  readonly kind: "actor" | "role";
59
64
  readonly id: string;
60
65
  };
@@ -124,6 +129,51 @@ export type ParsedPayload = {
124
129
  } | {
125
130
  readonly kind: "record-settlement";
126
131
  readonly settlement: SettlementReceiptV1;
132
+ } | {
133
+ readonly kind: "record-project-milestone";
134
+ readonly milestoneId: string;
135
+ readonly status: ProjectMilestoneStatusV1;
136
+ readonly evidenceRefs: readonly string[];
137
+ } | {
138
+ readonly kind: "link-project-child";
139
+ readonly obligationId: string;
140
+ readonly topicId: string;
141
+ readonly childKind: ProjectChildKindV1;
142
+ } | {
143
+ readonly kind: "unlink-project-child";
144
+ readonly obligationId: string;
145
+ readonly reason: string;
146
+ } | {
147
+ readonly kind: "record-project-child-status";
148
+ readonly obligationId: string;
149
+ readonly topicId: string;
150
+ readonly status: "linked" | "complete";
151
+ readonly childRevision: string;
152
+ readonly childShapeDigest: `sha256:${string}`;
153
+ readonly sourceEventId: string;
154
+ } | {
155
+ readonly kind: "waive-project-child";
156
+ readonly obligationId: string;
157
+ readonly reason: string;
158
+ } | {
159
+ readonly kind: "set-project-blocker";
160
+ readonly obligationId?: string;
161
+ } | {
162
+ readonly kind: "request-project-close";
163
+ readonly note?: string;
164
+ } | {
165
+ readonly kind: "close-project";
166
+ readonly contractRevision: string;
167
+ readonly bodyHash: `sha256:${string}`;
168
+ readonly shapeDigest: `sha256:${string}`;
169
+ readonly policyDigest: `sha256:${string}`;
170
+ readonly authorityProofRef: string;
171
+ readonly acceptedRemainingRiskIds: readonly string[];
172
+ readonly note: string;
173
+ readonly evidenceRefs: readonly {
174
+ readonly type: string;
175
+ readonly id: string;
176
+ }[];
127
177
  } | {
128
178
  readonly kind: "redirect" | "branch" | "merge";
129
179
  readonly targetTopicId: string;
@@ -1,6 +1,7 @@
1
1
  import { TopicProtocolError } from "../errors.js";
2
2
  import { isJsonDateTime, validateContract } from "../contracts/validator.js";
3
3
  import { EXTERNAL_WORK_HEALTH_STATES, EXTERNAL_WORK_STATES, } from "../work-bridge/types.js";
4
+ import { PROJECT_CHILD_KINDS, PROJECT_MILESTONE_STATUSES, } from "../projects/types.js";
4
5
  import { isCanonicalTopicContextType, TOPIC_STATUSES, TOPIC_VFS_FILE_PROVIDER, } from "./types.js";
5
6
  function invalid(operation, message) {
6
7
  throw new TopicProtocolError("INVALID_OPERATION_PAYLOAD", `${operation.type} ${operation.operationId}: ${message}`, { operationId: operation.operationId, operationType: operation.type });
@@ -182,7 +183,7 @@ function decisionValue(operation) {
182
183
  }
183
184
  function outcomeEvidenceValue(operation) {
184
185
  return {
185
- kind: "record-outcome",
186
+ kind: operation.type,
186
187
  transitionCode: stringValue(operation, operation.payload, "transitionCode"),
187
188
  transitionEvidenceId: stringValue(operation, operation.payload, "transitionEvidenceId"),
188
189
  transitionEvidenceEventId: stringValue(operation, operation.payload, "transitionEvidenceEventId"),
@@ -265,15 +266,102 @@ function disputeValue(operation) {
265
266
  authorityProofRef: stringValue(operation, operation.payload, "authorityProofRef"),
266
267
  };
267
268
  const process = disputeProcessValue(operation, operation.payload.process);
269
+ const resolver = operation.payload.resolver === undefined
270
+ ? undefined
271
+ : subjectValue(operation, operation.payload.resolver);
268
272
  return {
269
273
  kind: "raise-dispute",
270
274
  disputeId: stringValue(operation, operation.payload, "disputeId"),
271
275
  reasonCode: stringValue(operation, operation.payload, "reasonCode"),
272
276
  affectedRevision: stringValue(operation, operation.payload, "affectedRevision"),
273
- resolver: subjectValue(operation, operation.payload.resolver),
277
+ ...(resolver === undefined ? {} : { resolver }),
274
278
  ...(process === undefined ? {} : { process }),
275
279
  };
276
280
  }
281
+ function projectEvidenceRefsValue(operation) {
282
+ const value = operation.payload.evidenceRefs;
283
+ if (!Array.isArray(value))
284
+ return invalid(operation, "evidenceRefs must be an array");
285
+ return value.map((entry) => {
286
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
287
+ return invalid(operation, "evidenceRefs entries must be objects");
288
+ }
289
+ const source = entry;
290
+ return { type: stringValue(operation, source, "type"), id: stringValue(operation, source, "id") };
291
+ });
292
+ }
293
+ function parseProjectChildPayload(operation) {
294
+ switch (operation.type) {
295
+ case "link-project-child": {
296
+ const childKind = stringValue(operation, operation.payload, "childKind");
297
+ if (!PROJECT_CHILD_KINDS.includes(childKind)) {
298
+ return invalid(operation, `unsupported Project child Kind: ${childKind}`);
299
+ }
300
+ return {
301
+ kind: operation.type,
302
+ obligationId: stringValue(operation, operation.payload, "obligationId"),
303
+ topicId: topicIdValue(operation, "topicId"),
304
+ childKind: childKind,
305
+ };
306
+ }
307
+ case "unlink-project-child":
308
+ case "waive-project-child":
309
+ return {
310
+ kind: operation.type,
311
+ obligationId: stringValue(operation, operation.payload, "obligationId"),
312
+ reason: stringValue(operation, operation.payload, "reason"),
313
+ };
314
+ case "record-project-child-status": {
315
+ const status = stringValue(operation, operation.payload, "status");
316
+ if (status !== "linked" && status !== "complete")
317
+ return invalid(operation, `unsupported linked child status: ${status}`);
318
+ return {
319
+ kind: operation.type,
320
+ obligationId: stringValue(operation, operation.payload, "obligationId"),
321
+ topicId: topicIdValue(operation, "topicId"),
322
+ status,
323
+ childRevision: stringValue(operation, operation.payload, "childRevision"),
324
+ childShapeDigest: digestValue(operation, operation.payload, "childShapeDigest"),
325
+ sourceEventId: stringValue(operation, operation.payload, "sourceEventId"),
326
+ };
327
+ }
328
+ default:
329
+ return undefined;
330
+ }
331
+ }
332
+ function parseProjectPayload(operation) {
333
+ const child = parseProjectChildPayload(operation);
334
+ if (child !== undefined)
335
+ return child;
336
+ if (operation.type === "record-project-milestone") {
337
+ const status = stringValue(operation, operation.payload, "status");
338
+ if (!PROJECT_MILESTONE_STATUSES.includes(status)) {
339
+ return invalid(operation, `unsupported Project milestone status: ${status}`);
340
+ }
341
+ return { kind: operation.type, milestoneId: stringValue(operation, operation.payload, "milestoneId"), status: status, evidenceRefs: stringArrayValue(operation, operation.payload, "evidenceRefs") };
342
+ }
343
+ if (operation.type === "set-project-blocker") {
344
+ const obligationId = optionalString(operation, operation.payload, "obligationId");
345
+ return { kind: operation.type, ...(obligationId === undefined ? {} : { obligationId }) };
346
+ }
347
+ if (operation.type === "request-project-close") {
348
+ const note = optionalString(operation, operation.payload, "note");
349
+ return { kind: operation.type, ...(note === undefined ? {} : { note }) };
350
+ }
351
+ if (operation.type !== "close-project")
352
+ return undefined;
353
+ return {
354
+ kind: operation.type,
355
+ contractRevision: stringValue(operation, operation.payload, "contractRevision"),
356
+ bodyHash: digestValue(operation, operation.payload, "bodyHash"),
357
+ shapeDigest: digestValue(operation, operation.payload, "shapeDigest"),
358
+ policyDigest: digestValue(operation, operation.payload, "policyDigest"),
359
+ authorityProofRef: stringValue(operation, operation.payload, "authorityProofRef"),
360
+ acceptedRemainingRiskIds: stringArrayValue(operation, operation.payload, "acceptedRemainingRiskIds"),
361
+ note: stringValue(operation, operation.payload, "note"),
362
+ evidenceRefs: projectEvidenceRefsValue(operation),
363
+ };
364
+ }
277
365
  function automationValue(operation) {
278
366
  const source = recordValue(operation, "automation");
279
367
  const provider = stringValue(operation, source, "provider");
@@ -438,28 +526,30 @@ function parseActionRuntimePayload(operation) {
438
526
  function parseTopicRecordPayload(operation) {
439
527
  if (operation.type === "record-decision")
440
528
  return { kind: operation.type, decision: decisionValue(operation) };
441
- if (operation.type === "record-outcome")
529
+ if (operation.type === "record-outcome" || operation.type === "record-review")
442
530
  return outcomeEvidenceValue(operation);
443
531
  return undefined;
444
532
  }
533
+ function parseSpecialPayload(operation) {
534
+ return parseActionRuntimePayload(operation)
535
+ ?? parseWorkBridgePayload(operation)
536
+ ?? parseProjectPayload(operation)
537
+ ?? parseSetupLifecyclePayload(operation)
538
+ ?? parseTopicRecordPayload(operation);
539
+ }
445
540
  export function parsePayload(operation) {
446
- const actionRuntime = parseActionRuntimePayload(operation);
447
- if (actionRuntime !== undefined)
448
- return actionRuntime;
449
- const workBridge = parseWorkBridgePayload(operation);
450
- if (workBridge !== undefined)
451
- return workBridge;
452
- const setupLifecycle = parseSetupLifecyclePayload(operation);
453
- if (setupLifecycle !== undefined)
454
- return setupLifecycle;
455
- const topicRecord = parseTopicRecordPayload(operation);
456
- if (topicRecord !== undefined)
457
- return topicRecord;
541
+ const special = parseSpecialPayload(operation);
542
+ if (special !== undefined)
543
+ return special;
458
544
  switch (operation.type) {
459
545
  case "rename":
460
546
  return { kind: operation.type, title: titleValue(operation) };
461
547
  case "change-status":
462
548
  return { kind: operation.type, status: statusValue(operation) };
549
+ case "change-progress":
550
+ case "unblock-topic":
551
+ case "complete-topic":
552
+ return { kind: operation.type, transitionCode: stringValue(operation, operation.payload, "transitionCode"), changedPaths: stringArrayValue(operation, operation.payload, "changedPaths") };
463
553
  case "update-overview":
464
554
  return updateOverviewValue(operation);
465
555
  case "link-context":
@@ -469,6 +559,8 @@ export function parsePayload(operation) {
469
559
  return { kind: operation.type, files: attachmentsValue(operation) };
470
560
  case "detach-files":
471
561
  return { kind: operation.type, files: attachmentIdentitiesValue(operation) };
562
+ case "answer-question":
563
+ case "change-due-date":
472
564
  case "propose-contract":
473
565
  case "update-contract":
474
566
  case "accept-contract":