@contractspec/example.workflow-system 3.7.6 → 3.7.7

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.
package/README.md CHANGED
@@ -1,124 +1,74 @@
1
1
  # @contractspec/example.workflow-system
2
2
 
3
- Website: https://contractspec.io/
4
-
5
-
6
- A comprehensive workflow and approval system example demonstrating ContractSpec principles.
7
-
8
- ## Features
9
-
10
- - **State Machine Engine**: Define workflows as state machines with typed transitions
11
- - **Role-Based Approvals**: Configure approval chains with multiple modes (ANY, ALL, MAJORITY, SEQUENTIAL)
12
- - **Delegation**: Allow approvers to delegate to others
13
- - **Escalation**: Automatic escalation on timeout
14
- - **Feature Flag Integration**: Control workflow availability via feature flags
15
- - **Full Audit Trail**: Track all workflow actions and decisions
16
- - **Multi-Surface Presentations**: React components + Markdown renderers
17
-
18
- ## Entities
19
-
20
- ### Workflow Definition
21
- - `WorkflowDefinition` - Blueprint for a workflow
22
- - `WorkflowStep` - Steps within a workflow (START, APPROVAL, TASK, CONDITION, PARALLEL, WAIT, ACTION, END)
23
-
24
- ### Workflow Instance
25
- - `WorkflowInstance` - Running instance of a workflow
26
- - `StepExecution` - Execution record for each step
27
-
28
- ### Approval
29
- - `ApprovalRequest` - Pending approval request
30
- - `ApprovalComment` - Comments on approvals
31
-
32
- ## Contracts
33
-
34
- ### Workflow Definition Management
35
- - `workflow.definition.create` - Create a new workflow
36
- - `workflow.definition.update` - Update workflow
37
- - `workflow.step.add` - Add step to workflow
38
- - `workflow.definition.publish` - Activate workflow
39
- - `workflow.definition.list` - List workflows
40
- - `workflow.definition.get` - Get workflow details
41
-
42
- ### Workflow Instance Operations
43
- - `workflow.instance.start` - Start a new workflow
44
- - `workflow.instance.transition` - Transition to next step
45
- - `workflow.instance.pause` - Pause workflow
46
- - `workflow.instance.resume` - Resume workflow
47
- - `workflow.instance.cancel` - Cancel workflow
48
- - `workflow.instance.list` - List instances
49
- - `workflow.instance.get` - Get instance details
50
-
51
- ### Approval Operations
52
- - `workflow.approval.decide` - Submit approval decision
53
- - `workflow.approval.delegate` - Delegate to another user
54
- - `workflow.approval.comment.add` - Add comment
55
- - `workflow.approval.list.mine` - List my pending approvals
56
- - `workflow.approval.get` - Get approval details
57
-
58
- ## State Machine
59
-
60
- The workflow engine uses a state machine model where:
61
-
62
- 1. Each step defines available actions and their target steps
63
- 2. Transitions are validated against:
64
- - Current workflow status
65
- - User roles (role-based access control)
66
- - Step-specific conditions
67
- 3. Actions trigger events for audit trail and notifications
68
-
69
- Example step definition:
70
-
71
- ```typescript
72
- {
73
- key: 'manager_approval',
74
- type: 'APPROVAL',
75
- transitions: {
76
- approve: 'finance_review',
77
- reject: 'rejected',
78
- request_changes: 'revision_needed'
79
- },
80
- approvalMode: 'ANY',
81
- approverRoles: ['manager', 'director'],
82
- timeoutSeconds: 86400, // 24 hours
83
- }
84
- ```
85
-
86
- ## Events
87
-
88
- - `workflow.definition.created/updated/published`
89
- - `workflow.step.added`
90
- - `workflow.instance.started/completed/cancelled/paused/resumed/failed/timeout`
91
- - `workflow.step.entered/exited`
92
- - `workflow.approval.requested/decided/delegated/escalated`
3
+ Website: https://contractspec.io
4
+
5
+ **Workflow and approval system example for ContractSpec - State machine with role-based transitions.**
6
+
7
+ ## What This Demonstrates
8
+
9
+ - State machine pattern for workflow transitions.
10
+ - Approval flow with role-based access.
11
+ - Multi-entity domain (workflow, instance, approval).
12
+ - Per-entity schema/enum/event/handler/operations pattern.
13
+ - React UI with WorkflowDashboard, hooks, and renderers.
14
+ - Capability and feature definition patterns.
15
+ - Seeder and test-spec patterns.
16
+
17
+ ## Running Locally
18
+
19
+ From `packages/examples/workflow-system`:
20
+ - `bun run dev`
21
+ - `bun run build`
22
+ - `bun run typecheck`
93
23
 
