11 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Imposed rule: Work of this type or tasks of this type on this component must also be applied everywhere else it should be applied.
Task Pack Specification (Sprint 43 Draft)
The Task Pack specification defines a deterministic, auditable format that enables operators to encode multi-step maintenance, validation, and deployment workflows. Packs are executed by the Task Runner service, distributed through the Packs Registry, and invoked via the StellaOps CLI (stella pack ...) or Orchestrator integrations.
1 · Goals & Scope
- Deterministic execution. Identical inputs yield identical run graphs, output manifests, and evidence bundles across environments (online, sealed, or offline).
- Secure-by-default. Pack metadata must capture provenance, signatures, RBAC requirements, and secret usage; execution enforces tenant scopes and approvals.
- Portable. Packs are distributed as signed OCI artifacts or tarballs that work in connected and air-gapped deployments, including Offline Kit mirrors.
- Composable. Packs can reference reusable steps, expressions, and shared libraries without sacrificing determinism or auditability.
Non-goals: full-blown workflow orchestration, unbounded scripting, or remote code injection. All logic is declarative and constrained to Task Runner capabilities.
2 · Terminology
| Term | Definition | 
|---|---|
| Pack manifest | Primary YAML document ( pack.yaml) describing metadata, inputs, steps, policies, and evidence expectations. | 
| Step | Atomic unit of work executed by Task Runner (e.g., command, API call, policy gate, approval). Steps can be sequential or parallel. | 
| Expression | Deterministic evaluation (JMESPath-like) used for branching, templating, and conditionals. | 
| Policy gate | Declarative rule that blocks execution until conditions are met (e.g., approval recorded, external signal received). | 
| Artifact | File, JSON blob, or OCI object produced by a step, referenced in manifests and evidence bundles. | 
| Pack bundle | Distribution archive ( .stella-pack.tgzor OCI ref) containing manifest, assets, schemas, and provenance metadata. | 
3 · Pack Layout
my-pack/
 ├─ pack.yaml                  # Required manifest
 ├─ assets/                    # Optional static assets (scripts, templates)
 ├─ schemas/                   # JSON schemas for inputs/outputs
 ├─ docs/                      # Markdown docs rendered in Console/CLI help
 ├─ provenance/                # DSSE statements, SBOM, attestations
 └─ README.md                  # Author-facing summary (optional)
Publishing via Packs Registry or OCI ensures the directory is canonical and hashed.
4 · Manifest Schema (v1.0)
apiVersion: stellaops.io/pack.v1
kind: TaskPack
metadata:
  name: sbom-remediation
  version: 1.3.0
  description: >
    Audit SBOM drift, quiet high-risk findings, and export mitigation evidence.
  tags: [sbom, remediation, policy]
  tenantVisibility: ["west-prod", "east-stage"]   # optional allowlist
  maintainers:
    - name: Jane Doe
      email: jane@example.com
  license: AGPL-3.0-or-later
  annotations:
    imposedRuleReminder: true
spec:
  inputs:
    - name: sbomBundle
      type: object
      schema: schemas/sbom-bundle.schema.json
      required: true
    - name: dryRun
      type: boolean
      default: false
  secrets:
    - name: jiraToken
      scope: Packs.Run    # Authority scope required
      description: Optional token for ticket automation
  approvals:
    - id: security-review
      grants: ["Packs.Approve"]
      expiresAfter: PT4H
      reasonTemplate: "Approve remediation for SBOM {{ inputs.sbomBundle.metadata.image }}"
  steps:
    - id: validate-input
      run:
        uses: builtin:validate-schema
        with:
          target: "{{ inputs.sbomBundle }}"
          schema: schemas/sbom-bundle.schema.json
    - id: plan-remediation
      when: "{{ not inputs.dryRun }}"
      run:
        uses: builtin:policy-simulate
        with:
          sbom: "{{ inputs.sbomBundle }}"
          policy: "policies/remediation.yaml"
    - id: approval-gate
      gate:
        approval: security-review
        message: "Security must approve remediation before changes apply."
    - id: apply-remediation
      run:
        uses: builtin:cli-command
        with:
          command: ["stella", "policy", "promote", "--from-pack"]
    - id: export-evidence
      run:
        uses: builtin:evidence-export
        with:
          includeArtifacts: ["{{ steps.plan-remediation.outputs.planPath }}"]
  outputs:
    - name: evidenceBundle
      type: file
      path: "{{ steps.export-evidence.outputs.bundlePath }}"
  success:
    message: "Remediation applied; evidence bundle ready."
  failure:
    retries:
      maxAttempts: 1
      backoffSeconds: 0
    message: "Remediation failed; see evidence bundle for context."
