Day X+7: The Decomposition

A week since Day X. Here’s the substance.

What APR Pro Actually Looks Like at Scale

The monkeybee-pdf spec hit 10,000 lines. I ran it through 25 rounds of Automated Prompt Reviewer Pro - a planning refinement skill from jeffreys-skills.md that systematically critiques and tightens architectural plans. On top of that, I ran several multi-model blending rounds where I’d take the output from one model, feed it into another for critique, feed the critique back, and iterate. Claude for generation, Gemini for review, GPT Pro for synthesis, repeat. I also used the idea-wizard skill to pressure-test whether the spec was ambitious enough and to surface capabilities I hadn’t considered.

After 25 rounds, the spec is dense. Comprehensive. Arguably too comprehensive.

The core problem: specs this long stop fitting in a model’s context window in a single pass. They also tend to bloat with inline code examples that belong in implementation, not planning. The spec grew because the problem space is genuinely massive - a full PDF renderer/generator touches font subsetting, colorspace management, encryption, digital signatures, accessibility, XFA forms - but also because I let it expand rather than compress. More rounds doesn’t always mean better. Sometimes it means bloated.

The Strategy Shift

I was supposed to convert the whole spec into beads and start swarming. I tweeted about it from a Walmart parking lot at 11:30 PM on March 16th. But when I sat down to actually do it, I realized the approach was wrong.

To be clear about what this spec actually describes: a complete, clean-room, memory-safe PDF renderer and generator in Rust. Not a wrapper around Poppler. Not a binding to MuPDF. Not another half-implementation that handles simple documents and chokes on anything real. The spec covers the full PDF 2.0 standard - font subsetting with OpenType and TrueType support, all 11 PDF colorspaces including ICC profile handling, AES-256 encryption, digital signatures, accessibility tagging, XFA forms, JPEG2000 and JBIG2 decoding, transparency groups, optional content layers, linearization for web streaming. The things that make Acrobat still relevant are the things most open-source implementations skip. This spec doesn’t skip them.

Nothing like this exists in Rust today. The closest is pdf-rs, which is a parser - not a renderer, not a generator. lopdf handles basic manipulation. Neither comes close to what this spec targets. If this gets built to spec, it’s the first memory-safe implementation capable of accurately handling the full complexity of real-world PDFs - the kind with nested form fields, embedded 3D content, complex font fallback chains, and redaction annotations that actually work. The kind that governments and banks produce and that every existing open-source tool renders incorrectly in some way.

That’s also why you don’t convert a 10,000-line spec describing all of that into beads all at once and then swarm the whole thing. That’s how you get an incoherent codebase. The spec describes a system with clear subsystems - parsing, rendering, generation, font handling, testing infrastructure - and each of those has dependencies on the others, but they’re not all equally critical for a v1.

The new plan: decompose the spec into implementation phases. Phase 1 gets its own beads conversion and gets swarmed first. When that phase lands - messy as it will be - I adjust the Phase 2 spec based on what actually happened in Phase 1, because the reality of implementation always deviates from the plan. Then Phase 2 gets converted to beads and swarmed. And so on.

This is slower to start but way more likely to produce something that actually works. Converting plans to beads always reveals problems you didn’t anticipate - structural issues, dependency conflicts, assumptions that seemed solid in prose but collapse when you try to make them concrete. That’s expected. That’s the point. It’s better to discover those problems in a contained blast radius than to have them cascade across an entire 10k-line system simultaneously.

The Job

I got a night shift security guard position. Low-key spot, not labor-intensive. The strategy is straightforward: the job funds agent subscriptions and basic survival, and the quiet overnight shifts become additional build time. I can have agents swarming while I’m on the clock.

It’s contingent on background checks clearing. If it goes through, it changes the resource equation significantly. Right now I’m burning through donated Claude passes and free tiers. A steady income - even a modest one - means I can run sustained agent workloads instead of rationing.

The Gym

Since getting out of the hospital I’ve been cycling free trials at gyms for shower access. Planet Fitness, Crunch, random chains, whatever has free passes. It sounds like a hack and it is, but I’m genuinely grateful for it. A hot shower, a clean bathroom, a place to lift.

Lifting is a big deal for me. It regulates everything - mood, focus, sleep. Having something physical that grounds me is not optional. It’s infrastructure, same as the laptop and the power bank.

I think about perspective a lot when I’m in the parking lot at night. I’m in a car with a functioning heater, a laptop, WiFi, access to the most powerful AI models ever built, and a gym I can walk into for free. Someone in Haiti right now would trade everything for this setup. Your average person in 1500 would think I was a wizard - a glowing rectangle that contains the sum of human knowledge, and I’m using it to direct autonomous agents that write code for me. From a car. In a parking lot.

It could be so much worse. I have it good. The situation is “uncomfortable” (It’s all perspective. I definitely am not accepting this situation as some nice status quo, but I’m not going to waste my time dwelling etc. - that’s cognitive bandwith that could be put towards shipping) but the opportunity is absurd. I’m not going to waste it.

Where I’m Working

Right now: a Walmart parking lot. Power bank for the laptop, store WiFi for connectivity. The headless desktop I set up in Day X is ready but I need a consistent power outlet to run it - the security job could solve that too if there’s an outlet I can use on shift.

The setup is functional. Not comfortable, not glamorous, but functional. ThinkPad on the steering wheel, hotspot when the Walmart WiFi drops, power bank that gives me about 4-5 hours of work per charge. I charge the bank inside when I go in for water.

What’s Next

Tonight I start the spec decomposition - splitting the monolithic 10k-line SPEC.md into discrete implementation phases. Tomorrow, Phase 1 gets its beads conversion. This weekend, I’m posted up at a library with the headless desktop SSH’d into from my laptop. That’s when the swarm begins.

No more planning about planning. The spec is refined enough. Probably over-refined. Time to convert and build.

What I Learned

  • More refinement rounds on a spec can make it worse, not better. There’s a point where you’re adding detail that creates confusion rather than clarity. 25 APR Pro rounds was probably 10-15 too many. I should have started decomposing earlier.
  • The incremental implementation approach - phase by phase, adjusting the plan based on what actually happens in code - is the right call for something this complex. Planning is not a phase you complete. It’s something that continues alongside building.

The spec is dense and the plan has shifted from “convert everything to beads and swarm” to “decompose, convert phase by phase, and adapt.” Phase 1 beads conversion tomorrow. The swarm begins this weekend.