Skip to main content

Terminal Rendering Direction

Design status: This page includes earlier planning assumptions. The current CLI contract and ADR-011 govern the CLI-first agent integration; MCP, SQLite preview handles, and server-side confirmation described below are not shipped.

AttributeValue
ProjectDevWorkWire
Version0.1
StatusAccepted

Design Intent​

Every screen should read as trustworthy and transparent: Maya can always tell, at a glance, what DevWorkWire is about to write to Jira before she confirms it. There is no visual design system here — DevWorkWire has no GUI — so this document covers terminal rendering conventions instead of color palettes and typography.

Product Language and Scope Rules​

  • Tone: plain, precise, no marketing language. Error and status messages name the exact item and field involved, never a generic "something went wrong."
  • Scope: covers the CLI screens in Prototype Brief only — Maya's guided import, search/select, and insert-by-id flows.

Terminal Output Direction​

Overall Direction​

  • Rendering stack: Rich (via Typer) for tables and wrapping, InquirerPy for interactive prompts and select lists — per technology-stack.md.
  • Monospace only; no images, icons, or graphics beyond simple text/Unicode markers (e.g. > for the selected row in an InquirerPy list).

Layout Guidance​

  • Target width: 80 columns, per NFR-003-01.
  • Below 80 columns: Rich wraps table cells rather than truncating silently; essential fields (action, item name, reference) stay visible.
  • Above 80 columns: tables use the extra width for the item-name column; layout doesn't otherwise change.

Color Strategy​

Terminal color is a secondary signal only — NFR-X06 (cross-cutting quality baseline) requires every state to also carry a text prefix, since color can be unavailable (piped output, some terminals, colorblind users).

StateColorRequired text prefixExample
SuccessGreenOKOK DWW-201 Payments created
WarningYellowWARNINGWARNING Item DWW-140 changed in Jira since last import
ErrorRedERRORERROR Story "Add OAuth login" (line 42) has no parent Epic reference
Neutral / infoDefaultnone requiredValidating data/EPIC-3-payments/ ...
Selected (interactive list)Reverse video / bold> marker> DWW-140 Epic Onboarding In Progress

Typography Strategy​

Terminal text has no font or size choices; conventions replace them:

ElementWeightNotes
Section headers (e.g. Preview, Committing ...)BoldMarks the start of a new screen state
Prompts (Proceed? [y/N]:)BoldDraws the eye to the point requiring input
Body / table rowsNormalDefault Rich rendering
Secondary / help text ([Use arrow keys ...])DimDe-emphasized, never the only source of required info
ItalicsNot usedPoor and inconsistent terminal support

Component Inventory​

ComponentPurposeRequired states
Validation error listLists item-identifying validation failuresError only (no empty/loading — the command exits)
Preview tableLists creates/updates/drift for the resolved batchPopulated (create/update/drift rows), empty (no changes)
Drift overwrite/skip promptPer-item choice for a drifted matchDefault (no selection), overwrite selected, skip selected
Yes/no confirm promptSingle gate before any writeDefault (no input), confirmed, declined
Search/select listFilterable list of existing Jira itemsLoading, empty (no matches), populated, selected
Commit result / fail-fast reportPer-item commit outcomeAll succeeded, partial failure (committed/failed/not-tried)

Interaction Expectations​

  • Confirm prompts are a bare [y/N]: — no color-only affirmative/negative cue, default is always "no" (declining is the safe default).
  • Select lists (search, drift choice) use InquirerPy's default arrow-key navigation plus type-ahead filtering; Enter selects, Ctrl+C cancels with zero writes at any point before the confirm prompt is answered "yes."
  • No animated spinners for MVP: dwire import calls are synchronous, so a static Committing N items ... line is sufficient; a future async path could revisit this.

Responsive Behavior​

Terminal widthBehavior
≥ 80 columnsFull table rendering; extra width goes to the item-name column.
< 80 columnsRich wraps cell content rather than truncating; action/ref columns stay intact per NFR-003-01.

Accessibility Notes​

  • No state is signaled by color alone — every color pairs with a text prefix (OK, WARNING, ERROR), per NFR-X06.
  • Output written to stdout/stderr only, so it works with screen readers reading terminal text; no meaning depends on rendering (e.g. box-drawing characters are decorative, never load-bearing).
  • All interaction is keyboard-only, which is inherent to a CLI.
  • No meaning is conveyed by a Unicode glyph alone (e.g. > for "selected" is paired with the row's own text, not a symbol requiring a legend).

Prototype Constraints​

  • Placeholder data only (DWW-* issue keys, sample Epic/Story titles); no real Jira integration.
  • Transcripts in Prototype Brief are illustrative text, not a literal Rich-rendering diff — exact spacing/box-drawing is an implementation detail.

Traceability​

Screen/ComponentCovers FR(s)Covers NFR(s)
Validation error listFR-003-02, FR-001-02—
Preview tableFR-001-03, FR-002-03NFR-003-01
Drift overwrite/skip promptFR-002-04—
Yes/no confirm promptFR-001-04, FR-003-03—
Search/select listFR-003-04—
Commit result / fail-fast reportFR-001-05, FR-001-06—
Color + text-prefix convention—NFR-X06 (cross-cutting quality baseline)

Last Updated: 2026-09-03