From specification to stress test: a weekend with Claude
juxt.pro
juxt.pro
Well, what would you expect from a few hours of running in a loop with these constraints?
> This project exists to build a document editor from the ground up. Violating these constraints defeats the entire purpose.
> FORBIDDEN dependencies (do NOT install or use these):
> Rich text editor frameworks: ProseMirror, Slate, Quill, TipTap, Draft.js, CKEditor, TinyMCE, Lexical, or any similar library
> CRDT/OT libraries: Yjs, Automerge, ShareDB, OT.js, or any similar library
> Full CSS frameworks: Bootstrap, Tailwind, Material UI (small utility libs for specific needs are OK)
> ORMs: Prisma, TypeORM, Sequelize (use raw SQL or a thin query builder)
I can't help but wonder what you thought you would achieve, and how getting "mostly what you asked for" is still disappointing to you.
> there is no taste being applied.
There are 0 lines in AGENT_PROMPT.md about "taste". You have instructed something/someone on how to build more than what to build.
Your goals are (from a quick skim):
- The goal of this project is ultimately to generate a working alternative to Google Docs with the same functionality.
- You are an autonomous software engineer building AltDocs, a from-scratch alternative to Google Docs.
I see a FEATURES.md file, but not clear if this is from you or expanded by the model. It seems pretty slim.
All in all, I don't get the "disappointment". It seems, from your blog post, that the "model" did most of the things you asked for. The disappointment might come from what you asked for, more than from the "model" being bad... To paraphrase a line from a sitcom: "Damn, Andrew, I can't control the weather!" :)
I also have a story about Vibe Coding, I had the AI make for me a mqarkdown editor with some extra features, it worked fine but the problem is I have no idea how it works, I do not know if I can add feature X easily or it needs a rewrite from scratch, I have no ideas for improvements or new features, if there is a problem I have no clue what causes it since I I never looked at the code.
So I concluded that I (others can do whatever they want, they are free people with their own standards ) I will only use Vibe Coding for throw away personal shit, that I will not make public, like for example I made some bash scripts, some python scripts to automate some stuff.
Yeah, we still have exactly the same problem as before LLMs/agents, namely that we lack people with "Good Taste". I've outlined how I feel about before (https://emsh.cat/good-taste/) but the TLDR is basically that while LLMs can help you move faster, they won't suddenly mean you'll make better choices, probably the reverse is true, you'll move faster and make worse choices.
Having good taste and knowing how things actually should function is 80% of the work of building good software, and so far all these tools that are trying to replace human choices lead to worse software, and we need more tooling that puts the human and the LLM working together, instead of just outsourcing from the human to the LLM.
I don’t fully understand how allium solves the inherent issues with markdown, i.e. free-form language specs. It appears to have some loose syntactical rules, but outside of that relies on comments which are, again, free-form. Moreso, the “Resolved” portions remind of me how LLM agents like Claude code just go and edit existing doc files and make a mess of repetitive and overlapping thoughts.
That seems ill advised at best.
Here is the breakdown of the flaws and the "BS" in the narrative.
1. The "I Didn't Write Code" Lie The author claims, "I didn't write a line of implementation code." The Flaw: He wrote 3,000 lines of "Allium behavioural specification." The BS: Writing 3,000 lines of a formal specification language is coding. It’s just coding in a proprietary, high-level language instead of Kotlin.
The Ratio is Terrible: The post admits the output was ~5,500 lines of Kotlin. That means for every 1 line of spec, he got roughly 1.8 lines of code.
Why this matters: True "low-code" or "no-code" leverage is usually 1:10 or 1:100. If you have to write 3,000 lines of strict logic to get a 5,000-line program, you haven't saved much effort—you've just swapped languages.
2. The "Weekend Project" Myth The post frames this as a casual project done "between board games and time with my kids." The Flaw: This timeline ignores the massive "pre-computation" done by the human. The BS: To write 3,000 lines of coherent, bug-free specifications for a Byzantine Fault Tolerant (BFT) system, you need to have the entire architecture fully resolved in your head before you start typing. The author is an expert (CTO level) who likely spent weeks or years thinking about these problems. The "48 hours" only counts the typing time, not the engineering time.
3. The "Byzantine Fault Tolerance" (BFT) Bait-and-Switch The headline claims "Byzantine fault tolerance," which implies a system that continues to operate correctly even if nodes lie or act maliciously (extremely hard to build). The Flaw: A "Resolved Question" block in the text admits: "The system's goal is Byzantine fault detection, not classical BFT consensus." The BS: Real BFT (like PBFT or Raft with signatures) is mathematically rigorous and keeps the system running. "Fault Detection" just means "if the two copies don't match, stop." That is significantly easier to build. Calling it "BFT" in the intro is a massive overstatement of the system's resilience.
4. The "Maintenance Nightmare" (The Vendor Lock-in Trap) The post glosses over how this system is maintained. The Flaw: You now have 5,500 lines of Kotlin that no human wrote. The BS: This is the "Model Driven Architecture" (MDA) trap from the early 2000s.
Scenario: You find a bug in the Kotlin code.
Option A: You fix the Kotlin. Result: Your code is now out of sync with the Spec. You can never regenerate from Spec again without losing your fix.
Option B: You fix the Spec. Result: You hope the AI generates the exact Kotlin fix you need without breaking 10 other things.
The Reality: You are now 100% dependent on the "Allium" tool and Claude. If you stop paying for Allium, you have a pile of unmaintainable machine-generated code.
5. The Performance "Turning Point" The dramatic story about 10,000 Requests Per Second (RPS) has a hole in it. The Flaw: The "bottleneck" wasn't the code; it was a Docker proxy setting (gvproxy). The BS: This is a standard "gotcha" for anyone using Docker on Mac. Framing this as a triumph of AI debugging is a stretch—any senior engineer would check network topology when seeing high latency but low CPU usage. 10k RPS is also not "ambitious" for a modern distributed system; a single well-optimized Node.js or Go process can handle that easily.
Kindly, the HN Community.
Is there even a sync to be had? The same prompt to the same LLM at different times will yield different artifacts, even if you were to save and re-use the seed.
Seems like a serious oversight if this is your selling point.
> Allium has no compiler and no runtime. It is purely descriptive, defined entirely by its documentation
From what I understand that means there is no spec, no parser, it's just vibe evaluated by LLMs.
I don't necessarily expect their secret sauce to be openly available. But given the grandiose claims made there, I do expect something to back it up other than a corpospeak "trust me bro".
We have a strict no laptops and no phones rule when the kids are around (unless we're specifically doing something with them using those tools - looking at the weather forecast, or looking up some information).
"I can prompt AI while playing with the kids" is not a future I want.
edit: anyone care to explain why this is a bad comment, rather than just downvoting? The GP comment says "Over a weekend, between board games and time with my kids,", and the parent comment lectures them based on an obvious strawman: "I can prompt AI while playing with the kids"
"between time with the kids" is another person's "during time with the kids".
For me, "between time with the kids" means my kids are engaged in another activity that does not require my input until they are done with it. Whatever I am doing during this time also is typically very interruptible, so I am ready to help the kids along to their next "thing" (the joys of being a parent!). On a typical weekend (my oldest is 7), I'll get maybe 2 hours of this time during the time my kids are awake.