ReceiptsRecorded runs, model-free verdicts
VERIFIED

cs-si__eodag-380

VERIFIED on appeal

2 attempts, 1 appeal. 1 file, 77 added and 2 removed lines. Tokens: 3,947,691 tokens. Model cost: $1.20. Sandbox time: 7 min 19 s.

The plan

Repository
cs-si/eodag
Base commit
6e6e689 (image tag)
Issue
prevent mixed results between earth_search and earth_search_cog See #362 . @GriffinBabe pointed out that if we omit to specify the product type when searching on `earth_search_cog`, we get also results from `earth_search` that cannot be downloaded with the wrong download plugin: ```py from eodag import EODataAccessGateway dag = EODataAccessGateway()
Files to edit
  • eodag/utils/stac_reader.py
Approach
Enhance the product type guessing logic in stac_reader.py's load_stac_items function to detect COG-specific patterns in asset hrefs (like 's3://sentinel-s2-l2a/') and map them to appropriate product types such as S2_MSI_L2A_COG instead of returning None.

Attempt 1

REJECTED

Agent branch

KindCommandExitDurationDigest
commandgit ls-files -z
exact command
git ls-files -z
00.003s1356c2d2
commandwc -l eodag/utils/stac_reader.py
exact command
wc -l eodag/utils/stac_reader.py
00.003s0a7cb922
commandgrep -r "load_stac_items\|guess.*product.*type" eodag/ --include="*.py" | head -20
exact command
grep -r "load_stac_items\|guess.*product.*type" eodag/ --include="*.py" | head -20
00.007s22c97e04
commandgrep -n "def guess_product_type" eodag/api/core.py
exact command
grep -n "def guess_product_type" eodag/api/core.py
00.003s0e4f76b1
commandfind eodag -name "*.py" -exec grep -l "load_stac_items\|_fetch_stac_items_from_catalog\|fetch_stac_items" {} \;
exact command
find eodag -name "*.py" -exec grep -l "load_stac_items\|_fetch_stac_items_from_catalog\|fetch_stac_items" {} \;
00.069s2483f717
commandgrep -n "def build_product\|build_eoproduct" eodag/plugins/search/qssearch.py
exact command
grep -n "def build_product\|build_eoproduct" eodag/plugins/search/qssearch.py
10.003sf449888a
commandgrep -n "properties.*json\|create.*EOProduct\|\.from_" eodag/plugins/search/qssearch.py
exact command
grep -n "properties.*json\|create.*EOProduct\|\.from_" eodag/plugins/search/qssearch.py
00.003s2eca22e9
commandgrep -n "EOProduct\|eo_product" eodag/plugins/search/qssearch.py | head -10
exact command
grep -n "EOProduct\|eo_product" eodag/plugins/search/qssearch.py | head -10
00.005s855de3f3
show all 27 steps
KindCommandExitDurationDigest
commandfind tests/resources -name "*stac*" -type d
exact command
find tests/resources -name "*stac*" -type d
00.004sa8240dbe
commandfind tests/resources/stac -name "*.json" | head -5
exact command
find tests/resources/stac -name "*.json" | head -5
00.005sade8c470
commandwc -l tests/resources/stac/country/FRA/year/2017/items/S2B_MSIL1C_20171231T141039_N0206_R110_T21NYC_20171231T201802/S2B_MSIL1C_20171231T141039_N0206_R110_T21NYC_20171231T201802.json
exact command
wc -l tests/resources/stac/country/FRA/year/2017/items/S2B_MSIL1C_20171231T141039_N0206_R110_T21NYC_20171231T201802/S2B_MSIL1C_20171231T141039_N0206_R110_T21NYC_20171231T201802.json
00.003sdf87bc15
commandgrep -n -A5 -B5 "guess_product_type.*\[\|\[.*guess_product_type" eodag/api/core.py
exact command
grep -n -A5 -B5 "guess_product_type.*\[\|\[.*guess_product_type" eodag/api/core.py
00.003s269262e0
commandgrep -n "def get_product" eodag/api/core.py
exact command
grep -n "def get_product" eodag/api/core.py
10.002s5e1ccb68
commandgrep -n "def.*product" eodag/api/core.py
exact command
grep -n "def.*product" eodag/api/core.py
00.003s49ec1f0d
commandgrep -n -B10 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
exact command
grep -n -B10 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
00.003sa3b5416c
commandgrep -n -B20 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
exact command
grep -n -B20 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
00.003s4af20de3
commandgrep -n -B30 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
exact command
grep -n -B30 "for plugin in self._plugins_manager.get_search_plugins(provider=provider)" eodag/api/core.py
00.003s9ea87abb
commandgrep -n "_prepare_search" eodag/api/core.py
exact command
grep -n "_prepare_search" eodag/api/core.py
00.003sc7fead32
writewrite eodag/api/core.py
exact command
/opt/receipts-7382ce08a50e4c0fa08a24b11e357924/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-7382ce08a50e4c0fa08a24b11e357924/incoming/344a4afa66c6729b6760dc1470ae626dde57cee5a4176f58fed54ee12b20bbce /eodag/eodag/api/core.py'
00.005s9a994804
commandpytest tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child -v
exact command
/opt/receipts-262cf0c71715492996bdb53e86f9e4a4/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-262cf0c71715492996bdb53e86f9e4a4/receipts_pytest.py tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-20.xml
15.887sd784c5de3a77
writewrite /tmp/debug_guess.py
exact command
/opt/receipts-9251d5451020435285453a233e832789/bin/busybox sh -c 'mkdir -p /tmp && cp /opt/receipts-9251d5451020435285453a233e832789/incoming/08e2cb632d8522b4b876070274d171fd43417ef6ce4a1e68dc7d0296469bc09c /tmp/debug_guess.py'
00.005s4dd82751
commandcd /eodag && python /tmp/debug_guess.py
exact command
cd /eodag && python /tmp/debug_guess.py
03.981s62ca7e38
writewrite eodag/api/core.py
exact command
/opt/receipts-71650fdc90a34ace96c62726e174016e/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-71650fdc90a34ace96c62726e174016e/incoming/651891de6a6ccde288c0059ed2cf8c5312abe72aa4be53d55f08245e9b6dca18 /eodag/eodag/api/core.py'
00.005s6af57d63
KindCommandExitDurationDigest
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep -E "(guess_product_type|Setting product_type)"
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep -E "(guess_product_type|Setting product_type)"
13.893sa277a85c
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | head -20
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | head -20
03.937s39ce9f0f
writewrite eodag/api/core.py
exact command
/opt/receipts-9ff781a5f14245aeb048ed975727b079/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-9ff781a5f14245aeb048ed975727b079/incoming/150bed23d1bd05fc17234056e305b4924c40e19ddaaf3d72c97c59da37dbe3d5 /eodag/eodag/api/core.py'
00.005s58e51c5a
diffcapture patch
exact command
compute patch in executor staging agent1-e3c7fe6fc8294ca58e40e77fde0991da: /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false add -A && /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false diff --cached --binary --no-ext-diff --no-textconv --no-renames c2e5c0c1a9817b7af6a3bff28aca44c9958a4616
00.173s8814ef115782
Finish summary
turn budget exhausted after 60 turn(s)
Worker outcome
budget_exhausted