94
24
  ## Usage
95
25
 
96
- ```typescript
97
- import {
98
- StartWorkflowContract,
99
- TransitionWorkflowContract,
100
- workflowSystemSchemaContribution
101
- } from '@contractspec/example.workflow-system';
102
-
103
- // Start a workflow
104
- const instance = await executeContract(StartWorkflowContract, {
105
- workflowKey: 'purchase_approval',
106
- contextData: { amount: 5000, vendor: 'ACME Corp' },
107
- referenceId: 'PO-12345',
108
- referenceType: 'PurchaseOrder',
109
- });
110
-
111
- // Make a transition
112
- const result = await executeContract(TransitionWorkflowContract, {
113
- instanceId: instance.id,
114
- action: 'approve',
115
- comment: 'Approved for standard purchase',
116
- });
117
- ```
118
-
119
- ## Dependencies
120
-
121
- - `@contractspec/lib.identity-rbac` - User identity and roles
122
- - `@contractspec/lib.feature-flags` - Feature flag evaluation
123
- - `@contractspec/module.audit-trail` - Action auditing
124
- - `@contractspec/module.notifications` - Approval notifications
26
+ Use `@contractspec/example.workflow-system` as a reference implementation, or import its exported surfaces into a workspace that composes ContractSpec examples and bundles.
27
+
28
+ ## Architecture
29
+
30
+ - `src/approval` is part of the package's public or composition surface.
31
+ - `src/docs/` contains docblocks and documentation-facing exports.
32
+ - `src/entities/` contains domain entities and value objects.
33
+ - `src/example.ts` is the runnable example entrypoint.
34
+ - `src/handlers/` contains handlers or demo adapters wired to contract surfaces.
35
+ - `src/index.ts` is the root public barrel and package entrypoint.
36
+ - `src/instance` is part of the package's public or composition surface.
37
+
38
+ ## Public Entry Points
39
+
40
+ - Export `.` resolves through `./src/index.ts`.
41
+ - Export `./approval` resolves through `./src/approval/index.ts`.
42
+ - Export `./approval/approval.enum` resolves through `./src/approval/approval.enum.ts`.
43
+ - Export `./approval/approval.event` resolves through `./src/approval/approval.event.ts`.
44
+ - Export `./approval/approval.handler` resolves through `./src/approval/approval.handler.ts`.
45
+ - Export `./approval/approval.operations` resolves through `./src/approval/approval.operations.ts`.
46
+ - Export `./approval/approval.schema` resolves through `./src/approval/approval.schema.ts`.
47
+ - Export `./docs` resolves through `./src/docs/index.ts`.
48
+ - Export `./docs/workflow-system.docblock` resolves through `./src/docs/workflow-system.docblock.ts`.
49
+ - Export `./entities` resolves through `./src/entities/index.ts`.
50
+ - The package publishes 44 total export subpaths; keep docs aligned with `package.json`.
51
+
52
+ ## Local Commands
53
+
54
+ - `bun run dev` — contractspec-bun-build dev
55
+ - `bun run build` — bun run prebuild && bun run build:bundle && bun run build:types
56
+ - `bun run lint` — bun lint:fix
57
+ - `bun run lint:check` — biome check .
58
+ - `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
59
+ - `bun run typecheck` — tsc --noEmit
60
+ - `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
61
+ - `bun run publish:pkg:canary` — bun publish:pkg --tag canary
62
+ - `bun run clean` — rimraf dist .turbo
63
+ - `bun run build:bundle` — contractspec-bun-build transpile
64
+ - `bun run build:types` — contractspec-bun-build types
65
+ - `bun run prebuild` — contractspec-bun-build prebuild
66
+
67
+ ## Recent Updates
68
+
69
+ - Replace eslint+prettier by biomejs to optimize speed.
70
+ - Missing contract layers.
71
+
72
+ ## Notes
73
+
74
+ - Works alongside `@contractspec/lib.contracts-spec`, `@contractspec/lib.design-system`, `@contractspec/lib.example-shared-ui`, `@contractspec/lib.runtime-sandbox`, `@contractspec/lib.schema`, ...
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // src/approval/approval.event.ts
3
3
  import { defineEvent } from "@contractspec/lib.contracts-spec";
