@@ -148,7 +148,7 @@ Multi-stage triggers, action pipelines, execution logs, and cron scheduling stan
148148| State machine & approval processes | ✅ | ` automation/state-machine.zod.ts ` , ` automation/workflow.zod.ts ` |
149149| Retry policies with exponential backoff | ✅ | ` automation/webhook.zod.ts ` |
150150| ` IAutomationService ` contract | ✅ | ` contracts/automation-service.ts ` (typed: ` FlowParsed ` , ` ExecutionLog ` ) |
151- | ` service-automation ` DAG engine (MVP) | ✅ | ` @objectstack/service-automation ` (42 tests) |
151+ | ` service-automation ` DAG engine (MVP) | ✅ | ` @objectstack/service-automation ` (67 tests) |
152152| Execution log/history storage protocol | ✅ | ` automation/execution.zod.ts ` → ` ExecutionLogSchema ` , ` ExecutionStepLogSchema ` |
153153| Execution error tracking & diagnostics | ✅ | ` automation/execution.zod.ts ` → ` ExecutionErrorSchema ` , ` ExecutionErrorSeverity ` |
154154| Conflict resolution for concurrent executions | ✅ | ` automation/execution.zod.ts ` → ` ConcurrencyPolicySchema ` |
@@ -157,6 +157,15 @@ Multi-stage triggers, action pipelines, execution logs, and cron scheduling stan
157157| Automation API protocol (REST CRUD schemas) | ✅ | ` api/automation-api.zod.ts ` → 9 endpoints, all with ` input ` /` output ` schemas |
158158| Automation HTTP route handler (9 routes) | ✅ | ` runtime/http-dispatcher.ts ` → ` handleAutomation() ` CRUD + toggle + runs |
159159| Client SDK ` automation ` namespace (10 methods) | ✅ | ` client/src/index.ts ` → ` list ` , ` get ` , ` create ` , ` update ` , ` delete ` , ` toggle ` , ` runs.* ` |
160+ | Fault edge error path support | ✅ | ` @objectstack/service-automation ` → fault-type edge routing in DAG executor |
161+ | Node step-level execution logging | ✅ | ` @objectstack/service-automation ` → per-node timing/status in ` ExecutionLogEntry.steps ` |
162+ | Retry with exponential backoff & jitter | ✅ | ` automation/flow.zod.ts ` → ` backoffMultiplier ` , ` maxRetryDelayMs ` , ` jitter ` |
163+ | Parallel branch execution (Promise.all) | ✅ | ` @objectstack/service-automation ` → unconditional edges run in parallel |
164+ | Node timeout mechanism (Promise.race) | ✅ | ` automation/flow.zod.ts ` → ` timeoutMs ` per node, engine enforces via ` Promise.race ` |
165+ | DAG cycle detection on registerFlow | ✅ | ` @objectstack/service-automation ` → DFS-based cycle detection with friendly error messages |
166+ | Safe expression evaluation (no ` new Function ` ) | ✅ | ` @objectstack/service-automation ` → operator-based parser, no code execution |
167+ | Node input/output schema validation | ✅ | ` automation/flow.zod.ts ` → ` inputSchema ` /` outputSchema ` per node, runtime validation |
168+ | Flow version history & rollback | ✅ | ` automation/flow.zod.ts ` → ` FlowVersionHistorySchema ` , engine version management |
160169
161170### 3. File Direct Upload & Resumable Upload Protocol
162171
@@ -446,13 +455,13 @@ business/custom objects, aligning with industry best practices (e.g., ServiceNow
446455
447456| Contract | Priority | Package | Notes |
448457| :---| :---:| :---| :---|
449- | ` IAutomationService ` | ** P2** | ` @objectstack/service-automation ` | ✅ Plugin-based DAG flow engine + HTTP API + Client SDK (42 tests) |
458+ | ` IAutomationService ` | ** P2** | ` @objectstack/service-automation ` | ✅ Plugin-based DAG flow engine + HTTP API + Client SDK (67 tests) |
450459| ` IWorkflowService ` | ** P2** | ` @objectstack/service-workflow ` | State machine + approval processes |
451460| ` IGraphQLService ` | ** P2** | ` @objectstack/service-graphql ` | Auto-generated GraphQL from objects |
452461| ` IAIService ` | ** P2** | ` @objectstack/service-ai ` | LLM integration (OpenAI/Anthropic/local) |
453462| ` IAnalyticsService ` | ** P3** | ` @objectstack/service-analytics ` | BI/OLAP queries |
454463
455- - [x] ` service-automation ` — Implement ` IAutomationService ` with plugin-based DAG flow engine (MVP: CRUD/Logic/HTTP nodes), HTTP API CRUD (9 routes), Client SDK (10 methods), execution history
464+ - [x] ` service-automation ` — Implement ` IAutomationService ` with plugin-based DAG flow engine (CRUD/Logic/HTTP nodes, fault edges, parallel branches, cycle detection, safe eval, timeout, versioning ), HTTP API CRUD (9 routes), Client SDK (10 methods), execution history with step-level logging
456465- [ ] ` service-workflow ` — Implement ` IWorkflowService ` with state machine runtime
457466- [ ] ` service-graphql ` — Implement ` IGraphQLService ` with auto-schema generation
458467- [ ] ` service-ai ` — Implement ` IAIService ` with multi-provider LLM routing
@@ -721,7 +730,7 @@ Final polish and advanced features.
721730| 16 | Search Service | ` ISearchService ` | ❌ | ` @objectstack/service-search ` (planned) | Spec only |
722731| 17 | Notification Service | ` INotificationService ` | ❌ | ` @objectstack/service-notification ` (planned) | Spec only |
723732| 18 | AI Service | ` IAIService ` | ❌ | ` @objectstack/service-ai ` (planned) | Spec only |
724- | 19 | Automation Service | ` IAutomationService ` | ✅ | ` @objectstack/service-automation ` | DAG engine + HTTP API CRUD + Client SDK + typed returns (42 tests) |
733+ | 19 | Automation Service | ` IAutomationService ` | ✅ | ` @objectstack/service-automation ` | DAG engine + HTTP API CRUD + Client SDK + typed returns (67 tests) |
725734| 20 | Workflow Service | ` IWorkflowService ` | ❌ | ` @objectstack/service-workflow ` (planned) | Spec only |
726735| 21 | GraphQL Service | ` IGraphQLService ` | ❌ | ` @objectstack/service-graphql ` (planned) | Spec only |
727736| 22 | i18n Service | ` II18nService ` | ✅ | ` @objectstack/service-i18n ` | File-based locale loading |
0 commit comments