@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.
- package/.agents/skills/kit-update/SKILL.md +6 -3
- package/.agents/skills/setup-workflow/SKILL.md +13 -5
- package/.agents/skills/setup-workflow/assets/agent-workflow-kit-update.yml +1 -3
- package/.claude/skills/kit-update/SKILL.md +6 -3
- package/.claude/skills/setup-workflow/SKILL.md +13 -5
- package/.claude/skills/setup-workflow/assets/agent-workflow-kit-update.yml +1 -3
- package/README.md +10 -0
- package/agent-workflow-kit.package.json +8 -8
- package/docs/adr/0001-consumer-divergence-policy.md +4 -0
- package/docs/adr/0003-kit-core-and-project-extension-lifecycle.md +63 -0
- package/docs/agents/board-sync.md +1 -1
- package/docs/agents/workflow-capabilities.json +17 -0
- package/docs/research/benchlm-routing-source.md +198 -0
- package/docs/research/consumer-owned-protocol-files.md +238 -0
- package/docs/research/frontend-agent-benchmarks.md +282 -0
- package/docs/research/model-effort-routing-benchmarks.md +261 -0
- package/docs/research/provider-neutral-agent-routing.md +207 -0
- package/package.json +1 -1
- package/scripts/kit-update-pr.mjs +1 -1
- package/scripts/kit-update-pr.test.mjs +2 -0
- package/scripts/test_skill_readiness_contract.py +6 -1
- package/scripts/test_skill_setup_workflow_seeds.py +18 -17
- package/src/commands/update.mjs +52 -20
- package/src/lib/bundle.mjs +1 -1
- package/src/lib/updateCandidate.mjs +278 -50
- package/src/lib/verifyUpdateCandidate.mjs +220 -0
- package/src/lib/verifyUpdateCandidateArtifacts.mjs +78 -0
- package/src/lib/verifyUpdateCandidateProtocol.mjs +221 -0
- 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.
|