7 Commits

Author SHA1 Message Date
frank cefd8a13ec refactor to break up large files 2026-05-27 17:47:58 -04:00
frank 827dc7a3bc Checkpoint current ansibleTUI changes 2026-05-27 12:46:07 -04:00
frank 9a988c5e2b Fix run wrapping, server detail columns, fleet summary layout, sidebar readability
Recent Runs:
- Root cause: zone markers add ~2 visible chars inside panelStyle.Width(),
  causing any line at exactly innerW to wrap into two rows
- Fix: build plain text to safeW=innerW-4, hard-cap with rune slice before
  applying color; drop mode column (color already conveys status)

Server Detail:
- Root cause: padANSI(nameStr+icon, nameW) breaks when Nerd Font icon renders
  2 cols but lipgloss measures it as 1, pushing the state badge to the next line
- Fix: label:value layout — each row is independent; Name on row 1, then
  State/Group side-by-side on row 2, Drift row 3, Error row 4, findings hint row 5
- Group info restored in right column of State row

Fleet Summary compliance results:
- Root cause: padRight(pb, innerW-14) expanded the label to ~95 chars, pushing
  status to the far right edge and off-screen on narrower terminals
- Fix: truncate pb to innerW/3, then "name:  status" — compact, always visible
- Removed icon from status text (the isolated X far right was confusing per UX)

Sidebar:
- Collapsed mode (w=8): icon + 3-char abbreviation (SRV/JOB/CFG) so tabs
  are always readable regardless of Nerd Font rendering quality
- Expanded mode (w=20): icon + full label
- Update sidebar width tests (6→8, 18→20)
- Update server detail test: Group label IS shown in the 2-column layout

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:44:17 -04:00
frank bfb13cb08c Fix Recent Runs selection wrapping, panel alignment, run log table, Fleet Summary spread
- Recent Runs: fix selection highlight causing a blank line by dropping
  runSelectedBg.Width(innerW) in favour of colorStyle.Background(colorSelected);
  dynamically size playbook column to fit innerW so lines never wrap
- Panel alignment: pad renderServersPanel and renderRecentRunsPanel content
  to exactly (h-2) lines before rendering so both columns reach the same
  height regardless of data volume
- Run Details log: render findings as a structured STATUS/HOST/TASK/DETAIL
  table in the scrollable viewport; fall back to raw log if no findings
- Fleet Summary: spread the four stat badges evenly across the full panel
  width using per-badge cell centering; remove blank line between header
  and badges; make topH dynamic (5 → grows with compliance results)
- Server Detail: 2-column layout — name+state badge on row 1, drift
  count+group on row 2; group info added back now space is used properly
- Sidebar: increase collapsed/expanded widths (4→6, 14→18); center icons
  in collapsed mode for better visual weight; change Servers icon to
  nf-fa-sitemap (distinct from hamburger bars)
- Tests: update sidebarWidth expectations to match new widths

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 21:17:17 -04:00
frank 26f39fad0b Overhaul home screen UI: icons, hamburger sidebar, layout cleanup, mouse zones
Phase 1 — Layout: remove paths from title bar (moved to Config tab); fold
Scan Results panel into Fleet Summary with live compliance progress; fix
panel misalignment by removing free-floating status bar; simplify Server
Detail to name/drift/error only; redesign Recent Runs to 1-line-per-run
RAG-colored rows sorted by descending run number; add full command line to
Run Details screen.

Phase 2 — Mouse (bubblezone v1.0.0): replace coordinate-math hit-testing
with zone.Mark()/zone.Get().InBounds() for server rows, run rows, sidebar
tabs, and hamburger toggle. Double-click on a run opens details.

Phase 3 — Icons & sidebar: add iconSet struct with Icons singleton and
Get(name) dynamic lookup; Nerd Font glyphs for all actions; collapsed
sidebar shows tab icons only, expanded shows icon+label; m key or mouse
click on hamburger toggles; footer hints updated with icons.

Phase 4 — Config tab: show PlaybookDir and InventoryPath at top.

Tests: 21 UI tests covering truncate edge cases, fleet counts, group
sorting, icon dispatch, drift icons, sidebar width, menu toggle key,
fleet summary compliance display, title bar paths removal, server detail
field removal, recent runs format, seq numbering, and style uniqueness.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:55:33 -04:00
frank a4c8fb91f6 Add compliance scanning, run history, host details, config git integration, and test suite
Builds on initial v1 with: compliance job scheduling and result tracking,
structured run history with findings/log storage, host-level drift details
view, git-backed playbook/inventory support, and comprehensive test coverage
across all packages.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 20:41:38 -04:00
frank d0b7ecd0e8 Initial implementation of ansibleTUI v1
Keyboard-first Go TUI for homelab Ansible management built with
Bubble Tea, Bubbles, and Lip Gloss.

Screens: home (server table + recent runs), add/edit server form,
4-step check/apply wizard with live output streaming, and run
details log viewer.

Packages:
- internal/config    — config.yaml persistence
- internal/inventory — YAML Ansible inventory CRUD
- internal/playbooks — playbook directory discovery
- internal/ansible   — argv construction + PLAY RECAP parsing
- internal/history   — JSON run records and log files
- internal/runner    — streaming exec via io.Pipe
- internal/ui        — full Bubble Tea UI with mouse support

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 00:42:05 -04:00