Skip to content

Commit 0bff56f

Browse files
committed
Classhub demo solid state
1 parent a96a08d commit 0bff56f

17 files changed

Lines changed: 263 additions & 155 deletions

docs/COURSEPACK_REGISTRY_RFC.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Status
44

5+
- Closed for the current release line on `main` as of 2026-06-20.
56
- Local authoring/package tooling is live and should be treated as the shipped source-of-truth workflow.
67
- Live import/export flows are also real on `main`, including:
78
- local SDK validation/build/package via `scripts/coursepack_sdk.py`
@@ -22,11 +23,11 @@
2223
- `/teach` now includes a filtered content/import audit surface for recent packaging and import operations,
2324
- operators can deep-link into a selected audit row and inspect stored provenance metadata without leaving `/teach`,
2425
- class dashboards now include shortcuts into the class-scoped audit feed.
25-
- Remote registry service, signed discovery API, and desktop GUI authoring remain optional future work and should not be implied as active roadmap commitments without a concrete operator need.
26+
- Remote registry service, signed discovery API, and desktop GUI authoring remain parked future work and should not be implied as active roadmap commitments without a concrete operator need.
2627

27-
## Closure recommendation
28+
## Closure
2829

29-
Close this RFC as implemented for the current release line. Phase 1 and the bounded Phase 2 static-index slice are complete.
30+
This RFC is implemented for the current release line. Phase 1 and the bounded Phase 2 static-index slice are complete.
3031

3132
Remaining items are deferred product/governance decisions, not active implementation commitments:
3233

@@ -57,7 +58,7 @@ Implemented now:
5758
- `package`: package only (skip validation)
5859
- `docs/COURSE_AUTHORING.md` now documents SDK usage as the primary local workflow.
5960

60-
Still not implemented:
61+
Parked future work:
6162
- Remote registry service/API for signed discovery and sync orchestration.
6263
- Desktop GUI app for drag-drop authoring/packaging.
6364
- District-grade signed artifact verification and trust policy management.

docs/CURRENT_STATE.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## Summary
44
This page is the live snapshot of what ClassHub currently ships on `main`.
55
It is updated manually when shipped capabilities change.
6-
Last reviewed: 2026-06-09
6+
Last reviewed: 2026-06-20
77

88
## Current state at a glance
99

@@ -21,7 +21,7 @@ Last reviewed: 2026-06-09
2121
### Teacher/program operations
2222
- Teacher portal supports roster, lesson release controls, submissions, moderation, outcomes, certificates, and class closeout workflows.
2323
- Superuser org, staff, class assignment, coursepack import, and content/import audit tools are live.
24-
- Teacher day-of-class shell and top-task choreography are wired into `/teach`.
24+
- Teacher day-of-class shell and top-task choreography are wired into `/teach`, with stabilized first-contact CTA wording for create/open class, join-card sharing, submission review, lessons, and summary export.
2525

