@ikon85/agent-workflow-kit 0.34.4 → 0.34.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.agents/skills/kit-update/SKILL.md +6 -3
  2. package/.agents/skills/setup-workflow/SKILL.md +13 -5
  3. package/.agents/skills/setup-workflow/assets/agent-workflow-kit-update.yml +1 -3
  4. package/.claude/skills/kit-update/SKILL.md +6 -3
  5. package/.claude/skills/setup-workflow/SKILL.md +13 -5
  6. package/.claude/skills/setup-workflow/assets/agent-workflow-kit-update.yml +1 -3
  7. package/README.md +10 -0
  8. package/agent-workflow-kit.package.json +8 -8
  9. package/docs/adr/0001-consumer-divergence-policy.md +4 -0
  10. package/docs/adr/0003-kit-core-and-project-extension-lifecycle.md +63 -0
  11. package/docs/agents/board-sync.md +1 -1
  12. package/docs/agents/workflow-capabilities.json +17 -0
  13. package/docs/research/benchlm-routing-source.md +198 -0
  14. package/docs/research/consumer-owned-protocol-files.md +238 -0
  15. package/docs/research/frontend-agent-benchmarks.md +282 -0
  16. package/docs/research/model-effort-routing-benchmarks.md +261 -0
  17. package/docs/research/provider-neutral-agent-routing.md +207 -0
  18. package/package.json +1 -1
  19. package/scripts/kit-update-pr.mjs +1 -1
  20. package/scripts/kit-update-pr.test.mjs +2 -0
  21. package/scripts/test_skill_readiness_contract.py +6 -1
  22. package/scripts/test_skill_setup_workflow_seeds.py +18 -17
  23. package/src/commands/update.mjs +52 -20
  24. package/src/lib/bundle.mjs +1 -1
  25. package/src/lib/updateCandidate.mjs +278 -50
  26. package/src/lib/verifyUpdateCandidate.mjs +220 -0
  27. package/src/lib/verifyUpdateCandidateArtifacts.mjs +78 -0
  28. package/src/lib/verifyUpdateCandidateProtocol.mjs +221 -0
  29. package/src/lib/verifyUpdateCandidateTransaction.mjs +152 -0
