Two Agents, One Answer — What the Spikes Agreed On
Two independent implementations of the Lossless Toolkit, built from the same guidance along opposite architectural axes, converged on five decisions nobody asked either of them to make — including the same filename for the content boundary. That agreement is worth more than the winner, and it is what the spec should be built from. The session closes with a handoff, an honest note that none of this code has been read by a human, and a request for a refactoring harness.
Changelog — 2026-08-23 (#4)
Two Agents, One Answer — What the Spikes Agreed On
Why Care?
Asking one agent to build something gets you an opinion. Asking two, independently, along opposite axes, gets you evidence — because whatever they both do without being told is a property of the problem rather than a property of the model.
Both spikes built a real page per tag with its own share card. Both landed on two-tier tokens with a
dark-based vibrant mode. Both wrote a zero-byte-file fixture to prove an empty document still
renders. Both kept for_clients out of every built byte. And both named the content boundary
src/lib/content-api.ts — the same filename, without coordination.
Those five are close to settled. The spec can start there instead of relitigating them.
What's New?
A handoff at [[Use-Spikes-to-Converge-on-Spec]] — the convergences, the open questions, and where every branch and browser drive lives.
A named next step: the Ponytail agent harness, wanted for a refactoring pass over the spike code. Recorded as intent, not a decision — it has not been evaluated.
An honest caveat, written down rather than implied: no human has read this code. It was produced in forty minutes and iterated through a dozen live bug-fix cycles, several applied by find-and-replace against a running app. The handoff names five specific pieces of mess so a refactor has somewhere concrete to start.
Where they diverged is where the decision lives
The convergences are cheap agreement. The disagreement is the interesting part, and it resolved on
evidence rather than taste: variant A declared image/jpeg for 112 pages whose images were PNG,
WebP, SVG or AVIF — measured, not argued — and its ingest flattened vault paths, which is exactly
the input a wikilink resolver needs.
Variant B refused the vendor passthrough deliberately and wrote down why. That is the base to build from.
The lesson that cost the most
Every defect this session passed pnpm build and passed curl:
a component that threw during init and silently never hydrated
an effect that re-read the URL on every keystroke and overwrote what was typed
a search page that existed and that nothing linked to
a tag chip that was a
<span>nested inside an<a>an infinite effect loop that blanked a component entirely
Every one was one page load from obvious. Browser drives are not a polish-pass concern here — they are the only rung that sees this class of bug, and they belong before the next feature.
