---
description: Stream R2b: the one side panel (every thread in one place: needs you, unread, open, resolved, follow-ups), on the caddie-ui pack
---

You are running **Stream R2b** of the Duty Free Professor build, as an autonomous session. Start by
running `pwd`; it must be `/srv/apps/dutyfreeprofessor`, or stop.

Read first, in this order: `.logs/planning/streams/OVERNIGHT-RULES.md` (binding), then your brief, the
section "R2b" at the end of `.logs/planning/streams/R-accounts.md`, then the standard it implements,
`/srv/apps/caddie/.logs/planning/04-interaction-standard.md` §4, §5 and §6 (read §6 twice), the pack's
`main/web/src/vendor/caddie-ui/README.md` and `SidePanel.tsx`, `main/docs/ACCOUNTS.md`, `agents.md`,
`brief.md`, `python3 main/scripts/items.py list --decisions`, and the top three entries of `.logs/handoff.md`.

Then work T11, T12, T15, T16, T17, T13, T18, T14 in that order (the brief's 'R2b, widened' section amends T11 and T12 and adds T15 to T18), each verified and committed and recorded on `/plan` with
`main/scripts/plan-set.py` (`doing`, then `done` with a `--note` that says what proves it, `blocked` with
why). Commit prefix `R:`. Never deploy; never touch the live database (rehearse the migration on `dfp-devdb`
in a fresh copy of the newest nightly dump); never edit the pack. The mention and reply rules are the
standard's, not new ones. No em dashes in anything a person reads.

## Goal, and exactly when you are done

**You are done when ALL of the following are true**, and not before:
1. Every one of **T11, T12, T13, T14, T15, T16, T17, T18** in `import/progress.json` is `done`, or `blocked` with a note
   saying why. (Check with `python3 -c "import json;d=json.load(open('import/progress.json'));print({t['id']:t['status'] for s in d['streams'] for t in s['tasks'] if t['id'] in ['T11','T12','T13','T14','T15','T16','T17','T18']})"`.)
2. `../.venv-dev/bin/pytest tests -q` passes and `main/check.sh` prints "checks passed" on the current tree.
3. Every finished task has its own commit prefixed `R:`.
4. A handoff entry for this session is at the top of `.logs/handoff.md` (≤25 lines: what landed and how it
   was verified, the migration id and the after-deploy commands in order, what is blocked and why, what rian
   must do), and `/checkpoint` has been run.
5. Anything only rian can decide is on the running list (`python3 main/scripts/items.py add --kind decide
   --by "Stream R2b" --blocks <task> --weight ...`) with the assumption you proceeded under.

If eight hours have passed, mark every unfinished task `blocked` with "eight-hour cap; resume with
/stream-r2b", write the handoff, run `/checkpoint`, and stop.

## The goal line (rian pastes this after the first turn ends)
Start the session with `/stream-r2b`. When that first turn ends, paste this one line:

```
/goal Stream R2b of the Duty Free Professor build is complete: in import/progress.json every one of the task ids T11, T12, T13, T14, T15, T16, T17, T18 has status done, 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 "R:"; a handoff entry for this session is at the top of .logs/handoff.md naming the migration id and the after-deploy commands, and /checkpoint has been run; anything only rian can decide has been added to the running list with main/scripts/items.py. Or stop after 140 turns.
```
