# Workflow Delivery Checklist Parallel execution ownership and stage gates are defined in [`docs/workflows/WORKERS.md`](/home/hartmut/Documents/Copilot/schaefflerautomat/docs/workflows/WORKERS.md). ## Phase Checklist ### Phase 1 - [x] Canonical workflow schema finalized - [x] Frontend and backend workflow types aligned - [x] Preset workflow migration helpers added - [x] Tests added for legacy preset conversion - [x] Legacy dispatch remains default ### Phase 2 - [x] Node registry implemented - [x] Node definitions API available - [x] All required nodes have settings schemas - [x] Editor consumes node definitions from backend ### Phase 3 - [x] Missing legacy steps extracted into reusable executors - [x] Extracted node behavior matches legacy services - [x] Node-level tests cover success and failure paths - Progress: Phase 3 parity nodes are extracted, covered by targeted runtime tests, and exercised through the workflow executor with legacy-safe bridge dispatch. ### Phase 4 - [x] Workflow context introduced - [x] Node outputs are persisted and reusable - [x] Graph runtime supports legacy fallback - [x] `legacy`, `graph`, and `shadow` modes exist - Progress: Workflow configs now normalize to an explicit execution mode, the editor exposes and persists `legacy`/`graph`/`shadow`, production order-line dispatch can opt into graph mode with hard fallback to legacy on graph failure, workflow runs persist their execution mode, `notify` handoff is armed only for authoritative graph renders, and `output_save` is now graph-authoritative for still renders, turntable/video renders, and `.blend` exports while shadow runs remain observer-only. ### Phase 5 - [ ] Editor saves nodes and edges - [ ] Editor roundtrip preserves workflow configs - [ ] All node settings are editable - [ ] Validate, dry-run, and dispatch are available - [ ] Runs are visible with node-level status and logs - [ ] Editor authoring follows family-safe module contracts instead of ad hoc node metadata ### Phase 7 - [x] Output-type create defaults match current backend constraints - [ ] Output types model workflow invocation profiles - [ ] Output types validate against workflow family and artifact contract - [ ] Admin create/edit flow is workflow-first instead of renderer-first ### Phase 6 - [x] Shadow mode parity execution dispatches real graph observer runs alongside authoritative legacy dispatch - Progress: Workflow runs now expose a comparison endpoint that resolves authoritative legacy outputs and matching shadow artifacts, including file hashes, image dimensions, and mean pixel delta for parity inspection. - Progress: `scripts/test_render_pipeline.py --workflow-still-smoke --execution-mode shadow` now provisions the canonical still smoke contract, runs preflight, dispatches via the real order/output-type workflow linkage, resolves the resulting workflow run, and prints the shadow comparison verdict. - [ ] Golden cases pass against legacy outputs - [ ] Rollout can be enabled per workflow or output type - [ ] Rollback to legacy is immediate ## Quality Gates ### QG-1: Model Gate - New workflow saves only use canonical schema. - Backend rejects malformed configs with clear errors. - Existing preset workflows can be migrated without data loss. ### QG-2: Node Gate - Every editor-visible node has: - backend node definition - validated settings schema - default params - family and module contract metadata - executor coverage or explicit disabled status ### QG-3: Legacy Safety Gate - Legacy render dispatch remains callable and unchanged in behavior. - Existing output types still render without workflow migration. - Graph failures do not block legacy renders. ### QG-4: Parity Gate - Golden cases match on: - render status - generated output file - media asset creation - notifications - core render log fields - For graph still renders with downstream `output_save`, no duplicate self-published `MediaAsset` is created before the authoritative graph save step completes. - For graph turntable/video renders with downstream `output_save`, no duplicate self-published `MediaAsset` is created before the authoritative graph save step completes. - For graph `.blend` exports with downstream `output_save`, no duplicate self-published `MediaAsset` is created before the authoritative graph save step completes. ### QG-5: Editor Gate - Workflow configs survive save/load roundtrip without loss. - Invalid graphs are blocked before dispatch. - All node settings needed for parity are present in the editor. - Family-specific authoring prevents invalid `cad_file`/`order_line` graph composition. ### QG-7: Invocation Gate - Output type creation and editing use valid backend defaults. - Output types bind to workflows through an explicit invocation contract. - Legacy output types remain renderable during migration. ### QG-6: Rollout Gate - Shadow mode has been exercised on representative workflows. - Graph runtime error rate is at or below legacy error rate. - Rollout and rollback are possible per workflow or output type. - Canonical still rollout smoke commands: - `python scripts/test_render_pipeline.py --workflow-still-smoke --execution-mode legacy` - `python scripts/test_render_pipeline.py --workflow-still-smoke --execution-mode graph` - `python scripts/test_render_pipeline.py --workflow-still-smoke --execution-mode shadow` - Rollout approval rule for the canonical still workflow: - `shadow` must finish with a successful order line and a comparison verdict of `pass` - `warn` or `fail` means legacy remains authoritative - `graph` may only be enabled on real output types after the shadow command passes cleanly - Progress: the canonical still smoke flow now passes live in `legacy` and `graph`; `shadow` stabilizes after a short observer-output lag and currently reports `warn` because the observer image differs slightly, so legacy remains authoritative for rollout decisions. ## Definition of Done - `/workflows` is production-capable for authoring and running workflows. - Legacy functionality is available in graph form with parity coverage. - Legacy execution still exists as a supported fallback. - Output types are modeled as workflow invocation profiles, not as loose legacy render presets.