GEMMA DEVELOPER AGENTSAVED EVIDENCE
← Dataset Exploration
ARCHIVED TRAINING / ResearchObject/ro-crate-py

researchobject__ro-crate-py-192

This is a preserved training example. Membership in the current training wave has not been verified.
ResearchObject/ro-crate-py · Task 33 of 169

Problem statement

Allow entities to be passed in as `properties` values when initialising an entity
Example demonstrating the issue:
```python
from rocrate.model import ContextEntity, Person
from rocrate.rocrate import ROCrate

crate = ROCrate()

alice = crate.add(
    Person(
        crate,
        "https://orcid.org/0000-0000-0000-0000",
        properties={"name": "Alice Doe", "affiliation": "University of Flatland"},
    )
)
bob = crate.add(
    Person(
        crate,
        "https://orcid.org/0000-0000-0000-0001",
        properties={"name": "Bob Doe", "affiliation": "University of Flatland"},
    )
)

data = crate.add_file(
    "data.csv",
    properties={
        "name": "Data file",
        "encodingFormat": "text/csv",
        "author": [alice, bob],
    },
)

crate.write("out_crate")
```
Running this yields an error:
```
Traceback (most recent call last):
  File "/home/eli/roc/testing/crate.py", line 30, in <module>
    crate.write("crate_out")
  File "/home/eli/roc/testing/.venv-zenodo/lib/python3.12/site-packages/rocrate/rocrate.py", line 453, in write
    writable_entity.write(base_path)
  File "/home/eli/roc/testing/.venv-zenodo/lib/python3.12/site-packages/rocrate/model/metadata.py", line 80, in write
    json.dump(as_jsonld, outfile, indent=4, sort_keys=True)
. . .
TypeError: Object of type Person is not JSON serializable
```

This is because including the author entities in `properties` isn't supported. Instead I would have to use
```python
data = crate.add_file(
    "data.csv",
    properties={
        "name": "Data file",
        "encodingFormat": "text/csv",
    },
)
data["author"] = [alice, bob]
```

In my opinion this is a less intuitive way of doing things, and it's not straightforward for the user to understand why the second method works and the first one doesn't. 

Solution

