Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: larkly/lazystack
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.3.2
Choose a base ref
...
head repository: larkly/lazystack
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.4.0
Choose a head ref
  • 16 commits
  • 39 files changed
  • 1 contributor

Commits on Mar 25, 2026

  1. Merge pull request #16 from larkly/fix/selfupdate-git-describe

    fix: handle git-describe suffixes in version comparison
    larkly authored Mar 25, 2026
    Configuration menu
    Copy the full SHA
    2a676e7 View commit details
    Browse the repository at this point in the history

Commits on Mar 26, 2026

  1. feat: complete Phase 3 backlog — CRUD forms, network browser, keypair…

    … management
    
    Implement all deferred Phase 3 backlog items:
    
    Create Volume form (ctrl+n from volume list)
      - Name, size, type picker from volume types API, AZ, description
      - Validation, inline pickers with type-to-filter
    
    Volume Attach server picker (ctrl+a from volume detail)
      - Modal listing ACTIVE/SHUTOFF servers with type-to-filter
      - Accepts HTTP 200/201/202 for cross-cloud compatibility
    
    Create Security Group Rule (ctrl+n from sec groups)
      - Modal with cycle pickers for direction/ethertype/protocol
      - Port range and remote IP prefix inputs with validation
    
    Create/Import Key Pair (ctrl+n from keypair list)
      - RSA 2048, RSA 4096, ED25519 type picker
      - Keys generated locally using Go crypto, imported via Nova
      - File browser for ~/.ssh/*.pub files
      - Private key view with save-to-file (s key, default ~/.ssh/)
    
    Keypair detail view (enter from keypair list)
      - Shows name, type, and full public key with scroll
    
    Network/Subnet browser (new Networks tab)
      - Expandable network list with inline subnet details
      - CIDR, gateway, DHCP status, IP version
    
    Additional improvements:
      - Sticky status bar hints that survive background auto-refresh
      - Auto-refresh for keypair list (was missing tick pattern)
      - Keypair delete from detail view
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    fbea4ff View commit details
    Browse the repository at this point in the history
  2. Merge pull request #17 from larkly/feat/backlog-crud-and-networks

    feat: complete Phase 3 backlog — CRUD forms, server picker, network browser
    larkly authored Mar 26, 2026
    Configuration menu
    Copy the full SHA
    b71ff17 View commit details
    Browse the repository at this point in the history
  3. feat: SG group CRUD, network/subnet CRUD, port listing, LB fix, PRD u…

    …pdate
    
    Security Group CRUD:
      - Create security group (ctrl+n on group level): name + description modal
      - Delete security group (ctrl+d on group level): confirmation modal
      - Context-sensitive keybindings: group level = group CRUD, rules = rule CRUD
      - Backend: CreateSecurityGroup(), DeleteSecurityGroup()
    
    Network/Subnet CRUD:
      - Create network (ctrl+n on network level): name + admin state modal
      - Delete network (ctrl+d on network level): confirmation modal
      - Create subnet (ctrl+n in subnet navigation): CIDR, IP version, gateway, DHCP
      - Delete subnet (ctrl+d in subnet navigation): confirmation modal
      - Re-added subnet navigation with cursor highlighting
      - Backend: CreateNetwork(), DeleteNetwork(), CreateSubnet(), DeleteSubnet()
    
    Port Listing:
      - Read-only port display in expanded network view
      - Shows port name, MAC address, IPs, device owner
      - Backend: ListPorts() with network ID filter
    
    LB name fix:
      - Name column now uses remaining terminal width instead of fixed 28 chars
      - Fixed truncate function to properly handle ellipsis
    
    PRD update:
      - Updated backlog as complete, added new features to Phase 3 docs
      - Updated keybindings tables and project structure
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    92e6e23 View commit details
    Browse the repository at this point in the history
  4. fix: track expanded groups by ID instead of index

    After deleting a security group, the next group at the same index
    would inherit the expanded state because expansions were tracked by
    array index. Changed to track by group ID so expansions survive
    list reordering. Also clamps cursor when the list shrinks.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    6e075cd View commit details
    Browse the repository at this point in the history
  5. fix: prevent vim j/k keys from triggering navigation in text inputs

    All form/modal text inputs were intercepting j/k as vim-style up/down
    navigation because Keys.Up/Down include "k"/"j" bindings. When a text
    input field has focus, only intercept Tab/ShiftTab/Enter/Esc/ctrl+s
    for navigation — route all other keys to the text input.
    
    Fixed in all 7 form/modal components:
    - servercreate, volumecreate, keypaircreate (full-view forms)
    - sgcreate, sgrulecreate, networkcreate, subnetcreate (modal overlays)
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    5def2d1 View commit details
    Browse the repository at this point in the history
  6. fix: subnet navigation — enter subnets from any expanded network

    Down arrow only entered subnet navigation from the last network
    because the condition checked cursor < len-1 first (always true
    except at the end). Reversed priority: check if current network
    is expanded with subnets first, then fall through to next network.
    
    Also switched expanded map from int index to network ID (matching
    the secgroupview fix) so expansions survive list reordering, and
    added cursor clamping on data refresh.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    3a3eb6b View commit details
    Browse the repository at this point in the history
  7. fix: allow subnet creation from expanded network without subnets

    When a network is expanded but has no subnets, there was no way to
    enter subnet navigation to trigger ctrl+n for subnet create. Now
    ctrl+n creates a subnet when the network is expanded (regardless of
    whether you're in subnet navigation), and creates a network only
    when collapsed. Status bar hints update to reflect context.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    156a2f1 View commit details
    Browse the repository at this point in the history
  8. Merge pull request #18 from larkly/feat/sg-network-crud

    feat: SG group CRUD, network/subnet CRUD, port listing, LB fix
    larkly authored Mar 26, 2026
    Configuration menu
    Copy the full SHA
    618a8f7 View commit details
    Browse the repository at this point in the history
  9. feat: add server stop/start and lock/unlock actions

    Stop/Start (o key):
      - ACTIVE server → stop (SHUTOFF), SHUTOFF server → start (ACTIVE)
      - Toggle pattern matching pause/unpause and suspend/resume
      - Bulk support via space-select
    
    Lock/Unlock (ctrl+l):
      - Lock prevents modifications, unlock removes protection
      - Auto-detects lock status from server object
      - Locked servers already show 🔒 icon in server list
      - Bulk support via space-select
    
    Both actions work from server list and detail views with
    confirmation modals. Help overlay updated.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    37c558c View commit details
    Browse the repository at this point in the history
  10. feat: add Routers tab with full CRUD and interface management

    Router list view:
      - Columns: Name (flex), Status, External Gateway, Routes count
      - Auto-refresh, sorting with s/S
      - Enter opens detail, ctrl+n creates, ctrl+d deletes
    
    Router detail view:
      - Properties: Name, ID, Status, Admin State, External Gateway
      - Interfaces section with navigable list (subnet + IP + port)
      - Static routes section
      - ctrl+a opens subnet picker to add interface
      - ctrl+t removes selected interface (confirmation)
      - ctrl+d deletes router (confirmation)
    
    Router create modal:
      - Name (text), External Network (inline picker from external networks),
        Admin State (cycle Up/Down)
      - Text input guard for vim j/k keys
    
    Subnet picker modal:
      - Lists all subnets with name + CIDR
      - On select, adds as router interface
    
    Backend (network/routers.go):
      - ListRouters, GetRouter, CreateRouter, DeleteRouter
      - AddRouterInterface, RemoveRouterInterface, ListRouterInterfaces
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    faabfd1 View commit details
    Browse the repository at this point in the history
  11. docs: add server action gaps roadmap to PRD

    Document missing Nova server actions prioritized by usefulness:
    - High-value: rename, rebuild, create snapshot
    - Medium: rescue/unrescue, get password
    - Admin-only: migrate, evacuate, force delete, reset state, metadata
    
    Cross-referenced from Phase 5 and Phase 6 sections.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    4a37c0b View commit details
    Browse the repository at this point in the history
  12. fix: stop mutating shared compute client microversion

    ImportKeyPair was setting client.Microversion to "2.2" then resetting
    to "" after the call. This wiped the "2.100" microversion set at
    connection time, causing subsequent server list requests to fail with
    503 because the cloud requires the microversion header.
    
    Since we removed the Type field from CreateOpts (keys are generated
    locally now), the microversion override is no longer needed.
    larkly committed Mar 26, 2026
    Configuration menu
    Copy the full SHA
    6aea6cc View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    f408ed8 View commit details
    Browse the repository at this point in the history
  14. Merge pull request #20 from larkly/feat/homebrew-tap-dispatch

    Notify homebrew-tap on release
    larkly authored Mar 26, 2026
    Configuration menu
    Copy the full SHA
    dcfc473 View commit details
    Browse the repository at this point in the history
  15. Merge pull request #19 from larkly/feat/routers-stop-lock

    feat: routers tab, server stop/start, lock/unlock, PRD gaps
    larkly authored Mar 26, 2026
    Configuration menu
    Copy the full SHA
    6ff0d9a View commit details
    Browse the repository at this point in the history
Loading