Nothing has been in GridFS since the MinIO cutover, and the names were not harmless: the validator followed the NAME instead of the thing and broke every image-upload submission in production. This removes what made that plausible.
Scope is ArtStudio only — Vault, Applications and Activity genuinely still use GridFS and are untouched, which is why it was done compiler-driven rather than with a repo-wide replace.
Nothing moves on disk or on the wire: BSON element names are unchanged, and [JsonPropertyName] pins the API response fields and the two RabbitMQ contracts (a rolling deploy leaves messages published by the previous build). ArtStudioStorageKeyNamingTests asserts the stored names, the serialized names, and that a message from the PREVIOUS build still deserializes — it fails if someone later drops the pinning attributes.
FOLLOW-UP: aligning the BSON element names, JSON wire names, {gridFsId} route params and the Angular models for real is a separate coordinated change.
`GridFsId` → `ObjectKey`, `SourceImageGridFsId` → `SourceImageKey`, `SourceArtifactGridFsId` → `SourceArtifactKey`, `StagedGridFsId` → `StagedObjectKey`.
Nothing has been in GridFS since the MinIO cutover, and the names were not harmless: the validator followed the NAME instead of the thing and broke every image-upload submission in production. This removes what made that plausible.
Scope is ArtStudio only — Vault, Applications and Activity genuinely still use GridFS and are untouched, which is why it was done compiler-driven rather than with a repo-wide replace.
Nothing moves on disk or on the wire: BSON element names are unchanged, and `[JsonPropertyName]` pins the API response fields and the two RabbitMQ contracts (a rolling deploy leaves messages published by the previous build). `ArtStudioStorageKeyNamingTests` asserts the stored names, the serialized names, and that a message from the PREVIOUS build still deserializes — it fails if someone later drops the pinning attributes.
FOLLOW-UP: aligning the BSON element names, JSON wire names, `{gridFsId}` route params and the Angular models for real is a separate coordinated change.
Resolved in spikersoft-backend PR (e63ac276), then largely superseded by #853. Verified against origin/master — all four renames present:
ObjectKey (ArtAsset.cs:450)
SourceImageKey (:60)
SourceArtifactKey (:540, and ArtVariantUploadJob.cs:34)
StagedObjectKey (ArtVariantUploadJob.cs:38)
Scope was correctly held to Art Studio — Vault (VaultItem.cs:52), Activity (ComparisonDtos.cs:7) and Profile were left untouched, as intended.
Incident linkage, for the record: this ticket's [JsonPropertyName("gridFsId")] on the Artifacts JSON column is precisely what orphaned the stored PascalCase "GridFsId" and caused #852. The [BsonElement] attribute is inert on an EF JSON-string column, so the rename looked safe and round-trip tests passed. The pinning that would have caught it is absent today because #853 deliberately removed it, not because this ticket failed — ArtStudioStorageKeyNamingTests was inverted rather than deleted, exactly as #853 specified.
Closing. The naming this ticket started is now finished by #853 (also closed).
Resolved in spikersoft-backend PR (`e63ac276`), then largely superseded by #853. Verified against `origin/master` — all four renames present:
- `ObjectKey` (`ArtAsset.cs:450`)
- `SourceImageKey` (`:60`)
- `SourceArtifactKey` (`:540`, and `ArtVariantUploadJob.cs:34`)
- `StagedObjectKey` (`ArtVariantUploadJob.cs:38`)
Scope was correctly held to Art Studio — Vault (`VaultItem.cs:52`), Activity (`ComparisonDtos.cs:7`) and Profile were left untouched, as intended.
**Incident linkage, for the record:** this ticket's `[JsonPropertyName("gridFsId")]` on the `Artifacts` JSON column is precisely what orphaned the stored PascalCase `"GridFsId"` and caused #852. The `[BsonElement]` attribute is inert on an EF JSON-string column, so the rename looked safe and round-trip tests passed. The pinning that would have caught it is absent today because **#853 deliberately removed it**, not because this ticket failed — `ArtStudioStorageKeyNamingTests` was *inverted* rather than deleted, exactly as #853 specified.
Closing. The naming this ticket started is now finished by #853 (also closed).
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.
GridFsId→ObjectKey,SourceImageGridFsId→SourceImageKey,SourceArtifactGridFsId→SourceArtifactKey,StagedGridFsId→StagedObjectKey.Nothing has been in GridFS since the MinIO cutover, and the names were not harmless: the validator followed the NAME instead of the thing and broke every image-upload submission in production. This removes what made that plausible.
Scope is ArtStudio only — Vault, Applications and Activity genuinely still use GridFS and are untouched, which is why it was done compiler-driven rather than with a repo-wide replace.
Nothing moves on disk or on the wire: BSON element names are unchanged, and
[JsonPropertyName]pins the API response fields and the two RabbitMQ contracts (a rolling deploy leaves messages published by the previous build).ArtStudioStorageKeyNamingTestsasserts the stored names, the serialized names, and that a message from the PREVIOUS build still deserializes — it fails if someone later drops the pinning attributes.FOLLOW-UP: aligning the BSON element names, JSON wire names,
{gridFsId}route params and the Angular models for real is a separate coordinated change.Resolved in spikersoft-backend PR (
e63ac276), then largely superseded by #853. Verified againstorigin/master— all four renames present:ObjectKey(ArtAsset.cs:450)SourceImageKey(:60)SourceArtifactKey(:540, andArtVariantUploadJob.cs:34)StagedObjectKey(ArtVariantUploadJob.cs:38)Scope was correctly held to Art Studio — Vault (
VaultItem.cs:52), Activity (ComparisonDtos.cs:7) and Profile were left untouched, as intended.Incident linkage, for the record: this ticket's
[JsonPropertyName("gridFsId")]on theArtifactsJSON column is precisely what orphaned the stored PascalCase"GridFsId"and caused #852. The[BsonElement]attribute is inert on an EF JSON-string column, so the rename looked safe and round-trip tests passed. The pinning that would have caught it is absent today because #853 deliberately removed it, not because this ticket failed —ArtStudioStorageKeyNamingTestswas inverted rather than deleted, exactly as #853 specified.Closing. The naming this ticket started is now finished by #853 (also closed).