Skip to content

Commit 3dc2122

Browse files
feat: add a subsampled swe-bench-pro variant (33/66/66) for optimizer runs
Additive only. The canonical baseline/build.yaml and its 146/292/293 split are byte-unchanged; this adds a second config beside them. Why: the full split is unaffordable for an optimizer loop. Each case builds a real repository and runs its test suite, so the full-split held-out baseline alone cost ~7.8h of wall clock for three rounds, and an optimizer evaluates candidates many times over. 33/66/66 matches gaia and browsecomp-plus, the suite's tightest split, which is the right reference for its most expensive benchmark. The sample is NESTED, which is the load-bearing detail. `--sample` computes the canonical split first, unchanged, then narrows each partition within itself, so partitions/sample/test.json is a strict subset of partitions/test.json. Two things follow. No instance can migrate from test into development: a flat re-split at the smaller size does move them, and the first version of this change produced a "held-out" set with zero overlap with the real one, silently drawn from what had been dev and validation. And the baseline needed no re-measuring. baseline_reward: 0.2923 over the 66 sampled cases, recomputed from the very same K=3 trials that produced the canonical 0.2940 +-0.0082. The recomputation reproduces 0.2940 +-0.0082 exactly on the full set first, which is what validates it. The point estimate barely moves; the spread widens to +-0.0332 because n falls 293 -> 66. CAVEAT recorded in the file: those trials targeted qwen-3.6-27b while the variant targets deepseek-v4-flash, so 0.2923 is provisional until a K=3 deepseek pass over the 66 replaces it (~1.8h at max_concurrency 24). Repository stratification and sha256 ordering are unchanged and apply within each partition, so all 11 upstream repos appear in every sampled partition. The sample shares the canonical manifest rather than duplicating it: it pins the same 731 refs and the build loader reads only names from it, so a second copy would just be a second thing to keep in sync. `--tasks-dir` is now optional, since the manifest already records every name and stratum. The variant also carries the settings the canonical config is missing relative to its siblings: deepseek-v4-flash (prefixed-only, because agents strip just `openai/` before the gateway matches exactly), max_concurrency 24, 4x case budgets (132/264), case_timeout equal to task_agent_timeout at 3000 so the multiplier is 1.0, score_baseline false with the baseline pinned, and n_attempts 3 / mean on the test target. CONFIGURATION.md gains the swe-bench-pro column it never had, describing the canonical config, plus a footnote covering the variant and two pre-existing inconsistencies in the canonical file that are deliberately left alone here: case_timeout_seconds 1800 implies a 0.6 multiplier though the pinned 0.294 was measured at 1.0 (all 879 sampled trial configs say so), and model: gpt-4o though that baseline was measured against qwen-3.6-27b. Verified: canonical partitions, manifest and build.yaml show no diff against pr3; canonical --check passes; --sample regenerates byte-identically; every sampled partition is a strict subset of its canonical counterpart; both configs compile side by side (full -> 146/292/293, gpt-4o, 1800; sample -> 33/66/66, deepseek, 3000, baseline 0.2923, budgets 132/264, n_attempts 3/mean on test only); 13 passed, 6 skipped in test_v05_benchmark_configs.py.
1 parent 64c71c6 commit 3dc2122

6 files changed

Lines changed: 518 additions & 27 deletions

File tree

harness-engineering-bench/CONFIGURATION.md

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -166,25 +166,25 @@ benchmark can be checked against the others at a glance.
166166

167167
## Per-benchmark values
168168

