promotional bannermobile promotional banner

Ka0s Premade Groups Filter Extension (Retail)

Mythic+ conveniences for Premade Groups Filter: untimed-dungeon targeting, server regions, composition and leader filters, presets
Back to Files

1.0.0-release

File namePremadeGroupsFilterExtension-1.0.0-release.zip
Uploaded
Oct 10, 2026
Downloads
15
Size
6.8 MB
Flavors
Retail
File ID
9118609
Type
R
Release
Supported game versions
  • 12.1.0

What's new

commit f6b52cde5f6795423a0f4ed2b2f27e34cf3bdd4e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 20:01:51 2026 +0530

    Release v1.0.0

    The first release. Gate green on run 20261010-195814: lint 0/0, tests 414/1/415, perf 6
    scenarios, complexity max CCN 14 with 0 warnings and blindFiles 0. The README's Version
    History starts at 1.0.0; the 0.1.0 development row is gone.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit cd648c86406ccf1df0d62114df31e3226acd6dde
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 19:54:53 2026 +0530

    Shorten the README's Usage section and sync the docs

    Usage drops from eight paragraphs to four: opening the panel, filtering and
    Apply, the search-box copy, and settings and extras. The Screenshots section
    links the three CurseForge images, with EllesmereUI spelled right.
    smoke-tests.md checks the Smart checkbox's new spacing in APPLY-15 and SKIN-2.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 55ab13d90fae31a5f41c197080e43e5be341099d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 19:43:11 2026 +0530

    Add three panel screenshots, kept out of the package

    media/screenshots/ holds the project-page images. .pkgmeta ignores the folder,
    as AuraMaster's does: WoW cannot load PNG, so shipping them only adds weight.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit d79de71e601880bf143c5681856826ff92a3a24f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 19:36:29 2026 +0530

    Space the Smart checkbox like the other rows and move it right

    The Smart label sat 2px inside its box's frame, so its box-to-text gap was far
    tighter than every other row's. It now starts LABEL_X - CHECK_SIZE past the box's
    right edge, as the rows' labels do, and the EllesmereUI skin moves it right by
    the 8px the box shrinks, so the gap stays equal under both skins.

    The level box to the Smart box is now a 60px visible gap (SMART_GAP 56 plus the
    ~4px both skins draw the box inside its frame), up from 20, at the owner's request.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit a4dbc6224a69d1b09f8d528a5bb9126823e60e2e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 15:16:09 2026 +0530

    Link the PGF EllesmereUI skin from the README

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 2d49c293421c76dae00b24528d4f981d6d7b8d31
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 15:15:04 2026 +0530

    Record the CurseForge project id 1736636

    The TOC carries ## X-Curse-Project-ID, and the README badge row gains
    the live CurseForge version badge in its second slot.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 7a1c56fbf6b928774abd0594e0bde6857a89e76b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 15:04:04 2026 +0530

    Humanize the README's Usage and Credits prose

    Split the long key-level paragraph so the options read one at a time,
    break the filters-toggle sentence at its colon, and drop "served as".

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 4400b45a5c3d505df795e7b357e342069c84d0ee
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 15:03:12 2026 +0530

    Bring the README in line with the collection's README pattern

    Wrap prose at 100 columns, use the collection's table separators and
    Issues wording, split the 0.1.0 highlights one per feature, note that
    /pgfe on its own opens the settings, and credit the debug console's
    JetBrains Mono font and Open Iconic buttons the way AuraMaster does.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 7a50b879779ecb034496a84686cfe68af2a0bfa9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 14:57:58 2026 +0530

    Sync docs with the code after the audit-review fixes

    README: General -> Filters paths, the minimized-dialog hide, the exact
    unsupported-version text, and Troubleshooting rows for the minimized,
    filters-off and 2000-character refusals. DEPENDENCIES: drop luac, bash 4+,
    build-essential for luacheck, git's extra uses, packaging via .pkgmeta.
    ARCHITECTURE, module-map, common-tasks, data-flow, debug, profiles,
    performance, smoke-tests and automated-tests/README brought in line with
    the current modules, tabs, hooks and perf scenarios.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit c82e51c87e53c78b0c7bfd804893d3f2fa881971
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 13:09:33 2026 +0530

    Re-record the automated-test run at the merge candidate

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit c82e51c87e53c78b0c7bfd804893d3f2fa881971
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 13:09:33 2026 +0530

    Re-record the automated-test run at the merge candidate

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 33c358ffa9e06caf8b05a454dc517fc3cb530988
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 13:06:44 2026 +0530

    Pin the TGA recipe to a top-left origin; tick M2 and M3 in the ledger

    The DEPENDENCIES render lines now pass orientation=1, so re-running them
    reproduces the committed TGAs byte for byte.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 431a604e3a0d8c46aed7002d0d9de85a27a9fa06
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:28:30 2026 +0530

    Record the post-fix automated-test run and point CLAUDE.md at the 2026-10-10 bundles

    Full four-suite run through the vendored runner at ee090c7 (non-release, no label): green, lint
    0/0 over 60 files, 414 passed / 1 skipped / 415 total, perf pass on the 6 tests/perf.lua scenarios,
    complexity sighted (blindFiles 0, max CCN 14, 0 warnings). tests/test_panel.lua is the one file in
    the 1000-1500 band; its Disposition is "on notice" with the split areas named. No production file
    is in the band (modules/Panel.lua is 915 lines).

    CLAUDE.md now names the 2026-10-10 audit, the review bundle and its consolidated findings, the
    upstream issues (LibKa0s#46, #47; WowAddonStandards#8, #9, #10), the local re-vendor tracker #25
    and the new bundle. Ticks ledger row 16 (C-13).

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit ee090c7b84c30fb4b9544660c9bb6bfa2fd99252
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:22:45 2026 +0530

    Add a JPEG copy of the logo source and keep it out of the package

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit de31af5a1b118b7fa4f26ee4c21321463557dea7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:22:11 2026 +0530

    Fix the line cites and register text drifted by the header split

    The modules/Panel.lua and settings/Panel.lua header comments each gained
    a line in 9797a62, so the FEATURE_EVENTS cites in docs/performance.md move
    to 886-888 and 889 and the test_disabled red-under cite moves to the
    Lifecycle:Set line at 64. The performance-§12 register row drops the
    doubled backticks around its sweep sha to match spec section 5 word for
    word, and the Taint Notes sentence names onFacade's OnLooksChanged
    registration instead of saying it only keeps the facade.

    Refs #5

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 84c8a43434b05ca0de83b19ba6d2b3c1a7f40068
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:17:19 2026 +0530

    List Python 3 for the realm-map tool in DEPENDENCIES

    C-24. DEPENDENCIES.md's release group becomes "Release / assets /
    maintenance" with two entries: Pillow for the logo renders, and python3
    (stdlib only: re, string, sys) for tools/realm_map_diff.py, with its
    install and verify lines; the entry count is dropped. The lizard row
    and the version note carry the source-shape rule (function-literal
    tables stay named locals). docs/realm-map-maintenance.md's "How to run
    it" says it needs Python 3. Ticks Task 15 in the plan ledger.

    Refs #16

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 07e2a2a991e1d38b49670fe8550154c8eb7fd1c3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:16:22 2026 +0530

    Amend spec 6.3 to the shipped Any semantics

    C-38. The M+ v0.1 spec's Regions clause now says what ships: Any (none
    selected, or every one of the portal's regions selected) adds no clause
    and prints no warning. A test_filters case drives both portals from the
    live NS.Regions.KEYS and proves a full selection yields no region
    clause (red with the IsAny full-selection branch dropped from
    regionClause). Inventory and badge regenerated (414).

    Refs #8

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 43a3f3f35989cf011629f1d57a9f722f7bf08469
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:16:07 2026 +0530

    Regenerate the logo TGAs from the new Ka0s-style PNG

    The owner replaced premadegroupsfilterextension.logo.png. The 128 icon
    TGA and the 512 landing TGA are re-rendered from it (LANCZOS, RGBA,
    uncompressed, top-left origin). Refs #15

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 94c7b7483866076b4d584bcec0ae262823d24fc5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:15:09 2026 +0530

    Point register Why cells at resolvable sources; note the RegisterSkin survivor

    C-39. The EllesmereUIDB row's Why cites owner decision 1 in the eui-skin
    plan (ratified at its step 6a); the PGF-dependency row's Why cites the
    M+ v0.1 spec §1 item 5 and §2. Both sources re-read: they still say what
    the rows claim.

    C-37. Taint Notes says the EllesmereUI.RegisterSkin callback cannot be
    unregistered, survives a stand-down and gates itself, and the stand-up
    retries (upstream WowAddonStandards #10).

    Also: EllesmereUI seams now says OnLooksChanged is the one optional
    facade member (REQUIRED in modules/EUISkin.lua omits it), and the
    factory opts lists (tests/run.lua, ARCHITECTURE Contracts) name the
    afterFile hook.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9797a62e86a4eb86d0c900bc516073b810496db6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:14:25 2026 +0530

    Ratify the per-character state, direct-call, attached-panel and no-combat-path deviations

    C-17, C-18, C-26, C-34, C-09. Appends the four spec section 5 rows to
    docs/ARCHITECTURE.md -> Documented deviations (architecture-§5,
    architecture-§4, the attached-panel row, and performance-§12 citing the
    sweep at 2c86d49). Settings Schema drops the char.filters and
    panelCollapsed bullets for a pointer to the §5 row; Message Bus names
    the threshold, the three reaction sites and the pinned order. The two
    Panel header comments point at the register, docs/schema.md marks the
    outside-the-seam writers, and a parity case guards the rows and the §5
    writer list. Drops the unread C_Timer read-global and refreshes the
    sweep's line cites. Ticks M1 (pushed at 24d7f05) in the plan ledger.

    The runner reads the §12 row: with tests/perf.lua moved aside the perf
    suite skips with the ratified-exemption note.

    Refs #10 #18 #5

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 24d7f0579a4b05410f01c91d57a44cc81dcfbfc6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:08:34 2026 +0530

    Record the #4-#19 re-severity in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 4ad5e7110a6f3caf5456143ce6f042d5aa31d027
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:08:29 2026 +0530

    Split three functions this run pushed past CCN 15

    OnEnable's [Init] install line, the TOC annotation walk and the locale
    literal scan each get a helper; behavior is unchanged. lizard max CCN 14.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit e2f1b60b6b640cd42c01ea97d1c45322e66d4bc5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:06:49 2026 +0530

    Tick wave 4 (Task 14) in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit ad0aeb4b458397961567e4eda304999458a435e0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 12:03:14 2026 +0530

    Rewrite test_disabled to the slash-commands-§7 ten steps

    C-08 / PGE-05 / F-008. The suite is now built only from T.enableAddon() and the kit
    recorders (__registrations, __timers(), __shownFrames, __svWrites, __printed, __fire,
    __fireUnconditional); the probe row and every NS.FEATURE_EVENTS / NS.STAND_* injection are
    gone. Step 1 pins the eight event names; steps 2-5 disable through /pgfe disable and the
    write seam; step 6 drives every feature handler, the env, dialog and both RegionTags hooks,
    the panel widgets, the EllesmereUI RegisterSkin callback and a skin SetChecked hook while
    stood down; step 7 walks every NS.COMMANDS verb plus bare, debug diagnostics and the
    unregistered perf; step 8 the launcher clicks and menu; step 9 the rebuild from current
    state; step 10 both latch orders with the library's perf hold as a test-only second holder.
    The C-16 cases and the stored-disabled case are kept.

    Red-proved: each red-under mutation applied and reverted (the NS.StandDown UnregisterEvent
    loop at core/PGFE.lua:120, the stand-down checks in EnvInject.Apply, RegionTags active()
    and EUISkin blocked(), the enabled row's Lifecycle Set path at settings/Panel.lua:63, and
    LauncherSetup:55), and each turned its case red.

    docs/testing.md describes the suite; inventory and badge regenerated (405 -> 412).

    Refs #4

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit bcb176805f214d071f84e1173f5831b0e455faa3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:55:44 2026 +0530

    Make the launcher's Enabled entry describe the stored setting

    C-16 / PGE-11 / F-015. With the perf wiring removed (D1 = performance-§12) the latch and the stored
    setting no longer disagree in production; this conforms the tooltip to launcher-§1's same-accessor
    rule. PGE-12 is no longer reachable in production, and the library's DisabledLine is kept.

    Two cases in tests/test_disabled.lua: another hold stands the addon down and the Enabled line
    still says Yes; after /pgfe disable it says No. Inventory and badge regenerated (403 -> 405).

    Refs #14

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 3db9af8c5002636bed83304ad501beedb113da90
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:51:43 2026 +0530

    Tick wave 4 (Task 13) in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 1d06f554d5cc5396bccbd27b944a7f050fcdcca2
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:47:48 2026 +0530

    Write debug lines for Apply, Clear, panel visibility, presets, spec and enable

    The feature flows wrote nothing to the debug console, so a refused
    Apply or a panel that would not show left no trail (C-19 / review
    PGE-04). Now:

    - Apply and Clear route every return through done(), one
      "refused: KEY" or "ok: KEY" line each (MSG_NO_PGF names the missing
      seam), plus a "wrote" line after Commit and a "search" line before
      the click. OnFiltersToggled writes one line.
    - Panel.UpdateVisibility writes shown/hidden on a change only; the
      stand-down hide re-arms the key through NS.DebugLog.DebugForget.
    - Presets.Save/Load/Delete log saved/loaded/deleted, an absent delete
      and the badName/missing refusals.
    - EnvInject.RefreshPlayer logs the spec keywords on a change.
    - PGFE:OnEnable writes one [Init] seams-and-hooks line through
      DebugAtEnable, before the latch.

    EnvInject.Apply and the row painters stay silent. docs/debug.md gains
    the tag vocabulary.

    Refs #11

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 6c24b35ee5385d982f1ca7a93b96883a4efcfefa
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:43:17 2026 +0530

    Say nothing about a range when key targeting is off

    With key targeting off no dungeon range is targeted, yet the Apply
    message still named one and Apply.LastRange still held it. LastRange is
    now nil after a targeting-off Apply, and MSG_APPLIED_NO_TARGETING
    carries no range (C-28 / review F-009).

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9fd3be854f6d63c0753998c9ad0cc127c8feb176
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:41:14 2026 +0530

    Tick wave 3 in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9113702df3266cf4870836484d61fe336be1ced2
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:36:29 2026 +0530

    Route player-facing strings through NS.L

    C-25 / PGE-16 / F-010. Every player-facing literal becomes a whole-sentence
    %s key in locales/enUS.lua, with values equal to the old literals: the
    settings/Slash.lua stub and host lines (unknown command, help header,
    settings unavailable, bare reset usage, console not ready, CLI_MISSING), the
    General page's name and Defaults tooltip, the DebugLog stub (missing line,
    on/off acknowledgement, console checkbox label), the LIBKA0S_MISSING cause
    clause and its "..., so X is unavailable." family (Core, DebugLog, Launcher,
    Options, Slash). DISABLED_LINE_FORMAT, brand names, /pgfe verb tokens (as %s
    arguments) and color escapes (inside the values) stay as they were;
    settings/Schema.lua's schema-error lines are developer diagnostics and stay
    literal, noted in a comment.

    tests/loader.lua gains an optional opts.afterFile(path, NS) hook. Two
    sentinel-locale cases in tests/test_slash.lua wipe NS.L in place after
    locales/enUS.lua and require every line they drive to end in the sentinel,
    with LibKa0s absent and present.

    Refs #17

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9c399be70cf7c7f67185bb27b460cb570a775893
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:32:43 2026 +0530

    Report seams, hook installs and filter options in diagnostics

    Review C-10 / F-013. The dependencies section now prints the PGF seams
    Bridge.Check reads (ok and the first missing one) and which hooks went
    in (env, dialog, and the two RegionTags row painters), read from the
    install stores. A new filters section prints the character's filter
    options: sorted scalars, and each set as its sorted keys, empty reading
    Any. Registration labels the list "feature events (declared)" and adds
    whether they are registered right now (false while stood down).

    New suite tests/test_diagnostics.lua (six cases, red-first), registered
    in tests/run.lua; docs/debug.md sections table updated; inventory and
    badge regenerated. docs/ARCHITECTURE.md names only the verb, so no edit.

    Refs #7

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit d48d45e0c92cb8e5b51d8833606168097fcc3b80
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:30:27 2026 +0530

    Define the 12 locale keys the skin status and settings tab use

    C-11 / F-006. The six PGF_TEXT keys (core/EUIBridge.lua) and the six
    settings/Panel.lua keys (the link label, CONDITION_TIPS and STATE_TIP) were
    rendered only through the __index fallback; they are now defined byte for
    byte. The dead "Install and enable Premade Groups Filter - EllesmereUI Skin"
    key, read by nothing, is deleted (localization-§3).

    A static two-way key-parity case in tests/test_surface_parity.lua guards it,
    with the MSG_*, REGION_TIP_* and PLAYSTYLE_* computed-key families exempt.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9989fa3c26f0fb5734586b7e668bbd91aecdf478
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:26:51 2026 +0530

    Tick wave 2b in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 2c86d49e9bafa48baeb603b331b347a28bcdcf61
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:22:55 2026 +0530

    Commit the combat-path sweep and ship the offline perf scenarios

    C-09. The whole-repo sweep performance-§12 criterion (a) requires, in
    docs/performance.md, and tests/perf.lua's six offline scenarios. Refs #5

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9c52320e75a61f68288076972f6114c03b2e2608
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:15:33 2026 +0530

    Take the performance-§12 exemption: remove the unused perf wiring

    C-09 / PGE-09. The owner chose the performance-§12 no-combat-path
    exemption over buckets at checkpoint D1 on 2026-10-10.
    libs/LibKa0s/ stays vendored whole, Perf.lua included; perf stays a
    reserved, unregistered verb. The register row lands in Task 15. Refs #5

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 2d6a5b0976c7c520b39528c88ab05f0453c2eec9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:10:54 2026 +0530

    Tick wave 2 in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 2be37badb6e0dc54416b333932e4b133fc742191
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:02:36 2026 +0530

    Hide the panel's tooltip on stand-down; record the dialog hook; read map keywords through the bridge

    C-29 (Panel half): the tooltip handlers gate on the stand-down, so OnLeave
    could not hide a tooltip the panel showed. The STAND_DOWN row now hides
    GameTooltip when its owner is the panel or a frame inside it (an owner
    walk with a self-parent guard); a tooltip owned elsewhere is left alone.

    C-10 (Panel store): Panel.dialogHooked keeps Bridge.HookDialog's answer.

    C-04 (Season half): shortName reads NS.Bridge.MapKeywords, so no module
    outside the bridge names PremadeGroupsFilter; .luacheckrc drops Season
    from the PGF-reader comment and a surface-parity case guards it.

    The mock's GameTooltip records its owner (SetOwner/GetOwner, Hide clears
    it, GetParent answers nil).

    Refs #7

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 620a29769507da69121a0a373cf42f300faff551
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:01:05 2026 +0530

    Render the landing logo at 512 and pin the logo assets

    C-23 / PGE-13. The landing-page TGA is re-rendered from the 512x512 PNG
    at 512x512 (Pillow, LANCZOS, uncompressed 32-bit), up from 256.
    DEPENDENCIES.md carries the 512 recipe line and the `file` check. Three
    setup cases pin the assets: the TOC IconTexture is the launcher icon and
    the folder-named 128 TGA, both TGA headers read type 2 / 32 bpp at 128
    and 512, and no pgfe.logo file remains.

    Refs #15

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 623f4e8e6ca3053ced73cffc33c3f64be1ed2f4b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 11:00:27 2026 +0530

    Request season data once per episode and on the affix event

    C-06 / F-002, C-07. The season-data request moves out of the panel's
    readout into Season.GetDungeons, behind Season.RequestOnce. It goes out
    once per episode, re-armed by Season.ResetRequest on PLAYER_ENTERING_WORLD
    and on the full -> empty rollover of the map table (reset and send in the
    same call; a second empty read neither resets nor sends), so an
    off-season client no longer loops request -> MAPS_UPDATE -> request.
    Apply and Smart now ask too, with no panel. MYTHIC_PLUS_CURRENT_AFFIX_UPDATE
    joins the season-data events.

    The mock counts RequestMapInfo calls (mapInfoRequests) and never fires
    the reply. Docs: the AFFIX event row and a Known Limitations entry in
    ARCHITECTURE, data-flow's request paragraph, smoke APPLY-25.

    Refs #6

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit f91a10435cb55ef11a2a6d7f7c7ce81726004c65
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:59:42 2026 +0530

    Rename the logo files after the addon folder

    C-23 / PGE-13. A pure rename: media/logos/pgfe.logo.{128.tga,tga,png}
    become premadegroupsfilterextension.logo.{128.tga,tga,png}, and the
    TOC IconTexture, the launcher icon, the landing logo path, the setup
    test and the DEPENDENCIES recipe follow. No pixel changes here.

    Refs #15

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 444f7599acec0cc9984fc43866dcea0c89de7a18
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:59:06 2026 +0530

    Drop the unused AceTimer-3.0 mixin and library

    C-35 / PGE-20. Removes a whole vendored folder; no vendored file is
    edited. Nothing in the addon schedules or cancels a timer, so the
    NewAddon mixin string loses "AceTimer-3.0", the TOC loses its library
    line, and libs/AceTimer-3.0/ goes. A harness case pins both halves: the
    mixin is absent and the raw TOC names no AceTimer line.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit caac51f48acaaef1fed02baf3e6c7ce254db5f17
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:58:16 2026 +0530

    Annotate every TOC line with what it needs at load

    C-21 / PGE-06/07/08/28. Every addon file's TOC line now carries a
    LOAD-BEARING, Conventional or LAST annotation: the modules lose the
    blanket heading in favor of per-line notes (EnvInject, Panel and EUISkin
    are load-bearing), settings\Panel.lua and settings\Slash.lua say what
    they capture at file scope, the core\PGFE.lua note names its real
    NS.addon consumers, and the Schema note names the three NS.SchemaRuntime
    readers. docs/module-map.md and the ARCHITECTURE Module Map summary
    follow; a harness case pins the annotation on every addon line.

    Refs #12

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 34db25615d1015e9c2794405f73855880b5f0a19
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:57:31 2026 +0530

    Test what Reset all settings reaches

    C-22 / PGE-10. New suite tests/test_reset.lua, registered in tests/run.lua
    after test_euisettings, pins five reset facts (options-ui-§12, launcher-§3):
    only the active profile resets, the debug console is swept off, the minimap
    button stays hidden through Reset all settings and through the General page's
    Defaults, and a reset while disabled comes back enabled with the disabled hold
    released.

    red-proved 5/5: each case's named mutation was applied locally, the case
    failed, and the mutation was reverted. Case 3 was also checked layer by layer:
    dropping resetExempt alone or narrowing VetoedFromResetAll alone keeps it
    green; both together turn it red.

    Inventory regenerated; tests badge 352 -> 357.

    Refs #13

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit de06ea0002cabad3a4f32824ee7948bcafe7cfc7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:53:57 2026 +0530

    Tick Task 6 in the plan ledger with the filed issues

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit b1bca0e279f9f20e3318b223640fa82fea4a1a8c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:52:31 2026 +0530

    Tick wave 1 in the plan ledger

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit fd738975016f98a199ec449758a00f47d3d270ee
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:43:44 2026 +0530

    Keep the env-hook-not-installed debug line from raising at load

    Check() returns only `true` when every seam is truthy, but InstallEnvHook also refuses a
    PutPremadeRegionInfo that is not a function. The debug line then called tostring() with no
    argument and raised at file load. Name that case instead, and pin it with a test.

    Refs #7

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 09423d6591513aa0780f7ecc970a2d677601f5e1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:39:53 2026 +0530

    Probe leader names before matching; make the minimized-commit test assert what it keeps

    Regions.GetRegion now refuses a leader name that is not concat-safe
    (NS.IsConcatSafe, looked up at call time) before :match, after the
    portal check so unsupported portals skip the pcall. A protected name
    leaves env.region nil and every region key false. The minimized-commit
    bridge test is renamed and now asserts the written dungeon row and
    expression survive while Init/Trigger are skipped (red under: drop the
    activePanel check in Bridge.Commit, proven locally). ARCHITECTURE Taint
    Notes records the probe; inventory and badge regenerated.

    C-32, C-31.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 367253888db4bf1f81d5f3d51ff1037a081442f3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:39:00 2026 +0530

    Route PGF constants through the bridge and check the seams they need

    modules/EnvInject.lua read PremadeGroupsFilter.Debug.C.SPECIALIZATIONS
    directly. The bridge now owns it (Bridge.Specializations, PGF 7.6.2
    Modules/Specializations.lua:25) and Bridge.MapKeywords (unchecked;
    Modules/ActivityKeywords.lua:59) for the Season task to adopt.
    Bridge.Check() gains C.SPECIALIZATIONS and the structural seams
    Dialog.panels, DungeonPanel.Dungeons and
    DungeonPanel.Advanced.Expression.EditBox (ten checked seams).
    EnvInject stores the env hook's install result for Diagnostics and logs
    the missing seam when it is not installed. The .luacheckrc comment now
    names the readers of each kind of global. ARCHITECTURE PGF seams
    updated; inventory and badge regenerated.

    C-04 (bridge half), C-10 (SEAMS + env store). Refs #7

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 195bc63d317eff5a11ea356a9ed5afba64415554
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:38:04 2026 +0530

    Move filtersActive and showRegionTags to a General Filters tab

    C-15 / PGE-23. Master controls now holds only its mandated rows
    (options-ui-§15): enabled, state.debugConsole, global.minimap.shown and
    the reset pair. The two filter switches leave MasterControls' extra and
    become FILTER_ROWS, their own group (L["Filters"]) added after the
    Master controls rows and before the EllesmereUI skin row, so the General
    page reads Master controls | Filters | EllesmereUI skin. The
    filtersActive onChange moves with its row; the options-ui-§16 citation
    goes. Paths unchanged, no migration and no SCHEMA_VERSION bump.

    Tests: the tab-order case expects the three tabs; a new setup case pins
    Master controls to the canonical rows and both switches to the Filters
    group on the General page. Docs (settings-panel, schema, ARCHITECTURE
    Settings Schema, smoke-tests PANEL-2 and APPLY-21) and the Profile,
    Schema and Panel header comments follow.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 40237bac099d13557f4a9a24f61a20b806f5c971
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:37:16 2026 +0530

    Log skin skips through DebugChanged; reset glyph hover on stand-down; skip relayout before paint

    C-20: the file-local lastSkip memo is gone. A skip goes through
    NS.DebugChanged("euiskin.skip", ...), so the console's Clear and turning
    logging on re-arm it, and a skip seen while logging was off is written
    once logging turns on.

    C-29 (EUISkin half): a STAND_DOWN row puts both min/max glyphs back to
    GLYPH_ALPHA, since their gated OnLeave hooks cannot while stood down.
    The OnEnter/OnLeave gates stay.

    C-30: OnEUISkinScale returns before any paint (smoke test only; a red
    test is not possible, the guarded loop is empty).

    Four new cases; inventory and badge regenerated (331).

    Refs #11

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 9c96895050ad133025668eeb8a8c30b38158124d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:35:13 2026 +0530

    Check the EllesmereUI facade before painting and fail closed

    C-05 (2026-10-10 audit+review). blocked() now refuses a facade missing
    any primitive or getter the paint calls (REQUIRED), so a changed
    EllesmereUI API leaves the panel stock instead of raising half-way. The
    paint is pcall'd: a primitive that raises logs "paint failed", latches
    paintFailed (no retry, which would skin the same widgets twice), and
    OnSwitch(false) offers the reload that drops the partial paint.

    The EllesmereUI fake gains spec.omit and spec.raise. Two new cases;
    inventory and badge regenerated (327).

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit ec843292f27c4aa52887bb6de78d4a3081f475d0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:35:12 2026 +0530

    Hook the PGF-skin link box once per pooled frame and clear it on release

    C-01 / PGE-27. AceGUI pools the EditBox's inner frame and HookScript
    cannot be undone, so every render stacked another OnEditFocusGained hook
    on the same frame, and a released box's hook kept selecting text in
    whatever widget got the frame next. The frame is now hooked once
    (__pgfeLinkHook) and selects only while the link box owns it
    (__pgfeLinkActive); the box's OnRelease clears the flag and forgets
    Settings.PGFSkinLinkBox.

    Three cases in tests/test_euisettings.lua hand every EditBox one shared
    stub frame (the kit's fake has no inner editbox) and pin focus-selects,
    release-clears and no-stacking.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit c768fd0bb009978b606ed66f93cc074312d8f3fe
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:34:32 2026 +0530

    Refuse a wrapped block with no close pair; keep blank edge lines on Strip

    C-03 / F-003, C-33. Refs #9

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 10350bc92913e7eb3fd52d394982136445177a82
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:34:06 2026 +0530

    Hoist RegionTags' painter table so lizard can measure the tree

    C-02 / PGE-24 / F-001; records installed painters for diagnostics (C-10). Refs #7

    The painter table moves out of the for-in header into PAINTER_HOOKS, which
    lizard 1.24 can parse; the complexity suite now passes with no blind files
    (max CCN 14). RegionTags.hooked records each painter actually hooked, and a
    new case pins that a painter the client lacks is skipped while the other
    still installs and tags.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit ddf11ca5fbd187829cb5d8574c5ede2ab4f64833
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 10:30:36 2026 +0530

    Add the 2026-10-10 audit+review fix spec, plan and consolidated findings

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 0dabcde405c81b764cafea57a822100281ba4cac
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 09:15:27 2026 +0530

    Add the 2026-10-10 standards audit and review bundles

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit c3169c0d39683ccbc12928b45b2731218f9d12c2
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 02:37:34 2026 +0530

    Say the copy box is empty while key targeting is off

    docs/data-flow.md still said the Copy into search box field always shows
    the level box's N-N; since 603a254 it is empty (and dimmed) while
    "Untimed dungeons at key level" is off.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit c3169c0d39683ccbc12928b45b2731218f9d12c2
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 02:37:34 2026 +0530

    Say the copy box is empty while key targeting is off

    docs/data-flow.md still said the Copy into search box field always shows
    the level box's N-N; since 603a254 it is empty (and dimmed) while
    "Untimed dungeons at key level" is off.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 603a2545fbc54846516eaafef876435bbf5b2396
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 02:19:28 2026 +0530

    Empty the copy box while key targeting is off

    Owner request: with "Untimed dungeons at key level" unticked there is
    no key level to search for, so the dimmed Copy into search box field is
    now empty; ticking it brings the range back.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 5629527a20a9b416307715c01a2bad9bd1dec89e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 01:21:48 2026 +0530

    Let a click on the header strip fold and unfold the panel

    Owner request: the title band now does what the collapse / expand arrow
    does. A click area spans the band from the left edge to just short of
    the arrow (which keeps its own click); nothing happens while stood down.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 5629527a20a9b416307715c01a2bad9bd1dec89e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 01:21:48 2026 +0530

    Let a click on the header strip fold and unfold the panel

    Owner request: the title band now does what the collapse / expand arrow
    does. A click area spans the band from the left edge to just short of
    the arrow (which keeps its own click); nothing happens while stood down.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit a063025cb28b2c6281bf43621b1333b5b0b656a8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Sat Oct 10 01:17:21 2026 +0530

    Polish the panel: drop the leader score, full title, flush skin

    Owner requests:
    - Remove the Min leader M+ score row, its filter clause, validation,
      defaults and strings: Premade Groups Filter's own M+ Rating row covers
      the leader's rating. A stale stored value is ignored. The panel is one
      row shorter.
    - Title the panel "Ka0s Premade Groups Filter Extension".
    - Sit the EllesmereUI shell flush under PGF's dialog, as the metal look
      already is (SHELL_GAP 0).
    - Pull the dungeon readout 6 units closer under the key-level row.
    - Center the range in the Copy into search box field.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit aeb0f75eeaabd065d08cb6a6a950cea50c54f001
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:22:03 2026 +0530

    Draw the landing logo at the library's 300x300 default

    options-ui-§5 sets the landing logo at 300x300 (a MUST from standard
    v2.78.0); the 256 override is dropped so BuildLandingPage's default
    applies, and the test pins that no logoSize is passed.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit aeb0f75eeaabd065d08cb6a6a950cea50c54f001
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:22:03 2026 +0530

    Draw the landing logo at the library's 300x300 default

    options-ui-§5 sets the landing logo at 300x300 (a MUST from standard
    v2.78.0); the 256 override is dropped so BuildLandingPage's default
    applies, and the test pins that no logoSize is passed.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit fb3869898ea79569abb59bd69441132f2684af77
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:08:33 2026 +0530

    Stop Apply taking keyboard focus into the copy box

    Owner request: focusing the Copy into search box field after a
    successful Apply held the keyboard (movement, chat) until the player
    clicked away. Apply now leaves focus alone; clicking the field still
    selects the range, and Enter there still jumps to the search box.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit aeb0f75eeaabd065d08cb6a6a950cea50c54f001
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:22:03 2026 +0530

    Draw the landing logo at the library's 300x300 default

    options-ui-§5 sets the landing logo at 300x300 (a MUST from standard
    v2.78.0); the 256 override is dropped so BuildLandingPage's default
    applies, and the test pins that no logoSize is passed.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 46f05d934482bb961925c9a826248396321b8866
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:16:56 2026 +0530

    Draw the settings landing page through the library's builder

    The private landing body drew the logo as a texture straight on a
    pooled AceGUI SimpleGroup frame and never removed it. After a re-render
    the frame came back as another SimpleGroup (the spacer under the Slash
    Commands heading) still carrying the logo, so the page showed it twice.
    LibKa0s-Options' BuildLandingPage owns the clear and hides the logo on
    release; BuildMainContent now hands it the logo, notes and command rows.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit f9f87e6b50579eb1d195bb913d87e3c6121b886f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:14:16 2026 +0530

    Narrow the gap under PGF's dialog by 1px in both looks

    Owner request: the metal panel is raised 3 instead of 2 into the
    dialog's bottom edge, and the EllesmereUI shell sits 1 below the
    dialog instead of 2.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit d0837852531889d322f8eb23d71fefaf191f3511
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:14:16 2026 +0530

    Lay out the EllesmereUI skin tab: switch first, tooltips, aligned state

    Owner requests: the switch moves to the top with a gap below it; every
    condition line and the state line explain what / why / how on hover
    (InteractiveLabels, so AceGUI clears the callbacks on release); an 8px
    gap above the state line, which (like a failing condition's hint) starts
    in an empty icon slot the size of the status marks so its text lines up.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit fb3869898ea79569abb59bd69441132f2684af77
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:08:33 2026 +0530

    Stop Apply taking keyboard focus into the copy box

    Owner request: focusing the Copy into search box field after a
    successful Apply held the keyboard (movement, chat) until the player
    clicked away. Apply now leaves focus alone; clicking the field still
    selects the range, and Enter there still jumps to the search box.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 22f37a8fd13a69c5a67bc7627b0795615652e429
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 21:04:54 2026 +0530

    Ratify reading EllesmereUI's skin switches as a deviation

    Owner decision: the optional skin's gate reads EllesmereUIDB's
    third-party switches read-only from core/EUIBridge.lua. Recorded in
    docs/ARCHITECTURE.md -> Documented deviations (library-stack-§6,
    anti-patterns #29) with its re-check trigger. Plan: rows 6a and M2.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit b79b16ac08c8a102523efd4e676f4a0f22bf7627
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:57:51 2026 +0530

    Say why PGF's EllesmereUI skin is missing, and link to it

    Owner request: the PGF skin's status line now tells not installed,
    installed but disabled, and turned off in EllesmereUI apart
    (EUIBridge.PGFSkinState). When it is not installed, the skin tab adds a
    read-only box holding its CurseForge link to copy.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 962eb1c1892813568758baa934b1e42037a881e5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:54:34 2026 +0530

    Fix the EllesmereUI skin review findings

    - Master switch: any truthy thirdPartySkinsOff reads as off, exactly as
      the dispatcher's MasterOn does.
    - Profile switch/copy/reset routes through EUISkin.OnSwitch after the
      enabled latch re-read: off after a paint asks for a reload, and a
      disabled incoming profile is never painted.
    - Stand-up replays the theme repaint and pixel relayout an existing
      paint missed while stood down.
    - Tests: live looks recolor, scale relayout, stand-up catch-up, both
      profile-switch cases, truthy master value (318/318).
    - README Version History mentions the skin; plan ledger row 6 ticked,
      row 6a tracks the pending owner decision on library-stack-§6.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 051607434d761d55844c8ba077d32d3a1e1f423f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:47:42 2026 +0530

    Tick plan milestone M1 (gate green, branch pushed)

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit d5b15ef0ee1cbeeadf5eb3d12556cf09f6d40683
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:47:26 2026 +0530

    Document the EllesmereUI skin

    ARCHITECTURE: overview, mock contract, module map, the euiSkin row,
    the two scale events, taint notes, a new EllesmereUI seams section
    (with the pending library-stack-6 standards note on reading
    EllesmereUIDB) and known limitations. Module map, schema, settings
    panel tree, debug sections, scope, DEPENDENCIES (optional EllesmereUI
    trio), README usage paragraph, and smoke tests SKIN-1..9.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 7d2e0c194fe211f04e0d438227730839ddcb29e0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:45:23 2026 +0530

    Add the EllesmereUI skin tab to the General page

    The euiSkin switch is a schema row in its own group, drawn as a second
    General tab after Master controls: a status line per gate condition
    (with what to do when it fails), a line saying what the skin is doing,
    then the switch. The switch is disabled while any condition fails and
    its tooltip says why; /pgfe set euiSkin true is refused with the same
    reason, off is always accepted and a bulk reset never refused. A page
    re-show re-reads the lines, and a panel show paints when a condition
    was turned on in EllesmereUI's options. The degraded Options stub
    gains TextRow.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 614bf03f9abd6d2a7ff3a63eb668c14317b6c6e6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:40:53 2026 +0530

    Paint the attached panel in the EllesmereUI theme

    modules/EUISkin.lua registers with EllesmereUI at file load
    (presence-guarded, ## OptionalDeps: EllesmereUI) and keeps the facade
    S, so the lazily built panel is painted the moment every gate
    condition, our euiSkin switch (default on) and the stand-up all hold:
    from the callback, Panel.Create, the switch, a profile switch or the
    stand-up. Shell and header (25px collapsed bar, metal copies at alpha
    0, 2px gap below PGF's dialog), 24px checkboxes with PGF skin's accent
    ring, number boxes, dropdowns, buttons, min/max minus/plus and fonts,
    after PremadeGroupsFilter_EllesmereUI. Switching off after a paint
    asks for a reload. Hooks return while stood down. Diagnostics report
    the gate and the skin.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit fa6e46628cadc4fd75abd329269835423a490a52
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:34:25 2026 +0530

    Add the EllesmereUI bridge: the skin's four-condition gate

    core/EUIBridge.lua is the only file that reads EllesmereUI state, at
    call time and nil-guarded: EllesmereUI with RegisterSkin and its window
    skin child loaded, the master third-party switch, our own Third-Party
    Addons entry, and PGF's own EllesmereUI skin (loaded, entry on). Each
    condition carries a label and a hint for the settings page. Headless
    cases against an opt-in EllesmereUI fake in tests/wow_mock.lua.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit 0b864694f0cebcf816b3255b5983f7d61eec7e03
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:17:57 2026 +0530

    Plan the EllesmereUI skin for the attached panel

    Owner decisions: gate on EllesmereUI (with its skin child), its master
    third-party switch and our own entry, and PGF's own EllesmereUI skin;
    a profile switch that can never force the skin on. Resumable ledger.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit e6615db9d2f40afa32e8efda08806261b61424d5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:13:59 2026 +0530

    Rework the panel and replace PremadeRegions' region tags

    Owner feedback rounds on the attached panel, in-game:
    - Filters: playstyle and composition multi-selects (Any entry; all
      ticked reads as Any for regions/playstyles, not for composition),
      min leader M+ score, Smart key level (lowest best timed + 1), and
      server regions with none selected passing every region.
    - Toggle PGF Extension Filters: a filtersActive profile setting (panel
      first row and a Master controls extra row) that removes or rewrites
      the managed block; Apply refuses and pgfe_on is false while it is off.
    - Layout: one 26px row pitch, header-only collapse built from clipped
      border copies, swapped min/max art, centered title, 2px gap under
      PGF's dialog drawn above its border, wider dropdowns and buttons,
      tooltips on every option, copy box dimmed without key targeting,
      Apply -> Ctrl+C -> Enter -> Ctrl+V keyboard chain.
    - Region tags: modules/RegionTags.lua tags each Group Finder listing and
      applicant with the leader's colored server region (showRegionTags
      setting), so PremadeRegions is no longer needed; it steps aside while
      PremadeRegions is loaded.
    - Defaults match the owner's reference screenshot.

    Docs synced (schema, data flow, scope, smoke tests, test cases).
    Gate: 264 passed, 1 skipped; luacheck 0/0. Not yet verified in-game.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit e6615db9d2f40afa32e8efda08806261b61424d5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 20:13:59 2026 +0530

    Rework the panel and replace PremadeRegions' region tags

    Owner feedback rounds on the attached panel, in-game:
    - Filters: playstyle and composition multi-selects (Any entry; all
      ticked reads as Any for regions/playstyles, not for composition),
      min leader M+ score, Smart key level (lowest best timed + 1), and
      server regions with none selected passing every region.
    - Toggle PGF Extension Filters: a filtersActive profile setting (panel
      first row and a Master controls extra row) that removes or rewrites
      the managed block; Apply refuses and pgfe_on is false while it is off.
    - Layout: one 26px row pitch, header-only collapse built from clipped
      border copies, swapped min/max art, centered title, 2px gap under
      PGF's dialog drawn above its border, wider dropdowns and buttons,
      tooltips on every option, copy box dimmed without key targeting,
      Apply -> Ctrl+C -> Enter -> Ctrl+V keyboard chain.
    - Region tags: modules/RegionTags.lua tags each Group Finder listing and
      applicant with the leader's colored server region (showRegionTags
      setting), so PremadeRegions is no longer needed; it steps aside while
      PremadeRegions is loaded.
    - Defaults match the owner's reference screenshot.

    Docs synced (schema, data flow, scope, smoke tests, test cases).
    Gate: 264 passed, 1 skipped; luacheck 0/0. Not yet verified in-game.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01UewSqREheLNYgdRt4JXiSd

commit b598f100222e4d582278a4b5d65251c990ecc6f0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:11:08 2026 +0530

    Tick plan milestone M2 (PR #20 open, awaiting go-ahead)

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 424caaf43c031307d3e3cf5fd4eb4518658f36eb
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:10:29 2026 +0530

    Tick plan ledger row 11

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit cc3f5d9b6a0939248bf36ccc51747cb0ef13173d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:10:15 2026 +0530

    Record the 2026-10-09 review and standards-audit bundles

    Whole-branch review (F-001..F-011) and Ka0s standard v2.77.0 audit
    (PGE-01..22). Critical/high and the cheap medium/low findings are fixed
    in the preceding commits; the rest are filed as issues #4-#19. CLAUDE.md
    now points at the audit snapshot.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 0a383b8f69cbc0582f4fe288e3c8019a53ababc4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:07:31 2026 +0530

    Return at once from the dialog hook while stood down

    The HookDialog callback still ran UpdateVisibility (which only hid the
    panel) while stood down; the Global Constraint says every hook body
    returns at once.

    Spec-adversary #8.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 6bdec82ba1ca449e26accc9f404ed1f2d31c63aa
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:06:20 2026 +0530

    Refresh the attached panel on a profile switch

    panelCollapsed lives in the profile, but the profile callbacks did not
    refresh the attached panel, so its layout stayed stale until the dialog
    reopened.

    Review F-010.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 6dafd21a241e2d4ef62218a8b485eea9f2767c67
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:05:44 2026 +0530

    Return no region for a non-string leader name

    The env hook runs inside PGF's per-result loop; Regions.GetRegion assumed
    leaderName was a string. A type check now returns nil instead of raising.

    Review F-011.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 82bf49316a74e75d10ab9ed8ed86ba6e39ba6b63
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:04:27 2026 +0530

    Report the rows Apply ticked; keep the range field on the level

    Apply's message counted the computed targets, not the PGF rows actually
    ticked, and said "0 dungeon(s) targeted" with key targeting off (now
    MSG_APPLIED_NO_TARGETING). After the first Apply the range field stuck to
    the applied range instead of following the level box.

    Review F-008, F-009; spec-adversary #6.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit d1e8c373297f0f4ca8caf0dc787e5871297aba63
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:03:14 2026 +0530

    Load presets over the current filter defaults

    Presets.Load replaced the live filter table wholesale, so a preset saved
    before a filter key existed would drop that key (and the panel would error
    on a missing `regions`). It now lays the preset over a copy of
    CHAR_DEFAULTS.filters, keeping the same live table.

    Review F-007.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit d54dd0f68e4d7e37ab8e4dc439193019ff632288
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:02:13 2026 +0530

    Commit the panel's number boxes only on Enter or focus loss

    The level and age boxes saved on every keystroke: typing `45` stored `4`,
    then rejected `45` while the box still showed it. They now commit the whole
    value on Enter or focus loss, put the stored value back when the entry is
    rejected, and revert on Escape.

    Review F-003.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 5c7dce46f6d9cec05d7bc8e11444ba57f2e2f4f3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 09:00:11 2026 +0530

    Refuse Apply/Clear and hide the panel while PGF is minimized

    Minimized, PGF filters with its mini panel, so Apply wrote the dungeon
    state, searched and printed "Applied" with none of the options in effect.
    Bridge.IsDungeonPanelActive() now gates Apply/Clear (MSG_MINIMIZED) and
    the attached panel's visibility, as Review Focus 3 and spec §5 require.

    Review F-004; spec-adversary #1, #2.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit e835996affce6ab11f9d2fabd5f6c9ac37ddc116
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:58:22 2026 +0530

    Read the player's spec through NS.Compat

    EnvInject called the deprecated GetSpecialization/GetSpecializationInfo
    globals directly, bypassing core/Compat.lua; on a client without them the
    same-spec and same-class-role filters would pass every group. The reader
    now goes through NS.Compat (C_SpecializationInfo first), and the globals
    are gone from .luacheckrc's read_globals so a direct call fails lint.

    Review F-002; audit PGE-01.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit d91a6c7ad60d757bafcc14d585daa3363b11ad1e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:57:41 2026 +0530

    Make the managed block neutral when the env hook does not run

    The block lives in PGF's state and outlives this addon's runtime. After an
    Apply, a stand-down (or an AddOns-list disable, or an uninstall) left
    pgfe_samespec/pgfe_sameclassrole unset, so `nil == 0` hid every dungeon
    listing with no way to Clear from inside the addon. The hook now sets
    env.pgfe_on and Merge writes `( not pgfe_on or ( clauses ) )`.

    Review F-001; spec-adversary #3.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 58156ca3edffd4395c510cd70ca32565033f8d6a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:30:22 2026 +0530

    Record the 0.1.0 automated-test bundle; tick plan ledger row 9

    Release run 20261009-082905 on 2c78ddb: lint 0/0, 186/1/187, complexity
    max CCN 13 with no warnings, perf skipped (no tests/perf.lua). The
    runner's verdict is green, but the tag's release gate stays open until
    the env-hook perf scenarios exist; ANALYSIS.md records that action.
    CLAUDE.md points at the newest record.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 2c78ddbb26f83fdc02b8719bd93372223e7eb8dc
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:29:01 2026 +0530

    Write docs and smoke tests for 0.1.0

    Bring the doc set up to the built addon: ARCHITECTURE gains the PGF
    seams table (PGF 7.6.2 file:line cites), the injected variables, the
    expression block format, an event table and the slash table; the
    module map, data flow, schema, settings, performance and common-task
    docs drop their "stub until Task N" notes. Smoke tests grow to
    APPLY-1..14 with the owner's N=14 reference case. README badge moves to
    186/186, gains Screenshots and troubleshooting rows. test-cases.md
    regenerated.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 04da8263a28b7604bf4d763e65cf6c7f64ee805a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:22:59 2026 +0530

    Tick plan ledger row 8

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 9fea77475bf17e57942fc0fa122a710d473f08d8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:22:52 2026 +0530

    Add the attached filter panel

    modules/Panel.lua builds PremadeGroupsFilterExtensionPanel under PGF's
    dialog in PGF's own look (PortraitFrameTemplateMinimizable, the
    no-portrait minimizable border, FULLSCREEN strata, 23px checkbox rows):
    key targeting with level box and best-timed readout, region chips per
    portal, composition, experienced-leader and max-age options, presets
    (dropdown, Save, Save as, Delete), Apply/Clear and the copyable N-N
    range field. Shown only while the dialog is on the Dungeons category
    and the addon is up; collapse state lives in profile.panelCollapsed.

    tests/wow_mock.lua decorates frames built under PGF's dialog with
    anchors, text, checked state and the min/max callbacks so the panel's
    read-backs can fail.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit 63fbeb51dbaba1d43a83dd112e5b6223805e14b8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:15:24 2026 +0530

    Tick plan milestone M1 (pushed)

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit d821fcde05d301e025c1619e768f72f0e6d30976
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:15:11 2026 +0530

    Tick plan ledger row 7

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit ec88a1d110cf20ede561ef75fbae569976d5cff8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:15:10 2026 +0530

    Add Apply/Clear orchestration and /pgfe apply|clear

    NS.Apply.Run refuses before writing anything on combat, a missing PGF
    seam, a non-dungeon (or minimized-elsewhere) category, invalid options,
    loading season data, nothing untimed, or a damaged/too-long expression;
    otherwise ticks the untimed dungeons, merges the managed expression
    block, commits to PGF and searches when asked. Clear strips the block.
    /pgfe apply searches (typed command = hardware event); /pgfe clear.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

commit f82fcf694b64472b810605fdcd0154621028feba
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date:   Fri Oct 9 08:12:11 2026 +0530

    Tick plan ledger row 6

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SUL3MfVudba8eYtSoqFCjV

This mod has no additional files