OpenSlide Support
Decision: use Markdown direct import as the v1 OpenSlide source format.
Markdown remains the canonical, reviewable source. HTML/PDF/JSON exports are derived artifacts only and must not become the source of truth unless John explicitly changes this contract.
Contract
- Student deck source:
slides/student/*.md - Speaker notes:
slides/speaker-notes/*-notes.md - Slide delimiter:
--- - Front matter: YAML block at file start
- Source references: slide body 使用
Sources: SOURCE-ID,完整來源在references/source-map.md - Student export must not include files under
slides/speaker-notes/ - One Markdown file represents one deck.
- Speaker notes are separate Markdown files and are never embedded in the
student deck.
- Student deck filenames and speaker-note filenames must share the same numeric
prefix, for example:
slides/student/00-course-deck.mdslides/speaker-notes/00-course-deck-notes.md
Expected Import Behavior
OpenSlide 顯示時只讀 student deck:
slides/student/00-course-deck.md
講師版另外讀 notes:
slides/speaker-notes/00-course-deck-notes.md
Export Policy
- Default review path: OpenSlide reads
slides/student/*.mddirectly. - Student export path: export only
slides/student/*.md. - Instructor prep path: read the matching
slides/speaker-notes/*-notes.md
side by side.
- If a future OpenSlide workflow requires HTML, PDF, or JSON, add the exporter
spec in this folder and keep Markdown as the canonical source.
Minimal Validation
Before a deck is treated as OpenSlide-ready:
- The student deck has YAML front matter.
- Slides are separated by
---. - Student slides do not contain speaker-only notes.
- Every
Sources:line uses IDs present inreferences/source-map.md. - The matching notes file exists when the student deck is not just a stub.
Original Markdown source
# OpenSlide Support
Decision: use Markdown direct import as the v1 OpenSlide source format.
Markdown remains the canonical, reviewable source. HTML/PDF/JSON exports are
derived artifacts only and must not become the source of truth unless John
explicitly changes this contract.
## Contract
- Student deck source: `slides/student/*.md`
- Speaker notes: `slides/speaker-notes/*-notes.md`
- Slide delimiter: `---`
- Front matter: YAML block at file start
- Source references: slide body 使用 `Sources: SOURCE-ID`,完整來源在 `references/source-map.md`
- Student export must not include files under `slides/speaker-notes/`
- One Markdown file represents one deck.
- Speaker notes are separate Markdown files and are never embedded in the
student deck.
- Student deck filenames and speaker-note filenames must share the same numeric
prefix, for example:
- `slides/student/00-course-deck.md`
- `slides/speaker-notes/00-course-deck-notes.md`
## Expected Import Behavior
OpenSlide 顯示時只讀 student deck:
```text
slides/student/00-course-deck.md
```
講師版另外讀 notes:
```text
slides/speaker-notes/00-course-deck-notes.md
```
## Export Policy
- Default review path: OpenSlide reads `slides/student/*.md` directly.
- Student export path: export only `slides/student/*.md`.
- Instructor prep path: read the matching `slides/speaker-notes/*-notes.md`
side by side.
- If a future OpenSlide workflow requires HTML, PDF, or JSON, add the exporter
spec in this folder and keep Markdown as the canonical source.
## Minimal Validation
Before a deck is treated as OpenSlide-ready:
1. The student deck has YAML front matter.
2. Slides are separated by `---`.
3. Student slides do not contain speaker-only notes.
4. Every `Sources:` line uses IDs present in `references/source-map.md`.
5. The matching notes file exists when the student deck is not just a stub.