Files
git.stella-ops.org/docs/modules/evidence-locker/incident-mode.md
StellaOps Bot 600f3a7a3c
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Console CI / console-ci (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
feat(graph): introduce graph.inspect.v1 contract and schema for SBOM relationships
- Added graph.inspect.v1 documentation outlining payload structure and determinism rules.
- Created JSON schema for graph.inspect.v1 to enforce payload validation.
- Defined mapping rules for graph relationships, advisories, and VEX statements.

feat(notifications): establish remediation blueprint for gaps NR1-NR10

- Documented requirements, evidence, and tests for Notifier runtime.
- Specified deliverables and next steps for addressing identified gaps.

docs(notifications): organize operations and schemas documentation

- Created README files for operations, schemas, and security notes to clarify deliverables and policies.

feat(advisory): implement PostgreSQL caching for Link-Not-Merge linksets

- Created database schema for advisory linkset cache.
- Developed repository for managing advisory linkset cache operations.
- Added tests to ensure correct functionality of the AdvisoryLinksetCacheRepository.
2025-12-04 09:36:59 +02:00

2.6 KiB
Raw Blame History

Evidence Locker Incident Mode

Sprint 55 / Task EVID-OBS-55-001 retention & debug hooks

Incident mode is a service-wide switch that increases forensic fidelity when StellaOps enters a suspected compromise or SLO breach. The Evidence Locker reacts to the flag in four ways:

  1. Extended retention. Every newly sealed bundle receives an ExpiresAt timestamp of CreatedAt + Incident.RetentionExtensionDays so downstream TTL jobs keep artefacts long enough for investigation.
  2. Debug artefacts. Snapshot requests emit an incident/request-*.json payload into the object store. The payload captures the normalized request metadata/materials plus the incident stamp so offline replay tooling has everything it needs. The manifest surfaces the artefact under the incident/ section and packaging streams it alongside the canonical bundle files.
  3. Manifest metadata. Bundles carry incident.mode, incident.changedAt, and incident.retentionExtensionDays metadata so verifiers and auditors can see exactly when the mode toggled and how long retention was extended.
  4. Operational signals. Activation/deactivation events are published to the Timeline Indexer (and, via the notifier stub, to the future Notify integration). The IEvidenceTimelinePublisher now emits evidence.incident.mode with state and retention attributes, giving Ops a canonical audit trail.
  5. Signed activation/exit (EB7). Incident toggles MUST be recorded inside the bundle manifest (incident block) and in the DSSE predicate with signer identity and timestamp. Offline environments must still include the activation record even when no Rekor entry is possible; when online, include transparency log pointers alongside the incident record.

Configuration lives under EvidenceLocker:Incident:

"EvidenceLocker": {
  "Incident": {
    "Enabled": true,
    "RetentionExtensionDays": 60,
    "CaptureRequestSnapshot": true
  }
}

IncidentModeManager watches the options and raises events whenever the state flips. Tests cover retention math, timeline/notifier fan-out, and the new debug artefact path.

Recording rules (EB7)

  • Manifest fields (see bundle.manifest.schema.json): incident.activatedAt, incident.activatedBy, incident.reason, and optional incident.deactivatedAt, incident.deactivatedBy.
  • DSSE predicate: include incident block mirroring the manifest plus signer (provider/keyid) and log_policy (submit | skip-offline).
  • CLI/API: activation/deactivation commands must require a reason string and emit a signed record even when the state is unchanged (idempotent write with identical payload hash).