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
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.
Any change to reserve provisioning, filesystem verification, store layout, capacity measurement, or OpenBao audit-log growth controls.
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.
Clarify retained audit-store exposure
Context
In
filesystemenforcement, a store that holds content on the underlying filesystem is intentionally reported asprovisioned, 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 upnow 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>/openbaothat 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 initand do not explicitly say thatbootroot infra uprefuses 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.mdanddocs/ko/operations.md. The shared outcome must make clear that, on the livebootroot infra upsurface, the store is refused before the stack starts; a pre-existing underlyingopenbao/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 thataudit_store_enforcement = "directory"is the supported opt-out.Keep using the existing
ReserveReport::NotActivatedoutcome andaudit_reserve_finding_store_not_emptyfinding. 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
bootroot infra upexplicitly says that bring-up is refused and no container starts.create_host_path: falsegoverns creation only: an existing underlying<audit_store_dir>/openbaois still bound on a failed-mount boot and keeps the audit device on the root filesystem until relocation onto the reserve retires the exposure.audit_store_enforcement = "directory"opt-out.bootroot infra upas well as on the fresh-host path; it does not merely rely on a general live-deployment statement elsewhere.Constraints
create_host_path: falsebind, the override reader/upgrader, or any Docker/Compose behavior.mkdocs.ymlnavigation entry or a second audit-store section.Out of scope
Test plan
NotActivatedoutcome and asserts the required retained bind-source boundary in both locales, including the liveinfra uprefusal and relocation as the retirement mechanism.infra upsentence in both existing-records passages and to reject a relocation procedure there../scripts/check-docs.sh.cargo clippy --all-targets -- -D warningsandcargo 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:1927constructs the non-empty-store finding and:2061renders it into the sharedNotActivatedoutcome.src/i18n/en.rs:644andsrc/i18n/ko.rs:644are the English and Korean non-empty-store strings.docs/en/operations.md:1073anddocs/ko/operations.md:1014begin the existing-records passages;:1080and:1020state their current generic outcome wording.docs/en/operations.md:1037anddocs/ko/operations.md:980already document the guard's creation-only boundary and provide wording that the non-empty-store outcome must not contradict.