Opus 4.7 release weekend — what happened
Opus 4.7 dropped on a Friday. By Monday the platform had shipped more than in the previous two weeks combined. Here's the honest log — what worked, what didn't, and what's running now that wasn't before.
What shipped
The platform is 13 factories, 12 agents, and a lot of wiring. Going into the weekend the biggest gap was autonomy: every day I still had to open a terminal and nudge something. Seven days later:
- Shorts factory runs itself end-to-end. News monitor polls RSS → Ollama classifies → Vivi scripts → mood library → WAN 2.2 segments → assembly + QA → YouTube metadata. Three AI-news shorts rendered unattended on 2026-04-17, each with thumbnails, hashtags, and pinned comments.
- Platform survives reboot.
platform_startup.batboots the whole stack at logon (Ollama → Docker → MASTER_START → Hermes gateway nudge → Telegram ping).platform_healthcheck.batruns every 15 minutes and pings me if dashboard, mothership, Ollama, the scheduler, or disk drops below threshold. - Variety fix in the segment library. Old rotation was Vivi-first, which meant every short looked like "a girl, again." New picker takes the neediest mood every iteration (lowest existing/target ratio), soft-caps Vivi at 12, and bans any segment already used in a published short.
- Book factory got a cover artist. Every produced book now generates a genre-aware cover via z-image-turbo and packages EPUB, PDF, and MOBI through Calibre — same pipeline Amazon KDP accepts.
- Trend hub went cross-channel. Book, SEO, blogger, YouTube, and POD briefs all emit from the same firehose. Factory9 now picks topics from live 72h signal scores, not a static list.
- ParkMap rotates 16 cities. The nightly parking-zones self-improve run used to only hit the pilot city Luleå. Now it round-robins all 16 — every city gets deep-scan data within 2.3 weeks, and persistent scraper failures auto-escalate to R&D after three strikes.
- Personal-info lint on the site build.
My name, email, and city used to leak through the Astro source.
npm run buildnow fails if any banned string shows up in source or dist — no way for a future rebuild to regress.
What I learned
Docs ≠ implementation. I wrote six plan documents
during the week and got called out mid-session for exactly that: "you
wrote docs but never implemented the plans." Fair. The rule going
forward — any *_PLAN.md file I commit has to ship with at
least one execution artifact in the same turn (a cron row, a code
edit, a SOUL patch), or the doc doesn't go in.
Neediest-first beats round-robin. The segment
library was 60% Vivi and 0% scenic because a static
$ViviMoods + $RegularMoods + ... rotation chewed through
GPU hours on Vivi before the scenic moods ever hit their first
render. Picking the mood with the lowest existing/target ratio
every iteration self-balances without needing a scheduler.
Same pattern reappeared in ParkMap city rotation.
Permanent bans beat cooldowns. I had a
COOLDOWN = 5 on segment reuse, which meant the same
anime clip was allowed back after 5 shorts. Viewers would notice. Now
every segment that appears in an uploaded short is permanently
banned — joined against uploads.jsonl and
shorts_segment_usage.jsonl. Build the library deep
instead of cycling a shallow one.
Tokens drift. Two OAuth tokens in two places was a
recipe for pain — the uploader was reading an expired copy from
2026-03-22 while the working copy sat in
secrets/youtube_token.json untouched. Fixed with a
single-source-of-truth path plus a legacy fallback.
Numbers
- Shorts segment library: scenic moods went from 0 → target-range in five days
- Task Scheduler cleanup: 82 disabled legacy jobs identified; 9 removed this session, script staged for admin removal of the rest
- MASTER_START.bat: 644 → 604 lines after dropping the dead OpenClaw scaffolding
- Platform healthcheck snapshots: writing to
E:\MaxineLogs\platform_healthcheck.jsonlevery 15 min - Shorts QA gate: deterministic + LLM both required before upload (was: either)
What broke
- GPU self-deadlock on 2026-04-17 — zombie renderer processes held the Redis lock after a crash, and the watchdog kept spawning new renders that couldn't acquire it. Manual recovery: kill zombies, clear the lock. Follow-up: the lock now carries a PID so stale holders can be auto-released.
-
Vision-LLM on image QA: only 1 in 15 images produced parseable
JSON even with
think:falseset. Deterministic ImageQA already gates reliably, so LLM is a nice-to-have layer, not a critical path. Prompt rewrite is the next cheap win. -
YouTube first real upload still requires my approval. The v2
uploader is dry-run-verified on three videos; flipping
vivi-youtube-upload.enabled → trueis a one-line change I'll make after the first manual unlisted test passes.
Testing next week
- First real YouTube upload (unlisted, then public)
- Run the admin Task Scheduler cleanup — drop the remaining ~70 disabled tasks
- Wire Analytics → factory priority loop (what's getting views decides what runs tomorrow)
- QA → Sales pipeline: PASS books auto-queue to Gumroad draft state
- Ship the Maxine Platform product page with Free and Plus screenshots
The platform is a 24/7 local-first setup — Ollama + SwarmUI + Hermes agents + 13 factories — running on a single workstation. Everything above is code in repos you can see or artifacts on disks I own. No investor deck, no hype. Just the log.