--- key: startup.parallel-orientation title: '2026-07-21 — Parallel orientation + selection is the startup protocol; #237 retired (#520)' status: active since: '2026-07-21' supersedes: docs.queue-state-gitea-tracker@2026-07-11 superseded-by: none rule: A fresh session runs two concurrent tracks at startup — Orientation (`AGENTS.md`/`CLAUDE.md` → `docs/README.md` task-signal map → the active decisions catalog `docs/decisions/README.md`) and, only when no issue is named, Selection (`scripts/select-queue.sh N`, deterministic live-Gitea ranking). A named issue skips Selection entirely. ersatztv#237, the closed pickup tracker this replaces, is reduced to a single archival breadcrumb and MUST NOT be read for live state. signals: 'startup protocol, queue selection, MemPalace retrieval, breadcrumb rule · paths: `docs/handoffs/chicorytv-issue-queue.md`, `scripts/select-queue.sh`, `docs/README.md`, `scripts/check-kickoff-guard.sh` · issues: #237, #520, #521, server-management#642' mechanics: '`docs/handoffs/chicorytv-issue-queue.md` → "Two concurrent tracks at session start" + "Knowledge retrieval"; `scripts/select-queue.sh`; regression guard `scripts/check-kickoff-guard.sh` (wired into the `decisions lifecycle` CI job)' --- **Why this reverses `docs.queue-state-gitea-tracker` (2026-07-11), not just extends it.** That record's rule was "queue state lives in pinned tracker #237, not in the handoff file" — sound in 2026-07-11 when the arc was live and #237's body/comments were the only concurrency-safe place to put session state. Two things changed: (1) `scripts/select-queue.sh` (2026-07-19) already replaced the *mechanical* selection logic with a deterministic query over live Gitea state — no script reads #237's prose; and (2) the arc itself completed and #237 **closed** on 2026-07-13. A closed issue cannot be "where live queue state lives" — continuing to point agents at it was no longer just stale, it was actively wrong, and the old record's own text ("Pinned tracker issue #237 holds the goal + ordered arc") was live regression bait: a session reading it verbatim would try to treat a closed tracker as authoritative. So this is a genuine reversal (the *store* changes from "a specific Gitea issue" to "live Gitea queries, no pinned issue required"), not a mechanical follow-on. **What the new protocol is.** Session start runs two independent tracks, neither blocking the other: **Orientation** — read `AGENTS.md`/`CLAUDE.md`, then `docs/README.md`'s task-signal map (replacing the old mandatory 1–10 reading order), then the active decisions catalog `docs/decisions/README.md` for "why do we do X" questions. **Selection** — only when the user hasn't named an issue, run `scripts/select-queue.sh [N]`, which excludes `in-progress`/`parked`/PRs, resolves `GET /issues/{n}/dependencies`, tiers by LOCAL `.milestone.state`/`review`/`priority:` filters, and orders deterministically; it flags `CLAIM?`/`UMBRELLA?` for the orchestrator to resolve by reading the flagged issue, and does not rank an arc tier (none is active in maintenance/backlog mode — if one is ever re-established, extend the script, never revert to prose-derived ranking). A user-named issue skips Selection outright and goes straight to focused retrieval on that issue. **MemPalace retrieval contract (server-management#642, the sole Gitea→MemPalace exporter).** MemPalace is candidate discovery only, verified against its cited source before use, at a default `ErsatzTV-Decisions` wing; the four load-bearing orientation bullets — catalog-first for current rules, issue history as evidence not authority, the breadcrumb rule (a file path in a historical comment resolves by concept via the active wing, never by literal path-chase), and the catalog→`rg` exact-search fallback when MemPalace is stale/down — are carried verbatim in `docs/README.md` and `docs/handoffs/chicorytv-issue-queue.md`. Never derive live queue state from MemPalace, #237, or historical comments; live Gitea state via `scripts/select-queue.sh` is the only source of truth for pickup ordering. The `## Closing record` template (Outcome / Root cause / Decisions changed / Reusable knowledge / Verification / Deferred / Docs updated) is the structured per-issue artifact this retrieval contract is built to consume — see `CLAUDE.md` → Task Completion Protocol and the kickoff's "Closing record" section. **Regression guard.** `scripts/check-kickoff-guard.sh` greps the standing startup docs (`docs/handoffs/chicorytv-issue-queue.md`, `docs/README.md`, `CLAUDE.md`, `scripts/select-queue.sh`) for #237-as-live-state phrasings ("read #237", "tracker #237", "queue state lives in", …), exempting lines/sections that are explicitly archival. It is wired into the `decisions lifecycle` CI job so a future PR cannot silently reintroduce the reversed rule.