Claims not recorded

Witness branch w1

KindCommandExitDurationDigest
applyapply patch ee753707e16d
exact command
git update-index -q --refresh; git apply -v --3way --recount --ignore-space-change --whitespace=nowarn /opt/receipts-8be2f84a06ba4bef919bb0f8b12c8204/incoming/ee753707e16ddde4ccedd9ad6837ea4e384e6d422edb6d6218fc20a14bf054da.diff
00.011s8814ef115782
verificationpytest (witness) tests/integration/test_search_stac_static.py
exact command
/opt/receipts-42306b4552834857a6d5085263eabb3c/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-42306b4552834857a6d5085263eabb3c/receipts_pytest.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/integration/test_search_stac_static.py -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/w1-2.xml
116.764s8814ef115782

Gate predicate checklist

PredicateNameStatusEvidence
R1_fail_to_passFailing specification tests now passFAILtests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child failed; tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item failed
R2_pass_to_passPreviously passing tests keptPASS11 baseline-passing tests still pass
R3_no_shrinkNo removed tests or new skipsPASSall 15 baseline tests collected; skips unchanged (1)
R4_patch_scopePatch scopePASSpatch touches 1 file(s), all in scope
R5_provenanceWitness chain and patch digestPASSagent chain e94c196c -> 58e51c5a unbroken over 27 receipt(s); witness chain e94c196c -> 30cc1c28 unbroken over 2 receipt(s); applied digest matches
R6_claim_auditAgent claim audit (advisory)FAILbranch ended without a finish call

