Skip to content

Commit 00cb4fc

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 d93c696 commit 00cb4fc

6 files changed

Lines changed: 509 additions & 27 deletions

File tree

harness-engineering-bench/CONFIGURATION.md

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

158158
## Per-benchmark values
159159

160-
| | gaia | officeqa | swe-atlas-qna | tau3 | browsecomp-plus |
161-
|---|---|---|---|---|---|
162-
| target model | gpt-5.4-mini ◇ | deepseek-v4-flash | gpt-oss-120b | deepseek-v4-flash | deepseek-v4-flash |
163-
| held-out baseline (K=3) ◆ | 0.574 ±0.010 | 0.360 ±0.042 | 0.097 ±0.011 (agg 0.632) | 0.611 ±0.021 | 0.449 ±0.007 |
164-
| split dev/val/test | 33/66/66 | 49/98/99 | 25/49/50 | 75/150/150 | 33/66/66 |
165-
| dev budget (runs / cases) | 100 / 132 | 100 / 196 | 100 / 100 | 100 / 300 | 100 / 132 |
166-
| val budget (runs / cases) | 100 / 264 | 100 / 392 | 100 / 196 | 100 / 600 | 100 / 264 |
167-
| gateway max_tokens (evaluation, finalization each) ¶ | 2 B | 3 B | 2 B | 4 B | 2 B |
168-
| max_concurrency (cases in flight) § | 24 | 24 | 24 | 24 | 24 |
169-
| timeout_seconds (per eval) ‖ | 7200 | 28800 | 90000 | 79200 | 39600 |
170-
| case_timeout_seconds = declared † | 600 | 1800 | 10800 | 3600 | 3600 |
171-
| task_agent_timeout_seconds (declared) | 600 | 1800 | 10800 | 3600 | 3600 |
172-
| declared `[verifier] timeout_sec` | 300 | 300 | 900 | 300 | 300 |
173-
| declared `build_timeout_sec` | 300 | 600 | 600 | 600 | 7200 |
174-
| verifier_timeout_seconds ‖ | 14400 | 54000 | 176400 | 158400 | 75600 |
175-
| BASH_MAX_TIMEOUT_MS (tool) ¤ | 3600 s | 10800 s | 39600 s | 32400 s | 14400 s |
176-
| harness_user | harness | harness | null ‡ | null ‡ | null ‡ |
177-
| task_services_use_upstream | false | false | true (rubric judge) | true (user-sim + grader) | true (answer judge) |
178-
| task-specific extras || `--no-force-build` (prebuilt corpus image) | `keepalive` --ek (ENTRYPOINT images) | `TAU2_*` model pins | pinned 2.2 GB BM25 index |
160+
| | gaia | officeqa | swe-atlas-qna | tau3 | browsecomp-plus | swe-bench-pro |
161+
|---|---|---|---|---|---| --- |
162+
| target model | gpt-5.4-mini ◇ | deepseek-v4-flash | gpt-oss-120b | deepseek-v4-flash | deepseek-v4-flash | gpt-4o ◈ |
163+
| held-out baseline (K=3) ◆ | 0.574 ±0.010 | 0.360 ±0.042 | 0.097 ±0.011 (agg 0.632) | 0.611 ±0.021 | 0.449 ±0.007 | 0.294 ±0.008 ◈ |
164+
| split dev/val/test | 33/66/66 | 49/98/99 | 25/49/50 | 75/150/150 | 33/66/66 | 146/292/293 ◈ |
165+
| dev budget (runs / cases) | 100 / 132 | 100 / 196 | 100 / 100 | 100 / 300 | 100 / 132 | 100 / 146 ◈ |
166+
| val budget (runs / cases) | 100 / 264 | 100 / 392 | 100 / 196 | 100 / 600 | 100 / 264 | 100 / 292 ◈ |
167+
| gateway max_tokens (evaluation, finalization each) ¶ | 2 B | 3 B | 2 B | 4 B | 2 B | 100 M |
168+
| max_concurrency (cases in flight) § | 24 | 24 | 24 | 24 | 24 | 8 ◈ |
169+
| timeout_seconds (per eval) ‖ | 7200 | 28800 | 90000 | 79200 | 39600 | 28800 |
170+
| case_timeout_seconds = declared † | 600 | 1800 | 10800 | 3600 | 3600 | 1800 ◈ |
171+
| task_agent_timeout_seconds (declared) | 600 | 1800 | 10800 | 3600 | 3600 | 3000 |
172+
| declared `[verifier] timeout_sec` | 300 | 300 | 900 | 300 | 300 | n/a (registry dataset) |
173+
| declared `build_timeout_sec` | 300 | 600 | 600 | 600 | 7200 | n/a (registry dataset) |
174+
| verifier_timeout_seconds ‖ | 14400 | 54000 | 176400 | 158400 | 75600 | 28800 |
175+
| BASH_MAX_TIMEOUT_MS (tool) ¤ | 3600 s | 10800 s | 39600 s | 32400 s | 14400 s | n/a |
176+
| harness_user | harness | harness | null ‡ | null ‡ | null ‡ | harness |
177+
| task_services_use_upstream | false | false | true (rubric judge) | true (user-sim + grader) | true (answer judge) | false |
178+
| 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 ◈ |
179179