2626
### Trust, privacy, and org boundaries
2727
- `/trust`, `/student/my-data`, retention presets, student rename/export/delete controls, and privacy-safe support tags are live.
@@ -64,11 +64,11 @@ Last reviewed: 2026-06-09
6464
- Repo now ships a narrow Headscale control-plane ops bundle for the Jetson_B/`hs.creatempls.org` role: bootstrap, Compose stack, backup, restore, and systemd timer artifacts live under `ops/headscale/`.
6565
- Repo now also ships a Headscale replacement-host rehearsal wrapper (`bash scripts/headscale_restore_rehearsal_evidence.sh --backup ...`) that captures control-plane restore artifacts plus LMS/Thundercompute-side verification placeholders.
6666
- Helper classroom-quality eval tooling is live (`scripts/run_helper_classroom_eval.sh` + classroom prompt pack in `services/homework_helper/tutor/fixtures/eval_prompts_classroom_realistic.jsonl`).
67-
- Coursepack Authoring SDK is live via `scripts/coursepack_sdk.py` (validate/build/package local content artifacts, checksum sidecars, static registry index create/validate/list/fetch flows), and ClassHub can now import directly from a static registry index via `manage.py import_coursepack_registry` as well as superuser browser flows in `/teach` and `/admin`.
67+
- Coursepack Authoring SDK is live via `scripts/coursepack_sdk.py` (validate/build/package local content artifacts, checksum sidecars, static registry index create/validate/list/fetch flows), and ClassHub can now import directly from a static registry index via `manage.py import_coursepack_registry` as well as superuser browser flows in `/teach` and `/admin`. The coursepack registry RFC is closed for the current release line; live operator workflow belongs in `COURSEPACK_REGISTRY_PUBLISHING.md` and `COURSE_AUTHORING.md`.
6868
- Registry remote fetches are timeout-bounded and byte-capped for indexes, checksum sidecars, and artifact downloads; artifact verification streams SHA-256 calculation instead of loading the full remote payload into memory first.
6969
- `/teach` now includes a filtered content/import audit feed for recent registry imports, upload imports, syllabus compilation, template generation, and syllabus export operations.
7070
- Teacher syllabus zip import now maps session-prefixed support images into lesson assets.
71-
- Organization boundaries and RBAC capability checks are live.
71+
- Organization boundaries and RBAC capability checks are live. The RBAC capabilities RFC is closed for architecture; live operator guidance belongs in `RBAC_GUIDE.md` and rollout truth belongs in `FEATURE_MATURITY.md`.
7272
- Scoped RBAC grants are live behind `CLASSHUB_RBAC_SCOPED_GRANTS_ENABLED`.
7373
- RBAC simulation and policy bundle import/export endpoints are live for operators.
7474
- RBAC custom roles are live (role definitions, capabilities, and staff assignments) in teacher RBAC tools and policy bundles.
@@ -84,7 +84,7 @@ Last reviewed: 2026-06-09
8484
- Telemetry split Phase 1 Slice 0/1/2/3/4/5/6 scaffolding is live (validated telemetry mode envs, optional telemetry DB registration in settings, telemetry router + dedicated `hub_telemetry` schema app, centralized dual-write service seam for event/outcome emit paths, read abstraction for support/rollup/lifespan event queries, baseline split-write instrumentation counters/log fields, an idempotent `backfill_telemetry_events` command with dry-run/batch resume controls, and a strict `check_telemetry_parity` command for cutover gates). Slice 7 release-cycle evidence capture is complete at `artifacts/stability/2026-03-10/telemetry/` (parity + strict smoke + rollback drill).
8585
- Telemetry evidence tooling now also renders machine-checked `slo_summary.md` artifacts from explicit metric inputs and can include telemetry DB backup/restore validation in restore rehearsal evidence when telemetry split is active.
8686
- Superuser runtime policy lock checks are live in `/teach?advanced=1&portal_mode=admin` and in stability guardrails via `scripts/check_runtime_policy_lock.py`.
87-
- Teacher top-task choreography and `Start Here Today` contract wiring are live in `/teach` and guarded by `scripts/check_teacher_top_tasks_contract.py`.
87+
- Teacher top-task choreography and `Start Here Today` contract wiring are live in `/teach` and guarded by `scripts/check_teacher_top_tasks_contract.py`; the current wording baseline uses `Create class workspace`, `Print join card`, `Open class`, `Review submissions`, `Lessons`, and `Export summary CSV`.
8888
- Registry-backed docs truth checks are live via `docs/_registry/runtime_contracts.json` and `scripts/check_docs_truth.py`.
8989

