ReceiptsRecorded runs, model-free verdicts
VERIFIED

stac-utils__pystac-561

VERIFIED on first verdict

1 attempt, 0 appeals. 1 file, 8 added and 12 removed lines. Tokens: 397,914 tokens. Model cost: $0.12. Sandbox time: 1 min 43 s.

The plan

Repository
stac-utils/pystac
Base commit
0ba1a1d (image tag)
Issue
Implement RequiredPropertyMissing exception where appropriate #309 implements an exception that raises when a required property is missing, using the `repr` of an object in the message to give users as much detail as possible to identify where the error is. This issue will apply after that PR is merged, and the goal of the issue is to implement throwing this exception (normally via the `get_required` utility method) where appropriate and ensuring that object `repr`s give details for any object that is throwing this exception.
Files to edit
none
Approach
none

Attempt 1

VERIFIED

Agent branch

KindCommandExitDurationDigest
commandgit ls-files -z
exact command
git ls-files -z
00.003s7e60964b
commandfind . -name '*.py' -exec grep -l 'RequiredPropertyMissing' {} \;
exact command
find . -name '*.py' -exec grep -l 'RequiredPropertyMissing' {} \;
00.118s67ab0799
commandgrep -n "raise.*STACError" pystac/extensions/pointcloud.py
exact command
grep -n "raise.*STACError" pystac/extensions/pointcloud.py
00.003s1c9f9bb6
writewrite pystac/extensions/pointcloud.py
exact command
/opt/receipts-659eee6d535c4b97b1bd89d11658626c/bin/busybox sh -c 'mkdir -p /pystac/pystac/extensions && cp /opt/receipts-659eee6d535c4b97b1bd89d11658626c/incoming/07557dac6d230d5a66fe5b9d0487ad6af97be12e5b5086427386d9b24d36eded /pystac/pystac/extensions/pointcloud.py'
00.005seff5c7bf
writewrite pystac/extensions/pointcloud.py
exact command
/opt/receipts-607406b47f0b40929742c11d2a6b2afc/bin/busybox sh -c 'mkdir -p /pystac/pystac/extensions && cp /opt/receipts-607406b47f0b40929742c11d2a6b2afc/incoming/6de3dd35e7038e4cd253ce22c801699527053b9abad99a2bb4868bd5899f65e8 /pystac/pystac/extensions/pointcloud.py'
00.005s5de2ef79
writewrite pystac/extensions/pointcloud.py
exact command
/opt/receipts-4a910d297f3441de8510ba6408ba5a14/bin/busybox sh -c 'mkdir -p /pystac/pystac/extensions && cp /opt/receipts-4a910d297f3441de8510ba6408ba5a14/incoming/4b0b18eb00908ea483e61e1b3485f77bd071087d87e675a2aa448fe5289f9f0f /pystac/pystac/extensions/pointcloud.py'
00.005s125b77b5
writewrite pystac/extensions/pointcloud.py
exact command
/opt/receipts-6f1006f0505e464f8b586d9b45659f1c/bin/busybox sh -c 'mkdir -p /pystac/pystac/extensions && cp /opt/receipts-6f1006f0505e464f8b586d9b45659f1c/incoming/feeb5b32eef8e90785131486665936bab102192f0f318915d3b67f1ddd43c943 /pystac/pystac/extensions/pointcloud.py'
00.005sea530983
commandpytest tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_statistics -xvs
exact command
/opt/receipts-3018d216d8cf4483936e83e2465d3345/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-3018d216d8cf4483936e83e2465d3345/receipts_pytest.py tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_statistics -xvs -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-8.xml
00.849sd80d181b3920
show all 17 steps
KindCommandExitDurationDigest
commandpytest tests/extensions/test_pointcloud.py
exact command
/opt/receipts-98e664e7829e4d98811cba449ef6cec9/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-98e664e7829e4d98811cba449ef6cec9/receipts_pytest.py tests/extensions/test_pointcloud.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-9.xml
11.034sd80d181b3920
commandfind . -name 'test_pointcloud.py' -type f
exact command
find . -name 'test_pointcloud.py' -type f
00.014se4b69c89
commandgrep -n "def test_count" tests/extensions/test_pointcloud.py
exact command
grep -n "def test_count" tests/extensions/test_pointcloud.py
00.003s9d93bc15
commandgrep -n "def test_pointcloud_schema" tests/extensions/test_pointcloud.py
exact command
grep -n "def test_pointcloud_schema" tests/extensions/test_pointcloud.py
00.003s3231a972
commandpytest tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_schema -xvs
exact command
/opt/receipts-e05a39b63e7f4acf9cea84f64ba9187c/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-e05a39b63e7f4acf9cea84f64ba9187c/receipts_pytest.py tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_schema -xvs -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-13.xml
10.934sd80d181b3920
KindCommandExitDurationDigest
writewrite pystac/extensions/pointcloud.py
exact command
/opt/receipts-b48806c867d946ad9239780979da7548/bin/busybox sh -c 'mkdir -p /pystac/pystac/extensions && cp /opt/receipts-b48806c867d946ad9239780979da7548/incoming/bd3517b2e4a21be9a9952d282812eec9bda37075ae9a11fa1aa83b5ca9663449 /pystac/pystac/extensions/pointcloud.py'
00.005sd5f0a73c
commandpytest tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_schema -xvs
exact command
/opt/receipts-df019fea28e24b77b883b5ce45403a8e/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-df019fea28e24b77b883b5ce45403a8e/receipts_pytest.py tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_schema -xvs -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-15.xml
00.846s189117397e5c
commandpytest tests/extensions/test_pointcloud.py
exact command
/opt/receipts-1267b517f47149a780c7fe0b918fb7b2/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-1267b517f47149a780c7fe0b918fb7b2/receipts_pytest.py tests/extensions/test_pointcloud.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-16.xml
11.022s189117397e5c
diffcapture patch
exact command
compute patch in executor staging agent1-5cd29f30233740128b0a1a088f9f9c01: /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 cf5da5d76df2022dccfe2fa9cb0f2d6218bef1b1
00.085s189117397e5c
Finish summary
Implemented RequiredPropertyMissing exceptions in Schema and Statistic getters where required properties are missing, and modified Schema.__repr__ to avoid recursion when properties are missing. The targeted test now passes.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: no
  • Files changed: pystac/extensions/pointcloud.py
  • Ran tests: yes

