- Implemented PolicyPackSelectorComponent for selecting policy packs. - Added unit tests for component behavior, including API success and error handling. - Introduced monaco-workers type declarations for editor workers. - Created acceptance tests for guardrails with stubs for AT1–AT10. - Established SCA Failure Catalogue Fixtures for regression testing. - Developed plugin determinism harness with stubs for PL1–PL10. - Added scripts for evidence upload and verification processes.
8.3 KiB
8.3 KiB
TaskRunner Architecture (v1)
Canonical contract for TaskRunner delivery scoped by SPRINT_0157_0001_0002 (TaskRunner Blockers) and SPRINT_0157_0001_0001 (TaskRunner I). Anchored in product advisory "29-Nov-2025 - Task Pack Orchestration and Automation" and the Task Pack runbook/spec (
docs/task-packs/*.md).
1. Purpose and Scope
- Execute Task Packs deterministically with approvals, sealed-mode enforcement, and evidence capture.
- Provide API/CLI surface for pack submission, status, logs, approvals, artifacts, and cancellation.
- Produce provenance: DSSE attestation + evidence bundle for every completed run.
- Operate offline/air-gapped with plan-hash binding and sealed-mode network allowlists.
2. Components
- WebService (
StellaOps.TaskRunner.WebService) - HTTP API, plan hash validation, SSE log streaming, approval endpoints. - Worker (
StellaOps.TaskRunner.Worker) - run orchestration, retries/backoff, artifact capture, attestation generation. - Core (
StellaOps.TaskRunner.Core) - execution graph builder, simulation engine, step state machine, policy/approval gate abstractions. - Infrastructure (
StellaOps.TaskRunner.Infrastructure) - storage adapters (Mongo, file), artifact/object store clients, evidence bundle writer.
3. Execution Phases
- Plan - parse manifest, validate schema, resolve inputs/secrets, build execution graph, compute canonical
planHash(SHA-256 over normalised graph). - Simulation (optional) - dry-run graph; emit determinstic preview with approvals/policy gates highlighted.
- Execution - verify runtime graph matches
planHash; execute steps honoringmaxParallel,continueOnError,map/parallelsemantics; stream logs/events. - Evidence - capture artifacts + transcripts, emit DSSE attestation binding
planHash, inputs/outputs, steps, and timestamps; expose artifact listings via API for post-run retrieval.
4. API Surface (v1)
POST /api/runs(packs.run) - submit pack run; requires manifest/version, inputs, tenant context; returnsrunId+planHash.GET /api/runs/{runId}(packs.read) - run status (graph, attempts, pending gates).GET /api/runs/{runId}/logs(packs.read) - SSE stream of ordered log events.GET /api/runs/{runId}/artifacts(packs.read) - list captured artifacts with digests/paths.POST /api/runs/{runId}/approve(packs.approve) - record approval gate decision (requires Authority token claimspack_run_id,pack_gate_id,pack_plan_hash).POST /api/runs/{runId}/cancel(packs.run) - cancel active run.- TODO (Phase II):
GET /.well-known/openapi(TASKRUN-OAS-61-002) after OAS publication.
5. Data Model (Mongo, mirrors migration doc)
- pack_runs:
_id,planHash,plan,failurePolicy,requestedAt,createdAt,updatedAt,steps[],tenantId. - pack_run_logs:
_id,runId,sequence(monotonic),timestamp(UTC),level,eventType,message,stepId?,metadata. - pack_artifacts:
_id,runId,name,type,sourcePath?,storedPath?,status,notes?,capturedAt. - Indexes as defined in
docs/modules/taskrunner/migrations/pack-run-collections.md.
6. Step Types and Semantics
run– module invocation; declaresinputs/outputs.parallel– executes nestedsteps[]; honorsmaxParallel.map– expands items into child steps (stepId[index]::templateId).gate.approval– human approval checkpoint; enforces TTL/required count; pauses run until satisfied or expired.gate.policy– Policy Engine evaluation;failActiondecides halt vs. continue.- Built-in helper:
bundle.ingest(run step) — requireschecksum/checksumSha256, validates SHA-256, stages bundles toArtifactsPath/bundles/{checksum}/{filename}deterministically, and emitsmetadata.json; fails on missing file or checksum mismatch.
7. Determinism, Air-Gap, and Security
- Plan hash binding: runtime graph must equal planned graph; mismatch aborts run.
- All timestamps UTC ISO-8601; ordered logs via
(runId, sequence)unique index. - Secrets never logged; evidence bundles store only redacted metadata.
- Sealed mode: reject non-allowlisted network calls; approvals can be processed offline via request/response bundles.
- RBAC scopes:
packs.read,packs.write,packs.run,packs.approve. - Approval enforcement: service rejects approval decisions when provided
planHashdoes not match stored run state (protects against stale/forged tokens).
8. Evidence & Attestation
- DSSE attestation payload (
payloadType:application/vnd.stellaops.pack-run+json) includesrunId,packName/version,planHash, input/output digests, step statuses,completedAt. - Evidence bundle contents: signed manifest, inputs (redacted), outputs, transcripts, DSSE attestation; optional Rekor anchoring when online.
9. Observability (Phase I delivered)
- Metrics: step latency, retries, queue depth, resource usage (
TASKRUN-OBS-50/51-001DONE). - Pending: timeline events (
TASKRUN-OBS-52-001), evidence snapshots (TASKRUN-OBS-53-001), attestations (TASKRUN-OBS-54-001), incident mode (TASKRUN-OBS-55-001).
10. Integration Points
- Authority - approval tokens, scope validation, sealed-vault secrets.
- Policy Engine -
gate.policydecisions, policy context in evidence. - Export Center - evidence bundles and manifests for offline/air-gapped export.
- Orchestrator/CLI - submission + resume flows; SSE log consumption.
11. Configuration (Mongo example)
\"TaskRunner\": {
\"Storage\": {
\"Mode\": \"mongo\",
\"Mongo\": {
\"ConnectionString\": \"mongodb://127.0.0.1:27017/taskrunner\",
\"Database\": \"taskrunner\",
\"RunsCollection\": \"pack_runs\",
\"LogsCollection\": \"pack_run_logs\",
\"ArtifactsCollection\": \"pack_artifacts\",
\"ApprovalsCollection\": \"pack_run_approvals\"
}
}
}
12. Gap Remediation (TP1–TP10, 2025-12)
- Canonical plan hash (TP1): Plan hash is
sha256:<64-hex>overplan.canonicalPlanPath(normalized JSON, stable key ordering, UTF-8). Hash and canonical plan file are shipped in offline bundles and verified byscripts/packs/verify_offline_bundle.py. - Inputs lock (TP2): Task Runner emits
inputs.lockcapturing resolved inputs + redacted secret placeholders; stored in evidence bundles and listed underhashes[]in offline manifests. - Approval ledger (TP3): Approval decisions are DSSE-signed, embedding
runId,gateId,planHash, andtenantId. Approval endpoints reject mismatched plan hashes or missing DSSE envelopes. - Secret redaction (TP4): Evidence/transcripts apply the redaction policy referenced in
security.secretsRedactionPolicy; secrets are hashed or blanked, never logged in clear text. - Deterministic ordering/RNG/time (TP5): Execution order derives from the canonical graph, RNG seed is derived from
planHash, and all timestamps are UTC ISO-8601 with monotonic log sequences. - Sandbox + egress quotas (TP6): Runs declare
sandbox.mode(sealed/restricted), explicitegressAllowlist, CPU/memory limits, and optional wall-clock quota. Missing entries cause fail-closed refusal during plan or execution. - Registry signing + SBOM + revocation (TP7): Packs accepted by Task Runner must include DSSE envelopes for bundle + attestation, a pack SBOM, and a revocation list path; imports fail when digests or revocation proofs are absent.
- Offline bundle schema + verifier (TP8): Offline bundles must satisfy
docs/task-packs/packs-offline-bundle.schema.jsonand passscripts/packs/verify_offline_bundle.py --require-dsse. Evidence locker records the verifier version used. - Run/approval SLOs (TP9): Plan validation enforces declared SLOs (
runP95Seconds,approvalP95Seconds,maxQueueDepth) and wires alert rules into telemetry (burn-rate alerts on approval latency + queue depth). - Fail-closed gates (TP10): Approval/policy/timeline gates default to fail-closed on missing evidence, expired DSSE, or absent quotas; remediation hints surface in
pack_run_logsand API error payloads.
13. References
- Product advisory:
docs/product-advisories/29-Nov-2025 - Task Pack Orchestration and Automation.md. - Task Pack spec + authoring + runbook:
docs/task-packs/spec.md,docs/task-packs/authoring-guide.md,docs/task-packs/runbook.md. - Migration detail:
docs/modules/taskrunner/migrations/pack-run-collections.md.