Skip to content

Indian Hill Container Operations

Indian Hill Container Operations is an Indian Hill-only product profile powered by Alfred V1.1. Alfred is the durable control plane for lifecycle state, policy, approvals, controlled execution, and audit. This repository is the evidence producer and a narrowly scoped repository/build adapter: it evaluates immutable build evidence, emits proposals, and may perform only explicitly autonomous engineering actions delegated by Alfred. It does not become a second control plane and is not permitted to weaken the controls that judge its work.

The operating model

The controller follows a closed loop:

  1. Observe supported release digests, SBOMs, supplier releases, scanner databases, CISA KEV, end-of-life notices, build health, and deployment health.
  2. Reconcile current evidence with durable lifecycle state. A scanner match becomes a stable case instead of an isolated CI log entry.
  3. Decide priority, remediation objective, fix availability, and the next allowed actions from the controlled lifecycle policy.
  4. Remediate by preparing a base-image refresh, dependency update, configuration change, applicability investigation, mitigation, or VEX statement.
  5. Qualify every changed artifact as a new immutable digest through the complete Secure, Hardened, or Validated pipeline. The agent cannot mark its own output qualified.
  6. Release and operate through separately authorized publication, production promotion, and deployment boundaries, followed by health monitoring and rollback when required.
  7. Learn from elapsed time, failed attempts, false-positive analysis, rollback events, and escaped findings using versioned evaluations. Learning can improve proposals; it cannot silently change policy or authority.

Repository adapter and policy kernel

compliance/agent/container-lifecycle-policy.json is the initial fail-closed authority policy. ci/container_lifecycle_agent.py consumes the exact Grype reports, KEV-enriched vulnerability summary, artifact digests, full source revision, repository and pipeline identity, and optional prior state. It emits:

  • container-lifecycle-state.json: active and resolved cases, first-observed time, remediation objective, affected digests, package identity, fix availability, and release eligibility;
  • container-remediation-plan.json: ordered, idempotent actions with an explicit authority mode;
  • container-lifecycle.env: small CI facts for downstream gates and dashboards.

The policy file is a controlled producer-side guardrail and authority snapshot; Alfred remains the authoritative policy and approval plane. A reasoning model may analyze upstream changes, applicability, reachability, test failures, and candidate patches, but it receives only the tools allowed for the current action. The executor must reject any action not present in an Alfred-validated plan or whose authority is not autonomous.

Alfred V1.1 integration contract

Both JSON files use ihl-alfred-container-operations contract version 1.0.0 and validate against compliance/agent/ihl-container-operations-envelope-v1.schema.json. The report payload remains schemaVersion: 1 and retains its existing report type. The envelope fields are:

Field Contract
contract Exact name/version plus product profile, indian-hill producer, and alfred-v1.1 control plane. Unknown versions fail closed.
message Deterministic message ID, caller-supplied correlation ID, deterministic SHA-256 idempotency key, canonical UTC generation time, and payload SHA-256.
source GitLab project ID/URL, pipeline ID/URL, and full 40- or 64-hex Git object ID marked immutable with its algorithm.
artifacts Exactly runtime and referenceApi; each entry repeats the digest-bound image reference and matching sha256: digest.
policy Policy ID, policy schema version, and SHA-256 of the exact policy file bytes. Alfred must allowlist the accepted policy identity and hash.
evidence Unique typed URI plus SHA-256 references. Policy, vulnerability summary, runtime Grype report, and reference API Grype report are mandatory; prior state is included when used.
authority autonomous, approval, and forbidden modes; unknown actions default to forbidden; the complete action-to-mode snapshot is included.
payload The existing ihl-container-lifecycle-state or ihl-container-remediation-plan report.

Hashes use lowercase sha256:<64 hex>. Evidence hashes cover exact file bytes. Payload and idempotency hashes use UTF-8 canonical JSON with recursively sorted keys and separators , and : without insignificant whitespace. The idempotency hash covers exactly contract, payload reportType, source repository and revision, artifacts, policy, and evidence. Pipeline, correlation, timestamps, and payload outcome are deliberately excluded, so a pipeline retry for the same immutable inputs deduplicates while keeping a distinct correlation trail. Message ID is message- plus the first 20 hex characters of SHA-256 over the report type and idempotency key, separated by U+001F, matching the producer's stable_id function.

The paired state and plan must have identical contract, source, artifact, policy, evidence, and authority bindings and the same correlation ID. The producer validates those invariants before writing either file. Alfred must independently validate the schema, recalculate hashes and idempotency identity, verify referenced evidence bytes, allowlist repository and policy identity, require the two messages to agree, and reject missing, duplicated, unknown, malformed, stale, or mismatched fields. A syntactically valid plan is evidence, not execution authorization.

compliance/agent/ihl-container-operations-conformance-v1.json is the language-neutral Alfred conformance vector. It fixes a canonical JSON byte sequence and SHA-256 plus the exact state and plan idempotency keys and message IDs for a common synthetic binding. A consumer is compatible only when it reproduces every value exactly. For each channel, construct the idempotency object by copying idempotencyBasis and adding that channel's reportType.

