PromptPlus

|Adr-Plus Fields|Values Migrated | |–|–| |ADR|Live answer line follows the cursor, not a checked summary| |Version|01| |Revision|01| |Scope|| |Domain|| |Created|Proposed (2026-07-30)| |Changed|Accepted (2026-07-30)| |Superseded||

PromptPlus # PromptPlus ## **ADR0024V01R01** [![NuGet](https://img.shields.io/badge/NuGet-PromptPlus-blue)](https://www.nuget.org/packages/PromptPlus) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![.NET](https://img.shields.io/badge/.NET-8%20%7C%209%20%7C%2010-512BD4)](https://dotnet.microsoft.com/)

↑ ADR Index


ADR0024V01R01 — Live answer line follows the cursor, not a checked summary

Context

Every control with a live/final answer distinction has two independent rendering paths: WriteAnswer (the live answer, redrawn every frame while the control is running) and FinishTemplate / BuildCheckedItemsText / equivalent (the final answer, written once after Enter/confirm). Before this decision, what the live path showed was inconsistent across controls:

This decision was implemented across two rounds: MultiSelectControl’s live answer plus ExtraInfo on SelectControl/MultiSelectControl first (commit 2016a06), then MultiTableControl’s live answer plus ExtraInfo on TreeControl/MultiTreeControl and the size suffix on FileControl/MultiFileControl in a follow-up round covering every other control with the same shape.

Decision

  1. The live answer always reflects the item/row currently under the navigation cursor, never an aggregated summary of checked/selected items. This applies uniformly to Select, MultiSelect, Table, MultiTable, File, MultiFile, Tree, and MultiTree. Table is the reference implementation this decision generalizes, not a new pattern.
  2. The final answer keeps its own existing semantics and is unaffected by (1). For Multi* controls it stays a plain, comma-joined summary of checked items; for single-choice controls it stays the plain selected value. It never includes ExtraInfo, the size suffix, or the live cursor’s per-column value.
  3. ExtraInfo/ExtraInfoAsync and the file-size suffix are appended to the live answer only, never to the final answer — because the live answer line can recover overflowed text via horizontal scroll, and the final answer is meant to stay a clean, plain summary.
  4. Formatting of the appended text follows each control’s own existing convention, not a unified one: Select/MultiSelect use the configurable PrefixExtraInfoValue/SuffixExtraInfoValue (default " ("/")"); Tree/MultiTree use a fixed two-space separator with no parens; File/MultiFile use a fixed two-space separator before the formatted byte size. Unifying these formats was explicitly out of scope.
  5. MultiTable’s per-column complexity (Tab/Shift+Tab changes which column the live answer reflects) needed no new logic — the existing GetAnswerText(item) helper, already proven by Table in production, was reused as-is by pointing it at the single item under the cursor instead of joining every checked row.

Consequences