Studio60 Continuous Improvement Agent — Last updated: 2026-03-26 (iter #375)
Iterations
375
#375: DEDUP IMPLEMENTED, pipeline restored, sentinel processing tasks again
Active Simulations
9
9 active | 16 archived | 12 implemented
Implementation Rate
63%
12/19 implemented | Sentinel autonomous since iter #237
Health Checks
8/9
Venom UNHEALTHY (FS=8381, fix sent T-008) | Disk 16% | RAM 25% | SSL 75d
F-407–F-413: Deep Improvement Cycle (iter #372)
Finding
Status
Impact
F-407: Runner API spam — 3,357 duplicate tasks
FIXED
99.9% spam cancelled, queues clean
F-408: QA agent zero memory
FIXED
5 memory files bootstrapped
F-409: Kaizen budget exceeded
FIXED
$0.75 → $1.00
F-410: Obsolete memory files
FIXED
relay_vs_redis removed, refs updated
F-411: Venom UNHEALTHY (FS=8,381)
PENDING
Fix committed, task T-008 → sentinel
F-412: Sim-038 Runner dedup
PENDING
Content-hash proposal sent to PM (T-007)
Root cause (spam): WP agent sent 3,076 identical "ownership incident" messages in 17 min. No dedup in Runner API. Memory audit: 18/32 cerebro projects have memory. Sentinel: kaizen (26), sentinel (24), qa (6 ← new). Key gaps: s60-test, memory-agent, 5 CMS sub-sites.
F-338 RESOLVED: Auth Missing DB Migration ✓ (iter #343) + Auth HC DEPLOYED ✓ (iter #363)
Finding: Auth System entity had 7 columns missing from prod DB. Commit c2a350f deployed with migration + error logging. Result: 0 errors post-redeploy. Auth clean. Sim-035 ACCEPTED: QA gate depth enhancement — Phase 4 post-deploy error log check (30s window) + e2e auth tests. TODO→sentinel. Sim-036 RESOLVED ✓ (iter #363): Auth HC (commit 7cf35cb) deployed by sentinel. Both containers healthy, FS=0. qa-gate.sh deployed to prod-alfa (4997 bytes). Auth is now FULLY HEALTHY — backend + frontend both with Docker HEALTHCHECK, /api/health 200 OK.
F-334: Deploy Trigger Gap — RESOLVED ✓ (iter #338)
Finding: Only Pulse sends explicit deploy requests to sentinel via relay. All other agents rely on sentinel's passive git scan. Impact: Pulse deploys in 16 min. Mail took ~10 hours. BadWolf needed 12 kaizen reminders over multiple iterations.
Agent
Explicit trigger?
Latency
Pulse
✓ YES
16 min
Auth
✗ NO
unknown
BadWolf
✗ NO
12+ reminders needed
Venom
✗ NO
unknown
Billit
✗ NO
unknown
Mail
✗ NO
~10 hours
Proposal: Add standard deploy trigger to all agent CLAUDE.md: "After commit, send relay message to sentinel with commit hash" Status: Sent to PM for process change
NEW: S60 Spec System Adoption Audit (iter #324)
Service
Adoption
Specs
Enforcement
Pulse
FULL
SPEC_GLOBAL + 8 modules + ADR
20 compliance tests + 2 CC hooks
BadWolf
MANDATORY
0 (central ref)
Catalog enforcement
Sentinel
PROVIDER
1 (CON-001)
Hosts tools
Mail
BASIC
0
Catalog ref only
Auth
NONE
0
—
Venom
NONE
0
—
Billit
NONE
0
—
Overall: 29% adoption (2/7 mandatory). Methodology & tooling ready. Only 1 actual spec exists (CON-001). Tooling: validate-specs.sh, generate-specs-html.sh, specs-history.sh — all in sentinel/catalog/specs/ Gap: Auth + Billit (security-critical) have zero spec adoption. Pulse leading with per-module SPEC.md + test enforcement.
Test Coverage Deep Audit (iter #365)
Overall: 33 test files / 487 source files = 6.8% (up from 5.8% baseline)
Service
Tests
Source
Coverage
Risk
Venom
6
27
22.2%
Low
Pulse
11
62
17.7%
Low
Auth
3
51
5.9%
HIGH — guards, api-keys, strategies untested
Billit
9
196
4.6%
HIGH — banking, billing, gopay untested
BadWolf
4
132
3.0%
Medium — orders, products, wc-sync untested
Mail
0
19
0%
CRITICAL — zero test coverage
Priority: 1) auth guards+api-keys (security) 2) billit banking+billing (financial) 3) mail any test (zero→something) 4) badwolf orders+products (business)
New: Hive Agent Discovered (iter #255)
Location: cerebro (100.72.164.58), created 2026-03-16T18:15 Function: Research pipeline — AI/open-source news in CS, 185 articles indexed, 1094 cycles Relay: "hive" queue registered (0 messages) Note: No local project on sentinel server. New ecosystem member.
Deploy & Infra Status (iter #307)
F-309 BadWolf: ⚠ TypeORM pool fix (832894b) STILL undeployed — 2 sentinel requests, no response F-311 Cortex: ⚠ S60-CS pipeline broken — ROOT CAUSE: DB GRANT (bwcs→activity_log) + missing qdrant-api-key + cron chain failure F-312 NEW: Cron log redirect pattern flawed — wrap in subshell to capture errors All other services: UP TO DATE ✓ | Disk 8% | RAM 25% | 0 errors | 20q/0 unread
F-278: Pulse User Growth — 4 Active Users! (iter #215)
Users: Libor Webster, Michaela Tomášů, Helena Pilařová, Filip Vondricka Previous: Only 1 user (Libor). Product is gaining real traction! Impact: Pulse stability and deploy quality now directly affect paying clients. Action: F-279 error_events migration needs immediate redeploy. Sentinel notified.
F-256–F-259: DR Gap — 4 Repos Without Off-site Backup (iter #177)
Repo
Size
Remote
Pushed
Risk
sentinel
11MB
NONE
—
F-203 REGRESSED — remote missing (verified iter #270)
kaizen
5.5MB
NONE
—
F-285: 243 iterations — TODO sent to sentinel (iter #243)
/root/scripts
288K
Git ✓
✓ F-204 RESOLVED
Sentinel committed cron scripts (7d54cde)
qa
180K
NONE
—
86+ tests, NO commits at all
Coverage: 7/12 repos fully backed to GitHub (58%) Impact: If sentinel server dies, these 4 repos are permanently lost. Service repos (auth, billit, pulse...) survive. Action: TODO sent to sentinel (push). Libor notified via fess.
Runner API — DEDUP LIVE ✓ (iter #374)
Sim-038 IMPLEMENTED: SHA-256 content-hash dedup deployed to cerebro server.js. Result: Spam loop STOPPED. 3,357+ duplicate tasks cancelled. Pipeline restored. Mechanism: Hash of (to+from+subject+body) stored in Redis with 300s TTL. 409 Conflict on duplicates. Milestone: Sentinel processed first task since Mar 19 (test task DONE in 13s).
kaizen repo has NO git remote — 128 iterations, state/, reports/, simulations/ at risk of total loss
F-218
/root/scripts/ NOT version controlled — 9 critical ops scripts (relay-to-telegram, deploy.sh, qa-gate.sh, agent-trigger.sh)
F-219
sentinel has uncommitted changes — 8 files, 414 insertions, remote fetch status unknown
Git remote coverage: 7/8 repos have remote (only kaizen missing). /root/scripts/ on 3 servers but no git. F-169 billit-web HC IPv6: VERIFIED ✓ — healthy FS=0 after fix (3 commits by billit agent).
F-224: Agent Autonomy Gap — Only 1/8 Agents Run Autonomously (iter #140)
Agent
run.sh
Cron
Unread
Status
kaizen
✓
*/15
—
AUTONOMOUS
sentinel
✓
*/15
0
AUTONOMOUS ✓
qa
✓
✗
—
HAS RUNNER, NO CRON
venom
✗
✗
5
NO RUNNER
badwolf
✗
✗
3
NO RUNNER
mail
✗
✗
2
NO RUNNER
pulse
✗
✗
2
NO RUNNER
auth
✗
✗
1
NO RUNNER
billit
✗
✗
1
NO RUNNER
Root cause of delegation failures (F-204, F-220), unread relay messages (14 total), and sentinel stagnation. Fix: Add sentinel + qa run.sh to cron. Create run.sh for service agents. Sim-017 blocked on Libor.
3-tier deploy pipeline: smoke → standard → full test coverage per service.
Architecture: sentinel runs tests/run.sh directly (no cerebro roundtrip). qa-gate.sh proposal: wraps sentinel test framework + npm test. Implementation delegated to sentinel.
F-163: BillitSync — Staging URL hardcode removed, service created. Data backfill still needed.
RESOLVED: billit-web HC IPv6 ✓ (F-169)
Fixed: nginx IPv6 enabled, FS=0. Healthcheck passing permanently after restarts.
CORRECTED: F-178 Was FALSE POSITIVE — Tier Data OK ✓
Iter #57 verification:tier column is varchar(20), NOT enum. Data stores hexa (3), full (3), null (2) correctly.
The pg_enum values (full_pack, monthly) are from an old unused type, not a constraint.
Billing is NOT broken. 0 runtime errors confirmed.
Iter #57 verification:billitInvoiceId column exists in credit_transactions table.
Migration 001_add_billit_invoice_id.sql (commit 278861e) was applied. 0 billing webhook errors. NEW F-182: Pulse has no automated migration runner — only manual SQL files in migrations/. Future schema changes need manual SQL.
Iter #57 verification:billit-redis now on BOTH networks (s60-network + billit_billit-internal).
Errors: 802/h → ~3/h (99.6% reduction). 20 errors in 6h vs 4,800+ previously. billit-api on s60-network, can now reach billit-redis via DNS. BullMQ + caching operational. Remaining: Permanent fix needed in docker-compose.yml (current fix = manual network connect, may reset on restart).
Migration 020 created locations table WITHOUT deleted_at column. Entity expects it.
4 errors: column Location.deleted_at does not exist. Soft-delete broken. FIX:ALTER TABLE locations ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP;
MILESTONE: HC 100% — All Services Healthy (FS=0) ✓
Iter #80: Pulse Dockerfile HC port 3200→3100 fixed (F-180 RESOLVED). billit-web IPv6 resolved (F-169). Iter #81: Permanence confirmed — after night restarts (Pulse 03:36, billit 03:25 UTC), ALL containers healthy with FS=0. Score: 9/9 services with healthchecks = 100% healthy. Only n8n + billit-redis without HC (by design). Duration: 16 iterations of escalation to achieve. Sim-026 IMPLEMENTED ✓
PasswordAuthentication no on BOTH servers (prod-alfa + hub-alfa). fail2ban remains ACTIVE — 0 currently banned, 369 total (brute-force now blocked at SSH level).
Combined with UFW + fail2ban = SSH fully hardened.
BadWolf BillitSync: Data Backfill Still Needed (F-163)
BillitSync service created, staging URL hardcode removed. But:
• All online_courses have company_id = NULL → sync skips 100%
• Prices not synced (unitPrice: null) Status: Awaiting data backfill (needs Libor confirmation for company_id mapping).
Relay Queues: ALL 0 UNREAD ✓ (20 queues)
20 queues total (incl. hive). ALL 0 unread — stable since iter #181. Pattern: Sentinel autonomous since iter #237 (Sim-034). All agents consuming messages. Delegation success rate: 67% (8/12 delegated items completed).