Phase 2 — Runtime Engine Scope

Phase 1 (built) renders the 8-model schema as an AI-Safe CRUD register — browsable, with a dashboard. But the states are static: the seed shows outcomes already decided. Nothing is gated, transitioned or published by the system.

Phase 2 is the runtime that makes it live — the exception lifecycle/state machine (open → triaged → assigned → in_progress → closed), SLA timers on response_due_at, automatic escalation when a response window is breached, closure gating (evidence complete + review) and the published exception events — this is the estate-wide exception hub the other apps route into. Same shape as the (built, cluster-proven) orchestrator engine, single-app, and it plugs into the wider Renewable Generation Orchestration suite via the Orchestrator.

The scope, drawn from the pack's GOVERNANCE.md / ORCHESTRATION.md / EVENT_CATALOG.md:

  • Workflow / state machine — expose the pack's states as guarded actions per entity, instead of a free-edited status.
  • Governance gates — enforce the pack's rules at the transitions they guard.
  • Events — write the pack's published events transactionally to an outbox and deliver them to the Orchestrator with retry, so sibling apps (commissioning, gridcon, gencom, outage) react.
  • Dashboards/KPIs — the operational numbers this domain's owner watches.
  • Tests — straight from the component's TEST_SCENARIOS.md.

How it would be built

A per-app engine module (mirror server/lib/orchestrator_engine/) behind an opt-in env flag, plus the outbox + Orchestrator wiring (reuse the orchestrator client and event contracts). The orchestrator (built and run live this session) is the working template for the engine, scheduler, outbox and tests.