Stella Ops JobEngine
Verified against commit
942a18727c(2026-09-26). Re-verify with:ls src/JobEngine && rg -n "^ jobengine-(web|worker|estate-worker):" devops/compose devops/release/bundle/docker-compose.yml && ls src/JobEngine/StellaOps.JobEngine.__Libraries/StellaOps.JobEngine.Persistence/MigrationsThe estate-wide service, database, compose and bundle wiring is generated in the service inventory; this dossier describes the module and defers to that inventory for the service list.
JobEngine owns scheduled scan orchestration (the Scheduler subdomain) and the Task Pack registry (the PacksRegistry subdomain). Release Orchestrator owns the release control plane. The architecture dossier is the contract.
Components
| Component | Source | Deployable |
|---|---|---|
| Web host (both surfaces, embedded Scheduler worker, Doctor checks) | src/JobEngine/StellaOps.JobEngine.WebService/ | jobengine-web |
| Worker role (health endpoints only; converges the database, no dispatch work yet) | src/JobEngine/StellaOps.JobEngine.Worker/ | jobengine-worker |
Privileged estate-doctor worker (opt-in estate-doctor profile) | src/JobEngine/StellaOps.JobEngine.EstateWorker/ | jobengine-estate-worker |
| Family data access layer and migrations | src/JobEngine/StellaOps.JobEngine.__Libraries/StellaOps.JobEngine.Persistence/ | — |
| Scheduler application layer | src/JobEngine/StellaOps.JobEngine.__Libraries/StellaOps.JobEngine.Scheduling/ | — |
| Scheduler libraries and job plugins | src/JobEngine/StellaOps.Scheduler.__Libraries/ | — |
| Task Pack domain and offline-seed SDK | src/JobEngine/StellaOps.PacksRegistry/, src/JobEngine/StellaOps.PacksRegistry.__Libraries/ | — |
The retired StellaOps.Scheduler.WebService, StellaOps.Scheduler.Worker.Host, StellaOps.PacksRegistry.WebService and StellaOps.PacksRegistry.Worker hosts are frozen under src/__Obsoleted/JobEngine/ and are not deployment targets.
Storage
The family owns the stellaops_jobengine database (schemas scheduler, scheduler_app, packs and eventing). Every role resolves STELLAOPS_POSTGRES_JOBENGINE_CONNECTION and fails closed without it; there is no fallback to a shared database. Migrations contain no demo or fixture rows. Task Pack bytes live in a read-only seed mount and a separate writable upload volume (packsregistry-upload-data); see architecture §6.
API and routing
jobengine-web publishes its routes to the Router gateway as microservice jobengine (host jobengine.stella-ops.local); the gateway holds no static JobEngine route rows. The wire contract is openapi/v1.json, rendered as api-reference.md. Doctor checks are served at /doctor/jobengine-web/checks under the ops.health scope.
Operations
- Retention and custody: terminal-state cleanup, row budgets, protected records and the retention Doctor check.
- PacksRegistry dual-mode storage runbook.
- Estate-doctor plugin staging: build, signing, host-shared assembly exclusion and deployment evidence.
- Pack signing and RBAC §7: offline-seed export signing, key rotation, import and anchoring.
Any change to StellaOps.JobEngine.Persistence requires rebuilding the images that consume it and re-packaging the signed estate-doctor producer bundle before promotion. Source tests and local package staging are not a live deployment.
Other documents here
- consolidation-design.md — the design record of the JobEngine consolidation (SPRINT_20260722_012, archived). Historical; the architecture dossier wins.
- retention-classification-verification-20260921.json — the RFC-7 verification receipt.
scheduler/andpacksregistry/indocs/modules/are pointer stubs to this dossier.
