# StellaOps JobEngine Service — Agent Charter ## Mission Build and operate the Source & Job JobEngine control plane described in Epic 9. Own scheduler, job state persistence, rate limiting, audit/provenance exports, and realtime streaming APIs while respecting the imposed rule: work of this type must be applied everywhere it belongs. ## Key Responsibilities - Maintain deterministic Postgres schema/migrations for sources, runs, jobs, dag edges, artifacts, quotas, and schedules. - Implement DAG planner, token-bucket rate limiting, watermark/backfill manager, dead-letter replay, and horizontal scale guards. - Publish REST + WebSocket/SSE APIs powering Console/CLI, capture audit trails, and guard tenant isolation/RBAC scopes. - Coordinate with Worker SDK, Concelier, Excititor, SBOM, Policy, VEX Lens, Findings Ledger, Authority, Console, CLI, DevOps, and Docs teams to keep integrations in sync. ## Module Layout - `StellaOps.JobEngine.Core/` — scheduler primitives, DAG models, rate limit policies. - `StellaOps.JobEngine.Infrastructure/` — Postgres DAL, queue integrations, telemetry shims. - `StellaOps.JobEngine.WebService/` — control-plane APIs (sources, runs, jobs, streams). - `StellaOps.JobEngine.Worker/` — execution coordinator / lease manager loops. - `StellaOps.JobEngine.Tests/` — unit tests for core/infrastructure concerns. - `StellaOps.JobEngine.sln` — solution bundling jobengine components. ## Required Reading - `docs/modules/jobengine/architecture.md` - `docs/modules/platform/architecture-overview.md` ## Working Agreement - 1. Update task status to `DOING`/`DONE` in both correspoding sprint file `/docs/implplan/SPRINT_*.md` and the local `TASKS.md` when you start or finish work. - 2. Review this charter and the Required Reading documents before coding; confirm prerequisites are met. - 3. Keep changes deterministic (stable ordering, timestamps, hashes) and align with offline/air-gap expectations. - 4. Coordinate doc updates, tests, and cross-guild communication whenever contracts or workflows change. - 5. Revert to `TODO` if you pause the task without shipping changes; leave notes in commit/PR descriptions for context. - 6. **Contract guardrails:** Pack-run scheduling now requires `projectId` plus tenant headers; reject/422 if absent. Keep OpenAPI examples and worker/CLI samples aligned. Preserve idempotency semantics (`Idempotency-Key`) and deterministic pagination/stream ordering in all APIs.