---
description: "Stream K12: the review we go live with (the precedent register, attention as a control, bulk by precedent group, the survey, the cross-divide layer, collected_name evidence, the pass packet and settled stamp, empty lines pruned on undo, the parser fingerprint, REVIEW-PROCESS v6 and the model-independent pass spec)"
---

You are running **Stream K12** of the Duty Free Professor catalogue work, as an autonomous session.
**Opus is enough for this stream**; the design was made by Fable on 18 Sep and is written down in
the plan. Do not redesign it; where the plan is silent, choose the option that makes a new kind of
question louder, and write the choice in your handoff.

**Start by checking your ground.** `pwd` must be `/srv/apps/dutyfreeprofessor`; `git log --oneline
-1` on master must include `bf6bfce` or later. Staging must print `0 drift` for `docker exec
dutyfreeprofessor-app python -m app.cli decisions verify`; if it does not, stop and say so.

Work in your own worktree on your own branch, created from master:

```
cd /srv/apps/dutyfreeprofessor && git worktree add .claude/worktrees/review-golive -b claude/review-golive master && cd .claude/worktrees/review-golive
ln -s /srv/apps/dutyfreeprofessor/.venv-dev .venv-dev
ln -s /srv/apps/dutyfreeprofessor/main/web/node_modules main/web/node_modules
```

Read first, in this order: `.logs/planning/streams/OVERNIGHT-RULES.md` (binding; this worktree is
the root for your work), the plan `.logs/planning/review-process-golive-2026-09-18.md` whole (Part
C is the specification you install; Part B is why), your brief
`.logs/planning/streams/K12-review-golive.md`, `main/docs/REVIEW-PROCESS.md` whole,
`main/docs/VOCABULARY.md`, `agents.md`, and the simulation log
`.logs/planning/review-simulation-2026-09-18.md` (the evidence every task answers).

**The two rules you must not break.** First, **you are building the room, not doing the work in
it**: nothing you write decides a catalogue question. A fixture may hold a gendered name or a tube
because the code has to carry such cases; the test asserts the question is raised, floored and
grouped, never what its answer is. Second, **loud on novelty beats right on average**: when a
choice trades a little friction for a louder new kind, take the friction.

Then work the tasks in order, K12.1 to K12.8, one at a time, each verified, committed with the
`K12:` prefix. Register the tasks on `/plan` first with `python3 main/scripts/plan-set.py K12.1 todo
"Stream K12" --add --stream K12 --stream-title "The review we go live with" --title "<the task's
heading>"` (one per task), then mark `doing` and `done` as you go. Rehearse every data move on
`dfp-devdb` (127.0.0.1:5433) in a fresh copy of the newest dump in `backups/` (close any inherited
`running` collection row in the copy by `status`, as the simulation log notes), and report the
numbers that database produced. A bug you fix becomes a test in `main/tests/` written as the real
row that failed, with what it cost in the docstring. `main/check.sh` must print "checks passed"
before each commit.

**Hard boundaries beyond the usual.** You never write to staging's database: the migration and the
two backfills are commands you hand rian in the handoff. You never run a collection. You never run
a review pass: passes begin after the sweep, which begins after rian deploys this. You never edit
`import/proposals/`.

Tell rian as you go with `srv-gw notify --from "K12" "<one line>"`: on start, at a quarter, a half
and three quarters, on blocked, and at hand-back. Never put a secret in a message. If the command
fails, note it in the handoff and carry on.

When you are blocked on something only rian can decide, do not stop: add it to the running list
(`python3 main/scripts/items.py add --kind decide --by "Stream K12" ...`) with the options, the
assumption you are proceeding under, and what you would have to redo, then carry on with everything
that does not depend on it.

If a task turns out to need more than about three hours, split it, record the split with a note, and
keep the part that lands. When the brief is done, write the handoff entry (≤25 lines: the migration
command, the two backfills, the sweep order, the first brands to pass) and stop. Rian merges and
deploys; you do not.

```
/goal Stream K12 is complete: every task K12.1 to K12.8 is done on /plan, or blocked with a note saying why; main/check.sh has printed "checks passed" on the final tree; every finished task has its own commit prefixed "K12:"; the rehearsal in K12.8 has been run on a copy and its numbers are in the handoff; REVIEW-PROCESS.md is version 6 and main/docs/REVIEW-PASS.md exists; nothing was deployed, staging's database was never written, no collection and no pass was run. Or stop after 120 turns.
```
