Merging heig-classroom into Quiz¶
Archived record (2026-10-11). The cutover is done (M8-07): classroom redirects to Quiz and its data is imported. These pages are kept as the record of the merge and for the two tasks left, the observation period and the decommission (M9-01,
PROGRESS.md); they are listed in no tab of the site and excluded from its search.
This folder is the working plan of the merge decided by
ADR-035: what is ported, in which
order, by which agent, how the data moves, and where the work stands. It is
written so that any session can pick the work up โ read this page, then
PROGRESS.md, then the task card you take.
Reading order¶
| File | What it settles |
|---|---|
PROGRESS.md |
Where the work stands. Every task, its status, its branch and PR, the handoff notes. The single source of truth for progress. |
01-strategy.md |
The target, the principles, the phases and their exit criteria, what is prod-safe. |
02-data-and-migration.md |
Table-by-table mapping, identity matching, the migration script. |
03-github-projects.md |
The GitHub side: inventory, coupling, target modules, tables, routes, jobs. |
04-journal.md |
The journal: how it works, what porting it requires, its known defects. |
05-web.md |
Screens: where each classroom screen lands, the student classroom page, GitHub onboarding, UI kit, i18n. |
06-codespace-seb-infra.md |
Online workspace, unified SEB, infrastructure, cutover, permalinks, rollback. |
07-incompatibilities.md |
Every known incompatibility and risk, with its resolution and the task that carries it. |
08-decisions.md |
The decisions that belong to the product owner, with a suggested answer each. |
measures-2026-09-28.md |
Production counts (M0-02): identity overlap, classroom content, classes present in both apps. |
09-tasks.md |
The open task cards: one PR each, with dependencies, files, tests, acceptance, and the brief to hand to an agent. The cards of the tasks done or dropped, with their "As delivered" notes, are in history/09-tasks-delivered.md. |
10-cutover-runbook.md |
The cutover as the operator runs it: checklist, open decisions, commands, checks, rollback, observation, decommission (M8-05). |
Sources¶
The analysis was made on 2026-09-28 against Quiz main (a7dfa26) and
classroom origin/main (ab98cc0, the journal commit). Paths are written:
Q:โ this repository (apps/api/src/...unless the path says otherwise);C:โ heig-classroom (apps/server/src/...unless the path says otherwise). A read-only reference checkout is made withgit -C ~/heig-classroom fetch && git -C ~/heig-classroom worktree add --detach <scratch>/classroom origin/main. Never edit~/heig-classroomfrom a merge task. Until the cutover classroom stayed in production and its fixes were cherry-picked forward (see "Classroom keeps living" in01-strategy.md); since 2026-10-11 (M8-07) it no longer runs, and since 2026-10-14 (M9-01) it is gone for good:classroom.chevallier.ioredirects to Quiz permanently (308), its stack is removed from the application VM, and its repository is archived (read-only on GitHub, still fetchable). The checkout is evidence only:C:paths name what classroom did, never something that still runs. What the decommission removes, and in which order, is the runbook's ยง5; the M9-01 row ofPROGRESS.mdsays which steps are done.
Rules for the agents working on the merge¶
AGENTS.mdapplies: a worktree per task,mainby merge only, stage by path, the lockfile with itspackage.json.- One task card, one branch, one PR. The branch is named
merge/<task-id>-<slug>(for examplemerge/M2-03-webhook-intake), the PR title starts with the task id. - Claim before working: set the task to
in progressinPROGRESS.mdwith your branch name, in the first commit of your branch, and open the PR as a draft right away. An open draft PR whose title starts with a task id is the claim;gh pr list --search "M2-03"shows it. - Checkpoint in the PR description. Keep a "State" section in the PR body (done / next / blocked) and update it at every push. If a session dies, the next one reads the PR, not the transcript.
- Close the task in the same PR that delivers it: status
done, the PR number, one line of handoff inPROGRESS.md(what the next task must know). - A decision you meet that is not in
08-decisions.mdis not yours to take: add it there as an open item, mark your taskblocked, say so in the PR. - Reviews: every code task goes through
lean-reviewerandinvariant-reviewerbefore merge (/feature); a task that touches the spec or an ADR goes throughspec-challengerfirst. - Update the plan when reality differs. A card that proves wrong is corrected in the PR that found out, not worked around.