Skip to main content

Changelog

This page provides an overview of notable changes to the s9s project. For a complete and detailed changelog, please see the full changelog.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Recent Changes

Version 0.9.0 (2026-04-08)

Refresh-rate consistency, job output viewer, enriched job details, and grouped node fixes:

  • Unified Auto-Refresh: All views now share a single refresh cadence driven by refreshRate in config. Previously, Jobs (30s), Health (10s), and Performance (5s) used hardcoded intervals that ignored the config. The per-view m/M toggle on Jobs and R toggle on Performance are removed in favor of a new global F6 pause/resume
  • Live Reconfiguration: Editing refreshRate in the F10 modal re-arms the running ticker immediately — no restart required. Empty string (refreshRate: "") is now a deliberate "auto-refresh disabled" state
  • Default Refresh Rate: Bumped from 2s to 10s — saner for shared clusters now that a single ticker drives all views
  • Data Race Fix: Auto-refresh state is now accessed via atomic.Bool, fixing a real cross-goroutine race
  • Job Output Streaming: Press o to view job output, t for real-time tail-f streaming, s to switch stdout/stderr, e to export
  • Array Job Output Patterns: %A and %a expanded in output file paths
  • Enriched Job Detail Modal: TRES requested/allocated, GRES with GPU index, batch host, cluster, memory, submit command line, and 22 additional SLURM fields
  • GRES Submission Fix: gres: gpu:1 correctly mapped to tres_per_node: gres/gpu:1
  • Go 1.25 Minimum: Go 1.24 no longer receives security patches; source builds require Go 1.25+. Prebuilt binaries unaffected
  • Bug Fixes: Dashboard modal ESC/R, node operations when grouped, sort/group mutual exclusivity, health checks stable ordering, F1 help modal j/k scrolling
  • Dependabot: Replaces Trivy for dependency scanning
  • gofmt CI Gate: Formatting enforced in lint job

Version 0.8.0 (2026-03-30)

Keyboard shortcut overhaul, layout system, and configuration consolidation:

  • Dashboard Layout Switcher: Press L to toggle between default 6-panel view and Monitoring layout (metrics + health)
  • Uniform Keyboard Shortcuts: f for advanced filter (all views), x for actions menu (jobs), t for future filter (reservations)
  • Contextual Help: ? and F1 show global keys, commands, and the current view's shortcuts
  • Tab Completion: Press Tab on empty : prompt to browse all available commands
  • Self-Update: s9s update command with auto-update checks, SHA256 verification, and GitHub Releases
  • Configuration Overhaul: F10 modal consolidated to General + View Settings; saves correctly with proper field casing
  • View Settings Applied: Max Jobs, Show Only Active, Group Nodes By from config take effect on startup
  • Dead Code Removed: Preferences modal (F3), stub widgets, placeholder config groups (-1,500+ lines)
  • Bug Fixes: Layout deadlock, command line focus stealing, config save path, hint bar stale hints

Version 0.7.1 (2026-03-21)

Bug fix release for remote cluster connectivity:

  • Configurable SLURM Username: New user field in cluster config (cluster.user: root) overrides the X-SLURM-USER-NAME header — for environments where the local OS user doesn't match a SLURM user (laptops, CI runners, containers, or any host outside the cluster's shared user directory)
  • SLURM_USER_NAME Environment Variable: Overrides all other username resolution for CI/scripting use cases
  • No Silent Root Fallback: Username resolution fails explicitly if no user can be determined, preventing unintended privilege escalation

Version 0.7.0 (2026-03-16)

Configurable job submission templates and full SLURM field support:

  • Configurable Templates: Define custom job templates in config YAML with pre-filled defaults, hidden fields, and restricted dropdown options
  • 3-Tier Template Merge: Built-in, config YAML, and user-saved JSON templates merge with name-based override
  • 84 sbatch Fields: Job submission wizard supports 84 of 117 SLURM fields (was 12) -- fields like QoS, GPUs, array, constraints, dependencies now actually reach slurmrestd
  • Smart Field Visibility: Advanced fields hidden by default, shown automatically when a template sets them
  • CLI Template Management: s9s templates list and s9s templates export commands for viewing and exporting templates
  • SubmitRaw Integration: Bypasses lossy intermediate struct, maps directly to SLURM OpenAPI JobCreate
  • QoS Dropdown: QoS field now fetches from cluster API like partitions and accounts
  • User Defaults: Account and QoS default to the current SLURM user's defaults
  • Preview Copy: Ctrl+Y in job script preview copies clean sbatch script to clipboard (OSC 52)
  • Full --begin Parsing: ISO dates, relative times (now+1hour), SLURM named times (midnight, fika, teatime)
  • Bug Fixes: Viper key case normalization, preview directive accuracy, optional dropdown defaults, duplicate shebang/SBATCH removal
  • Removed: Deprecated OLDShowJobTemplateSelector and helpers

Version 0.6.3 (2026-03-14)

