Skip to content

Releases: xt0n1-t3ch/Pulse-Analytics

Pulse v1.9.6

Choose a tag to compare

@github-actions github-actions released this 29 Sep 07:45
Immutable release. Only release title and notes can be modified.
1f4ae41

Orion App provider and Claude Sonnet 5.5 release. The database remains schema 7, Claude config schema 6 and Codex presence config schema 13 are unchanged, and the immutable shared core stays at 2.0.1. Orion App settings live in the new pulse-orion.json; no existing file changes format. Rollback to 1.9.5 needs only its package: Orion sessions already saved stay in the database and 1.9.5 does not show them. GitHub macOS packages have no Apple Developer ID signature or notarization.

Added

  • Add Orion App as a fifth provider. Pulse reads Orion's local session store (~/.orion/cli/db/db.sqlite) read-only, rolls subagent sessions into their parent, and shows model, reasoning level, live tool activity, tokens, context fill and subagent count. Orion records no billed amount, so Pulse prices every request from its exact token counts at the published per-model rate and shows the same cost detail as Claude Code: a Session cost headline, input, output, cache write and cache read costs, value per hour and measured output speed. The cost is partial when a model in the session has no known rate and unavailable when none has one. Session history, the Costs view, forecasts, reports and the Discord cost field use the same per-category costs. Orion App publishes to Discord under its own application and artwork. When idle it shows "Idling..." with a timer counting idle time since the last Orion activity (the Pulse preview reads "Idling for 12m"). Live cards and Discord count only subagents that are still working, so finished subagents never linger; history keeps the total started. Reasoning levels display as Low, Medium, High, Extra High and Max; Orion's default level is not shown as a level. No database schema change.
  • Support Claude Sonnet 5.5 (claude-sonnet-5-5, released 2026-09-28). Pulse prices it at the official $2 input, $10 output, $2.50 cache write and $0.20 cache read per million tokens, treats its 1M context as standard-priced, labels it "Claude Sonnet 5.5 (1M)" and "Sonnet 5.5" on Discord, and never applies Fast-mode rates to it. Dated and [1m] ids resolve to the same model; claude-sonnet-5-5 no longer falls into the Sonnet 5 rules.

Changed

  • Claude Opus 5.5 and Claude Sonnet 5.5 no longer show the inflated-tokenizer marker. The marker stays on Sonnet 5 and Opus 4.7/4.8.
  • Label every calculated session cost (Claude, Codex and Orion App) as "Session cost" with the note "Calculated from token counts at public API rates. Not a provider invoice." Provider-reported totals keep "Reported value".

Fixed

  • Read the Orion App project name from Windows paths on Linux and macOS as well. The Linux release preflight failed on this.

Documentation

  • Rewrite llms.txt to the llms.txt v2 format with absolute links, key facts and an Optional section. Describe all five providers in the README, package descriptions and installer text, and add a 1280×640 social preview image at assets/social-preview.png.

Pulse v1.9.5

Choose a tag to compare

@github-actions github-actions released this 23 Sep 01:30
Immutable release. Only release title and notes can be modified.
ac12edc

Claude plan, pricing and data-integrity release. The database remains schema 7, Claude config schema 6 and Codex presence config schema 13 are unchanged, and the immutable shared core stays at 2.0.1. Rollback to 1.9.4 needs only its package; if you applied the Claude history correction, restore its pre-history-repair backup to return to the earlier totals. Session checkpoints move to PULSE_HOME, so the first poll after the upgrade re-reads active Claude transcripts once. GitHub macOS packages have no Apple Developer ID signature or notarization.

Added

  • Correct saved Claude history on request. Settings > Claude history correction re-reads transcripts, shows how many sessions would change with token and cost totals before and after, and applies the correction only after confirmation. It writes a verified VACUUM INTO backup first and updates the sessions in one transaction. Sessions without a transcript stay unchanged, and statusline-priced sessions keep their cost.

