You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
APTL has no observability infrastructure of its own. The OpenTelemetry stack that serves evidence capture — collector, trace store, and the operator view over it — is currently declared by the TechVault scenario pack, as three nodes named aptl-otel-collector, aptl-tempo and aptl-grafana-otel.
That is the wrong owner. A scenario declares what the exercise happens in and what it needs captured; how capture is performed, where it is stored, and whether any of it is exposed to an operator are the backend's. The pack is being asked to remove them in OpenRAE/env-packs#337, and APTL needs to own them before that lands.
Why this is not just "move three containers"
The scenario's side of the contract is evidence_requirements, which states what must be captured without naming what captures it — scope, channel, media types, sensitivity, redaction, integrity, retention, loss disclosure. TechVault already declares one:
evidence_requirements:
cortex-job-index-schema-readback:
scope: fresh native schema readback projected to portable field semanticschannel: api_responsesensitivity: plainredaction: redact_secretsretention: run_lifetimeloss_disclosure: required
So the deliverable is capture infrastructure that satisfies declared requirements of that shape, not a fixed Grafana deployment that happens to exist. Whatever APTL stands up should be answerable to those fields — particularly redaction, retention and loss_disclosure, which are promises about evidence rather than deployment details.
ADR-012 already frames the OTel stack as "always-on lab infrastructure (not optional)", and CORE_PROFILES = ("otel",) already marks the profile backend-owned and always selected. The ownership is stated; what is missing is realization that does not depend on a pack declaring the nodes.
The gap that makes sequencing matter
With an env-pack, the realized service set is derived from the pack. As raes_profiles.py records it: "An env-pack never reaches here: it ships no docker-compose.yml, so load_compose_profile_index returns an empty index (ADR-048) and node service identity is derived from the realization DTOs."
So today the pack is what causes those three containers to exist. Selecting the otel profile does not conjure services that no realization declares. Remove the nodes from the pack before APTL realizes them itself and evidence capture disappears rather than moves.
Symptom this also resolves
Grafana, Tempo and the collector currently run with container ports only and no host bindings, so nothing observability-related is reachable from the host:
That contradicts ADR-012's http://localhost:3100, which the checked-in docker-compose.yml still publishes and which captured range snapshots under docs/raes/techvault-curated-live-validation-gate/ record as realized. Whether an operator-facing view is exposed, and on what port, becomes APTL's decision to make deliberately once it owns the stack. aptl lab start currently omits the Grafana line rather than printing a URL that answers nothing (#879), so nothing advertises a dead endpoint in the meantime.
Scope
Realize the capture stack as backend infrastructure, independent of any pack declaring it.
Tie it to the contract it serves: satisfy declared evidence_requirements, and be explicit about redaction, retention and loss disclosure rather than inheriting whatever the collector defaults to.
Decide and document the operator-facing surface, including whether it is published and where, so ADR-012 and the realized range agree.
Found while making aptl lab start boot TechVault end to end (#879).
Requirements
EXP-010 — Capture Plan Admission and Evidence Acquisition
Expanded scope — raes-env-packs 5.2.0
The user authorized expanding #992 on 2026-09-12 to implement all four evidence contracts in the published raes-env-packs 5.2.0 / raes 3.5.0 TechVault scenario. PR OpenRAE/env-packs#338 has merged; 5.2.0 removes the three observability nodes and the earlier cortex-job-index-schema-readback requirement.
The delivery must now support:
cortex-enrichment-readback: exact enabled analyzer identity, bounded successful TechVaultScenarioContext_1_0 report for 172.20.1.30, and TheHive Cortex connector status, application/json, redact_secrets, checksum, run_lifetime, required loss disclosure.
suricata-local-rule-readiness: admitted image/content identities and realized-byte digests, native configuration success, selected sources, all 16 loaded local SIDs, text/plain, redact_sensitive, checksum, run_lifetime, required loss disclosure; no rule bodies or host paths in evidence.
suricata-login-sqli-alert: fresh participant-equivalent Kali POST /login containing UNION SELECT, exact Suricata SID 1000010 and Wazuh rule 303020 correlation, application/x-ndjson, redact_sensitive, checksum, run_lifetime, required loss disclosure.
redteam-session-transcript: every interactive shell session on the red-team workstation, commands and responses attributable and ordered in time, full run from readiness through teardown, participant_output/text/plain, redact_secrets, chain_of_custody, run_lifetime, required loss disclosure. MCP calls alone are not coverage of every shell session.
Closed scopes prohibit intrusion. Open scopes require the least intrusive option that genuinely meets all evidence terms. Prefer existing native evidence over new agents; do not add the optional OTel stack when it would intrude unnecessarily. Any observability additions, including unasked or ephemeral ones, must be permitted by RAE scopes and reported as actual realized resources to the runtime. Required unsupported evidence rejects admission; this is not permission to claim the four contracts implemented by rejecting them forever. Retain all lifecycle, redaction, custody, loss, packaging, dependency compatibility, clean-machine lab, and workflow gates. Do not merge PRs without the user's explicit approval.
Finding
APTL has no observability infrastructure of its own. The OpenTelemetry stack that serves evidence capture — collector, trace store, and the operator view over it — is currently declared by the TechVault scenario pack, as three nodes named
aptl-otel-collector,aptl-tempoandaptl-grafana-otel.That is the wrong owner. A scenario declares what the exercise happens in and what it needs captured; how capture is performed, where it is stored, and whether any of it is exposed to an operator are the backend's. The pack is being asked to remove them in OpenRAE/env-packs#337, and APTL needs to own them before that lands.
Why this is not just "move three containers"
The scenario's side of the contract is
evidence_requirements, which states what must be captured without naming what captures it — scope, channel, media types, sensitivity, redaction, integrity, retention, loss disclosure. TechVault already declares one:So the deliverable is capture infrastructure that satisfies declared requirements of that shape, not a fixed Grafana deployment that happens to exist. Whatever APTL stands up should be answerable to those fields — particularly
redaction,retentionandloss_disclosure, which are promises about evidence rather than deployment details.ADR-012 already frames the OTel stack as "always-on lab infrastructure (not optional)", and
CORE_PROFILES = ("otel",)already marks the profile backend-owned and always selected. The ownership is stated; what is missing is realization that does not depend on a pack declaring the nodes.The gap that makes sequencing matter
With an env-pack, the realized service set is derived from the pack. As
raes_profiles.pyrecords it: "An env-pack never reaches here: it ships no docker-compose.yml, soload_compose_profile_indexreturns an empty index (ADR-048) and node service identity is derived from the realization DTOs."So today the pack is what causes those three containers to exist. Selecting the
otelprofile does not conjure services that no realization declares. Remove the nodes from the pack before APTL realizes them itself and evidence capture disappears rather than moves.Symptom this also resolves
Grafana, Tempo and the collector currently run with container ports only and no host bindings, so nothing observability-related is reachable from the host:
That contradicts ADR-012's
http://localhost:3100, which the checked-indocker-compose.ymlstill publishes and which captured range snapshots underdocs/raes/techvault-curated-live-validation-gate/record as realized. Whether an operator-facing view is exposed, and on what port, becomes APTL's decision to make deliberately once it owns the stack.aptl lab startcurrently omits the Grafana line rather than printing a URL that answers nothing (#879), so nothing advertises a dead endpoint in the meantime.Scope
evidence_requirements, and be explicit about redaction, retention and loss disclosure rather than inheriting whatever the collector defaults to.Found while making
aptl lab startboot TechVault end to end (#879).Requirements
Expanded scope — raes-env-packs 5.2.0
The user authorized expanding #992 on 2026-09-12 to implement all four evidence contracts in the published raes-env-packs 5.2.0 / raes 3.5.0 TechVault scenario. PR OpenRAE/env-packs#338 has merged; 5.2.0 removes the three observability nodes and the earlier cortex-job-index-schema-readback requirement.
The delivery must now support:
Closed scopes prohibit intrusion. Open scopes require the least intrusive option that genuinely meets all evidence terms. Prefer existing native evidence over new agents; do not add the optional OTel stack when it would intrude unnecessarily. Any observability additions, including unasked or ephemeral ones, must be permitted by RAE scopes and reported as actual realized resources to the runtime. Required unsupported evidence rejects admission; this is not permission to claim the four contracts implemented by rejecting them forever. Retain all lifecycle, redaction, custody, loss, packaging, dependency compatibility, clean-machine lab, and workflow gates. Do not merge PRs without the user's explicit approval.