Witness branch w1

KindCommandExitDurationDigest
applyapply patch 1fc79b4529ba
exact command
git update-index -q --refresh; git apply -v --3way --recount --ignore-space-change --whitespace=nowarn /opt/receipts-ceef5ad02071433d82d6f122ae445702/incoming/1fc79b4529ba8a081eee17e4d1bb1c0cd20d52e25134e5b5dfeb88414c3a7da2.diff
00.015s189117397e5c
verificationpytest (witness) tests/extensions/test_pointcloud.py
exact command
/opt/receipts-ea34563d944f4caaacced70402797d57/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-ea34563d944f4caaacced70402797d57/receipts_pytest.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/extensions/test_pointcloud.py -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/w1-2.xml
11.030s189117397e5c

Gate predicate checklist

PredicateNameStatusEvidence
R1_fail_to_passFailing specification tests now passPASStarget tests passed: tests/extensions/test_pointcloud.py::PointcloudTest::test_pointcloud_statistics
R2_pass_to_passPreviously passing tests keptPASS22 baseline-passing tests still pass
R3_no_shrinkNo removed tests or new skipsPASSall 30 baseline tests collected; skips unchanged (0)
R4_patch_scopePatch scopePASSpatch touches 1 file(s), all in scope
R5_provenanceWitness chain and patch digestPASSagent chain fbb2e29a -> 763ced30 unbroken over 17 receipt(s); witness chain fbb2e29a -> baa345eb unbroken over 2 receipt(s); applied digest matches
R6_claim_auditAgent claim audit (advisory)FAILclaimed green; own last run had 6 failed, 0 errors: tests/extensions/test_pointcloud.py::PointcloudTest::test_count, tests/extensions/test_pointcloud.py::PointcloudTest::test_density, tests/extensions/test_pointcloud.py::PointcloudTest::test_encoding, tests/extensions/test_pointcloud.py::PointcloudTest::test_schemas, tests/extensions/test_pointcloud.py::PointcloudTest::test_type, tests/extensions/test_pointcloud.py::PointcloudTest::test_validate_pointcloud

What it said

Finish summary
Implemented RequiredPropertyMissing exceptions in Schema and Statistic getters where required properties are missing, and modified Schema.__repr__ to avoid recursion when properties are missing. The targeted test now passes.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: no
  • Files changed: pystac/extensions/pointcloud.py
  • Ran tests: yes

What the record shows

contradicted: claimed green; own last run had 6 failed, 0 errors: tests/extensions/test_pointcloud.py::PointcloudTest::test_count, tests/extensions/test_pointcloud.py::PointcloudTest::test_density, tests/extensions/test_pointcloud.py::PointcloudTest::test_encoding, tests/extensions/test_pointcloud.py::PointcloudTest::test_schemas, tests/extensions/test_pointcloud.py::PointcloudTest::test_type, tests/extensions/test_pointcloud.py::PointcloudTest::test_validate_pointcloud

SWE-rebench's official grader: resolved

Agrees with the gate

Shipped patch

