Honest UI

An interface that would rather say nothing than say something false.

Every rule below exists because a screen lied to somebody once. They are kept in the codebase, next to the code they constrain, and they are the reason rexenv sometimes shows you less than another tool would.

  1. 01

    Status derives from reality — never from what we asked for.

    A running service means rexenv owns the process AND the process answers. A port that happens to be listening proves neither, so a bare port check is never allowed to paint a green dot.

  2. 02

    Progress moves only on real completions. Failure freezes the bar — it never rolls back.

    A bar that retreats reads as "it is undoing my work". A frozen one reads as what actually happened: it stopped here. 100% appears only once the work has settled.

  3. 03

    An action that finishes somewhere else says so.

    Every button on the repo panel starts a streamed job whose only completion signal was a glyph inside the job card. Scrolled away — or over in the browser you clicked Pull to refresh — a finished job looked exactly like one that never ran.

  4. 04

    A counter that cannot advance is not shown at all.

    The install card counts "item k of N" from wp-cli's per-item header, which only the wp.org path prints. Reusing the card for zip uploads would have parked that line at "item 1 of 2" for the whole run: clamped, plausible, and false from the first item onward.

  5. 05

    A count is never rendered from a read that failed.

    "The 0 packages in ~/.wp-cli/packages" is not a degraded answer. It is a confident wrong one about the reader's own machine. Guessing low is still guessing.

  6. 06

    A control whose only outcome is an error is not rendered.

    The New Site dialog offers "From Git" for Laravel and blank PHP and omits it for WordPress, because a WordPress checkout without its database is not a site and the backend refuses it. The refusal still exists — the UI just does not draw a button that walks into it.

  7. 07

    Refusals name the consequence, never "busy".

    "A tunnel would publish this site" tells you what the machine is protecting you from. "Busy" tells you to try again and find out.

  8. 08

    Unknowable state says "can't determine" instead of guessing.

    There is always a plausible number to show. Showing it converts an unknown into a wrong answer the reader has no reason to doubt.

The through-line: what the interface may claim is bounded by what is actually known. A plausible number is not a degraded answer to a question we could not answer — it is a confident wrong one about your own machine.