# Auto-generated by scripts/generate_changelog.py
# Do not edit manually.
ENTRIES: list[tuple[str, str]] = [
    ("0.3.0", "release: v0.3.0"),
    ("0.3.1", "feat: Add Python wheel build to release workflow; fix: Use hub+peers topology for K8s mesh convergence tests; feat: Integrate GHCR ImagePullSecret with Vault Secrets Operator; fix: Use separate kubectl label command for namespace labels"),
    ("0.3.2", "fix: Add packages:write permission to release workflow"),
    ("0.3.3", "fix: Remove VERSION file that overrides pyproject.toml"),
    ("0.3.4", "refactor: Separate integration tests from release workflow"),
    ("0.3.5", "docs: Update test device registry with t100ta; docs: Add Linux test device deployment guide and scripts; docs: Add release process documentation"),
    ("0.3.6", "fix: Handle LocalInterface reconnection without destination spam (#4); docs: Add hardware compatibility matrix and validation criteria; docs: Remove GitHub Actions from bare-metal test design; docs: Add bare-metal test infrastructure design"),
    ("0.4.0", "fix: Address LOW severity issues from adversarial review; fix: Add comprehensive input validation to IPC handlers; fix: Add input validation and shutdown safety to IPC handlers; fix: Address critical bugs from adversarial review; fix: Address issues from adversarial review; docs: Add TODO noting upstream LXMF process_deferred_stamps issue; fix: Normalize truncated destination hashes in chat messages; fix: Cross-node messaging identity resolution and NodeStore persistence; feat: Add ConversationService for LXMF chat backend (Phase 1)"),
    ("0.9.0", "fix: harden public mode read surface, fix IPC test serialization; feat: hub profile with API public mode and settings panel; feat: LXMF auto-reply as first-class OOO feature with chat-integrated toggle; chore: migrate to hatchling, fix version drift, add PyPI publishing; feat(web): add full web UI with Vite frontend and expanded REST API; feat: short-name identity system and IPC dialogue test harness; fix: send command waits for delivery confirmation and uses path-based resolution; feat: IPC relay sidecar and mesh topology test infrastructure; feat: add Prometheus metrics endpoint for styrened; feat: interactive chat infrastructure and YubiKey hardware identity (#8); feat: web UI module with FastAPI, SSE device events, and static frontend; feat: version tracking for overnight test run summaries; feat: fix overnight test gaps with dynamic stamping, retries, and 3-node expansion; feat: YAML-driven dialogue testing framework with overnight runner; feat: conversations and messages CLI subcommands; fix: increase IPC payload limit to 4MB for large device stores; feat: path table snapshot service for topology edge data; ci: validate Argo Workflows pipeline (#7); feat: integrate K8s observability stack into test infrastructure; chore: remove GitHub Actions workflows (migrating to Argo CD); feat: OS-lifecycle identity resolution with /etc/styrene/identity support; feat: replace Dockerfile pipeline with nix2container OCI builds; feat: overhaul bare-metal test harness with fleet-wide coverage"),
    ("0.9.1", "fix(nix): handle inline-snapshot runtime deps check; ci: disable test suites for slow transitive Nix deps; fix(ci): replace heredoc with echo for nix.conf in YAML; ci: unleash Nix builds — 16 CPU, 32Gi RAM, parallel jobs; ci: bump Nix OCI build memory limit to 8Gi; docs: correct PyPI Vault path in RELEASE-PROCESS.md; ci: parallelize release pipeline, add Cachix to all Nix builds"),
    ("0.10.2", "feat(tui): daemon setup screen, device detail NodeStore fallback, service installer; feat(tui): modernize TUI to align with web UI, add system info and RPC offline support; fix(ci): add skopeo trust policy for OCI tag operations"),
    ("0.10.3", "feat(tui): extract ChatWidget, refactor conversation/dashboard screens; feat(tui): single-theme StyreneDark with complete tweakcn token set; feat(tui): add StyreneDark brand theme as default"),
    ("0.10.4", "feat(tui): NomadNet page browser, micron parser, exploration improvements; feat(tui): LXMF chat expansion - events, bubbles, retry, delete, search, replies"),
    ("0.10.6", "fix(ipc): add self-update IPC plumbing for TUI bridge; docs: update test guidance and install instructions; test: add self-update tests, fast clock fixture, conftest cleanup; feat(tui): device detail improvements and command widget refactor; feat(rpc): add SELF_UPDATE command for remote package upgrades; chore: remove edge-build workflow; feat(ci): add ntfy notifications to nightly and release workflows; feat(tui): wire forge pipeline into ProvisionScreen; fix: revert SelfUpdateResult export (not yet in rpc.messages); fix: export SelfUpdateResult from rpc package; feat(docs): add pdoc API docs with Imperial CRT theme; feat(tui): terminal tab, page server, doctor, CLI enhancements (v0.10.5); feat: add structured conversation logging for VictoriaLogs; fix: styrene device type rename and NomadNet announce detection"),
    ("0.10.8", "fix(build): remove redundant force-include causing duplicate ZIP entry; fix(rpc): redact sensitive command names from activity feed events; test: fix stale imports, add missing helpers, and update mocks for new APIs; fix(tui): resolve Textual 8.0 compat, venv binary discovery, and widget defensiveness; feat(web): add RNS identity-based API authentication middleware; feat(terminal): add terminal client, message types, and service for remote shell access; feat(daemon): integrate attachment storage, PQC sessions, conversation service, and activity feed; feat(tui): update screens for activity feed, identity settings, and layout; feat(tui): add attachment support, PQC tier display, and link navigation; feat(tui): add identity config overlay and IPC bridge methods; feat(tui): add activity feed and image preview widgets; feat(cli): add api-auth subcommand for managing authorized identities; feat(web): add RNS identity-based API authentication; feat(daemon): integrate attachment storage, PQC sessions, and activity feed; feat(file-transfer): add RNS.Resource file transfer service; feat(pqc): add hybrid PQC session service; feat(ipc): add attachment, identity, PQC status, and activity subscription; feat(notifications): route events to targeted types and unified activity feed; feat(lxmf): support plain-string message payloads for ecosystem interop; feat(attachments): add filesystem attachment store and message persistence; feat(config): add WebAuthConfig, PQCConfig, and identity validation; feat(crypto): add hybrid PQC cryptographic primitives; feat(models): add PQC wire protocol types and session data models; fix(chatbot): skip cooldown in chatbot mode so every message gets a reply; fix(chatbot): improve default system prompt for conversational quality; fix(tui): correct micron heading inline formatting, section reset, and literal styling; fix(ci): add ntfy auth token to workflow notifications"),
    ("0.10.9", "fix: add Styrene Community Hub as default TCP interface for new installs"),
    ("0.10.10", "chore: sync VERSION file with 0.10.9 release; fix(test): update hub profile test for default community hub peer"),
    ("0.10.11", ""),
    ("0.10.12", "fix: force truecolor rendering to prevent ANSI palette fallback"),
    ("0.10.13", "feat: check for updates on TUI launch"),
    ("0.10.14", "feat: daemon restart from TUI"),
    ("0.10.15", "feat: reset to defaults from Settings"),
    ("0.10.16", "fix: DaemonManager.restart() calls ensure_running() not start()"),
    ("0.10.17", "feat: styrene --reset for clean config regeneration"),
    ("0.10.18", "fix: register theme BEFORE Textual builds stylesheet"),
    ("0.10.19", "feat: immediate announce on startup + eager discovery + manual announce keybinding"),
    ("0.10.20", "fix: announce keybinding uses correct IPC bridge path"),
    ("0.10.21", "feat: LXMF-based Styrene node discovery + reconnection fix"),
    ("0.10.22", "fix: deduplicate mesh devices by identity, auto-purge stale ghosts"),
    ("0.10.23", "fix: apply identity dedup to dashboard mesh device table"),
    ("0.10.24", "feat: interactive NomadNet page forms — clickable fields + form submission"),
    ("0.10.25", "fix: status tab shows announce data when RPC unavailable"),
    ("0.10.26", "fix: re-enter eager discovery after network reconnection"),
    ("0.10.27", "feat: add --upgrade flag for self-update"),
    ("0.10.28", "feat: clickable upgrade modal in TUI"),
    ("0.10.29", "fix: page browser recovers after network switch"),
    ("0.10.30", "feat: add daemon restart without config/identity reset"),
    ("0.10.31", "fix: add missing os import in TUI entry point"),
    ("0.10.32", "feat: add action buttons to mesh device detail header"),
    ("0.10.33", "feat: check for updates on dashboard refresh"),
    ("0.10.34", "fix: UpgradeScreen call_from_thread on App not Screen"),
    ("0.10.35", "fix: dashboard layout proportions and CSS ID mismatches; chore: add release script for synchronized dual-package publishing"),
    ("0.10.36", "fix: force truecolor env vars instead of setdefault"),
    ("0.10.37", "fix: force dark mode — prevent light mode palette mismatch"),
    ("0.10.38", "fix: adversarial review — race conditions, pkill safety, theme init, tests"),
    ("0.10.39", "feat: tabbed settings screen — Identity, Network, Fleet, System tabs"),
    ("0.10.40", "feat(tui): replace hub selector with Reticulum interface manager (#10)"),
    ("0.10.41", "fix(tui): peer row port field truncated in Network settings"),
    ("0.10.42", "fix(tui): settings description text illegible due to low contrast"),
    ("0.10.43", "fix(tui): peer name truncated and add column headers to peer list"),
    ("0.10.44", "fix(tui): upgrade modal black artifact and restart TUI via execvp"),
    ("0.10.45", "fix: upgrade command not pulling latest styrened from PyPI"),
    ("0.10.46", "feat(tui): add [ ] keyboard shortcuts for settings tab navigation"),
    ("0.10.47", "fix(tui): new peer rows mounted inside button container instead of panel"),
    ("0.10.48", "fix: --pip-args requires single string argument not separate args"),
    ("0.10.49", "fix: TUI first-run config used internal LAN IP instead of rns.styrene.io"),
    ("0.10.50", "refactor(tui): settings layout overhaul — right-sized controls"),
    ("0.10.51", "fix(tui): black scrollbar bars on upgrade modal Log widget"),
    ("0.10.52", "feat(tui): replace Checkbox with Switch toggles, add peer status indicators"),
    ("0.10.53", "fix(tui): eliminate black bar in upgrade modal permanently"),
    ("0.10.54", "fix(tui): comprehensive scrollbar and color cascade audit"),
    ("0.10.55", "fix(tui): restore Switch toggle track visibility"),
    ("0.10.56", "fix(tui): add missing sys import for restart atexit handler"),
    ("0.10.57", "fix(tui): Switch toggle comically tall from border:tall; feat: add just publish recipe for immediate PyPI upload"),
    ("0.10.58", "fix(tui): Switch off-state handle indistinguishable from track"),
    ("0.10.59", "feat(tui): group mesh devices by receiving interface in tree view"),
    ("0.10.60", "fix(tui): tree device labels truncated — drop identity hash, compact format"),
    ("0.10.61", "feat(tui): two-column NODE INFO panel with version display"),
    ("0.10.62", "fix(tui): dashboard panel proportions — 2fr mesh, 1fr activity"),
    ("0.10.63", "fix(tui): tree refresh not updating display after clear+rebuild"),
    ("0.10.64", "fix(tui): HighlightedPanel missing bottom border + black gaps"),
    ("0.10.65", "fix(tui): tree refresh stale — clear line cache and force layout"),
    ("0.10.66", "fix(tui): hp-content height:1fr broke auto-height panels (upgrade modal)"),
    ("0.10.67", "fix(tui): identity always loads from config + refresh debug notifications"),
    ("0.10.68", "fix(tui): identity save always writes core config, not just IPC"),
    ("0.10.69", "fix(tui): TUI announce used hostname instead of identity config"),
    ("0.10.70", "fix: make identity loading provider-aware (YubiKey support)"),
    ("0.10.71", "fix(tui): upgrade modal panel not containing its content"),
    ("0.10.72", "fix(tui): 'r' refresh binding not reaching Screen — set priority=True"),
    ("0.10.73", "feat: well-known RNS hubs with per-peer enabled toggle"),
    ("0.10.74", "fix(tui): upgrade modal — drop HighlightedPanel, use plain bordered Vertical"),
    ("0.10.75", "fix: merge missing well-known hubs into existing installs"),
    ("0.10.76", "fix: merge well-known hubs into existing installs + fix round-trip tests"),
    ("0.10.77", "fix: notify styrene-pypi on publish via repository_dispatch; feat: community hub as default LXMF propagation node; Network tab COMMUNITY HUB + PROPAGATION panels"),
    ("0.10.78", "fix(tui): identity save clobbered by subsequent network config write; fix: twine upload --skip-existing so dispatch always fires"),
    ("0.10.79", "feat(tui): double ctrl+c to quit, single ctrl+c pops to dashboard"),
    ("0.10.80", "fix(tui): rewrite dashboard/chat tests for MeshDeviceTree, fix config overlay and node info panel"),
    ("0.10.81", "fix(tui): identity migration from legacy config.yaml to core-config.yaml"),
    ("0.11.0", "fix: lint cleanup and test db fixture bug"),
    ("0.11.1", "fix(tui): stabilize chat input bar height and add visual structure"),
    ("0.11.2", "fix(tui): remove Input widget default border in chat input bar"),
    ("0.11.3", "fix(tui): render failed messages in red with bold ✗ icon"),
    ("0.11.4", "feat(tui): enrich contacts screen with presence and last message"),
    ("0.11.5", "feat(tui): add macOS menu bar agent for inbox notifications"),
    ("0.11.6", "feat(tui): clipboard-native attachment system for chat"),
    ("0.11.7", "fix(tui): use Ctrl+O priority binding for clipboard attachment"),
    ("0.11.8", "fix(tui): add ctrl+p as primary clipboard-attach binding"),
    ("0.11.9", "fix(tui): change clipboard-attach binding to ctrl+y"),
    ("0.11.10", "fix(tui): read clipboard on main thread for PyObjC compatibility"),
    ("0.11.11", "debug(tui): add notify() tracing to clipboard attach action"),
    ("0.11.12", "fix(tui): allow sending attachment with empty message text"),
    ("0.11.13", "fix(tui,ipc): allow sending attachment-only messages without text"),
    ("0.12.0", "feat(tui): enrich Node Info panel with COMMS and TRAFFIC sections"),
    ("0.12.1", "feat(tui): add HOPS and VIA columns to Exploration table"),
    ("0.12.2", "fix(tui): incremental chat refresh and date separators"),
    ("0.13.0", "feat(tui): redesign chat conversation UX"),
    ("0.13.1", "fix: TUI audit rework — threading, races, persistence, query perf"),
    ("0.13.2", "fix: VIA column now shows interface + next-hop transport hash"),
    ("0.13.3", "feat: add Styrene fleet tab to Exploration screen"),
    ("0.13.4", "fix: prevent stacking Settings screen on repeated backtick press"),
    ("0.13.5", "fix: prevent all navigable screens from stacking on repeated keypress"),
    ("0.13.6", "fix: chat retry system rework — discoverable, functional, robust"),
    ("0.13.7", "fix: identity resolution Strategy 5 — path request + wait on cache miss"),
    ("0.13.8", "feat: changelog view in upgrade screen"),
    ("0.13.9", "feat: Pages tab on all device detail screens"),
    ("0.13.10", "fix: Pages tab only for NomadNet-capable devices"),
    ("0.13.11", "feat: auto-generated NomadNet node page + settings UI"),
    ("0.13.12", "fix: node page links — docs.styrene.io, recommend pipx"),
    ("0.13.13", "fix: upgrade changelog shows actual commit messages"),
    ("0.13.14", "feat: NomadNet destination in Styrene announce wire format"),
    ("0.13.15", "fix: upgrade changelog fetches target version's bundled entries from PyPI"),
    ("0.13.16", "fix: detect NomadNet identity for announce even without page_server"),
    ("0.13.17", "fix: micron renderer visual quality — colored headings, links, dividers"),
    ("0.13.18", "fix: auto-restart TUI after successful upgrade — no manual button"),
    ("0.13.19", "fix: add diagnostic logging to page browser link establishment"),
    ("0.13.20", "fix: debounce TCP reconnection storm + preserve active page browser links"),
    ("0.13.21", "fix: restart daemon after upgrade before re-execing TUI"),
    ("0.13.22", "fix: TUI auto-starts daemon on mount before showing setup screen"),
    ("0.13.23", "feat: NomadNet page caching system"),
    ("0.13.24", "fix: page cache assessment fixes"),
    ("0.13.25", "feat: direct data link service + status tab redesign"),
    ("0.13.26", "feat: datalink speedtest + LoRa-hardened timeouts"),
    ("0.13.27", "feat: exploration screen status filtering — hide lost/stale, dim inactive"),
    ("0.13.28", "perf: device detail screen — eliminate load hiccup"),
    ("0.13.29", "fix: critical IPC collision + audit fixes"),
    ("0.13.30", "feat: mesh VPN service + fix TUI announce spacing and column alignment"),
    ("0.13.31", "fix: TUI NodeInfoPanel Rich Table layout, HighlightedPanel border rendering"),
    ("0.13.32", "fix: screen stack deduplication, r-key triggers update check"),
    ("0.13.33", "feat(vpn): migrate VPN handshake from DirectLink to LXMF protocol"),
    ("0.13.34", "fix(tui): _dest_hash property displaced _load_device from __init__"),
    ("0.13.35", "fix(direct-link): establish() handles identity hash and has timeout"),
    ("0.13.36", "fix(direct-link): announce datalink destination for path discovery"),
    ("0.13.37", "chore: clean up for public repo"),
    ("0.13.38", "fix(chat): remove optimistic bubbles before appending real messages"),
    ("0.13.39", "feat(blocklist): block/unblock peers — silently drop all messages"),
    ("0.13.40", "feat(moderation): hub-side ban via config.banned_peers"),
    ("0.13.41", "fix(tui): Block binding on ConversationScreen (works from any focus)"),
]