169-
| | gaia | officeqa | swe-atlas-qna | tau3 | browsecomp-plus |
170-
|---|---|---|---|---|---|
171-
| target model | gpt-5.4-mini ◇ | deepseek-v4-flash | gpt-oss-120b | deepseek-v4-flash | deepseek-v4-flash |
172-
| held-out baseline (K=3) ◆ | 0.621 ±0.052 | 0.341 ±0.033 | 0.068 ±0.026 (agg 0.632) | 0.732 ±0.010 | 0.462 ±0.028 |
173-
| split dev/val/test | 33/66/66 | 49/98/99 | 25/49/50 | 75/150/150 | 33/66/66 |
174-
| dev budget (runs / cases) | 100 / 132 | 100 / 196 | 100 / 100 | 100 / 300 | 100 / 132 |
175-
| val budget (runs / cases) | 100 / 264 | 100 / 392 | 100 / 196 | 100 / 600 | 100 / 264 |
176-
| gateway max_tokens (evaluation, finalization each) ¶ | 2 B | 3 B | 2 B | 4 B | 2 B |
177-
| max_concurrency (cases in flight) § | 24 | 24 | 24 | 24 | 24 |
178-
| timeout_seconds (per eval) ‖ | 7200 | 28800 | 90000 | 79200 | 39600 |
179-
| case_timeout_seconds = declared † | 600 | 1800 | 10800 | 3600 | 3600 |
180-
| task_agent_timeout_seconds (declared) | 600 | 1800 | 10800 | 3600 | 3600 |
181-
| declared `[verifier] timeout_sec` | 300 | 300 | 900 | 300 | 300 |
182-
| declared `build_timeout_sec` | 300 | 600 | 600 | 600 | 7200 |
183-
| verifier_timeout_seconds ‖ | 14400 | 54000 | 176400 | 158400 | 75600 |
184-
| BASH_MAX_TIMEOUT_MS (tool) ¤ | 3600 s | 10800 s | 39600 s | 32400 s | 14400 s |
185-
| harness_user | harness | harness | null ‡ | null ‡ | null ‡ |
186-
| task_services_use_upstream | false | false | true (rubric judge) | true (user-sim + grader) | true (answer judge) |
187-
| task-specific extras || `--no-force-build` (prebuilt corpus image) | `keepalive` --ek (ENTRYPOINT images) | `TAU2_*` model pins | pinned 2.2 GB BM25 index |
169+
| | gaia | officeqa | swe-atlas-qna | tau3 | browsecomp-plus | swe-bench-pro |
170+
|---|---|---|---|---|---| --- |
171+
| target model | gpt-5.4-mini ◇ | deepseek-v4-flash | gpt-oss-120b | deepseek-v4-flash | deepseek-v4-flash | gpt-4o ◈ |
172+
| held-out baseline (K=3) ◆ | 0.621 ±0.052 | 0.341 ±0.033 | 0.068 ±0.026 (agg 0.632) | 0.732 ±0.010 | 0.462 ±0.028 | 0.294 ±0.008 ◈ |
173+
| split dev/val/test | 33/66/66 | 49/98/99 | 25/49/50 | 75/150/150 | 33/66/66 | 146/292/293 ◈ |
174+
| dev budget (runs / cases) | 100 / 132 | 100 / 196 | 100 / 100 | 100 / 300 | 100 / 132 | 100 / 146 ◈ |
175+
| val budget (runs / cases) | 100 / 264 | 100 / 392 | 100 / 196 | 100 / 600 | 100 / 264 | 100 / 292 ◈ |
176+
| gateway max_tokens (evaluation, finalization each) ¶ | 2 B | 3 B | 2 B | 4 B | 2 B | 100 M |
177+
| max_concurrency (cases in flight) § | 24 | 24 | 24 | 24 | 24 | 8 ◈ |
178+
| timeout_seconds (per eval) ‖ | 7200 | 28800 | 90000 | 79200 | 39600 | 28800 |
179+
| case_timeout_seconds = declared † | 600 | 1800 | 10800 | 3600 | 3600 | 1800 ◈ |
180+
| task_agent_timeout_seconds (declared) | 600 | 1800 | 10800 | 3600 | 3600 | 3000 |
181+
| declared `[verifier] timeout_sec` | 300 | 300 | 900 | 300 | 300 | n/a (registry dataset) |
182+
| declared `build_timeout_sec` | 300 | 600 | 600 | 600 | 7200 | n/a (registry dataset) |
183+
| verifier_timeout_seconds ‖ | 14400 | 54000 | 176400 | 158400 | 75600 | 28800 |
184+
| BASH_MAX_TIMEOUT_MS (tool) ¤ | 3600 s | 10800 s | 39600 s | 32400 s | 14400 s | n/a |
185+
| harness_user | harness | harness | null ‡ | null ‡ | null ‡ | harness |
186+
| task_services_use_upstream | false | false | true (rubric judge) | true (user-sim + grader) | true (answer judge) | false |
187+
| task-specific extras || `--no-force-build` (prebuilt corpus image) | `keepalive` --ek (ENTRYPOINT images) | `TAU2_*` model pins | pinned 2.2 GB BM25 index | registry dataset; `expose_case_resources: false`; sampled variant ◈ |
188188

189189
## Choosing an optimizer harness
190190

@@ -325,6 +325,52 @@ agent's reason/search-only-turn crash was fixed.
325325