Fixed

  • Show the current Claude plan after an upgrade or downgrade. Claude Code keeps the login-time rateLimitTier in .credentials.json but refreshes oauthAccount in .claude.json, so Pulse kept showing Max 5x after an upgrade to Max 20x. Pulse now prefers the account profile's recognized tier (userRateLimitTier, then organizationRateLimitTier) and falls back to the credentials file.
  • Bill Claude Sonnet 5 at its permanent $2/$10 rates ($2.50 cache writes, $0.20 cache reads). Anthropic cancelled the scheduled September 1, 2026 increase, but Pulse switched to $3/$15 after that date. The "Intro Pricing" badge is removed.
  • Bill Claude Fable/Mythos 5.1 cache reads at $0.25 per million. Pulse used version 5's $1 rate for every Fable/Mythos version.
  • Point the Discord button, updater fallback links, install scripts, crate metadata and documentation at the repository's current name, xt0n1-t3ch/Pulse-Analytics. The updater still accepts release links under the former name.
  • Store Claude session checkpoints under PULSE_HOME/claude/session-checkpoints/ instead of inside Claude's own ~/.claude folder. File names use a stable hash, so a Rust toolchain update no longer orphans them. At startup, Pulse removes checkpoints from another version, checkpoints for deleted transcripts and the old folder in ~/.claude.
  • Ignore the Claude usage cache when it belongs to another account. The cache now stores a hash of the account and organization IDs, never a token, so switching accounts no longer shows the previous account's limits for up to five minutes. The cache is written atomically because the daemon and the app can both update it.
  • Show the saved startup snapshot only when the same Pulse version wrote it within the last 24 hours. After an upgrade, the first screen no longer shows costs and plans computed by the previous version.

Documentation

  • Record six-platform 1.9.3 and 1.9.4 publication and the installed Windows x64 upgrade evidence, including the Opus 5.5 cost recomputation.

Pulse v1.9.4

Choose a tag to compare

@github-actions github-actions released this 22 Sep 19:00
Immutable release. Only release title and notes can be modified.
178e37d

Claude token and cost accuracy fix. The database remains schema 7, Claude config schema 6 and Codex presence config schema 13 are unchanged, and the immutable shared core stays at 2.0.1. Rollback to 1.9.3 needs only its package. Session checkpoints from earlier builds are ignored, so the first poll after an upgrade re-reads active Claude transcripts once. Rows already stored in analytics history are rewritten only when Pulse re-reads a session that is still active. GitHub macOS packages have no Apple Developer ID signature or notarization.

Fixed

  • Count each Claude API response once. Claude Code writes one JSONL line per content block, and every line repeats the response's usage. Pulse added every line, which overstated tokens and costs, often by two to three times. Pulse now keys usage by message.id and keeps the latest value, because output_tokens can grow while a response streams.
  • Discard Claude session checkpoints written by another Pulse build. Before this fix, a session that started before an upgrade kept the costs the older build had accumulated, so new model rates applied only to later turns.

Pulse v1.9.3

Choose a tag to compare

@github-actions github-actions released this 22 Sep 18:08
Immutable release. Only release title and notes can be modified.
3e7d315

Claude Opus 5.5 release. The database remains schema 7, Claude config schema 6 and Codex presence config schema 13 are unchanged, and the immutable shared core stays at 2.0.1. Rollback to 1.9.2 needs only its package; historical session costs already stored are not repriced. GitHub macOS packages have no Apple Developer ID signature or notarization.

Added

  • Claude Opus 5.5 (claude-opus-5-5) support: official $4/$20 per million input/output, $5 5-minute cache writes and $0.20 cache reads (0.05x input), 1M GA context without a long-context surcharge, Fast mode at $8/$40, display names, Rich Presence labels, model routing and reports. Rates verified September 22, 2026 against Anthropic's pricing page.

Fixed

  • claude-opus-5-5 no longer falls through to Opus 5's $5/$25 rates, which overstated Opus 5.5 estimates by 25% and cache reads by 150%. Opus 5 classification now requires exactly version 5.0.

Documentation

  • Add Opus 5.5 to the Claude model guide, price table, Fast list and implementation-gap table.
  • Record six-platform 1.9.2 publication, downloaded-asset verification and installed Windows upgrade evidence, with remaining host-specific acceptance gaps.

Pulse v1.9.2

Choose a tag to compare

@github-actions github-actions released this 20 Sep 16:58
Immutable release. Only release title and notes can be modified.

Patch correction for Command Code Rich Presence. The database remains schema 7, provider configuration is unchanged, and the immutable shared core stays at 2.0.1. Rollback to 1.9.1 needs only its package; rollback to 1.8.2 still requires the pre-schema-7 database backup. GitHub macOS packages have no Apple Developer ID signature or notarization.

Fixed

  • Keep Command Code visible on Discord while idle when it is the selected broadcaster and Rich Presence is enabled. Use the same application and artwork for CLI and Desktop. Clear presence when disabled or when another broadcaster is selected.
  • Exclude historical session fields and session elapsed time from idle activity. Active sessions still publish their current data with existing privacy controls.
  • Show Command Code's own idle label instead of "OpenCode is idle". Distinguish a published idle activity from a disconnected Discord client and remove the misleading publisher-ownership copy.