What it said

Finish summary
turn budget exhausted after 60 turn(s)
Worker outcome
budget_exhausted

Claims not recorded

What the record shows

no claim: branch ended without a finish call

SWE-rebench's official grader: not resolved

Agrees with the gate

Attempt 2, on appeal

VERIFIED

Appeal evidence sent to the agent

R1_fail_to_pass: tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child failed; tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item failed
Claim audit: branch ended without a finish call

Fix the source so these checks pass. Tests and pytest configuration are read-only.

Agent branch

KindCommandExitDurationDigest
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep guess_product_type
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep guess_product_type
13.883scc0cbe27
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | head -30
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | head -30
03.798s84872e0b
writewrite eodag/api/core.py
exact command
/opt/receipts-48dbb9d67e094dc0a0935b51cceb16ad/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-48dbb9d67e094dc0a0935b51cceb16ad/incoming/0ed35fc8ae47d232e8d3ff91b388bb1226a1dcb9aeee4dc37499d2a48da329c8 /eodag/eodag/api/core.py'
00.005s0c0e9719
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.806s1927157f
writewrite eodag/api/core.py
exact command
/opt/receipts-be903e6d865548e883dddedbed991ac5/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-be903e6d865548e883dddedbed991ac5/incoming/5993817473a46634783968e39c85872bd7ee37b38587ab13b638834693253a67 /eodag/eodag/api/core.py'
00.004se944c6fd
writewrite eodag/api/core.py
exact command
/opt/receipts-4a892c0bef3b4fa8b6ac39042eedc4c1/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-4a892c0bef3b4fa8b6ac39042eedc4c1/incoming/fb2d6e75e2b794375bb8c36785851c6fe4f86aafe7ab26d5fcfd46ab2aabc8b4 /eodag/eodag/api/core.py'
00.005s5f204e12
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.880sdcbe879c
writewrite eodag/api/core.py
exact command
/opt/receipts-8d49c48ed9194fb0b88b8d97a8b44e35/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-8d49c48ed9194fb0b88b8d97a8b44e35/incoming/73844da86dbb7e71b31fd3a233ba748571f111297a1a0f2bbee1fe3a13d82f2c /eodag/eodag/api/core.py'
00.005sac02a0bd
show all 31 steps
KindCommandExitDurationDigest
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG -A2
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG -A2
03.821sccb39eae
commandcd /eodag && grep -n -A5 -B5 "product_type should be guessed" tests/integration/test_search_stac_static.py
exact command
cd /eodag && grep -n -A5 -B5 "product_type should be guessed" tests/integration/test_search_stac_static.py
00.003sb0759b57
writewrite eodag/api/core.py
exact command
/opt/receipts-b95c2bfb037e4f218137428316d665f1/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-b95c2bfb037e4f218137428316d665f1/incoming/a764362219436ff021c1e82d5ac622b409402bfb2b6d3e4ce62a6a7dc4453e2c /eodag/eodag/api/core.py'
00.005s112b9e16
commandcd /eodag && python /tmp/debug_guess.py
exact command
cd /eodag && python /tmp/debug_guess.py
03.803s62758c6b
writewrite eodag/api/core.py
exact command
/opt/receipts-382a67853161428ebb60687ad35e9ec0/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-382a67853161428ebb60687ad35e9ec0/incoming/02a2274deb8a0955178db414195bcf41f1fb12e41c620ae727ba0ac48ca837df /eodag/eodag/api/core.py'
00.005s56ea8d72
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.849s04c198cb
writewrite eodag/api/core.py
exact command
/opt/receipts-520bbd30098445bea3634acc2db089c5/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-520bbd30098445bea3634acc2db089c5/incoming/07ff730468d6409632f4baa43d55b8b70288c1ef1891fd52191463efbd2cc5a7 /eodag/eodag/api/core.py'
00.004sa942157d
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.853s246e103f
writewrite eodag/api/core.py
exact command
/opt/receipts-fedaf04463c246e7971cba9e3e6667ae/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-fedaf04463c246e7971cba9e3e6667ae/incoming/50cf34261a215ab218166258f001a1c913fa20c74aabcd9ea298a573070bf9db /eodag/eodag/api/core.py'
00.004s2df96161
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.810se279b55f
writewrite eodag/api/core.py
exact command
/opt/receipts-ec8dbe7dd2bc49b1a338c601c93e238d/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-ec8dbe7dd2bc49b1a338c601c93e238d/incoming/d84623d7c411ad706d816c4363372224fa12c453da0baca9d959afaa89b1370f /eodag/eodag/api/core.py'
00.005s2ed0ba5d
commandcd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
exact command
cd /eodag && python /tmp/debug_guess.py 2>&1 | grep DEBUG
03.877s9930f8c2
commandcd /eodag && python /tmp/debug_guess.py
exact command
cd /eodag && python /tmp/debug_guess.py
03.788s85d2cccf
writewrite eodag/api/core.py
exact command
/opt/receipts-a1592445ad164b15afb34cbbb185785d/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-a1592445ad164b15afb34cbbb185785d/incoming/39fc4dfe4802ccdc250ea20005a48ed29234551fb4e651aea84b674350c64a13 /eodag/eodag/api/core.py'
00.005s9a5a121d
writewrite eodag/api/core.py
exact command
/opt/receipts-115f7d5c00b44da18b6c7bee7d8ae9eb/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-115f7d5c00b44da18b6c7bee7d8ae9eb/incoming/51a6d8f1e06bcd790b4b784c6c787a138253e7381064cd2897a8521557abca98 /eodag/eodag/api/core.py'
00.004s45769a01
writewrite eodag/api/core.py
exact command
/opt/receipts-06c8de1ddfdf435cb4bae1e1435dfd8b/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-06c8de1ddfdf435cb4bae1e1435dfd8b/incoming/80951026f4a87a51bd7220e858c5c72e994500a6539571c35040d60012f5f812 /eodag/eodag/api/core.py'
00.005se8d812c4
writewrite eodag/api/core.py
exact command
/opt/receipts-c92f5a4539434b0492d253321701083e/bin/busybox sh -c 'mkdir -p /eodag/eodag/api && cp /opt/receipts-c92f5a4539434b0492d253321701083e/incoming/732ad1b11c3b920675ea2eabc1312647926e7153c5044ea05775d4bcf292c973 /eodag/eodag/api/core.py'
00.005sa0bc842e
commandpytest tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child -v
exact command
/opt/receipts-81b5868b22404602a6db35d19c70346b/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-81b5868b22404602a6db35d19c70346b/receipts_pytest.py tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-53.xml
05.867s7a09a8c47bd1
commandpytest tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item -v
exact command
/opt/receipts-c160c85ec5614af09dd06c38419697e3/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-c160c85ec5614af09dd06c38419697e3/receipts_pytest.py tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-54.xml
05.829s7a09a8c47bd1
KindCommandExitDurationDigest
commandpytest tests/integration/test_search_stac_static.py
exact command
/opt/receipts-573392e8519d45d39e3325806303143d/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-573392e8519d45d39e3325806303143d/receipts_pytest.py tests/integration/test_search_stac_static.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-55.xml
116.717s7a09a8c47bd1
commandpytest tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item_updated_provider -v
exact command
/opt/receipts-4320e79c201d4f50bf3092552426b72d/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-4320e79c201d4f50bf3092552426b72d/receipts_pytest.py tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item_updated_provider -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-56.xml
15.813s7a09a8c47bd1
commandfind eodag -name "*.py" -exec grep -l "class EOProduct\|def __setattr__\|product_type.*setter" {} \;
exact command
find eodag -name "*.py" -exec grep -l "class EOProduct\|def __setattr__\|product_type.*setter" {} \;
00.069sd6b22032
diffcapture patch
exact command
compute patch in executor staging agent1-38f1b7c1cc224d9d8a92131c2c44797c: /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false add -A && /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false diff --cached --binary --no-ext-diff --no-textconv --no-renames c2e5c0c1a9817b7af6a3bff28aca44c9958a4616
00.099s7a09a8c47bd1
Finish summary
turn budget exhausted after 60 turn(s)
Worker outcome
budget_exhausted

