Skip to content

Schedule data loop (spike): schema, validator, importer, MMED 2025, CI gate (#54) - #25

Closed
WestonVoglesonger wants to merge 1 commit into
ICI3D:gh-pagesfrom
WestonVoglesonger:feat/schedule-data-loop-54
Closed

Schedule data loop (spike): schema, validator, importer, MMED 2025, CI gate (#54)#25
WestonVoglesonger wants to merge 1 commit into
ICI3D:gh-pagesfrom
WestonVoglesonger:feat/schedule-data-loop-54

Conversation

@WestonVoglesonger

Copy link
Copy Markdown

Schedule data loop (spike / draft POC) — #54

Phase 1 proof-of-concept for #54 (epic #58). Not final architecture; opening for review of the mechanism, per DESIGN.md.

What this is

The clinic schedule becomes one flat YAML per cohort-year at _data/schedule/<clinic>/<year>.yml, validated by a gating CI check, instead of a live-edited Liquid wall on the deploy branch. Mirrors the _data/team/*.yml -> profile.html pattern.

In this PR

  • schemas/schedule-cohort.schema.json — Tier 0 schema (closed kind enum with a generic activity, quoted "HH:MM"/ISO-date type: string asserts, per-kind required fields, instructorKey forbids |).
  • tools/validate_schedule.py — Tier 0 (schema) + Tier 1 (people resolution vs _data/team + roles.yml, scoped per-track non-overlap, end >= start, timezone, TODO closure). Emits ::error annotations.
  • tools/import_schedule.py — one-shot Liquid-wall -> cohort YAML; never drops a line (unmappable rows become kind: todo, which hard-fails Tier 1 loudly).
  • _data/schedule/roles.yml + _data/schedule/mmed/2025.yml — the migrated MMED 2025 cohort, validates green (0 errors).
  • .github/workflows/schedule-validate.yml — the PR gate the existing jekyll.yml build cannot provide (a broken schedule still builds green today, e.g. an undefined {{ mlect }} renders empty).

Proves

Importer runs on the real MMED 2025 source and the result validates 0 error(s), 0 warning(s); unmappable lines survive loudly as todo rather than vanishing.

Not decided here

Topology-independent per the design. Final placement of the shared machinery (renderer + validator) is the #56 decision (Carl's call). Companion renderer PR in ICI3D/ICI3D.github.io.

…25, CI gate

Phase 1 proof-of-concept for #54 (epic #58). The clinic schedule becomes one flat
YAML per cohort-year (_data/schedule/<clinic>/<year>.yml), validated by a gating
CI check, instead of a live-edited Liquid wall.

- schemas/schedule-cohort.schema.json: Tier 0 schema (closed kind enum, quoted
  date/time asserts, per-kind required fields, instructorKey forbids '|').
- tools/validate_schedule.py: Tier 0 + Tier 1 (people resolution, scoped
  non-overlap, end>=start, timezone, TODO closure).
- tools/import_schedule.py: one-shot Liquid-wall -> cohort YAML; never drops a
  line (unmappable -> kind: todo, which hard-fails Tier 1 loudly).
- _data/schedule/roles.yml + _data/schedule/mmed/2025.yml (migrated, validates
  green: 0 errors).
- .github/workflows/schedule-validate.yml: the PR gate the existing jekyll.yml
  build cannot provide (a broken schedule still builds green today).

Topology-independent per DESIGN.md; final placement of shared machinery is the
#56 decision. Companion renderer PR in ICI3D.github.io.
@WestonVoglesonger

Copy link
Copy Markdown
Author

Superseded by #26. #25 vendored the tools/schema/renderer directly in MMED; the new approach keeps that logic single-source in ICI3D.github.io (#59) and MMED just pulls it in via the submodule + a small workflow. MMED's 2025 schedule data carries over to #26.

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