Tests

  • Cover idle, stale/completed sessions, disabled publication, provider labels and disconnected states. Verify the production idle publisher with real Discord acknowledgement and native UI toggle-off/toggle-on checks.

Pulse v1.9.1

Choose a tag to compare

@github-actions github-actions released this 20 Sep 16:05
Immutable release. Only release title and notes can be modified.

Pulse 1.9.1 delivers the compatible 1.9 feature line: it adds Accounts, the Command Code provider and Codex cost coverage without removing existing behavior. The analytics database migrates additively to schema 7. Claude config schema 6 and Codex presence config schema 13 are unchanged. The shared codex-presence-core pin moves to 2.0.1 at 0caece60a71eb657d7b829e3b6c7c4896a0a536c (canonical v1.11.2), which publishes per-event Codex cost accumulation and the reserved compositor cost space.

Rollback: Pulse 1.8.2 cannot open a schema 7 database. Reinstall the published 1.8.2 package and restore the database backup taken before the schema 7 migration. Account removal writes a tombstone; it does not sign out a provider agent and does not delete transcripts. GitHub macOS packages carry no Apple Developer ID signature or notarization.

Added

  • Add Accounts with independent provider connections, native allowances, credits, banked resets, per-account refresh state and protected profiles. Removing a link leaves agent logins and session history intact.
  • Add one Command Code CLI/Desktop adapter across analytics, reports, Accounts and Discord, with official artwork and a shared identity.

Fixed

  • Accept canonical Pulse-Analytics release links after the GitHub repository rename, while retaining legacy links and rejecting unrelated repositories. Update the updater endpoint to the canonical repository.
  • Preserve Codex known session-cost subtotals, cache-write telemetry and per-event model/speed pricing. Keep coverage and provenance in Pulse while showing currency-only amounts in Discord.
  • Reserve enabled monetary values when long model labels fill Discord's line budget.
  • Preserve native calendar-month usage and distinguish inactive OpenCode Go access from authenticated allowances.

Security

  • Update rustls to 0.23.45 and rustls-webpki to 0.103.15 for RUSTSEC-2026-0285, which affects TLS 1.3 handshake validation.

Changed

  • Upgrade Vitest and coverage to 5.0.0, align the Node.js/Vite baseline, and synchronize npm and Bun resolution. This changes contributor tooling, not the application runtime or data schema.
  • Link the current downloads for all six targets and record publication, checksum, signature and native-runtime acceptance boundaries.
  • Remove superseded release-preparation instructions and document the promoted core and schema-7 rollback boundary.
  • Promote the shared codex-presence-core pin to 2.0.1 from the immutable upstream v1.11.2 release, replacing the 2.0.0 pin at canonical v1.10.3.

Pulse v1.8.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 10:29
Immutable release. Only release title and notes can be modified.
efd3ade

Patch release with no configuration or database schema change. Native cross-platform packages require the complete build, checksum and updater-signature gate. macOS DMGs and app archives are distributed through GitHub without Apple Developer ID signing or notarization; macOS may block first launch. This is not an App Store release. Known model-rate discrepancies remain documented; this release does not change runtime pricing.

Fixed

  • Pass the macOS executable before the architecture list to lipo, so successful DMG builds pass the native package check.

  • Repair UTF-8 documentation text, include OpenCode in package and repository discovery metadata, and clarify local analytics, costs and network access.

  • Use Node 24 artifact actions and the repository retention policy without deprecated-runtime or retention-limit warnings.

  • Use host-native fixture paths in the OpenChamber process identity test so Linux and macOS execute the same assertions as Windows. Runtime process detection is unchanged.

  • Resolve OpenCode provider and allowance icons from the tracked versioned artwork, so clean checkouts do not depend on an ignored local image.

Security

  • Patch the brace-expansion and nanoid transitive dependencies reported by npm audit.

