QA watch 2026-07-13 ~20:44Z — fix VERIFIED in master, not yet live. f0b846a0 lands all three recommendations: Message.Action-first verb resolution, hostname from Actor.Attributes['name'], and…
Both halves now authored: ModelEnvImages → 4090 was artpipe PR #16 (merged); backend tier-3 finals → 4090 is backend PR #266 (open). With both on the same exclusive runner, tier-2 and tier-3…
SECURITY — deploy needed, 2026-07-13 ~20:42Z QA watch. The nginx deny fix (angular 10f80c18, merged 20:29Z in PR #177) is NOT live yet: learn.spikersoft.com still runs the pre-fix config. Live…
artpipe PR #18: workflow-level concurrency group with cancel-in-progress (ticket fix option 1) — newest commit owns :latest + provenance; superseded runs cancel instead of clobbering. Option 2…
Backend PR #265: Action-first verb mapping, node-only name-attr hostname fallback (container names can't masquerade as hostnames), and heartbeat debounce — node updates without a state transition…
Hardening MERGED (infra #59 — --preserve-digests + optional authed Hub pulls). Mirror is still EMPTY: re-dispatch MirrorUpstreamImages once the artpipe pushes finish (optionally set DOCKERHUB_USER…
Code MERGED (backend #263 — S3MediaFallbackMiddleware behind the four disk mounts, Range pass-through). Live but inert until the API stack runs Storage__UseS3=true (infra #56 merged the env;…
Pilot status: MinIO deployed+hardened (infra #54/#55), scanner dual-read code live since the flag flip, recipe proven and generalized into SpikerSoft.Storage (#533) — every later migration…
EPIC SCOREBOARD (2026-07-13, after 19 loop iterations): every child ticket is code-complete. MERGED: #533 seam (closed), #530 GeoIP, #540 scheduler, #526 quarantine, #524 dlls, #525 assets, #522…
Prune hardening MERGED (infra #58): size-capped hourly prune + emergency full-cache drop + exit-2 ALERT. Remaining: re-run install.sh on each build node (wait for in-flight artpipe pushes on…
Code MERGED (backend #261 — ObjectFileCache + embeddings direct + quiz via ModelPathResolver delegate). Remaining = ops: ai-models bucket + per-service ro keys, mc mirror /mnt/fusionio/spikersoft/…
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…
Code MERGED (backend #262). Remaining = ops via #529 (lesson-videos bucket + videos-svc key + VIDEOS_S3_SECRET_KEY — backend #264/infra #60 — backfill, phase-2 bind drop). S3-temp transcode…
Code MERGED (backend #260). Remaining = ops via #529 (blogs bucket + blogs-svc key + BLOGS_S3_SECRET_KEY secret — backend #264/infra #60 add the guard+env — backfill, phase-2 bind drop). Serving…
Code MERGED (backend #258 — moved-file router + dlls route). Remaining = ops via the #529 runbook (dlls bucket, backfill, phase-2 bind drop).
MERGED (backend #252): SpikerSoft.Storage project + IObjectStore/S3ObjectStore/ObjectKeys + shared registrations. Seam has since grown keyed multi-bucket stores (#526), ObjectFileCache (#527) and…
Code MERGED (backend #257). Remaining = ops via the #529 runbook: quarantine bucket + keys (blogs-svc write, file-movement policy widening), backfill, Storage__UseS3 flip (already true on…
Angular PRs up: #177 (SECURITY, ungated — deny the private trees the root bind exposes; see the new security ticket) and #178 (GATED — proxy blogs/ebooks/lesson-videos to MinIO with Range…