Skip to content

feat(validation): flip RO-Crate base spec to 1.2 (#110)#163

Merged
johannehouweling merged 2 commits into
mainfrom
jh-110-rocrate-1.2
Jun 24, 2026
Merged

feat(validation): flip RO-Crate base spec to 1.2 (#110)#163
johannehouweling merged 2 commits into
mainfrom
jh-110-rocrate-1.2

Conversation

@johannehouweling

Copy link
Copy Markdown
Owner

Unblocked today: roc-validator 0.11.0 ships a ro-crate-1.2 base profile (crs4/rocrate-validator#164), lifting the #105 deferral. This completes #91/#110 — the crate now conforms to RO-Crate 1.2 end to end.

Changes

  • Dep: roc-validator >=0.11.0.
  • Base spec → 1.2: ROCRATE_SPEChttps://w3id.org/ro/crate/1.2; base-pass profile_identifierro-crate-1.2 (dict + disk paths). (Profiles already live on the Root Data Entity from fix(mapping): declare profiles on Root Data Entity, descriptor base-only (#91) #116.)
  • Real fix surfaced by 1.2's stricter SHACL: the CSVW condition-table column emitted valueUrl as a bare id string; 1.2 requires entity links be {"@id": …} references. Fixed.
  • Dict-path guard: 1.2's ro-crate-1.2_3.1 (descriptor-file UTF-8) check can't apply to an in-memory document → it false-positived on build_and_validate. Dropped on the dict path only (_DICT_PATH_NA_CHECKS); the on-disk validate_crate still checks real file encoding. The Validation tests hit the network (CI flake): pin/stub remote context/ontology fetches for offline validation #117 transport-failure guard is message-keyed, so it survived the 1.11.2 check-id change.
  • Tests: flipped the fix(mapping): declare profiles on Root Data Entity, descriptor base-only (#91) #105 deferral assertion (1.11.2); made the offline test version-agnostic (asserts the base pass is clean under network-down rather than hardcoding ro-crate-1.1_2.* ids).
  • Docs/labels: AGENTS.md, isa_tox.md conformance section (was stale — now documents the 1.2 placement: single base URI on the descriptor, profiles on ./), validator pass labels, maturity report, validator suggestion text.

Verification

  • Version bump alone was backward-compatible (1.1 suite green) before the flip.
  • After flip: golden fixtures + build_and_validate + offline validation pass at 1.2; disk + dict paths both clean.
  • Full suite: 675 passed; ty + ruff clean.

Closes #110. (Supersedes the 1.1 deferral from #105.)

🤖 Generated with Claude Code

johannehouweling and others added 2 commits June 24, 2026 16:36
Upstream unblocked it: roc-validator 0.11.0 ships a ro-crate-1.2 base profile
(crs4/rocrate-validator#164), lifting the #105 deferral.

- Bump roc-validator >=0.11.0.
- Descriptor base spec -> https://w3id.org/ro/crate/1.2 (ROCRATE_SPEC); base-pass
  profile_identifier -> ro-crate-1.2 on both the dict and disk paths.
- Real fix surfaced by 1.2's stricter SHACL: the CSVW condition-table column
  emitted valueUrl as a bare id STRING; 1.2 requires entity links be {@id}
  references. Emit {"@id": ...}.
- Dict-path guard: 1.2's ro-crate-1.2_3.1 (descriptor-file UTF-8) check can't
  apply to an in-memory document, so it false-positived on build_and_validate.
  Drop it on the dict path only (_DICT_PATH_NA_CHECKS); the on-disk validate_crate
  still enforces real file encoding. The transport-failure guard (#117) is
  message-keyed, so it survives the 1.1->1.2 check-id change.
- Tests: flip the #105 deferral assertion (1.1 -> 1.2); make the offline test
  version-agnostic (assert base pass clean under network-down, not 1.1 check ids).
- Docs/labels: AGENTS.md, isa_tox.md conformance section (now documents 1.2
  placement: base URI on descriptor, profiles on ./), validator pass labels,
  maturity report, validator suggestion text.

Full suite: 675 passed; ty + ruff clean.

Closes #110.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…#110)

CI runs pytest --timeout=30 -x. Each test in test_e2e_agent_eval drives the full
scripted tool sequence plus two real SHACL validations (build_and_validate + an
on-disk round-trip validate). Under 1.2 the validator is slower (larger ontology /
pyshacl ontology-mixing), so on shared CI runners the build+validate fixture
exceeded 30s and the e2e setup timed out (passed locally on faster hardware).

Add a module-level pytest.mark.timeout(120) so this integration file gets a
realistic ceiling while the rest of the suite keeps the strict 30s. No coverage
change — the disk round-trip validation assertions are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@johannehouweling johannehouweling merged commit 8feff44 into main Jun 24, 2026
2 checks passed
@johannehouweling johannehouweling deleted the jh-110-rocrate-1.2 branch June 25, 2026 22:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flip RO-Crate base spec to 1.2 once rocrate-validator ships a 1.2 base profile

1 participant