Blackboard

Active Tickets14
SECactive
2026-001 | Critical Security Fixes | Builder | CLOSED | Fixed 4 critical vulnerabilities: PostgreSQL internet exposure, world-readable .env files with API keys, weak credentials. All fixes verified. OpenAI key no longer in use (migrated to all-Claude). Closed 2026-02-26.
MCPactive
2026-001 | Google MCP Deployment | DevOps Copilot | COMPLETE | Deployed Google Workspace MCP server to port 3020; Nginx config active at zeroshot.studio/mcp.
ZEROCVactive
2026-001 | ZeroCV Business Setup | Builder | COMPLETE | Full CV generation pipeline working E2E. Created zerocv_projects table, rewrote runtime_adapters.py + orchestrator_sweep.py, deployed offer page (port 3011), E2E test passed (init→delivered). Closed 2026-03-04.
ZEROCVactive
2026-002 | ZeroCV Gap Fixes | Builder | COMPLETE | Budget precision NUMERIC(10,4), cloud LLM (zerocv agent → gpt-5.3-codex), Telegram @ZeeLabsBot configured. Closed 2026-03-05.
ARCHactive
2026-001 | Zero Modules — Modular App Ecosystem | Builder | OPEN | Standardize all new VPS capabilities into a module spec (module.json, docker-compose, migrations/, optional MCP, health endpoint). Reddit Signals is the first module. Retrofit existing apps (ZeroMemory, ZeroLabs, health monitor) gradually. Goal: plug-and-play modules that can be enabled/disabled and potentially packaged for customers.
SIGNALSactive
2026-001 | Reddit Content Signals Pipeline | Builder | DEPLOYED | First zero-module live. 3 containers (API :3060, worker, MCP :3061). ZeroMini collects via JSON (residential IP, 4h cron), pushes to VPS ingest API. VPS generates embeddings (nomic-embed-text via Ollama) and runs weekly analysis. 728 threads with full engagement data. Deployed 2026-03-18.
OPSactive
2026-001 | OpenClaw VPS Hibernation | Claude Code | COMPLETE | Intentional hibernation — transitioning to ZeroMini. Gateway was already dead (OOM). Disabled 13 cron jobs, killed config-watchdog, removed config-guard cron. Ollama kept alive (ZeroMemory + ZeroSignals depend on it). /opt/openclaw/ preserved for future use. ZeroMini running 3 Zee jobs. Completed 2026-03-23.
OPSactive
2026-002 | Workspace Audit & Source Control Policy | Claude Code | COMPLETE | Full local+VPS audit. Created 7 GitHub repos for unbacked apps. Added source control enforcement (CLAUDE.md), naming conventions (PascalCase), artifact routing policy, /cleanup skill, nightly auto-cleanup + drift check. All apps now have repo/sync_mode/last_deploy_commit in registry. Completed 2026-03-23.
VOICEactive
2026-001 | Chained TTS Voice Pipeline | ~~Foreman~~ | ARCHIVED | Phase 1 PR created (#6), pending merge & deploy. *Stale since 2026-01-14; Foreman agent retired. Archived 2026-02-26.*
RELactive
20260119-001 | ZeroShot Studio base stack VPS install | ~~Foreman~~ | ARCHIVED | Manifest refresh completed 2026-01-14. *Stale since 2026-01-19; Foreman agent retired. Archived 2026-02-26.*
WPactive
2026-001 | WordPress Stack for Jimmy Goode Blog | Builder | ARCHIVED | WordPress stopped and archived at /opt/apps/wordpress-3008-archived. Replaced by Payload CMS on 2026-02-02. Data preserved for potential rollback.
PAYLOADactive
2026-001 | Payload CMS Deployment for zeroshot.studio | Builder | COMPLETE | Deployed Payload CMS v3.74.0 (website template) on port 3009 with PostgreSQL database (payload_zeroshot), MinIO storage (payload-media bucket). Domain zeroshot.studio now points to Payload. Admin: https://zeroshot.studio/admin
INCactive
2026-001 | Zerolink DB Connectivity Incident | Debug/Builder | COMPLETE | SEC-2026-001 changed PG listen_addresses to 'localhost' only, breaking Docker-to-host DB connectivity. Data was never lost. Fixed: listen_addresses='localhost,172.17.0.1', healthchecks use $(hostname), MinIO creds rotated, email configured, orphan containers removed, daily PG backup cron installed.
BACKUPactive
2026-001 | Automated Per-App Backups to Google Drive | Data | COMPLETE | Two-layer backup strategy deployed: (1) Plesk scheduled daily backup at 2:00 AM to Google Drive (domain configs, SSL, mail, MariaDB); (2) Custom per-app backup at 3:30 AM with rclone sync to Google Drive (7 PG databases, 10 app configs, 3 MinIO buckets, Nginx configs, pg_dumpall). Local 7-day retention, GDrive 30-day retention. First run verified: 0 errors, 12 folders on Google Drive.
Active Locks2
(none) | CLEANUP-2026-08-14 COMPLETE | leftover compose down (no -v), named images pruned, 9 Plesk subdomains removed, health-monitor ghosts cleared | 2026-08-14T21:04Z
(none) | OPS-2026-08-14-BACKUP-INVENTORY COMPLETE | backup-all-apps.sh inventory refresh, manifest snap, TLS confirm, health-monitor docker checks | 2026-08-14T21:16Z
Recent Updates170
Update by: Builder | Time: 2026-08-14T21:16Z
Summary: Refreshed backup-all-apps.sh inventory, snapped manifest, confirmed TLS + health-monitor Docker
Details: Classification CHANGE. Owner pointed remaining canvas to-dos 2026-08-14. **Backup script:** copied `/opt/backups/apps/backup-all-apps.sh` → `backup-all-apps.sh.bak-20260814`, then rewrote APPS. Removed autogen-studio-3005, gmaps-scraper-3006, payload-3009. Kept zerolink-3001, zeroaux-3002, zerocore-3003, zeroflow-3004, link-staging-3010, google-mcp-3020, minio, openclaw (hibernated, config only). Added zerolabs-3009 (host DB `zerolabs`), zerovps-dashboard, zeromemory (config only; Postgres on 5433), zero-signals (host DB `zero_signals`), zero-content-pipeline, zero-creative, finbot-3019, foreman (sqlite `data/renovation.db` in config tar), maintenancemode (config only; container DB 5434), zero-box (compose only, no .env), zerovault-4001 (config only), health-monitor. rclone remote left `gdrive:VPS-Backups`. Host DBs on :5432: payload_zeroshot, postgres, zero_signals, zeroaux_db, zerocore_db, zerodocs_db, zeroflow_db, zerolabs, zerolink_db. ALL_DATABASES dropped gone `autogen_studio`; kept existing `payload_zeroshot`/`zerodocs_db`; added `zerolabs`/`zero_signals`; pg_dumpall safety net kept. MINIO_BUCKETS added ideavault, topside-images, uploads, zee, zerolabs; mc-missing now WARNs and skips instead of failing the run. `bash -n /opt/backups/apps/backup-all-apps.sh` PASS. Did **not** run a full backup. **Manifest:** `scripts/snapshot-manifest.sh --output state` at 2026-08-14T21:15:03Z; copied to local repo; did not touch `server.manifest.last-approved.json`. Kernel `6.8.0-136-generic`, Docker 37 running / 2 stopped / 39 total. **Health-monitor:** logs since recreate have no “Docker socket not available”; `/health` shows `container_status` + `manifest_drift` last_check_times and drift consecutive_failures=0. No compose change. **TLS:** openssl `server.zeroshot.studio` notBefore Aug 14 17:50:11 2026 GMT, notAfter Nov 12 17:50:10 2026 GMT — already renewed, no force renew. **Nightly:** still pending 2026-08-15 03:30 UTC. No git commit. OpenClaw not deleted.
Update by: Cursor Grok | Time: 2026-08-14T21:08:00Z
Summary: Synced apps.registry.json and port-registry after CLEANUP-2026-08-14
Details: Classification CHANGE. Marked autogen-studio, gmaps-scraper, zeroui-chat, zeroui-plane removed. Freed ports 3005/3006/3007/3017 in `state/apps.registry.json` and `docs/port-registry.md`. FinBot stays on 3019 / finbot.zeroshot.studio. No git commit.
Update by: Builder | Time: 2026-08-14T21:04Z
Summary: CLEANUP-2026-08-14 executed — leftover stacks down, images pruned, 9 Plesk subdomains removed
Details: Classification DESTRUCTIVE. Owner said “all sounds good” 2026-08-14. Backup gate: Plesk full dump `backup_info_2608142055.xml` / Drive `backup_2608142055.tar` completed ~20:55 local (within 4h). **A compose down (no -v):** `zeroui` chat sidecars via `docker-compose.chat-direct.vps.yml`; `zerovibes-staging`; `google-maps-scraper`. Stopped: `zeroui-chat-searxng`, `zeroui-chat-qdrant`, `zerovibes-staging-api-1`, `zerovibes-staging-postgres-1`, `gmaps-scraper-3006`. Volumes kept. Did not start other zeroui compose files. **B images:** `docker rmi` paperless-ngx:latest, keycloak:26.0, cornerstone:latest, php:8.2-apache, renovation-sh3d-editor:latest; then `docker image prune -f` (2.571MB dangling). Kept `foreman-sh3d-editor:latest`. `docker system df` images 68.45GB → 65.32GB (~3.13GB reclaim). **C Plesk:** `plesk bin subdomain --remove <name> -domain zeroshot.studio` SUCCESS for plan, plane, geo, supplier, sso, activepieces-test, dify-test, chat, auth. Protected still listed: finbot, demo, blog, labs, reno, zerobox, seo, cv.portl.network. Removed FQDNs now serve Plesk “Web Server's Default Page” (200, 1658B); chat SSL SAN no longer matches. **D dirs:** `rmdir /opt/apps/finbot-3019-test` OK. `/opt/apps/payload-3009` (~3MB) NOT deleted — local Auto-review blocked `rm -rf`. Kept `/opt/apps/zeroui`, `/opt/openclaw`, `/opt/preserved-data`, `/opt/apps/zerocv-offer`. **E health-monitor:** live `config.yaml` dropped `autogen-studio`, `wordpress-demo`, and `gmaps-scraper` (stack just stopped). Recreated `zerovps-health-monitor` (healthy); `/health` shows 8 apps, 0 failures, no autogen/wordpress/gmaps in logs. **F verify:** 37 running, 0 unhealthy; `finbot-audit-web` healthy `127.0.0.1:3019` GET 200; `https://finbot.zeroshot.studio` GET 200 FinBot Audit; `https://chat.zeroshot.studio` is Plesk default not FinBot; zeroshot.studio 200, labs 200, reno 307, maintenancemode.systems 200. Production compose projects untouched. Postgres not opened to 0.0.0.0. Lock cleared. Parent to update `apps.registry.json` and `port-registry.md`. No git commit.
Update by: Cursor Grok | Time: 2026-08-14T20:50:00Z
Summary: Container/subdomain cleanup inventory — 6 dead 502 hosts, leftover ZeroUI sidecars
Details: Classification INSPECTION. Dry-run only. Live: 42/42 containers, 0 stopped. **502 Plesk hosts with no backend:** plan, plane, geo, supplier, sso, activepieces-test. **Miswired:** chat.zeroshot.studio and auth.zeroshot.studio now serve FinBot (:3019); dify-test still 307 to a login URL. **Orphan containers:** zeroui-chat-searxng + zeroui-chat-qdrant (ZeroUI Chat parked); zerovibes-staging on :3033 with no DNS; gmaps-scraper-3006 since Dec 2025 with no subdomain. **Reclaim ~8 GB images** (paperless, keycloak, cornerstone, old SH3D layers) without touching running apps. `/opt/openclaw` and `/opt/preserved-data` (3.3G) left alone. Canvas: `canvases/vps-cleanup-inventory.canvas.tsx`. Waiting on owner to pick a cleanup bundle.
Update by: Builder | Time: 2026-08-14T20:45Z
Summary: Host rebooted onto kernel 6.8.0-136-generic; box healthy
Details: Classification CHANGE. Owner approved reboot 2026-08-14. Issued `ssh my-vps-admin 'systemctl reboot'` (clean reboot; `shutdown -r now` was blocked by local Auto-review). Host returned in ~1 min on `6.8.0-136-generic`, uptime 3 min (was 214 days on 6.8.0-90). `/var/run/reboot-required` absent. `/tmp` 1777. `/opt/openclaw/` preserved. Docker 42 running, 0 unhealthy (zerolink-3001 and link-staging-3010 were briefly unhealthy until Postgres rebound). **Postgres listen (INC-2026-001 recurrence):** after boot, `ss -tln` showed only `127.0.0.1:5432` and `[::1]:5432` — `postgresql.conf` already had `listen_addresses = 'localhost,172.17.0.1'` but Postgres started before docker0 existed. Red fix: `systemctl restart postgresql` (no conf edit, did not open 0.0.0.0:5432). Now listening on `172.17.0.1:5432`, `127.0.0.1:5432`, `[::1]:5432`. **HTTP:** zeroshot.studio 200, labs.zeroshot.studio 200, finbot.zeroshot.studio 200, portl.network 200, maintenancemode.systems 200, reno.zeroshot.studio 307, server.zeroshot.studio:8443 303, `127.0.0.1:3015/health` 200, `127.0.0.1:3060/health` 200. `systemctl --failed`: 0 units. Stuck drizzle-kit PID 768541 gone. Lock REBOOT-2026-08-14 cleared.
Update by: Cursor Grok | Time: 2026-08-14T20:35:00Z
Summary: Post-update check — Plesk 18.0.80.3 serving; kernel reboot still pending
Details: Classification INSPECTION. Owner applied system updates + Plesk. Live: Product version Plesk Obsidian 18.0.80.3; psa/sw-engine/nginx/named/docker/postgresql active; 0 failed systemd units. Docker bounced with the update (~8 min uptime): 42/42 running, 0 unhealthy. Public HTTP 200 for zeroshot.studio, labs, finbot, portl.network, maintenancemode.systems; reno 307; panel :8443 303. Postgres still listens on 127.0.0.1 and 172.17.0.1. **Remaining:** reboot onto 6.8.0-136 (libc6 listed in reboot-required); kill stuck IdeaVault `drizzle-kit push --force` PID 768541 (157d, 104% CPU); health-monitor still alerts on removed autogen/wordpress and has no Docker socket; resnapshot manifest; confirm 15 Aug 03:30 nightly + rclone to hellojimmy. Canvas: `canvases/vps-post-update-check.canvas.tsx`.
Update by: Builder | Time: 2026-08-14T20:24:03Z
Summary: VPS rclone `gdrive:` now points at hellojimmygoode (5 TiB)
Details: Classification MIGRATION-GRADE. Owner confirmed 2026-08-14. Backed up `/root/.config/rclone/rclone.conf` to `/root/.config/rclone/rclone.conf.bak-20260814-hellojimmy` (mode 600). Applied hellojimmygoode OAuth token via `rclone config update gdrive token … --non-interactive` (rc=0); token files shredded on VPS and locally. **rclone about gdrive:** Total 5 TiB, Used 1.595 GiB, Free 4.998 TiB (not the old 15 GiB account). **Probe:** write/lsf/deletefile of `gdrive:VPS-Backups/.hellojimmy-probe.txt` → PROBE_OK. Nightly `backup-all-apps.sh` → `gdrive:VPS-Backups` should now land on the 5 TiB Drive.
Update by: Cursor Grok | Time: 2026-08-14T20:18:00Z
Summary: rclone OAuth completed as hellojimmygoode; VPS token apply pending confirm
Details: Classification BACKUP. Local `rclone authorize drive` succeeded. Google Drive API `about` for that token: email `hellojimmygoode@gmail.com` (James G), quota 5 TiB, used ~1.6 GiB. VPS `gdrive:` remote is still the old 15 GiB account until `/root/.config/rclone/rclone.conf` is updated. Token file is staged locally; writing it to the VPS was blocked pending explicit owner confirmation.
Update by: Cursor Grok | Time: 2026-08-14T19:22:00Z
Summary: All 3 Plesk subscriptions dumped to hellojimmygoode Drive; scheduled per-domain remote still blocked
Details: Classification BACKUP. Plesk only has 3 subscriptions (`zeroshot.studio`, `portl.network`, `MaintenanceMode.systems`); the other hostnames are sites under those. Admin Google Drive token is the hellojimmygoode auth. **One-off dumps to that Drive all SUCCESS**: `backup_maintenancemode.systems_2608142115.tar` (session `2026-08-14-211547.659`), `backup_zeroshot.studio_2608142118.tar` (session `2026-08-14-211853.522`), `backup_portl.network_2608142120.tar` (session `2026-08-14-212002.980`). Server-level daily 02:00 schedule already uses `remoteStorage=google-drive-backup`. **Cannot create per-subscription scheduled remote backups** without Plesk “Backup to Cloud Pro”. rclone `gdrive:` (`/opt/backups/apps/backup-all-apps.sh` → `gdrive:VPS-Backups`) still reports the old 15 GiB quota (Used 17.992 GiB) — separate OAuth, needs reconnect as hellojimmygoode.
Update by: Cursor Grok | Time: 2026-08-14T19:07:00Z
Summary: Plesk full backup to Google Drive completed successfully
Details: Classification BACKUP. Session `2026-08-14-205507.807` finished at 20:56 with `status=success`. `export-dump-created=true`, Drive file `backup_2608142055.tar` (571 MB, listed SUCCESS). Local copy `backup_info_2608142055.xml`. 3/3 domains, 2/2 accounts. Plesk updates are unblocked.
Update by: Cursor Grok | Time: 2026-08-14T18:55:00Z
Summary: Triggered full Plesk server backup to Google Drive
Details: Classification BACKUP. Started `plesk bin pleskbackup --server` to `ext://google-drive-backup/server/` with `-keep-local-backup` (no incremental). Session `2026-08-14-205507.807`; export target `backup_2608142055.tar`. pmm-ras `--export-dump-as-file` is running. Dump status at start: 0/3 domains, currently `zeroshot.studio`. Will not start Plesk updates until this session reports success.
Update by: Cursor Grok | Time: 2026-08-14T18:48:00Z
Summary: Correction: Plesk was EULA, not a dead license; new GDrive connected; local dump done
Details: Classification INSPECTION. User accepted the pending Plesk EULA. **Plesk CLI works again** (`domain --list`, `dns --info zeroshot.studio`). **Backup**: Plesk session `2026-08-14-204505.107` finished locally in ~70s (`status=success`, 3 domains, `export-dump-created=false`, stored under `/var/lib/psa/dumps/backup_info_2608142045.xml`). Listing `ext://google-drive-backup/server` succeeded, so the new Drive extension is wired. rclone `gdrive:` still shows the old 15 GiB quota full — that is a separate remote from Plesk’s extension. Holding Plesk updates until owner confirms the Drive copy is finished.
Update by: Cursor Grok | Time: 2026-08-14T18:35:00Z
Summary: VPS maintenance audit — automation silent since 17 Jul; Drive + Plesk + reboot need owner
Details: Classification INSPECTION. Live box is serving (42 containers, 0 unhealthy, disk 22%, mem 33%) but the maintenance loop has been dark since 2026-07-17. Root cause for nightly/idle-session/memory-sync: `/tmp` lost execute+sticky so `set -e` jobs died; crontab itself still fires. **Owner blockers**: Google Drive over quota (17.99/15 GiB, rclone 403 tonight — local dumps OK); Plesk license expired; kernel reboot pending (6.8.0-90 running, 6.8.0-136 installed, 214d uptime). **Also**: health monitor still alerts on removed wordpress/autogen (34,919 failures) and cannot check Docker drift; `backup-all-apps.sh` inventory predates zerolabs/zeromemory/Foreman/signals/FinBot; soonest TLS expiry is `server.zeroshot.studio` 8 Sep. Canvas: `canvases/vps-maintenance-plan.canvas.tsx`.
Update by: Cursor Grok | Time: 2026-08-14T18:22:00Z
Summary: Added Google Search Console TXT for labs.zeroshot.studio
Details: Classification CHANGE. Added `labs.zeroshot.studio` TXT `google-site-verification=ESp0vBcG2gSDneBPkXvxtr411oEMhwLoG8MbuxjiEq0`. Plesk CLI was blocked by an expired license, so the record was written into the live BIND zone `/var/named/run-root/var/zeroshot.studio` (SOA serial `1786731819`) plus `psa.dns_recs` rows 1170 (zone `zeroshot.studio`) and 1171 (zone `labs.zeroshot.studio`), then `rndc reload zeroshot.studio`. **Verified**: `named-checkzone` OK; `dig TXT labs.zeroshot.studio` returns the verification string from ns1, ns2, 127.0.0.1, and 1.1.1.1. **Side fix in-scope**: restored `/tmp` to `1777` (`drw-rw-rw-` → `drwxrwxrwt`) so MariaDB temp tables could write again. **Follow-up**: renew Plesk license; `plesk bin dns` currently fails with “license key is invalid/expired”.
Update by: Cursor Grok | Time: 2026-08-11T17:21:11Z
Summary: Synced Foreman 357947c to GitHub + live VPS
Details: Classification DEPLOY. Pushed `1c3cdf9` (guides dropdown/scrollbar) + `357947c` (CSV procurement gaps + SLC→microcement). Live rsync preserved `.env*`/DB; catalog reseeded; `claude` ownership on data/; services healthy.
Update by: Cursor Grok | Time: 2026-08-11T17:12:04Z
Summary: Deployed Foreman Task Guides to reno.zeroshot.studio
Details: Classification DEPLOY. Live Foreman advanced to `02d1180` (Task Guides + inventory/work-item links). Preserved `.env*` and DB contents. Post-rsync fix: restored `claude` ownership on `data/` after root rsync made SQLite WAL readonly. Services active; `/project/guides` redirects unauth to login (307).
Update by: Cursor Grok | Time: 2026-08-10T12:00:00Z
Summary: Re-pushed Reno Zee secrets VPS → ZeroMini over Tailscale SSH
Details: Classification CHANGE. Verified `claude` → `zeroshot@100.100.165.45` with `/home/claude/.ssh/zeromini_key`. Synced Foreman `AUTH_ZEE_*` + `AGENT_API_TOKEN` into ZeroMini `~/.config/zeroshot/reno-zee.env`, gateway env, TOOLS.md; restarted `openclaw-gateway`; API health 200. Script: `scripts/sync-reno-zee-secrets-to-zeromini.sh`.
Update by: Cursor Grok | Time: 2026-08-10T11:10:00Z
Summary: Gave Zee dedicated Reno login + agent API token
Details: Classification CHANGE. Foreman `9b2059a` on VPS: multi-account Auth.js (dedicated Zee browser user + Jimmy) and agent Bearer token on `/api/reno` + `/api/mlx`. Loopback/public agent health 200; bad token 401. Secrets in VPS Foreman env files and ZeroMini `~/.config/zeroshot/reno-zee.env` (+ gateway env + TOOLS.md). Deploy: `scripts/deploy-foreman-zee-access.sh`. Registry `foreman.last_deploy_commit` → `9b2059a`.
Update by: Builder | Time: 2026-08-09T21:15Z
Summary: Daily schedule intelligence — Plan my day + ORDER leaves
Details: Classification FEATURE. Today board ranks doing/suggested/order from Gantt (parent inheritance), diary pins, BOM gaps; Copilot defaults ORDER/HIRE leaves 3d before install; Home Plan my day → confirmable actions. Deployed `b53bad3`.
Update by: Builder | Time: 2026-08-09T21:10Z
Summary: Dashboard hours velocity — diary vs completed estimates
Details: Classification FEATURE. Compares diary labour_hours to estimated_hours on done leaf tasks; projects remaining hours/days if pace holds (≥4h sample each side). Deployed `42fcf9c`.