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_gap → aces_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:
- 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.
- 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:
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-backendcontainer asrealized in a fresh
aptl lab start, capture the inventory at experimentgrade, 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 starthas fullycompleted 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
shuffle-backendghcr.io/shuffle/shuffle-backend:latest(upstream image)socother in-flight gap issues this asset surfaces during inventory)
Scope
Apply every dimension named by the ACES asset-inventorying methodology
(see Brad-Edwards/aces#353). At minimum:
build args used at build time.
every COPY / RUN / ARG / ENV line with the inputs each consumed.
dpkg -l/rpm -qa/pip freeze/npm ls/ language-specific lockfile snapshot.cited approach (Trivy / Grype / equivalent), with severity counts and
per-vuln IDs.
or first-start (e.g.
containers/shuffle-backend/*.shfor custom builds),with inputs and the resulting on-disk state.
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.
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.
shells, home dirs, sudo entries, any service accounts owned by this
container (AD users live in
ad's inventory, not in their consumer's).the application or daemon listening; readiness criteria.
weaknesses (the SDL
vulnerabilitiesentries this host carries),cross-checked against the realized form (CVE state).
connects to (with protocol + port + auth method); which observers /
sidecars / agents ingest from it; trust relationships it participates
in.
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
docs/aces/inventory/shuffle-backend/as a frozenartifact, following the methodology's named artifact shape. Every
claim cites the source it was observed at (provisioner line,
docker inspectoutput,dpkg -lline, file checksum, etc.).Reviewer can re-run the cited commands and reproduce each claim.
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 grammar cannot represent today has a corresponding new issue
filed against
Brad-Edwards/aces, with the issue URL linked fromthis issue's body. Each gap issue must cite this inventory as its
motivating consumer.
pytest tests/ -q -k "not integration"passes.pre-commit run --all-filespasses.docs/aces/inventory/shuffle-backend/.docs/aces/parity-inventory.yamlisupdated where rows for this asset move between categories (e.g.
aces_schema_profile_gap→aces_sdlonce a corresponding ACESupstream issue lands;
aptl_backend_responsibilityrows updated tocite the realized form).
Honesty / claims framing
cited against observed reality at a single point in time.
that's a separate equivalence-checker concern. It does provide the
ground truth a future equivalence checker compares against.
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.
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, andaptl aces-inventory validate/gaps/schemawhen implementing this asset inventory.Stop Condition
This issue has two goals:
scenarios/techvault.sdl.yaml.Brad-Edwards/acesissue 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:
scenarios/techvault.sdl.yaml.