Verified finding (inverse-sweep after the metrics deploy gap, infra PR #11)
SpikerSoft.EventHandlers.LessonVideoProcessor ships a production image that nothing rebuilds:
Infra stack spikersoft-lesson-video-processor/docker-stack.yml deploys git.spikersoft.com/spikerj/spikersoft-lesson-video-processor:latest.
No .gitea/workflows/*.yml in spikersoft-backend builds or pushes that image — an exact-string search of every workflow's content for spikersoft-lesson-video-processor returned zero hits (contrast: 26 other service Dockerfiles are each wired to a build workflow).
The project is a real deployable worker (SpikerSoft.EventHandlers.LessonVideoProcessor/Program.cs + Dockerfile).
Consequence
Any code change to the lesson-video processor never reaches production — the running :latest is whatever was last pushed manually, and silently goes stale. This is the mirror image of the Art Studio Metrics gap (which had a workflow but no stack — fixed in infra PR #11); here there's a stack + service but no workflow.
Fix (needs a human — I'm blocked from authoring it)
Add a build → push → deploy workflow modeled on a sibling event-handler (e.g. spikersoft-keycloak-events.yml or the new spikersoft-artstudio-metrics.yml):
push, multi-arch manifest if needed, then cd /mnt/infrastructure/spikersoft-lesson-video-processor && docker stack deploy -c docker-stack.yml spikersoft-lesson-video-processor.
Note: Claude Code's auto-mode blocks committing CI-workflow files (.gitea/workflows/), so I filed this rather than opening the PR — a maintainer needs to add the workflow.
Secondary observations from the same sweep (lower confidence — verify, not confirmed defects)
SpikerSoft.EventHandlers.Decompile — has Program.cs + Dockerfile but no workflow and no infra stack. The Decompile feature is live in the API (SpikerSoft.Api/Domain/Decompile/DecompileController.cs), so this worker is either (a) intentionally inline-handled by the API and the worker is WIP/unused, or (b) a partially-wired worker that was never built/deployed. Worth confirming which.
SpikerSoft.AI.MCPServer — has a Dockerfile but no workflow/stack. Likely intentional (MCP servers are run locally by a client, not swarm-deployed) — noting for completeness, not flagging as a gap.
Severity: Medium (silent production staleness on a live service). Related: infra PR #11, #403.
## Verified finding (inverse-sweep after the metrics deploy gap, infra PR #11)
`SpikerSoft.EventHandlers.LessonVideoProcessor` ships a production image that **nothing rebuilds**:
- Infra stack `spikersoft-lesson-video-processor/docker-stack.yml` deploys `git.spikersoft.com/spikerj/spikersoft-lesson-video-processor:latest`.
- **No `.gitea/workflows/*.yml` in spikersoft-backend builds or pushes that image** — an exact-string search of every workflow's content for `spikersoft-lesson-video-processor` returned **zero** hits (contrast: 26 other service Dockerfiles are each wired to a build workflow).
- The project is a real deployable worker (`SpikerSoft.EventHandlers.LessonVideoProcessor/Program.cs` + `Dockerfile`).
### Consequence
Any code change to the lesson-video processor **never reaches production** — the running `:latest` is whatever was last pushed manually, and silently goes stale. This is the mirror image of the Art Studio Metrics gap (which had a workflow but no stack — fixed in infra PR #11); here there's a stack + service but no workflow.
### Fix (needs a human — I'm blocked from authoring it)
Add a build → push → deploy workflow modeled on a sibling event-handler (e.g. `spikersoft-keycloak-events.yml` or the new `spikersoft-artstudio-metrics.yml`):
- `docker build -f ./SpikerSoft.EventHandlers.LessonVideoProcessor/Dockerfile -t git.spikersoft.com/spikerj/spikersoft-lesson-video-processor:latest .`
- push, multi-arch manifest if needed, then `cd /mnt/infrastructure/spikersoft-lesson-video-processor && docker stack deploy -c docker-stack.yml spikersoft-lesson-video-processor`.
**Note:** Claude Code's auto-mode blocks committing CI-workflow files (`.gitea/workflows/`), so I filed this rather than opening the PR — a maintainer needs to add the workflow.
---
### Secondary observations from the same sweep (lower confidence — verify, not confirmed defects)
- **`SpikerSoft.EventHandlers.Decompile`** — has `Program.cs` + `Dockerfile` but **no workflow and no infra stack**. The Decompile *feature* is live in the API (`SpikerSoft.Api/Domain/Decompile/DecompileController.cs`), so this worker is either (a) intentionally inline-handled by the API and the worker is WIP/unused, or (b) a partially-wired worker that was never built/deployed. Worth confirming which.
- **`SpikerSoft.AI.MCPServer`** — has a `Dockerfile` but no workflow/stack. **Likely intentional** (MCP servers are run locally by a client, not swarm-deployed) — noting for completeness, not flagging as a gap.
**Severity:** Medium (silent production staleness on a live service). **Related:** infra PR #11, #403.
Resolved in spikersoft-backend PR #208 (merged to master): added .gitea/workflows/spikersoft-lesson-video-processor.yml — the standard multi-arch build → manifest → SSH stack-deploy → Discord pipeline, modeled 1:1 on spikersoft-keycloak-events.yml, path filters matching the project's ProjectReference graph. The image is no longer orphaned. One follow-up op: trigger Actions → Lesson Video Processor → Run workflow once to rebuild the currently-stale prod :latest (the merge itself touched no filtered path). Closing.
Resolved in spikersoft-backend PR #208 (merged to master): added .gitea/workflows/spikersoft-lesson-video-processor.yml — the standard multi-arch build → manifest → SSH stack-deploy → Discord pipeline, modeled 1:1 on spikersoft-keycloak-events.yml, path filters matching the project's ProjectReference graph. The image is no longer orphaned. One follow-up op: trigger Actions → Lesson Video Processor → Run workflow once to rebuild the currently-stale prod :latest (the merge itself touched no filtered path). Closing.
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.
Verified finding (inverse-sweep after the metrics deploy gap, infra PR #11)
SpikerSoft.EventHandlers.LessonVideoProcessorships a production image that nothing rebuilds:spikersoft-lesson-video-processor/docker-stack.ymldeploysgit.spikersoft.com/spikerj/spikersoft-lesson-video-processor:latest..gitea/workflows/*.ymlin spikersoft-backend builds or pushes that image — an exact-string search of every workflow's content forspikersoft-lesson-video-processorreturned zero hits (contrast: 26 other service Dockerfiles are each wired to a build workflow).SpikerSoft.EventHandlers.LessonVideoProcessor/Program.cs+Dockerfile).Consequence
Any code change to the lesson-video processor never reaches production — the running
:latestis whatever was last pushed manually, and silently goes stale. This is the mirror image of the Art Studio Metrics gap (which had a workflow but no stack — fixed in infra PR #11); here there's a stack + service but no workflow.Fix (needs a human — I'm blocked from authoring it)
Add a build → push → deploy workflow modeled on a sibling event-handler (e.g.
spikersoft-keycloak-events.ymlor the newspikersoft-artstudio-metrics.yml):docker build -f ./SpikerSoft.EventHandlers.LessonVideoProcessor/Dockerfile -t git.spikersoft.com/spikerj/spikersoft-lesson-video-processor:latest .cd /mnt/infrastructure/spikersoft-lesson-video-processor && docker stack deploy -c docker-stack.yml spikersoft-lesson-video-processor.Note: Claude Code's auto-mode blocks committing CI-workflow files (
.gitea/workflows/), so I filed this rather than opening the PR — a maintainer needs to add the workflow.Secondary observations from the same sweep (lower confidence — verify, not confirmed defects)
SpikerSoft.EventHandlers.Decompile— hasProgram.cs+Dockerfilebut no workflow and no infra stack. The Decompile feature is live in the API (SpikerSoft.Api/Domain/Decompile/DecompileController.cs), so this worker is either (a) intentionally inline-handled by the API and the worker is WIP/unused, or (b) a partially-wired worker that was never built/deployed. Worth confirming which.SpikerSoft.AI.MCPServer— has aDockerfilebut no workflow/stack. Likely intentional (MCP servers are run locally by a client, not swarm-deployed) — noting for completeness, not flagging as a gap.Severity: Medium (silent production staleness on a live service). Related: infra PR #11, #403.
Resolved in spikersoft-backend PR #208 (merged to master): added .gitea/workflows/spikersoft-lesson-video-processor.yml — the standard multi-arch build → manifest → SSH stack-deploy → Discord pipeline, modeled 1:1 on spikersoft-keycloak-events.yml, path filters matching the project's ProjectReference graph. The image is no longer orphaned. One follow-up op: trigger Actions → Lesson Video Processor → Run workflow once to rebuild the currently-stale prod :latest (the merge itself touched no filtered path). Closing.