vibe prefs — the settings TUI (PROP-041) visual sign-off
01Purpose. vibe prefs ui is the TUI surface over vibe-settings (PROP-040):
a page tree, per-type edit forms, provenance, validation feedback, lint, and
search — built on the vibe tree TUI's component library + theme (Шаг 3) and
driven by vibe.prefs actions. The automated suite (347 vibe-cli tests,
self-check all green) proves the model + the rendering fns; it cannot drive a
real terminal and confirm the surface reads right — the page tree aligns, the
form fields edit, the provenance shows the winning layer, the validation
warnings land inline. That is what a human signs off here.
02This TUI writes user settings (~/.vibe/, the vibe-settings system) — palette/
tier/mode/sort/shape/static-first persist. Back them up or accept the delta.
Preconditions
- 03A real interactive terminal (tty), ideally truecolor.
cargo build -p vibe-cli(invoke./target/debug/vibe).- Run from the vibevm repo root (a project context → L1+L2+L3; elsewhere L1 only).
Steps
- 04Launch + the page tree.
05 ./target/debug/vibe prefs ui
06Left pane: the page hierarchy (Appearance / Tree groups → the palette/tier/
mode/sort/shape/static-first pages) through the same visual language as the
tree TUI (│├└─, ▾/▸ fold, theme colours). ↑/↓ move, ←/→ fold.
- 07Open a page + the edit form (§4).
Enteron a page → the right pane shows the form: per-type fields (bool→toggle, enum/closed-set→selection, int/string→text), each with anappliesbadge + a write-layer selector at the bottom.↑/↓field focus,Space/Entertoggle/select, typing edits a text field,Tabcycles the write-layer (L3 project / L1 no-project).
- 08Apply / reset (§4 Configurable lifecycle). Edit a field → the form is
modified;
aapplies (writes throughvibe-settingsto the chosen layer; a scope-forbidden layer is refused with the reason),rresets. Quit + relaunch — the change persisted.
- 09Provenance (§5).
?on a focused field → an inline block: the resolved value + each layer's contribution (default/L1/L2/L3/cli/env), the winning layer marked, shadowed layers dimmed.xclears the focused write-layer for that key → the value falls back to the layer beneath.
- 10Validation + lint (§6). Type a wrong-type value → an inline warning line
under the field (gold, rule cited);
applyis blocked.copens the lint modal —schema::validateacross L1/L2/L3 as a flat warning list; selecting a warning jumps to the owning page focused on that field.
- 11Search (§7).
/orF1→ the Search Everywhere window (the same engine the tree TUI uses): match by key / display name / description / synonyms; selecting opens the owning page focused on the field. Deprecated keys surface theirreplaced_by.
- 12Actions + footer (§8). The footer lists the enabled
vibe.prefsactions for the current context (open/apply/reset/search/lint/layer/provenance/quit), keymap-bound.Escpops the modal stack (provenance → page).
- 13Theme switch (the live Theme, §1
#built-on-tree-tui). Changevibe.tree.palettein the form (or~/.vibe/settings.toml) → the whole prefs UI re-skins to match the tree TUI.
Pass
14Every step reads as described: the page tree aligns, the form edits + applies + persists, the provenance shows the winning layer, validation lands inline, the lint + search work, and the footer lists the live actions. The owner signs the date below.
Sign-off
- 15[ ] Owner visual sign-off (date / initials): ______