Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Bug Report
description: Something is broken — wrong check.py gate, bad link, crash, incorrect task
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for the report! Please be as specific as possible.

- type: input
id: location
attributes:
label: Location
description: "Which file or mission? e.g. level_3/missions/02_pydantic_models/check.py"
placeholder: "level_X/missions/YY_name/check.py"
validations:
required: true

- type: textarea
id: what-happened
attributes:
label: What happened?
description: What did you run, what did you expect, what did you get instead?
placeholder: |
Ran: uv run python level_3/missions/02_pydantic_models/check.py
Expected: ✓ all gates pass
Got: ❌ Gate 3 fails even with correct implementation
validations:
required: true

- type: textarea
id: reproduction
attributes:
label: Minimal reproduction
description: Paste the relevant part of your task.py (or check.py output)
render: python

- type: input
id: python-version
attributes:
label: Python version
placeholder: "uv run python --version"
validations:
required: false
28 changes: 28 additions & 0 deletions .github/ISSUE_TEMPLATE/content_issue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Content Issue
description: Unclear README, misleading docstring, wrong explanation, typo
labels: ["content"]
body:
- type: input
id: location
attributes:
label: Location
description: "File path, e.g. level_2/missions/03_character_base/README.md"
placeholder: "level_X/missions/YY_name/README.md"
validations:
required: true

- type: textarea
id: what-is-confusing
attributes:
label: What is confusing or wrong?
description: Quote the exact text and explain what should be different
validations:
required: true

- type: textarea
id: suggested-fix
attributes:
label: Suggested improvement (optional)
description: How would you rewrite it?
validations:
required: false
45 changes: 45 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Feature Request
description: Suggest an improvement to an existing mission, project, or tool
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
For entirely new missions or projects, please use the **New Mission / Project Proposal** template instead.

- type: input
id: location
attributes:
label: Location
description: Which file or component would this improve?
placeholder: "e.g. level_3/missions/04_json_files/README.md"
validations:
required: true

- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: Describe the friction or gap a student hits today
validations:
required: true

- type: textarea
id: solution
attributes:
label: Proposed solution
description: What would you change and how?
validations:
required: true

- type: dropdown
id: scope
attributes:
label: Estimated scope
options:
- Tiny — wording / typo fix
- Small — a few lines in README or task.py
- Medium — new check.py gate or task variant
- Large — structural change to mission/project
validations:
required: true
58 changes: 58 additions & 0 deletions .github/ISSUE_TEMPLATE/new_mission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: New Mission / Project Proposal
description: Suggest a new mission or checkpoint project for the course
labels: ["enhancement", "content"]
body:
- type: markdown
attributes:
value: |
Use this template to propose a new mission (focused concept exercise) or project (multi-concept checkpoint).

- type: dropdown
id: type
attributes:
label: Type
options:
- Mission (single concept, ~30 min)
- Project checkpoint (multi-concept, ~1–2 h)
validations:
required: true

- type: dropdown
id: level
attributes:
label: Level
options:
- Level 1 — Python Basics
- Level 2 — OOP and Design
- Level 3 — Validation and Persistence
- Level 4 — Interfaces
- Level 5 — Maintainability
- Level 6 — API
- Level 7 — Concurrency
validations:
required: true

- type: input
id: concept
attributes:
label: Python concept taught
placeholder: "e.g. dataclasses.asdict, functools.lru_cache, contextlib.contextmanager"
validations:
required: true

- type: textarea
id: game-connection
attributes:
label: RPG connection
description: How does this concept connect to the RPG game? What mechanic does it add?
placeholder: "e.g. lru_cache speeds up repeated monster stat lookups in a battle simulator"
validations:
required: true

- type: textarea
id: why
attributes:
label: Why should this be in the course?
description: What gap does it fill? What would a student be able to do after completing it?
validations:
required: true
21 changes: 21 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## What does this PR do?

<!-- One sentence. "Add Mission X", "Fix check.py gate Y", "Refactor Z" -->

## Type

- [ ] New mission / project
- [ ] Bug fix (broken check.py, wrong scaffold, bad link)
- [ ] Content fix (README, task.py clarity, docstring)
- [ ] Tooling (author_check, course_status, CI)
- [ ] Other

## Checklist

- [ ] `uv run python tools/author_check.py` — 0 errors
- [ ] New missions have: `README.md`, `task.py` (with `raise NotImplementedError`), `check.py` (with `raise SystemExit(1)` on failure)
- [ ] New projects have: `README.md`, `check.py`
- [ ] check.py uses `sys.executable`, not `"uv", "run", "python"` in subprocess calls
- [ ] No solution code leaked into `task.py`
- [ ] README commands run from repo root
- [ ] COURSE_MAP.md updated if structure changed
35 changes: 35 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
author-check:
name: Author Check
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
version: "latest"

- name: Set up Python
run: uv python install 3.12

- name: Install dependencies
run: uv sync --all-groups

- name: Run author_check.py
run: uv run python tools/author_check.py

- name: Lint repo tooling (tools/)
run: uv run ruff check tools/

- name: Smoke test — entry point
run: uv run rpg --help
Loading
Loading