Scope:dlls bucket — /mnt/fusionio/spikersoft/dlls. Writers per the bucket map: file-movement, upload-coordinator (both already have AWSSDK.S3 + Storage:UseS3 wiring, so this is mostly extending existing mirrors to a second bucket + config).
Steps: bucket + scoped key → extend FileMovement/UploadCoordinator mirror config for the dlls tree → mc mirror backfill → dual-run → remove bind lines from both stack files (final placement relaxation happens with the uploads batch since both services also touch /app/uploads).
Parent epic: #413.
**Scope:** `dlls` bucket — `/mnt/fusionio/spikersoft/dlls`. Writers per the bucket map: file-movement, upload-coordinator (both already have AWSSDK.S3 + `Storage:UseS3` wiring, so this is mostly extending existing mirrors to a second bucket + config).
**Steps:** bucket + scoped key → extend `FileMovement`/`UploadCoordinator` mirror config for the dlls tree → `mc mirror` backfill → dual-run → remove bind lines from both stack files (final placement relaxation happens with the uploads batch since both services also touch `/app/uploads`).
Backend PR #258 (stacked on #257): S3MovedFileMirror now routes moved files by destination tree — /app/dlls → dlls bucket via a keyed store; ebooks route unchanged. Finding: UploadCoordinator never writes /app/dlls (it only classifies fileType; file-movement does the move), so no code change there — its bind is vestigial and drops with #529. blogs/assets writer-halves are now one-line routes.
Backend PR #258 (stacked on #257): S3MovedFileMirror now routes moved files by destination tree — /app/dlls → dlls bucket via a keyed store; ebooks route unchanged. Finding: UploadCoordinator never writes /app/dlls (it only classifies fileType; file-movement does the move), so no code change there — its bind is vestigial and drops with #529. blogs/assets writer-halves are now one-line routes.
Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residual is the shared #529 phase-2 bind drop.
Verified against current masters:
Code merged: backend #258 — MovedFileMirror routes /app/dlls moves to the dlls bucket (verified in SpikerSoft.EventHandlers.FileMovement/Services/MovedFileMirror.cs on master)
dlls bucket created in the 2026-07-14 phase 0; empty because the disk tree is empty too — nothing to backfill
The upload-coordinator finding stands: it never writes /app/dlls in code; its bind is vestigial and drops with the batch
Residual tracked in: #529 (phase-2 bind removal from both stacks + placement relax). Note the file-movement key-policy gap (#613) must be fixed before phase 2 regardless.
**Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residual is the shared #529 phase-2 bind drop.**
Verified against current masters:
- Code merged: backend #258 — `MovedFileMirror` routes `/app/dlls` moves to the `dlls` bucket (verified in `SpikerSoft.EventHandlers.FileMovement/Services/MovedFileMirror.cs` on master)
- file-movement stack dual-runs (`Storage__UseS3=true`)
- `dlls` bucket created in the 2026-07-14 phase 0; **empty because the disk tree is empty too** — nothing to backfill
- The upload-coordinator finding stands: it never writes `/app/dlls` in code; its bind is vestigial and drops with the batch
Residual tracked in: #529 (phase-2 bind removal from both stacks + placement relax). Note the file-movement key-policy gap (#613) must be fixed before phase 2 regardless.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent epic: #413.
Scope:
dllsbucket —/mnt/fusionio/spikersoft/dlls. Writers per the bucket map: file-movement, upload-coordinator (both already have AWSSDK.S3 +Storage:UseS3wiring, so this is mostly extending existing mirrors to a second bucket + config).Steps: bucket + scoped key → extend
FileMovement/UploadCoordinatormirror config for the dlls tree →mc mirrorbackfill → dual-run → remove bind lines from both stack files (final placement relaxation happens with the uploads batch since both services also touch/app/uploads).Backend PR #258 (stacked on #257): S3MovedFileMirror now routes moved files by destination tree — /app/dlls → dlls bucket via a keyed store; ebooks route unchanged. Finding: UploadCoordinator never writes /app/dlls (it only classifies fileType; file-movement does the move), so no code change there — its bind is vestigial and drops with #529. blogs/assets writer-halves are now one-line routes.
Code MERGED (backend #258 — moved-file router + dlls route). Remaining = ops via the #529 runbook (dlls bucket, backfill, phase-2 bind drop).
Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residual is the shared #529 phase-2 bind drop.
Verified against current masters:
MovedFileMirrorroutes/app/dllsmoves to thedllsbucket (verified inSpikerSoft.EventHandlers.FileMovement/Services/MovedFileMirror.cson master)Storage__UseS3=true)dllsbucket created in the 2026-07-14 phase 0; empty because the disk tree is empty too — nothing to backfill/app/dllsin code; its bind is vestigial and drops with the batchResidual tracked in: #529 (phase-2 bind removal from both stacks + placement relax). Note the file-movement key-policy gap (#613) must be fixed before phase 2 regardless.