@@ -0,0 +1,238 @@
1
+ # Consumer-owned protocol files: evolution without overwrite or starvation
2
+
3
+ Verified on 2026-07-22 against `agent-workflow-kit` 0.33.0 in the issue #197
4
+ worktree. This note researches how an updater should handle a locally adapted
5
+ file that is also part of an evolving upstream protocol. It is decision input,
6
+ not a product change.
7
+
8
+ ## Finding
9
+
10
+ A protocol-critical file must not be both an immutable consumer-owned fork and
11
+ the upstream kit's active protocol authority under the same path. Those two
12
+ contracts are incompatible: permanent consumer ownership prevents protocol
13
+ evolution, while ordinary upstream ownership cannot preserve local policy.
14
+
15
+ The durable model is to split the mixed file into:
16
+
17
+ 1. an upstream-owned, immutable **protocol core** that ships and evolves with
18
+ the kit; and
19
+ 2. a consumer-owned, structured **extension overlay** containing only local
20
+ declarations and policy.
21
+
22
+ The staged update candidate composes core plus overlay and validates the whole
23
+ result before activation. A one-time migration extracts existing local
24
+ extensions from the mixed file. Ambiguity blocks that migration rather than
25
+ overwriting either side. A consumer that needs to change executable protocol
26
+ behavior has made a real code fork and needs a separate artifact/version line,
27
+ not `origin: consumer` on the upstream path.
28
+
29
+ ## Current local contract and failure mode
30
+
31
+ The accepted divergence policy defines a consumer-owned path as a deliberate
32
+ fork that receives no overwrite, conflict report, deletion prompt, or future
33
+ kit improvement ([ADR 0001](../adr/0001-consumer-divergence-policy.md)). The
34
+ reconciler implements that literally: as soon as an installed entry has
35
+ `origin: 'consumer'`, it carries the old manifest record forward and skips all
36
+ upstream comparison
37
+ ([`updateReconcile.mjs`](../../src/lib/updateReconcile.mjs)). This is coherent
38
+ for an independent local file, but it is update starvation for a protocol
39
+ authority.
40
+
41
+ Issue #196 exposed the concrete mixed-file shape. The readiness harness and
42
+ skills depend on `.claude/skills/skill-manifest.json`, but a real consumer owns
43
+ and extends that same registry. The published 0.32.0 artifact was internally
44
+ coherent; the consumer combined 15 local skill records and local notes with an
45
+ older upstream registry, while the newer kit added five skills, 23 readiness
46
+ capabilities, and 15 readiness declarations. Skipping the owned registry thus
47
+ allowed a new executable harness to run against an old protocol declaration.
48
+
49
+ The candidate transaction already has the right enforcement location: it
50
+ checks candidate hashes and destination races before activation and rolls back
51
+ all touched paths on failure
52
+ ([`updateCandidate.mjs`](../../src/lib/updateCandidate.mjs)). What is missing is
53
+ a compositional protocol model and validator; copying more of the consumer or
54
+ adding more path exclusions does not solve that ownership contradiction.
55
+
56
+ ## Comparable primary-source patterns
57
+
58
+ | System | Primary-source behavior | Lesson for the kit |
59
+ |---|---|---|
60
+ | Git three-way file merge | `git merge-file` combines the changes from a recorded common base to the upstream side with the local side; overlapping edits become explicit conflicts and a clean merge has a distinct successful exit status. [Git documentation](https://git-scm.com/docs/git-merge-file) | The stored installed hash/base makes a one-time three-way migration possible. A merge is evidence to inspect, not permission to silently overwrite. Text merge is unsuitable as the permanent extension mechanism because protocol identity and invariants are semantic, not line based. |
61
+ | GitHub forks | Syncing a fork explicitly fetches/merges upstream. Conflicts require a pull request or manual resolution; forcing sync overwrites the destination. [GitHub documentation](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) | A true code fork has its own history and must deliberately integrate upstream. It cannot also promise automatic compatibility under the original identity. |
62
+ | Kubernetes Server-Side Apply | Kubernetes tracks ownership per structured field. An attempted value change to another manager's field conflicts; force is an explicit ownership transfer. A manager can also relinquish a field or share ownership by agreeing on the same value. [Kubernetes documentation](https://kubernetes.io/docs/reference/using-api/server-side-apply/) | Ownership below the file level works for schema-defined data. Core fields and consumer extension fields can have separate managers, with collisions rejected and transfers explicit. This model should not be imitated for arbitrary source-code lines. |
63
+ | Debian configuration files | Debian requires local configuration changes to survive upgrades. It distinguishes package conffiles from files generated and maintained by idempotent scripts, forbids mangling user configuration without asking, and warns that mixing the two handling styles causes repeated upgrade prompts. [Debian Policy](https://www.debian.org/doc/debian-policy/ch-files.html#behavior) `dpkg` separately exposes explicit keep-old/install-new/default choices for changed conffiles. [dpkg manual](https://manpages.debian.org/bookworm/dpkg/dpkg.1.en.html) | Choose one ownership model per artifact. Do not make one file simultaneously an upstream payload and a consumer-generated extension. Migrations must be idempotent, previewed, and preserve the old value on failure. |
64
+ | Terraform provider state | Terraform stores a resource schema version, asks the provider to upgrade older state before planning, rejects unsupported prior versions, and retains prior state when an upgrader reports errors. Each upgrader must produce a complete current-version state. [Terraform Plugin Framework](https://developer.hashicorp.com/terraform/plugin/framework/resources/state-upgrade) | Give the overlay an explicit schema version and deterministic upgraders. Validate the fully upgraded/composed state, not only the changed records. Unsupported or ambiguous inputs block activation without destroying the prior state. |
65
+ | Kubernetes API versioning | Kubernetes can serve old and new API versions concurrently, converts between representations, migrates stored objects separately, and removes an old version only after clients and stored objects have migrated. [Kubernetes CRD versioning](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/) | Compatibility needs an announced window: introduce/read both, migrate, count adoption, stop serving old, then remove conversion. A deprecation warning alone is not migration evidence. |
66
+ | Homebrew taps | An extracted or alternative formula lives in a separate Git repository/tap; its owner is responsible for maintenance, deprecations, and security updates. Naming or qualification avoids collision with the core formula. [Homebrew tap documentation](https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap) | A real executable fork needs a distinct artifact namespace and maintenance owner. It should not silently shadow the kit's protocol core at the same path. |
67
+
68
+ ## Data/config extension versus code fork
69
+
70
+ These cases need different contracts.
71
+
72
+ ### Structured consumer extension
73
+
74
+ Use an overlay when the consumer is adding data the upstream runtime already
75
+ knows how to interpret: local skill registrations, local capability evidence,
76
+ board values, activation decisions, or project policy. The upstream owns the
77
+ schema and executable semantics; the consumer owns values in a declared
78
+ extension namespace.
79
+
80
+ The overlay should have:
81
+
82
+ - its own consumer-native path and `schemaVersion`;
83
+ - stable record identities and an explicit allowed extension namespace;
84
+ - no ability to redefine reserved upstream/core records;
85
+ - deterministic, idempotent schema upgraders;
86
+ - a compatibility declaration tying overlay schema versions to supported
87
+ protocol-core versions; and
88
+ - a composed-state validator that checks references, uniqueness, required
89
+ declarations, and executable/declaration parity.
90
+
91
+ This is the applicable model for the mixed skill/readiness manifest. The
92
+ consumer's local skills are data extensions; the kit's shipped skill registry,
93
+ readiness schema, and harness contract are protocol core.
94
+
95
+ ### Executable code fork
96
+
97
+ Use a true fork when the consumer changes parsing, evaluation, migration, or
98
+ other executable protocol behavior. The fork must then have a distinct package
99
+ or path identity, its own version and release channel, an explicit upstream
100
+ remote/base, and a deliberate sync/rebase/merge process. Compatibility with the
101
+ upstream package is no longer automatic.
102
+
103
+ Marking such code `consumer`-owned under the upstream path hides that reality:
104
+ it keeps the name but abandons the update channel. The Homebrew and GitHub
105
+ models make the trade-off honest: local history is preserved, upstream sync is
106
+ possible, conflicts are explicit, and maintenance responsibility moves to the
107
+ fork owner.
108
+
109
+ ## Recommended candidate and ownership contract
110
+
111
+ ### 1. Define protocol groups, not only independent files
112
+
113
+ The package manifest should declare every protocol-critical group and its
114
+ members, for example:
115
+
116
+ ```text
117
+ readiness protocol
118
+ core registry: kit-owned
119
+ runtime harness: kit-owned
120
+ skill preflights: kit-owned
121
+ consumer overlay: consumer-owned structured data
122
+ validator/migrators: kit-owned
123
+ ```
124
+
125
+ The candidate is valid only if every group is coherent as a whole. A
126
+ consumer-owned member can therefore no longer make validation disappear.
127
+
128
+ ### 2. Keep upstream protocol core unownable under its canonical identity
129
+
130
+ `own` should refuse a protocol-core path and point to the supported overlay or
131
+ fork route. Existing owned core paths are legacy states to migrate, not states
132
+ to perpetuate. This narrows ADR 0001 rather than weakening it: ordinary
133
+ consumer-owned files remain immutable and skipped; protocol core is no longer
134
+ an eligible ownership unit.
135
+
136
+ ### 3. Compose and validate before activation
137
+
138
+ For every update, materialize the complete intended kit end state, load and
139
+ upgrade the consumer overlay, compose both, and run protocol-specific
140
+ invariants. Activation remains all-or-nothing. A bad overlay blocks the
141
+ protocol group with a targeted diagnostic; it never causes the updater to
142
+ overwrite local data or to activate a mixed-version group.
143
+
144
+ Collision rules should be structural:
145
+
146
+ - a consumer may add records only in its declared namespace;
147
+ - a consumer record that collides with a core identity is rejected unless the
148
+ schema explicitly defines a non-overriding augmentation;
149
+ - consumer values cannot replace core executable references or protocol
150
+ versions;
151
+ - dangling references and unsupported overlay versions block activation; and
152
+ - ownership transfer is an explicit user decision, never a `--yes` default.
153
+
154
+ ### 4. Migrate the legacy mixed file once
155
+
156
+ For the existing combined registry, the staged candidate should retain three
157
+ inputs: the last installed upstream base, the live consumer file, and the new
158
+ upstream core. Migration should semantically classify records rather than
159
+ blindly line-merge JSON:
160
+
161
+ 1. identify records unchanged from the recorded upstream base;
162
+ 2. extract clearly consumer-only records and allowed local policy into the new
163
+ overlay;
164
+ 3. install the complete new upstream core;
165
+ 4. compose and validate the result; and
166
+ 5. preview the extraction, backups, ownership changes, and any ambiguous rows.
167
+
168
+ If provenance is ambiguous—for example, a consumer modified an upstream record
169
+ instead of adding a namespaced one—the update stops at a user gate. The user
170
+ chooses to port the change upstream, express it through a supported overlay
171
+ field, or create a real fork. A raw three-way merge may help produce the review
172
+ diff, but it must not decide semantic ownership.
173
+
174
+ ### 5. Version, negotiate, deprecate, then remove
175
+
176
+ The protocol core and overlay schema need independent explicit versions and a
177
+ supported compatibility matrix. Rollout follows the Kubernetes/Terraform
178
+ pattern:
179
+
180
+ 1. ship readers and validators for both the legacy combined representation and
181
+ the new split representation;
182
+ 2. ship the idempotent migration and preview it in the candidate;
183
+ 3. activate core plus overlay only after full validation;
184
+ 4. report a fresh adoption count (`X of Y` consumers or known legacy states),
185
+ not an assumed completion;
186
+ 5. stop creating legacy state and make old-state diagnostics actionable; then
187
+ 6. remove the legacy reader only after all supported prior states have a
188
+ migration path and known consumers have migrated.
189
+
190
+ Without remote telemetry, the evidence is local manifest/schema state plus
191
+ consumer update/CI results. The kit should therefore use a release-bounded
192
+ support window and a deterministic audit command, not claim global adoption.
193
+
194
+ ## Proposed rollout for issues #196/#197
195
+
196
+ 1. **Inventory and classify.** Derive all protocol-critical groups from shipped
197
+ executable references and manifests. Count every member and mark it core,
198
+ overlay, generated evidence, or independent file.
199
+ 2. **Add validation before enforcement.** Build the kit-only candidate and
200
+ protocol-group validator. Initially report legacy mixed ownership and prove
201
+ that a #196-style harness/registry mismatch is rejected.
202
+ 3. **Introduce the split readiness registry.** Ship an upstream-owned core
203
+ registry plus a consumer-owned extension overlay. The runtime reads the
204
+ composed view; new consumers start split.
205
+ 4. **Adopt existing consumers transactionally.** Extract Testreporter's 15
206
+ consumer-only skill records and local policy into the overlay, install the
207
+ current core, validate all core and local records, and change ownership only
208
+ as part of the verified candidate activation. Preserve a backup/recovery
209
+ receipt.
210
+ 5. **Guard the seam.** Reject future `own` operations on protocol-core paths;
211
+ point users to the overlay for data extensions or to a separately named
212
+ package/path for executable forks.
213
+ 6. **Sunset the combined format.** Keep the legacy reader for a declared
214
+ compatibility window, count locally known adoptions, then remove it in a
215
+ release that explicitly declares the minimum supported overlay/core schema.
216
+
217
+ ## Rejected rollout shapes
218
+
219
+ - **Silently overwrite the owned file:** destroys legitimate local behavior
220
+ and violates the existing consumer contract.
221
+ - **Keep skipping it forever:** preserves bytes but starves the protocol and
222
+ recreates #196 on every coupled evolution.
223
+ - **Automatically disown it:** turns an ownership decision into an implicit
224
+ destructive migration.
225
+ - **Blind three-way merge on every update:** reduces conflicts but leaves a
226
+ mixed authority and cannot validate semantic record identity.
227
+ - **Field ownership for arbitrary code:** line/AST ownership is not a stable
228
+ extension API; local executable changes need an explicit fork.
229
+ - **Fork the whole protocol for local records:** imposes permanent merge and
230
+ security-update work where a narrow data overlay is sufficient.
231
+
232
+ ## Decision implication
233
+
234
+ The current definition “owning a path means forgoing all future kit
235
+ improvements to it” remains valid for genuine independent forks. It should no
236
+ longer be offered for canonical protocol-core paths. For those paths, the
237
+ supported local customization mechanism is a versioned consumer overlay; the
238
+ honest alternative is a separately identified and maintained code fork.
@@ -0,0 +1,282 @@
1
+ # Frontend-agent benchmarks
2
+
3
+ Research snapshot: 2026-07-22
4
+
5
+ ## Verdict
6
+
7
+ Credible frontend benchmarks now exist, but **there is no single trustworthy
8
+ "frontend capability" score**. The field measures four materially different
9
+ things:
10
+
11
+ 1. visual generation and design preference;
12
+ 2. functional browser behaviour and interaction;
13
+ 3. implementation or repair inside an existing frontend repository;
14
+ 4. design taste, accessibility, and responsive behaviour.
15
+
16
+ The strongest evidence stack for routing today is:
17
+
18
+ - **Code Arena WebDev** as the current live signal for greenfield frontend and
19
+ human preference;
20
+ - **Vision2Web** as the most promising controlled end-to-end benchmark once its
21
+ current season has results;
22
+ - **SWE-bench Multimodal**, optionally through the OpenHands Index, for repair
23
+ in existing JavaScript/frontend repositories;
24
+ - **DeepSWE** for model-effort curves, because the frontend sources generally
25
+ do not isolate effort;
26
+ - local, dated outcomes for a project's actual stack, design system,
27
+ accessibility requirements, and definition of quality.
28
+
29
+ The resolver must keep these evidence dimensions separate. Combining them is
30
+ reasonable; pretending that one benchmark jointly proves model quality,
31
+ effort, harness quality, frontend taste, and repository reliability is not.
32
+
33
+ ## Evidence map
34
+
35
+ | Source | What it actually measures | Evaluation | Current routing value | Main limitation |
36
+ |---|---|---|---|---|
37
+ | [Code Arena WebDev](https://arena.ai/leaderboard/code/webdev) | Prompt-to-app generation under an agentic web-development harness | Blinded pairwise user preference over rendered, interactive outputs | High for current greenfield frontend model/harness preference | Preference is not a pass rate; model and harness are coupled; little comparable effort data |
38
+ | [Vision2Web](https://vision2web-bench.github.io/) | Static responsive pages, interactive multi-page frontends, and full-stack sites from prototypes and requirements | VLM visual judge plus workflow-driven GUI agent | Potentially highest controlled end-to-end value | The active season's leaderboard is still empty; older-season scores are not directly comparable |
39
+ | [SWE-bench Multimodal](https://www.swebench.com/multimodal) | Real issue resolution in visual JavaScript repositories | Repository tests, including visual tests for a subset | High for existing-repository repair | Does not measure greenfield design taste; historical public GitHub tasks create exposure risk |
40
+ | [OpenHands Index](https://www.openhands.dev/blog/openhands-index) | A verified SWE-bench Multimodal subset under one OpenHands SDK, with cost/runtime | Executable benchmark plus standardized harness | Useful model comparison for repair | OpenHands performance is not automatically Claude Code or Codex performance |
41
+ | [WebGen-Bench](https://proceedings.neurips.cc/paper_files/paper/2025/hash/6841eed8bb6a2ec49e49235c8115efee-Abstract-Datasets_and_Benchmarks_Track.html) | Multi-file websites generated from requirements, including interaction | 647 manually refined cases executed by a web-navigation agent; separate appearance judge | Good methodological reference for functionality | Published model set is old; automated verifier is fallible |
42
+ | [DesignBench](https://github.com/WebPAI/DesignBench) | Generation, edit, repair, and compile repair in React, Vue, Angular, and vanilla HTML/CSS | Render similarity, compilation/code checks, and an MLLM judge | Good diagnostic taxonomy and reproducible local eval | Static public dataset and older model coverage; small isolated projects rather than mature repositories |
43
+ | [ArtifactsBench](https://github.com/Tencent-Hunyuan/ArtifactsBenchmark) | Interactive visual artifacts, including components, SVGs, and games | Temporal screenshots plus checklist-guided MLLM judge | Useful automated secondary signal | Judge bias/circularity; artifact generation rather than repository maintenance |
44
+ | [UI-Bench](https://arxiv.org/abs/2508.20410) | Holistic visual craft of text-to-app products | 4,000+ blinded expert pairwise judgments | Strong evidence about tool/product output quality | Ranks whole tools, not base models; explicitly excludes accessibility, load time, and code quality |
45
+ | [Design2Code](https://arxiv.org/abs/2403.03163) | Screenshot-to-HTML reproduction | Automatic visual metrics validated against human rankings | Useful for visual-fidelity diagnostics | Static, mostly single-page reproduction; no repository or interaction evidence |
46
+
47
+ ## 1. The best current live signal: Code Arena WebDev
48
+
49
+ Code Arena asks users to submit a web-development prompt, lets two anonymous
50
+ models build deployable apps, and has users interact with both outputs before
51
+ voting. The current implementation records the agent trajectory and aggregates
52
+ pairwise preferences using a Bradley-Terry-style ranking. Voters are instructed
53
+ to consider functionality, usability, fidelity, design, taste, and aesthetics
54
+ ([methodology](https://arena.ai/blog/code-arena/),
55
+ [original WebDev methodology](https://arena.ai/blog/webdev-arena/)).
56
+
57
+ At this snapshot the official leaderboard reports 506,528 votes:
58
+
59
+ | Configuration | Score | Status |
60
+ |---|---:|---|
61
+ | Kimi K3 | 1678 ± 17 | preliminary |
62
+ | Claude Fable 5 | 1634 ± 12 | established |
63
+ | GPT-5.6 Sol `xhigh`, Codex harness | 1630 ± 11 | established |
64
+
65
+ Fable and Sol have overlapping intervals. Kimi's apparent lead is relevant but
66
+ must remain marked preliminary. These are **model-plus-harness observations**,
67
+ not intrinsic model constants: only the Sol label exposes a comparable effort
68
+ setting, and it explicitly names the Codex harness.
69
+
70
+ The source is stronger than a static visual benchmark because prompts are live,
71
+ outputs are interactive, identities are hidden during voting, and the pool
72
+ changes with deployed models. It is also weaker than executable pass/fail tests:
73
+ a preference vote blends correctness and taste, evaluator expertise varies, the
74
+ prompt population is self-selected, and leaderboard position changes with the
75
+ opponent pool.
76
+
77
+ The seven current domains are also important for routing: reference-based
78
+ design, brand/marketing, data/analytics, consumer products, gaming,
79
+ simulations, and content-creation/editing tools. They were derived from more
80
+ than 250,000 filtered prompts, and domain leaderboards use the same evaluation
81
+ method ([category methodology](https://arena.ai/blog/new-categories-code-arena/)).
82
+ Therefore the routing source should ingest category scores rather than collapse
83
+ everything into one `frontend` number.
84
+
85
+ ## 2. The strongest prospective controlled benchmark: Vision2Web
86
+
87
+ Vision2Web most closely matches the missing end-to-end contract. Its 193 tasks
88
+ contain 918 prototype images and 1,255 test cases across 16 categories. It has
89
+ three progressively harder levels:
90
+
91
+ - static responsive webpages, evaluated separately on desktop, tablet, and
92
+ mobile;
93
+ - interactive multi-page frontend applications;
94
+ - long-horizon full-stack websites.
95
+
96
+ It evaluates visual similarity with a VLM judge and functional behaviour with a
97
+ GUI-agent verifier. Submissions include the model **and** agent framework, which
98
+ is the right unit of evidence for an agent-routing system
99
+ ([project](https://vision2web-bench.github.io/),
100
+ [paper](https://arxiv.org/abs/2603.26648),
101
+ [submission/evaluation contract](https://huggingface.co/datasets/zai-org/Vision2Web-Leaderboard)).
102
+
103
+ The leaderboard is seasonal: tasks and evaluators may change, old submissions
104
+ are re-evaluated where possible, and scores from different seasons are
105
+ explicitly not comparable. As of this snapshot, the **current season has no
106
+ results**. Historical scores visible on the project page are useful for
107
+ understanding the benchmark, but must not yet drive a current policy.
108
+
109
+ This is the first source worth promoting to a primary routing adapter once the
110
+ active season has enough submissions and reports judge versions, sample size,
111
+ and confidence. Until then it should be represented as `candidate`, not as an
112
+ empty score or inherited historical winner.
113
+
114
+ ## 3. Existing-repository frontend work: SWE-bench Multimodal
115
+
116
+ SWE-bench Multimodal contains 517 test instances from 12 mainly JavaScript
117
+ repositories. Issues include screenshots of bugs, mockups, diagrams, and visual
118
+ error context. The underlying collection contains web frameworks, UI component
119
+ libraries, mapping, charting, diagramming, and syntax-highlighting projects.
120
+ Success requires the repository's fail-to-pass and pass-to-pass tests to pass
121
+ ([benchmark overview](https://www.swebench.com/multimodal),
122
+ [ICLR paper](https://proceedings.iclr.cc/paper_files/paper/2025/file/07d6332ae36730707fddddba736d7b6c-Paper-Conference.pdf)).
123
+
124
+ This makes it the best available answer to:
125
+
126
+ > Can this agent-model-harness configuration understand a visual frontend issue,
127
+ > navigate an established JavaScript repository, and land a test-passing fix?
128
+
129
+ It does not answer whether the same configuration creates a tasteful new UI.
130
+ Only 69 tasks use pixel-level visual testing; many other tasks are correctness
131
+ or repository-navigation problems with visual context. The original baselines
132
+ are stale, and the current official leaderboard still mixes different agents
133
+ and models. Historical GitHub-derived tasks also remain exposed after release,
134
+ so future leaderboard improvements require contamination caution.
135
+
136
+ The OpenHands Index is useful as a normalized view: it runs a human-verified
137
+ frontend subset through one OpenHands SDK and reports ability, cost, and runtime
138
+ ([Index methodology](https://www.openhands.dev/blog/openhands-index)). It should
139
+ be stored as a separate harness observation, not generalized to Claude Code or
140
+ Codex.
141
+
142
+ ## 4. Functional greenfield work: WebGen-Bench and newer diagnostics
143
+
144
+ WebGen-Bench creates multi-file website codebases from 101 requirements and
145
+ tests them with 647 operation/expected-outcome cases. Two PhD reviewers refined
146
+ the cases. A WebVoyager-based agent executes them and returns `YES`, `NO`, or
147
+ `PARTIAL`; reported agreement with manual testing ranged from 86.1% to 94.4%
148
+ for the three evaluated model sets. Appearance was judged separately. In the
149
+ published evaluation, Claude 3.5 Sonnet led appearance at 3.0/5 while
150
+ DeepSeek-R1 led the general-model functional score at 27.8%
151
+ ([paper and evaluator validation](https://proceedings.neurips.cc/paper_files/paper/2025/file/6841eed8bb6a2ec49e49235c8115efee-Paper-Datasets_and_Benchmarks_Track.pdf)).
152
+
153
+ That separation between functional and visual results is valuable. The scores
154
+ are not a present-day routing table: models and harnesses are old, only 101
155
+ projects are used, and an agent judging another agent adds a measurable error
156
+ layer.
157
+
158
+ DesignBench is a good reusable taxonomy for isolated frontend work. Its 900
159
+ samples span React, Vue, Angular, and vanilla HTML/CSS across initial generation,
160
+ edits, repair of visual defects, and compilation repair. Defect categories
161
+ include occlusion, crowding, overlap, alignment, color/contrast, and overflow.
162
+ It also found very low adoption of framework-native component structures and
163
+ low UI-issue detection accuracy in the tested 2024/2025-era models
164
+ ([paper](https://arxiv.org/abs/2506.06251),
165
+ [harness](https://github.com/WebPAI/DesignBench)). It is suitable for local
166
+ diagnostic evaluation but not as a live winner feed.
167
+
168
+ ArtifactsBench offers 1,825 component, visualization, and interactive-artifact
169
+ tasks. It evaluates source plus three-step rendered screenshots against
170
+ task-specific checklists with a multimodal judge and reports 94.4% ranking
171
+ consistency with WebDev Arena. That makes it a useful automated corroborating
172
+ source, but not a substitute for independent human judgment
173
+ ([official repository](https://github.com/Tencent-Hunyuan/ArtifactsBenchmark)).
174
+
175
+ FrontendBench is conceptually attractive: its paper describes 148 prompt/test
176
+ pairs across five component-complexity levels, browser execution, generated
177
+ test scripts, and roughly 90.5% expert agreement
178
+ ([paper](https://arxiv.org/abs/2506.13832)). However, the paper's code/data
179
+ release is still described as forthcoming. Until runnable artifacts and stable
180
+ results exist, it is not practical as a source adapter.
181
+
182
+ ## 5. Taste, accessibility, and responsiveness remain distinct gaps
183
+
184
+ UI-Bench is the strongest controlled evidence for **taste**. It uses 30 prompts,
185
+ 300 generated sites, more than 4,000 comparisons, and 194 invited professionals.
186
+ Tool identities and left/right placement are hidden; the forced-choice question
187
+ is which project the expert would be more likely to deliver to a client. Its
188
+ authors deliberately avoid CLIP/FID-style automatic metrics as the primary
189
+ endpoint because those proxies can mis-rank aesthetic preference
190
+ ([paper and protocol](https://ar5iv.labs.arxiv.org/html/2508.20410)).
191
+
192
+ But UI-Bench ranks complete text-to-app products, not base models. Templates,
193
+ asset pipelines, orchestration, repair passes, and post-processing all affect
194
+ the result. It also explicitly excludes accessibility, load time, and code
195
+ quality, and evaluates desktop layouts. It cannot justify a model route by
196
+ itself.
197
+
198
+ There are smaller accessibility studies. One tested eleven component patterns
199
+ from WCAG 2.1 across ChatGPT 4o, Copilot Pro, Claude 3.7 Sonnet, and Grok 3
200
+ ([published study](https://doi.org/10.1007/s10209-025-01250-2)); another found
201
+ 308 WCAG 2.2 and cognitive-accessibility errors across six generated sites
202
+ ([ASSETS 2025 paper](https://doi.org/10.1145/3663547.3759755)). These establish
203
+ that accessibility is not implied by visual quality. Their tiny task/model sets
204
+ and stale versions make them diagnostics, not routing feeds.
205
+
206
+ Vision2Web is the clearest emerging responsiveness measure because Level 1 has
207
+ desktop, tablet, and mobile scores. With its current season empty, there is not
208
+ yet a current model comparison that jointly and robustly measures
209
+ responsiveness. DesignBench's overflow and contrast repairs are useful but do
210
+ not amount to WCAG conformance or a viewport matrix.
211
+
212
+ ## 6. Benchmarks that do not qualify as frontend-building evidence
213
+
214
+ - WebArena, VisualWebArena, BrowserGym, WorkArena, and WebVoyager primarily test
215
+ an agent **operating existing websites**. They are browser-use evidence, not
216
+ evidence that the agent can implement those websites
217
+ ([VisualWebArena](https://github.com/web-arena-x/visualwebarena),
218
+ [BrowserGym](https://github.com/ServiceNow/BrowserGym)).
219
+ - WebSight is a synthetic screenshot/HTML training dataset, not a comparative
220
+ agent benchmark.
221
+ - Design2Code is useful for screenshot fidelity but omits realistic
222
+ interaction and repository integration.
223
+ - Raw JavaScript/TypeScript subsets of general coding benchmarks do not become
224
+ frontend benchmarks unless the tasks actually exercise rendering,
225
+ interaction, or visual requirements.
226
+
227
+ ## 7. Implications for a routing evidence catalog
228
+
229
+ Every observation should preserve at least:
230
+
231
+ ```yaml
232
+ workload:
233
+ lifecycle: greenfield | edit | repair
234
+ frontend_domain: reference-design | marketing | analytics | product | game | simulation | editor
235
+ repository_context: isolated | existing-repository
236
+ quality_axis: visual-preference | visual-fidelity | functional | accessibility | responsive
237
+
238
+ configuration:
239
+ surface: codex | claude-code | openhands | other
240
+ harness: concrete-version
241
+ model: concrete-version
242
+ effort: low | medium | high | xhigh | max | unknown
243
+
244
+ evidence:
245
+ source: code-arena | vision2web | swe-bench-multimodal | other
246
+ benchmark_revision: concrete-revision-or-season
247
+ observed_at: yyyy-mm-dd
248
+ score: value
249
+ uncertainty: value-or-unknown
250
+ sample_size: value-or-unknown
251
+ status: established | preliminary | candidate | stale
252
+ ```
253
+
254
+ Routing rules should then follow these constraints:
255
+
256
+ 1. For greenfield frontend, prefer current Code Arena **domain-specific**
257
+ evidence, tempered by local outcomes.
258
+ 2. For existing-repository visual repair, prefer SWE-bench Multimodal or a
259
+ normalized OpenHands view.
260
+ 3. Promote Vision2Web when the active season has enough comparable submissions;
261
+ never carry a previous-season winner forward silently.
262
+ 4. Do not infer an effort curve from Code Arena. Combine its frontend evidence
263
+ with a separate effort benchmark such as DeepSWE and mark the inference.
264
+ 5. Treat model-plus-harness as the observed unit. A Claude model in OpenHands is
265
+ not evidence for the same model in Claude Code without corroboration.
266
+ 6. Accessibility and responsiveness require explicit constraints and local
267
+ verification until broader current leaderboards exist.
268
+ 7. Keep the maintainer's dated experience as legitimate local evidence. Public
269
+ benchmarks calibrate it; they do not automatically overwrite it.
270
+
271
+ ## Conclusion
272
+
273
+ Frontend routing is no longer evidence-free. Code Arena already supports the
274
+ claim that Kimi, Claude, and OpenAI configurations differ in real interactive
275
+ frontend preference, and it currently places Kimi K3 first provisionally, with
276
+ Fable 5 and Sol `xhigh` close behind. That result is not enough to derive a
277
+ universal model-effort rule.
278
+
279
+ The durable solution is a multi-source routing catalog: live human preference
280
+ for greenfield work, controlled visual/functional evaluation when Vision2Web is
281
+ populated, executable repository repair evidence, a separate effort curve, and
282
+ local calibration for the exact product and design system.