Skip to content

Clarify retained audit-store exposure #952

Description

@sehkone

Clarify retained audit-store exposure

Context

In filesystem enforcement, a store that holds content on the underlying filesystem is intentionally reported as provisioned, not activated; bootroot renders the three reserve artifacts but renders no phase-2 command and does not move, delete, mount over, or otherwise alter the records. bootroot infra up now raises that shared outcome before starting Compose.

The generated OpenBao audit bind uses create_host_path: false, which prevents Docker from creating an absent source. It does not protect an underlying <audit_store_dir>/openbao that already exists: on a failed mount boot Docker binds that directory and the audit device still writes to the root filesystem until the records are relocated to the reserve.

The current non-empty-store finding names the refusal and the two ways forward, but does not state this retained boot-path boundary. The existing-records passages in both manuals also introduce the state through bootroot init and do not explicitly say that bootroot infra up refuses it too. This issue corrects those operator-facing omissions without changing enforcement behavior or adding a relocation procedure.

Scope

Update the existing non-empty-store outcome finding in both message catalogues and the existing-records passages in docs/en/operations.md and docs/ko/operations.md. The shared outcome must make clear that, on the live bootroot infra up surface, the store is refused before the stack starts; a pre-existing underlying openbao/ remains a bind source because Compose's guard governs creation only; and a failed-mount boot therefore remains exposed until records are relocated onto the reserve. It must continue to state that bootroot does not move, delete, or mount over the records and that audit_store_enforcement = "directory" is the supported opt-out.

Keep using the existing ReserveReport::NotActivated outcome and audit_reserve_finding_store_not_empty finding. Add focused coverage for the rendered outcome in English and Korean, and for the two manual passages, so later wording changes cannot silently remove the boundary.

Acceptance criteria

  • For an underlying non-empty filesystem-mode store, the outcome emitted through bootroot infra up explicitly says that bring-up is refused and no container starts.
  • That outcome explicitly says create_host_path: false governs creation only: an existing underlying <audit_store_dir>/openbao is still bound on a failed-mount boot and keeps the audit device on the root filesystem until relocation onto the reserve retires the exposure.
  • The English and Korean outcome strings retain the existing no-move/no-delete/no-mount-over guarantee, the separate-relocation statement, and the audit_store_enforcement = "directory" opt-out.
  • The existing-records passage in both operations manuals explicitly says the same non-empty store is refused by bootroot infra up as well as on the fresh-host path; it does not merely rely on a general live-deployment statement elsewhere.
  • Both manual passages retain the no-relocation-procedure boundary and point to relocation only as separate work.
  • The existing shared outcome vocabulary, reserve checks, Compose override, bind behavior, and mode-selection behavior are unchanged.

Constraints

  • Do not add a new outcome, error class, configuration key, or enforcement mode.
  • Do not change the create_host_path: false bind, the override reader/upgrader, or any Docker/Compose behavior.
  • Do not render or document commands for moving, copying, renaming, deleting, mounting, unmounting, or replacing audit-store records or images.
  • Do not alter the daemon's registrar-verb refusal path.
  • Keep English and Korean operator-facing text semantically aligned.
  • Extend the existing audit-store sections; do not add a mkdocs.yml navigation entry or a second audit-store section.

Out of scope

Test plan

  • Add a unit test that renders a non-empty-store NotActivated outcome and asserts the required retained bind-source boundary in both locales, including the live infra up refusal and relocation as the retirement mechanism.
  • Add or extend documentation assertions/review coverage to require the explicit infra up sentence in both existing-records passages and to reject a relocation procedure there.
  • Run ./scripts/check-docs.sh.
  • Run cargo clippy --all-targets -- -D warnings and cargo fmt -- --config group_imports=StdExternalCrate --check.

Dependencies

Part of #924. This follow-up has no follow-up issue dependency and is filed under umbrella #773.

Pointers

  • src/commands/audit_store/reserve.rs:1927 constructs the non-empty-store finding and :2061 renders it into the shared NotActivated outcome.
  • src/i18n/en.rs:644 and src/i18n/ko.rs:644 are the English and Korean non-empty-store strings.
  • docs/en/operations.md:1073 and docs/ko/operations.md:1014 begin the existing-records passages; :1080 and :1020 state their current generic outcome wording.
  • docs/en/operations.md:1037 and docs/ko/operations.md:980 already document the guard's creation-only boundary and provide wording that the non-empty-store outcome must not contradict.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions