diff --git a/PROGRESS.md b/PROGRESS.md index 61ad0ba..9b12af0 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -10,11 +10,11 @@ | | | |---|---| -| **Latest version** | v0.20.2 (plug-in-loaded TaskHandler registration + principal propagation) | -| **Latest commit** | `a091d38 feat(workflow): plug-in-loaded TaskHandler registration + ref-plugin PlateApprovalTaskHandler` | +| **Latest version** | v0.20.3 (plug-in JAR BPMN auto-deployment — full plug-in workflow loop closed) | +| **Latest commit** | `66ad87d feat(workflow): plug-in JAR BPMN auto-deployment via PluginProcessDeployer` | | **Repo** | https://github.com/reporkey/vibe-erp | | **Modules** | 19 | -| **Unit tests** | 269, all green | +| **Unit tests** | 275, all green | | **End-to-end smoke runs** | An SO confirmed with 2 lines auto-spawns 2 draft work orders via `SalesOrderConfirmedSubscriber`; completing one credits the finished-good stock via `PRODUCTION_RECEIPT`, cancelling the other flips its status, and a manual WO can still be created with no source SO. All in one run: 6 outbox rows DISPATCHED across `orders_sales.SalesOrder` and `production.WorkOrder` topics; pbc-finance still writes its AR row for the underlying SO; the `inventory__stock_movement` ledger carries the production receipt tagged `WO:`. First PBC that REACTS to another PBC's events by creating new business state (not just derived reporting state). | | **Real PBCs implemented** | 8 of 10 (`pbc-identity`, `pbc-catalog`, `pbc-partners`, `pbc-inventory`, `pbc-orders-sales`, `pbc-orders-purchase`, `pbc-finance`, `pbc-production`) | | **Plug-ins serving HTTP** | 1 (reference printing-shop, 7 endpoints + own DB schema + own metadata + own i18n bundles) | @@ -51,7 +51,7 @@ That target breaks down into roughly 30 work units across 8 phases. About **22 a | # | Unit | Status | |---|---|---| -| P2.1 | Embedded Flowable (BPMN 2.0) + `TaskHandler` wiring | ✅ DONE — `7bff422` (`ef9e5b4` principal propagation + `a091d38` plug-in-loaded handler registration) — new `platform-workflow` module; shares host Postgres; dispatcher routes service-task execution to `TaskHandlerRegistry` beans by activity id; authenticated HTTP caller's principal flows through reserved `__vibeerp_*` process vars into `ctx.principal()`; plug-ins register handlers via `context.taskHandlers` with owner tagging + teardown; `POST/GET /api/v1/workflow/**` endpoints; built-in `vibeerp.workflow.ping` BPMN + handler as the engine's self-test; reference plug-in ships `printing_shop.plate.approve` TaskHandler | +| P2.1 | Embedded Flowable (BPMN 2.0) + `TaskHandler` wiring | ✅ DONE — `7bff422` core + `ef9e5b4` principal propagation + `a091d38` plug-in-loaded handler registration + `66ad87d` plug-in JAR BPMN auto-deployment — `platform-workflow` module shares host Postgres; dispatcher routes service-task execution to `TaskHandlerRegistry` beans by activity id; authenticated HTTP caller's principal flows through reserved `__vibeerp_*` process vars into `ctx.principal()`; plug-ins register handlers via `context.taskHandlers` + ship BPMNs under `processes/*.bpmn20.xml` in their JAR (host `PluginProcessDeployer` reads + deploys with `category=pluginId` + cascading undeploy on stop); `POST/GET /api/v1/workflow/**` endpoints; reference plug-in ships a live `plugin-printing-shop-plate-approval` BPMN driving `printing_shop.plate.approve` | | P2.2 | BPMN designer (web) | 🔜 Pending — depends on R1 | | P2.3 | User-task form rendering | 🔜 Pending |