Behind the scenes we are using a [custom setter](https://github.com/ResearchObject/ro-crate-py/blob/d31f2027b16fb535275c8c8f6c353f58cde64cef/rocrate/model/entity.py#L100) to set individual properties, but [`Entity.__init__()` ](https://github.com/ResearchObject/ro-crate-py/blob/d31f2027b16fb535275c8c8f6c353f58cde64cef/rocrate/model/entity.py#L31) skips activating that function when handling the `properties` argument, the referenced entities don't get connected properly. We can update that `__init__` function so that it triggers `__setitem__`. This way, both methods of setting the author would be equivalent.

Training membership

opd_e4b_pure_v6a opd_e4b_pure_v6b opd_e4b_pure_v7 opd_e4b_pure_v7b opd_e4b_self_audit_v4

Task issues extracted from preserved verified_rft_messages training examples. This is not a verified current RL wave manifest.

Task and snapshot provenance

Snapshot captured 2026-11-12T17:06:59.476467+00:00 · Autoresearch-Arena/gemma-4-developer-agent

{
  "datasets": [
    "opd_e4b_pure_v6a",
    "opd_e4b_pure_v6b",
    "opd_e4b_pure_v7",
    "opd_e4b_pure_v7b",
    "opd_e4b_self_audit_v4"
  ],
  "examples": 12,
  "instance_id": "researchobject__ro-crate-py-192",
  "problem_statement": "Allow entities to be passed in as `properties` values when initialising an entity\nExample demonstrating the issue:\r\n```python\r\nfrom rocrate.model import ContextEntity, Person\r\nfrom rocrate.rocrate import ROCrate\r\n\r\ncrate = ROCrate()\r\n\r\nalice = crate.add(\r\n    Person(\r\n        crate,\r\n        \"https://orcid.org/0000-0000-0000-0000\",\r\n        properties={\"name\": \"Alice Doe\", \"affiliation\": \"University of Flatland\"},\r\n    )\r\n)\r\nbob = crate.add(\r\n    Person(\r\n        crate,\r\n        \"https://orcid.org/0000-0000-0000-0001\",\r\n        properties={\"name\": \"Bob Doe\", \"affiliation\": \"University of Flatland\"},\r\n    )\r\n)\r\n\r\ndata = crate.add_file(\r\n    \"data.csv\",\r\n    properties={\r\n        \"name\": \"Data file\",\r\n        \"encodingFormat\": \"text/csv\",\r\n        \"author\": [alice, bob],\r\n    },\r\n)\r\n\r\ncrate.write(\"out_crate\")\r\n```\r\nRunning this yields an error:\r\n```\r\nTraceback (most recent call last):\r\n  File \"/home/eli/roc/testing/crate.py\", line 30, in <module>\r\n    crate.write(\"crate_out\")\r\n  File \"/home/eli/roc/testing/.venv-zenodo/lib/python3.12/site-packages/rocrate/rocrate.py\", line 453, in write\r\n    writable_entity.write(base_path)\r\n  File \"/home/eli/roc/testing/.venv-zenodo/lib/python3.12/site-packages/rocrate/model/metadata.py\", line 80, in write\r\n    json.dump(as_jsonld, outfile, indent=4, sort_keys=True)\r\n. . .\r\nTypeError: Object of type Person is not JSON serializable\r\n```\r\n\r\nThis is because including the author entities in `properties` isn't supported. Instead I would have to use\r\n```python\r\ndata = crate.add_file(\r\n    \"data.csv\",\r\n    properties={\r\n        \"name\": \"Data file\",\r\n        \"encodingFormat\": \"text/csv\",\r\n    },\r\n)\r\ndata[\"author\"] = [alice, bob]\r\n```\r\n\r\nIn my opinion this is a less intuitive way of doing things, and it's not straightforward for the user to understand why the second method works and the first one doesn't. \r\n\r\nSolution\r\n\r\nBehind the scenes we are using a [custom setter](https://github.com/ResearchObject/ro-crate-py/blob/d31f2027b16fb535275c8c8f6c353f58cde64cef/rocrate/model/entity.py#L100) to set individual properties, but [`Entity.__init__()` ](https://github.com/ResearchObject/ro-crate-py/blob/d31f2027b16fb535275c8c8f6c353f58cde64cef/rocrate/model/entity.py#L31) skips activating that function when handling the `properties` argument, the referenced entities don't get connected properly. We can update that `__init__` function so that it triggers `__setitem__`. This way, both methods of setting the author would be equivalent.",
  "repo": "ResearchObject/ro-crate-py",
  "source": "v2/experiments/train_data/opd_e4b_pure_v6a/verified_rft_messages.jsonl",
  "source_sha256": "f045b7ca5b3883a1e2eaee81e1c02a4a1b53dd7b7b36e98bacb2ba5823a15148"
}
{
  "captured_at": "2026-11-12T17:06:59.476467+00:00",
  "membership": "archived training",
  "membership_evidence": "Task issues extracted from preserved verified_rft_messages training examples. This is not a verified current RL wave manifest.",
  "name": "Preserved post-training task archive",
  "source": "Autoresearch-Arena/gemma-4-developer-agent",
  "source_revision": "016496de222aaafca0d4ee4c18efc63ba616f76e",
  "sources": [
    {
      "path": "v2/experiments/train_data/opd_e4b_cispo_v5/verified_rft_messages.jsonl",
      "sha256": "a43610ad0dfb6ace95375cfae09000f41afc0338cc925af870a4ade7a9b20c4c"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_hybrid_v3/verified_rft_messages.jsonl",
      "sha256": "bd326303eb127e8e5e08f03daf97bb88d79d19709d59f3f93f348bc56686a8df"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_onpolicy_v3/verified_rft_messages.jsonl",
      "sha256": "960c680e797e823a0d3a22f4b1d5ef60a72971373d703b877340b0c9126aaf68"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_pure_v6a/verified_rft_messages.jsonl",
      "sha256": "f045b7ca5b3883a1e2eaee81e1c02a4a1b53dd7b7b36e98bacb2ba5823a15148"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_pure_v6b/verified_rft_messages.jsonl",
      "sha256": "0f62460a9706eea5e1605255896f191ab00cb5706c5f1f2e1c293e9a718218dc"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_pure_v7/verified_rft_messages.jsonl",
      "sha256": "e37f7bd675322f3f81500b73559d60d5f602ca0537bf19f5cb06332c728c7b72"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_pure_v7b/verified_rft_messages.jsonl",
      "sha256": "b864bdc8695183433eef6e31cb8d33fad44ba3aded2170c1ade4ad5b2944ce23"
    },
    {
      "path": "v2/experiments/train_data/opd_e4b_self_audit_v4/verified_rft_messages.jsonl",
      "sha256": "0026023745afb8f3dc1c176dc7f7171157b4ad5a66656b524af218e8e19ceee6"
    },
    {
      "path": "v2/experiments/train_data/rft_e4b_aligned_v2/verified_rft_messages.jsonl",
      "sha256": "92a4515fee9d152b0d4c510ee3ce4caaaffe2003ba7584469f8027f174aab18c"
    },
    {
      "path": "v2/experiments/train_data/rft_v1/verified_rft_messages.jsonl",
      "sha256": "a42453ccd7ac7680b0a03865e8e7080bc8bf74c8d9d193b440c441ed46f8512b"
    },
    {
      "path": "v2/experiments/train_data/rft_v2/verified_rft_messages.jsonl",
      "sha256": "18f4b3bd7e651f83c6acab479c9475e3fa50dc652a384f309e97146983ac85ba"
    }
  ]
}