Skip to content

Ontology v3: deck, cohort, assignment, submission, grade, question, assessment, attempt - #700

Open
joepio wants to merge 3 commits into
mainfrom
claude/leerboom-ontology-v3
Open

joepio wants to merge 3 commits into
mainfrom
claude/leerboom-ontology-v3

Conversation

@joepio

@joepio joepio commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

Requested by Joep · project thread

The teaching half of the Leerboom (Atomic Education) schema, as release v3 (v1 and v2 stay untouched). Design: proposal.md in the project files (leerboom/), addenda on teachers, decks, AI-made material and the teacher interface.

  • Classes: deck-v1, cohort-v1, assignment-v1, submission-v1, grade-v1, question-v1, assessment-v1, attempt-v1, with 43 properties. Plus the plain properties lesson-license and lesson-generated-with (a future lesson-v2 will recommend them).
  • Retesting and procedural tests (added after Joep's 28 Oct feedback): assessment-draw (questions per attempt drawn from the bank, preferring unseen ones), assessment-app (a drive app that generates and checks questions itself and records attempts), attempt-seed (reproduce what the learner saw).
  • terms-v3.mjs (+ .d.mts) generated per release; terms.mjs and terms-v2.mjs are byte-identical.
  • README section "Release v3" with the LRMI and xAPI mapping. A grade is not an Open Badge; credentials are a later class.

Notes

  • A release can only point at classes it lists itself, so properties targeting skill-v1 or lesson-v1 carry no classtype; their description says what they point at.
  • Enumerated values (status, scale, kind) are plain strings with the allowed values in the description, as in v2.
  • A score computed by an app in the learner's browser suits practice; attested assessments need a check the learner does not control (later).

Tests

ontology.mjs build and check --published origin/main OK (98 term files), ontology-kit tests (130 pass), oxfmt clean.


Generated by Claude Code

@joepio joepio self-assigned this Oct 28, 2026

joepio commented Oct 28, 2026

Copy link
Copy Markdown
Member Author

Overlap review against the fixed vocabularies (atomic-server lib/defaults/*.json). Published property URLs are hard to take back, so worth settling before v3 is released:

  1. Already in core, reuse instead:

    • attempt-created-at is https://atomicdata.dev/properties/createdAt. grade-graded-at is the same thing too, since a grade is created when it is given.
    • grade-comment (markdown) is https://atomicdata.dev/properties/description.
    • assignment-due is https://atomicdata.dev/task/v1/due-date. An Assignment is close to a Task: consider isA Task plus assignment-skill/assignment-cohort, so the task views and status work on it for free.
  2. Enums as free strings. submission-status, grade-scale, assessment-kind and question-type are strings with the allowed values in the description ("the repository has no tag convention yet"). The convention exists: task/v1/status uses allowsOnly with fixed value resources, and #2365 in atomic-server now enforces allowsOnly on commits. Same for question-options as a JSON string array.

  3. One property per class for the same relation. These pairs say the same thing:

    • grade-assessment and attempt-assessment
    • grade-assignment and submission-assignment
    • assignment-skill and question-skill
    • grade-student and submission-student

    Atomic properties are not scoped to a class, so one assessment, assignment, skill and learner property each would cover both classes. That takes 37 properties down by about 6, and queries like "everything for this skill" stay one filter. attempt has no learner property at all (it relies on the drive owner), so the learner is currently modelled three different ways.

  4. lesson-license (SPDX or URL) belongs on any creative work, not just lessons. Name it license so a later document or deck can reuse it.

Deck, Question, Assessment and Cohort as classes look right.


Generated by Claude Code

joepio commented Oct 28, 2026

Copy link
Copy Markdown
Member Author

Re-checked at 59d5f32: the new commit adds assessment-draw, assessment-app and attempt-seed, but none of the four points above changed. attempt-created-at, grade-graded-at, grade-comment and assignment-due are still there; the enums are still free strings; the per-class pairs (grade-/attempt-assessment, grade-/submission-assignment, assignment-/question-skill, grade-/submission-student) remain; lesson-license is unchanged. Same verdict: settle these before v3 is published.


Generated by Claude Code

joepio commented Oct 28, 2026

Copy link
Copy Markdown
Member Author

Addressed all four points in f11b482:

  1. Core reuse: attempt-created-at/grade-graded-at → createdAt, grade-comment → description, assignment-due → task/v1/due-date (now a date). Assignment is not isA Task: the kit has no class inheritance and an assignment has a status per learner, not one.
  2. Enums: submission-status, grade-scale, question-type, assessment-kind are now select properties with allowsOnly and Tag value resources (ontology/values/<property>-<value>), like task/v1/status. The kit gained allowsOnly support with tests; v1/v2 bytes unchanged. question-options stays a JSON string array (core has no string-array datatype; a Tag per answer text would be one resource per option).
  3. Shared relations: assessment, assignment, skill, learner replace the per-class pairs; attempt-v1 recommends learner.
  4. lesson-license → license, lesson-generated-with → generated-with.

v3 properties 42 → 34. Ontology tests 133 pass, build/check clean, oxfmt clean, oxlint 0 errors.


Generated by Claude Code

joepio commented Oct 28, 2026

Copy link
Copy Markdown
Member Author

Re-checked at f11b482: all four points are resolved.

  • Core createdAt, description and task/v1/due-date are reused.
  • submission-status, grade-scale, assessment-kind and question-type are allowsOnly over Tag values in ontology/values/.
  • assessment, assignment, skill and learner are now one property each. Attempt has learner too.
  • license and generated-with are generic.

OK from me. The only free-string enum left is lesson-format, which was already published in v2, so it is fine to leave until a v4.


Generated by Claude Code

Retesting without repeated questions: an assessment draws N questions per
attempt from its bank. Procedural tests: an assessment can point at a drive
app that generates and checks questions itself; the attempt keeps the seed.
…property per relation

Reuse createdAt, description and task/v1 due-date; share learner, assessment, assignment and skill across classes; rename lesson-license and lesson-generated-with to license and generated-with. The kit gains allowsOnly with generated Tag value files under ontology/values/.
@joepio
joepio force-pushed the claude/leerboom-ontology-v3 branch from f11b482 to 9527d12 Compare November 9, 2026 12:24

This branch has not been deployed

No deployments
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.

1 participant