Performance and responsiveness release:

  • Eliminate N+1 API calls: Partitions view now fetches all jobs in a single API call instead of 2N+1 calls per refresh — fixes multi-second freezes on clusters with 20k+ jobs
  • Lazy view init & background fetch: Views only initialize when first focused; DAO-level caching reduces redundant API calls; only the active view auto-refreshes
  • Async UI-thread API calls: 11 blocking API calls (cancel, hold, release, details modals, etc.) moved off the tview draw thread — UI stays responsive during all operations
  • Header improvements: Remove clock, add navigation key hints (Tab, Enter, ?)
  • Per-user temp paths: Fix multi-user conflicts with shared /tmp files
  • Install script fix: Serve install script directly at get.s9s.dev root

Version 0.6.2 (2026-03-10)

Setup wizard improvements and bug fixes:

  • Setup Wizard Config Fix: Generated config now uses valid camelCase YAML keys — previously yaml.Marshal produced lowercase keys that s9s couldn't load
  • Streamlined Wizard: Removed questions that didn't affect config; wizard now asks only endpoint, cluster name, and optional JWT token
  • Token Discovery Fix: Generated config no longer disables token auto-discovery, so scontrol token and SLURM_JWT fallback works without a configured token
  • Connection Test: Setup wizard now tests the slurmrestd connection before completing
  • Docs Update: Lead with zero-configuration auto-discovery (DNS SRV, scontrol ping) — s9s works on any SLURM node without running setup

Version 0.6.1 (2026-03-09)

Bug fix release focusing on metric accuracy:

  • Node Resource Metrics: Use real SLURM API fields (AllocCPUs, AllocMemory, FreeMem, CPULoad) instead of hardcoded 50% estimates
  • Cluster Metrics: Dashboard, Performance, and Health views now show real memory and CPU usage from node data
  • Job Times: Fix negative elapsed times for PENDING jobs (SLURM sets StartTime to future estimate)
  • Remove fake hardcoded "Job Throughput (24h)" chart from Dashboard

Version 0.6.0 (2026-03-08)

Key features:

  • Cluster Switcher: Show active cluster name in header, press Ctrl+K to switch clusters at runtime
  • --cluster Flag: Select cluster context from the command line; fix --config flag being ignored
  • Table Export: Press e in any view to export data (CSV, JSON, Text, Markdown, HTML)
  • VHS Integration Tests: Regression testing against real Slurm clusters (24.05, 24.11, 25.05, 25.11)
  • Breaking: Config keys renamed contextsclusters, currentContextdefaultCluster

Version 0.5.0 (2026-02-18)

Key features:

  • Zero-Configuration Auto-Discovery: Works out-of-the-box on SLURM systems without config files
  • API Version Auto-Detection: Removed hardcoded API version default
  • Static Binary Builds: CGO_ENABLED=0 for cross-distribution compatibility
  • Integration Tests CI: PR testing with ephemeral k3d cluster and mock SLURM API

Version 0.4.0 (2026-02-08)

Key features:

  • Performance View: Real-time cluster-wide metrics (jobs, nodes, CPU%, memory%)
  • Sorting Modal: Press S in any table view for interactive column sorting
  • Command Mode with Arguments: Vim-style :cancel, :drain, :requeue with Tab completion
  • Reservation Filters: a for active-only, f for future-only
  • Job Output File Reading: Local filesystem and SSH-based remote file access

Version 0.3.0 (2026-01-30)

Key features:

  • Vim-style view navigation: h and l keys for switching between views
  • Global search cross-view navigation: Search results navigate to the correct view
  • Partition filter syntax: Use p:partition_name to filter by partition
  • Username resolution: Jobs display actual usernames instead of numeric UIDs
  • Centralized version management and automated release processes

Version 0.1.0 (2026-01-21)

Initial stable release with core features:

  • Core TUI Application for SLURM cluster management
  • Vim-like navigation and keybindings
  • Interactive job and node management
  • Multi-cluster support with context switching
  • Configuration management and wizard
  • CSV, JSON, and Markdown export capabilities
  • Observability plugin with Prometheus integration
  • Comprehensive test suite and CI/CD

Viewing the Full Changelog

For a complete list of all changes, features, and fixes across all versions, refer to the full CHANGELOG.md.

Version History

  • v0.9.0 - Latest release
  • v0.8.0 - Layouts, self-update, config overhaul
  • v0.7.1 - SLURM username config
  • v0.7.0 - Job templates
  • v0.6.3 - Performance and responsiveness
  • v0.6.2 - Setup wizard fixes
  • v0.6.1 - Node metrics, job times, dashboard fixes
  • v0.6.0 - Cluster switcher, export, config rename
  • v0.5.0 - Auto-discovery, static builds
  • v0.4.0 - Performance view, sorting, command mode
  • v0.3.0 - Vim navigation, search, filters
  • v0.1.0 - Initial release
  • Unreleased - Upcoming changes

Semantic Versioning

This project follows Semantic Versioning (MAJOR.MINOR.PATCH):

  • MAJOR: Incompatible API changes
  • MINOR: Added functionality in a backwards-compatible manner
  • PATCH: Backwards-compatible bug fixes

Contributing

If you've found a bug or have a feature request, please check the changelog to see if it's already been addressed or planned. For more information about contributing, refer to the project's contributing guidelines.