@ikon85/agent-workflow-kit 0.41.1 → 0.42.1
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/README.md +10 -0
- package/agent-workflow-kit.package.json +1 -1
- package/docs/adr/0006-routing-knowledge-access-and-policy-are-separate.md +5 -1
- package/docs/adr/0010-model-roster-replaces-the-optimization-dial.md +87 -0
- package/docs/agents/skills/orchestrate-wave.md +154 -1
- package/docs/research/agent-task-taxonomy-benchmark-coverage.md +451 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -469,6 +469,16 @@ the old way. Decision record:
|
|
|
469
469
|
|
|
470
470
|
## Release notes
|
|
471
471
|
|
|
472
|
+
### 0.42.1
|
|
473
|
+
|
|
474
|
+
- changed: `docs/agents/skills/orchestrate-wave.md`
|
|
475
|
+
|
|
476
|
+
### 0.42.0
|
|
477
|
+
|
|
478
|
+
- added: `docs/adr/0010-model-roster-replaces-the-optimization-dial.md`
|
|
479
|
+
- added: `docs/research/agent-task-taxonomy-benchmark-coverage.md`
|
|
480
|
+
- changed: `docs/adr/0006-routing-knowledge-access-and-policy-are-separate.md`
|
|
481
|
+
|
|
472
482
|
### 0.41.1
|
|
473
483
|
|
|
474
484
|
- changed: `README.md`
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Routing knowledge, access, and policy are separate
|
|
2
2
|
|
|
3
|
-
Status: accepted (2026-07-22, Program #197)
|
|
3
|
+
Status: accepted (2026-07-22, Program #197) — the optimization-dial clause is
|
|
4
|
+
superseded by
|
|
5
|
+
[ADR-0010](./0010-model-roster-replaces-the-optimization-dial.md)
|
|
6
|
+
(items 3 and the "Model preferences and optimization overrides" sentence below;
|
|
7
|
+
everything else stands)
|
|
4
8
|
|
|
5
9
|
Planning cannot safely persist a concrete recommended model. Provider catalogs
|
|
6
10
|
change, model names age, effort behavior differs by model, agent surfaces expose
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# A Model roster replaces the optimization dial
|
|
2
|
+
|
|
3
|
+
Status: accepted (2026-07-27, Program #287, Welle 18 / #294) — supersedes the
|
|
4
|
+
Routing-policy clause of
|
|
5
|
+
[ADR-0006](./0006-routing-knowledge-access-and-policy-are-separate.md)
|
|
6
|
+
|
|
7
|
+
ADR-0006 made "optimization goals and optional advanced overrides" inputs of
|
|
8
|
+
the Routing policy, and setup asked the user to pick Balanced, Quality, or
|
|
9
|
+
Cost. That dial cannot be made to work. The goal is always the right model for
|
|
10
|
+
the job, and a cheap-but-weak model can cost more per completed task than a
|
|
11
|
+
strong one — so a Cost dial does not express a preference the resolver can act
|
|
12
|
+
on without knowing cost per *completed* task, which no benchmark owner
|
|
13
|
+
publishes. Meanwhile the dial was never read: `readRoutingProfile` has zero
|
|
14
|
+
callers and `resolveRoute` always returns `routing-infrastructure-missing`.
|
|
15
|
+
|
|
16
|
+
We decided the user control is a **Model roster** — a positive list of
|
|
17
|
+
model-and-effort pairs the user authorizes — plus three **Standard routes**
|
|
18
|
+
that decide when no decisive evidence covers the resolved Routing intent.
|
|
19
|
+
|
|
20
|
+
1. **The optimization dial is removed everywhere it appears, not only from the
|
|
21
|
+
Routing policy.** The Routing intent loses its optimization goal too. What a
|
|
22
|
+
user is willing to spend is a Routing profile choice, not a property of the
|
|
23
|
+
work; leaving the field in the intent while the resolver ignores it would
|
|
24
|
+
leave a dead concept in the domain language. The glossary entry and the
|
|
25
|
+
intent schema both drop it.
|
|
26
|
+
2. **`unreachable` and `missingInfrastructure` are kept.** They are unrelated to
|
|
27
|
+
the dial, and the resolver's fallback semantics depend on them.
|
|
28
|
+
3. **Transport authorization belongs to the Routing profile.** Selecting Claude
|
|
29
|
+
Code and Codex does not authorize either to drive the other's CLI. ADR-0006
|
|
30
|
+
is already explicit that a detected transport is not an approved one; this
|
|
31
|
+
ADR names where the approval is stored — the global profile document, as its
|
|
32
|
+
own interview answer, narrowable per project by intersection only.
|
|
33
|
+
4. **The Routing policy is derived, not stored.** The profile is the stored
|
|
34
|
+
personal choice and carries no revision. The policy is the constraint object
|
|
35
|
+
derived from profile plus inventory for one dispatch, and it carries the
|
|
36
|
+
composed revision so a Dispatch receipt can prove which constraints applied.
|
|
37
|
+
5. **Cost is displayed and used as a tiebreak inside a cohort of identical
|
|
38
|
+
currency and unit — never as the ranking motor.** This is what the Cost dial
|
|
39
|
+
was reaching for, at the only altitude where it is honest.
|
|
40
|
+
6. **The Kit ships no opinion about which models are good.** Excluding a model
|
|
41
|
+
is one user's preference under one subscription, not a default truth. The
|
|
42
|
+
inventory stays unfiltered per ADR-0006; the roster authorizes.
|
|
43
|
+
|
|
44
|
+
## `inherit` is retained, and the condition that would have removed it
|
|
45
|
+
|
|
46
|
+
This ADR was drafted to remove `inherit` entirely if verify-spike 18c (#296)
|
|
47
|
+
could not prove that the session-default model-and-effort pair is readable back
|
|
48
|
+
and identifiable against the roster. **The spike came back positive, so
|
|
49
|
+
`inherit` is retained** in the constrained form: inheritance is permitted only
|
|
50
|
+
when the session-default pair is attested *and* inside the effective roster,
|
|
51
|
+
and otherwise blocks.
|
|
52
|
+
|
|
53
|
+
The condition under which `inherit` is removed entirely therefore stands as a
|
|
54
|
+
standing test, not a settled negative: **if the session-default pair ceases to
|
|
55
|
+
be readable back on a surface, `inherit` is removed for that surface rather
|
|
56
|
+
than left as an unprovable path.** A receipt that cannot name the pair it
|
|
57
|
+
inherited is not proof of anything.
|
|
58
|
+
|
|
59
|
+
The spike qualifies the retention with an identification requirement. One and
|
|
60
|
+
the same Claude Code session reports its default model under three different
|
|
61
|
+
identifiers — `opus[1m]` in `~/.claude/settings.json`, `claude-opus-5[1m]` in
|
|
62
|
+
the session's init event, and `claude-opus-5` in the server-returned
|
|
63
|
+
`message.model`. The attested channel is the one that drops the context
|
|
64
|
+
variant. Roster identification therefore requires an explicit normalization
|
|
65
|
+
rule and a decision on whether the context variant is part of pair identity;
|
|
66
|
+
until that rule exists, "identified against the roster" is not a check a
|
|
67
|
+
receipt may claim to have made.
|
|
68
|
+
|
|
69
|
+
## Consequences
|
|
70
|
+
|
|
71
|
+
- ADR-0006's Routing-policy clause (item 3, "optimization goals and optional
|
|
72
|
+
advanced overrides") and its closing sentence "Model preferences and
|
|
73
|
+
optimization overrides remain optional advanced settings" no longer describe
|
|
74
|
+
the system. The rest of ADR-0006 — the separation of Evidence catalog, Access
|
|
75
|
+
graph, and Routing policy; detection is not authorization; the surface
|
|
76
|
+
adapter capability declaration; the Dispatch receipt requirement — stands
|
|
77
|
+
unchanged and remains the foundation this ADR builds on.
|
|
78
|
+
- `advanced.optimization` is removed from the Routing profile schema, and
|
|
79
|
+
`optimization` from the Routing policy schema, each with a deterministic
|
|
80
|
+
version-aware decoder that records the drop rather than silently discarding a
|
|
81
|
+
choice the user made.
|
|
82
|
+
- Setup's Balanced / Quality / Cost prompt is replaced by roster admission and
|
|
83
|
+
Standard-route nomination.
|
|
84
|
+
- Model-and-effort is pair identity. Effort domains are per model — some models
|
|
85
|
+
support an effort level others do not, and some carry no effort axis at all —
|
|
86
|
+
so a pair is authorized as a pair, never as a model with an effort attached
|
|
87
|
+
afterwards.
|
|
@@ -2,12 +2,165 @@
|
|
|
2
2
|
<!-- agent-workflow-kit: project-extension/v1; skill=orchestrate-wave -->
|
|
3
3
|
# Project layer — orchestrate-wave
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Filled 2026-07-27 after Welle 18 (#289) ran the whole loop end-to-end — recon,
|
|
6
|
+
build, integrate, verify, land, tag, publish — and proved the recipe below. The
|
|
7
|
+
sections were deliberately empty until then; the generic fallback carried that
|
|
8
|
+
run and cost it a `degraded` start plus a hand-derivation of every command here.
|
|
9
|
+
|
|
10
|
+
This repo has **no database, no dev server, no typecheck step and no browser
|
|
11
|
+
surface**, so several generic phases collapse to very little. Where that is the
|
|
12
|
+
case the section says so rather than inventing a command.
|
|
6
13
|
|
|
7
14
|
## §Setup
|
|
15
|
+
|
|
16
|
+
Nothing to start. No DB, no tunnel, no service, no dev server — Phase 0's
|
|
17
|
+
"start what live-verify needs" is a no-op here.
|
|
18
|
+
|
|
19
|
+
Two things that are *not* no-ops:
|
|
20
|
+
|
|
21
|
+
- `git config core.hooksPath .githooks` once per clone (worktrees inherit it).
|
|
22
|
+
- `npm install` in the wave worktree after fast-forwarding to `origin/main` —
|
|
23
|
+
the lockfile is untracked, so dependencies do not travel with the branch.
|
|
24
|
+
|
|
8
25
|
## §Builder Commands
|
|
26
|
+
|
|
27
|
+
Per-slice gate, run by the implementer before reporting back:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npm test # test:node (node --test) + test:python (unittest)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The fast pre-commit lints run automatically via `.githooks/pre-commit`
|
|
34
|
+
(~3 s, skill/manifest lints). A slice is not "green" on the fast lints alone.
|
|
35
|
+
|
|
9
36
|
## §Builder Hard Rules
|
|
37
|
+
|
|
38
|
+
- **Never `--no-verify`.** pre-commit and pre-push are the backstop, not an
|
|
39
|
+
obstacle.
|
|
40
|
+
- **English-first prose** in every published skill; the language census in the
|
|
41
|
+
maintainer suite enforces it.
|
|
42
|
+
- **No hardcoded board values** — labels, headings, field IDs and status names
|
|
43
|
+
come from `docs/agents/board-sync.md`; the portability lint blocks literals.
|
|
44
|
+
- **Dual-surface mirror in the same PR.** A changed `.claude/skills/<s>/SKILL.md`
|
|
45
|
+
needs its `.agents/skills/<s>/SKILL.md` mirror via `codex-adapter-sync` in the
|
|
46
|
+
same PR, never after merge.
|
|
47
|
+
- **Shipped-file changes must preserve the manifest/reconcile contract.**
|
|
48
|
+
|
|
10
49
|
## §Integration Suites
|
|
50
|
+
|
|
51
|
+
Both frameworks, every time — `npm test` runs both and a red in either is a red:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
npm test
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `test:node` — `node --test` (665 tests as of 0.42.0)
|
|
58
|
+
- `test:python` — `python3 -m unittest discover -s scripts -p 'test_*.py'`
|
|
59
|
+
(522 tests as of 0.42.0)
|
|
60
|
+
|
|
61
|
+
There is no typecheck step in this repo; do not look for one. Several
|
|
62
|
+
negative-path tests print `[FAIL] …` lines **by design** — only the runner's own
|
|
63
|
+
summary and exit code decide red or green.
|
|
64
|
+
|
|
11
65
|
## §Verify Recipe
|
|
66
|
+
|
|
67
|
+
Central verify is the `/local-ci` full gate, run from the wave worktree root.
|
|
68
|
+
It mirrors the CI `test` job step for step:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
git fetch origin main
|
|
72
|
+
npm test
|
|
73
|
+
npm run kit:staleness
|
|
74
|
+
npm run release:guard -- --base "$(git merge-base origin/main HEAD)"
|
|
75
|
+
npm pack --dry-run
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- **No branch-name-derived guard exists here**, so the generic skill's warning
|
|
79
|
+
about an integrated verify branch blocking with no baseline does not apply.
|
|
80
|
+
No skip or override is needed.
|
|
81
|
+
- **No browser, no headless login, no screenshots, no console check, no DB
|
|
82
|
+
compare, no design/brand check.** This repo ships text; "assert the AC as a
|
|
83
|
+
user-visible outcome" means reading the artefact the slice produced (an ADR,
|
|
84
|
+
a skill body, a script's output) and the tests that pin it.
|
|
85
|
+
- **`release:guard` red with "shipped delta has no version bump" is not a
|
|
86
|
+
failure of the wave** — it means the wave touched the shipped consumer set and
|
|
87
|
+
the release metadata is missing. See §Landing.
|
|
88
|
+
- **A flaky red is possible.** `scripts/codex-exec.test.mjs` contains
|
|
89
|
+
timing-sensitive tests that fail under CPU contention (#345). Re-run the single
|
|
90
|
+
test in isolation before treating it as a real red; a test that is green in
|
|
91
|
+
isolation and red under load is contention, not the wave.
|
|
92
|
+
|
|
12
93
|
## §Headless Login
|
|
94
|
+
|
|
95
|
+
Not applicable. No application, no browser surface, no authenticated session.
|
|
96
|
+
Never invent a login recipe for this repo.
|
|
97
|
+
|
|
13
98
|
## §Landing
|
|
99
|
+
|
|
100
|
+
**One PR for the whole wave**, base `main`. `main` is protected by the
|
|
101
|
+
`main protection` ruleset: a PR is required, the CI job **`test`** (job name, not
|
|
102
|
+
the workflow name `CI`) must be green with the branch up to date, and there are
|
|
103
|
+
no bypass actors — `gh pr merge --admin` does not help.
|
|
104
|
+
|
|
105
|
+
- `Closes #<n>` on its own line per leaf; `Part of #<anchor>` for the anchor,
|
|
106
|
+
never `closes`.
|
|
107
|
+
- Body via temp file + `--body-file`, and **run `gh` from the repo** (it resolves
|
|
108
|
+
the target repo from the cwd).
|
|
109
|
+
|
|
110
|
+
**Anchor reconcile, on PR create and on merge:**
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
python3 scripts/board-sync.py anchor-sync <anchor#> --dry-run # review first
|
|
114
|
+
python3 scripts/board-sync.py anchor-sync <anchor#>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`anchor-sync` only works on a **promoted** anchor whose body carries a slice
|
|
118
|
+
table between `<!-- slice-table:start -->` and `<!-- slice-table:end -->`. A
|
|
119
|
+
stub-shaped anchor (a bullet list of slices, `wave-stub` label) makes it a no-op
|
|
120
|
+
that exits 1 with "no slice table found — nothing to sync". That is a promotion
|
|
121
|
+
gap, not a sync failure: install the table with the columns
|
|
122
|
+
`| # | Status | Slice | Sub-Issue | Gate | closes/refs |`, drop the `wave-stub`
|
|
123
|
+
label, then re-run. Do not hand-maintain the Status cells afterwards — they are
|
|
124
|
+
regenerated from the board.
|
|
125
|
+
|
|
126
|
+
**Completion, after merge:**
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
python3 scripts/board-sync.py add --issue <anchor#> --status-role done
|
|
130
|
+
gh issue close <anchor#> --reason completed --comment "…"
|
|
131
|
+
python3 scripts/board-sync.py item-of --issue <anchor#> # re-read: status must be Done
|
|
132
|
+
python3 scripts/board-sync.py parent-of <anchor#> # Program-PRD?
|
|
133
|
+
python3 scripts/board-sync.py program-sync <prd#> # after the anchor is Done
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Closing the issue does **not** move the board field — set the field, then re-read
|
|
137
|
+
both.
|
|
138
|
+
|
|
139
|
+
**New issues** go through `python3 scripts/board-sync.py create --title … --body-file …`,
|
|
140
|
+
never a bare `gh issue create`.
|
|
141
|
+
|
|
142
|
+
### Release lockstep
|
|
143
|
+
|
|
144
|
+
There is no deploy and no migration, but there **is** a publication gate, and a
|
|
145
|
+
wave that touches the shipped consumer set (anything in the kit manifest —
|
|
146
|
+
including `docs/adr/*` and `docs/research/*`) drags it along.
|
|
147
|
+
|
|
148
|
+
1. `npm run release:prepare -- --base origin/main` reports the delta and a
|
|
149
|
+
`recommendedBump` without writing anything.
|
|
150
|
+
2. **The confirmed Semver is the one human gate.** Ask, unless an explicit
|
|
151
|
+
end-to-end mandate covers release preparation. That confirmed version then
|
|
152
|
+
authorizes metadata, merge, tag *and* publish — do not ask again after merge.
|
|
153
|
+
3. `npm run release:prepare -- --version <x.y.z>`, commit the bump.
|
|
154
|
+
4. Merge the PR. Merging **integrates only**; it cannot publish.
|
|
155
|
+
5. Verify on canonical `main`: tip == merge commit, `package.json` version
|
|
156
|
+
matches, no existing tag. Then `git tag -a v<x.y.z> <main-tip> -m "…"` and
|
|
157
|
+
push. The annotated tag on the `main` tip is the sole publication intent.
|
|
158
|
+
6. **A red release run does not prove nothing was published.** Read
|
|
159
|
+
`npm view @ikon85/agent-workflow-kit version` and `gh release view v<x.y.z>`
|
|
160
|
+
directly, plus `npm run release:status` (cache-bypassing), before reacting.
|
|
161
|
+
7. **Recovery is `gh workflow run release.yml -f tag=v<x.y.z>` on the existing
|
|
162
|
+
tag** — the reconciler is idempotent. **Never recover by bumping the version.**
|
|
163
|
+
|
|
164
|
+
The release workflow runs the full suite *after* the tag is pushed, so a flaky
|
|
165
|
+
test strands an already-published tag. That is the recovery path above, not a
|
|
166
|
+
reason to re-tag.
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
# Agent task taxonomy and benchmark coverage
|
|
2
|
+
|
|
3
|
+
**Researched:** 2026-07-26
|
|
4
|
+
**Question:** Which agent task classes do recognized benchmark owners actually
|
|
5
|
+
distinguish, which of those classes carry evidence strong enough to pick a
|
|
6
|
+
model **and** an effort level, and how does that generalize the Kit's existing
|
|
7
|
+
frontend taxonomy?
|
|
8
|
+
|
|
9
|
+
## Verdict
|
|
10
|
+
|
|
11
|
+
Benchmark owners distinguish **more task classes than the Kit currently models,
|
|
12
|
+
but far fewer domains**. Of the seven candidate classes in the brief, six are
|
|
13
|
+
directly measured by an owner today; one (architecture/judgment work) exists
|
|
14
|
+
only as a static knowledge quiz, not as an agent measurement.
|
|
15
|
+
|
|
16
|
+
Three findings drive the proposed schema:
|
|
17
|
+
|
|
18
|
+
1. **Effort identity is the scarce resource, not the task class.** Only four
|
|
19
|
+
sources publish a row that names model **and** reasoning effort **and**
|
|
20
|
+
harness: DeepSWE, the Terminal-Bench leaderboard, Artificial Analysis'
|
|
21
|
+
per-evaluation leaderboards, and Scale's SWE Atlas boards. Everything else
|
|
22
|
+
collapses at least one of the three.
|
|
23
|
+
2. **Almost nobody reports per-domain scores.** Code Arena is the only source in
|
|
24
|
+
this survey that publishes a separate score per subject-matter domain. Every
|
|
25
|
+
other owner publishes one aggregate over a task mix whose composition is
|
|
26
|
+
documented but not scored separately. The Kit's `domain` segment is therefore
|
|
27
|
+
`general` for most of the taxonomy — that is a coverage fact, not a schema
|
|
28
|
+
defect.
|
|
29
|
+
3. **No owner publishes cost per *completed* task.** Every cost figure found is
|
|
30
|
+
cost per *attempted* task (or per whole run). Cost per success is derivable
|
|
31
|
+
but is an inference the Kit must label as such.
|
|
32
|
+
|
|
33
|
+
## 0. Method: what counts as decisive
|
|
34
|
+
|
|
35
|
+
The repo already carries a per-source `decisive` boolean
|
|
36
|
+
(`src/lib/frontendWorkloads.mjs`). This note evaluates it against a three-part
|
|
37
|
+
test, because a single boolean turned out to hide the interesting failure mode:
|
|
38
|
+
|
|
39
|
+
| Dimension | Question | Failure mode |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| **Triple match** | Does the owner measure this exact `workload:domain:axis`, or is it an aggregate the Kit is slicing? | Aggregate laundering |
|
|
42
|
+
| **Configuration identity** | Does the published row name the reasoning effort? | Effort collapse |
|
|
43
|
+
| **Harness identity** | Does the published row name the agent/scaffold and its version? | Harness collapse |
|
|
44
|
+
|
|
45
|
+
**Decisive** = all three hold. **Diagnostic** = the owner measures something
|
|
46
|
+
relevant but at least one dimension is collapsed, estimated, or stale.
|
|
47
|
+
|
|
48
|
+
This is a stricter reading than the current boolean. Under it, two sources the
|
|
49
|
+
repo currently marks `decisive: true` are decisive on the triple and on harness,
|
|
50
|
+
but **not** on effort — see §4.
|
|
51
|
+
|
|
52
|
+
## 1. Proposed taxonomy: `workload:domain:axis`
|
|
53
|
+
|
|
54
|
+
The identity format is unchanged: three colon-free segments, exactly one axis
|
|
55
|
+
per observation (`evidenceWorkloadIdentity` in `src/lib/routingIntent.mjs`).
|
|
56
|
+
|
|
57
|
+
### 1.1 Containment of the existing frontend taxonomy
|
|
58
|
+
|
|
59
|
+
The existing frontend vocabulary is a **strict subset**, unchanged:
|
|
60
|
+
|
|
61
|
+
- workloads `frontend-greenfield`, `frontend-repository-repair` keep their
|
|
62
|
+
identifiers and their meaning (lifecycle × repository context);
|
|
63
|
+
- all eight frontend domains (`general`, `reference-design`, `marketing`,
|
|
64
|
+
`analytics`, `product`, `game`, `simulation`, `editor`) keep their identifiers
|
|
65
|
+
and remain valid **only** for the two frontend workloads;
|
|
66
|
+
- all five existing axes keep their identifiers. Four (`visual-preference`,
|
|
67
|
+
`visual-fidelity`, `accessibility`, `responsive`) stay frontend-scoped; one
|
|
68
|
+
(`functional`) is promoted to the general executable-verifier axis, which is
|
|
69
|
+
exactly how it is already used for `openhands-frontend`.
|
|
70
|
+
|
|
71
|
+
Nothing in `FRONTEND_SOURCE_CLAIMS`, `classifyFrontendWorkload`, or
|
|
72
|
+
`frontendEvidenceWorkload` needs a value change to fit under the general
|
|
73
|
+
taxonomy. The generalization is additive.
|
|
74
|
+
|
|
75
|
+
### 1.2 Workloads
|
|
76
|
+
|
|
77
|
+
A workload is **what the agent is asked to change or produce**, defined by
|
|
78
|
+
lifecycle × repository context — the same rule the frontend pair already
|
|
79
|
+
follows.
|
|
80
|
+
|
|
81
|
+
| Workload | Definition | Owner that measures it |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `frontend-greenfield` | New UI from a prompt or prototype, isolated from a repo | [Code Arena WebDev](https://arena.ai/leaderboard/code/webdev) |
|
|
84
|
+
| `frontend-repository-repair` | Fix/extend UI inside an established repo | [SWE-bench Multimodal](https://www.swebench.com/multimodal), [OpenHands Index](https://index.openhands.dev/) |
|
|
85
|
+
| `repository-repair` | Issue → patch in an established non-frontend repo | [DeepSWE](https://deepswe.datacurve.ai/), [SWE-bench Verified](https://www.swebench.com/verified) |
|
|
86
|
+
| `repository-comprehension` | Answer questions about an existing system without changing it | [SWE Atlas Codebase QnA](https://labs.scale.com/leaderboard/sweatlas-qna) |
|
|
87
|
+
| `code-transformation` | Restructure code while preserving behavior (refactor, migration) | [SWE Atlas Refactoring](https://labs.scale.com/leaderboard/sweatlas-refactoring), [RefactorBench](https://arxiv.org/abs/2503.07832) |
|
|
88
|
+
| `test-authoring` | Write tests that catch a stated regression | [SWE Atlas Test Writing](https://labs.scale.com/leaderboard/sweatlas-tw) |
|
|
89
|
+
| `greenfield-application` | Build a new non-frontend app/library from a spec | [OpenHands Index](https://www.openhands.dev/blog/openhands-index) (commit0) |
|
|
90
|
+
| `algorithmic-synthesis` | Self-contained competitive-programming style problems | [LiveCodeBench](https://livecodebench.github.io/) |
|
|
91
|
+
| `terminal-operations` | End-to-end system/CLI work in a real environment | [Terminal-Bench](https://www.tbench.ai/leaderboard/terminal-bench/2.1) |
|
|
92
|
+
| `tool-orchestration` | Multi-turn tool use with a simulated user under a written policy | [τ²-bench / τ³-bench](https://github.com/sierra-research/tau2-bench), [BFCL](https://gorilla.cs.berkeley.edu/leaderboard.html) |
|
|
93
|
+
| `knowledge-deliverable` | Produce a professional artifact (doc, sheet, slides, diagram) | [GDPval](https://arxiv.org/pdf/2510.04374), [GDPval-AA v2](https://artificialanalysis.ai/evaluations/gdpval-aa) |
|
|
94
|
+
| `architecture-reasoning` | Judge architectural trade-offs and system-level constraints | [SAKE](https://arxiv.org/abs/2606.29520) — **knowledge quiz only, not agentic** |
|
|
95
|
+
| `long-horizon-autonomy` | Cross-suite: how long an unattended run stays correct | [METR Time Horizon 1.1](https://metr.org/blog/2026-1-29-time-horizon-1-1/) |
|
|
96
|
+
| `long-context-operation` | Cross-suite: accuracy as a function of input length | [AA-LCR](https://artificialanalysis.ai/evaluations/artificial-analysis-long-context-reasoning), [NoLiMa](https://arxiv.org/abs/2502.05167) |
|
|
97
|
+
|
|
98
|
+
The last two are deliberately **cross-cutting** workloads rather than axes: their
|
|
99
|
+
owners run their own task suites, so an observation about them is not a slice of
|
|
100
|
+
another workload's evidence.
|
|
101
|
+
|
|
102
|
+
Mapping to the brief's candidate list:
|
|
103
|
+
|
|
104
|
+
| Candidate class in the brief | Verified? | Maps to |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| mechanical / refactoring | **yes** | `code-transformation` (SWE Atlas Refactoring is live: [Scale, 2026-05-07](https://scale.com/blog/swe-atlas-complete)) |
|
|
107
|
+
| algorithmics | **yes** | `algorithmic-synthesis` (LiveCodeBench scenarios) |
|
|
108
|
+
| debugging / repository repair | **yes** | `repository-repair` |
|
|
109
|
+
| frontend design | **yes** | `frontend-greenfield` (Code Arena domains) |
|
|
110
|
+
| architecture / judgment work | **partly** | `architecture-reasoning` exists only as multiple choice (SAKE); `knowledge-deliverable` is the closest *agentic* judgment proxy |
|
|
111
|
+
| long-horizon agentic work | **yes** | `long-horizon-autonomy` + `terminal-operations` |
|
|
112
|
+
| tool-use / orchestration | **yes** | `tool-orchestration` |
|
|
113
|
+
|
|
114
|
+
Two classes the brief did not name, but owners do distinguish and score
|
|
115
|
+
separately, were added: `repository-comprehension` and `test-authoring` — both
|
|
116
|
+
are separate SWE Atlas leaderboards, and `information gathering` / `software
|
|
117
|
+
testing` are separate OpenHands Index categories.
|
|
118
|
+
|
|
119
|
+
### 1.3 Domains
|
|
120
|
+
|
|
121
|
+
A domain is a **subject-matter partition the owner scores separately**. The rule
|
|
122
|
+
is deliberately strict: if the owner publishes only an aggregate, the domain is
|
|
123
|
+
`general`, even when the owner documents a richer task mix.
|
|
124
|
+
|
|
125
|
+
| Workload | Allowed domains | Basis |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `frontend-greenfield`, `frontend-repository-repair` | the existing eight | Code Arena publishes per-domain boards derived from >250k clustered prompts ([category methodology](https://arena.ai/blog/new-categories-code-arena/)) |
|
|
128
|
+
| `tool-orchestration` | `general`, `airline`, `retail`, `telecom`, `banking` | Sierra ships the domains separately ([tau2-bench](https://github.com/sierra-research/tau2-bench)); AA publishes [τ²-Bench Telecom](https://artificialanalysis.ai/evaluations/tau2-bench) and [τ³-Banking](https://artificialanalysis.ai/evaluations/tau3-banking) as separate boards |
|
|
129
|
+
| everything else | `general` | owner publishes one aggregate |
|
|
130
|
+
|
|
131
|
+
Documented-but-unscored partitions (record as metadata, **never** as a domain
|
|
132
|
+
segment, or the Kit is laundering an aggregate):
|
|
133
|
+
|
|
134
|
+
- DeepSWE: 113 tasks over 91 repos, TypeScript 35 / Go 34 / Python 34 /
|
|
135
|
+
JavaScript 5 / Rust 5 — one aggregate pass@1
|
|
136
|
+
([DeepSWE methodology](https://deepswe.datacurve.ai/blog/deepswe)).
|
|
137
|
+
- Terminal-Bench 2.x: software engineering, ML, security, data science, system
|
|
138
|
+
administration — one aggregate accuracy
|
|
139
|
+
([tbench.ai](https://www.tbench.ai/), [arXiv 2601.11868](https://arxiv.org/abs/2601.11868)).
|
|
140
|
+
- SWE Atlas Codebase QnA: architecture, root-cause analysis, code onboarding,
|
|
141
|
+
security, API integration — one aggregate resolve rate
|
|
142
|
+
([Scale blog](https://scale.com/blog/swe-atlas-complete)).
|
|
143
|
+
- GDPval: 44 occupations across 9 sectors; the AA leaderboard reports an
|
|
144
|
+
aggregate Elo ([GDPval-AA v2](https://artificialanalysis.ai/evaluations/gdpval-aa)).
|
|
145
|
+
Whether OpenAI's own release publishes per-occupation win rates is
|
|
146
|
+
**unverified** — `openai.com/index/gdpval/` returned HTTP 403 to automated
|
|
147
|
+
fetch on 2026-07-26; the paper is at
|
|
148
|
+
[arXiv 2510.04374](https://arxiv.org/pdf/2510.04374).
|
|
149
|
+
- LiveCodeBench reports Easy/Medium/Hard columns. That is **difficulty, not
|
|
150
|
+
domain** — putting it in the `domain` segment would be schema abuse.
|
|
151
|
+
|
|
152
|
+
### 1.4 Axes
|
|
153
|
+
|
|
154
|
+
An axis is the **quality dimension measured**. Five exist; six are proposed.
|
|
155
|
+
|
|
156
|
+
| Axis | Status | Meaning | Grader |
|
|
157
|
+
|---|---|---|---|
|
|
158
|
+
| `functional` | existing, generalized | executable verifier pass/fail | program |
|
|
159
|
+
| `visual-fidelity` | existing, frontend-scoped | similarity to a reference rendering | metric / VLM |
|
|
160
|
+
| `visual-preference` | existing, frontend-scoped | blinded human pairwise on rendered UI | human |
|
|
161
|
+
| `accessibility` | existing, frontend-scoped | WCAG-style conformance | tool / human |
|
|
162
|
+
| `responsive` | existing, frontend-scoped | correctness across a viewport matrix | program / VLM |
|
|
163
|
+
| `rubric-quality` | **new** | structured rubric score where no single pass/fail exists | rubric + judge |
|
|
164
|
+
| `answer-accuracy` | **new** | correctness of an answer about a system or document | judge / key |
|
|
165
|
+
| `blind-preference` | **new** | blinded pairwise ranking of a non-visual deliverable | human **or** LLM judge — record which |
|
|
166
|
+
| `policy-adherence` | **new** | compliance with a written domain policy during tool use | program |
|
|
167
|
+
| `time-horizon` | **new** | human task length at a fixed success probability | fitted from runs |
|
|
168
|
+
| `context-retention` | **new** | accuracy as a function of input length | program / judge |
|
|
169
|
+
|
|
170
|
+
`visual-preference` is conceptually the frontend special case of
|
|
171
|
+
`blind-preference`; it is kept as a distinct identifier for backward
|
|
172
|
+
compatibility, and because its grader is always human whereas GDPval-AA v2 uses
|
|
173
|
+
an LLM judge ([AA GDPval-AA](https://artificialanalysis.ai/evaluations/gdpval-aa))
|
|
174
|
+
while OpenAI's own GDPval uses human expert graders
|
|
175
|
+
([arXiv 2510.04374](https://arxiv.org/pdf/2510.04374)). An adapter that merges
|
|
176
|
+
those two grader types into one axis is fabricating comparability.
|
|
177
|
+
|
|
178
|
+
### 1.5 Cost is not an axis
|
|
179
|
+
|
|
180
|
+
`validateObservation` in `src/lib/routingCatalog.mjs` already carries
|
|
181
|
+
`cost.{amount,currency,unit}` on every observation. Cost must stay there. Making
|
|
182
|
+
it an axis would produce identities like `repository-repair:general:cost` that
|
|
183
|
+
have no owner behind them, and would let a cheap-but-failing configuration
|
|
184
|
+
outrank a working one. See §6 for what `unit` may legitimately contain.
|
|
185
|
+
|
|
186
|
+
## 2. Source table
|
|
187
|
+
|
|
188
|
+
`Decisive` uses the §0 three-part test. `Freshness` is what was observable on
|
|
189
|
+
2026-07-26; where an owner publishes no cadence statement, that is stated.
|
|
190
|
+
|
|
191
|
+
| Source | Workloads claimed | Axes | Decisive? | Freshness / cadence | Machine-ingestible artifact |
|
|
192
|
+
|---|---|---|---|---|---|
|
|
193
|
+
| **DeepSWE v1.1** (DataCurve) | `repository-repair:general` | `functional` | **Yes** — `reasoning_effort`, `harness: mini-swe-agent`, `config`, `ci_method` all in the JSON | `generated_at` 2026-07-25T03:13Z, latest job finished 2026-07-25; **no published cadence** | [`/artifacts/v1.1/leaderboard-live.json`](https://deepswe.datacurve.ai/artifacts/v1.1/leaderboard-live.json) (HTTP 200, ~62 KB) |
|
|
194
|
+
| **Terminal-Bench 2.1 leaderboard** (Laude Institute) | `terminal-operations:general` | `functional` | **Yes** — columns are Rank, Agent, Model, **Effort**, Accuracy ±CI, Date, Agent Org, Model Org, PR, Hacks, Cost | latest submissions 2026-07-11; **no cadence statement** | **None found.** `www.tbench.ai/api/leaderboard` → 404. Task registry only: [`registry.json`](https://raw.githubusercontent.com/harbor-framework/terminal-bench/main/registry.json). Run-log repos exist but are empty scaffolds ([terminal-bench-2-leaderboard](https://github.com/laude-institute/terminal-bench-2-leaderboard)) |
|
|
195
|
+
| **Artificial Analysis — per-evaluation boards** | `terminal-operations`, `tool-orchestration`, `knowledge-deliverable`, `long-context-operation`, `algorithmic-synthesis` (all `:general`) | `functional`, `policy-adherence`, `blind-preference`, `answer-accuracy` | **Yes** for boards that expose effort-variant rows — verified on [Terminal-Bench v2.1](https://artificialanalysis.ai/evaluations/terminalbench-v2-1) ("GPT-5.6 Sol (xhigh)", "GPT-5.6 Terra (max)", harness named as *Terminus 2 in an e2b sandbox*) | Intelligence Index v4.1 current; Coding Agent Index v1.3 current with a May–Jul 2026 change history; **AA states no fixed refresh schedule** ([methodology](https://artificialanalysis.ai/methodology/intelligence-benchmarking)) | [Data API](https://artificialanalysis.ai/data-api/docs) — snake_case JSON; cost lives under `artificial_analysis_intelligence_index_cost.cost_per_task`. **There is no `costPerTaskUsd` field** (see §6). Attribution required at all tiers |
|
|
196
|
+
| **Artificial Analysis — Coding Agent Index v1.3** | `repository-repair`, `terminal-operations`, `repository-comprehension` (`:general`) | `functional`, `answer-accuracy` | **No — effort collapse by design.** AA states: *"Unless otherwise specified, we use each agent's default reasoning settings so the benchmark reflects the default user experience"* | v1.3 current, history May–Jul 2026 | [coding-agents methodology](https://artificialanalysis.ai/methodology/coding-agents-benchmarking) |
|
|
197
|
+
| **SWE Atlas** (Scale) — QnA / Test Writing / Refactoring | `repository-comprehension`, `test-authoring`, `code-transformation` (`:general`) | `answer-accuracy`, `rubric-quality` | **Yes on QnA and Test Writing** — rows read e.g. *"Opus 4.8 (Claude Code) xhigh"*; native scaffold named, effort in the label, resolve rate ± CI. **Refactoring: effort exposure unverified** — the rendered rows observed showed model + harness + `48.57±6.73` but no effort token | Refactoring board went live with [Scale's 2026-05-07 post](https://scale.com/blog/swe-atlas-complete); dataset repo pushed 2026-07-20; **no cadence statement** | Dataset + run config only, Apache-2.0: [scaleapi/SWE-Atlas](https://github.com/scaleapi/SWE-Atlas). **No results JSON found** |
|
|
198
|
+
| **Code Arena WebDev** (Arena) | `frontend-greenfield:{8 domains}` | `visual-preference` | **Partly.** Triple ✓ (only source with real per-domain boards), harness ✓ (encoded in labels such as `-codex`), **effort ✗** — the board columns are Rank, Model, Organization, License, Score, Votes, Price ($/M), Context Length; effort appears only when a lab bakes it into the model label | live pairwise voting; page timestamp 2026-07-24, 477,155 votes observed on the WebDev board; changes tracked in the [leaderboard changelog](https://arena.ai/blog/leaderboard-changelog/) | **No leaderboard API found.** Ranking code is open ([arena-rank](https://github.com/lmarena/arena-rank)); raw votes are released as a HF dataset (`lmarena-ai/arena-human-preference-140k`) but that is votes, not the published board |
|
|
199
|
+
| **OpenHands Index** | `repository-repair`, `greenfield-application`, `frontend-repository-repair`, `test-authoring`, `repository-comprehension` (`:general`) | `functional` | **No — effort collapse.** Harness ✓ (OpenHands Software Agent SDK), triple ✓, but no reasoning-effort dimension is reported | launched [2026-01-29](https://www.openhands.dev/blog/openhands-index); [3-months-out update 2026-05-11](https://www.openhands.dev/blog/openhands-index-3-months-out) states only *"looking to do some more frequent updates going forward"* | Board at [index.openhands.dev](https://index.openhands.dev/) (no export found); harness open-sourced at [OpenHands/benchmarks](https://github.com/OpenHands/benchmarks), pushed 2026-07-19 |
|
|
200
|
+
| **SWE-bench** (Verified / Multimodal / Lite / Multilingual) | `repository-repair:general`, `frontend-repository-repair:general` | `functional` | **No.** Submissions are self-reported with heterogeneous scaffolds; the *Verified* badge is opt-in (maintainers re-run a random subset). `metadata.yaml` may carry scaffold/effort, but it is not a guaranteed, uniform column | [SWE-bench/experiments](https://github.com/SWE-bench/experiments) last commit **2026-03-29** — ~4 months stale | Per-submission `all_preds.jsonl`/`preds.json`, `metadata.yaml`, `logs/*/report.json`, `trajs/` in [SWE-bench/experiments](https://github.com/SWE-bench/experiments) |
|
|
201
|
+
| **METR Time Horizon 1.1** | `long-horizon-autonomy:general` | `time-horizon` | **No — effort collapse.** Per-model p50/p80 horizons with bootstrapped CIs and a `scaffolds` list, but **no reasoning-effort field** in the entries inspected | TH1.1 published [2026-01-29](https://metr.org/blog/2026-1-29-time-horizon-1-1/); [time-horizons page](https://metr.org/time-horizons/) latest entry 2026-05-08, updated *"periodically whenever we have new measurements"*; [eval-analysis-public](https://github.com/METR/eval-analysis-public) pushed 2026-03-06 | [`benchmark_results_1_1.yaml`](https://metr.org/assets/benchmark_results_1_1.yaml) (HTTP 200, ~16 KB) — contains `p50_horizon_length`/`p80_horizon_length` with `ci_low`/`ci_high`, `average_score`, `release_date`, `scaffolds`, plus `doubling_time_in_days` |
|
|
202
|
+
| **BFCL V4** (Berkeley/Gorilla) | `tool-orchestration:general` | `functional` | **No — effort collapse.** Cost is *"an estimate of the cost for the entire benchmark"*; no per-row effort | last updated **2026-04-12**, evaluated at a pinned commit; *"will be updated periodically"* — no cadence | [ShishirPatil/gorilla](https://github.com/ShishirPatil/gorilla) (repo pushed 2026-04-13); categories in [TEST_CATEGORIES.md](https://github.com/ShishirPatil/gorilla/blob/main/berkeley-function-call-leaderboard/TEST_CATEGORIES.md); [changelog](https://github.com/ShishirPatil/gorilla/blob/main/berkeley-function-call-leaderboard/CHANGELOG.md) |
|
|
203
|
+
| **Aider polyglot** | `code-transformation:general` (instruction-following edit) | `functional` | **No — stale.** Effort *is* in the label (e.g. `gpt-5 (high)`) and cost is reported, but the data is ~10 months old | `polyglot_leaderboard.yml` last commit **2025-10-04** (repo itself pushed 2026-05-22) | [`polyglot_leaderboard.yml`](https://github.com/Aider-AI/aider/blob/main/aider/website/_data/polyglot_leaderboard.yml); also `refactor_leaderboard.yml`, `edit_leaderboard.yml` in the same directory |
|
|
204
|
+
| **LiveCodeBench** | `algorithmic-synthesis:general` | `functional` | **No.** Board columns are Rank, Model, Pass@1, Easy, Medium, Hard — no effort, no harness, no cost | official repo [LiveCodeBench/LiveCodeBench](https://github.com/LiveCodeBench/LiveCodeBench) pushed **2025-07-16**; AA's replication uses a May 2023–May 2024 problem window | [HF org](https://huggingface.co/livecodebench/); no leaderboard JSON found |
|
|
205
|
+
| **SWE-Lancer** (OpenAI) | `repository-repair:general`, `architecture-reasoning:general` (SWE Manager split) | `functional`, `answer-accuracy` | **No — frozen.** 1,400+ Upwork tasks worth $1M in real payouts; IC SWE graded by triple-verified end-to-end tests, manager tasks graded against the original hiring manager's choice | [openai/SWELancer-Benchmark](https://github.com/openai/SWELancer-Benchmark) **archived 2025-07-18**, redirected into `openai/preparedness`. No maintained leaderboard | [arXiv 2502.12115](https://arxiv.org/abs/2502.12115) |
|
|
206
|
+
| **SAKE** | `architecture-reasoning:general` | `answer-accuracy` | **No — not agentic.** 2,154 expert-curated 4-option MCQs over 8 architectural categories and 4 context-length levels, 11 models, zero-/five-shot | static paper artifact, [arXiv 2606.29520](https://arxiv.org/abs/2606.29520) | open-sourced evaluation scripts + results per the paper; no live board |
|
|
207
|
+
| **AA-LCR** | `long-context-operation:general` | `answer-accuracy` | **Partly** — 100 questions over 10k–100k-token documents, pass/fail via LLM judge, per-model cost/time/tokens per task. **Not segmented by context length in the published view** | part of Intelligence Index v4.1 (6% weight); no cadence statement | [AA-LCR board](https://artificialanalysis.ai/evaluations/artificial-analysis-long-context-reasoning) + Data API |
|
|
208
|
+
| **NoLiMa** | `long-context-operation:general` | `context-retention` | **No.** 13 models, latent-association needle retrieval; 11 of 13 fall below 50% of their short-context baseline at 32K | static paper, [arXiv 2502.05167](https://arxiv.org/abs/2502.05167); [adobe-research/NoLiMa](https://github.com/adobe-research/NoLiMa) | repo |
|
|
209
|
+
| **Chroma "Context Rot"** | `long-context-operation:general` | `context-retention` | **No.** 18 models, extended NIAH + LongMemEval (~113k tokens) + repeated-words | published **2025-07-14**, one-off report | [trychroma.com/research/context-rot](https://www.trychroma.com/research/context-rot) |
|
|
210
|
+
| **RefactorBench** (Microsoft) | `code-transformation:general` | `functional` | **No — static.** 100 handcrafted multi-file refactors, 3 instruction specificities; agents solved 22% vs 87% for a time-limited human developer | ICLR 2025 paper, static | [arXiv 2503.07832](https://arxiv.org/abs/2503.07832), [microsoft/RefactorBench](https://github.com/microsoft/RefactorBench) |
|
|
211
|
+
| **GDPval / GDPval-AA v2** | `knowledge-deliverable:general` | `blind-preference` | **AA board: yes on effort/cost; no on grader parity.** 220 tasks, 44 occupations, blind pairwise, Elo anchored to a human baseline of 1000, *"average cost per task (USD), broken down by input, cache hit, cache write, reasoning, and answer tokens"* plus average turns per task. OpenAI's own grading is human-expert; AA's is an LLM judge — the two are not the same axis instance | v2 current; no cadence statement | [GDPval-AA v2 board](https://artificialanalysis.ai/evaluations/gdpval-aa) + Data API; paper [arXiv 2510.04374](https://arxiv.org/pdf/2510.04374) |
|
|
212
|
+
|
|
213
|
+
## 3. What owners actually distinguish (question a)
|
|
214
|
+
|
|
215
|
+
Confirmed as **separately published task classes**, not inferred:
|
|
216
|
+
|
|
217
|
+
- Scale splits the engineering loop into **three separate leaderboards** —
|
|
218
|
+
Codebase QnA (124 tasks), Test Writing (90), Refactoring (70) — and states the
|
|
219
|
+
design intent: *"it targets underrepresented but practically important task
|
|
220
|
+
categories, uses comprehensive category-specific evaluation protocols, and
|
|
221
|
+
adopts under-specified, agentic task formulations"*
|
|
222
|
+
([arXiv 2605.08366](https://arxiv.org/abs/2605.08366)).
|
|
223
|
+
- OpenHands splits into **five categories**: issue resolution, greenfield
|
|
224
|
+
development, frontend development, software testing, information gathering
|
|
225
|
+
([launch post](https://www.openhands.dev/blog/openhands-index)).
|
|
226
|
+
- LiveCodeBench splits into **four scenarios**: code generation, self-repair,
|
|
227
|
+
test output prediction, code execution, and states that *"model performances
|
|
228
|
+
are correlated across different scenarios"* yet relative rankings vary by task
|
|
229
|
+
type ([livecodebench.github.io](https://livecodebench.github.io/)).
|
|
230
|
+
- SWE-bench splits by **repository population**, not by task type: Full, Lite,
|
|
231
|
+
Verified, Multimodal, Multilingual ([swebench.com](https://www.swebench.com/SWE-bench/)).
|
|
232
|
+
Multimodal is 517 visual-domain issues
|
|
233
|
+
([multimodal](https://www.swebench.com/multimodal)).
|
|
234
|
+
- SWE-Lancer splits **IC engineering vs managerial proposal selection**
|
|
235
|
+
([arXiv 2502.12115](https://arxiv.org/abs/2502.12115)).
|
|
236
|
+
- Code Arena splits by **subject-matter domain**, uniquely: Reference-Based
|
|
237
|
+
Design (~29% of prompts), Brand/Marketing, Data & Analytics, Consumer Product,
|
|
238
|
+
Gaming, Simulations (~15.3%), Content Creation & Editing Tools
|
|
239
|
+
([category methodology](https://arena.ai/blog/new-categories-code-arena/)).
|
|
240
|
+
- BFCL splits by **call shape and interaction mode**: `simple_{python,java,
|
|
241
|
+
javascript}`, `parallel`, `multiple`, `parallel_multiple`, `irrelevance`,
|
|
242
|
+
`live_irrelevance`, `live_relevance`, `multi_turn_{base,miss_func,miss_param,
|
|
243
|
+
long_context}`, `memory_{kv,vector,rec_sum}`, `web_search_{base,no_snippet}`,
|
|
244
|
+
`format_sensitivity` ([TEST_CATEGORIES.md](https://github.com/ShishirPatil/gorilla/blob/main/berkeley-function-call-leaderboard/TEST_CATEGORIES.md)).
|
|
245
|
+
|
|
246
|
+
What owners **explicitly say they do not cover** — this is the most useful
|
|
247
|
+
primary-source material in the survey:
|
|
248
|
+
|
|
249
|
+
- DeepSWE: *"bug localization and refactoring are under-represented, even though
|
|
250
|
+
each is challenging in its own right"*, and *"Developers also don't use these
|
|
251
|
+
models through mini-swe-agent in practice; they use them inside more
|
|
252
|
+
sophisticated, model-native harnesses like Codex CLI, Claude Code, Cursor, and
|
|
253
|
+
Gemini CLI, none of which the current leaderboard directly reflects"*
|
|
254
|
+
([limitations](https://deepswe.datacurve.ai/blog/deepswe)).
|
|
255
|
+
- SAKE: *"their ability to reason about software architecture remains largely
|
|
256
|
+
unmeasured"* ([arXiv 2606.29520](https://arxiv.org/abs/2606.29520)).
|
|
257
|
+
- Scale, on why model-plus-scaffold is the unit: native agents
|
|
258
|
+
*"(Claude Code, Codex CLI) perform 1.5-2x more exploration than generic
|
|
259
|
+
harnesses"* ([Scale blog](https://scale.com/blog/swe-atlas-complete)).
|
|
260
|
+
- GDPval: automated grading reached only **66% agreement with human graders**,
|
|
261
|
+
which is why the primary metric stays human head-to-head
|
|
262
|
+
([arXiv 2510.04374](https://arxiv.org/pdf/2510.04374)).
|
|
263
|
+
|
|
264
|
+
## 4. Decisive vs diagnostic (question b)
|
|
265
|
+
|
|
266
|
+
**Decisive today (all three dimensions intact):**
|
|
267
|
+
|
|
268
|
+
| Identity | Source |
|
|
269
|
+
|---|---|
|
|
270
|
+
| `repository-repair:general:functional` | DeepSWE v1.1 JSON |
|
|
271
|
+
| `terminal-operations:general:functional` | Terminal-Bench 2.1 board; AA Terminal-Bench v2.1 board |
|
|
272
|
+
| `repository-comprehension:general:answer-accuracy` | SWE Atlas Codebase QnA |
|
|
273
|
+
| `test-authoring:general:rubric-quality` | SWE Atlas Test Writing |
|
|
274
|
+
| `knowledge-deliverable:general:blind-preference` | AA GDPval-AA v2 (LLM judge — record the grader) |
|
|
275
|
+
| `tool-orchestration:{telecom,banking}:policy-adherence` | AA τ²-Telecom, AA τ³-Banking |
|
|
276
|
+
|
|
277
|
+
**Diagnostic only, with the reason:**
|
|
278
|
+
|
|
279
|
+
| Identity | Source | Collapsed dimension |
|
|
280
|
+
|---|---|---|
|
|
281
|
+
| `frontend-greenfield:{domain}:visual-preference` | Code Arena WebDev | **effort** — no effort column; only sometimes in the label |
|
|
282
|
+
| `frontend-repository-repair:general:functional` | OpenHands Index | **effort** — not a reported dimension |
|
|
283
|
+
| `code-transformation:general:rubric-quality` | SWE Atlas Refactoring | **effort** — unverified on the rendered rows |
|
|
284
|
+
| `greenfield-application:general:functional` | OpenHands Index | **effort** |
|
|
285
|
+
| `algorithmic-synthesis:general:functional` | LiveCodeBench | effort + harness + staleness (repo 2025-07) |
|
|
286
|
+
| `long-horizon-autonomy:general:time-horizon` | METR TH1.1 | **effort** |
|
|
287
|
+
| `long-context-operation:general:context-retention` | NoLiMa, Chroma | effort + harness + staleness |
|
|
288
|
+
| `architecture-reasoning:general:answer-accuracy` | SAKE | **not agentic at all** — MCQ knowledge |
|
|
289
|
+
| `repository-repair:general:functional` | SWE-bench Verified | heterogeneous self-reported scaffolds; staleness |
|
|
290
|
+
|
|
291
|
+
**Direct consequence for `src/lib/frontendWorkloads.mjs`:** the two entries
|
|
292
|
+
currently marked `decisive: true` (`code-arena-webdev`, `openhands-frontend`) are
|
|
293
|
+
decisive on triple and harness but **not on effort**. Under the current single
|
|
294
|
+
boolean, a resolver reading `decisive: true` may believe it can pick an effort
|
|
295
|
+
level from those sources. It cannot. Recommendation (not applied here): replace
|
|
296
|
+
the boolean with three flags — `measuresTriple`, `preservesEffort`,
|
|
297
|
+
`preservesHarness` — so an effort route requires `preservesEffort`, and let the
|
|
298
|
+
resolver fall back to a separate effort-curve source (DeepSWE, Terminal-Bench)
|
|
299
|
+
with the cross-source inference explicitly marked. That is the same rule
|
|
300
|
+
`docs/research/frontend-agent-benchmarks.md` §7.4 already states in prose; making
|
|
301
|
+
it a schema field prevents it from being forgotten.
|
|
302
|
+
|
|
303
|
+
## 5. Does a smaller model degrade on long runs / large context? (question c)
|
|
304
|
+
|
|
305
|
+
**No primary source in this survey reports long-run or long-context degradation
|
|
306
|
+
broken down by model tier or reasoning effort.** The intuition is widely held; it
|
|
307
|
+
is not measured that way by any owner found.
|
|
308
|
+
|
|
309
|
+
What *is* measured:
|
|
310
|
+
|
|
311
|
+
- **METR** fits a logistic curve of success probability against *human* task
|
|
312
|
+
duration and reports the length at which the curve crosses 50% (and 80%). TH1.1
|
|
313
|
+
expanded the suite from 170 to 228 tasks and moved from Vivaria to Inspect;
|
|
314
|
+
8h+ tasks doubled from 14 to 31, but **only 5 of those 31 have measured human
|
|
315
|
+
baselines** — the rest are estimated
|
|
316
|
+
([TH1.1](https://metr.org/blog/2026-1-29-time-horizon-1-1/)). CIs come from
|
|
317
|
+
bootstrapping over task families, tasks, and runs. The published YAML records
|
|
318
|
+
`scaffolds` per model but **no effort field** in the entries inspected
|
|
319
|
+
([benchmark_results_1_1.yaml](https://metr.org/assets/benchmark_results_1_1.yaml)).
|
|
320
|
+
Reported doubling times: 187.8 days all-time, 128.7 days (CI 104.4–158.0) from
|
|
321
|
+
2023 on. **This is per model, not per tier.**
|
|
322
|
+
- **Toby Ord's half-life model** ([arXiv 2505.05115](https://arxiv.org/abs/2505.05115))
|
|
323
|
+
explains the METR curve with *"a constant rate of failing during each minute"*,
|
|
324
|
+
giving each agent its own half-life. The abstract does **not** claim weaker
|
|
325
|
+
models have systematically shorter half-lives — that stratification is an
|
|
326
|
+
inference, not a result.
|
|
327
|
+
- **NoLiMa** ([arXiv 2502.05167](https://arxiv.org/abs/2502.05167)): 11 of 13
|
|
328
|
+
models drop below 50% of their short-context baseline at 32K; even GPT-4o falls
|
|
329
|
+
from 99.3% to 69.7%. It compares 13 different models — **not size variants
|
|
330
|
+
within one family**.
|
|
331
|
+
- **Chroma "Context Rot"** ([2025-07-14](https://www.trychroma.com/research/context-rot))
|
|
332
|
+
tested 18 models *including* three within-family size ladders (Qwen3-8B / 32B /
|
|
333
|
+
235B-A22B and GPT-4.1 / mini / nano). It is therefore the only source that
|
|
334
|
+
*could* have answered the tier question — and it explicitly does not. Its
|
|
335
|
+
size-specific remarks are behavioural quirks, not degradation curves:
|
|
336
|
+
*"We only observe non-attempts with Qwen3-8B, [which] make up 4.21% of tasks"*;
|
|
337
|
+
*"GPT-4.1 mini attempts all tasks, but sometimes generates random words for the
|
|
338
|
+
'Golden Gate Bridge'/'Golden Gate Park' combination."* Its headline finding is
|
|
339
|
+
tier-agnostic: *"model performance degrades as input length increases, often in
|
|
340
|
+
surprising and non-uniform ways."*
|
|
341
|
+
- **AA-LCR** reports one aggregate over 10k–100k-token documents; the published
|
|
342
|
+
view is **not** segmented by context length
|
|
343
|
+
([AA-LCR](https://artificialanalysis.ai/evaluations/artificial-analysis-long-context-reasoning)).
|
|
344
|
+
|
|
345
|
+
**Verdict for the Kit:** "route a small model away from long unattended runs" is
|
|
346
|
+
currently a **defensible heuristic with no decisive backing**. The closest real
|
|
347
|
+
evidence is indirect and within-family effort, not tier: DeepSWE's
|
|
348
|
+
`mean_agent_steps` / `mean_output_tokens` / `mean_duration_seconds` fields let
|
|
349
|
+
the Kit observe that a low-effort configuration consumes a different trajectory
|
|
350
|
+
shape at the same task set. Publishing that as a tier claim would be an
|
|
351
|
+
inference. Mark it `unverified`.
|
|
352
|
+
|
|
353
|
+
## 6. Cost per completed task (question d)
|
|
354
|
+
|
|
355
|
+
**Verified correction to the brief: there is no `costPerTaskUsd` field.** The
|
|
356
|
+
Artificial Analysis Data API is snake_case; the cost object is
|
|
357
|
+
`artificial_analysis_intelligence_index_cost` containing `total_cost` and
|
|
358
|
+
`cost_per_task` (itself nested into `total_cost`, `input_cost`, `reasoning_cost`,
|
|
359
|
+
`answer_cost`) ([Data API docs](https://artificialanalysis.ai/data-api/docs)).
|
|
360
|
+
|
|
361
|
+
**More importantly: every source found reports cost per *attempted* task, never
|
|
362
|
+
cost per *completed* task.**
|
|
363
|
+
|
|
364
|
+
| Source | Cost metric published | Denominator |
|
|
365
|
+
|---|---|---|
|
|
366
|
+
| Artificial Analysis | *"Cost per Task ... calculated by multiplying input, cached, and output token prices by tokens consumed across the workload, weighted by the relative weights of each benchmark ... then dividing by task count"* | **task count** — attempted |
|
|
367
|
+
| AA Coding Agent Index | *"Cost to run: average pay per token API cost per task, based on provider token pricing rather than consumer plans"* ([methodology](https://artificialanalysis.ai/methodology/coding-agents-benchmarking)) | attempted |
|
|
368
|
+
| AA GDPval-AA v2 | *"average cost per task (USD), broken down by input, cache hit, cache write, reasoning, and answer tokens"* | attempted |
|
|
369
|
+
| DeepSWE | `mean_cost_usd`, `median_cost_usd` — per **attempt** | attempted |
|
|
370
|
+
| Terminal-Bench 2.1 board | `Cost` in USD for the whole submission run (e.g. $552.67) | whole run |
|
|
371
|
+
| BFCL V4 | *"an estimate of the cost for the entire benchmark, in USD"* | whole run |
|
|
372
|
+
| Aider polyglot | total run cost, divisible by 225 exercises | attempted |
|
|
373
|
+
| OpenHands Index | cost-accuracy curves per model; the [3-months-out post](https://www.openhands.dev/blog/openhands-index-3-months-out) gives only relative pricing, not absolute per-task figures | attempted |
|
|
374
|
+
| SWE-Lancer | $1M in Upwork **payouts earned**, not spend | neither — it is revenue, not cost |
|
|
375
|
+
|
|
376
|
+
Cost per completed task is `cost_per_attempt / pass_rate`. Both operands are
|
|
377
|
+
published by DeepSWE and by AA, so the Kit **can** compute it — but it is a
|
|
378
|
+
derived quantity and must be tagged as such, with the caveat that the two
|
|
379
|
+
operands must come from the same row. Concretely: `cost.unit` in
|
|
380
|
+
`routingCatalog.mjs` should carry `usd-per-attempt` (what owners publish) or
|
|
381
|
+
`usd-per-run`, and any `usd-per-success` value must be flagged as Kit-derived.
|
|
382
|
+
|
|
383
|
+
Also note the retry semantics differ and are not interchangeable: DeepSWE reports
|
|
384
|
+
pass@1 over four repeated whole-benchmark runs with a 95% run-to-run interval
|
|
385
|
+
(`ci_method: "95% run-to-run: SE across repeated whole-benchmark passes"`), AA
|
|
386
|
+
runs 3 attempts per task, and AA retries API failures for reliability rather than
|
|
387
|
+
as extra solution attempts.
|
|
388
|
+
|
|
389
|
+
## 7. Gaps
|
|
390
|
+
|
|
391
|
+
Task classes with **no decisive source**, and what would close each:
|
|
392
|
+
|
|
393
|
+
1. **Architecture / judgment work — the largest gap.** SAKE is 2,154 multiple
|
|
394
|
+
choice questions, not an agent run; SWE-Lancer's manager split is the only
|
|
395
|
+
agentic proxy and its repo has been archived since 2025-07-18. *Needed:* an
|
|
396
|
+
owner-run board where an agent produces an architectural decision inside a
|
|
397
|
+
real repository and is graded against the decision a senior engineer actually
|
|
398
|
+
made, with effort and harness in the row. Until then the Kit's `judgment`
|
|
399
|
+
routing workload rests on **no decisive evidence at all** — its closest proxy
|
|
400
|
+
is `knowledge-deliverable` (GDPval-AA), which is not software architecture.
|
|
401
|
+
2. **Mechanical / refactoring at effort granularity.** SWE Atlas Refactoring is
|
|
402
|
+
live and names the harness, but effort exposure on its rows is unverified;
|
|
403
|
+
RefactorBench is a static 2025 paper; Aider's refactor/polyglot YAMLs are ~10
|
|
404
|
+
months stale. *Needed:* one confirmation that the Refactoring board carries
|
|
405
|
+
the effort token its sibling boards do. This is the cheapest gap to close —
|
|
406
|
+
a single human look at the rendered board settles it.
|
|
407
|
+
3. **Any per-domain evidence outside frontend.** Code Arena is the sole source
|
|
408
|
+
with per-domain boards. Terminal-Bench, DeepSWE, and SWE Atlas QnA all
|
|
409
|
+
document a category mix and publish one aggregate. *Needed:* per-category
|
|
410
|
+
score export from any of them; until then the Kit must not emit a non-`general`
|
|
411
|
+
domain for those workloads.
|
|
412
|
+
4. **Tier- or effort-resolved long-horizon degradation.** §5. *Needed:* a source
|
|
413
|
+
that reports success against task duration *per effort level*. DeepSWE already
|
|
414
|
+
holds both halves (effort rows + per-run duration/step statistics) and is the
|
|
415
|
+
most plausible candidate to publish it.
|
|
416
|
+
5. **Accessibility and responsiveness.** Unchanged from
|
|
417
|
+
`docs/research/frontend-agent-benchmarks.md`: no current, broad, model-comparative
|
|
418
|
+
board. `accessibility` and `responsive` remain axes with **zero** decisive
|
|
419
|
+
sources.
|
|
420
|
+
6. **Cost per completed task.** No owner publishes it (§6). *Needed:* nothing
|
|
421
|
+
external — the Kit derives it and labels it derived.
|
|
422
|
+
7. **Machine-ingestible artifacts for four otherwise-strong sources.**
|
|
423
|
+
Terminal-Bench (no results endpoint; `/api/leaderboard` → 404), SWE Atlas (only
|
|
424
|
+
dataset + run config), Code Arena (no board API), OpenHands Index (no export).
|
|
425
|
+
Only DeepSWE, Artificial Analysis, METR, Aider, and SWE-bench/experiments can
|
|
426
|
+
be ingested without scraping a rendered page. Three of those five are stale by
|
|
427
|
+
more than 3 months.
|
|
428
|
+
8. **Cadence is undeclared almost everywhere.** Only two freshness statements
|
|
429
|
+
were found in the whole survey: METR's *"periodically whenever we have new
|
|
430
|
+
measurements"* and OpenHands' *"looking to do some more frequent updates going
|
|
431
|
+
forward"*. Every other owner publishes dated artifacts with no promise. The
|
|
432
|
+
catalog's `freshness.expiresAt` therefore has to be a **Kit-side policy
|
|
433
|
+
decision per source**, not a value read from the owner.
|
|
434
|
+
|
|
435
|
+
## 8. Implication for the routing catalog
|
|
436
|
+
|
|
437
|
+
Minimal changes implied by the above, in order of value:
|
|
438
|
+
|
|
439
|
+
1. Split the `decisive` boolean into `measuresTriple` / `preservesEffort` /
|
|
440
|
+
`preservesHarness` (§4). An effort route requires `preservesEffort`; a
|
|
441
|
+
cross-source effort inference must be recorded as an inference.
|
|
442
|
+
2. Constrain `domain` to `general` unless the owner publishes a separate score
|
|
443
|
+
for that domain (§1.3). Add a lint so a new adapter cannot introduce a domain
|
|
444
|
+
the owner does not score.
|
|
445
|
+
3. Give `cost.unit` an explicit enum — `usd-per-attempt`, `usd-per-run`,
|
|
446
|
+
`usd-per-success-derived` — so a derived number is never mistaken for a
|
|
447
|
+
published one (§6).
|
|
448
|
+
4. Treat `long-horizon-autonomy` and `long-context-operation` as first-class
|
|
449
|
+
workloads with their own suites, not as modifiers on other workloads (§1.2).
|
|
450
|
+
5. Keep the tier-degradation heuristic in the policy layer as an explicitly
|
|
451
|
+
`unverified` prior, subject to override by local outcome telemetry (§5).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikon85/agent-workflow-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.1",
|
|
4
4
|
"description": "Portable AI-agent workflow skills (plan → execute → land → learn) for Claude Code & Codex — grilling, TDD, diagnosis, two-axis code review, cross-model Codex review, design & domain-modeling, plus a skill router (ask-matt). npx init/update/diff/uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|