180180
## Conventions
181181

@@ -267,6 +267,43 @@ deepseek benchmarks logged zero exceptions over 945 trials, swe-atlas lost
267267
5/150 to gpt-oss 128k context overflow, and gaia lost 4/198 (infra) after the
268268
agent's reason/search-only-turn crash was fixed.
269269

270+
◈ swe-bench-pro is the newest benchmark and the only one with **two** configs.
271+
The column above describes the canonical `baseline/build.yaml` (full 731-instance
272+
dataset, split 146/292/293). Alongside it sits `baseline/build.sample.yaml`, a
273+
subsampled variant for optimizer runs; the canonical config is unchanged by it.
274+
275+
*Why a variant.* The full split is unaffordable for an optimizer loop: each case
276+
builds a real repository and runs its test suite, so the held-out baseline alone
277+
cost ~7.8h of wall clock for three rounds, and an optimizer evaluates candidates
278+
many times over. The variant is 33/66/66, matching gaia and browsecomp-plus, on
279+
`fireworks_ai/deepseek-v4-flash`, `max_concurrency: 24`, 4x case budgets
280+
(132/264), and `case_timeout_seconds: 3000`.
281+
282+
*The sample is nested.* The full split is computed first and each partition is
283+
then narrowed within itself (`partition_swe_bench_pro.py --sample`), so
284+
`partitions/sample/test.json` is a strict subset of `partitions/test.json`. No
285+
instance can migrate from test into development, and the baseline needed no
286+
re-measuring: **0.292 ±0.033** over the 66 sampled cases is the same K=3 trials
287+
that produced the full-partition 0.294 ±0.008, recomputed. The point estimate
288+
barely moves; the spread widens roughly fourfold because n falls 293 → 66, which
289+
matters when reading a candidate's margin over that floor.
290+
291+
*Two known inconsistencies in the canonical config*, both pre-existing and left
292+
alone here rather than silently changed:
293+
294+
- `case_timeout_seconds: 1800` against `task_agent_timeout_seconds: 3000` implies
295+
a 0.6 multiplier, but the pinned 0.294 was measured at **1.0**: all 879 sampled
296+
trial configs record `agent_timeout_multiplier=1.0`. The config value is wrong,
297+
not the measurement. Every sibling has these two equal.
298+
- `model: gpt-4o`, but the 0.294 baseline was measured against
299+
**qwen-3.6-27b**. So the recomputed 0.292 the variant pins is also a qwen
300+
number while the variant targets deepseek; treat it as provisional until a K=3
301+
deepseek pass over the 66 replaces it (~1.8h at `max_concurrency: 24`).
302+
303+
Also unlike the siblings, swe-bench-pro's canonical config still has
304+
`score_baseline: true`, so it re-measures the seed every run instead of pinning
305+
it. The variant sets `false` and pins, as everything else does.
306+
270307
◇ gaia is the exception to the deepseek-v4-flash default: it is multimodal and
271308
that model is text-only. Verified against the same litellm endpoint the gateway
272309
proxies to — gpt-5.4-mini returns 200 for every request shape the gaia agent
@@ -316,7 +353,7 @@ per benchmark from its own case counts; see each `build.yaml` for the arithmetic
316353
the per-key bucket, so more keys buy proportionally more parallel runs:
317354

318355
| counter | limit | scope |
319-
|---|---|---|
356+
|---|---|---| --- |
320357
| `x-ratelimit-api_key-limit-tokens` | 10 M TPM | **per key** |
321358
| `x-ratelimit-api_key-limit-requests` | 5 000 RPM | **per key** |
322359

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)