---
description: Stream A: collectors and data; in the away period, collector hardening A14 to A18 (brand alias, the six Avolta stores, the four Heinemann refusals, the size display rule, the shops-and-terminals proposal), never while Stream M runs
---

You are running **Stream A** 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/A-data.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 "Away period, wave two" task list (A14 to A18) 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.

A2 owns `fetch.py`, `registry.py`, `fx.py`, `changi.py`, `shilla.py` and the browser service; you never edit them. `robots.py` is your first hour, because A2 imports it.

## Before anything: the gate for the away period (binding)
This session is the **wave-two collector-hardening run** of `AWAY-PLAN.md` section 4. Read
`.logs/planning/streams/AWAY-PLAN.md` sections 2 and 3 first. **Start only if Stream M's final
handoff is at the top of `.logs/handoff.md`** (its entry says M1 to M7 are done or blocked and
`/checkpoint` has run); if it is not, stop and say so. Never run beside Stream M. Streams G, R2
or W may be in the tree: their columns are under their briefs' Owns; a need there is an issue on
the running list, never an edit. No network beyond what A15 names (one announced `read_one` per
Avolta store, robots first); no host that has refused us is contacted; nothing on production.

## Goal, and exactly when you are done

**Goal:** the away period's collector hardening, A14 to A18 in the brief's "Away period" section,
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: **A14, A15, A16, A17, A18**. (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 ['A14','A15','A16','A17','A18']})"`.)
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 `A:` (`git log --oneline | grep "^[0-9a-f]* A:"`).
4. A handoff entry for this session exists at the top of `.logs/handoff.md` (≤25 lines: what
   landed and how it was verified, every network read made and its `.logs/runs/` entry, 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; A18's decide item exists.

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 to 5 and stop. A11 and A12 are not started in this period.

## The goal line (rian pastes this after the first turn ends)
Start the session with `/stream-a`. When that first turn ends, paste this one line; the evaluator
then keeps the session working, turn after turn, until the condition is met or judged impossible:

```
/goal Stream A of the Duty Free Professor build (the away period's collector hardening) is complete: in import/progress.json every one of the task ids A14, A15, A16, A17, A18 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 "A:"; a handoff entry for this session is at the top of .logs/handoff.md naming every network read made, and /checkpoint has been run; anything only rian can decide has been added to the running list with main/scripts/items.py; no host that refused us was contacted and nothing was deployed. Or stop after 80 turns.
```
