What we measured, and how to reproduce it.
Three paper pages. Results covers tokens, latency, success rate, and the cost of ownership over N dispatches. Methodology documents the harness, the dispatch loop, and the role-taxonomy decisions. Byte-by-byte diff is a side-by-side of every NAC attribute set on every interactive element, plus the manifest entry comparison, plus the divergence list.
Cost · latency · functional success.
Forge produces a tighter manifest than the hand-decorated reference. Both cost the same to drive functionally. Manual carries label_i18n bloat that costs +24% input tokens per dispatch without changing the success rate.
Read results →Harness · prompts · taxonomy.
How yf migrate's silent and assisted modes work; what the role taxonomy decision tree looks like (display = field, never region); how the contract bridge wires bindAction into a host app that wasn't NAC3-aware.
Read methodology →Every attribute, every cell.
Side-by-side decoration of every button by its invariant onclick handler. Side-by-side manifest entries. Divergence list with one annotated row per disagreement between silent / assisted / manual.
Read the diff →Open each decoration in your browser.
Four pages: the raw calculator (no NAC3 at all), and the three NAC3-decorated versions. Each NAC3 build is drop-in -- includes the runtime, the nac-bridge, and Yujin Pilot (the floating chat that drives the calc via voice + multi-provider LLM). To use Pilot, click the floating sumi-e branch, open Configuracion, paste at least one API key (Anthropic / OpenAI / Google / DeepSeek / Groq), then ask "calcula 3 mas 4".
calc-raw
The original vanilla calculator. No data-nac attributes, no manifest, no runtime. Anchors what the "before" of every migration looks like.
calc-forge-silent
Output of yf migrate --ai-silent. Claude Sonnet 4.6 decorated the page in one shot, no questions, no human input.
calc-forge-assisted
Output of yf migrate --ai-assisted. Same model + tooling as silent, but allowed to flag ambiguities. For a calculator the model raised none -- output matches silent.
calc-sumi-manual
Hand-decorated by Sumi (the Claude Code agent that ran this experiment). Includes the cleaner taxonomy: an explicit keypad region, label_i18n on every element including fields and regions, op-prefixed action ids.
Reading the demos -- what to look at first
1. Open calc-raw in one tab + any of the three decorated demos in another. The visible UI is byte-identical. NAC3 is purely additive -- decoration never changes what the user sees or how the calc behaves to mouse clicks.
2. Right-click → View Source on any decorated demo. Inspect the data-nac-* attributes. Notice how Forge keeps the manifest tight while Sumi-manual carries label_i18n on every element.
3. Click the floating sumi-e branch (bottom-right). Open Configuracion. Paste an Anthropic API key (Claude Sonnet 4.6 default). Ask: "calcula 3 mas 4". Watch the manifest verbs dispatch in the pizarra panel. Voice STT works in Chrome / Edge.
4. Each demo is fully self-contained -- nac.browser.js, nac-bridge.js, pilot.bundle.js all served from the same directory. No CDN dependencies at runtime.
Forge + Pilot. Build once, drive forever.
Yujin Forge turned calc-raw into calc-forge-silent in 23 seconds for $0.045. Yujin Pilot embeds the multi-provider chat + voice cockpit in any Forge-decorated page. Both ship today -- Forge as a CLI (npm i -g @yujin/forge + yf migrate), Pilot as a single-file IIFE bundle injected by yf pilot install.