Verified delivery bundle

The agent:remediation-plan job runs ci/validate_container_lifecycle_envelopes.py after generation and before artifact upload. The validator treats state and plan as one atomic handoff, checks their shared bindings and lifecycle counts, and re-hashes caller-selected evidence paths; it never opens a path supplied by the envelope. The developer-restricted, one-year job artifact contains:

  • the lifecycle state and remediation plan envelopes;
  • the vulnerability summary and both Grype reports referenced by those envelopes;
  • the exact lifecycle policy referenced by hash;
  • the v1 JSON Schema and conformance vector.

Alfred should retrieve the complete archive through the authenticated GitLab job-artifact API. It must verify the expected project, pipeline, commit, successful job, and artifact access policy before applying the same contract checks. Producer validation is defense in depth and does not replace Alfred validation or approval.

For local or incident-response verification, run the same independent check from the repository root:

python ci/validate_container_lifecycle_envelopes.py \
  --policy compliance/agent/container-lifecycle-policy.json \
  --state pipeline-evidence/container-lifecycle-state.json \
  --plan pipeline-evidence/container-remediation-plan.json \
  --evidence lifecycle-policy=compliance/agent/container-lifecycle-policy.json \
  --evidence vulnerability-summary=pipeline-evidence/vulnerability-summary.json \
  --evidence runtime-grype-report=pipeline-evidence/runtime.grype.json \
  --evidence reference-api-grype-report=pipeline-evidence/reference-api.grype.json

Shadow-mode acceptance

Before enabling an Alfred-triggered repository or build action, retain audit results for these five tests against a real successful pipeline:

Test Required result
Authentic retrieval Alfred binds the archive to the allowlisted GitLab project, successful job, pipeline, and exact source revision.
Normal ingestion Both messages and all evidence hashes validate; no side effect occurs.
Replay Reingestion has the same per-channel idempotency keys, records a replay, and creates no duplicate case, proposal, or execution.
Tamper and mix A changed evidence byte or envelopes from different pipelines is rejected before durable state changes.
Authority Autonomous actions remain shadow observations; approval actions become non-executable proposals; unknown and forbidden actions are rejected and audited.

Shadow mode passes only when all five results are demonstrated and no source, registry, publication, deployment, withdrawal, policy, or evidence mutation was possible through the ingestion identity.

Authority boundary

Action class Initial authority
Observe, correlate, open/update a case, block an unsafe promotion Autonomous
Prepare a base refresh or dependency patch, run tests, rebuild, scan, qualify, draft VEX Autonomous
Publish a replacement, promote to production, deploy to production, withdraw a release Approval required
Weaken or change lifecycle/assurance policy, disable a security control, delete evidence Forbidden

These boundaries are deliberately asymmetric. The agent may do extensive reversible engineering work without waiting, while actions that alter customer or production state remain independently authorized. More autonomy should be earned per action through measured reliability, not granted as one global switch.

Alfred-owned durable service architecture

The Alfred V1.1 production service owns five independently secured components:

  • Event gateway: signed GitLab, registry, advisory, and deployment events plus scheduled reconciliation. Events are deduplicated and retained.
  • Lifecycle database: the durable system of record for supported products, immutable releases, cases, attempts, approvals, deployments, VEX, and evidence references. CI artifacts or caches are not the source of truth.
  • Reasoning workers: isolated worktrees with short-lived credentials, network allowlists, bounded retries, and an explicit tool set for each planned action.
  • Policy/execution gateway: validates action ID, authority, artifact identity, approval, environment, and evidence preconditions immediately before every side effect.
  • Evidence and telemetry: append-only audit events, traces, cost, latency, failure reason, qualification result, signature identity, deployment health, and rollback outcome.

The agent must use workload identity rather than stored cloud credentials. Separate identities are required for observation, source changes, candidate builds, release, production promotion, and deployment. No reasoning worker should receive all of them.

Rollout

  1. Shadow mode: run reconciliation and compare plans with human decisions; no source writes.
  2. Engineering autonomy: allow branches, patches, merge requests, candidate pipelines, VEX drafts, and evidence collection. Measure precision, successful qualification, time-to-fix, retry rate, and human override rate.
  3. Release preparation: allow signed release proposals and staged rollout plans, but retain approval for customer-impacting actions.
  4. Narrow production autonomy: only after evaluations show reliability, consider approving specific low-blast-radius rollout classes through pre-authorized policy. Emergency withdrawal, policy changes, and evidence deletion remain independently controlled.

The current repository implements only the deterministic evidence kernel and the Indian Hill repository/build adapter. Alfred V1.1 owns the durable event service, lifecycle database, reasoning/executor coordination, release catalog, approvals, audit, and production rollout controller. No integration message grants this repository publication or production authority.