Skip to content

Classroom experience program: Standalone, Student, and Instructor #288

Closed

Description

@MajorIncident

Goal

Evolve Intake into three explicit experience roles without weakening the existing browser-first standalone product:

  • Standalone — today's local-first Intake experience, with Templates and optional ad-hoc collaboration.
  • Student — class-aware individual or group workspaces, Templates + Case Studies, and instructor coaching.
  • Instructor — class roster, rapid switching between student/team workspaces, read-only live observation, and field-level coaching.

This is a long-running workstream. The repository, issues, and PRs must remain sufficient to restart the work from cold context; no implementation decision may exist only in chat history.

Architectural invariants

  1. Experience role is not intake mode. standalone | student | instructor is independent from General / IT / Pharma / Major Incident.
  2. Experience role is not serialized Intake state. It must not enter kt-intake-full-v2, Save/Load files, summaries, or curated Intake payloads.
  3. Standalone remains local-first and backend-optional. A classroom outage must not break ordinary Intake use.
  4. Student/team workspaces extend the existing collaboration model. Do not create a second competing snapshot/presence engine.
  5. Instructor observation is read-only with respect to student Intake snapshots.
  6. Coaching is a separate persistence/revision channel. Student edits, collaboration conflicts, template loads, and file restores cannot erase coaching.
  7. Students cannot enumerate other class workspaces.
  8. Instructor credentials and student class-join credentials are distinct from Case Study unlock passwords.
  9. Case Study visibility and Case Study confidentiality are separate concerns. The first resource split may hide Case Studies from Standalone; the final secure-delivery slice must remove protected Case Study payloads from the general client bundle.
  10. Every slice updates durable documentation, tests, and the workstream status before handoff.

Bootstrap PR

Implementation issues

Recommended dependency graph

Architecture/governance
        |
       #289
      /    \
   #290    #291
            |
           #292
            |
           #293
            |
           #294

#290 + #291 --------> #295
#279 + all slices ---> #296

#290 may stack on #289 while #291 is implemented independently on top of #289. Once #291 is available, #292–#294 form a natural vertical stack. #295 requires the resource semantics from #290 and authorization boundary from #291. #296 should accumulate browser coverage as slices land rather than waiting until the end.

PR rules for this program

Every classroom PR must state:

A stacked PR must not pretend to be independently mergeable when its base has not landed.

Existing foundation to reuse

  • src/intakeModes.js / src/intakeModeController.js
  • src/templateKinds.js, src/templates.js, src/templatesDrawer.js
  • src/collaboration.js
  • api/workspaces/* and Neon-backed workspace/presence persistence
  • kt-collaboration-profile-v1 local identity preference
  • canonical npm run quality repository gate
  • Add critical-path Playwright and accessibility regression suite #279 for real-browser/accessibility test infrastructure

Definition of program complete

All child slices are merged, Standalone remains backward-compatible, Student and Instructor critical journeys have browser coverage, protected Case Study data is no longer shipped to unauthorized clients, security/retention/credential behavior is documented, and a fresh AI session can continue maintenance using repository documentation alone.

Foundation completion

The original #288 Classroom foundation is complete as of PR #308 / merge 6c58336ac1677764641c09eadb201abcad8eeac1.

Delivered:

This closes the foundation program, not the long-term facilitated teaching vision.

Approved follow-ons:

The next implementation work should begin with #312 from current main; #313 follows once live class/team assignment is a stable substrate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions