# Select lifecycle contract

- **Outcome:** The canonical `Select` factory retains its positional API and existing DOM while supporting idempotent `mount()`, focused in-place `update(next)`, and idempotent `destroy()` with safe remounting.
- **Status:** IDLE
- **Task ID:** D5-SELECT-01
- **Source request:** Owner requested Delivery 5 Select lifecycle convergence from current `origin/master`, without delegation, external models, or skills; preserve public behavior and DOM identity, limit changes to Select and focused lifecycle coverage, run all specified gates, commit locally, and do not land. Coordinator correction: a combined `{ options, value }` update must atomically set requested state before a single option reconciliation, keeping DOM value, `state[key]`, and callback behavior consistent.
- **Acceptance criteria:** Existing Select/SelectRegionView behavior remains compatible; update retains root and select node identity; repeated mount/update/destroy calls are safe; destroy removes the change handler; remount restores it; a combined `{ options, value }` update changes requested state before exactly one reconciliation and leaves DOM/state/callback behavior aligned; focused tests cover these cases; focused tests, full admin suite, lint, production build, inventory/gate, and factory gate run with installed dependencies.
- **Preserved WIP/ref/path:** Clean worktree at `b0c75e4fc084339fcf7c92916ddd4457e8996f13`, matching fetched `origin/master`; no pre-existing worktree changes.
- **Constraints:** Only `admin/src/components/Select.js`, its lifecycle test, and this plan registry may change. Do not change unrelated components, generated assets, page behavior, or public DOM/API identity. Do not land.
- **Execution steps:** Study landed Input, Textarea, Badge, ProgressBar, and Modal lifecycle sources/tests; add focused lifecycle methods to Select; add coverage; repair atomic combined option/value updates with a regression test; run required gates; commit locally; record exact outcomes.
- **Current receipt:** The repaired `update(next)` applies a requested value to `state[key]` before one option reconciliation. The new regression test proves a combined update keeps the original `<select>` node, DOM value, and state at `he` and emits no fallback callbacks when `he` is available. Focused Select tests pass (5/5); the full admin suite passes (45 files/646 tests); lint, production build, inventory, UI gate, and the full factory gate pass. Inventory remains 123 modules, 54 components, 16 pages, zero unclassified modules, zero direction violations, and two baseline duplicate IDs. The repair is committed locally; landing remains excluded.
- **Next executable action:** None within this local-only slice.
