---
description: "Stream K9: splitting a brand the trailer fold got wrong, the reject path that offers it, the list scoped per vertical, and the lists shown in the review area"
---

You are running **Stream K9** of the Duty Free Professor catalogue work, as an autonomous session,
**while rian reviews the catalogue on staging in another terminal**. Nothing you do may disturb
that: **never deploy, never touch staging's or production's database, never run a collection,
never edit `.app.env` or `.env`.**

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

```
cd /srv/apps/dutyfreeprofessor && git worktree add .claude/worktrees/brand-split -b claude/brand-split master && cd .claude/worktrees/brand-split
```

Symlink the toolchain in as the K streams did, so `main/check.sh` runs there:
`ln -s /srv/apps/dutyfreeprofessor/.venv-dev .venv-dev` and
`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), your brief `.logs/planning/streams/K9-brand-split.md`, the issue it comes
from (`python3 main/scripts/items.py list --all`, then
`issue-the-brand-trailer-list-is-global-and-there-is-no-way-to`), `main/docs/VOCABULARY.md` (one
word per concept; a bare "product" is never written), `main/docs/REVIEW-PROCESS.md`,
`.logs/planning/decisions-model-spec-2026-09-16.md` sections 4, 5 and 7 (the writer, compound
decisions and undo, which your split follows), `agents.md`, and the top three entries of
`.logs/handoff.md`.

Then work the brief's tasks in order, K9.1 to K9.7, one at a time, each verified, committed with the
`K9:` prefix, and recorded on `/plan` with `main/scripts/plan-set.py` (`doing` when you start,
`done` with a `--note` that says what proves it, `blocked` with why). Rehearse every data move on
`dfp-devdb` (127.0.0.1:5433) in a fresh copy of `backups/dfp-2026-09-17-post-chain.dump`, and report
the numbers it produced, read from that database. A bug you fix becomes a test in `main/tests/`
written as the real row that failed. `main/check.sh` must print "checks passed" before each
hand-back.

Tell rian as you go with `srv-gw notify --from "K9" "<one line>"`: on start, on each task done with
the count, on blocked, and at hand-back (OVERNIGHT-RULES, "Telling rian as you go"). Never put a
secret in a message. If the command fails, note it in the handoff and carry on.

If a task turns out to need more than about three hours, split it, record the split on `/plan` with
a note, and keep the part that lands. When the brief is done, write the handoff entry and stop the
loop. Rian merges and deploys after his review, not you.
