v2.1.0 (2026-10-10)
Breaking Changes
No breaking changes. The hardening in this release does change behavior for existing installations: every session expires once, Jarvis can no longer be embedded in an <iframe>, and writes (including login) are rejected with 403 behind a reverse proxy that rewrites the Host header unless JARVIS_ALLOWED_ORIGINS is set. See Upgrading from 2.0.0.
Bug Fixes
- api: add optional Host allow-list and trusted-proxy client IP (#295)
- api: reject cross-origin writes, harden response headers and add JARVIS_COOKIE_SECURE (#294)
- api: create the first admin atomically and add optional setup token (#288)
- api: make the login throttle atomic and ignore lookup errors (#324)
- api: bind sessions to the database and make logout revocation persistent (#292)
- api: split liveness and readiness probes and report follower cluster health (#293)
- api: time-box the OIDC exchange and no longer refuse unverified e-mails (#323)
- api: slow down repeated failed logins per username (#313)
- api: validate silence IDs, cap upstream reads and check composed runbook URLs (#312)
- api: close the session cache race and keep the UI readable when auth/me is unavailable (#336)
- api: harden the readiness probe and document the 2.0.0 upgrade notes (#334)
- api: strip credentials from cluster URLs and add optional metrics token (#296)
- api: harden session JWT and OIDC login (#322)
- api: limit manual polls and WebSocket connections (#297)
- config: raise a PostgreSQL pool of one connection to two (#331)
- config: warn at startup when authentication is disabled (#284)
- config: enable gitleaks default rules and add scan canary (#283)
- db: step down a blackholed PostgreSQL leader within one heartbeat timeout (#318)
- db: bound the follower try-lock with a deadline and document leader overlap limits (#326)
- db: keep snapshot alerts when a fresh leader cannot reach Alertmanager (#285)
- docker: track the Air config so make up works on a fresh clone (#321)
- docker: verify release signatures with the exact workflow identity (#305)
- ws: accept the request's own host on the WebSocket upgrade like on HTTP writes (#325)
Chores
- config: stop shipping agent permissions and treat outside text as data (#317)
- config: add a 7-day Dependabot cooldown and tighten the auto-merge rule (#339)
- config: drop the global gosec exclusions and annotate findings at the source (#311)
- deps: bump node from 22-alpine to 26-alpine (#299)
- deps: bump vue from 3.5.42 to 3.5.43 in /website in the minor-patch group (#315)
- deps: bump golang from 1.26-alpine to 1.27-alpine (#300)
- deps: bump lucide-react from 1.51.0 to 1.52.0 in /frontend in the minor-patch group across 1 directory (#335)
- deps: bump modernc.org/sqlite from 1.59.0 to 1.60.1 in /backend (#290)
- deps: bump anchore/sbom-action/download-syft from 0.24.2 to 0.24.3 (#301)
- deps: bump the minor-patch group across 1 directory with 10 updates (#314)
- deps: override brace-expansion to a patched release (#273)
- deps: bump dorny/test-reporter from 3.0.0 to 3.2.0 (#316)
- deps: bump the codeql-action group across 1 directory with 4 updates (#254)
- deps: bump the minor-patch group across 1 directory with 9 updates (#270)
- deps: bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 in /backend (#279)
- docker: pin base images by digest and pnpm by version (#298)
- docker: ship third-party license notices in the image (#338)
- docker: add opt-in fast local e2e run (#275)
Documentation
- auto-merge Dependabot PRs only without major or breaking changes (#281)
- trim AGENTS.md to restore headroom under the byte budget (#280)
- config: align security and feature docs with the code (#340)
- config: except Rule 9 from Rule 14 and name what counts as secret access (#330)
- db: require session-mode poolers and state that Jarvis is never the only alert path (#310)
- frontend: add AI and engineering page (#289)
- frontend: refresh the detail panel details-tab screenshot (#278)
Features
- alerts: show alert metadata with fingerprint in the detail sheet (#276)
- alerts: show recently resolved alerts in the active list (#274)
- api: report and export the age of each cluster's data (#286)
- comments: show comment count in card and list view (#282)
- config: add optional NetworkPolicy, image digest and Secret-backed headers to the Helm chart (#307)
- config: support multiple OIDC admin groups (#277)
- frontend: show failed loads, stale clusters and lost live connection (#287)
Security
- docker: bump Go to 1.27.2 and golang.org/x/net to 0.60.0
Tests
- api: add coverage floors and pin the 15-minute silence edge (#337)
- api: make the mechanical invariant guards harder to bypass (#327)
- api: lower the upstream response cap in the oversize test (#328)
- api: enforce invariants 8, 10, 13 and 19 mechanically (#320)
- api: cover WebSocket origin, cookie flags and auth on write routes (#319)
- ws: wait for client registration in dialIdentified (#303)
v2.0.0 (2026-09-28)
Breaking Changes
- JARVIS_OIDC_ADMIN_CLAIM was renamed to JARVIS_OIDC_GROUPS_CLAIM, without an alias. The old variable is ignored, so an SSO admin loses the admin role at the next login until the variable is renamed. Rename it before upgrading.
- Resolved-view regex filters now use RE2; search matches individual label names and values instead of serialized JSON. Equal resolve timestamps are ordered by event ID, and Alerts Overview summarizes the current page. Review saved resolved filters for JS-only regex or JSON-fragment searches. Live filters and the legacy resolved API response shape are unchanged.
Bug Fixes
- alerts: reduce memory usage across history, WS and API (#232)
- config: roll the Deployment when chart-rendered configuration changes (#267)
- db: log the connection pool size SQLite actually uses (#246)
- db: index retention-sweep columns missing coverage (#223)
- frontend: make the Fast-Silence popover and list rows operable from the keyboard (#245)
- frontend: open alert details from the keyboard and correct popover semantics (#242)
- frontend: explain server-side regex only when a regex filter is set (#236)
- silences: add Values/Regex toggle to silence matcher value field (#265)
- ws: keep browsers connected when several alert events arrive at once (#244)
Chores
- run backend and E2E CI jobs in parallel (#249)
- deps: bump the minor-patch group across 1 directory with 8 updates (#234)
- deps: bump docker/build-push-action from 7.3.0 to 7.4.0 (#231)
- deps: bump docker/setup-qemu-action from 4.3.0 to 4.4.0 (#230)
- deps: bump docker/setup-buildx-action from 4.3.0 to 4.4.1 (#229)
- deps: bump codecov/codecov-action from 7.0.0 to 7.1.1 (#225)
- deps: bump modernc.org/sqlite from 1.58.0 to 1.59.0 in /backend (#227)
- docker: use curated release notes in release candidates (#252)
- video: add chart slides, an OIDC mode and an under-slide hook to the video tooling (#268)
- video: restyle video cards and covers with the design guide (#238)
- video: record narrated demo videos from the e2e stack (#216)
Documentation
- add pod memory before/after graphs to v2.0.0 release notes (#257)
- update v2.0.0 release notes with SSO groups changes (#256)
- slim the AI agent context and simplify its checks (#248)
- define ownership and lifecycle of critical invariants (#247)
- regenerate all screenshots (#241)
- point README at the docs site and fix the home hero screenshot alignment (#222)
- publish the documentation as a website on GitHub Pages (#215)
- silences: add regex matcher screenshot and sync e2e doc row (#266)
Features
- config: add admin-managed global settings foundation (#259)
- config: expose OIDC groups/admin claim and retention sweep as chart values (#258)
- config: read OIDC groups claim and show it in an account panel (#255)
- config: configurable silence durations per instance and per user (#239)
- config: add native Helm chart upstream auth and restructure the documentation site (#220)
- frontend: copy a link to an alert from the detail panel (#237)
- frontend: resume the interrupted action after login instead of losing it (#235)
- frontend: design system, accessibility fixes and a refreshed documentation site (#233)
- frontend: improve documentation media (#226)
- frontend: animated owl-mesh backdrop for empty alert and silence views (#213)
- silences: extend a running silence with one click (#240)
Security
- api: drop per-IP rate limits, keep one global login limit (#251)
- frontend: update website build dependencies (#221)
v1.12.0 (2026-09-15)
Breaking Changes
No breaking changes.
Bug Fixes
- claims: patch every pod's AlertStore on claim fanout, not just the origin (#183)
- config: fail fast when auth.provider lacks its secret material (#193)
- db: bound RecordStatusChange/RecordResolvedForCluster transactions (#200)
- db: increment occurrence_count without a cluster_name filter (#199)
- db: make RecordResolvedForCluster transactional and advisory-locked (#198)
- db: carry annotations over into resolved event rows (#197)
- db: break recorded_at ties on id in getLastEventForClusterOn (#196)
- db: serialize PostgreSQL schema migrations with an advisory lock (#195)
- db: reject SQLite with multiple replicas regardless of persistence.enabled (#194)
- db: render chart Secret independently for DSN and auth key (#192)
Chores
- config: make the AI agent context tool-agnostic (#210)
- deps: bump the minor-patch group across 1 directory with 11 updates (#204)
- deps: bump the codeql-action group across 1 directory with 4 updates (#205)
- deps: bump github.com/jackc/pgx/v5 in /backend (#190)
- deps: bump golang.org/x/crypto from 0.56.0 to 0.57.0 in /backend (#203)
- deps: bump the minor-patch group in /frontend with 3 updates (#185)
- release: explicit breaking changes, Helm chart changelog, image-first chart publishing (#209)
Documentation
- require closing keyword in PRs that resolve an issue (#207)
- agents: slim AGENTS.md, move PR workflow into a skill (#211)
- release: forbid hard-wrapping release-notes prose (#184)
Features
- alerts: toolbar Grouped control, compact status buttons, doc screenshot refresh (#188)
- alerts: multi-column card grid, recency sort, columns setting (#187)
- config: add server-side persistence for user settings (#202)
- frontend: saved filters menu, Alertmanager-style ?filter= URL syntax (#208)
- frontend: redesign label display to Pin & Hide, persist settings URL state (#206)
- frontend: header redesign, claim UX, and detail-panel polish (#186)
Tests
- alerts: expand fixture script with label-heavy test alerts (#201)
v1.11.0 (2026-09-09)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: return alert snapshot in a deterministic order (#170)
- claims: re-hydrate active claims on follower snapshot rebuild (#176)
- db: isolate leader advisory lock per test, acquire it immediately (#181)
Chores
- deps: bump pnpm/action-setup from 6.0.10 to 6.1.0 (#175)
- deps: bump golang.org/x/time from 0.15.0 to 0.16.0 in /backend (#172)
- deps: bump golang.org/x/oauth2 from 0.36.0 to 0.37.0 in /backend (#173)
- deps: upgrade Go toolchain to 1.26, bump golang.org/x/crypto to v0.56.0 (#171)
- deps: bump the minor-patch group in /frontend with 5 updates (#165)
- deps: bump anchore/sbom-action/download-syft (#169)
- deps: bump docker/setup-qemu-action from 4.2.0 to 4.3.0 (#168)
- deps: bump docker/setup-buildx-action from 4.2.0 to 4.3.0 (#167)
- deps: bump the codeql-action group with 4 updates (#166)
- deps: bump github.com/coreos/go-oidc/v3 in /backend (#164)
- deps-dev: bump @playwright/test from 1.62.1 to 1.63.0 in /frontend in the minor-patch group (#174)
- release: prepare v1.11.0
Documentation
- regenerate settings-panel screenshot for the new colophon (#180)
Features
- frontend: add brand colophon to settings, narrow the sheet (#179)
- silences: redesign card (lifetime bar) and list (dense rows) (#178)
- silences: show creation time, fix Created sort, add direction toggle & "by" filter (#177)
v1.10.1 (2026-09-05)
Breaking Changes
No breaking changes.
Chores
- deps: bump modernc.org/sqlite from 1.56.0 to 1.58.0 in /backend (#158)
- deps: bump the minor-patch group across 1 directory with 16 updates (#157)
- deps: bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#147)
- deps: bump docker/login-action from 4.5.0 to 4.6.0 (#149)
- deps: bump golang.org/x/crypto from 0.54.0 to 0.55.0 in /backend (#144)
- deps: bump actions/attest-build-provenance from 4.1.1 to 4.2.2 (#146)
- deps: bump the codeql-action group with 4 updates (#145)
- deps: bump pnpm/action-setup from 6.0.9 to 6.0.10 (#150)
- release: prepare v1.10.1
Documentation
- readme: center header logo and drop inline copyright line (#161)
v1.10.0 (2026-09-05)
Breaking Changes
No breaking changes.
Chores
- release: prepare v1.10.0
Features
- frontend: add logo and favicon assets (#159)
v1.9.3 (2026-08-17)
Breaking Changes
No breaking changes.
Chores
- deps: bump github.com/prometheus/client_golang in /backend (#135)
- deps: bump modernc.org/sqlite from 1.53.0 to 1.56.0 in /backend (#139)
- deps: bump actions/setup-node from 6.4.0 to 7.0.0 (#114)
- deps: bump actions/setup-go from 6.5.0 to 7.0.0 (#124)
- deps: bump the codeql-action group across 1 directory with 4 updates (#123)
- deps: bump actions/checkout from 7.0.0 to 7.0.1 (#129)
- deps: bump the minor-patch group across 1 directory with 22 updates (#141)
- deps: bump docker/login-action from 4.4.0 to 4.5.0 (#134)
- release: prepare v1.9.3
v1.9.2 (2026-07-17)
Breaking Changes
No breaking changes.
Bug Fixes
- config: add codecov.yml with thresholds to stop flaky coverage checks (#127)
- db: stop self-healing PostgreSQL reconnects and transient AM 503s from paging (#126)
Chores
- release: prepare v1.9.2
v1.9.1 (2026-07-16)
Breaking Changes
No breaking changes.
Bug Fixes
- db: cap PostgreSQL connection pool to stop RDS slot exhaustion (#120)
Chores
- release: prepare v1.9.1
Features
- frontend: explain refresh in tooltip incl. backend poll interval (#119)
v1.9.0 (2026-07-15)
Breaking Changes
No breaking changes.
Bug Fixes
- db: make RecordStatusChange transactional and lock-guarded (#108)
- frontend: hide @claimed-by pseudo-label from label chips (#107)
Chores
- release: prepare v1.9.0
Documentation
- canonical persistence guide + doc consolidation (D8) (#116)
Features
- alerts: leader-only polling + PostgreSQL snapshot distribution (#110)
- config: ServiceMonitor relabelings, annotations, honorLabels (#117)
- config: Helm chart HA deployment surface (PDB, topology spread) (#113)
- config: leader pod label via Kubernetes API PATCH (no client-go) (#112)
- config: PostgreSQL leader election + leader-gated history writes (#109)
- ws: cross-pod mutation fanout via PostgreSQL LISTEN/NOTIFY (#111)
v1.8.0 (2026-07-13)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: bucket heatmap by recorded_at instead of starts_at
- alerts: make alert detail panel responsive on narrow viewports
- api: 20-min resolved-alert removal timer no longer deletes re-fired alerts
- config: bump codeql-action init/autobuild/analyze together to v4.37.0 (#105)
- db: scale grace period with JARVIS_POLL_INTERVAL
- db: reconcile alerts resolved during a Jarvis restart
- db: keep last-known-good alert snapshot on cluster fetch failure
- db: dedupe firing episodes in GetFiringStarts by starts_at
Chores
- deps: bump github.com/coreos/go-oidc/v3 in /backend (#90)
- deps: bump docker/build-push-action from 7.2.0 to 7.3.0 (#93)
- deps: bump golang.org/x/crypto from 0.53.0 to 0.54.0 in /backend (#92)
- deps: bump github/codeql-action/upload-sarif (#89)
- release: prepare v1.8.0
Documentation
- alerts: regenerate screenshots and rewrite detail-panel docs for tabbed layout (#100)
- alerts: add full alert-lifecycle reference, fix stale 60s grace-period mentions
Features
- alertmanager: identify HTTP client as Jarvis via User-Agent
- alerts: navigate between group siblings from the detail panel (#103)
- alerts: add @age and @claimed-by advanced filter expressions (#102)
- alerts: add Related tab to detail panel (#101)
- alerts: rework comments and alert detail panel layout
- db: add optional data-retention sweeper (#104)
Security
- api: require auth on /ws websocket upgrade in full_protect mode (#98)
v1.7.0 (2026-07-09)
Breaking Changes
No breaking changes.
Chores
- release: prepare v1.7.0
Features
- alerts: add alerts overview modal with top-label breakdown (#87)
v1.7.0-rc.1 (2026-07-08)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: redesign Fast-Silence menu, aligned submenu icon (#79)
- backend: silence staticcheck SA5011 false positive in registry_test (#85)
- silences: use shared fallback refetch interval for cluster health (#82)
- silences: eliminate per-client Alertmanager load (#80)
- silences: edit real regex matchers as raw text instead of corrupting them (#70)
- silences: fix group Fast-Silence scope and reach 100% coverage (#69)
- silences: validate matchers server-side and relay AM rejections (#68)
- silences: match Alertmanager's anchored-regex semantics exactly (#67)
- ws: register clients synchronously to stop losing events after connect
Chores
- deps: bump docker/metadata-action from 6.1.0 to 6.2.0 (#75)
- deps: bump anchore/sbom-action/download-syft from 0.9.0 to 0.24.0 (#76)
- deps: bump docker/setup-buildx-action from 4.1.0 to 4.2.0 (#74)
- deps: bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (#73)
- deps: bump docker/login-action from 4.2.0 to 4.4.0 (#72)
Documentation
- add Mermaid diagrams for lifecycle, OIDC login, and E2E stack (#81)
- make PR-only git workflow explicit with interactive gates for AI agents (#60)
- define project scope, add scope gate and issue-triage command (#58)
Features
- alerts: firing-pattern heatmap for card + detail view (#84)
- alerts: add group Fast-Silence and persistent bell action rail (#61)
- alerts: support Alertmanager HA gossip clusters with fingerprint dedup (#59)
- release: support pre-release (RC) tags in release workflow (#86)
Tests
- silences: add differential E2E specs against real Alertmanager (#71)
v1.6.0 (2026-07-04)
Breaking Changes
No breaking changes.
Bug Fixes
- api: add cluster label to alert events, add per-cluster fetch duration
- db: report event creation from RecordStatusChange, fix event metric drift
- docker: generate release SBOM via syft directly, sync release docs
- docker: chart-release guard and cosign auth
Chores
- decouple Helm chart versioning, publish and sign via own workflow
- enforce DCO sign-off on all commits via CI check
- update maintainer in Chart.yaml
- add OpenSSF Scorecard workflow
- fail release job instead of overwriting existing release
- harden workflows, move chart publishing out of release.yml
- ci: replace unpinned pnpm npm-install with SHA-pinned pnpm/action-setup
- deps: bump the minor-patch group across 1 directory with 9 updates (#52)
- deps: bump azure/setup-helm from 4.3.1 to 5.0.1 (#45)
- deps: bump actions/checkout from 6.0.3 to 7.0.0 (#42)
- deps: bump actions/setup-go from 6.4.0 to 6.5.0 (#46)
- deps: bump golangci/golangci-lint-action from 9.2.1 to 9.3.0 (#47)
- deps: bump gitleaks/gitleaks-action from 2.3.9 to 3.0.0 (#43)
- deps-dev: bump eslint from 9.39.4 to 10.6.0 in /frontend (#50)
- deps-dev: bump @types/node from 25.9.3 to 26.0.1 in /frontend (#49)
- deps-dev: bump jscpd from 4.2.5 to 5.0.11 in /frontend (#51)
- release: prepare v1.6.0
- security: consolidate gosec into golangci-lint, move govulncheck to CI-only
Documentation
- document PR-only main branch workflow
- add maintainers list and coordinated vulnerability disclosure policy
- add OpenSSF Baseline badge to README
- document the prometheus metrics endpoint
- add known gaps in E2E test coverage for future cycles
- migrate issue templates to YAML issue forms
- add code of conduct and PR process, fix README
- replace LICENSE with canonical Apache-2.0 text, add NOTICE
- add lessons.md and enforce doc-sync via PR checklist
- restructure AI agent context into AI-agnostic AGENTS.md/.agents structure
- readme: reorganize badges into header and tech stack sections
- security: make CVD timeframes best-effort and add private reporting
Features
- api: instrument HTTP requests with prometheus middleware
- api: instrument poll cycle, error, duration and event metrics
- api: add prometheus metrics endpoint skeleton
- docker: add ServiceMonitor and prometheus.io annotations for /metrics
- frontend: wire up ESLint flat config as lint gate (#53)
- release: fully automate /release flow with attestation and SBOM
Tests
- add Go native fuzz targets for parser functions
- e2e: fix B5 spec for expand/collapse card UX
v1.5.3 (2026-06-30)
Breaking Changes
No breaking changes.
Bug Fixes
- update Alertmanager, Grafana, and Prometheus URLs to use localhost for local testing
- alerts: persist only unlocked label matchers to URL to prevent duplicates
- api: log underlying alertmanager error on silence create/delete
- silences: strip backslashes from regex matchers on silence recreate
Documentation
- update CHANGELOG and README for v1.5.3
Tests
- silences: add fixtures to reproduce silence recreate escaping
v1.5.2 (2026-06-29)
Breaking Changes
No breaking changes.
Bug Fixes
- claims: increase claimReleaseDelay from 65 s to 20 min
Documentation
- update CHANGELOG and README for v1.5.2
Features
- frontend: collapse/expand AlertCard body and show claimed count badge
- frontend: replace pagination with expand/collapse in grouped alert cards
v1.5.1 (2026-06-29)
Breaking Changes
No breaking changes.
Bug Fixes
- silences: skip @receiver pseudo-label when filtering silences
Documentation
- update CHANGELOG and README for v1.5.1
v1.5.0 (2026-06-26)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: keep silence result visible after creating from a card
- alerts: scope history, claims, and comments by cluster
- claims: scope claims by cluster to prevent cross-cluster claim bleed
- docker: relabel gitleaks config mount for SELinux
- e2e: fix two screenshot spec selectors
- e2e: use e2e cluster for all silences in screenshot spec
- e2e: fix auth-login-page and auth-admin-panel screenshot specs
- e2e: remove ensureInternalAdmin from auth-login-page to avoid /setup rate limit
- e2e: fix auth-login-page firstRunRedirect and add 429 retry to ensureInternalAdmin
- e2e: stabilize CI image build for pnpm
- e2e: correct SSO button label in auth-login-oidc screenshot spec
- e2e: use alert-group-row testid to expand list view groups in screenshot spec
- frontend: remove creator name setting
- frontend: polish alert detail panel display
- frontend: improve claim badge in alert detail header
- frontend: restore Server icon on cluster chip in alert detail
- frontend: restore animated snake border on Claim button in alert detail
- frontend: simplify resolved list severity display
- frontend: use explicit Tailwind classes for link color in linkUtils
- frontend: widen empty matcher filter inputs
- frontend: stabilize detail prompt caching
- frontend: align nav tab labels and lower their vertical position
- frontend: restore active tab view mode after switching tabs
- silences: align card sections and compact list view
- silences: show add-filter control on Silences page
Chores
- deps: bump github.com/coreos/go-oidc/v3 in /backend
- deps: bump modernc.org/sqlite from 1.52.0 to 1.53.0 in /backend
- deps: bump github.com/labstack/echo/v4 in /backend
- deps: bump actions/setup-node from 4.4.0 to 6.4.0
- deps: bump docker/login-action from 3.7.0 to 4.2.0
- deps: bump docker/metadata-action from 5.10.0 to 6.1.0
- deps: bump actions/upload-artifact from 4.6.2 to 7.0.1
- deps: bump actions/checkout from 4.3.1 to 6.0.3
- deps-dev: bump @vitejs/plugin-react in /frontend
- docker: move Containerfile.dev to repo root, rename dev-dependencies compose
Code Refactoring
- frontend: split alert detail history sections
- frontend: extract filter controls into chip-based MatcherChipsBar
- frontend: move filter and search controls out of Header into pages
Documentation
- update CHANGELOG and README for v1.5.0
- refresh README, CONTRIBUTING, testing docs, and screenshots
- extract feature documentation to docs/features.md
- assets: refresh screenshots after spec and selector fixes
- assets: fix screenshots that previously showed empty/broken state
- assets: add screenshots for fullscreen and dark/light theme
- commands: align command docs with current test, release and config setup
- helm: clarify PostgreSQL recommendation for Kubernetes
Features
- alerts: simplify affected-alerts display and open detail on click
- alerts: replace No alerts text with large empty-state icon
- alerts: show last-fired time in detail header
- claims: let claim owner edit note with immutable history
- docker: add healthcheck for backend service and ensure frontend waits for backend readiness
- docs: add Dark/Light Theme comparison and Fullscreen section
- e2e: add backend test fixtures for silences, comments, claims, templates
- frontend: add grouped toggle for card and list alerts
- frontend: add configurable alert grouping controls
- frontend: add UI store nav state and shared silence-count logic
- frontend: add suppressed alerts mode toggle
- frontend: make sheet dialogs accessible
- frontend: improve login and authenticated user icons
- frontend: add Silences page grouping, list view and fullscreen
- frontend: show login modal on all write actions when unauthenticated
- silences: add search functionality and fullscreen toggle to SilencesPage
- silences: show expired silence info box in card view
- silences: improve silence cards with re-create, label colors and duration formatting
- silences: make matcher and label chips truncatable
- testing: add E2E testing with Playwright and isolated Podman stack
Performance Improvements
- alerts: paginate detail timeline on server
- poll: reuse connections, batch claim lookups, dedup broadcasts
Tests
- api: broadcast claim over WS in e2e test endpoint
- api: relax poll rate limit in e2e builds
- e2e: align screenshot specs with docs image references
- e2e: fix alerts-views specs B4/B5/B9
- e2e: extend silences and search functional coverage
- e2e: cover silence actions and stabilize C11 filters
- e2e: add silences functional specs for page and templates
- e2e: add E2E specs for alerts views, detail panel, and filters
- e2e: fix screenshot specs and update docs for current UI
- e2e: add rich README hero screenshot spec in oidc mode
- e2e: add new spec files for extended functional coverage
- e2e: add Group 3 auth screenshot specs (login page, user menu, admin panel)
- e2e: fix detail-panel specs D2/D5/D9/D10
- e2e: cover silence expiry and recreate flows
- e2e: fix filters specs C10/C11
- e2e: harden silences page and complete F1 close flows
- e2e: fix flaky timing and extend write_protect coverage in existing specs
- frontend: add data-testid attributes for E2E selectors
- frontend: remove unit-test stack in favor of functional e2e
- silences: align SilenceCard and App tests with current behavior
v1.4.0 (2026-06-22)
Breaking Changes
No breaking changes.
Bug Fixes
- api: log 4xx as WARN, 5xx as ERROR in request middleware
- auth: improve hydrate resilience on slow backend startup
- frontend: ensure CI environment variable is set in docker-compose
- frontend: make silence calendar month arrows clickable
Chores
- dev: improve docker-compose for file watching with polling support
- git: ignore build artifacts and npm lock file
Documentation
- update CHANGELOG and README for v1.4.0
- frontend: add silence templates docs, screenshots, and fix test suite
Features
- alerts: store and filter all receivers in alert history
- api: add REST endpoints for silence template management (CRUD)
- auth: map OIDC claim value to admin role
- config: add per-cluster Alertmanager upstream authentication
- frontend: add silence template management UI with tab interface
- frontend: add React Query hooks for silence templates
- frontend: add silence template types and API client
- frontend: show local timezone below silence time inputs
- silences: implement silence template CRUD store operations
- silences: add silence template data model and database schema
v1.3.1 (2026-06-19)
Breaking Changes
No breaking changes.
Bug Fixes
- helm: use Recreate update strategy when SQLite PVC enabled
Documentation
- update CHANGELOG and README for v1.3.1
Features
- helm: reject SQLite PVC with multiple replicas at deploy time
v1.3.0 (2026-06-19)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: correct "Last fired" when Alertmanager corrupts startsAt
- db: handle NULL annotations column in resolved alert scans
- docker: use BUILDPLATFORM for frontend/backend stages to avoid QEMU hang
- frontend: improve cluster badge styling in AlertDetailPanel
- frontend: use getFilterableLabels in Header for filter dropdown
- screenshots: correct localStorage key for view mode in Playwright spec
- scripts: keep test alerts alive until manually resolved
- silences: make affected alerts count larger in matcher badge
- silences: filter cluster labels from matcher suggestions, improve zero-match warning
- silences: show affected alerts panel between badge and matcher rows
- silences: default to all clusters selected, improve cluster chip affordance
- silences: remove redundant 'Click to toggle' hint from cluster section
- silences: expire old silence when Alertmanager returns a new ID
- silences: cluster chips always toggleable, spinner wrap-carry, smaller font
- silences: pass all available clusters to SilenceForm from AlertDetailPanel
Code Refactoring
- silences: revert grouped badge, move affected panel above matchers
Documentation
- update CHANGELOG and README for v1.3.0
- update README for silence form overhaul and AI Prompt feature
Features
- config: add JARVIS_LOG_REQUESTS flag, default off
- frontend: show silence extend buttons for all active silences
- silences: add expire confirmation modal for all silence views
- silences: improve matcher UX with inline affected alert preview
- silences: standardize sheet width and improve silence section layout
v1.2.0 (2026-06-18)
Breaking Changes
No breaking changes.
Documentation
- update CHANGELOG and README for v1.2.0
Features
- helm: add extraEnv, extraVolumes, extraVolumeMounts and projected SA token support
v1.1.0 (2026-06-18)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: fall back to @receiver label when receivers array is empty
- frontend: replace emoji severity labels with CSS colored dots in card grid
- frontend: fix hardcoded dark colors and list view hierarchy in light mode
- frontend: redesign light mode color palette with proper depth chain
- frontend: remove blue card background for claimed alerts and fix expired silence banner color
- frontend: redesign dark mode color palette and theme consistency
- frontend: use theme-aware background for claimed rows in light mode
- frontend: replace 'First seen' with 'Last fired' using alert.startsAt
- frontend: consolidate multiple group silences into single button with count
- release: update release body to include changelog and container image verification
Documentation
- update CHANGELOG and README for v1.1.0
Features
- api: expose build version via GET /api/v1/info
- frontend: add info tooltips to settings panel
- frontend: add setting to disable Claim button snake animation
- frontend: add info tooltip to claim form and refine Claim button appearance
- frontend: animated snake border on unclaimed Claim button
- frontend: make Claim and Silence action buttons more prominent
- frontend: add dynamic link buttons from URL-valued labels/annotations
- frontend: show local timezone abbreviation next to all timestamps
- frontend: show version badge in Settings sheet
- history: track externally created silences and preserve createdBy in events
- screenshots: add feature screenshots Playwright spec and overhaul tooling
v1.0.5 (2026-06-16)
Breaking Changes
No breaking changes.
Bug Fixes
- silences: group silence recreate prefills wrong cluster and matchers
Documentation
- update CHANGELOG and README for v1.0.5
v1.0.4 (2026-06-16)
Breaking Changes
No breaking changes.
Documentation
- update CHANGELOG and README for v1.0.4
Features
- alerts: inline time/silence metadata, extract link rendering to lib, fix severity header contrast
Tests
- alerts: extend fire/resolve scripts with error severity alerts
Reverts
- ci(docker): drop arm64 build — QEMU SIGILL crash on pnpm install
v1.0.3 (2026-06-16)
Breaking Changes
No breaking changes.
Bug Fixes
- alerts: align action buttons with badge row using pr-8
- header: prevent cluster popover from closing on mouse gap
Documentation
- update CHANGELOG and README for v1.0.3
Features
- alerts: relocate link buttons to summary section and fix runbook URL resolution
- alerts: improve detail sheet header and link handling
- alerts: add error severity level between critical and warning
- alerts: inject @receiver into alert labels on fetch
- config: expose RunbookBaseURL via /auth/info endpoint
- header: improve cluster instance popover
Tests
- scripts: extend fire-test-alerts with link, dashboard, and inline URL examples
v1.0.2 (2026-06-16)
Breaking Changes
No breaking changes.
Bug Fixes
- api: return empty JSON arrays instead of null for empty slices
- docker: strip v prefix from chart appVersion to match image tag
Documentation
- release: update CHANGELOG and README for v1.0.2
v1.0.1 (2026-06-15)
Breaking Changes
No breaking changes.
Bug Fixes
- docker: use VERSION (without v-prefix) in release body pull command
Documentation
- improve Getting Started section clarity
- add Getting Started section to README and release notes
- replace dual codecov badges with single combined coverage badge
- release: update CHANGELOG and README for v1.0.1
- release: bump README version as part of release process
Features
- api: serve resolved alerts from DB instead of in-memory buffer
- db: add GetAllResolved for persistent resolved alert history
- frontend: persistent resolved alert history with correct counts
v1.0.0 (2026-06-12)
Breaking Changes
No breaking changes.
Bug Fixes
- update exclusions section in golangci-lint configuration
- alertmanager: correct DELETE silence endpoint from /silences/:id to /silence/:id
- alerts: remove border between common labels and pagination
- api: enable structured request access logging via slog
- api: enforce max length on all free-text input fields
- api: add per-IP rate limiting on mutating endpoints
- api: tighten CSP connect-src to 'self' only
- api: tighten fingerprint regex to match Alertmanager's actual format
- backend: resolve errcheck and noctx violations (golangci-lint v2)
- backend: compile errors and Go 1.25 upgrade
- ci: lower go directive to 1.24 to unblock golangci-lint
- ci: pin Go to 1.25.11 to fix stdlib CVEs GO-2026-5039 and GO-2026-5037
- ci: remove toolchain directive and pin Go 1.25.11 in CI
- ci: pin helm-unittest plugin to v0.8.2, remove --verify=false
- ci: pin all GitHub Actions to commit SHAs via Ratchet
- ci: remove toolchain directive and pin golangci-lint version
- ci: fix failing tests and unused import errors
- ci: add GOPATH/bin to PATH so ratchet is found after go install
- ci: resolve all golangci-lint findings
- ci: add --verify=false to helm-unittest plugin install
- ci: use --ignore-scripts for pnpm + go-version-file
- ci: all 4 backend test failures + pnpm esbuild block + go version
- comments: use user_id for ownership checks; hide delete icon for others
- comments: scope DELETE to fingerprint to prevent cross-alert IDOR
- config: pin Helm v3 in CI Helm job
- deps: promote golang.org/x/time to direct dependency
- dev: fix podman rootless dev environment
- docker: rewrite release body step with printf; use gh cli for release creation; exclude bots from contributors
- docker: add SBOM attestation, provenance, and keyless image signing
- docker: include pnpm-workspace.yaml in Containerfile COPY step
- docker: replace invalid 'attestations' input with 'sbom: true' in release workflow
- docker: extract release notes from CHANGELOG instead of auto-generating
- docs: update Go version badge link in README.md
- docs: update Go version badge format in README.md
- docs: replace sslmode=disable with sslmode=require in production examples
- frontend: resolved list view — remove dimming, actions and claim columns
- frontend: remove unused imports and add vite-env.d.ts
- frontend: fix alert components for light theme
- frontend: remove unused DEFAULT_SETTINGS import in SettingsSheet
- frontend: hide view toggle when state filter is not active
- frontend: rename AlertCircle → CircleAlert for lucide-react 1.x
- frontend: stable sort in resolved view — tie-break by severity then alertname
- frontend: force list view for resolved and suppressed state tabs
- history: delay claim release by 65s to survive grace-period re-fires
- security: update Go toolchain to 1.25.11 to fix stdlib CVEs
- tests: repair 4 failing CI tests
- ui: break infinite loop in alert count sync effect
- ui: remove double scrollbar in Sheet, add consistent scrollbar styling
- ui: hide stale endsAt countdown for resolved alerts in AlertCard
- ui: default state filter to active on bare URL load
- ui: guard byState access with optional chaining
Chores
- switch license from MIT to Apache 2.0
- add CHANGELOG.md and renovate.json
- ignore *.tsbuildinfo build artifacts
- add GitHub issue templates and PR template
- remove initial development plan
- move git permissions to settings.local.json
- config: add Copilot instructions symlink and switch Dependabot to daily
- deps: bump github.com/labstack/echo/v4 in /backend
- deps: bump docker/build-push-action from 6 to 7
- deps: bump golang.org/x/crypto from 0.50.0 to 0.53.0 in /backend (#16)
- deps: bump sigstore/cosign-installer from 3.9.1 to 4.1.2 (#20)
- deps: replace Renovate with Dependabot
- deps: bump actions/setup-go from 5.6.0 to 6.4.0 (#19)
- deps: update GitHub Actions and Go dependencies
- deps: bump docker/setup-qemu-action from 3.7.0 to 4.1.0 (#17)
- deps: bump codecov/codecov-action from 4.6.0 to 7.0.0 (#18)
- deps: bump github/codeql-action from 3.36.2 to 4.36.2 (#15)
- deps: bump modernc.org/sqlite from 1.34.5 to 1.52.0 in /backend
- deps: bump softprops/action-gh-release from 2 to 3
- deps: bump lucide-react from 0.511.0 to 1.17.0 in /frontend
- deps: bump dorny/test-reporter from 1 to 3
- deps: bump docker/setup-buildx-action from 3 to 4
- deps: bump the minor-patch group in /frontend with 2 updates
- deps-dev: bump @types/node from 22.19.19 to 25.9.2 in /frontend
- deps-dev: bump jsdom from 26.1.0 to 29.1.1 in /frontend
- deps-dev: bump @vitejs/plugin-react in /frontend
- deps-dev: bump vite from 6.4.3 to 8.0.16 in /frontend (#23)
- deps-dev: bump @types/node in /frontend in the minor-patch group (#22)
- deps-dev: bump typescript from 5.9.3 to 6.0.3 in /frontend (#25)
- dev: consolidate test dependencies into single compose file
- docs: expand development workflow in CLAUDE.md and add command frontmatter
- github: improve open source project hygiene
- make: rename targets and add screenshots target
Code Refactoring
- alerts: move filters and alert count to header store
- history: replace episode model with immutable append-only audit log
- ui: extract labelColorStyle to LabelChip and deduplicate claim invalidation
- ui: improve column distribution logic in AlertCardGrid
- ui: remove redundant Alerts nav button, simplify Header
- ui: extract LabelChip and silence helpers to shared modules
Documentation
- document PostgreSQL support, resolved pagination, and update screenshots
- update CHANGELOG for v1.0.0
- add claude code skills and mark plan as completed
- update CHANGELOG for v1.0.0
- update CLAUDE.md with release workflow and Dependabot; add tmp/ to .gitignore
- add authentication reference and update project docs
- expand README with feature documentation and screenshots
- refresh screenshots and update README
- auth: add UI screenshots to authentication docs
- frontend: document search and theme; rename silence comment label to reason
- helm: add Traefik WebSocket ingress example alongside nginx
- readme: add prominent no-auth warning and deployment security section
- readme: remove authentication warning and emphasize security measures
- readme: add authentication to Why Jarvis feature list
Features
- initial Jarvis implementation
- alerts: unique per-label colors via HSL hash
- alerts: redesign AlertCard with grouped entries, label chips, and pagination
- alerts: compact masonry layout with greedy bin-packing
- alerts: show common group labels in card header
- alerts: make claimed alerts visually prominent
- alerts: replace nested entry cards with divide-y row layout
- alerts: move pagination above entries, remove hint text
- api: enforce authentication on write endpoints
- api: wire auth provider into server, router, and config
- auth: add JARVIS_AUTH_MODE for configurable protection level
- auth: add authentication infrastructure
- backend: immediate poll trigger and silence event audit log
- db: add users table migration
- db: add PostgreSQL support via DSN-based dialect detection
- dev: add test Alertmanager for local development
- docker: add container image and cosign verify block to GitHub Release body
- frontend: SilenceForm redesign, silence history tab, AlertDetailPanel overhaul
- frontend: make header responsive with mobile hamburger menu
- frontend: add dark/light theme toggle
- frontend: integrate auth into alert UI components
- frontend: add user settings panel and flat resolved view
- frontend: add auth store, login/setup UI, and admin panel
- frontend: add summary/description section to alert detail panel
- frontend: paginated resolved view with configurable page size
- header: redesign header UX with inline filter editing and live poll indicator
- helm: add Helm chart and OCI publish workflow
- helm: add auth configuration to Helm chart
- history: preserve resolved alerts in-memory for 20-minute window
- history: seed resolved alerts on startup and expose lastResolvedAt
- ui: move view toggle next to state nav, show per-state counts in pills
- ui: improve silence form label autocomplete and affected badge
- ui: rewrite AlertListView with severity sections and expandable groups
- ui: add inline claim/release and silence controls to AlertListRow
- ui: add AI prompt section and paginated history in AlertDetailPanel
- ui: replace Silences nav with inline Silence button, default active filter
Security
- add gitleaks secret scanning
Tests
- backend: add test coverage for api, cluster, and history packages
- frontend: add comprehensive unit tests for components, hooks, store, and utils
- helm: add helm-unittest suite and integrate into Makefile, pre-commit, CI
- history: add lifecycle integration tests for immutable audit log