Claims not recorded

Witness branch w2

KindCommandExitDurationDigest
applyapply patch ffb1ca6dab8a
exact command
git update-index -q --refresh; git apply -v --3way --recount --ignore-space-change --whitespace=nowarn /opt/receipts-fd08f0bb9e734cb29e2150e8b5576801/incoming/ffb1ca6dab8a748d548eaa86afd7d663cd1cc66cb9e3616bb156da6febe58e43.diff
00.011s7a09a8c47bd1
verificationpytest (witness) tests/integration/test_search_stac_static.py
exact command
/opt/receipts-c00ab8c6ab8b4145a50309dc5747e77e/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-c00ab8c6ab8b4145a50309dc5747e77e/receipts_pytest.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/integration/test_search_stac_static.py -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/w2-2.xml
116.708s7a09a8c47bd1

Gate predicate checklist

PredicateNameStatusEvidence
R1_fail_to_passFailing specification tests now passPASStarget tests passed: tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_child, tests/integration/test_search_stac_static.py::TestSearchStacStatic::test_search_stac_static_load_item
R2_pass_to_passPreviously passing tests keptPASS11 baseline-passing tests still pass
R3_no_shrinkNo removed tests or new skipsPASSall 15 baseline tests collected; skips unchanged (1)
R4_patch_scopePatch scopePASSpatch touches 1 file(s), all in scope
R5_provenanceWitness chain and patch digestPASSagent chain e94c196c -> d6b22032 unbroken over 58 receipt(s); witness chain e94c196c -> 9f3655ad unbroken over 2 receipt(s); applied digest matches
R6_claim_auditAgent claim audit (advisory)FAILbranch ended without a finish call

