Skip to content

SCN-010 inventory: shuffle-backend container (steady-state asset spec) #360

@Brad-Edwards

Description

@Brad-Edwards

ACES Methodology And Capture Tooling

Before starting inventory or encoding work on this issue, use the ACES asset inventory methodology and capture tooling:

Summary

Apply the ACES asset-inventorying methodology to the shuffle-backend container as
realized in a fresh aptl lab start, capture the inventory at experiment
grade, and encode every observable fact directly in scenarios/techvault.sdl.yaml,
with referenced source packages and supporting artifacts used only as
evidence/provenance, not as substitutes for SDL facts.

Snapshot point: steady state after aptl lab start has fully
completed and the container has reached its operational state. The target
is the complete participant/agent-observable steady-state spec for that
moment. Time dynamics and attack-induced changes are separate work, but
any fact observable at the snapshot point is in scope and must be encoded
or blocked by an ACES expressivity issue.

Identifying information

Scope

Apply every dimension named by the ACES asset-inventorying methodology
(see Brad-Edwards/aces#353). At minimum:

  • Image identity: base image registry + digest, all parent layers,
    build args used at build time.
  • Build recipe: Dockerfile (or absence thereof for upstream images),
    every COPY / RUN / ARG / ENV line with the inputs each consumed.
  • Package manifest at build time: dpkg -l / rpm -qa /
    pip freeze / npm ls / language-specific lockfile snapshot.
  • Patch state: CVE inventory at snapshot time per the methodology's
    cited approach (Trivy / Grype / equivalent), with severity counts and
    per-vuln IDs.
  • First-boot / provisioning state: every script that runs at build
    or first-start (e.g. containers/shuffle-backend/*.sh for custom builds),
    with inputs and the resulting on-disk state.
  • Runtime configuration: env vars (declared in compose + resolved
    values, redacted per ADR-029 where they're operator secrets), exposed
    ports, capabilities, mounted volumes (bind + named), network
    attachments, healthcheck command + interval + retries + start_period,
    restart policy, ulimits.
  • Filesystem inventory at steady state: all participant/agent-
    observable steady-state filesystem paths, file metadata, permissions,
    ownership, and checksums/content references. Do not exclude logs,
    caches, generated files, or runtime-created state solely because they
    are transient; if their values are unstable, record the stability
    limits and either encode the observable shape in SDL or file/link an
    ACES expressivity blocker. Include configuration files, fixture
    content, certificates, pre-seeded data, agent installers, application
    source, templates, static assets, and generated startup artifacts
    visible from inside the range.
  • Identity surfaces local to this host: local users + UID/GID,
    shells, home dirs, sudo entries, any service accounts owned by this
    container (AD users live in ad's inventory, not in their consumer's).
  • Service surfaces: every open port + protocol + bound interface;
    the application or daemon listening; readiness criteria.
  • Vulnerability inventory (target hosts only): declared scenario
    weaknesses (the SDL vulnerabilities entries this host carries),
    cross-checked against the realized form (CVE state).
  • Relationships originating at this host: which services it
    connects to (with protocol + port + auth method); which observers /
    sidecars / agents ingest from it; trust relationships it participates
    in.
  • Authored-vs-realized split: explicit per field. Which dimensions
    are authored intent (encoded in SDL), which are realized form
    (covered by ACES EXP-722 disclosure surfaces / equivalent), which
    are provenance (covered by ACES EXP-720 / equivalent). Cite the
    methodology section that governs each.

The inventory is a steady-state snapshot. Time dynamics and attack-
induced transitions may be separate work, but any state observable at the
snapshot point, including logs, caches, generated files, volume contents,
and ephemeral runtime telemetry present at capture time, must be encoded
or blocked by an ACES expressivity issue rather than silently excluded.

Acceptance

  • Inventory captured under docs/aces/inventory/shuffle-backend/ as a frozen
    artifact, following the methodology's named artifact shape. Every
    claim cites the source it was observed at (provisioner line,
    docker inspect output, dpkg -l line, file checksum, etc.).
    Reviewer can re-run the cited commands and reproduce each claim.
  • All inventory surfaces that ACES can express today are encoded directly
    in scenarios/techvault.sdl.yaml. Referenced source packages,
    Dockerfiles, Compose services, checksums, evidence bundles, and mapping
    notes are proof inputs only; they do not substitute for SDL expression.
    Any observable detail that ACES cannot express must be linked to a
    blocking ACES expressivity issue.
  • ACES expressivity gaps: every surface the inventory captured but
    ACES grammar cannot represent today has a corresponding new issue
    filed against Brad-Edwards/aces, with the issue URL linked from
    this issue's body. Each gap issue must cite this inventory as its
    motivating consumer.
  • APTL runtime consumption is outside this inventory issue; do not file or use APTL gaps as a substitute for ACES SDL expression.
  • pytest tests/ -q -k "not integration" passes.
  • pre-commit run --all-files passes.
  • Traceability link added in Ground Control: SCN-010 ←
    docs/aces/inventory/shuffle-backend/.
  • The SCN-010 parity inventory at docs/aces/parity-inventory.yaml is
    updated where rows for this asset move between categories (e.g.
    aces_schema_profile_gapaces_sdl once a corresponding ACES
    upstream issue lands; aptl_backend_responsibility rows updated to
    cite the realized form).

Honesty / claims framing

  • The inventory establishes a spec for this asset at steady state,
    cited against observed reality at a single point in time.
  • The inventory does NOT itself prove byte-identical re-buildability;
    that's a separate equivalence-checker concern. It does provide the
    ground truth a future equivalence checker compares against.
  • The inventory does not by itself cover behavior over time, attack-
    induced state transitions, or later operator-driven runtime changes,
    but any state present at the steady-state snapshot is in scope. If a
    dynamic surface must be excluded from this issue, link the issue that
    owns it and record the limit.
  • Any surface where the inventory could not be fully resolved (closed
    upstream source, opaque image, undocumented behavior) must be flagged
    in the inventory artifact as a known limit, not silently elided.

Migration note

This issue carries the shuffle-backend per-asset inventory work after APTL #353 was corrected to be methodology/tooling only. The methodology/tooling support landed in PR #359; use docs/aces/inventory/asset-inventory-methodology.md, docs/aces/inventory/methodology-assurance-report.md, and aptl aces-inventory validate/gaps/schema when implementing this asset inventory.

Stop Condition

This issue has two goals:

  1. Move TechVault closer to a complete ACES spec by encoding the catalogued, in-scope observable facts for this asset/composition in scenarios/techvault.sdl.yaml.
  2. Identify ACES SDL expressivity gaps. If ACES cannot express a catalogued in-scope fact, file/link a blocking Brad-Edwards/aces issue and leave this issue open until ACES lands and the SDL is updated.

Use #330 as the depth bar: configs, versions, packages, files, permissions, users, services, relationships, vulnerabilities, runtime artifacts, checksums/provenance, and explicit claim boundaries belong in scope when they are observable for this asset/composition.

Evidence, Docker/Compose files, source trees, checksums, logs, screenshots, inventories, and mapping ledgers are proof inputs only. They do not substitute for SDL expression. APTL runtime consumption is separate and never justifies omitting SDL content.

Do not close this issue on representative subsets, relevance judgments, APTL support gaps, or evidence-only capture. Close it only when every catalogued in-scope observable is either encoded in SDL or blocked by a linked ACES expressivity issue.

Completion checklist:

  • Catalogued the in-scope participant/agent-observable facts for this surface.
  • Encoded every ACES-expressible catalogued fact in scenarios/techvault.sdl.yaml.
  • Filed and linked ACES blocker issue(s) for every catalogued fact ACES cannot express.
  • Verified no catalogued fact remains evidence-only without SDL encoding or an ACES blocker.
  • Updated the parity inventory / mapping ledger for every encoded or blocked fact.
  • Recorded claim boundaries, such as snapshot-only capture, no full root filesystem enumeration, no byte-identical rebuild proof, or no time-dynamic behavior, when this issue does not capture those surfaces.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions