@ikon85/agent-workflow-kit 0.43.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.agents/skills/grill-me/SKILL.md +3 -1
  2. package/.agents/skills/grill-with-docs/SKILL.md +3 -1
  3. package/.agents/skills/kit-update/SKILL.md +9 -11
  4. package/.agents/skills/orchestrate-wave/SKILL.md +8 -8
  5. package/.agents/skills/setup-workflow/SKILL.md +20 -18
  6. package/.agents/skills/setup-workflow/board-sync.md +4 -1
  7. package/.agents/skills/setup-workflow/workflow-advisories.md +3 -2
  8. package/.agents/skills/setup-workflow/worktree-lifecycle.md +36 -31
  9. package/.agents/skills/to-issues/SKILL.md +43 -0
  10. package/.agents/skills/wrapup/SKILL.md +98 -54
  11. package/.claude/skills/grill-me/SKILL.md +3 -1
  12. package/.claude/skills/grill-me-codex/SKILL.md +3 -1
  13. package/.claude/skills/grill-with-docs/SKILL.md +3 -1
  14. package/.claude/skills/grill-with-docs-codex/SKILL.md +3 -1
  15. package/.claude/skills/kit-update/SKILL.md +9 -11
  16. package/.claude/skills/orchestrate-wave/SKILL.md +8 -8
  17. package/.claude/skills/setup-workflow/SKILL.md +20 -18
  18. package/.claude/skills/setup-workflow/board-sync.md +4 -1
  19. package/.claude/skills/setup-workflow/workflow-advisories.md +3 -2
  20. package/.claude/skills/setup-workflow/worktree-lifecycle.md +36 -31
  21. package/.claude/skills/to-issues/SKILL.md +43 -0
  22. package/.claude/skills/wrapup/SKILL.md +98 -54
  23. package/README.md +249 -7
  24. package/agent-workflow-kit.package.json +42 -42
  25. package/package.json +16 -12
  26. package/scripts/marker_lib.py +3 -0
  27. package/scripts/profile_globs.py +26 -45
  28. package/scripts/release-delta-guard.mjs +26 -9
  29. package/scripts/worktree-lifecycle/README.md +57 -160
  30. package/scripts/worktree-lifecycle/capabilities.json +2 -3
  31. package/scripts/worktree-lifecycle/classify.py +480 -0
  32. package/scripts/worktree-lifecycle/cleanup.py +9 -29
  33. package/scripts/worktree-lifecycle/core.py +68 -1429
  34. package/scripts/worktree-lifecycle/ignore_seed.py +1 -1
  35. package/scripts/worktree-lifecycle/profile.py +46 -29
  36. package/scripts/worktree-lifecycle/setup.py +7 -19
  37. package/scripts/wrapup-land.py +1292 -545
  38. package/src/consumer-migrations.json +1 -16
  39. package/src/lib/bundle.mjs +31 -1
  40. package/docs/adr/0001-consumer-divergence-policy.md +0 -53
  41. package/docs/adr/0002-capability-gated-orchestration.md +0 -70
  42. package/docs/adr/0003-kit-core-and-project-extension-lifecycle.md +0 -63
  43. package/docs/adr/0004-release-intent-is-a-version-tag.md +0 -64
  44. package/docs/adr/0005-to-issues-is-the-planning-facade.md +0 -42
  45. package/docs/adr/0006-routing-knowledge-access-and-policy-are-separate.md +0 -95
  46. package/docs/adr/0007-session-teardown-requires-provenance-bound-ownership.md +0 -88
  47. package/docs/adr/0008-planning-ignore-rules-are-offered-never-installed.md +0 -84
  48. package/docs/adr/0009-teardown-authority-is-stateless-repository-classification.md +0 -101
  49. package/docs/adr/0010-model-roster-replaces-the-optimization-dial.md +0 -87
  50. package/docs/agents/board-sync.md +0 -74
  51. package/docs/agents/code-review.md +0 -14
  52. package/docs/agents/workflow-capabilities.json +0 -28
  53. package/docs/research/agent-task-taxonomy-benchmark-coverage.md +0 -451
  54. package/docs/research/benchlm-routing-source.md +0 -198
  55. package/docs/research/consumer-owned-protocol-files.md +0 -238
  56. package/docs/research/frontend-agent-benchmarks.md +0 -282
  57. package/docs/research/model-effort-routing-benchmarks.md +0 -261
  58. package/docs/research/provider-neutral-agent-routing.md +0 -207
  59. package/docs/research/wave-152-consumer-acceptance.md +0 -98
  60. package/docs/research/wave-43-script-hook-census.md +0 -128
  61. package/scripts/build-kit.mjs +0 -117
  62. package/scripts/build-kit.test.mjs +0 -207
  63. package/scripts/census/census.test.mjs +0 -252
  64. package/scripts/census/state.test.mjs +0 -15
  65. package/scripts/census/transaction.test.mjs +0 -103
  66. package/scripts/census-contract.test.mjs +0 -227
  67. package/scripts/check-kit-staleness.mjs +0 -45
  68. package/scripts/check-kit-staleness.test.mjs +0 -19
  69. package/scripts/codex-exec-scenarios/fake-codex.mjs +0 -165
  70. package/scripts/codex-exec.test.mjs +0 -871
  71. package/scripts/grill-census-wiring-guard.mjs +0 -87
  72. package/scripts/grill-census-wiring-guard.test.mjs +0 -107
  73. package/scripts/kit-release.test.mjs +0 -273
  74. package/scripts/kit-update-pr.test.mjs +0 -151
  75. package/scripts/lib/audit-refs.mjs +0 -146
  76. package/scripts/lib/scrub.mjs +0 -113
  77. package/scripts/lib/scrub.test.mjs +0 -187
  78. package/scripts/memory-lifecycle/memory-lifecycle.test.mjs +0 -170
  79. package/scripts/portability_profile_scan.py +0 -53
  80. package/scripts/release-delta-guard.test.mjs +0 -174
  81. package/scripts/release-parity.test.mjs +0 -90
  82. package/scripts/release-state.test.mjs +0 -360
  83. package/scripts/test_anchor_table.py +0 -69
  84. package/scripts/test_board_bootstrap.py +0 -348
  85. package/scripts/test_board_sync.py +0 -208
  86. package/scripts/test_board_sync_create_idempotency.py +0 -117
  87. package/scripts/test_board_sync_wave_title.py +0 -120
  88. package/scripts/test_census_backstop.py +0 -712
  89. package/scripts/test_census_forward_contract.py +0 -91
  90. package/scripts/test_census_update_contract.test.mjs +0 -454
  91. package/scripts/test_codex_adapter_sync_contract.py +0 -169
  92. package/scripts/test_dist_kit_smoke.py +0 -220
  93. package/scripts/test_drift_guard_diagnostics.py +0 -295
  94. package/scripts/test_issue_claim_contract.py +0 -169
  95. package/scripts/test_kit_docs_language_census.py +0 -178
  96. package/scripts/test_marker_lib.py +0 -162
  97. package/scripts/test_orchestrate_wave_contract.py +0 -381
  98. package/scripts/test_pr_body_check.py +0 -264
  99. package/scripts/test_profile_globs.py +0 -280
  100. package/scripts/test_program_planning_contract.py +0 -133
  101. package/scripts/test_release_authorization_contract.py +0 -101
  102. package/scripts/test_render_anchor.py +0 -267
  103. package/scripts/test_retro_wrapup_contract.py +0 -153
  104. package/scripts/test_skill_code_review_seed.py +0 -89
  105. package/scripts/test_skill_codex_exec_lifecycle.py +0 -123
  106. package/scripts/test_skill_frontmatter_lint.py +0 -234
  107. package/scripts/test_skill_gh_lint.py +0 -124
  108. package/scripts/test_skill_language_census.py +0 -254
  109. package/scripts/test_skill_optional_readiness.py +0 -171
  110. package/scripts/test_skill_portability_lint.py +0 -866
  111. package/scripts/test_skill_precommit_template.py +0 -30
  112. package/scripts/test_skill_publish_audit.py +0 -358
  113. package/scripts/test_skill_readiness_contract.py +0 -264
  114. package/scripts/test_skill_readiness_preflight.py +0 -180
  115. package/scripts/test_skill_required_readiness.py +0 -233
  116. package/scripts/test_skill_selfcontainment_lint.py +0 -255
  117. package/scripts/test_skill_setup_workflow_seeds.py +0 -691
  118. package/scripts/test_skill_stale_name_lint.py +0 -126
  119. package/scripts/test_skill_surface_refs.py +0 -300
  120. package/scripts/test_skill_trailing_artifact_lint.py +0 -71
  121. package/scripts/test_tdd_contract.py +0 -78
  122. package/scripts/test_worktree_ignore_seed.py +0 -320
  123. package/scripts/test_worktree_setup_base_guard.py +0 -140
  124. package/scripts/test_worktree_wrapup_contract.py +0 -1737
  125. package/scripts/test_wrapup_land.py +0 -428
  126. package/scripts/worktree-lifecycle/session.py +0 -1857
@@ -1,451 +0,0 @@
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).