9090
## Deployment and reliability posture
@@ -130,4 +130,4 @@ Last reviewed: 2026-06-09
130130
- Infrastructure hardening roadmap: [INFRASTRUCTURE_HARDENING_ROADMAP.md](INFRASTRUCTURE_HARDENING_ROADMAP.md)
131131
- Ops execution: [RUNBOOK.md](RUNBOOK.md), [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
132132
- Remote-compute evidence: [EVIDENCE_REMOTE_COMPUTE.md](EVIDENCE_REMOTE_COMPUTE.md)
133-
- RBAC implementation and policy ops: [RBAC_GUIDE.md](RBAC_GUIDE.md), [RBAC_CAPABILITIES_RFC.md](RBAC_CAPABILITIES_RFC.md)
133+
- RBAC implementation and policy ops: [RBAC_GUIDE.md](RBAC_GUIDE.md), [FEATURE_MATURITY.md](FEATURE_MATURITY.md), [RBAC_CAPABILITIES_RFC.md](RBAC_CAPABILITIES_RFC.md) for historical architecture rationale.

docs/DECISIONS.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4343,3 +4343,47 @@ Execution ownership and gates:
43434343
- Reduces drift between repo documentation and actual platform behavior.
43444344
- Makes it easier to decide what should be built next versus what should stop pretending to be near-term.
43454345
- Keeps roadmap language honest for operators, contributors, and future product decisions.
4346+
4347+
## Teacher first-contact wording baseline (2026-06-20)
4348+
4349+
**Current decision:**
4350+
- Keep `/teach` and `/teach/class/<id>` first-contact CTAs aligned to one small vocabulary:
4351+
- `Create class workspace`
4352+
- `Print join card`
4353+
- `Open class`
4354+
- `Review submissions`
4355+
- `Lessons`
4356+
- `Export summary CSV`
4357+
- Keep operator/import/policy language below the classroom-first path when both are visible.
4358+
- Treat destructive class-dashboard actions as copy-sensitive controls:
4359+
- permanent roster/student deletion copy must say what is deleted and that it cannot be undone,
4360+
- helper conversation reset copy should describe cache clearing and optional export, not imply the same permanence as roster deletion.
4361+
4362+
**Why this remains active:**
4363+
- Reduces first-time teacher ambiguity without adding routes, models, or workflows.
4364+
- Keeps copy/order stabilization tied to the top-task contract in `docs/TEACHER_TOP_TASKS.md`.
4365+
- Makes irreversible actions easier to distinguish from reversible or cache-only maintenance actions.
4366+
4367+
## Implemented RFCs stay historical once live (2026-06-20)
4368+
4369+
**Current decision:**
4370+
- Mark `docs/RBAC_CAPABILITIES_RFC.md` closed for architecture; use `docs/RBAC_GUIDE.md` and `docs/FEATURE_MATURITY.md` for live RBAC operation and rollout truth.
4371+
- Mark `docs/COURSEPACK_REGISTRY_RFC.md` closed for the current release line; use `docs/COURSEPACK_REGISTRY_PUBLISHING.md` and `docs/COURSE_AUTHORING.md` for live workflow.
4372+
- Keep the RFCs in the docs tree as historical rationale and bounded future-polish records, not active implementation backlogs.
4373+
4374+
**Why this remains active:**
4375+
- Prevents shipped architecture from continuing to look speculative.
4376+
- Points operators and future agents to the docs that describe current behavior.
4377+
- Keeps optional future work parked until concrete operator need appears.
4378+
4379+
## Remote compute metric accounting split (2026-06-20)
4380+
4381+
**Current decision:**
4382+
- Keep `tutor/remote_compute_control.py` responsible for lease lifecycle, provider state refresh, readiness, and routing decisions.
4383+
- Move per-class accounting counters into `tutor/remote_compute_metrics.py`.
4384+
- Keep the public control API unchanged while reducing the size and responsibility of the lifecycle controller.
4385+
4386+
**Why this remains active:**
4387+
- Makes the remote-compute hot spot easier to review without changing behavior.
4388+
- Keeps future bridge/idempotency hardening focused on lifecycle and audit semantics instead of mixed metric bookkeeping.
4389+
- Preserves durable metric behavior through the existing `remote_compute_store` persistence layer.

docs/DOCS_MAP.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,11 @@ You should be able to find the canonical doc for a topic without opening multipl
116116
- [HUBCTL.md](HUBCTL.md)
117117
- [LOCALIZATION.md](LOCALIZATION.md)
118118
- [LOCALIZATION_SO_REVIEW_PACKET.md](LOCALIZATION_SO_REVIEW_PACKET.md)
119-
- [COURSEPACK_REGISTRY_RFC.md](COURSEPACK_REGISTRY_RFC.md)
119+
- [COURSEPACK_REGISTRY_PUBLISHING.md](COURSEPACK_REGISTRY_PUBLISHING.md)
120+
- [COURSEPACK_REGISTRY_RFC.md](COURSEPACK_REGISTRY_RFC.md) (historical rationale; current release line closed)
120121
- [ASYNC_SELF_PACED_RFC.md](ASYNC_SELF_PACED_RFC.md)
121122
- [IDENTITY_SSO_EXPANSION_PLAN.md](IDENTITY_SSO_EXPANSION_PLAN.md)
122-
- [RBAC_CAPABILITIES_RFC.md](RBAC_CAPABILITIES_RFC.md)
123+
- [RBAC_CAPABILITIES_RFC.md](RBAC_CAPABILITIES_RFC.md) (historical rationale; architecture closed)
123124
- [TELEMETRY_DB_SPLIT_PLAN.md](TELEMETRY_DB_SPLIT_PLAN.md)
124125
- [RUNTIME_LOCK_PROFILES.md](RUNTIME_LOCK_PROFILES.md)
125126
- [KIOSK_PWA.md](KIOSK_PWA.md)

docs/MAINTENANCE_RISK_REGISTER.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Use this register as a pruning tool, not just a warning list.
2424
- Evidence:
2525
- `/teach` and related routes aggregate many staff workflows in one surface: [TEACHER_PORTAL.md](TEACHER_PORTAL.md)
2626
- `teach_home` assembles class list, profile, teacher invites, org admin, submissions, and template generation in one view: `services/classhub/hub/views/teacher_parts/content_home.py`
27-
- baseline shell sizes remain tracked: `services/classhub/templates/teach_home.html` is 81 lines; `services/classhub/templates/teach_class.html` is 82 lines; `services/classhub/hub/views/teacher_parts/roster_class.py` is 80 lines after split, with extracted endpoint logic in `services/classhub/hub/views/teacher_parts/roster_class_dashboard.py` (148 lines) and `services/classhub/hub/views/teacher_parts/roster_class_controls.py` (295 lines)
27+
- baseline shell sizes remain tracked: `services/classhub/templates/teach_home.html` is 81 lines; `services/classhub/templates/teach_class.html` is 83 lines; `services/classhub/hub/views/teacher_parts/roster_class.py` is 80 lines after split, with extracted endpoint logic in `services/classhub/hub/views/teacher_parts/roster_class_dashboard.py` (148 lines) and `services/classhub/hub/views/teacher_parts/roster_class_controls.py` (295 lines)
2828
- root templates are slimmed, but complexity now lives in bounded section partials/builders: `services/classhub/templates/includes/teach_class/class_setup_roster_student_row.html` is 83 lines; `services/classhub/templates/includes/teach_class/support_board_card.html` is 102 lines; `services/classhub/hub/services/teacher_dashboard_sections/facilitator_support_builders.py` is 213 lines
2929
- size/function budgets are continuously guarded in CI via `scripts/check_view_size_budgets.py` and `scripts/check_view_function_budgets.py`
3030
- section-level budgets and decomposition contracts are guarded via `scripts/check_teach_class_section_budgets.py`, `scripts/check_teach_class_template_contract.py`, and `scripts/check_teacher_roster_service_contract.py`

docs/RBAC_CAPABILITIES_RFC.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
## Status
44

5-
- This RFC is mostly implemented on `main`.
5+
- Closed for architecture on `main` as of 2026-06-20.
66
- The evaluator, scoped grants, simulation tools, policy import/export, custom role persistence, and delegated approval queue foundation are all real.
77
- The remaining work is not core RBAC existence; it is operational polish for district-scale approval routing and higher-level administration UX.
88

9-
## Closure recommendation
9+
## Closure
1010

11-
Treat this RFC as effectively closed for architecture. Ongoing work should move under implementation docs and maturity tracking:
11+
Treat this RFC as historical architecture rationale. Ongoing work should move under implementation docs and maturity tracking:
1212

1313
- keep [RBAC_GUIDE.md](RBAC_GUIDE.md) as the operator/how-to source,
1414
- keep [FEATURE_MATURITY.md](FEATURE_MATURITY.md) as the rollout truth,
15-
- reserve this RFC for historical architecture rationale plus the small list of remaining non-shipped items.
15+
- reserve this RFC for the rationale that led to the shipped model plus the small list of remaining non-shipped polish items.
1616

1717
## Summary
1818
ClassHub currently uses organization roles (`owner`, `admin`, `teacher`, `viewer`) with coarse permissions. This RFC defines a capability-driven RBAC model that supports district-grade policy needs while preserving current behavior during rollout.
@@ -67,7 +67,7 @@ Implemented on `main`:
6767
- `CLASSHUB_RBAC_POLICY_APPROVAL_REQUIRED=1`
6868
- policy mutations queue `RbacPolicyChangeRequest` and require separate reviewer approval.
6969

70-
Still RFC/pending:
70+
Still parked/future polish:
7171
- Hardened district-scale approval routing (multi-step approvers, notification routing, SLA escalation).
7272
- More polished custom-role administration UX beyond the current operator tooling surface.
7373

docs/TEACHER_TOP_TASKS.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,31 @@ Use it for:
77
- copy/order decisions in teacher surfaces
88
- release readiness checks against real teacher workflows
99

10-
Last updated: March 11, 2026
10+
Last updated: June 20, 2026
1111

1212
Current UI contract:
1313
- `/teach` now surfaces a **Start Here Today** block that maps this list into:
1414
- daily teaching workflows (tasks 1-8),
1515
- operator/policy workflows (tasks 9-10, superuser + advanced mode).
16+
- First-contact CTA wording is intentionally stable across `/teach` and `/teach/class/<id>`:
17+
- `Create class workspace`
18+
- `Print join card`
19+
- `Open class`
20+
- `Review submissions`
21+
- `Lessons`
22+
- `Export summary CSV`
1623

1724
## Task Map
1825

1926
| # | Task | Primary routes/actions | Completion signal |
2027
| --- | --- | --- | --- |
2128
| 1 | Create a class | `POST /teach/create-class` from `/teach` | New class row appears with join code and open status. |
2229
| 2 | Share join access with students | `GET /teach/class/<id>/join-card`, copy class join code on `/teach` or `/teach/class/<id>` | Students can join via class code or printed join card. |
23-
| 3 | Open class dashboard for live teaching | `GET /teach/class/<id>` | Class dashboard loads with roster, modules, and status controls. |
30+
| 3 | Open class for live teaching | `GET /teach/class/<id>` | Class dashboard loads with roster, modules, and status controls. |
2431
| 4 | Review submission queue and download work | `GET /teach/material/<material_id>/submissions`, `GET /submission/<id>/download` | Teacher can see missing/submitted rows and retrieve files. |
2532
| 5 | Close/open class access at session boundaries | `POST /teach/class/<id>/toggle-lock` (and closeout lock action) | Class state pill changes (`Open`/`Locked`) and student join behavior changes accordingly. |
2633
| 6 | Set lesson release schedule and helper scope | `POST /teach/lessons/release` from class lesson release grid | Release date/scope values persist and appear in lesson release table. |
27-
| 7 | Export day-of-class outputs | `GET /teach/class/<id>/export-submissions-today`, `GET /teach/class/<id>/export-outcomes-csv`, `GET /teach/class/<id>/export-summary-csv` | Export downloads succeed and include current class data. |
34+
| 7 | Export summary and day-of-class outputs | `GET /teach/class/<id>/export-submissions-today`, `GET /teach/class/<id>/export-outcomes-csv`, `GET /teach/class/<id>/export-summary-csv` | Export downloads succeed and include current class data. |
2835
| 8 | Correct roster identity mistakes | `POST /teach/class/<id>/rename-student`, `POST /teach/class/<id>/merge-students` | Target student names/records update without duplicate roster confusion. |
2936
| 9 | Create/invite and maintain teacher accounts (admin/superuser) | `POST /teach/create-teacher`, `POST /teach/teacher-account/*` actions | Teacher account row reflects expected active/superuser/invite state. |
3037
| 10 | Maintain organization boundaries and assignments (admin/superuser) | `POST /teach/org-membership/upsert`, `POST /teach/class-staff-assignment/upsert`, `POST /teach/class-organization/set` | Membership/assignment rows update and class scope reflects intended org boundary. |

mkdocs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ nav:
112112
- Facilitator CLI (hubctl): HUBCTL.md
113113
- Localization: LOCALIZATION.md
114114
- Somali Review Packet: LOCALIZATION_SO_REVIEW_PACKET.md
115-
- Coursepack Registry RFC: COURSEPACK_REGISTRY_RFC.md
115+
- Coursepack Registry RFC (Historical): COURSEPACK_REGISTRY_RFC.md
116116
- Async Self-Paced RFC: ASYNC_SELF_PACED_RFC.md
117117
- Identity SSO Expansion Plan: IDENTITY_SSO_EXPANSION_PLAN.md
118-
- RBAC Capabilities RFC: RBAC_CAPABILITIES_RFC.md
118+
- RBAC Capabilities RFC (Historical): RBAC_CAPABILITIES_RFC.md
119119
- Telemetry DB Split Plan: TELEMETRY_DB_SPLIT_PLAN.md
120120
- Runtime Lock Profiles: RUNTIME_LOCK_PROFILES.md
121121
- Classroom Kiosk PWA: KIOSK_PWA.md

0 commit comments

Comments
 (0)