# Session kickoffs (rewritten 2026-09-04 Fri, against build plan v3)
> **Status 10 Sep:** every stream brief now carries a dated status line at its top; the table below lists every `/stream-*` command. `/stream-n` ran the night of 10 Sep; `/stream-r` (the accounts and login system) is next, from rian's 10 Sep ask.

> **Away period:** `.logs/planning/streams/AWAY-PLAN.md` carries the decisions taken in rian's
> absence, the lanes that run at the same time, and the instruction for the session that writes
> the missing briefs. Start that session with `/finalize-away`.
> **Finalised 11 Sep.** The lanes, in the order the terminals take them (three at once, never more;
> A only after M's final handoff):
>
> | Wave | Type this | Brief | Runs |
> |---|---|---|---|
> | 1 | `/stream-r2`, then its goal line | `R-accounts.md` (R2 section: T7, T1 to T4, T8 to T10, T5, T6) | now, beside M and G |
> | 1 | `/stream-m`, then its goal line | `M-merging.md` (M1 to M7) | now, never with A |
> | 1 | `/stream-g`, then its goal line | `G-airport.md` (G1 to G7) | now |
> | 2 | `/stream-r3`, then its goal line | `R-accounts.md` (V1 to V4; V4 gated) | after R2 |
> | 2 | `/stream-a`, then its goal line | `A-data.md` "Away period" (A14 to A18) | after M's final handoff only |
> | 2 | `/stream-w`, then its goal line | `W-readiness.md` (W1 to W6) | when any wave-one lane finishes |
> | filler | `/stream-docs`, then its goal line | `DOCS.md` (X4) | a free terminal |

Every stream is a **project slash command** in `.claude/commands/`, so the prompt is
versioned and identical every time. Start each session **in this folder** (the commands and
the checkpoint hook only load from here):

```bash
cd /srv/apps/dutyfreeprofessor && claude
```

Then, for an autonomous run that keeps going until its brief is exhausted, type the stream
command, let its first turn finish, then paste the **goal line** printed at the bottom of that
command file (`/goal <condition>`; the exact text is in each `.claude/commands/stream-*.md`).
A small evaluator model checks the condition after every turn and starts the next turn until
it is met or impossible, with no pauses. (`/loop` was used on the first two nights; it pauses
between iterations and relies on the session's own judgment to stop, so `/goal` replaces it
from 5 Sep.)

| Session | Type this | Brief | Runs |
|---|---|---|---|
| A2 rendered fetch | `/stream-a2`, then its goal line | `A2-rendered-fetch.md` | now → Sat |
| A collectors | `/stream-a`, then its goal line | `A-data.md` | Fri night → Sat |
| B pages and SEO | `/stream-b`, then its goal line | `B-pages.md` | Fri night → Fri 11 |
| Docs | `/stream-docs`, then its goal line | `DOCS.md` | Fri night → Sun |
| Q quality | `/stream-q`, then its goal line | `Q-quality.md` | Sat/Sun, after A hands back `read_one` |
| S structure review | `/stream-s`, then its goal line | the command is its own brief | night of 9 Sep, done |
| N night of 10 Sep | `/stream-n`, then its goal line | the command is its own brief (O1 middleware, docs current, issue log, awards fixes, CLS, review pass) | night of 10 Sep, alone in the tree |
| R accounts (R1 login) | `/stream-r`, then its goal line | `R-accounts.md` and the design `.logs/planning/accounts-2026-09.md` | ran 10 Sep (afternoon into the night); R1 landed green and ready, rian deploys |
| R2 discussions | `/stream-r2`, then its goal line | plan §8; brief `R-accounts.md` | after 18 Sep, once R1 is deployed |
| R3 collection oversight | `/stream-r3`, then its goal line | plan §9; brief `R-accounts.md` | after 18 Sep, once R1 is deployed; the scheduler gated |

Three sessions at once is the ceiling (Decision 13); A2 counts as one. Tonight: **A, B, Docs**
(+ A2 if it is not already running). Tomorrow: Q joins when A's first pass is committed.

## Why they cannot collide
Each brief lists **Owns** and **Must not touch**; the overnight rules
(`OVERNIGHT-RULES.md`) forbid editing outside the column and route any cross-stream need to
`.logs/decisions-for-rian.md` "Requests". Shared files tonight: `check.sh` (Docs edits, all
run), `import/progress.json` (all update, through the locking script only),
`.logs/handoff.md` (prepend-only), `main/CHANGELOG.md` (Unreleased section, append-only).
Nobody deploys. Nobody crawls. Nobody migrates the live database.

## What you do in the morning (Sat 6)
1. Open **`/plan`** on the site: every task the night moved shows there.
2. Read **`.logs/decisions-for-rian.md`**: the questions sessions could not answer, each with
   the assumption they proceeded under. Clear them top to bottom; move cleared ones to
   "Decided".
3. Skim the last handoff entry per stream (`.logs/handoff.md`, prefixed).
4. Deploy checkpoint: dump first if a migration rides (`docker exec dutyfreeprofessor-db
   pg_dump -U dfp -Fc dfp > backups/dfp-$(date +%F)-pre-migration.dump`), then
   `srv-gw deploy --project dutyfreeprofessor --build` after `main/check.sh` is green.
5. Restart the loops for Saturday: same commands; the briefs' Wave 2 sections carry on.

## E: production, with rian present (rewritten Sat 5 Sep)
`claude` then **`/stream-e`** (not a loop; rian does the account, card, DNS and secret steps
himself, the session does the rest). Brief `E-infrastructure.md`; dated tasks on `/plan`.

## M: matching and merging (written Sat 12 Sep, from rian's decision)
`/stream-m`, then its goal line. Brief `M-merging.md`. Never alongside Stream A. Ends with the
keyboard merge session on `/collectors`.

## C, D, F (rewritten Sat 5 Sep)
| Session | Type this | Brief | Runs |
|---|---|---|---|
| C design | `/stream-c`, then its goal line (C5 wants rian present) | `C-design.md` | Mon 7 → Wed 10, C4 Mon 14 |
| D content | `/stream-d`, then its goal line | `D-content.md` | Tue 8 (D1), Mon 14 → Tue 15 |
| F awards | `/stream-f`, then its goal line | `F-awards.md` | Mon 14 → Tue 15 |

## Wave 4 (Wed 16 – Fri 18): one session only
> You are running the integration and launch pass for the Duty Free Professor soft launch.
> `cd /srv/apps/dutyfreeprofessor`. Read `.logs/planning/build-plan-2026-09.md`, then
> `agents.md`, then every brief in `.logs/planning/streams/`. Everything is merged and
> deployed; your job is the full test run, `docs-check.sh --strict`, cross-device and
> accessibility checks, performance, the launch checklist (including: curl every route in
> `App.tsx` and its `/api/*` reads unauthenticated on the production host and confirm the
> internal set is closed), and a walkthrough for me. Report anything unfinished rather than
> fixing it silently.
