Skip to content

Changelog

All notable changes are recorded here. Beginning after v1.3.0, this file is generated by Python Semantic Release from Conventional Commit messages.

v2.11.1 (2026-08-14)

Bug Fixes

  • mobinfo: Reach P99 wiki with OS trust store (#119, 255d734)

  • mobinfo: Reach the P99 wiki through the OS trust store (#119, 255d734)

  • mobinfo: Retry unavailable wiki lookups (#119, 255d734)

v2.11.0 (2026-08-14)

Features

  • mobinfo: Render the whole P99 wiki page (#117, ff7401e)

Testing

  • spells: Stop the reload thread test racing its own daemon (#117, ff7401e)

v2.10.0 (2026-08-14)

Documentation

  • Add a README product shot and regenerate the screenshot set (#111, f51b643)

  • Correct stale FAQ assertions and v2.4-v2.9 drift (#112, 72e700d)

Features

v2.9.2 (2026-08-14)

Bug Fixes

  • overlay: Charge the alert floor for a kicker that has text (#108, be1a9b1)

  • overlay: Stop laying the alert viewport out zero pixels wide (#108, be1a9b1)

v2.9.1 (2026-08-13)

Bug Fixes

  • packaging: Make icon.svg readable by appstreamcli so the Linux release builds (#106, 9434507)

Testing

  • packaging: Record why the icon.svg guard strips leading whitespace (#106, 9434507)

v2.9.0 (2026-08-13)

Features

  • branding: Give nParse+ its own mark, generated from an SVG master (#105, 4bff33f)

v2.8.0 (2026-08-13)

Bug Fixes

  • overlay: Explainable alert splitting, scrolling long alerts, resizable regions (#103, 6ef5b5c)

  • overlay: Fit the headline to the box the Alerts region has, not the one it left (#103, 6ef5b5c)

  • overlay: Stop trigger alerts losing their opening clause to the gold kicker (#103, 6ef5b5c)

Features

  • overlay: Scroll over-long alerts, and make the overlay's regions resizable (#103, 6ef5b5c)

v2.7.0 (2026-08-13)

Bug Fixes

  • dumps: Drop a queued upload when the destination changes (#96, 862c496)

Features

  • settings: Apply the dump destination and the EQ install dir live (#96, 862c496)

v2.6.0 (2026-08-13)

Bug Fixes

  • dps: Derive the spell credit deadline so the window applies live (#97, 0e0c18c)

  • dps: Keep a dead pet's damage in the session footer (#97, 0e0c18c)

  • dps: Make both counting changes opt-in rather than default (#97, 0e0c18c)

Features

  • dps: Attribute non-melee damage and count pet damage as yours (#97, 0e0c18c)

Testing

  • settings: Compare eq_log_dir as a Path, not a string (#97, 0e0c18c)

v2.5.0 (2026-08-13)

Bug Fixes

  • triggers: Keep a possessive out of the {name} token (#98, cb79c80)

  • triggers: Stop a log line's braces rewriting the overlay text (#98, cb79c80)

  • updater: Classify an over-long body as a size refusal, not a failure (#95, 45601e9)

Features

  • Create a trigger from a log line, and warn when a root breaks (#98, cb79c80)

  • overlays: Warn when a root breaks (port RootHasWornOffHandler) (#98, cb79c80)

  • triggers: Create a trigger from a log line (Console right-click) (#98, cb79c80)

  • updater: Say why a download was refused, and ship a macOS .app zip (#95, 45601e9)

v2.4.3 (2026-08-13)

Bug Fixes

  • maps: Create the map window with an alpha channel so the backdrop works (#100, 34b06e3)

v2.4.2 (2026-08-13)

Bug Fixes

  • Three driver-thread defects — log archiving, the EQ probe, and the timestamp parse (#92, 3ddac6a)

  • logs: Archive by copy-and-truncate so the tail survives (#92, 3ddac6a)

  • logs: Check the tail signature on every poll, not only on a shrink (#92, 3ddac6a)

  • logs: Detect a rotation the log outgrew before the next poll (#92, 3ddac6a)

  • logs: Hand the rotation to the tail instead of inferring it (#92, 3ddac6a)

Documentation

  • Record the three driver-thread fixes (#87, #88, #89) (#92, 3ddac6a)

Performance Improvements

  • logs: Bound what the archive swap does on the driver thread (#92, 3ddac6a)

  • pipeline: Parse the log timestamp without strptime (#92, 3ddac6a)

  • socials: Probe for the EQ client off the driver thread (#92, 3ddac6a)

Testing

  • logs: Count bytes, not characters, in the rotation tests (#92, 3ddac6a)

v2.4.1 (2026-08-13)

Bug Fixes

  • net: Drop queued sharing REST work when the mode goes off mid-flight (#94, 1a68e7a)

  • net: Keep sharing off one-way for the session after a live off (#94, 1a68e7a)

  • net: Scope the REST gate to pigparse mode, and stop on a network switch (#94, 1a68e7a)

  • net: Silence the pigparse REST publishers when sharing goes off (#94, 1a68e7a)

  • settings: Apply overlay durations and sharing-off without a restart (#94, 1a68e7a)

  • settings: Stop the settings window promising restarts it doesn't need (#94, 1a68e7a)

Documentation

  • config: Mark the settings fields nothing reads (#94, 1a68e7a)

Testing

  • config: Read source as UTF-8 in the unread-settings scan (#94, 1a68e7a)

v2.4.0 (2026-08-13)

Bug Fixes

  • packaging: Drop the wrong Flatpak talk-name, and say why (#90, 7eca9d8)

Chores

  • packaging: Grant the Flatpak portal bus name a release early (#90, 7eca9d8)

Features

  • updater: Verify update downloads before trusting them (#90, 7eca9d8)

v2.3.3 (2026-08-13)

Performance Improvements

  • dps: Carry the best window instead of re-sweeping every hit (#91, f2fe3f6)

v2.3.2 (2026-08-10)

Bug Fixes

  • dumps: Keep the client's dash in inventory bag-slot locations (#66, d33ae0e)

v2.3.1 (2026-08-10)

Bug Fixes

  • maps: Stop the map ghosting when the backdrop is below 100% (#65, 318916f)

Testing

  • plugins: Stop the plugin manager tests segfaulting the macOS run (#64, 4defe25)

v2.3.0 (2026-08-10)

Bug Fixes

  • dps: Keep frozen rows and session stats honest across a settings change (#62, 35c41cb)

  • dps: Never drop an attacker row while the target is still being fought (#62, 35c41cb)

  • dps: Stop dropping attacker rows mid-fight; count melee only by default (#62, 35c41cb)

Features

  • dps: Count melee only by default, with a DPS Meter settings page (#62, 35c41cb)

Testing

  • dumps: Stop the p99planner claim fixture expiring in real time (#62, 35c41cb)

  • plugins: Stop the update check reaching the live registry mid-suite (#61, 9dde204)

v2.2.0 (2026-08-10)

Bug Fixes

  • spells: Unbreak the two disciplines that could never match a log line (#60, 3abb5bc)

  • timers: Start the Mend timer on all four mend outcomes (#60, 3abb5bc)

  • timers: Stop a mob-named player faking a Harm Touch cooldown (#60, 3abb5bc)

  • ui: Assert the pages, not the window, stop setting the floor (400e333)

  • ui: Let the settings window be narrow (2aae72d)

  • ui: Scroll externally contributed settings pages too (7ce8420)

Documentation

  • claude: Record how spellbook uploads route (#58, 462afcf)

Features

  • dumps: Upload spellbook dumps to p99planner (#58, 462afcf)

  • timers: Ability reuse timers — Mend outcomes, Lay on Hands/Harm Touch, and two dead disciplines (#60, 3abb5bc)

  • timers: Add Lay on Hands and Harm Touch reuse timers (#60, 3abb5bc)

v2.1.0 (2026-08-10)

Bug Fixes

  • dumps: Address review — browser False, refresh churn, unreachable sniff (#57, 44e48ee)

  • dumps: Decouple upload provenance from the local history gate (#57, 44e48ee)

  • dumps: Give the pending p99planner handoff a way back (#57, 44e48ee)

  • dumps: Give the review link a route out when no browser opens (#57, 44e48ee)

Documentation

  • dumps: Generate the Character Dumps screenshot (#57, 44e48ee)

Features

  • dumps: Add p99planner.com as an inventory upload destination (#57, 44e48ee)

  • dumps: Character dump library, with p99planner and pigparse upload (#57, 44e48ee)

  • dumps: Store and organize P99 inventory and spellbook dumps (#57, 44e48ee)

v2.0.0 (2026-08-08)

Bug Fixes

  • test: Read source files as utf-8 so the Windows job passes (03c08de)

Documentation

  • Bring the appearance, maps and architecture notes in line (0aa5eb6)

Features

  • maps: Make the map chrome follow the skin, and let exits be turned off (b1378d4)

  • maps: Put Clear Corpse Markers on the map's own right-click menu (32a8f76)

  • overlay: Finish the skin coverage and stop clipping long alerts (75d9427)

  • ui: Add the chrome token layer under the config windows (4ccd7e5)

  • ui: Dress the config windows in the active skin (5188ac9)

  • ui: Drop the light theme and generate the app stylesheet (765e046)

  • ui: Give the config windows one muted-text treatment (e6436da)

  • ui: Share the title bar, skin the Discord strip, put the editors on the base (d0757e4)

v1.22.0 (2026-08-07)

Features

  • ui: Give the overlays a look — skins, an Appearance page, map chrome (07e37d6)

v1.21.1 (2026-07-31)

Bug Fixes

  • plugins: Let a candidate import its own modules during validation (c992de9)

Code Style

  • plugins: Run ruff format on the new install test (fab113b)

v1.21.0 (2026-07-31)

Bug Fixes

  • plugins: Keep validation from repointing a live plugin's module (a53c7b0)

  • sdk: Register the parent namespace package for plugin imports (52ac844)

Chores

  • deps: Require nparseplus-sdk >= 1.1 (4d6d7e8)

Documentation

  • plugins: Document in-app updates, self-feeds, and the update check (f5bb034)

  • sdk: Document update_url and the self-feed contract (6e2599b)

Features

  • plugins: Add PluginEntry.update_url and plugins.update_check (fb94806)

  • plugins: Add the Qt-free update-resolution layer (b0da60e)

  • plugins: Cache update checks on the host (a295cb0)

  • plugins: Check for plugin updates shortly after launch (06c2120)

  • plugins: Replace an installed plugin in place (43b5e36)

  • sdk: Add PluginMeta.update_url for self-hosted update feeds (e7879a7)

  • ui: Update installed plugins from Settings > Plugins (b73bed1)

Refactoring

  • ui: Read the update check through the host, not a copy (1e1d03f)

v1.20.0 (2026-07-30)

Documentation

  • plugins: Say precisely what a duplicate window key drops (0a6eb84)

Features

  • plugins: Give plugin windows opacity and on-top rows in Settings (c879afa)

v1.19.0 (2026-07-30)

Documentation

  • The SDK is on PyPI and the registry is live (aefc544)

  • plugins: Document multiple registries and what adding one means (92f93f6)

Features

  • plugins: Add a registries editor widget (e3ab025)

  • plugins: Browse every enabled registry and record which one vouched (22e9fae)

  • plugins: Fetch every configured registry and report each result (7e5e32f)

  • plugins: Let settings hold more than one plugin registry (25876b1)

Refactoring

  • plugins: Give the host a registry list instead of one URL (d598693)

Testing

  • Compare the settings-survival path as a Path, not a string (08eb8da)

v1.18.0 (2026-07-30)

Bug Fixes

  • plugins: Close six security and lifecycle holes in the plugin host (c8492a1)

  • plugins: Keep a misbehaving add-on from stalling or freezing the app (d3dba7d)

  • sdk: Single-source the SDK version and publish it from CI (e331e34)

Build System

  • packaging: Bundle nparseplus-sdk in frozen builds, ship py.typed markers (6b5806b)

Documentation

  • Document add-ons across the site and correct the plugin reference (6ffe18b)

  • plugins: User guide, security & trust, developer guide, API reference (2f37f94)

  • plugins: Versioning policy and registry specification (0e79538)

Features

  • plugins: Add plugin repository template with validate/release workflows (f16cd10)

  • plugins: Add Qt-free plugin host (discovery, context, storage, installer engine) (0ca5503)

  • plugins: Browse-registry dialog and update-available status in the manager (df3b0a7)

  • plugins: Load plugins at startup — consent, plugin windows, tray folder action (32ccda7)

  • plugins: Make add-ons opt-in behind a master toggle, default off (7b25a0c)

  • plugins: Plugins manager settings page with install/uninstall (4814725)

  • plugins: Registry index schema, sha256-verified installs, install provenance (5ceab50)

  • plugins: Ship hello-timer and merchant-prices example plugins (5580ebb)

  • sdk: Add nparseplus-sdk workspace package (plugin contract, compat, validate CLI) (597cefa)

  • templates: Fix the plugin template's CI and scaffold the registry repo (3790365)

Refactoring

  • settings: Extensible page registry (extra_pages) in the unified settings window (a797149)

Testing

  • architecture: Port the Qt poison finder to find_spec (d5b13e0)

v1.17.0 (2026-07-30)

Features

  • timers: Fade spell-timer bars toward red as they expire (6b36bd7)

v1.16.3 (2026-07-30)

Bug Fixes

  • timers: Sync every countdown to one whole-second grid (df28480)

v1.16.2 (2026-07-30)

Bug Fixes

  • build: Read the version from init.py so uv.lock cannot drift (f7725f2)

  • packaging: Stamp the real version into the macOS and Windows builds (c9770a2)

Chores

  • deps: Sync uv.lock to the released version (9b4d3c3)

v1.16.1 (2026-07-29)

Bug Fixes

  • overlays: Cancel pending CH lane timers when the overlay is destroyed (349190b)

v1.16.0 (2026-07-29)

Code Style

  • Restore blank-line separation in the screenshot tool (f769858)

Documentation

  • List the macro editor in the screenshot checklist (beeeac3)

v1.15.0 (2026-07-29)

Chores

  • Refresh uv.lock to the released version (7970fc0)

Documentation

  • Document the Trigger Editor's Activity tab (75db3f3)

Features

  • triggers: Add an Activity tab to the Trigger Editor (97f7204)

  • triggers: Publish TriggerFiredEvent when a trigger fires (64c9ffe)

Testing

  • triggers: Cover the activity log end to end (fd1d9aa)

v1.14.0 (2026-07-21)

Documentation

  • Capture the tray menu screenshot and document the menu (1260ff7)

Features

  • maps: Perf render settings — antialias toggle, band cache, view flags (1363577)

Performance Improvements

  • bridge: Coalesce queued emissions and early-filter the fan-out (d4f1b21)

  • maps: Coalesce location-fix repaints and gate static geometry (af02041)

  • maps: Parse zone files off the GUI thread (f524777)

  • ui: Gate polling-window refreshes on visibility and real change (ec31aa7)

Refactoring

  • Split tray menu construction from its modal exec (9eb8b98)

Testing

  • Raid-combat stress replay, bridge flood test, opt-in benchmarks (c456b82)

v1.13.0 (2026-07-20)

Continuous Integration

  • Cross-compile x86_64 macOS DMG on Apple Silicon (a8194f3)

Documentation

  • Expand automated screenshot coverage (7 more window states) (1f79342)

  • Note the macOS updater picks the arch-matching DMG (67619b7)

Features

  • Add a "Check for updates" action to the tray menu (1061ae1)

v1.12.0 (2026-07-20)

Continuous Integration

  • Enforce Conventional Commits on PRs and auto-release on merge (2483176)

Documentation

  • Add offscreen screenshot generator and capture docs screenshots (24d8c87)

  • Document auto-release on merge and the PR commit check (50aaa7c)

Features

  • Add x86_64 (Intel) macOS build (e6b8df6)

v1.11.0 (2026-07-19)

Bug Fixes

  • overlays: Position the utility region for upgraders and tidy up (f42bbed)

  • timers: Clear stale post-expiry flash style when a row is recast (89e2b53)

Chores

  • deps: Sync uv.lock project version to match pyproject (0b02a2d)

Documentation

  • Document the 1.11 opt-in features across settings and windows pages (4fc06eb)

  • Land the 1.11 features and refresh stale references (6299f75)

Features

  • overlays: CH cadence indicator in the chain lane (6d497b7)

  • overlays: Make CH cadence detection user-editable regex (b11c8af)

  • timers: Post-expiration spell alerts with click-to-dismiss (3fa16b3)

  • timers: Redesign raid-mode grouping with per-row orientation (aaa5a89)

  • triggers: Utility built-ins routed to a dedicated overlay section (b33fb7c)

  • ui: Show app version and update status in Settings (69ae6e9)

v1.10.0 (2026-07-19)

Chores

  • net: Drop stale Kael-faction sharing TODO in spawn_timer (378339d)

Documentation

  • settings: Document vestigial legacy-only settings fields (f11d521)

Features

  • timers: Add "clear other players' timers" spell-window action (945be0c)

  • triggers: Add a character-scope control to the trigger editor (fe76767)

  • triggers: Honor interrupt_speech by stopping the current utterance (7799241)

  • triggers: Scope triggers to specific characters (2deedc7)

Performance Improvements

  • triggers: Cache end-early regex compilation off the per-line path (d0c520f)

Refactoring

  • data: Source boat announcements from data/zones.json (b3b9094)

  • maps: Drop the raw scratch dict from legacy MapData (8171acd)

Testing

  • net: Guard the SharingCoordinator inbound drain stays parse-free (2d7be3b)

v1.9.4 (2026-07-19)

Bug Fixes

  • Build the Windows release with the splash's Pillow build-dependency (ccb70c0)

Build System

  • Restore Pillow as a build-time dependency for the Windows splash (bd10c30)

v1.9.3 (2026-07-19)

Build System

  • Drop unused Pillow/pydantic-settings, move signalrcore to a probe group (0f3a60b)

Chores

  • Point code TODOs at their tracking issues (72ed74e)

Documentation

  • Reconcile EQTool commit refs and wire docs to the issue tracker (7256de9)

Performance Improvements

  • Skip redundant DPS best-window rescans on the per-tick path (b25b403)

Refactoring

  • Dedupe helpers, drop per-line/per-row allocations, remove dead MapsSignals (276c665)

  • Remove dead code and orphaned files (8236aef)

  • Retire the backend=None pure-legacy app mode (60d64b0)

Testing

  • Cover LogDriver character-switch and QtEventBridge (376f3be)

v1.9.2 (2026-07-19)

Bug Fixes

  • Sit CH chain target name 8px from the lane (c37ff5e)

v1.9.1 (2026-07-18)

Bug Fixes

  • Suppress Windows console window on every TTS utterance (6612e1d)

v1.9.0 (2026-07-18)

Chores

  • Sync uv.lock to current package version (cec7c49)

Documentation

  • Update CLAUDE.md status for the 1.9 batch (134f9f3)

Features

  • Bundle espeak-ng in the Flatpak so Linux TTS works out of the box (4495103)

  • Enumerate all TTS voices on Windows (SAPI + WinRT natural) and Linux espeak-ng (1c175a0)

  • Voice picker lists every installed voice and applies without restart (7e7539a)

v1.8.0 (2026-07-18)

Chores

  • Sync uv.lock to the released version (d0f1eaa)

Documentation

  • Update CLAUDE.md status for the 1.8 batch (c074d93)

Features

  • Delete a whole trigger group from the editor (72087e9)

  • Edge and corner resizing for frameless windows with persisted geometry (0855249)

  • Reset window positions action to bring all windows on-screen (59235e5)

v1.7.0 (2026-07-18)

Chores

  • Sync uv.lock project version to 1.6.1 (bc1e2ca)

Documentation

  • Update CLAUDE.md status for the 1.7 feature batch (4627d10)

Features

  • Named trigger groups with move/rename; GINA imports keep full folder paths (88988d2)

  • Preview overlay elements in position mode and allow per-region repositioning (bc56a60)

  • Restore last-open windows on launch (e478c66)

  • Sort /random rolls highest-first within their group (c2eb338)

v1.6.1 (2026-07-18)

Bug Fixes

  • Disable raid-mode spell grouping for now (3649555)

  • Move the CH lane target name into its own column (545eb72)

v1.6.0 (2026-07-18)

Chores

  • Sync uv.lock with the v1.5.1 version bump (7f59811)

Features

  • Graduate CH chain lanes into one-second cells and sweep leaked lanes (e5da09f)

  • Sectioned, sortable spell timers, CH chain tag filter, bard counter toggle (97b37b3)

v1.5.1 (2026-07-17)

Bug Fixes

  • Spell timer window keeps its size and scrolls on overflow (003f586)

v1.5.0 (2026-07-17)

Bug Fixes

  • Offer the right Linux artifact from the in-app updater (516b82c)

Continuous Integration

  • Deploy versioned docs to gh-pages alongside the flatpak repo (0ed1766)

  • Export the flatpak public key from the imported secret (43d056a)

  • GPG-sign the flatpak repo, summary, and bundles (216d6f8)

  • Publish the Flatpak OSTree repo so flatpak update works (7e84c30)

  • Timestamped phase markers in the flatpak bundle step (01ccedc)

Documentation

  • Add Roadmap and Changelog pages to the site (7c138fe)

  • Add the MkDocs Material site — 43 pages, versioned via mike (56a9118)

  • Cover the new timer/settings behavior across feature pages (eb4321c)

  • Cover trigger export/import and the GINA .gtp importer (533739a)

  • Match the 1.4.1 state — flatpak updates, log files, release flow (6c699cb)

  • Shrink the README to quick start + docs-site links (aec6053)

  • Timer section toggles and right-click clearing (df10090)

Features

  • Timer section hide toggles + right-click clear; /who and you-only fixes (c22ebbc)

  • Trigger export/import + GINA .gtp import (68f985f)

v1.4.1 (2026-07-17)

Bug Fixes

  • Crash/warning log files and Linux runtime env defaults (ed5c872)

  • Legacy window on-top apply, OTHER-class crash, WebEngine guards (c020ef2)

  • Pin certifi CA bundle for websocket TLS in frozen builds (267c62b)

Chores

  • Add project verify skill (offscreen app-driving recipe) (dfdd744)

v1.4.0 (2026-07-17)

Features

  • Add window presets and release automation (3b718b7)

v1.3.0 (2026-07-17)

  • Added persistent map markers and corpse waypoints.
  • Added respawn-timer persistence, expiry audio, and buff-fade warnings.
  • Added stacked detrimental timer policies, a light theme, in-game window commands, and the Linux Flatpak release artifact.

Earlier milestone history remains available in the Git log and GitHub releases. Future entries are generated from feat:, fix:, perf:, and other Conventional Commit subjects.


Release artifacts for every version — and the milestone-by-milestone history from before v1.3.0 — live on the GitHub releases page. For what's coming next, see the roadmap.