Changed

  • Store Pulse data under ~/.pulse-analytics with PULSE_HOME, independently of provider source roots. Copy legacy settings and consistent SQLite history without overwriting destination files or deleting originals; retain provider credentials and transcripts in place.

  • Use English throughout maintained OpenCode documentation and clarify that prompts, transcripts and analytics telemetry are not uploaded.

  • Consolidate current Claude and Codex model references, replace obsolete launch notes, organize documentation by purpose, and relocate accepted visual evidence out of the repository root.

  • Remove machine-local agent residue and handoffs from the checkout while preserving recoverable copies and existing source/build contracts.

  • Reorganize documentation into task-based guides, remove duplicated historical notes, and distinguish current Astra/GPT-5.6 API limits and prices from observed Codex capacity and bundled catalog gaps.

  • Require native checks for all six desktop release targets, reuse one frontend artifact and make cross-platform verification the default manual workflow mode.

  • Verify native macOS package architecture and publish GitHub DMG/app archives without Apple signing or notarization. Keep updater signatures mandatory and prevent Windows-only recovery releases from becoming latest.

  • Restore the Pulse banner, move the current capture into Preview and document Claude, Codex and OpenCode separately with explicit platform availability.

  • Restore a banner-led README with current Pulse imagery, release-backed badges, stable navigation, existing monochrome section icons and expandable usage guides.

  • Update Svelte to 5.56.10, Testing Library user-event to 14.6.7 and the Tauri filesystem JavaScript plugin to 2.5.2 (#113, #114, #115).

  • Update Tauri single-instance to 2.4.4, shell to 2.3.6, dialog to 2.7.3 and its filesystem dependency to 2.5.2 (#116, #117, #118).

Pulse v1.8.1

Choose a tag to compare

@xt0n1-t3ch xt0n1-t3ch released this 05 Sep 05:05
Immutable release. Only release title and notes can be modified.
65e7af5

Pulse 1.8.1 includes the OpenCode and GPT-6 Astra integration, interface updates and Windows Efficiency mode introduced in 1.8.0. This patch also corrects non-Windows compilation. The highlights below describe the complete 1.8 update, not additional changes made after the 1.8.1 build.

Fixed

  • Make Windows Efficiency mode initialization an explicit no-op on other operating systems, so warning-denying Linux builds pass without suppressing lints. Windows EcoQoS behavior is unchanged.

Included from 1.8.0

GPT-6 Astra support

  • Recognize gpt-6-astra as GPT-6 Astra in session analytics and Discord presence through the shared model catalog.
  • Preserve observed reasoning effort, including ultra, without presenting harness-specific labels as API settings.
  • Track context limits and Standard/Fast pricing. Keep incomplete monetary coverage visible instead of claiming an exact bill.
  • Keep subscription credits separate from token-based cost estimates. Unknown credit conversion remains unavailable.

Native OpenCode integration

  • Read local OpenCode SQLite history without an agent plugin, including supported message-table schemas and configured database paths.
  • Preserve model providers, original model IDs and mixed-model contributions. Recorded zero cost remains distinct from missing cost.
  • Read OpenCode Go five-hour, weekly and monthly account windows from its authenticated usage API. Do not estimate quotas from session tokens.
  • Remove completed sessions from live focus and Discord presence while preserving their history. With no recent session, show an idle state instead of an old model.
  • Use the square OpenCode artwork in Pulse and Discord. Keep quota toggles, presets and field order consistent between preview and publication.

Frontend, design and responsive layouts

  • Use one provider bar for Claude, Codex, OpenCode and combined analytics. Keep Discord's broadcast choice separate from combined history.
  • Scope Home summaries and activity to the selected provider and seven-day window, with a separately labeled monthly projection.
  • Fit account-limit cards to available width. Replace clipped, fixed-height session controls with content-sized layouts.
  • Refine light/dark navigation, provider labels, full-width summary metrics and centered mobile headings.
  • Use two-row mobile navigation, compact provider selection and collapsible Home quotas. Keep Sessions and Costs metrics in two columns on narrow screens.
  • Preserve keyboard navigation, visible focus, selected states and explicit horizontal scrolling for wide tables.

Notification center

  • Add individual and bulk read/unread controls.
  • Confirm list clearing and retain the stored records. Persistent Undo restores the last confirmed clear and its read states.
  • Keep the last loaded history when refresh fails. Do not claim an unconfirmed mutation succeeded.

Performance and Windows efficiency

  • Import OpenCode history in bounded, incremental batches. Reuse calculated metadata for unchanged recent sessions and advance cursors only after persistence succeeds.
  • Poll OpenCode Go usage through a background worker with a 60-second interval, timeout and no redirects.
  • Request process-local Windows EcoQoS and Idle priority, with an environment opt-out and read-only verifier. Task Manager controls the leaf indicator; this is not a measured energy-savings claim.
  • Add a portable Tauri build command that embeds the frontend and does not require a development server.

Data accuracy and compatibility

  • Give a manual Codex plan selection priority over cached detection. Recognize Pro 5x, Pro 20x, Edu and explicit aliases.
  • Read the connected Discord name and avatar from local READY identity. Do not fabricate missing banners or image badges.
  • Display monetary values with two decimal places without reducing stored precision.
  • Migrate analytics to schema 6 for OpenCode metadata. The shared core remains 2.0.0 at its existing immutable Git revision.

Installation and recovery

Use the attached Windows x64 NSIS or MSI installer and verify it with SHA256SUMS.txt. This local release does not include a signed automatic-updater manifest. Back up configuration and the analytics database before upgrading; rollback must restore a compatible database backup with the older executable.

See the OpenCode and Astra guide, Windows Efficiency mode, and complete changes since 1.7.9.

Pulse v1.8.0

Choose a tag to compare

@xt0n1-t3ch xt0n1-t3ch released this 05 Sep 04:46
Immutable release. Only release title and notes can be modified.
b92f804

Added

  • Native OpenCode SQLite collection across message-table schemas, arbitrary model providers and mixed-model sessions, with incremental imports and explicit cost provenance.
  • OpenCode Go account windows for five-hour, weekly and monthly usage, sourced from the authenticated Go API without copying credentials.
  • GPT-6 Astra identity, observed reasoning effort, context limits and Standard/Fast pricing with explicit incomplete monetary coverage.
  • Windows Efficiency mode through process-local EcoQoS and Idle priority, with an environment opt-out and read-only policy verifier.
  • Notification read/unread actions, bulk controls, confirmed soft clearing and persistent Undo for the last confirmed clear.
  • A portable Tauri build command that embeds the frontend instead of depending on the development server.

Changed

  • One provider bar selects Claude, Codex, OpenCode or combined analytics; Discord exposes a separate broadcast selector.
  • Home uses provider-scoped seven-day data, adaptive account-limit columns and content-sized active-session controls without clipped fixed-height rails.
  • Light/dark navigation, centered mobile headings, readable provider identity, full-width summary metrics and accessible notification controls use the existing Pulse design system.
  • OpenCode uses the supplied square logo throughout the app and Discord. The previous portal asset remains available for rollback.
  • Analytics schema 6 adds OpenCode metadata. The shared core remains 2.0.0 at the existing immutable Git pin.

Fixed

  • Completed OpenCode sessions leave live focus and Discord immediately; history retains their actual values. A null completion field remains active, and old tool state cannot override a completed message.
  • OpenCode quotas respect field toggles, presets and saved order through the shared preview/publisher compositor.
  • Monetary display uses two decimal places without changing stored precision. Missing costs and unsupported credits remain unavailable.
  • Manual Codex plan selection takes precedence over automatic caches. Protocol pro maps to Pro 20x and prolite to Pro 5x; Edu and explicit aliases are recognized.
  • The connected Discord name and avatar come from local READY identity. Missing banners and image badges are not fabricated.
  • Notification errors retain the last loaded history and do not claim that an unconfirmed mutation succeeded or failed to save.

Pulse v1.7.9

Choose a tag to compare

@xt0n1-t3ch xt0n1-t3ch released this 27 Aug 21:39
Immutable release. Only release title and notes can be modified.
8a4c6c7

Removed

  • The Context view: it duplicated the Sessions surface whenever no session
    was live. Live-session context composition stays available through the
    session detail views.

Changed

  • Codex usage windows now use the canonical ChatGPT analytics naming: the
    primary label derives from the window duration ("5-hour limit", "Weekly
    limit"), model-scoped windows carry the model name as a muted secondary
    line, and raw tokens like "1w" are gone from primary labels.
  • The Discord Live Preview card is re-skinned onto the app's theme tokens ΓÇö
    light and dark both render it as a native Pulse panel (zero hardcoded hex
    in the preview styles, enforced by a source-level test), with the real
    local avatar, username, and banner when present.
  • Costs de-nests to three top-level cards (ledger, charts, session details):
    the coverage footer folds into the ledger, chart sections separate by
    dividers instead of nested boxes, the ledger heading reads "Spend and
    coverage", and metric sub-lines stack without clipping.
  • Dashboard focus stats keep their note lines under the value (no overlap
    into the neighboring figure), at-a-glance meta collapses to one line with
    coverage in a tooltip, and the Sessions search plus all-time facts share a
    single bordered toolbar.
  • Repository discoverability: added root llms.txt (llmstxt.org format) and
    an SEO pass on the README (keyword-bearing opening, factual badge row,
    Why Pulse section, table of contents, single H1).

Changed

  • Reports bundles are cached in-process for 60 seconds per (window, project,
    provider) key, so revisiting the Reports view renders the stored analysis
    instantly instead of re-running every analyzer; first paint shows skeleton
    placeholders per card while the first bundle computes, and the header stays
    interactive throughout.
  • Context no longer sits empty between sessions: with provider history it
    renders a "Latest session" panel with the recorded project, model, relative
    time, context window fill, and composition bar (falling back to the plain
    empty state when there is no history or the lookup fails).
  • Costs reads as one ledger: a single "Last 30 days" window kicker, honest
    em-dash degradation when provider billing is unavailable (with one short
    explanation instead of a shouted word), compact provenance tags on every
    figure, sentence-case pane titles ("By token type / By model / By project"),
    and a semantic sessions table with right-aligned tabular numbers.
  • The budget cockpit tells the real subscription story: when provider-billed
    readbacks are structurally absent, the hero figure shows the actual plan
    price parsed from the active plan ("Pro 20x subscription") with measured
    API-equivalent usage beside it, instead of an empty em-dash wall.
  • By-model rows keep their full names on a wrapping two-line label (no
    mid-name ellipsis), and session-detail rows separate project from branch
    onto two lines with a dot-only status column carrying its meaning in
    tooltip and screen-reader text.
  • The Context idle panel reads as a hero: the project name is the heading
    (no duplicated "Latest session" label), a full-width threshold-colored
    meter with big token figures, meta row for model/branch/time, and the
    recorded category composition ΓÇö with an honest one-liner when no
    breakdown was recorded.
  • Sessions replaces its raw native selects with the shared custom controls,
    keeps sort/range values verbatim, renders history as a real table with
    scoped headers and cost chips (exact / estimate / unavailable), and tightens
    the all-time footer into one fact line.
  • Reports binds its subtitle to the active analysis window, gives exports
    pending states ("Copy report" / "Download HTML"), fixes the heading outline,
    and rewrites generic section subtitles to state their data window.
  • Shell copy pass: "Needs attention", deduplicated accessible names on the
    Claude source card, shorter notification copy, calmer update-banner wording.

Added

  • The Discord live preview uses the signed-in local client's real identity:
    the account's global display name is parsed from the LevelDB profile record,
    the handle renders as an @username subtitle, and avatar, banner, and names
    refresh every 60 seconds instead of being captured once at startup.
  • Dashboard sections state their data window (all time / month to date /
    30 days), the initial analytics load renders skeleton placeholders instead of
    reading as empty history, and the active-session tray plus focus panel form a
    complete tab/tabpanel pair.
  • Settings reports a load failure for the window-close preference as a warning
    toast that keeps the default, and disables the export button with an
    "Exporting…" label while an export runs.
  • Context exposes a clear empty state ("Nothing live yet") with a direct path
    to the Sessions view.
  • The Discord live preview mirrors the real Rich Presence payload's small
    activity asset as a decorative circular chip on the artwork when the backend
    provides one.

Fixed

  • The Discord identity scanner now ranks candidate files from ALL installed
    variants (Stable/Canary/PTB/Flatpak/Snap) by modification time globally and,
    inside the newest file, prefers the richest, latest-written profile record
    (custom avatar > global name > banner) so the preview reflects the CURRENT
    local account instead of a stale one.
  • A failed manual "check for updates" now says so ("Couldn't reach the update
    service.") instead of silently doing nothing, and a forced check that finds
    nothing confirms "You're already up to date."; the automatic startup probe
    stays silent either way.
  • Discord identity extraction no longer aborts the whole scan when one LevelDB
    file is unreadable, falls back through Stable → Canary → PTB candidate
    directories until a valid record is found, parses the id-bearing object with
    string-aware boundaries and escape decoding so a neighboring account profile
    or quoted display names cannot corrupt the result, and caches the outcome
    (including "not found") for 60 seconds so view refreshes avoid rescanning.
  • The Settings control rail now places all four controls in a dedicated grid
    column (previously four controls shared three tracks), and Appearance and
    Window close use the shared segmented control with correct group semantics
    instead of hand-rolled radiogroup markup.
  • The Settings footer derives a friendly platform label (Windows/macOS/Linux)
    via userAgentData with a raw-value fallback instead of printing the
    deprecated navigator.platform string.
    =======