Bug (found during #378 W5 analysis, confirmed in code; fix built+tested locally, pending push)
ArtPipeArtifactSafetyGate runs SafetyCheck through the injected IArtPipeStageExecutor (ArtifactSafetyGate.cs:56,86). In resident mode (#368 R2), Program.cs:67 makes that the ResidentArtPipeStageExecutor, whose ExecuteAsync (lines 95–99) throws when job.ModelDir != ResidentModel. So a resident image-gen deployment → gate throws on every output → fail-closed (#349) → every image quarantined. Latent today (prod = subprocess mode); hard blocker at the #368 SERVER resident cutover.
Fix (done locally on fix/safety-gate-resident-executor, 666/666 green — awaiting push once git-server disk recovers)
Keyed DI: the gate resolves a dedicated always-subprocessSafetyCheck executor ([FromKeyedServices]), decoupled from the stage IArtPipeStageExecutor. Subprocess mode byte-identical (same singleton; all existing gate tests unchanged); resident mode → dedicated subprocess (no throw); fake mode unchanged. +5 tests incl. failing-before/passing-after resident regression.
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.
Bug (found during #378 W5 analysis, confirmed in code; fix built+tested locally, pending push)
ArtPipeArtifactSafetyGaterunsSafetyCheckthrough the injectedIArtPipeStageExecutor(ArtifactSafetyGate.cs:56,86). In resident mode (#368 R2),Program.cs:67makes that theResidentArtPipeStageExecutor, whoseExecuteAsync(lines 95–99) throws whenjob.ModelDir != ResidentModel. So a resident image-gen deployment → gate throws on every output → fail-closed (#349) → every image quarantined. Latent today (prod = subprocess mode); hard blocker at the #368 SERVER resident cutover.Fix (done locally on
fix/safety-gate-resident-executor, 666/666 green — awaiting push once git-server disk recovers)Keyed DI: the gate resolves a dedicated always-subprocess
SafetyCheckexecutor ([FromKeyedServices]), decoupled from the stageIArtPipeStageExecutor. Subprocess mode byte-identical (same singleton; all existing gate tests unchanged); resident mode → dedicated subprocess (no throw); fake mode unchanged. +5 tests incl. failing-before/passing-after resident regression.Acceptance
ModelDirthrow · [x] Subprocess byte-identical · [x] Fail-closed preservedSeverity: High (child-safety; blocks #368 cutover). Related: #368, #349, #362, #378 W5.
Resolved in spikersoft-backend PR #99 (merged to
master). Keyed DI gives the safety gate a dedicated always-subprocessSafetyCheckexecutor — resident mode no longer hits theModelDirguard, subprocess mode byte-identical (all existing gate tests unchanged), fail-closed preserved. 5 new tests incl. the failing-before/passing-after resident regression. Closing.