326326
**gaia and tau3 are too noisy for single-run comparisons.** gaia's own three rounds spanned 0.554-0.682 (sd 0.052), and tau3's optimizer scored one *unchanged* harness at 0.800 and 0.547 on development -- its user-simulator and NL-assertion grader are both LLMs, so their variance rides on every eval. Treat a gaia or tau3 delta under ~0.1 as unresolved. Their splits are not the problem: domain mix matches to the percentage point across all three partitions (airline 13%, banking 26%, retail 30%, telecom 31%), as does telecom persona difficulty.
327327

328+
◈ swe-bench-pro is the newest benchmark and the only one with **two** configs.
329+
The column above describes the canonical `baseline/build.yaml` (full 731-instance
330+
dataset, split 146/292/293). Alongside it sits `baseline/build.sample.yaml`, a
331+
subsampled variant for optimizer runs; the canonical config is unchanged by it.
332+
333+
*Why a variant.* The full split is unaffordable for an optimizer loop: each case
334+
builds a real repository and runs its test suite, so the held-out baseline alone
335+
cost ~7.8h of wall clock for three rounds, and an optimizer evaluates candidates
336+
many times over. The variant is 33/66/66, matching gaia and browsecomp-plus, on
337+
`fireworks_ai/deepseek-v4-flash`, `max_concurrency: 24`, 4x case budgets
338+
(132/264), and `case_timeout_seconds: 3000`.
339+
340+
*The sample is nested.* The full split is computed first and each partition is
341+
then narrowed within itself (`partition_swe_bench_pro.py --sample`), so
342+
`partitions/sample/test.json` is a strict subset of `partitions/test.json`. No
343+
instance can migrate from test into development, and the baseline needed no
344+
re-measuring: **0.292 ±0.033** over the 66 sampled cases is the same K=3 trials
345+
that produced the full-partition 0.294 ±0.008, recomputed. The point estimate
346+
barely moves; the spread widens roughly fourfold because n falls 293 → 66, which
347+
matters when reading a candidate's margin over that floor.
348+
349+
*Three known inconsistencies in the canonical config*, all pre-existing and left
350+
alone here rather than silently changed:
351+
352+
- `case_timeout_seconds: 1800` against `task_agent_timeout_seconds: 3000` implies
353+
a 0.6 multiplier, but the pinned 0.294 was measured at **1.0**: all 879 sampled
354+
trial configs record `agent_timeout_multiplier=1.0`. The config value is wrong,
355+
not the measurement. Every sibling has these two equal.
356+
- `model: gpt-4o`, but the 0.294 baseline was measured against
357+
**qwen-3.6-27b**. So the recomputed 0.292 the variant pins is also a qwen
358+
number while the variant targets deepseek; treat it as provisional until a K=3
359+
deepseek pass over the 66 replaces it (~1.8h at `max_concurrency: 24`).
360+
- **The pinned 0.294 was measured on a different agent than the one in the tree**,
361+
which is the same staleness the note above describes, in its strongest form. The
362+
qwen-era agent was 630 lines on Chat Completions with an explicit local
363+
`messages` list and edited files on 571 of 879 cases (write_file 1108,
364+
apply_patch 899, submit 85). The committed seed is Responses-only, delegates its
365+
conversation to `previous_response_id`, and edits nothing: over 66 sampled cases
366+
it called write_file, apply_patch, and submit **zero** times and scored 0.0000.
367+
So this benchmark is the one the re-pin above did not cover, and it needs
368+
`scripts/rescore_candidate.py --seed` more than any of the five that did.
369+
370+
Also unlike the siblings, swe-bench-pro's canonical config still has
371+
`score_baseline: true`, so it re-measures the seed every run instead of pinning
372+
it. The variant sets `false` and pins, as everything else does.
373+
328374
◇ gaia is the exception to the deepseek-v4-flash default: it is multimodal and
329375
that model is text-only. Verified against the same litellm endpoint the gateway
330376
proxies to — gpt-5.4-mini returns 200 for every request shape the gaia agent
@@ -374,7 +420,7 @@ per benchmark from its own case counts; see each `build.yaml` for the arithmetic
374420
the per-key bucket, so more keys buy proportionally more parallel runs:
375421

