Skip to content

[web] The mode badge's db/config identity is a hover tooltip, so it is unreachable on touch — the mobile wedge's target device #755

Description

@eaitbrahim

Raised while testing v0.14.0: "I don't see the switcher between live and paper modes in the UI."

The switcher is absent on purpose, and that part is not a bug

render.js's session-chip docstring states it:

Display and navigation only. It never mutates. Switching profile or mode is a config-file edit plus a typed terminal ceremony with a runbook; there is no control here, no route behind one, and no capability added.

and, on why:

What their version attaches — an "Open Live Account" button on the paper banner — is a growth funnel wrapped around real money, and is refused here.

That holds, and #707 settled the general form of it: keel serve holds no venue credential, and state-changing actions live in the terminal. A control that flipped a deployment from paper to live from a browser would be the single most consequential write on the surface. Nothing in this issue asks for that control.

Worth noting that #704's title says "switcher chip" while what shipped is a display chip — which is very likely where the expectation came from. That is a stale title on a closed issue, not a missing feature.

The real gap: "which deployment am I looking at" is hover-only

modeBadge (keel/web/static/js/render.js:3030) puts the mode word in the badge and the identifying pair in a title attribute:

node.title = (config.db_path || "").concat(" · config ", config.config_path || "");

with the comment:

The "where am I" half: one process serves one --db/--config pair, and naming both makes paper-vs-live confusion answerable at a glance instead of by asking the terminal.

title renders as a hover tooltip. There is no hover on a touch device. So on phones and tablets the "where am I" half is not merely inconvenient — it is unreachable, and the stated goal of answering paper-vs-live "at a glance instead of by asking the terminal" fails exactly where the terminal is least available.

This matters now rather than later because Phase B (#648, #656) is the mobile wedge: the whole point is an operator approving from a phone. An operator who cannot tell which database they are looking at is the wrong person to be approving anything, and on the target device today they cannot.

The mode word is visible on all devices. It is the --db/--config pair — the half that distinguishes two paper deployments, or paper-vs-live when both read confirm — that is hover-gated.

Also worth checking while in here

The badge is empty when the config cannot be read (if (!mode) clears it and drops the title). That refusal is right — an absent answer is not paper — but an empty pill is silent about why. Whether that reads as "no deployment" or as a rendering bug is worth deciding deliberately.

Suggested shape

  • Surface the db_path/config_path pair without hover: a tap-to-reveal on the chip, or on the session/status view where it does not cost header space.
  • Keep it display-only. No route, no control, no capability row — the disjointness pin stays green.
  • Do not replace the title; keyboard and desktop users have it and it works there.

Acceptance

  • On a touch device with no pointer, an operator can determine which --db and which --config the running server is serving, without a terminal
  • No new capability row; the disjointness pin passes
  • modeBadge still refuses to name a mode it cannot read
  • No control that changes mode, profile, or equity state appears anywhere in the web UI

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions