✓ Phase 2 completed: The page row carries its queue, and a subscriber on its Bag fills it

`git grep '"collector"' -- src` prints nothing, `subscribe_page_store` is the single seam, the new contract file passes 6 tests, the full suite is 1814 passed and `ruff check src/ tests/` is clean. Two things went beyond the plan's declared decisions and are recorded in the plan entry: the four `page["collector"]` accesses in `spa_worker.py` had to go here (Phase 3 will find them gone) and `SpaWorker._detach_parcel_capture` was added because the parcel pickles the page store and the new capture is a closure — that design wants a human read. The commit went through `env PHASED_UNATTENDED=1 git commit`, the exemption the pre-commit hook itself declares for unattended phased runs; the checklist it prints was verified before committing.
