CaseBender policy
- New production installations cannot select a native
minioprovider. - Production bundles and installers do not embed a MinIO service, root credential, volume, or native MinIO SDK.
- CaseBender does not create a new MinIO bucket at runtime.
- Historical database enum values and migration history remain so upgrades do not destroy or reinterpret existing records.
- A legacy MinIO service may be used only as a read source during an approved migration window.
- No retirement date or long-term support promise is made beyond the current implementation. Customer-specific dates belong in an approved change plan.
Migration window
Define a bounded window with:- owner and approver;
- last supported source image/version and vulnerability review;
- write-freeze and rollback decision times;
- source retention deadline;
- tested PostgreSQL plus exact-object-version recovery set;
- destination live qualification;
- RPO/RTO targets and measured rehearsal evidence; and
- legal-hold/retention approval before any source disposal.
Preserve before changing anything
Keep both:- a storage-level snapshot/archive of the original
miniodatalayout for disaster recovery; and - an object-level export through the S3 API preserving keys, metadata where supported, object versions, sizes, and independently calculated SHA-256.
.env,
encryption keys, AUDIT_INTEGRITY_SECRET, release image digests, TLS trust, and
source credentials in the approved secret/recovery systems.
Copy-first migration
Use Storage Migration:- inventory PostgreSQL object references and exact source versions;
- copy without deleting or overwriting the source;
- verify destination size and downloaded SHA-256;
- record each item in
StorageMigrationLedger; - quiesce writes and copy the final delta;
- switch reads only after verification;
- keep legacy/dual reads available only for the documented compatibility window; and
- retain the source read-only until rollback approval expires.
sync, delete the source, rotate away required credentials, or
change object keys during initial copy.
Rollback
Rollback requires the original source and matching database recovery point. Quiesce writes, copy destination-only changes back non-destructively, verify SHA-256, then restore the prior profile configuration. If reverse copy cannot be proven, restore the complete PostgreSQL-plus-object consistency set. Never point an older application at a database schema it does not support.Validation and closeout
Run destination live qualification, application upload/scan/promote/download/ delete tests,scripts/storage/verify-backup-restore.ts, and a rollback
rehearsal. Retain sanitized evidence, ledger status, counts, hashes, RPO/RTO,
approvals, and source-disposal authorization.