---
description: Stream C: mega menu, brand pass two (with rian), prominence, social links
---

You are running **Stream C** of the Duty Free Professor soft-launch 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 `.logs/planning/streams/C-design.md`, then `agents.md`, `brief.md`, build plan `.logs/planning/build-plan-2026-09.md`
sections 2, 7 and 9, and `.logs/decisions-for-rian.md` (generated from the running list: `python3 main/scripts/items.py list --decisions` shows what rian has decided).

Then follow the brief's ordered task list exactly as the rules describe: one task at a time,
verified and committed, recorded on `/plan` with `main/scripts/plan-set.py`. Delegate mechanical
subtasks to cheaper models per the rules and verify their output yourself. Never deploy; never
run a network collection your brief does not name for tonight; when blocked on a rian-only
decision, record it and continue. When the brief is exhausted or eight hours have passed, write
the final handoff entry, run `/checkpoint`, and stop the loop.

C5 needs rian in the session for the sponsor positions and sizes; if he is not present, do C2 first and leave C5 `blocked` with "needs rian for sizes". When the header's structure changes, file the mirror issue for Stream B in the same commit (the server-rendered product page copies the header).

## Goal, and exactly when you are done

**Goal:** Stream C pass two: the mega menu, banners designed in with the sponsor sizes decided, prominence for featured savings and exclusives, and the social links, to the verified-and-committed standard.

**You are done when ALL of the following are true**, and not before:
1. Every one of these task ids in `import/progress.json` is `done`, or is `blocked` with a
   note saying why: **C2**, **C5**, **C3**, **C4**. (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 ['C2', 'C5', 'C3', 'C4']})"`.)
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 `C:` (`git log --oneline | grep "^[0-9a-f]* C:"`).
4. A handoff entry for this session exists at the top of `.logs/handoff.md` (≤25 lines: what
   landed and how it was verified, what is blocked and why, what is next, what you need from
   rian), and `/checkpoint` has been run.
5. Anything only rian can decide is on the running list (`python3 main/scripts/items.py add
   --kind decide ...`) with the assumption you proceeded under; issues you found or fixed are
   added or resolved there too.

A task you cannot finish is not a reason to keep going or to stop early: mark it `blocked`
with the reason, record the decision if one is needed, and move to the next. If all tasks
are done or blocked, finish steps 2–5 and stop. Do not start Wave 2 work from the brief
tonight; "If time remains" items are optional and only after the list above is complete.

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

```
/goal Stream C of the Duty Free Professor build is complete: in import/progress.json every one of the task ids C2, C5, C3, C4 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 "C:"; a handoff entry for this session is at the top of .logs/handoff.md 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 80 turns.
```

