Current state:SpikerSoft.Api/Domain/ThreeDModel/ThreeDModelController.cs:23 uses Storage:AssetsPath (default /app/assets); writers: file-movement, upload-coordinator; the reference Trellis3D stack writes assets/3d-models. Related: #412 (Trellis 3D is currently non-functional — coordinate so we don't migrate a dead path without gating it).
Backend PR #259 (stacked on #258→#257): file-movement routes /app/assets moves to the assets bucket; ThreeDModelController dual-writes source images and falls back to the bucket for GLB downloads when the disk path is absent (404 semantics preserved). Per the #412 warning: inert while Trellis is broken — no new user-facing surface. Remaining piece when #412 lands: the Trellis worker's GLB outputs should mirror worker-side too.
Backend PR #259 (stacked on #258→#257): file-movement routes /app/assets moves to the assets bucket; ThreeDModelController dual-writes source images and falls back to the bucket for GLB downloads when the disk path is absent (404 semantics preserved). Per the #412 warning: inert while Trellis is broken — no new user-facing surface. Remaining piece when #412 lands: the Trellis worker's GLB outputs should mirror worker-side too.
Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residuals split cleanly between #529 and #412.
Verified against current masters:
Code merged: backend #259 — file-movement routes /app/assets to the assets bucket; ThreeDModelAssetStore (via IObjectStore) dual-writes source images and falls back to the bucket for GLB downloads, 404 semantics preserved (SpikerSoft.API.Tests/Domain/ThreeDModel/ThreeDModelAssetStoreTests.cs on master)
assets bucket created in the 2026-07-14 phase 0; empty-as-disk, nothing to backfill
Per the #412 coordination note, this surface is inert while Trellis is broken — no user-facing exposure
when Trellis is repaired, its worker must mirror GLB outputs worker-side → belongs to #412's repair scope (noted there by this ticket's first comment; not an object-storage migration item)
**Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residuals split cleanly between #529 and #412.**
Verified against current masters:
- Code merged: backend #259 — file-movement routes `/app/assets` to the `assets` bucket; `ThreeDModelAssetStore` (via `IObjectStore`) dual-writes source images and falls back to the bucket for GLB downloads, 404 semantics preserved (`SpikerSoft.API.Tests/Domain/ThreeDModel/ThreeDModelAssetStoreTests.cs` on master)
- `assets` bucket created in the 2026-07-14 phase 0; empty-as-disk, nothing to backfill
- Per the #412 coordination note, this surface is inert while Trellis is broken — no user-facing exposure
Residuals:
1. phase-2 bind drop → **#529**
2. when Trellis is repaired, its worker must mirror GLB outputs worker-side → belongs to **#412**'s repair scope (noted there by this ticket's first comment; not an object-storage migration item)
Residual tracked in: #529 + #412.
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:
assetsbucket —/mnt/fusionio/spikersoft/assets(/app/assetsin-container).Current state:
SpikerSoft.Api/Domain/ThreeDModel/ThreeDModelController.cs:23usesStorage:AssetsPath(default/app/assets); writers: file-movement, upload-coordinator; the reference Trellis3D stack writesassets/3d-models. Related: #412 (Trellis 3D is currently non-functional — coordinate so we don't migrate a dead path without gating it).Steps: bucket + scoped key → backend PR: ThreeDModelController reads via S3 (stream or presigned), writers mirror → backfill → dual-run → cut over.
Backend PR #259 (stacked on #258→#257): file-movement routes /app/assets moves to the assets bucket; ThreeDModelController dual-writes source images and falls back to the bucket for GLB downloads when the disk path is absent (404 semantics preserved). Per the #412 warning: inert while Trellis is broken — no new user-facing surface. Remaining piece when #412 lands: the Trellis worker's GLB outputs should mirror worker-side too.
Code MERGED (backend #259 — assets route + controller mirror + GLB bucket fallback). Remaining = ops via #529 (assets bucket/backfill) + the #412 note: when Trellis is repaired its worker must mirror GLB outputs.
Epic #413 accuracy pass (2026-07-18) — closing: migration scope complete; residuals split cleanly between #529 and #412.
Verified against current masters:
/app/assetsto theassetsbucket;ThreeDModelAssetStore(viaIObjectStore) dual-writes source images and falls back to the bucket for GLB downloads, 404 semantics preserved (SpikerSoft.API.Tests/Domain/ThreeDModel/ThreeDModelAssetStoreTests.cson master)assetsbucket created in the 2026-07-14 phase 0; empty-as-disk, nothing to backfillResiduals:
Residual tracked in: #529 + #412.