diff --git a/pystac/extensions/pointcloud.py b/pystac/extensions/pointcloud.pyindex 67fb62e..fb1d3e6 100644--- a/pystac/extensions/pointcloud.py+++ b/pystac/extensions/pointcloud.py@@ -14,6 +14,7 @@ from pystac.extensions.base import ( from pystac.extensions.hooks import ExtensionHooks from pystac.summaries import RangeSummary from pystac.utils import map_opt, get_required+from pystac.errors import RequiredPropertyMissing  T = TypeVar("T", pystac.Item, pystac.Asset) @@ -90,9 +91,7 @@ class Schema:         """Gets or sets the size value."""         result: Optional[int] = self.properties.get("size")         if result is None:-            raise pystac.STACError(-                f"Pointcloud schema does not have size property: {self.properties}"-            )+            raise RequiredPropertyMissing(self, "size")         return result      @size.setter@@ -107,9 +106,7 @@ class Schema:         """Gets or sets the name property for this Schema."""         result: Optional[str] = self.properties.get("name")         if result is None:-            raise pystac.STACError(-                f"Pointcloud schema does not have name property: {self.properties}"-            )+            raise RequiredPropertyMissing(self, "name")         return result      @name.setter@@ -127,9 +124,10 @@ class Schema:         self.properties["type"] = v      def __repr__(self) -> str:-        return "<Schema name={} size={} type={}>".format(-            self.name, self.size, self.type-        )+        name = self.properties.get("name", "<missing>")+        size = self.properties.get("size", "<missing>")+        typ = self.properties.get("type", "<missing>")+        return f"<Schema name={name} size={size} type={typ}>"      def to_dict(self) -> Dict[str, Any]:         """Returns a JSON-like dictionary representing this ``Schema``."""@@ -219,9 +217,7 @@ class Statistic:         """Gets or sets the name property."""         result: Optional[str] = self.properties.get("name")         if result is None:-            raise pystac.STACError(-                f"Pointcloud statistics does not have name property: {self.properties}"-            )+            raise RequiredPropertyMissing(self, "name")         return result      @name.setter

Model and costs

Model
NVIDIA Nemotron 3 Super thinking off · temperature 1.0 · top_p 0.95
Tokens
397,914 tokens
Model cost
$0.12
Sandbox time
1 min 43 s
Sandbox cost
Token Factory reported cost: 0.098 (unit not published)
Full environment disclosure
{
  "executor_kind": "tokenfactory",
  "lock_sha256": "349012cbabe58302f0a9f5c4f20d0bfeeba84b7e9dc49bfbff49cba82299accb",
  "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": "60ae3fb30b4cfdf1ad854c4aa11814595700922940b51557e45b01407478d482"
  },
  "receipts_version": "0.0.1",
  "test_digests": {
    "tests/extensions/__init__.py": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "tests/extensions/test_custom.py": "172cc939c072bfcde85127cba00cf1455469903c5770d3f9c39e4ccfc6e97a33",
    "tests/extensions/test_datacube.py": "f0be8b497242190014dab136ba6c1dae65495f091a0401b2e53445380be72720",
    "tests/extensions/test_eo.py": "e3f434a2645f71b148e77046a3a67207212b2e5b368078ff8f9bf27e8eb1246a",
    "tests/extensions/test_file.py": "6f8c81702d36a70a5ceab3466877c44dda7fd456b20300321240533b555f7b64",
    "tests/extensions/test_label.py": "312f28a3df98d76a879ccab43e527b47687e4720afdc3a4a52b0400837b143c6",
    "tests/extensions/test_pointcloud.py": "49cf680ef4da803f7cae2688e1799cf8e19704bc49dd0fc6457ade1bb1464ba5",
    "tests/extensions/test_projection.py": "c4cf394e8b0ba37f44503d7d7c01f8fe2cfb87fe1dbb0acd477cd901fb3eb16e",
    "tests/extensions/test_raster.py": "8e41de0adec336c482cfe5c9150e5db0dbe0477cc040d6840f89c916e83b820d",
    "tests/extensions/test_sar.py": "98405562f8e7e4bbc239246466668fecdd2514606d878161f9ab39988680ca71",
    "tests/extensions/test_sat.py": "cffd898e102462796e8742599780ee08345b27207fc9068a99ce6bd6f709c1da",
    "tests/extensions/test_scientific.py": "2e8737d88b3b9b75421b9936c1dff89de3ffdddd0738999326549c3a3e4c7a60",
    "tests/extensions/test_timestamps.py": "7d90ad1d1c548f2d564ea6662ffa7a006cf64c1907314908b836c2796c20280a",
    "tests/extensions/test_version.py": "b9bdd967b4d53e4788b9c935a176e40ff3712e0b3ca25c0cf5bc54531cc0c876",
    "tests/extensions/test_view.py": "79512d3020158c0a9e39b30372cf9fd55fe4363106ca01436136a4af25b8d8a2"
  }
}

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 ~.