---
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.
