Repository navigation
Reject duty-only properties on non-Duty rules - #244
Merged
Merged
Conversation
jgeluk
requested review from
FroehlichMarcel,
joshcornejo,
matthiasautrata,
rivettp and
tonyseale
as code owners
August 19, 2026 17:10
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Oct 12, 2026
jgeluk
added a commit
to matthiasautrata/dprod
that referenced
this pull request
Oct 21, 2026
[Carried forward onto develop for EKGF#275 by Matthias Autrata: conflicts resolved against EKGF#244/EKGF#245/EKGF#262/EKGF#268/EKGF#270/EKGF#272, the namespace changed from https://www.omg.org/spec/DPROD/dprod/ to https://ekgf.org/dprod/spec/develop/, and EKGF#244's duty-only shape and test migrated from dprod:recurrence to dprod:schedule, which is not duty-only.]
jgeluk
added a commit
to matthiasautrata/dprod
that referenced
this pull request
Oct 21, 2026
[Carried forward onto develop for EKGF#275 by Matthias Autrata: conflicts resolved against EKGF#244/EKGF#245/EKGF#262/EKGF#268/EKGF#270/EKGF#272, the namespace changed from https://www.omg.org/spec/DPROD/dprod/ to https://ekgf.org/dprod/spec/develop/, and EKGF#244's duty-only shape and test migrated from dprod:recurrence to dprod:schedule, which is not duty-only.]
tonyseale
pushed a commit
to matthiasautrata/dprod
that referenced
this pull request
Oct 29, 2026
[Carried forward onto develop for EKGF#275 by Matthias Autrata: conflicts resolved against EKGF#244/EKGF#245/EKGF#262/EKGF#268/EKGF#270/EKGF#272, the namespace changed from https://www.omg.org/spec/DPROD/dprod/ to https://ekgf.org/dprod/spec/develop/, and EKGF#244's duty-only shape and test migrated from dprod:recurrence to dprod:schedule, which is not duty-only.]
tonyseale
pushed a commit
to matthiasautrata/dprod
that referenced
this pull request
Oct 29, 2026
[Carried forward onto develop for EKGF#275 by Matthias Autrata: conflicts resolved against EKGF#244/EKGF#245/EKGF#262/EKGF#268/EKGF#270/EKGF#272, the namespace changed from https://www.omg.org/spec/DPROD/dprod/ to https://ekgf.org/dprod/spec/develop/, and EKGF#244's duty-only shape and test migrated from dprod:recurrence to dprod:schedule, which is not duty-only.]
tonyseale
pushed a commit
that referenced
this pull request
Oct 29, 2026
Resolves #184. Supersedes #234. Step 7 of #275. Carries Jacobus Geluk's reusable schedule model (#234) forward onto `develop`. His two commits are kept with their authorship (`047dcb4`, `81777dd`); each has a note recording what changed while carrying it forward. Following Tony's and Jacobus's decision on #184, the anchor rule is: **the schedule's DTSTART/TZ sets the occurrence times, and activation only limits the range.** ## Stacking This branch is built on #268 → #272, plus a merge of #270 (`687ea77`), because the schedule errors use #268's error model and §3.2 combines with #270's `asset`. Until those three merge, this PR also shows their commits. The schedule work is the last four commits: - `047dcb4` Implement reusable schedule model (Jacobus) - `81777dd` Address review findings on the schedule model (Jacobus) - `7c67d39` Migrate the spec and examples from `dprod:recurrence` to `dprod:schedule` - `257e65c` Bump the contracts modification dates **Merge after #270, #268 and #272.** Then squash-merge directly (the shared changes are identical) or first rebase the four commits onto `develop`. ## Changes compared with #234 - **No frozen-archive changes, and no duplicate of #244.** #244's duty-only shape and test now cover `dprod:deadline`, `dprod:subjectOfDuty` and `dprod:objectOfDuty`. `dprod:schedule` is not duty-only. The obsolete `dprod:recurrence` is rejected by `RejectObsoleteRecurrenceShape` on every rule type, and there are tests for both. - **Develop namespace.** `https://www.omg.org/spec/DPROD/dprod/` is replaced throughout, including the TZID-conflict SPARQL. The namespace move stays at step 10 of #275. - **Schedule errors fit #267's fail-closed model.** There is no `errors` field on the Result. A schedule that can't be processed adds its error to a new set E₅ (`occurrences(d, Σ) = Error(e)`, computed in Step 3), and Step 7 returns `Failure(E₃ ∪ E₄ ∪ E₅)`. D-FREEZE: a duty whose schedule is in error makes no transition, so only the Permit path is affected; Deny and NotApplicable are not. `EvaluationError = Set<ResolutionError | ScheduleError>`, and the §9.7 completion argument also replaces each schedule error with some set of occurrence times. - **The workflow change is dropped.** #262 already runs `validate.py` in CI. - **`ScheduleIdentifierShape` is renamed `RejectAnonymousScheduleShape`.** The spec generator renders every NodeShape that has a `sh:targetClass` as a class except `Reject*` shapes, so the old name appeared as a spurious "ScheduleIdentifier" class. - **The core spec and examples move to `dprod:schedule`.** The data-offer-and-contract, lifecycle-and-versioning, provider-duties and odcs-mapping examples, plus the `respec/template.html` contract example, now use identified `Schedule` nodes with an explicit `DTSTART;TZID=…` and an RRULE. The overview diagram is regenerated, and `tests/test_spec_contract_sections.py` expects `Schedule` and `ScheduleFormat` classes. - **The modification dates are bumped** in the contracts docs and in `dct:modified` on the profile, shapes and vocabulary. All 9 review findings on #234 were checked and are addressed. They are: crontab whitespace, the RFC 5545 regex (EXDATE/RDATE order, duplicate FREQ), the TZ conflict and `carriesTimeZone`, how ScheduleError is consumed and totality, the `expand` signature, bare-config tests, undefined guide examples, the identifier message on its own shape, the RRULE table, and the recurrence sweep of specification.md. ## Tests - This branch: core 26 OK, contracts 98 OK, `validate.py` clean. - Integrated with #264, #266, #270, #268 and #272: core 26 OK, contracts 102 OK, `validate.py` clean. Every JSON-LD example that uses a schedule conforms to the contracts shapes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Jacobus Geluk <jacobus.geluk@ekgf.org> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Addresses #239.
This is intentionally stacked on #234 because the acceptance criteria require the Schedule model introduced there. Once #234 is merged, this branch can be rebased onto
developand the PR base changed.Changes
odrl:Dutytypedprod:recurrencedprod:scheduleremains valid on non-Duty resourcesVerification
python -m unittest discover -s dprod-contracts/tests(48 tests)python -m unittest discover -s tests(2 tests)python dprod-contracts/validate.pypython spec-generator/main.pygit diff --check