Skip to content
Open
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/linters/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
# Super-Linter loads ActionLint rules from this directory.
# Its bundled label catalog predates GitHub-hosted ubuntu-24.04.
self-hosted-runner:
labels:
- ubuntu-24.04
43 changes: 43 additions & 0 deletions .github/scripts/p2_classroom_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env python3
"""Validate the minimum classroom evidence contract for all active projects."""

from __future__ import annotations

import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[2]
MANIFEST = ROOT / "config" / "active-integrity-manifest.json"
REQUIRED = ("P2_CLASSROOM.md", "P2_EVIDENCE.md", "P2_LOCAL_PILOT.md", "START_HERE.md")


def main() -> int:
projects = json.loads(MANIFEST.read_text(encoding="utf-8"))["projects"]
failures: list[str] = []
for entry in projects:
root = ROOT / entry["project"]
for name in REQUIRED:
if not (root / name).is_file():
failures.append(f"{entry['project']}/{name}")
classroom = root / "P2_CLASSROOM.md"
if (
classroom.is_file()
and "## Learning and assessment"
not in classroom.read_text(encoding="utf-8")
):
failures.append(
f"{entry['project']}/P2_CLASSROOM.md missing Learning and assessment"
)
if failures:
print(
"ERROR: classroom contract failures: " + ", ".join(failures),
file=sys.stderr,
)
return 1
print(f"P2 classroom contract: PASS ({len(projects)} projects)")
return 0


if __name__ == "__main__":
raise SystemExit(main())
7 changes: 7 additions & 0 deletions INSTRUCTOR_SOLUTION_PACK.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Instructor Solution Pack Boundary

> Complete worked solutions are intentionally stored in the separately distributed instructor pack, not in this student-facing repository.

Every active project now includes `START_HERE.md`, which provides a local-safe starting action, observable
checkpoints, non-spoiling hints, and expected evidence. Instructors should retain the separate solution pack
and release assistance progressively.
Loading
Loading