What it said

Finish summary
turn budget exhausted after 60 turn(s)
Worker outcome
budget_exhausted

Claims not recorded

What the record shows

no claim: branch ended without a finish call

SWE-rebench's official grader: resolved

Agrees with the gate

Shipped patch

diff --git a/eodag/api/core.py b/eodag/api/core.pyindex 0ce2f7f..6209c50 100644--- a/eodag/api/core.py+++ b/eodag/api/core.py@@ -868,7 +868,9 @@ class EODataAccessGateway(object):         :rtype: dict         """         product_type = kwargs.get("productType", None)+        print(f"DEBUG: kwargs content: {kwargs}")         if product_type is None:+            print(f"DEBUG: product_type is None, trying to guess")             try:                 guesses = self.guess_product_type(**kwargs) @@ -886,7 +888,9 @@ class EODataAccessGateway(object):                  # By now, only use the best bet                 product_type = guesses[0]+                kwargs["productType"] = product_type             except NoMatchingProductType:+                print(f"DEBUG: guess_product_type raised NoMatchingProductType")                 queried_id = kwargs.get("id", None)                 if queried_id is None:                     logger.info(@@ -894,8 +898,6 @@ class EODataAccessGateway(object):                     )                 else:                     return kwargs--        kwargs["productType"] = product_type         if start is not None:             kwargs["startTimeFromAscendingNode"] = start         if end is not None:@@ -1314,6 +1316,79 @@ class EODataAccessGateway(object):         # restore preferred_provider         self.set_preferred_provider(preferred_provider) +        # If product type was not explicitly provided, try to guess it from the STAC items+        # If product type was not explicitly provided, try to guess it from the STAC items+        if productType is None and len(products) > 0:+            for i, product in enumerate(products):+                if not product.product_type and i < len(features):+                    # Try to guess product type from the original STAC item properties+                    # The STAC item properties are in the 'properties' field of the GeoJSON feature+                    stac_feature = features[i]+                    if 'properties' in stac_feature:+                        stac_item_properties = stac_feature['properties']+                    else:+                        stac_item_properties = stac_feature+                    +                    # Map STAC property names to expected names for guess_product_type+                    mapped_properties = {}+                    for key, value in stac_item_properties.items():+                        # Skip STAC metadata fields+                        if key.startswith(':') or key in ['type', 'geometry', 'bbox', 'links', 'assets', 'stac_version', 'stac_extensions']:+                            continue+                        # Map common STAC property names to expected names+                        if key == 'platform':+                            mapped_properties['platform'] = value+                        elif key in ['instruments', 'intruments']:  # Handle both spellings+                            if isinstance(value, list) and len(value) > 0:+                                mapped_properties['instrument'] = value[0]+                            elif isinstance(value, str):+                                mapped_properties['instrument'] = value+                        elif key == 'constellation':+                            # constellation might be useful but not in standard guess params+                            pass+                        elif key.startswith('oseo:'):+                            # Map OSEO properties to standard names+                            oseo_map = {+                                'oseo:instrument': 'instrument',+                                'oseo:processingLevel': 'processingLevel', +                                'oseo:sensorType': 'sensorType'+                            }+                            if key in oseo_map:+                                mapped_properties[oseo_map[key]] = value+                        elif key.startswith('sat:') or key.startswith('eo:'):+                            # These might be useful but map to standard names if possible+                            sat_eo_map = {+                                'eo:cloud_cover': 'cloudCover',  # Not in guess params but might be useful+                            }+                            # For now, just pass through with original name - might work if coincidentally matches+                            mapped_properties[key] = value+                        else:+                            # Pass through other properties as-is+                            mapped_properties[key] = value+                    +                    # Remove any remaining problematic characters from keys for safety+                    cleaned_properties = {}+                    for key, value in mapped_properties.items():+                        clean_key = key.replace(':', '_').replace('-', '_')+                        cleaned_properties[clean_key] = value+                    +                    print(f"DEBUG: Mapped properties for guessing: {list(cleaned_properties.keys())}")+                    try:+                        guesses = self.guess_product_type(**cleaned_properties)+                        print(f"DEBUG: guess_product_type returned {guesses}")+                        if guesses:+                            product.product_type = guesses[0]+                            print(f"DEBUG: Set product {i} product_type to {guesses[0]}")+                            # reset driver since product type changed+                            product.driver = product.get_driver()+                    except (NoMatchingProductType, IndexError, KeyError) as e:+                        # If we can't guess, leave product_type as is (None)+                        pass+                +                elif not product.product_type:+                    # No corresponding STAC feature to guess from+                    pass+         # restore plugin._request         plugin._request = plugin_request 

Model and costs

Model
NVIDIA Nemotron 3 Super thinking off · temperature 1.0 · top_p 0.95
Tokens
3,947,691 tokens
Model cost
$1.20
Sandbox time
7 min 19 s
Sandbox cost
Token Factory reported cost: 1.949 (unit not published)
Full environment disclosure
{
  "executor_kind": "tokenfactory",
  "lock_sha256": "7552907a8ebba424fc878c91bb5d0729707f475db7b7909df6e53ceba58bb66a",
  "model": {
    "base_url": "https://api.tokenfactory.nebius.com/v1/",
    "client": "TokenFactoryClient",
    "max_tokens": null,
    "model": "nvidia/nemotron-3-super-120b-a12b",
    "temperature": 1.0,
    "thinking": false,
    "top_p": 0.95
  },
  "pytest_config_digests": {
    "setup.cfg": "dca635d864edf9e4427f176f59742249746f4063ddb7fafc243c98ea36b36441",
    "tox.ini": "ab70ef1ce1b4a21daba6abdf61b835d58c62c28f813ddad618c758828ad30caf"
  },
  "receipts_version": "0.0.1",
  "test_digests": {
    "tests/integration/__init__.py": "360aa7e172599a2a20eaee9209faabbc1638b7ddec886693675d222a380991e6",
    "tests/integration/test_config_ext_plugin.py": "3f47c5a5677a247404909873ab59ea663545a7b721335d32cecf6d9e6621f304",
    "tests/integration/test_core_search_results.py": "94b3ae98fe5170926b7f028e9ee5b533010a83f99a0fa77ef6657fcd91b2b0d0",
    "tests/integration/test_download_auth.py": "7b298eb7df83dd47bda8d77e1e9caafa77edd3d27a3263b0ab2ee42c4cd80675",
    "tests/integration/test_search_stac_static.py": "9dd4f742f8cb7d087b360a14b130f57e21921d700da42b071c44a91adade3b93"
  }
}

The bundle

Recorded JSON and patches. In these copies the local checkout path is removed from file paths, and the home directory is shown as ~.