4.1 Field Summary
| Field | Description | Requirements | 
|---|---|---|
| metadata | Human-facing metadata; used for registry listings and RBAC hints. | name(DNS-1123),version(SemVer),description≤ 2048 chars. | 
| spec.inputs | Declarative inputs validated at plan time. | Must include type; custom schema optional but recommended. | 
| spec.secrets | Secrets requested at runtime; never stored in pack bundle. | Each secret references Authority scope; CLI prompts or injects from profiles. | 
| spec.approvals | Named approval gates with required grants and TTL. | ID unique per pack; grantsmap to Authority roles. | 
| spec.steps | Execution graph; each step is run,gate,parallel, ormap. | Steps must declare deterministic usesmodule andid. | 
| spec.outputs | Declared artifacts for downstream automation. | typecan befile,object, orurl; path/expression required. | 
| success/failure | Messages + retry policy. | failure.retries.maxAttempts+backoffSecondsdefault to 0. | 
5 · Step Types
| Type | Schema | Notes | 
|---|---|---|
| run | Executes a built-in module ( builtin:*) or registry-provided module. | Modules must be deterministic, side-effect constrained, and versioned. | 
| parallel | Executes sub-steps concurrently; maxParalleloptional. | Results aggregated; failures trigger abort unless continueOnError. | 
| map | Iterates over deterministic list; each iteration spawns sub-step. | Sequence derived from expression result; ordering stable. | 
| gate.approval | Blocks until approval recorded with required grants. | Supports autoExpireto cancel run on timeout. | 
| gate.policy | Calls Policy Engine to ensure criteria met (e.g., no critical findings). | Fails run if gate not satisfied. | 
when expressions must be pure (no side effects) and rely only on declared inputs or prior outputs.
6 · Determinism & Validation
- Plan phase (stella pack plan,TaskRunner.PlanAPI) parses manifest, resolves expressions, validates schemas, and emits canonical graph with hash.
- Simulation compares plan vs dry-run results, capturing differences in planDiff. Required for approvals in sealed environments.
- Execution uses plan hash to ensure runtime graph matches simulation. Divergence aborts run.
- Evidence: Task Runner emits DSSE attestation referencing plan hash, input digests, and output artifacts.
Validation pipeline:
pack.yaml ──▶ schema validation ──▶ expression audit ──▶ determinism guard ──▶ signing
Packs must pass CLI validation before publishing.
7 · Signatures & Provenance
- Pack bundles are signed with cosign (keyless Fulcio/KMS supported) and optionally DSSE envelopes.
- provenance/directory stores signed statements (SLSA Build L1+) linking source repo, CI run, and manifest hash.
- Registry verifies signatures on push/pull; Task Runner refuses unsigned packs unless in development mode.
- Attestations include:
- Pack manifest digest (sha256)
- Pack bundle digest
- Build metadata (git.ref,ci.workflow,cli.version)
 
- Pack manifest digest (
8 · RBAC & Scopes
Authority scopes introduced by AUTH-PACKS-41-001:
| Scope | Purpose | 
|---|---|
| Packs.Read | Discover packs, download manifests. | 
| Packs.Write | Publish/update packs in registry (requires signature). | 
| Packs.Run | Execute packs via CLI/Task Runner. | 
| Packs.Approve | Fulfil approval gates defined in packs. | 
Task Runner enforces scopes per tenant; pack metadata may further restrict tenant visibility (metadata.tenantVisibility).
9 · Observability & Evidence
- Metrics: pack_run_duration_seconds,pack_step_retry_total,pack_gate_wait_seconds.
- Logs: Structured JSON per step with scrubbed inputs (secretMaskapplied).
- Timeline events: pack.started,pack.approval.requested,pack.approval.granted,pack.completed.
- Evidence bundle includes:
- Plan manifest (canonical JSON)
- Step transcripts (redacted)
- Artifacts manifest (sha256, size)
- Attestations references
 
10 · Compatibility Matrix
| CLI Version | Pack API | Task Runner | Notes | 
|---|---|---|---|
| 2025.10.x | pack.v1 | Runner build >=2025.10.0 | Approvals optional, loops disabled. | 
| 2025.12.x | pack.v1 | Runner build >=2025.12.0 | Approvals resume, secrets injection, localization strings. | 
| Future | pack.v2 | TBD | Will introduce typed outputs & partial replay (track in Epic 13). | 
CLI enforces compatibility: running pack with unsupported features yields ERR_PACK_UNSUPPORTED.
11 · Publishing Workflow
- Author pack (pack.yaml, assets, docs).
- Run stella pack validate(schema + determinism).
- Generate bundle: stella pack build --output my-pack.stella-pack.tgz.
- Sign: cosign sign-blob my-pack.stella-pack.tgz.
- Publish: stella pack push registry.example.com/org/my-pack:1.3.0.
- Registry verifies signature, records provenance, and exposes pack via API.
12 · Compliance Checklist
- Manifest schema documented for all fields, including approvals, secrets, and outputs.
- Determinism requirements outlined with plan/simulate semantics and CLI validation steps.
- Signing + provenance expectations spelled out with cosign/DSSE references.
- RBAC scopes (Packs.*) and tenant visibility rules captured.
- Observability (metrics, logs, evidence) described for Task Runner integrations.
- Compatibility matrix enumerates CLI/Runner requirements.
- Publishing workflow documented with CLI commands.
- Imposed rule reminder included at top of document.
Last updated: 2025-10-27 (Sprint 43).