ADR 016 Planning Views and First Ticket Placement - joeroberts/release-radar GitHub Wiki

  • ID: ADR-016
  • Status: Accepted
  • Date: 2026-09-09
  • Date meaning: Original dated decision/source section; extraction recorded 2026-10-02.
  • Implementation: No implementation information was recorded in the source status; tickets own progress.
  • Approval qualification: Recorded owner-approved Phase 5 scope; slice-specific exclusions and later dependencies remain as stated.

Context

Unassigned planning and read-only planning views must preserve permanent identities and distinguish placement from execution.

Authority and placement

The owner authorized unassigned tickets with permanent ticket identities, details, task definitions, dependencies and evidence. Unassigned is placement state, not a sixth lane or fake phase. Such tickets have neither phase nor execution lane and cannot execute, complete tasks, request review or be accepted. First placement into a same-project phase atomically enters Backlog while preserving identity and all planning content/history. Existing signed typed app-owned operations, receipt replay, actor/reason, project scope and sole-store-writer authority apply. New planning views do not authorize owner-facing manual delivery mutations.

Planning views

Overview remains the project landing page. Project Plan exposes all recorded phases, their phase-owned Delivery Goals/readiness and unassigned tickets. One shared five-lane board supports explicit single-phase and all-phase scope with phase identity on every card. Unassigned tickets have no lane and remain visible in Project Plan and their Details/dependency journey. Unresolved intake stays separate from recorded-work counts. There is no aggregate all-phase Ready state.

Extend the existing session navigation boundary with explicit scope and unassigned ticket identity. Do not overload missing phase as all phases, substitute active phase content or silently broaden stale filters. Preserve exact registration, selection/focus, Back/Forward and removed/re-added recovery. Browsing never mutates active context or delivery state. Multiple phases In delivery is owner-approved Phase 5 scope and does not alter the zero-or-one active pointer; full lifecycle transition policy is outside this first slice.

Readiness and goal membership

An unassigned ticket has no phase or lane and cannot belong to a phase-owned Delivery Goal. First placement into a same-project phase preserves its ID and content, enters Backlog, and increments/invalidates the destination structural plan revision through an exact audited transaction. Placement does not finalize readiness, assign a goal implicitly, start execution or change active context. Ready/start and goal-acceptance gates remain unchanged. Existing placed-ticket commands retain their explicit semantics; omitted fields never mean unplacement.

Goal obligations must carry forward on plan changes under the owner's Phase 5 direction. The separately bounded successor/coverage slice owns the decision needed for withdrawal/replacement/splitting and transfers. Phase 5A adds first placement only; current assignment-event history and Backlog assignment removal are not claimed as an implementation of outstanding obligations. Preserve started assignment and immutable Accepted protections until that contract is implemented.

Task definitions

Unassigned tickets may hold a task plan and pending task definitions under the existing revision, identity, retention and audit rules. They cannot complete tasks or perform execution/review/acceptance transitions until placed in a phase. Definition mutability and execution eligibility therefore require distinct central checks; a nullable lane alone is insufficient. First placement preserves all task IDs/revisions/history and enters Backlog without completing tasks. Existing placed and Accepted ticket semantics remain unchanged. Migration and actual archive, removed-history and full-backup recovery must preserve new placement records; future portable representation must include them without an early exporter/importer.