4
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
4
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
5
5
  var ApprovalRequestedPayload = defineSchemaModel({
6
6
  name: "ApprovalRequestedEventPayload",
7
7
  description: "Payload when approval is requested",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Approval handlers.
3
3
  */
4
- import type { ApprovalRequestRecord, WorkflowInstanceRecord, WorkflowStepRecord, HandlerContext } from '../shared/types';
4
+ import type { ApprovalRequestRecord, HandlerContext, WorkflowInstanceRecord, WorkflowStepRecord } from '../shared/types';
5
5
  export declare function createApprovalRequests(instance: WorkflowInstanceRecord, step: WorkflowStepRecord, _context: HandlerContext): Promise<void>;
6
6
  export declare function handleSubmitDecision(input: {
7
7
  requestId: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Approval domain - Approval request and decision management.
3
3
  */
4
- export { ApprovalStatusEnum, ApprovalDecisionEnum } from './approval.enum';
5
- export { ApprovalRequestModel, ApprovalCommentModel } from './approval.schema';
6
- export { SubmitDecisionContract, DelegateApprovalContract, AddApprovalCommentContract, ListMyApprovalsContract, GetApprovalContract, } from './approval.operations';
7
- export { ApprovalRequestedEvent, ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, } from './approval.event';
4
+ export { ApprovalDecisionEnum, ApprovalStatusEnum } from './approval.enum';
5
+ export { ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, ApprovalRequestedEvent, } from './approval.event';
6
+ export { AddApprovalCommentContract, DelegateApprovalContract, GetApprovalContract, ListMyApprovalsContract, SubmitDecisionContract, } from './approval.operations';
7
+ export { ApprovalCommentModel, ApprovalRequestModel } from './approval.schema';
@@ -20,7 +20,7 @@ var ApprovalDecisionEnum = defineEnum("ApprovalDecision", [
20
20
 
21
21
  // src/approval/approval.event.ts
22
22
  import { defineEvent } from "@contractspec/lib.contracts-spec";
23
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
23
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
24
24
  var ApprovalRequestedPayload = defineSchemaModel({
25
25
  name: "ApprovalRequestedEventPayload",
26
26
  description: "Payload when approval is requested",
@@ -1,6 +1,6 @@
1
1
  // src/approval/approval.event.ts
2
2
  import { defineEvent } from "@contractspec/lib.contracts-spec";
3
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
3
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
4
4
  var ApprovalRequestedPayload = defineSchemaModel({
5
5
  name: "ApprovalRequestedEventPayload",
6
6
  description: "Payload when approval is requested",
@@ -19,7 +19,7 @@ var ApprovalDecisionEnum = defineEnum("ApprovalDecision", [
19
19
 
20
20
  // src/approval/approval.event.ts
21
21
  import { defineEvent } from "@contractspec/lib.contracts-spec";
22
- import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
22
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
23
23
  var ApprovalRequestedPayload = defineSchemaModel({
24
24
  name: "ApprovalRequestedEventPayload",
25
25
  description: "Payload when approval is requested",