376422
| counter | limit | scope |
377-
|---|---|---|
423+
|---|---|---| --- |
378424
| `x-ratelimit-api_key-limit-tokens` | 10 M TPM | **per key** |
379425
| `x-ratelimit-api_key-limit-requests` | 5 000 RPM | **per key** |
380426

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
# Subsampled SWE-bench-Pro variant, for optimizer runs.
2+
#
3+
# This is a SECOND configuration alongside build.yaml, not a replacement. The
4+
# canonical build.yaml keeps the full 146/292/293 split and its held-out
5+
# baseline of 0.2940 +-0.0082; nothing here touches it.
6+
#
7+
# Why a variant exists: the full split is unaffordable for an optimizer loop.
8+
# Each case builds a real repository and runs its (often slow) test suite, so
9+
# the full-split held-out baseline alone cost ~7.8h of wall clock for three
10+
# rounds, and an optimizer evaluates candidates many times over. 33/66/66
11+
# matches gaia and browsecomp-plus, the suite's tightest split.
12+
#
13+
# The sampled partitions are NESTED inside the canonical ones: the full split is
14+
# computed first and each partition is then narrowed within itself, so
15+
# partitions/sample/test.json is a strict subset of partitions/test.json. No
16+
# instance can migrate from test into development, and the baseline below did
17+
# not need re-measuring.
18+
name: vero/optimize-swe-bench-pro-sample
19+
description: >-
20+
Improve a code-editing SWE-bench-Pro agent while preserving the Harbor agent
21+
interface. The target must edit a checked-out repository so the task's hidden
22+
test suite passes; the task-source verifier runs the suite for the reward.
23+
agent_repo: target
24+
# SWE-bench-Pro ships as the `swebenchpro` dataset in the DEFAULT Harbor registry
25+
# (731 instances), not as an `<org>/<name>@sha256:<digest>` package like
26+
# swe-atlas-qna or tau3. Its tasks resolve to git-backed task ids under
27+
# laude-institute/harbor-datasets at commit c8e8f3fac7097accaacf261d74c3d6f441de45b1,
28+
# so the version pin is the registry version rather than a content digest.
29+
task_source: swebenchpro@1.0
30+
# Shared with the canonical split on purpose: the manifest pins all 731 refs and
31+
# the build loader reads only task names from it, so a second copy would just be
32+
# a second thing to keep in sync.
33+
task_manifest: ../partitions/manifest.json
34+
agent_import_path: swebench_pro_agent.agent:SweBenchProAgent
35+
harbor_requirement: harbor[modal]==0.20.0
36+
37+
partition_files:
38+
development: ../partitions/sample/development.json
39+
validation: ../partitions/sample/validation.json
40+
test: ../partitions/sample/test.json
41+
42+
agent_access:
43+
- partition: development
44+
disclosure: full
45+
# false, unlike the sibling benchmarks: VeRO materializes case resources via
46+
# PackageDatasetClient, which only accepts `<org>/<name>` package refs. A
47+
# registry dataset such as swebenchpro@1.0 cannot be exposed that way.
48+
expose_case_resources: false
49+
total_runs: 100
50+
total_cases: 132 # 4x the partition, the suite-wide budget convention
51+
- partition: validation
52+
disclosure: aggregate
53+
expose_case_resources: false
54+
min_aggregate_cases: 5
55+
total_runs: 100
56+
total_cases: 264 # 4x the partition, the suite-wide budget convention
57+
58+
selection_partition: validation
59+
targets:
60+
- partition: test
61+
reward_key: reward
62+
# Held-out K=3 mean over the 66 sampled cases. Recomputed from the very same
63+
# trials that produced the canonical full-partition 0.2940 +-0.0082, which is
64+
# sound only because the sample is a strict subset; the recomputation
65+
# reproduces 0.2940 +-0.0082 exactly on the full set first.
66+
#
67+
# CAVEAT: those trials targeted qwen-3.6-27b, whereas this variant targets
68+
# deepseek-v4-flash. Treat 0.2923 as provisional until a K=3 pass on deepseek
69+
# over these 66 cases replaces it (~1.8h at max_concurrency 24).
70+
#
71+
# The +-0.0332 is not a typo: it is 4x the full split's +-0.0082 because n
72+
# falls 293 -> 66. Worth remembering when reading a candidate's margin.
73+
baseline_reward: 0.2923
74+
failure_value: 0.0
75+
max_attempts: 1
76+
# The held-out eval is noisy: score the selected candidate 3x per case and
77+
# average, so the final reward is comparable to the pinned baseline, which was
78+
# itself pooled over 3 rounds. Without this the candidate carries ~sqrt(3) more
79+
# standard error than the floor it is judged against.
80+
# Per-target override - search/validation keep the global n_attempts (1).
81+
n_attempts: 3
82+
aggregate_attempts: mean
83+
84+
evaluation_set_name: swe-bench-pro-sample
85+
objective:
86+
selector:
87+
metric: score
88+
direction: maximize
89+
reward_mode: submit # agent picks; falls back to auto_best, then current version
90+
baseline_floor: false # gates on validation while reward is on test; opt-in only
91+
score_baseline: false # pinned as baseline_reward above, like every sibling
92+
rescore_top_k: 3
93+
rescore_attempts: 1
94+
95+
model: fireworks_ai/deepseek-v4-flash
96+
environment_name: ${inner_env:-modal}
97+
# inner eval sandboxes share a dedicated Modal app instead of the __harbor__ default
98+
extra_harbor_args: ["--ek", "app_name=harness-engineering-bench", "--ek", "sandbox_idle_timeout_secs=3600"]
99+
harbor_python_version: "3.12"
100+
n_attempts: 1
101+
max_retries: 1
102+
infrastructure_max_attempts: 3
103+
infrastructure_retry_delay_seconds: 5
104+
aggregate_attempts: best
105+
feedback_transcripts: true
106+
feedback_max_bytes: 16000
107+
expose_attempt_detail: false
108+
# Timeouts are bumped well above the GAIA baseline: SWE-bench-Pro tasks build a
109+
# real repository and run its (often slow) test suite, so both the per-case and
110+
# the verifier budgets need substantially more headroom than a short-answer task.
111+
# Both mirror the task package's own `[agent] timeout_sec = 3000`, so the
112+
# multiplier is 1.0, matching every sibling benchmark. (The canonical build.yaml
113+
# still reads 1800 here, implying 0.6, but its published 0.2940 was in fact
114+
# measured at 1.0: all 879 sampled trial configs record
115+
# agent_timeout_multiplier=1.0. That file's value is wrong and worth a separate
116+
# one-line fix; this variant is simply spelled correctly from the start.)
117+
timeout_seconds: 28800
118+
case_timeout_seconds: 3000
119+
task_agent_timeout_seconds: 3000
120+
max_concurrency: 24 # matching the rest of the suite
121+
error_rate_threshold: 0.1
122+
verifier_timeout_seconds: 28800
123+
secrets:
124+
- MODAL_TOKEN_ID
125+
- MODAL_TOKEN_SECRET
126+
- WANDB_API_KEY
127+
- WANDB_BASE_URL # self-hosted W&B (scaleai.wandb.io)
128+
129+
# candidate harness runs as an unprivileged uid, unable to read held-out state.
130+
harness_user: harness
131+
132+
wandb:
133+
project: vero-swe-bench-pro
134+
group: swe-bench-pro-sample # distinct from the full-split group
135+
log_traces: true
136+
137+
inference_gateway:
138+
upstream_api_key_env: OPENAI_API_KEY
139+
upstream_base_url_env: OPENAI_BASE_URL
140+
producer:
141+
# NOTE: gpt-5.3-codex has no /responses deployment on the LiteLLM proxy
142+
# (/chat/completions is 200, /responses is 404 DeploymentNotFound), and the
143+
# codex agent is Responses-native, so launch with
144+
# `--model gpt-5.6-sol` (or gpt-4.1) until that deployment exists.
145+
allowed_models: ["${optimizer_model:-gpt-5.6-sol}"]
146+
max_concurrency: 8
147+
evaluation:
148+
# Prefixed form only: the agents strip just `openai/` before calling the
149+
# gateway, which then matches this allow-list as an exact string.
150+
allowed_models: [fireworks_ai/deepseek-v4-flash]
151+
max_requests: 15000
152+
max_tokens: 100000000
153+
max_concurrency: 64
154+
instruct_multifidelity: true
155+
instruct_exhaust_budget: true
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[
2+
"instance_ansible__ansible-12734fa21c08a0ce8c84e533abdc560db2eb1955-v7eee2454f617569fd6889f2211f75bc02a35f9f8",
3+
"instance_ansible__ansible-1a4644ff15355fd696ac5b9d074a566a80fe7ca3-v30a923fb5c164d6cd18280c02422f75e611e8fb2",
4+
"instance_ansible__ansible-34db57a47f875d11c4068567b9ec7ace174ec4cf-v1055803c3a812189a1133297f7f5468579283f86",
5+
"instance_ansible__ansible-b8025ac160146319d2b875be3366b60c852dd35d-v0f01c69f1e2528b935359cfe578530722bca2c59",
6+
"instance_ansible__ansible-fb144c44144f8bd3542e71f5db62b6d322c7bd85-vba6da65a0f3baefda7a058ebbd0a8dcafb8512f5",
7+
"instance_element-hq__element-web-27139ca68eb075a4438c18fca184887002a4ffbc-vnan",
8+
"instance_element-hq__element-web-56c7fc1948923b4b3f3507799e725ac16bcf8018-vnan",
9+
"instance_flipt-io__flipt-8bd3604dc54b681f1f0f7dd52cbc70b3024184b6",
10+
"instance_flipt-io__flipt-967855b429f749c28c112b8cb1b15bc79157f973",
11+
"instance_flipt-io__flipt-b2cd6a6dd73ca91b519015fd5924fde8d17f3f06",
12+
"instance_flipt-io__flipt-f1bc91a1b999656dbdb2495ccb57bf2105b84920",
13+
"instance_future-architect__vuls-0ec945d0510cdebf92cdd8999f94610772689f14",
14+
"instance_future-architect__vuls-7e91f5ef7e5712b1a3d7d5066ad6607e9debc21c",
15+
"instance_future-architect__vuls-d576b6c6c15e56c47cc3e26f5878867677d4a9ea",
16+
"instance_gravitational__teleport-0ecf31de0e98b272a6a2610abe1bbedd379a38a3-vce94f93ad1030e3136852817f2423c1b3ac37bc4",
17+
"instance_gravitational__teleport-1a77b7945a022ab86858029d30ac7ad0d5239d00-vee9b09fb20c43af7e520f57e9239bbcf46b7113d",
18+
"instance_gravitational__teleport-8302d467d160f869b77184e262adbe2fbc95d9ba-vce94f93ad1030e3136852817f2423c1b3ac37bc4",
19+
"instance_internetarchive__openlibrary-630221ab686c64e75a2ce253c893c033e4814b2e-v93c53c13d5f9b383ebb411ee7750b49dcd1a34c6",
20+
"instance_internetarchive__openlibrary-bdba0af0f6cbaca8b5fc3be2a3080f38156d9c92-ve8c8d62a2b60610a3c4631f5f23ed866bada9818",
21+
"instance_internetarchive__openlibrary-d40ec88713dc95ea791b252f92d2f7b75e107440-v13642507b4fc1f8d234172bf8129942da2c2ca26",
22+
"instance_internetarchive__openlibrary-d8162c226a9d576f094dc1830c4c1ffd0be2dd17-v76304ecdb3a5954fcf13feb710e8c40fcf24b73c",
23+
"instance_navidrome__navidrome-29bc17acd71596ae92131aca728716baf5af9906",
24+
"instance_navidrome__navidrome-8d56ec898e776e7e53e352cb9b25677975787ffc",
25+
"instance_nodebb__nodebb-8ca65b0c78c67c1653487c02d1135e1b702185e1-vf2cf3cbd463b7ad942381f1c6d077626485a1e9e",
26+
"instance_nodebb__nodebb-97c8569a798075c50e93e585ac741ab55cb7c28b-vf2cf3cbd463b7ad942381f1c6d077626485a1e9e",
27+
"instance_protonmail__webclients-6e1873b06df6529a469599aa1d69d3b18f7d9d37",
28+
"instance_protonmail__webclients-c5a2089ca2bfe9aa1d85a664b8ad87ef843a1c9c",
29+
"instance_protonmail__webclients-fc9d535e9beb3ae30a52a7146398cadfd6e30606",
30+
"instance_qutebrowser__qutebrowser-1a9e74bfaf9a9db2a510dc14572d33ded6040a57-v2ef375ac784985212b1805e1d0431dc8f1b3c171",
31+
"instance_qutebrowser__qutebrowser-2e961080a85d660148937ee8f0f6b3445a8f2c01-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d",
32+
"instance_qutebrowser__qutebrowser-ebfe9b7aa0c4ba9d451f993e08955004aaec4345-v059c6fdc75567943479b23ebca7c07b5e9a7f34c",
33+
"instance_qutebrowser__qutebrowser-ff1c025ad3210506fc76e1f604d8c8c27637d88e-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d",
34+
"instance_tutao__tutanota-db90ac26ab78addf72a8efaff3c7acc0fbd6d000-vbc0d9ba8f0071fbe982809910959a6ff8884dbbf"
35+
]

0 commit comments

Comments
 (0)