@datajaddah/course 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/bin/datajaddah-course.js +238 -0
- package/lib/init.js +375 -0
- package/lib/preview.js +1617 -0
- package/lib/repo-contract.js +1291 -0
- package/lib/slide-markdown.js +505 -0
- package/package.json +41 -0
- package/preview-dist/assets/index-CJUgarn8.css +1 -0
- package/preview-dist/assets/index-CavDNP3d.js +49 -0
- package/preview-dist/index.html +13 -0
- package/scaffold/.agents/rules/general.md +91 -0
- package/scaffold/.agents/skills/course-coding-exercises/SKILL.md +22 -0
- package/scaffold/.agents/skills/course-coding-exercises/references/coding-exercises.md +111 -0
- package/scaffold/.agents/skills/course-platform-overview/SKILL.md +36 -0
- package/scaffold/.agents/skills/course-platform-overview/references/platform-overview.md +105 -0
- package/scaffold/.agents/skills/course-quizzes/SKILL.md +23 -0
- package/scaffold/.agents/skills/course-quizzes/references/quizzes.md +121 -0
- package/scaffold/.agents/skills/course-repo-contract/SKILL.md +24 -0
- package/scaffold/.agents/skills/course-repo-contract/references/repo-contract.md +169 -0
- package/scaffold/.agents/skills/course-slides-v2/SKILL.md +28 -0
- package/scaffold/.agents/skills/course-slides-v2/references/fit-guidance.md +31 -0
- package/scaffold/.agents/skills/course-slides-v2/references/slides-v2.md +138 -0
- package/scaffold/.agents/skills/course-spreadsheet-labs/SKILL.md +23 -0
- package/scaffold/.agents/skills/course-spreadsheet-labs/references/spreadsheet-labs.md +239 -0
- package/scaffold/.agents/skills/course-video-lessons/SKILL.md +22 -0
- package/scaffold/.agents/skills/course-video-lessons/references/video-lessons.md +83 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Datajaddah Course Preview</title>
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-CavDNP3d.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CJUgarn8.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="root"></div>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# General Rules
|
|
2
|
+
|
|
3
|
+
## Mission
|
|
4
|
+
|
|
5
|
+
- This repository exists to author one Datajaddah course.
|
|
6
|
+
- Keep the repository focused on course content, course metadata, assets, and `.agents`.
|
|
7
|
+
- Do not add application code, package manifests, build tooling, CI files, database files, or unrelated documentation.
|
|
8
|
+
|
|
9
|
+
## Non-Goals
|
|
10
|
+
|
|
11
|
+
- Do not create or maintain `course.json` in this repository.
|
|
12
|
+
- Do not reintroduce legacy root files such as `AGENT.md` or `AI_AUTHORING.md`.
|
|
13
|
+
- Do not invent lesson kinds beyond `slides`, `video`, `quiz`, `coding_exercise`, and `spreadsheet_lab`.
|
|
14
|
+
- Do not add platform-only metadata that is not represented by the GitHub course contract.
|
|
15
|
+
|
|
16
|
+
## Default Workflow
|
|
17
|
+
|
|
18
|
+
1. Identify the smallest scope that satisfies the request:
|
|
19
|
+
- course metadata
|
|
20
|
+
- chapter or lesson structure
|
|
21
|
+
- slides v2
|
|
22
|
+
- video lesson
|
|
23
|
+
- quiz
|
|
24
|
+
- coding exercise
|
|
25
|
+
- spreadsheet lab
|
|
26
|
+
2. Edit the minimum number of files needed.
|
|
27
|
+
3. Preserve ordering, slugs, and folder layout unless the user explicitly asks to reorder or rename content.
|
|
28
|
+
4. Keep learner-facing content in markdown bodies and supported frontmatter fields only.
|
|
29
|
+
5. Validate with `npx @datajaddah/course validate .` before finishing.
|
|
30
|
+
6. Use `npx @datajaddah/course preview .` when slide, video, quiz, or exercise rendering needs a visual check.
|
|
31
|
+
|
|
32
|
+
## Repository Contract
|
|
33
|
+
|
|
34
|
+
- The repository uses the markdown-first `repo_tree_v1` contract.
|
|
35
|
+
- `course.md` is the root source of truth for course metadata and overview.
|
|
36
|
+
- `chapters/NN-slug/chapter.md` stores chapter metadata and chapter summary.
|
|
37
|
+
- `chapters/NN-slug/lessons/NN-slug/lesson.md` declares the lesson kind.
|
|
38
|
+
- Each lesson has exactly one supported resource location:
|
|
39
|
+
- `slides/NN-slug.md`
|
|
40
|
+
- `video.md`
|
|
41
|
+
- `quiz/quiz.md` and `quiz/questions/NN-slug.md`
|
|
42
|
+
- `exercise/exercise.md`, `starter.*`, `solution.*`
|
|
43
|
+
- `spreadsheet/exercise.md`, `workbook.json`, `solution.json`, `checks.json`
|
|
44
|
+
- Ordered folders and files must use contiguous `NN-slug` naming.
|
|
45
|
+
|
|
46
|
+
## Platform Interpretation
|
|
47
|
+
|
|
48
|
+
- Slides authored from GitHub become slides v2 content in the platform.
|
|
49
|
+
- Slide markdown becomes HTML content; `@script` content becomes narration text.
|
|
50
|
+
- Slides can use the markdown slide DSL for `@layout`, `@column`, reveal attrs such as `{delay=2 highlight=2}`, and image slots like `slot:diagram-name`.
|
|
51
|
+
- Most explainer videos are produced later on the platform from slide decks plus narration audio.
|
|
52
|
+
- In the repo, author those explainer videos as `slides` with strong `@script` content.
|
|
53
|
+
- Slide audio, generated video, timing, and step markers are platform-owned and are not authored in this repo.
|
|
54
|
+
- Use `video.md` only for a real standalone external video URL that already exists or was explicitly requested.
|
|
55
|
+
- Never invent placeholder `video_url` values such as `example.com` or `replace-me`.
|
|
56
|
+
- Quiz prompts and choice bodies render as HTML in the platform.
|
|
57
|
+
- For quizzes, the learner-visible answer text comes from the choice body, not the choice title.
|
|
58
|
+
- Use `feedback` and `correct_feedback` for explanations; keep choice bodies as the actual answer options.
|
|
59
|
+
- A quiz becomes multi-select automatically when more than one choice is marked correct.
|
|
60
|
+
- Coding exercises must keep `## Context` and `## Instructions` as separate sections in `exercise/exercise.md`.
|
|
61
|
+
- Coding exercise `language` must be only `python` or `r`, and starter/solution files must match that language.
|
|
62
|
+
- Spreadsheet labs use a Univerjs-powered spreadsheet in the platform; the learner edits `workbook.json` data live and checks are evaluated as a requirements checklist.
|
|
63
|
+
- Spreadsheet lab exercises must keep `## Context` and `## Instructions` as separate sections in `spreadsheet/exercise.md`.
|
|
64
|
+
|
|
65
|
+
## Content Quality
|
|
66
|
+
|
|
67
|
+
- Prefer incremental edits over broad rewrites.
|
|
68
|
+
- Keep course copy concise, explicit, and learner-facing.
|
|
69
|
+
- Keep learner-facing material anchored to the requested course subject and the current lesson objective.
|
|
70
|
+
- Make titles short enough to scan in course navigation.
|
|
71
|
+
- Write slides for presentation, quizzes for assessment, and exercises for hands-on practice.
|
|
72
|
+
- Keep slide text lighter than the spoken script; use reveal steps, columns, and planned image slots to structure the visual explanation.
|
|
73
|
+
- Treat repository structure, filenames, `.agents`, validation commands, sync behavior, and platform mechanics as authoring infrastructure. Do not turn them into slides, quiz questions, video notes, or exercises unless the user explicitly asks for a course about Datajaddah authoring.
|
|
74
|
+
- Avoid placeholders unless the user explicitly asks for scaffolding or examples.
|
|
75
|
+
|
|
76
|
+
## Skills In This Repository
|
|
77
|
+
|
|
78
|
+
- Use `.agents/skills/course-platform-overview` for commands, sync behavior, and platform model knowledge.
|
|
79
|
+
- Use `.agents/skills/course-repo-contract` for structure, naming, and validation rules.
|
|
80
|
+
- Use `.agents/skills/course-slides-v2` for slide lessons.
|
|
81
|
+
- Use `.agents/skills/course-video-lessons` for video lessons.
|
|
82
|
+
- Use `.agents/skills/course-quizzes` for quizzes.
|
|
83
|
+
- Use `.agents/skills/course-coding-exercises` for coding exercises.
|
|
84
|
+
- Use `.agents/skills/course-spreadsheet-labs` for spreadsheet labs.
|
|
85
|
+
|
|
86
|
+
## Done Criteria
|
|
87
|
+
|
|
88
|
+
- The repository still validates.
|
|
89
|
+
- The changed lesson kind and file layout match the contract.
|
|
90
|
+
- New content is placed in the correct ordered location.
|
|
91
|
+
- No unrelated files were introduced.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: course-coding-exercises
|
|
3
|
+
description: Author Datajaddah coding exercise lessons in a GitHub course repository. Use this skill when creating or editing coding exercise prompts, language metadata, starter files, solution files, or exercise structure.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Course Coding Exercises
|
|
7
|
+
|
|
8
|
+
Use this skill when the request is about hands-on coding exercises in the GitHub course repo.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Read `references/coding-exercises.md`.
|
|
13
|
+
2. Ensure `lesson.md` declares `kind: coding_exercise`.
|
|
14
|
+
3. Keep the prompt in `exercise/exercise.md` with explicit `## Context` and `## Instructions` sections.
|
|
15
|
+
4. Keep code in exactly one `starter.*` file and one `solution.*` file, using only Python or R.
|
|
16
|
+
5. Validate with `npx @datajaddah/course validate .`.
|
|
17
|
+
|
|
18
|
+
## Boundaries
|
|
19
|
+
|
|
20
|
+
- Do not add hidden test files to the repo contract unless the platform contract is extended first.
|
|
21
|
+
- Keep the learner prompt in markdown and code in code files.
|
|
22
|
+
- Keep exercises aligned with the requested lesson topic, not repository mechanics or platform workflows.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Coding Exercises
|
|
2
|
+
|
|
3
|
+
## Files
|
|
4
|
+
|
|
5
|
+
Inside a coding exercise lesson:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
lesson.md
|
|
9
|
+
exercise/
|
|
10
|
+
exercise.md
|
|
11
|
+
starter.py
|
|
12
|
+
solution.py
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`lesson.md` must contain:
|
|
16
|
+
|
|
17
|
+
```md
|
|
18
|
+
---
|
|
19
|
+
kind: coding_exercise
|
|
20
|
+
title: "Lesson Title"
|
|
21
|
+
---
|
|
22
|
+
Optional lesson summary.
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`exercise/exercise.md` must contain:
|
|
26
|
+
|
|
27
|
+
```md
|
|
28
|
+
---
|
|
29
|
+
title: "Exercise Title"
|
|
30
|
+
language: "python"
|
|
31
|
+
---
|
|
32
|
+
## Context
|
|
33
|
+
|
|
34
|
+
Brief problem setup in markdown.
|
|
35
|
+
|
|
36
|
+
## Instructions
|
|
37
|
+
|
|
38
|
+
Exact task in markdown.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Required Constraints
|
|
42
|
+
|
|
43
|
+
- `language` is required.
|
|
44
|
+
- `language` must be `python` or `r`.
|
|
45
|
+
- `exercise.md` must contain `## Context` followed by `## Instructions`.
|
|
46
|
+
- The exercise directory must contain exactly one `starter.*` file.
|
|
47
|
+
- The exercise directory must contain exactly one `solution.*` file.
|
|
48
|
+
- `starter.*` and `solution.*` must use the same extension.
|
|
49
|
+
|
|
50
|
+
## Supported Language To Extension Mapping
|
|
51
|
+
|
|
52
|
+
- `python` -> `.py`
|
|
53
|
+
- `r` -> `.r`
|
|
54
|
+
|
|
55
|
+
## Platform Behavior
|
|
56
|
+
|
|
57
|
+
- The repo contract stores coding exercise context and instructions in explicit markdown sections.
|
|
58
|
+
- The platform stores those sections in separate `context_description` and `instructions` fields.
|
|
59
|
+
- Student code is executed through Judge0 and the platform can attach AI-generated feedback to submissions.
|
|
60
|
+
- The repo contract does not currently include test fixtures or hidden grader files.
|
|
61
|
+
|
|
62
|
+
## Writing Guidance
|
|
63
|
+
|
|
64
|
+
- State the task in concrete, verifiable terms.
|
|
65
|
+
- Keep the function signature, entrypoint, or expected output explicit.
|
|
66
|
+
- Make the starter code compile or run in the declared language whenever practical.
|
|
67
|
+
- Keep the solution file correct, minimal, and aligned with the prompt.
|
|
68
|
+
- Prefer exercises that can be checked from code behavior, not subjective style.
|
|
69
|
+
- Keep the exercise on the requested lesson topic. Use repo-contract details only for file placement and validation.
|
|
70
|
+
|
|
71
|
+
## Good Prompt Structure
|
|
72
|
+
|
|
73
|
+
1. `## Context`
|
|
74
|
+
2. `## Instructions`
|
|
75
|
+
3. Constraints
|
|
76
|
+
4. Edge cases
|
|
77
|
+
5. What file the learner should edit
|
|
78
|
+
|
|
79
|
+
## Example
|
|
80
|
+
|
|
81
|
+
```md
|
|
82
|
+
---
|
|
83
|
+
title: "Sum Values"
|
|
84
|
+
language: "python"
|
|
85
|
+
---
|
|
86
|
+
## Context
|
|
87
|
+
|
|
88
|
+
You are given a helper function that should add all values in a list.
|
|
89
|
+
|
|
90
|
+
## Instructions
|
|
91
|
+
|
|
92
|
+
Implement `sum_values` in `starter.py`.
|
|
93
|
+
|
|
94
|
+
- Keep the function signature unchanged.
|
|
95
|
+
- Return `0` for an empty list.
|
|
96
|
+
- Compare your answer with `solution.py` after you finish.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Starter example:
|
|
100
|
+
|
|
101
|
+
```py
|
|
102
|
+
def sum_values(values: list[int]) -> int:
|
|
103
|
+
return 0
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Solution example:
|
|
107
|
+
|
|
108
|
+
```py
|
|
109
|
+
def sum_values(values: list[int]) -> int:
|
|
110
|
+
return sum(values)
|
|
111
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: course-platform-overview
|
|
3
|
+
description: Datajaddah course platform overview for markdown-first GitHub course repositories. Use this skill when creating or editing a course repo, when a user asks how the platform interprets course files, what commands to run, how GitHub sync works, or how lessons map to platform resources.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Course Platform Overview
|
|
7
|
+
|
|
8
|
+
Use this skill before making broad course-authoring changes or when the request depends on platform behavior rather than a single resource type.
|
|
9
|
+
|
|
10
|
+
## What this skill covers
|
|
11
|
+
|
|
12
|
+
- The markdown-first GitHub course contract
|
|
13
|
+
- The supported lesson/resource types
|
|
14
|
+
- Platform-owned versus repo-authored data
|
|
15
|
+
- Core authoring commands
|
|
16
|
+
- GitHub sync behavior and current limitations
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. Read `references/platform-overview.md`.
|
|
21
|
+
2. If the task is about repository shape, also use `../course-repo-contract/SKILL.md`.
|
|
22
|
+
3. If the task is resource-specific, use the matching skill:
|
|
23
|
+
- `../course-slides-v2/SKILL.md`
|
|
24
|
+
- `../course-video-lessons/SKILL.md`
|
|
25
|
+
- `../course-quizzes/SKILL.md`
|
|
26
|
+
- `../course-coding-exercises/SKILL.md`
|
|
27
|
+
4. Validate with `npx @datajaddah/course validate .`.
|
|
28
|
+
|
|
29
|
+
## Output Expectations
|
|
30
|
+
|
|
31
|
+
- Keep course repos markdown-first and course-only.
|
|
32
|
+
- Do not invent platform fields that are not represented in the repository contract.
|
|
33
|
+
- Use repository and platform details to shape files, not to choose learner-facing lesson topics.
|
|
34
|
+
- Do not copy `course.md`, `lesson.md`, `.agents`, validation commands, or sync behavior into course material unless the requested course is about Datajaddah authoring.
|
|
35
|
+
- When the user wants explainer video content and no external URL exists yet, author `slides` plus `@script` instead of a standalone `video.md`.
|
|
36
|
+
- Keep implementation notes inside `.agents`, not in learner-facing files.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Platform Overview
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This repository format is the GitHub authoring contract for Datajaddah courses. The repository is not an application project. It is a structured content tree that the platform parses and syncs.
|
|
6
|
+
|
|
7
|
+
## Scope Boundary
|
|
8
|
+
|
|
9
|
+
- Use this reference to decide file placement, commands, and platform-owned data.
|
|
10
|
+
- Treat these mechanics as authoring infrastructure, not learner curriculum.
|
|
11
|
+
- Do not turn repository or platform details into course content unless the course itself is about Datajaddah authoring.
|
|
12
|
+
|
|
13
|
+
## Core Commands
|
|
14
|
+
|
|
15
|
+
- Initialize a new course repo: `npx @datajaddah/course init ./my-course`
|
|
16
|
+
- Validate a repo: `npx @datajaddah/course validate .`
|
|
17
|
+
- Preview a repo locally: `npx @datajaddah/course preview .`
|
|
18
|
+
|
|
19
|
+
Use `validate` as the default final check. Use `preview` when the request changes rendered learner content.
|
|
20
|
+
|
|
21
|
+
## Supported Lesson Types
|
|
22
|
+
|
|
23
|
+
- `slides`
|
|
24
|
+
- `video`
|
|
25
|
+
- `quiz`
|
|
26
|
+
- `coding_exercise`
|
|
27
|
+
|
|
28
|
+
Every lesson maps to exactly one of those resource types.
|
|
29
|
+
|
|
30
|
+
## How The Platform Interprets Repo Content
|
|
31
|
+
|
|
32
|
+
### Course
|
|
33
|
+
|
|
34
|
+
- `course.md` becomes course title, description, duration, thumbnail, and tags.
|
|
35
|
+
|
|
36
|
+
### Chapters
|
|
37
|
+
|
|
38
|
+
- Each ordered chapter folder becomes one chapter in the platform.
|
|
39
|
+
- `chapter.md` body becomes the chapter description.
|
|
40
|
+
|
|
41
|
+
### Lessons
|
|
42
|
+
|
|
43
|
+
- Each ordered lesson folder becomes one lesson in the platform.
|
|
44
|
+
- `lesson.md` declares the kind.
|
|
45
|
+
- The lesson folder title and order drive course navigation.
|
|
46
|
+
|
|
47
|
+
### Slides
|
|
48
|
+
|
|
49
|
+
- GitHub-authored slides become slides v2 content.
|
|
50
|
+
- Slide markdown is rendered to HTML.
|
|
51
|
+
- `@script` becomes slide narration text.
|
|
52
|
+
- Most course explainer videos are later rendered on the platform from slide content plus narration audio.
|
|
53
|
+
- In the repo, author those future videos as render-ready slides with strong `@script` blocks.
|
|
54
|
+
- Audio blobs, generated video, delay metadata, and step markers are not authored in the repo contract.
|
|
55
|
+
|
|
56
|
+
### Video Lessons
|
|
57
|
+
|
|
58
|
+
- `video.md` is for standalone externally hosted videos, not the default explainer flow.
|
|
59
|
+
- `video.md` must provide a real external `video_url`.
|
|
60
|
+
- The platform stores that URL and renders it as the lesson video source.
|
|
61
|
+
- This contract does not represent uploaded binaries or slide-generated videos.
|
|
62
|
+
- Do not invent placeholder URLs such as `example.com` or `replace-me`.
|
|
63
|
+
|
|
64
|
+
### Quizzes
|
|
65
|
+
|
|
66
|
+
- Quiz prompts and choices are authored in markdown and rendered to HTML.
|
|
67
|
+
- A question is treated as multi-select when more than one choice is marked correct.
|
|
68
|
+
- The repository contract stores content and correctness, not learner attempts.
|
|
69
|
+
|
|
70
|
+
### Coding Exercises
|
|
71
|
+
|
|
72
|
+
- The repo stores coding exercise `## Context` and `## Instructions` sections plus starter and solution files.
|
|
73
|
+
- The platform stores those sections separately as `context_description` and `instructions`.
|
|
74
|
+
- Coding exercise `language` is restricted to `python` or `r`.
|
|
75
|
+
|
|
76
|
+
## GitHub Sync Status
|
|
77
|
+
|
|
78
|
+
- Pull from GitHub: supported
|
|
79
|
+
- Push to GitHub: supported for non-destructive updates on the managed sync branch
|
|
80
|
+
- Reorders, moves, and deletes: still blocked in the managed sync flow
|
|
81
|
+
|
|
82
|
+
## Platform-Owned Versus Repo-Owned
|
|
83
|
+
|
|
84
|
+
### Repo-Owned
|
|
85
|
+
|
|
86
|
+
- Course, chapter, lesson titles and summaries
|
|
87
|
+
- Slide markdown and narration script
|
|
88
|
+
- Video title, URL, and notes
|
|
89
|
+
- Quiz prompt, choice bodies, correctness, and feedback
|
|
90
|
+
- Coding exercise context, instructions, language, starter code, and solution code
|
|
91
|
+
|
|
92
|
+
### Platform-Owned
|
|
93
|
+
|
|
94
|
+
- Slide audio blobs
|
|
95
|
+
- Slide timing and step markers
|
|
96
|
+
- Generated slide videos
|
|
97
|
+
- Quiz attempts and learner progress
|
|
98
|
+
- Coding exercise submissions, execution output, and AI-generated feedback
|
|
99
|
+
|
|
100
|
+
## Operational Guardrails
|
|
101
|
+
|
|
102
|
+
- Stay inside the documented lesson/resource formats.
|
|
103
|
+
- Avoid broad rewrites when the user asked for a small change.
|
|
104
|
+
- Keep new files ordered and contiguous.
|
|
105
|
+
- Run `npx @datajaddah/course validate .` after structural edits.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: course-quizzes
|
|
3
|
+
description: Author Datajaddah quiz lessons in a GitHub course repository. Use this skill when creating or editing quiz lessons, quiz descriptions, quiz questions, choice blocks, feedback, or correctness rules.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Course Quizzes
|
|
7
|
+
|
|
8
|
+
Use this skill when the request is about assessments in the GitHub course repo.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Read `references/quizzes.md`.
|
|
13
|
+
2. Ensure `lesson.md` declares `kind: quiz`.
|
|
14
|
+
3. Keep quiz metadata in `quiz/quiz.md`.
|
|
15
|
+
4. Keep each question in its own ordered markdown file under `quiz/questions/`.
|
|
16
|
+
5. Validate with `npx @datajaddah/course validate .`.
|
|
17
|
+
|
|
18
|
+
## Boundaries
|
|
19
|
+
|
|
20
|
+
- Do not split one question across multiple files.
|
|
21
|
+
- Do not invent quiz metadata outside the documented frontmatter and choice-block format.
|
|
22
|
+
- Keep every question aligned with the lesson topic and learning objective.
|
|
23
|
+
- Treat repo or platform examples as format references only. Do not quiz learners on `course.md`, `lesson.md`, `.agents`, validation commands, or sync behavior unless the course is explicitly about Datajaddah authoring.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Quizzes
|
|
2
|
+
|
|
3
|
+
## Files
|
|
4
|
+
|
|
5
|
+
Inside a quiz lesson:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
lesson.md
|
|
9
|
+
quiz/
|
|
10
|
+
quiz.md
|
|
11
|
+
questions/
|
|
12
|
+
01-first-question.md
|
|
13
|
+
02-second-question.md
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`lesson.md` must contain:
|
|
17
|
+
|
|
18
|
+
```md
|
|
19
|
+
---
|
|
20
|
+
kind: quiz
|
|
21
|
+
title: "Lesson Title"
|
|
22
|
+
---
|
|
23
|
+
Optional lesson summary.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`quiz/quiz.md` contains:
|
|
27
|
+
|
|
28
|
+
- optional `title` frontmatter
|
|
29
|
+
- markdown body for quiz description
|
|
30
|
+
|
|
31
|
+
## Question File Format
|
|
32
|
+
|
|
33
|
+
Each question file supports:
|
|
34
|
+
|
|
35
|
+
- optional `title`
|
|
36
|
+
- optional `correct_feedback`
|
|
37
|
+
- optional `randomize_choices: true|false`
|
|
38
|
+
|
|
39
|
+
The question prompt is the markdown before the first `@choice` block.
|
|
40
|
+
|
|
41
|
+
Each choice must use this structure:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
@choice
|
|
45
|
+
title: Choice label
|
|
46
|
+
correct: true
|
|
47
|
+
feedback: Optional feedback
|
|
48
|
+
|
|
49
|
+
Choice body markdown
|
|
50
|
+
@endchoice
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The platform imports the choice body as the learner-visible answer text.
|
|
54
|
+
Treat `title` as optional metadata or a plain-text fallback only.
|
|
55
|
+
Do not put the answer in `title` and an explanation in the body.
|
|
56
|
+
Put the actual answer in the body, and put explanations in `feedback` or `correct_feedback`.
|
|
57
|
+
|
|
58
|
+
## Validation Rules
|
|
59
|
+
|
|
60
|
+
- Every question must include at least one `@choice` block.
|
|
61
|
+
- Every question must have at least one correct choice.
|
|
62
|
+
- Choice metadata must appear before the blank line in the block.
|
|
63
|
+
- All content after the first `@choice` must stay inside choice blocks.
|
|
64
|
+
- `randomize_choices` must be a boolean when present.
|
|
65
|
+
|
|
66
|
+
## Platform Behavior
|
|
67
|
+
|
|
68
|
+
- Question prompt markdown becomes HTML.
|
|
69
|
+
- Choice body markdown becomes HTML.
|
|
70
|
+
- `correct_feedback` becomes the success message for a correct answer.
|
|
71
|
+
- A question becomes multi-select automatically when more than one choice is correct.
|
|
72
|
+
- Learner answers are checked against the exact set of correct choices.
|
|
73
|
+
|
|
74
|
+
## Writing Guidance
|
|
75
|
+
|
|
76
|
+
- Ask one clear thing per question.
|
|
77
|
+
- Use distractors that are plausible but clearly wrong for someone who understands the concept.
|
|
78
|
+
- Keep feedback corrective and specific.
|
|
79
|
+
- Keep each choice body short and learner-facing. Use feedback for explanations, not the visible answer body.
|
|
80
|
+
- Avoid trick questions unless the user explicitly wants them.
|
|
81
|
+
- Prefer concrete behaviors from the lesson topic over vague theory.
|
|
82
|
+
- When the request is topical, keep every question and distractor inside that topic.
|
|
83
|
+
- Use repo or platform mechanics only when the course itself is about Datajaddah authoring.
|
|
84
|
+
|
|
85
|
+
## Multiline Feedback
|
|
86
|
+
|
|
87
|
+
Use YAML block syntax when the feedback needs multiple lines:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
feedback: |
|
|
91
|
+
First line.
|
|
92
|
+
Second line with more detail.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Example
|
|
96
|
+
|
|
97
|
+
This example demonstrates the file shape only. Replace the prompt and choices with the actual lesson concept instead of copying the sample wording into the course.
|
|
98
|
+
|
|
99
|
+
```md
|
|
100
|
+
---
|
|
101
|
+
title: "Key Concept Check"
|
|
102
|
+
correct_feedback: "Correct. This option matches the concept taught in the lesson."
|
|
103
|
+
randomize_choices: false
|
|
104
|
+
---
|
|
105
|
+
Which answer best matches the concept taught in this lesson?
|
|
106
|
+
|
|
107
|
+
@choice
|
|
108
|
+
title: The statement supported by the lesson content
|
|
109
|
+
correct: true
|
|
110
|
+
|
|
111
|
+
The statement supported by the lesson content
|
|
112
|
+
@endchoice
|
|
113
|
+
|
|
114
|
+
@choice
|
|
115
|
+
title: A plausible misconception
|
|
116
|
+
correct: false
|
|
117
|
+
feedback: Use a near-miss from the same topic so the learner feedback can correct the misunderstanding.
|
|
118
|
+
|
|
119
|
+
A plausible misconception
|
|
120
|
+
@endchoice
|
|
121
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: course-repo-contract
|
|
3
|
+
description: Repository structure and validation rules for Datajaddah GitHub course repositories. Use this skill when creating or reorganizing course.md, chapters, lessons, resource folders, filenames, frontmatter, or when fixing validation errors in a course repo.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Course Repo Contract
|
|
7
|
+
|
|
8
|
+
Use this skill when the task is about repository shape, filenames, frontmatter, or validation.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Read `references/repo-contract.md`.
|
|
13
|
+
2. Edit the smallest structural surface that satisfies the request.
|
|
14
|
+
3. Preserve contiguous ordering unless the user explicitly asks to reorder.
|
|
15
|
+
4. Validate with `npx @datajaddah/course validate .`.
|
|
16
|
+
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
- `course.md`
|
|
20
|
+
- `chapters/`
|
|
21
|
+
- lesson folders and resource locations
|
|
22
|
+
- root `.agents` guidance files
|
|
23
|
+
|
|
24
|
+
For resource-specific authoring (slides, video, quizzes, coding exercises, spreadsheet labs), use the matching resource skill after applying the contract rules.
|