1.6.0-release
What's new
tag 60f9ede2d8a0741ec9c62033cd99ad051802edea 1.6.0-release
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 19:24:46 2026 +0530
Release 1.6.0
commit be920e343feec7e33b1d7633befd9b77d6b30a1e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 19:24:46 2026 +0530
Release 1.6.0: version bump, release notes and the gated release run
Release gate (docs/automated-tests/20261009-191829/manifest.json, run at
22838c3 with --release 1.6.0): PASSED on all six conditions.
- Lint: pass, 0 warnings / 0 errors in 59 files
- Tests: pass, 933 passed, 0 failed, 1 skipped (kit diagnostics opt-out
arm, not applicable), 934 total
- Perf: pass, 8 scenarios measured (tests/perf.lua ships, so no skip)
- Complexity: pass, lizard 1.24.0; 13733 NLOC, 1829 functions, avg CCN 1.9
- CCN <= 15: 0 warnings, max CCN 15 (encode in tests/perf.lua, newly
measured)
- Sighted: blindFiles 0 (the first sighted run in this record)
Version 1.5.0 -> 1.6.0 in WhatGroup.toc (## Version), core/WhatGroup.lua
(WhatGroup.VERSION), the pinned tests (tests/test_envsetup.lua,
tests/test_launcher.lua, tests/wow_mock.lua) and the sample output in
docs/slash-dispatch.md. README.md gains the 1.6.0 Version History row
(2026-10-09): the signed-up role in the popup and chat (with the 260 ->
280 default height), the Profiles page, /wg profile, the secret teleport
cooldown fix and the test-preview fixes.
The release bundle docs/automated-tests/20261009-191829/ carries its
ANALYSIS.md, and docs/automated-tests/RESULTS.md has the run's row and
refreshed band dispositions: core/WhatGroup.lua (1340) and
modules/Frame.lua (1384) are now 2 of 3 Accepted release runs, and
tests/test_libka0s.lua (1037) newly crossed into the band.
docs/performance.md's measurement notes and the CLAUDE.md LibKa0s
provenance line are left as they are.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2w6FgfFYw93meWZN9Ahn6
commit 22838c3953e18a64f2389b71d26ad2db1ef689af
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 17:49:57 2026 +0530
SD-FIN-02: sync docs to code (collection sync-docs pass 2026-10-09)
Docs and comment citations reconciled against today's tree: stale counts,
drifted file:line citations, orphan anchors and toolchain gaps, each verified
independently before applying. Comment edits are comment-only. Dead-export
candidates reported, not removed. Green gate run after the edits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2w6FgfFYw93meWZN9Ahn6
commit fe6eaa3f81eeb7bb75a30b0088c73ea685a512df
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:47:39 2026 +0530
WG-STD: Re-read the standard at v2.77.0; sync docs with WG-01..WG-07
Standards reference: WowAddonStandards' feature branch is at v2.77.0.
documentation-§6 still gives the three-place reference as the bare repo
URL (TOC X-Standard, README badge, CLAUDE.md Standards compliance), so
all three stay version-free and unchanged. Every filename-§N citation in
the live tree (frozen audits/reviews/automated-tests/revendor bundles,
libs/ and tests/_kit/ excluded) resolves to an existing ### N. heading
in ../WowAddonStandards/standards/standards/ (877 checked; the one miss
is CLAUDE.md's literal `filename-§N` placeholder). No retired notation
found.
v2.77.0 re-check, events-frames-taint-§8: the named trigger set now
includes C_Spell.GetSpellCooldown, which this addon reads. The register
row said a sweep found zero trigger-set APIs; it is re-swept against the
v2.77.0 list and rewritten: one trigger-set API, read only through
LibKa0s-Compat-1.0 in core/Compat.lua, and every site its startTime /
duration reach meets the MUST (IsSecret before any compare, nil on a
secret pair; the raw pair only to Cooldown:SetCooldown and to the
diagnostics seam behind out:readable). Trigger (1) restated as a value
reaching a line or string builder without passing Compat.IsSecret. The
row's stale core/WhatGroup.lua:896/:904/:912 cites become symbol cites
(WhatGroup:ShowNotification, NOTIFY_ROWS). Cites F-001 and F-008 of
docs/reviews/2026-10-07/.
toc-file-§5 whole-listing re-read: every group is annotated; two TOC
comment cites had drifted one line (core/WhatGroup.lua:108, :220) and
now cite ADDON_LINK_TYPE and the file-scope NS.FONT_MONO assignment.
Docs sync of WG-01..WG-07:
- docs/ARCHITECTURE.md: taint-notes bullet for the secret teleport
cooldown pair; the Compat major's description names IsSecret; the
1500-line census re-measured 2026-10-07 (Frame.lua 1384,
WhatGroup.lua 1340).
- tests/test_surface_parity.lua: IsSecret leaves the Compat ignore list
(WG-01 wired it, so parity now pins it on the library-absent load)
and the comment no longer says nothing here is combat-protected.
- docs/testing.md: the --list Totals counts only cases that run, a
declared skip on its own Skipped row (kit revision 38).
- README.md: the preview FAQ says a test preview leaves the real group
info for /wg show (WG-02's one-shot preview).
- CLAUDE.md: the newest audit snapshot is docs/audits/2026-10-07/.
- .luacheckrc and docs/slash-dispatch.md: drifted core/WhatGroup.lua
line cites (:1100, :353) become symbol cites.
DEPENDENCIES.md needed no change (WG-06/WG-07 already synced it). Test
count unchanged (933 passed, 1 skipped); docs/test-cases.md in lockstep
with --list and equal to the badge. No version bump, no CHANGELOG.
Deviations: the parity ignore-list edit is a test change in a docs item,
made because WG-01 left IsSecret ignored with a now-false comment.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit fe6eaa3f81eeb7bb75a30b0088c73ea685a512df
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:47:39 2026 +0530
WG-STD: Re-read the standard at v2.77.0; sync docs with WG-01..WG-07
Standards reference: WowAddonStandards' feature branch is at v2.77.0.
documentation-§6 still gives the three-place reference as the bare repo
URL (TOC X-Standard, README badge, CLAUDE.md Standards compliance), so
all three stay version-free and unchanged. Every filename-§N citation in
the live tree (frozen audits/reviews/automated-tests/revendor bundles,
libs/ and tests/_kit/ excluded) resolves to an existing ### N. heading
in ../WowAddonStandards/standards/standards/ (877 checked; the one miss
is CLAUDE.md's literal `filename-§N` placeholder). No retired notation
found.
v2.77.0 re-check, events-frames-taint-§8: the named trigger set now
includes C_Spell.GetSpellCooldown, which this addon reads. The register
row said a sweep found zero trigger-set APIs; it is re-swept against the
v2.77.0 list and rewritten: one trigger-set API, read only through
LibKa0s-Compat-1.0 in core/Compat.lua, and every site its startTime /
duration reach meets the MUST (IsSecret before any compare, nil on a
secret pair; the raw pair only to Cooldown:SetCooldown and to the
diagnostics seam behind out:readable). Trigger (1) restated as a value
reaching a line or string builder without passing Compat.IsSecret. The
row's stale core/WhatGroup.lua:896/:904/:912 cites become symbol cites
(WhatGroup:ShowNotification, NOTIFY_ROWS). Cites F-001 and F-008 of
docs/reviews/2026-10-07/.
toc-file-§5 whole-listing re-read: every group is annotated; two TOC
comment cites had drifted one line (core/WhatGroup.lua:108, :220) and
now cite ADDON_LINK_TYPE and the file-scope NS.FONT_MONO assignment.
Docs sync of WG-01..WG-07:
- docs/ARCHITECTURE.md: taint-notes bullet for the secret teleport
cooldown pair; the Compat major's description names IsSecret; the
1500-line census re-measured 2026-10-07 (Frame.lua 1384,
WhatGroup.lua 1340).
- tests/test_surface_parity.lua: IsSecret leaves the Compat ignore list
(WG-01 wired it, so parity now pins it on the library-absent load)
and the comment no longer says nothing here is combat-protected.
- docs/testing.md: the --list Totals counts only cases that run, a
declared skip on its own Skipped row (kit revision 38).
- README.md: the preview FAQ says a test preview leaves the real group
info for /wg show (WG-02's one-shot preview).
- CLAUDE.md: the newest audit snapshot is docs/audits/2026-10-07/.
- .luacheckrc and docs/slash-dispatch.md: drifted core/WhatGroup.lua
line cites (:1100, :353) become symbol cites.
DEPENDENCIES.md needed no change (WG-06/WG-07 already synced it). Test
count unchanged (933 passed, 1 skipped); docs/test-cases.md in lockstep
with --list and equal to the badge. No version bump, no CHANGELOG.
Deviations: the parity ignore-list edit is a test change in a docs item,
made because WG-01 left IsSecret ignored with a now-false comment.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit b02f1d0b2a75353707ee31da9a5b829af82c84bd
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:39:10 2026 +0530
WG-07: Drop the dead bare-global GetAddOnMetadata rung from NS.Meta
Cluster C27 parity with LK-06, MM-07 and PM-09 (no finding id of its
own). The library-absent branch of core/EnvSetup.lua NS.Meta kept a
`type(GetAddOnMetadata) == "function"` rung below C_AddOns that no
admitted client (## Interface 120100, after the 11.0 AddOns purge) can
reach. Meta now answers Env first, then C_AddOns.GetAddOnMetadata, else
nil; its doc comment describes the two-rung ladder. No Compat shim.
- tests/test_envsetup.lua: new "Meta never reads the bare
GetAddOnMetadata global" (Env and C_AddOns absent, a recording spy
planted as the global; asserts zero calls and nil; red under the
bare-global rung) and a source-shape probe that core/EnvSetup.lua
carries no bare-global rung. Both were red before the deletion.
- .luacheckrc: GetAddOnMetadata leaves read_globals (nothing reads it
bare any more; luacheck 0/0).
- docs/module-map.md: the two ladder descriptions name two rungs.
- docs/test-cases.md regenerated, README badge 931 -> 933.
Deviations: the item cites the :109-:110 probe for updating; that probe
scans settings/Slash.lua and settings/Panel.lua for inline copies and
stays valid as is, so the rung-gone assertion is a separate case over
core/EnvSetup.lua. docs/compat-layer.md does not describe the rungs, so
the ladder wording was updated in docs/module-map.md instead.
tests/wow_mock.lua keeps its C_AddOns member, untouched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit c1e704747ad28f472be6e06cbbdacd6e466b6223
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:35:17 2026 +0530
WG-06: Sync docs and comments with the tree; count-free, durable cites
One comment/doc-only sync pass (finding WG-A-03, audit WG-77, reopened):
- core/Compat.lua header and docs/compat-layer.md state the real TOC slot
(after CoreSetup, MediaSetup and Util, before core/WhatGroup.lua)
instead of "loaded first".
- docs/compat-layer.md quotes the standard's documentation-§3 grep
(grep -cE '^\s*function\s+[A-Za-z_][A-Za-z0-9_]*\.' core/Compat.lua),
which answers 9, the three role shims included; the shim table gains
RoleToken, AssignedRole and RoleIconMarkup. docs/ARCHITECTURE.md's
documentation-map row says nine and cites the same grep.
- docs/module-map.md drops the expired performance-§12 exemption wording
for performance.md (the exemption ended 2026-08-06).
- Settings row counts (19/16/11/8, Master/Chat/Popup) become count-free
in docs/ARCHITECTURE.md (## Settings Schema, schema CLI row) and in the
module-map Schema.lua row.
- .luacheckrc and DEPENDENCIES.md cite loader functions by name (build
in tests/loader.lua; Loader.load / Loader.loadSource in the kit loader)
and WhatGroup:OnCombatStateChanged instead of ':707'.
- .pkgmeta screenshot note is count/size-free and says the media/logos
lines also shape the download.
Deviations: also fixed the same drift class outside the cited sites,
because it was false against the tree: docs/profiles.md and
docs/schema.md said "sixteen" profile rows (now 17) and "six
notify.show*" (now 7), made count-free; modules/Frame.lua:589 (now the
cooldownTimer arm in applyTeleportNote) in ARCHITECTURE.md,
module-map.md and frame.md, core/WhatGroup.lua:381 (registerFeatureEvents)
and core/Compat.lua:79-84 (Compat.GetSpellLink) in ARCHITECTURE.md were
converted to symbol citations (documentation-§6). DEPENDENCIES.md's
tests/_kit/loader.lua line cites were correct but converted too, so the
item's 'loader.lua:[0-9]' verify grep is empty. docs/performance.md's
generated sweep table still carries line numbers; left to its own
regeneration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit d65f65ab12d1f8afcadcefd2dad2865923ea1313
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:29:08 2026 +0530
WG-05: Re-measure perf rows; record the bisected showFrameRepeat move
tests/perf.lua re-run on the remediation branch after WG-01/WG-02 (WG-R-06).
docs/performance.md now carries today's figures, dated "Re-measured 2026-10-07":
- combatGateFlipping bytes/iter 1064.1 -> 960.0
- showFrameRepeat api/iter 18.0 -> 19.0 (bytes/iter 1744.5 -> 1744.2, same row)
The 18.0 -> 19.0 api/iter move was bisected before being explained: git bisect
run over tests/perf.lua between 62ff31e (the 2026-09-24 measurement commit) and
HEAD, in a throwaway detached worktree under /tmp (removed and pruned after).
First bad commit: WhatGroup@2ed2aa5 (GI-WG-01, WhatGroup#1), whose popup Role
row adds one fields.role:SetText to every PopulateFields. The cause sentence
sits beside the row. The combatGateFlipping byte drop was not bisected (the
item asks only for the api move) and is recorded as a re-measure only.
The intro paragraph gains one sentence saying rows marked Re-measured replace
their earlier figures. No code change.
Deviations: the showFrameRepeat bytes/iter cell was also refreshed (1744.5 ->
1744.2) so the whole row matches today's run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit bd0807f632292d608455bdd2667ee83acb7e9188
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:25:32 2026 +0530
WG-04: Size tooltips and Frame.lua comment stop restating defaults
The Popup > Layout Height tooltip said "The default 260 is the size the
popup shipped at" while defaults/Profile.lua ships 280. Both size
tooltips now read "<Width|Height> of the group-info popup, in pixels."
with no figure (the slider already shows the value), and the
modules/Frame.lua size comment now says the shipped defaults live in
defaults/Profile.lua (C.frame.width / C.frame.height) instead of
claiming they ARE 420 / 260.
New test pins that neither size tooltip states a number (red before,
green after). docs/test-cases.md regenerated; README badge 931/931.
No locale tables carry the string; no behaviour change.
Finding: WG-R-05 (review F-005).
Deviations: the Width tooltip restated 420 the same way and is fixed
identically, as the item allows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 9071a8cc9db092303111895f0135ece85c601ccd
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:22:21 2026 +0530
WG-03: Route the stand-down's owed-Hide registration through the helper
NS.StandDown's transient PLAYER_REGEN_ENABLED registration (owed a
protected Hide when the addon is switched off in combat) was the one bare
self:RegisterEvent left in the addon. It now goes through
NS.SafeRegisterEvent(self, "PLAYER_REGEN_ENABLED", "OnDisabledCombatEnded",
NS.RejectedEvents), so every registration is pcalled
(events-frames-taint-§1) and docs/ARCHITECTURE.md's "never a bare
self:RegisterEvent" claim is true.
tests/test_disabled.lua gains a pin using the kit mock's __badEvents: with
PLAYER_REGEN_ENABLED refused after enable, Set('enabled', false) in combat
with an owed Hide completes the stand-down without raising, leaves nothing
registered, keeps the popup at alpha 0, and records the name once in
NS.RejectedEvents. Red first against the bare call
("core/WhatGroup.lua:437: Attempt to register unknown event").
Ripples: the NS.RejectedEvents and CoreSetup comments that named
registerFeatureEvents as the sole caller now name both callers;
ARCHITECTURE.md's event paragraph covers the transient registration;
docs/test-cases.md regenerated and README badge 929 -> 930.
Finding: WG-A-01.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 38b89d56a315bb384c52a2ccb2a6bf60ffc75298
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:19:13 2026 +0530
WG-02: address review — a preview the gate hides is dropped, not withheld
applyVisibility's gate-hide branch set gateWithheld for a one-shot preview
just as for a real show. In a fight the soft hide fires no OnHide; the real
Hide that settles it at PLAYER_REGEN_ENABLED ran endPreview (refilling the
fields from pendingInfo) and the restored gateWithheld then let the re-show
arm open the REAL capture the player never asked to see. The branch now
captures previewInfo before the hide and, when the hide took a one-shot
preview down, ends the preview instead of withholding it, matching
declineShow. Test mode keeps its bypass.
Tests: two test_testmode cases (outOfCombat + pending capture: RunTest,
REGEN_DISABLED, REGEN_ENABLED leaves the popup down and nothing withheld;
the same with no capture leaves gateWithheld false), both red before the
fix. docs/frame.md One-shot preview names the combat-edge hide too;
docs/test-cases.md regenerated; badge 929/929.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 5f5f617cc3d794e75f406bffad3c4a3f88030cea
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:13:47 2026 +0530
WG-02: RunTest previews without clobbering pendingInfo or building stood-down
RunTest (/wg test notify and the panel's Test button) no longer writes
self.pendingInfo. It hands the sample to ShowNotification(info) (new
optional argument, defaulting to pendingInfo) and to ShowFrame(preview)
(new optional argument), which holds it in modules/Frame.lua's existing
previewInfo and renders it through shownInfo() as a one-shot preview.
endPreview() ends it on every real hide (OnHide), on the player's dismissal
(dismissPopup, covering the combat soft hide), on the next ShowFrame and
at stand-down, refilling the fields from the real capture out of combat.
So /wg show, the chat details link and the launcher's Show window open the
real capture (or nothing) afterwards. A preview asked for in combat is
replayed as the preview at combat end; one the visibility gate declines is
dropped, never withheld for the re-show arm (the decline branch moved into
declineShow to keep ShowFrame inside CCN 15). The gate's test-mode bypass
and FrameSnapshot.testMode now read NS.State.testMode, since previewInfo
is no longer test mode's alone. Test mode's own record is untouched.
While stood down RunTest prints the chat preview only and calls no
ShowFrame: no popup, secure button or UISpecialFrames proxy is built and
nothing is gate-withheld, so re-enabling no longer shows the sample unasked.
core/WhatGroup.lua reloadProfile: comment-only rewording (idempotent,
normally a no-op once the account-wide stamp is current; profile-scoped
steps walk every stored profile). Database.lua unchanged.
Tests: three new test_testmode cases (preview keeps the real capture and
/wg show reopens it; ESC + launcher Show window; combat defer replays the
preview), the stood-down lifecycle case rewritten (chat preview, no frame,
pendingInfo nil, nothing shown after re-enable), and the lifecycle, panel,
testmode and debuglog assertions that read the sample from pendingInfo
updated. Docs: common-tasks, slash-dispatch, frame (new One-shot preview
section), data-flow, ARCHITECTURE, scope and debug.md (the [Test] line
now reads "synthetic capture previewed"). module-map.md makes no injection
claim and is unchanged. docs/test-cases.md regenerated; badge 927/927.
Findings: WG-R-03, WG-R-04, WG-R-07.
Deviation: the [Test] debug line was reworded from "injected" to
"previewed" (and its pin test renamed) because nothing is injected now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit fcd0be739b2c3ae4402e0908579294ce2ec8752e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:02:08 2026 +0530
WG-01: survive secret teleport cooldowns: unknown, not a raise
Compat.GetSpellCooldownRemaining compared and subtracted startTime and
duration, which LibKa0s-Compat-1.0 documents as possibly secret in
combat. A raise there killed the popup's repeating ticker (AceTimer
re-arms only after the callback returns) and aborted ShowNotification
before ShowFrame on a join in combat.
- core/Compat.lua: add Compat.IsSecret (the library's IsSecret, else
the three-line issecretvalue stub per anti-patterns #47). The reader
now answers `remaining, isActive`; a secret start or duration returns
nil, isActive (unknown) with no compare or arithmetic, never 0 (0
would report an on-cooldown teleport as READY). Plain readings keep
the old contract (number >= 0, GCD floor). GetSpellCooldownTimes'
comment records that a secret pair goes to Cooldown:SetCooldown as-is.
- core/WhatGroup.lua teleportValue: '(on cooldown)' when remaining > 0,
or remaining is nil and isActive; no tag when unknown and inactive.
- modules/Frame.lua: resolveTeleportState derives onCooldown the same
way; the button, swipe, note and debug line read it. An unknown
active cooldown renders "On cooldown" with no figure; the ticker
keeps its last text and stays armed on a nil tick.
- modules/Diagnostics.lua: header comment names the new guard.
- .luacheckrc: grant issecretvalue (read only by the stub).
- Tests on the kit's secret simulator (kit revision 38):
mock.secretCooldown seeds a cooldown table whose startTime/duration
are Kit.secret wrappers and isActive is plain; T.installSecretValue /
T.isSecret exposed from tests/run.lua; every case restores
issecretvalue. Ten new cases (compat x5, frame x3, notify x2); the
seven that touch the reader were confirmed red against the unguarded
compare.
- Docs: secret-arm notes in compat-layer.md and module-map.md, plus
frame.md and data-flow.md where they stated the old contract. Rolled
line cites the edits moved (Frame.lua:587->589, WhatGroup.lua
887/895/903/1018/1091 -> +9, Compat.lua:68-73 -> 79-84).
docs/test-cases.md regenerated; README badge 914 -> 924.
Findings: WG-R-01 (verified remediation: nil+isActive, not 0,false),
WG-R-02 (built on the kit simulator, no local mock.secret).
Deviation: the GetSpellCooldown mock already returns any seeded table,
so it gained a helper (mock.secretCooldown) rather than a new mode.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 3b9093739fc2f13e08bc1be1541a2ce0325d2839
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 19:51:30 2026 +0530
RV-WG: re-vendor LibKa0s v1.71.0; span bundle v1.69.0-v1.70.0
Copy libs/LibKa0s/ and tests/_kit/ whole from the local annotated tag
v1.71.0 (cb274a4) and roll the CLAUDE.md provenance line to v1.71.0 in
the same commit. Minors: Env 2, Slash 20, SlashParse 2, OptionsIdList 4,
WidgetsLineChart 3, WidgetsAutocomplete 2; kit revision 37 -> 38
(inventory.lua, new secrets.lua).
Kit 38's --list Totals count only the cases that run: docs/test-cases.md
is regenerated (diagnostics contract 9 -> 8, a Skipped row, Total 914).
The README badge already read 914, so it equals the new Total and does
not change.
Write docs/revendor/2026-10-07-v1.71.0/ (delta, candidates, decisions,
summary; Kit.secret recorded as adopted in this run by WG-01, Widgets
surfaces not adopted, Env/Slash/OptionsIdList carried with no code
change) and the span bundle docs/revendor/2026-10-07-v1.69.0-v1.70.0/
for the sweep re-vendors 9677d99 and 3fd8a2f (base v1.68.1). The
AUDIT.md tag-vs-recorded loop now prints nothing.
De-tag the stale v1.68.1 stamps: docs/testing.md's "as this is written"
paragraph, docs/debug.md and docs/debug-content.md now point at the
CLAUDE.md provenance line and keep only the DebugLog minors.
Finding: WG-A-02 (audit WG-71).
Deviations: none in substance. The README badge needed no edit (already
914). The span bundle's line 1 uses the verified remediation's form
('Delta: LibKa0s v1.69.0 -> v1.70.0 (span: v1.69.0 v1.70.0)'), not the
raw audit's v1.68.1 base form; the base is stated in the body.
Gates: lua tests/run.lua 914 passed / 0 failed / 1 skipped (vendor gate
green); luacheck 0/0 in 59 files; lizard no function above CCN 15;
largest authored file 1319 lines; diff -r of both payloads vs the tag
empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 0f7afcbabb84b21818b5469e43e6f8eb331f336a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 16:52:03 2026 +0530
RA-00: record 2026-10-07 standards audit and review bundles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 3fd8a2f356f4fde6fdfbe174fe4c24bdbc57901b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 11:39:17 2026 +0530
chore: re-vendor LibKa0s v1.70.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4XiFWzQrd9ee19aBpkVmt
commit 3fd8a2f356f4fde6fdfbe174fe4c24bdbc57901b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 11:39:17 2026 +0530
chore: re-vendor LibKa0s v1.70.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4XiFWzQrd9ee19aBpkVmt
commit 9677d990f98cfe618afbef61c21de1267ad95dd9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 6 14:53:44 2026 +0530
chore: re-vendor LibKa0s v1.69.0 (kit 37; adds the line chart widget)
Also lists WidgetsLineChart.lua in tests/loader.lua to match LibKa0s.xml.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4XiFWzQrd9ee19aBpkVmt
commit c029cb7090d925b73f0a3dec1e3a74b2f9a68c7b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 15:12:42 2026 +0530
DC-REV-01: re-vendor LibKa0s v1.68.1 (kit revision 36; rename-only)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the annotated tag v1.68.1 (9000cbd) via
git archive, CLAUDE.md provenance line rolled v1.68.0 -> v1.68.1 in the same commit. No LibStub
minor moves in any of the 32 library files; the library payload was already byte-identical to the
tag. Kit revision 35 -> 36: framework.lua (Kit.VERSION), run-automated-tests.sh and test_eol.lua
name the /dev-copilot:* commands where they named /wow-addon:*. Nothing added, nothing deleted.
Vendor parity: diff -r of both payloads against the tag is empty, with and without
--strip-trailing-cr.
Live vendor stamps roll to v1.68.1 (debug.md, debug-content.md, testing.md's "the two agree"
paragraph). No live prose named the vendored kit as revision 35; the three "kit revision 35"
mentions cite where the sighted complexity shadow arrived and stay. docs/test-cases.md matches
--list: no case moved.
Frozen bundle docs/revendor/2026-10-04-v1.68.1/ (delta, candidates, decisions, summary). No
contract blocker (no major moved). Zero adoption candidates, so no interview; nothing adopted,
nothing declined, no issue filed.
Gates (ka0s-bounded):
- tests: before 914 passed / 0 failed / 1 skipped / 915 total; after 914 / 0 / 1 / 915
- luacheck: 0 warnings / 0 errors in 59 files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit c029cb7090d925b73f0a3dec1e3a74b2f9a68c7b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 15:12:42 2026 +0530
DC-REV-01: re-vendor LibKa0s v1.68.1 (kit revision 36; rename-only)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the annotated tag v1.68.1 (9000cbd) via
git archive, CLAUDE.md provenance line rolled v1.68.0 -> v1.68.1 in the same commit. No LibStub
minor moves in any of the 32 library files; the library payload was already byte-identical to the
tag. Kit revision 35 -> 36: framework.lua (Kit.VERSION), run-automated-tests.sh and test_eol.lua
name the /dev-copilot:* commands where they named /wow-addon:*. Nothing added, nothing deleted.
Vendor parity: diff -r of both payloads against the tag is empty, with and without
--strip-trailing-cr.
Live vendor stamps roll to v1.68.1 (debug.md, debug-content.md, testing.md's "the two agree"
paragraph). No live prose named the vendored kit as revision 35; the three "kit revision 35"
mentions cite where the sighted complexity shadow arrived and stay. docs/test-cases.md matches
--list: no case moved.
Frozen bundle docs/revendor/2026-10-04-v1.68.1/ (delta, candidates, decisions, summary). No
contract blocker (no major moved). Zero adoption candidates, so no interview; nothing adopted,
nothing declined, no issue filed.
Gates (ka0s-bounded):
- tests: before 914 passed / 0 failed / 1 skipped / 915 total; after 914 / 0 / 1 / 915
- luacheck: 0 warnings / 0 errors in 59 files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit dd4603cd65fffdc15b37c9e217f888c304a52014
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:33:15 2026 +0530
DC-REN-02: automated-tests README names /dev-copilot:bump-version as the release-gate evaluator
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit dd4603cd65fffdc15b37c9e217f888c304a52014
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:33:15 2026 +0530
DC-REN-02: automated-tests README names /dev-copilot:bump-version as the release-gate evaluator
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit 9dc721d59ce596fe356d48785a692d2c5105c551
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:21:27 2026 +0530
DC-REN-01: point slash-command references at the dev-copilot plugin
The wow-addon plugin merged into dev-copilot (v2.0.0). Live docs and
test comments now name /dev-copilot:* (wow-* for the addon-only
commands). No assertion changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit 8c45687a63c2d78c289b67b58ca793552de29eef
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 3 12:48:13 2026 +0530
SD-FIN-01: sync docs; CLAUDE.md back to the documentation-§2 stub
CLAUDE.md 115 -> 46 lines, pointing at the 2026-09-23 audit; kit suite count five; badge rule wording; slash-dispatch citations past EOF fixed; cap census; MASTER_GROUP cited by name.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GBEbct8mwzFqZSG1oTkv8f
commit ea4bff6dae18e42a389d3aa7e564d09a9ff3a3f7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 23:38:29 2026 +0530
TP-WG-01: re-vendor LibKa0s v1.68.0 (WidgetsDragHandle minor 4)
Both payloads copied whole from the local tag v1.68.0 (cc9f5eb); only
libs/LibKa0s/WidgetsDragHandle.lua moves (DRAG_MINOR 3 -> 4, Widgets key
12.1.4), kit revision 35 unchanged. The provenance line rolls to v1.68.0
in the same commit, with the "as vendored from" stamps in docs/debug.md,
docs/debug-content.md and docs/testing.md.
The new optional tooltipPlace hook is declined as not applicable:
WhatGroup draws no drag strip, so there is no tooltip to place. Not a
gap, so no issue filed. Bundle: docs/revendor/2026-10-02-v1.68.0/.
Gate: 914 passed / 1 skipped / 915 (vendor-sync green, inventory and
badge unchanged), luacheck 0/0 in 59 files, sighted lizard max CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit ea4bff6dae18e42a389d3aa7e564d09a9ff3a3f7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 23:38:29 2026 +0530
TP-WG-01: re-vendor LibKa0s v1.68.0 (WidgetsDragHandle minor 4)
Both payloads copied whole from the local tag v1.68.0 (cc9f5eb); only
libs/LibKa0s/WidgetsDragHandle.lua moves (DRAG_MINOR 3 -> 4, Widgets key
12.1.4), kit revision 35 unchanged. The provenance line rolls to v1.68.0
in the same commit, with the "as vendored from" stamps in docs/debug.md,
docs/debug-content.md and docs/testing.md.
The new optional tooltipPlace hook is declined as not applicable:
WhatGroup draws no drag strip, so there is no tooltip to place. Not a
gap, so no issue filed. Bundle: docs/revendor/2026-10-02-v1.68.0/.
Gate: 914 passed / 1 skipped / 915 (vendor-sync green, inventory and
badge unchanged), luacheck 0/0 in 59 files, sighted lizard max CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit be87bc9f1e249c19af58d3c70ede2664cffcb2f6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 10:25:09 2026 +0530
CA-FIN-02: doc sync before merge
module-map.md: OptionsSetup descriptor lists addonName; addonName header count now nine/twelve. testing.md: test_libka0s pins three folder-name arguments, not two.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit be87bc9f1e249c19af58d3c70ede2664cffcb2f6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 10:25:09 2026 +0530
CA-FIN-02: doc sync before merge
module-map.md: OptionsSetup descriptor lists addonName; addonName header count now nine/twelve. testing.md: test_libka0s pins three folder-name arguments, not two.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 1b1b67e3b128804e41d66b83ed81e86cc7c7d1e9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 01:47:13 2026 +0530
CA-WG-NM: pass addonName on the Options descriptor (LibKa0s#42)
settings/OptionsSetup.lua keeps its first vararg as `addonName` and hands
it to lib:New beside parentTitle/mainPanelName, so the IdList help-mark art
resolves to this addon's vendored info glyph instead of the client disc.
Latent here: no list in this addon carries help yet. The degraded
(library-absent) branch is untouched.
Test first: tests/test_libka0s.lua source guard on the vararg and the
descriptor field, plus an on-disk assert for libs/LibKa0s/media/icons/info.tga.
Docs: test-cases.md regenerated (915), README badge 914/914, PANEL-20 smoke
check with its index range and Pending sign-off row, and the three
OptionsSetup.lua citations that moved by three lines (TOC, performance.md,
slash-dispatch.md).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 9d377b5c197250207935bb7d71d04f8052c9a4ab
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 01:40:23 2026 +0530
CA-WG-RV: re-vendor LibKa0s v1.67.0 (Core 10, Options 28, OptionsIdList 3; kit 35)
Both payloads copied whole from the local tag v1.67.0 (git archive, 0bccf4c; ../LibKa0s HEAD is
the tag's commit, tree clean); CLAUDE.md provenance rolls v1.66.0 -> v1.67.0 in the same commit.
Three library files move: Core 9 -> 10 (MakeResizable canResize / onResizeStop / gripParent),
Options 27 -> 28 (addonName docblock), OptionsIdList 2 -> 3 (loaded-addon guard on the help art).
The kit is byte-identical (revision 35). Nothing added or removed upstream, nothing to delete.
Vendor parity: diff -r against the tag archive and diff -r --strip-trailing-cr against
../LibKa0s/LibKa0s are empty.
No consumer test broke: WhatGroup calls neither MakeResizable nor O.IdList. Live stamps rolled:
docs/testing.md's provenance tag and the "as vendored from" lines in docs/debug.md and
docs/debug-content.md. Frozen bundle docs/revendor/2026-10-02-v1.67.0/ (01_DELTA, 02_CANDIDATES,
05_SUMMARY): addonName goes to CA-WG-NM; Core 10's grip fields have no consumer here.
Gate: tests 913 passed / 1 skipped / 914 before and after (docs/test-cases.md regenerated, no
diff; README badge unchanged); luacheck 0/0 in 59 files; sighted complexity pass, maxCcn 15,
blindFiles 0, 1791 functions (run bundle not kept).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit c3f0fa3e49e9211735b7057897fd013d487bc944
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 00:40:58 2026 +0530
Re-point 11 stale line citations in comments
Five moved with the Role row (GI-WG-01): the TOC's core/WhatGroup.lua:108 and :220 and
settings/Schema.lua:418, .luacheckrc's Schema.lua:275, DebugLogSetup's WhatGroup.lua:190. Six were
already stale: WhatGroup.lua:1091, DebugLogSetup.lua:142 (twice), OptionsSetup.lua:187,
tests/run.lua:97 and tests/loader.lua:129. Each now lands on the line it describes. Comment only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit c3f0fa3e49e9211735b7057897fd013d487bc944
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 00:40:58 2026 +0530
Re-point 11 stale line citations in comments
Five moved with the Role row (GI-WG-01): the TOC's core/WhatGroup.lua:108 and :220 and
settings/Schema.lua:418, .luacheckrc's Schema.lua:275, DebugLogSetup's WhatGroup.lua:190. Six were
already stale: WhatGroup.lua:1091, DebugLogSetup.lua:142 (twice), OptionsSetup.lua:187,
tests/run.lua:97 and tests/loader.lua:129. Each now lands on the line it describes. Comment only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 70036d332bf80545e02fa3971552bb7aa0806086
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 00:13:41 2026 +0530
GI-FIN-02: record the 2026-10-02 smoke passes; doc sync
POPUP-9, TEST-12 and LFG-5..8 (WhatGroup#1, the Role row) passed in the owner's 2026-10-02
client run and leave Pending sign-off; PANEL-7/8 now expect the 280px default height. Doc sync
re-points core/WhatGroup.lua and core/Compat.lua line citations in performance.md,
ARCHITECTURE.md and slash-dispatch.md.
Gate: 913 pass / 0 fail / 1 skip; luacheck 0/0 in 59 files; vendor diff empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 70036d332bf80545e02fa3971552bb7aa0806086
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 00:13:41 2026 +0530
GI-FIN-02: record the 2026-10-02 smoke passes; doc sync
POPUP-9, TEST-12 and LFG-5..8 (WhatGroup#1, the Role row) passed in the owner's 2026-10-02
client run and leave Pending sign-off; PANEL-7/8 now expect the 280px default height. Doc sync
re-points core/WhatGroup.lua and core/Compat.lua line citations in performance.md,
ARCHITECTURE.md and slash-dispatch.md.
Gate: 913 pass / 0 fail / 1 skip; luacheck 0/0 in 59 files; vendor diff empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 1f7bfca2061f2672ca5a41582819ea44c9e1525c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 14:15:07 2026 +0530
GI-WG-01R: move dropApplication's header comment back above dropApplication
The stampInviteRole and carryRole helpers were inserted between
dropApplication's "Clear BOTH sides" comment and the function, so the
comment described stampInviteRole. Comment-only move, CRLF kept.
Suite totals unchanged: 913 passed / 0 failed / 1 skipped before and after.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 2c0fecb325198f3a202180efd828d732b4ad54a1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 14:10:44 2026 +0530
GI-WG-RVR: point the release complexity step at the kit runner, not raw lizard
docs/common-tasks.md's release step and docs/automated-tests/README.md's
gate table still named the raw `lizard -l lua ...` command, which is blind
in Lua and not the gate. Both now name
`bash tests/_kit/run-automated-tests.sh --suite complexity` (sighted shadow,
-L 1500, function-count parity) and the tag condition blindFiles 0, matching
docs/testing.md and DEPENDENCIES.md. Docs only; suite totals unchanged
(913 passed, 0 failed, 1 skipped, 914 total).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 2ed2aa573faa909d4b63375030f3b0d3029f65ac
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 14:05:42 2026 +0530
GI-WG-01: show the signed-up role in the popup and (toggle) chat (#1)
Role capture, most authoritative first (Labels.GetRoleLabel): the leader-assigned role
(NS.Compat.AssignedRole, UnitGroupRolesAssigned("player"), nil for NONE), then the role the
application carries (GetApplicationInfo's 5th return or res.role; ResolveSearchResultID now
returns (resultID, role); stamped onto the paired capture at "invited" and read again on the
fresh capture at "inviteaccepted", where the fresh role wins only when it has one), then the
roles offered at apply time (the ApplyToGroup hook now reads tankOK/healerOK/damageOK into
captured.appliedRoles, joined " / "). Each token renders as Blizzard's TANK/HEALER/DAMAGER with
the tiny role icon (NS.Compat.RoleIconMarkup over CreateAtlasMarkup). Secret-safe: client values
only reach type() and NS.SafeToString (NS.Compat.RoleToken) before any comparison or lookup.
Popup: a Role row after Leader, always drawn, dim em-dash when unknown or with no capture;
Playstyle re-anchors to it, the teleport label and button follow. Chat: a Role row after Leader
behind notify.showRole (default on, omitWhenNil). Schema row notify.showRole (Chat > Text, last
so the six toggles keep their pairs), NS.C default, "Role:" locale string, SampleInfo role
DAMAGER for test mode. /wg diagnostics prints role=<5th return> per client application so the
undocumented position can be checked in game. The "invited" arm is no longer empty, so its
`luacheck: ignore 542` pragma is gone (.luacheckrc, test_lintconfig and testing.md comments).
Deviation from 02a: popup height default 260 -> 280, not 278: frame.height's slider has step 10,
and 278 would be a default the slider cannot reach. Clamp range unchanged.
Tests first (red against the previous code: 34 failures incl. the re-indexed popup fields):
test_capture (+8), test_labels (+6), test_notify (+5), test_frame (+4; fields helper re-indexed
for the new row; default height 280), test_settings (+2; Chat tab 8 -> 9 rows; default height
280), test_diagnostics (+1). Mock: UnitGroupRolesAssigned, CreateAtlasMarkup, TANK/HEALER/DAMAGER,
mock.applicationRoles as GetApplicationInfo's 5th return.
Docs: data-flow.md (role section, hook signature, captured fields, flow), frame.md (row table,
420x280), compat-layer.md (three role shims), module-map.md, schema.md, settings-panel.md,
ARCHITECTURE.md, debug.md, scope.md, common-tasks.md, README (feature line, FAQ size, badge),
smoke-tests.md (LFG-5..LFG-8, TEST-12, POPUP-9; POPUP-1, PANEL and COMBAT expectations updated).
Tests: 887 passed / 1 skipped / 888 -> 913 / 1 / 914. luacheck 0/0. Sighted complexity: pass,
maxCcn 15, warnings 0, blindFiles 0 (LFG_LIST_APPLICATION_STATUS_UPDATED CCN 13,
ResolveSearchResultID 7, carryRole 7). core/WhatGroup.lua 1313 lines, modules/Frame.lua 1319.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 1d64539121b9150d44e460e40547df8384d5415e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 13:52:03 2026 +0530
GI-WG-RV: re-vendor LibKa0s v1.66.0 (kit 35), wire test_lizard_sighted, record sighted complexity
Both payloads copied whole from the local tag v1.66.0 (git archive, e4c5ef7); CLAUDE.md
provenance rolls v1.65.0 -> v1.66.0 in the same commit. New files: WidgetsReorder.lua,
SlashParse.lua, PerfSampler.lua, PerfCommands.lua, tests/_kit/lizard_sighted.lua and
test_lizard_sighted.lua; nothing removed upstream. Minors: Widgets 12, DebugLog 19, Slash 19,
OptionsWidgets 34, OptionsTabs 8, Perf 14; kit revision 35. Vendor parity: diff -r against the
tag is empty for both payloads (bytes and --strip-trailing-cr).
tests/loader.lua names every LibKa0s file, so it gains the four new library files in XML order.
tests/run.lua declares { name = "test_lizard_sighted", dir = "tests/_kit/" }. No consumer test
broke; the host parse adapter's two-argument lib.ParseValue call is unchanged by Slash 19.
CLAUDE.md quotes no raw lizard command; docs/testing.md's suite table and DEPENDENCIES.md's
evidence line and command block now name `bash tests/_kit/run-automated-tests.sh --suite
complexity`. docs/debug.md and docs/debug-content.md cite DebugLog minor 19 / version 19.2.1.
Frozen bundle docs/revendor/2026-10-01-v1.66.0/ (candidates listed, not interviewed: GI-LK-13),
plus the span bundle 2026-10-01-v1.64.0-v1.65.0/ for the two tags vendored without one.
Sighted complexity suite: pass, maxCcn 15, warnings 0, blindFiles 0 (1750 functions listed;
raw lizard listed 1693), bandFiles 3, overCapFiles 0. No newly revealed function above CCN 15.
The suite's one-suite run bundle was not kept (release bundles are full four-suite runs).
Tests: 879 passed / 1 skipped / 880 before -> 887 / 1 / 888 after (+8 test_lizard_sighted).
docs/test-cases.md regenerated; README badge 887/887. luacheck 0/0 in 59 files.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 5ab7efac30309ba4613225735ca6ee8220cc7c51
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:12:01 2026 +0530
DG-WG-01: adopt: docs say which debug lines are the library's; smoke DIAG-31 to DIAG-33
- docs/debug.md Coverage: a "whose line it is" rule (Debug, Init, Cmd, Lifecycle, the library half
of Cfg, Launcher and [Set] <path> = <value> are the library's); the [State] row becomes the
library's [Lifecycle] row; new [Cmd] row; Cfg gains the combat lock's refusals and the park's
flush line; Launcher's state lines go through the at-enable queue; Migrate lands on the first
enable; the change-gated lines name the console's gate. DebugLog contract cites 18.2.1 (v1.65.0).
- docs/debug-content.md tag vocabulary and the library-lines list, docs/common-tasks.md's reading
guide and docs/module-map.md's DebugErrorOnce and Lifecycle descriptor entries follow.
- docs/smoke-tests.md: DIAG-31 (a Slash refusal in the console), DIAG-32 (a Lifecycle edge,
once each, no [State] line), DIAG-33 (the launcher's registration on the first enable), in the
index, the re-vendor occasion row and Pending sign-off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 5ab7efac30309ba4613225735ca6ee8220cc7c51
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:12:01 2026 +0530
DG-WG-01: adopt: docs say which debug lines are the library's; smoke DIAG-31 to DIAG-33
- docs/debug.md Coverage: a "whose line it is" rule (Debug, Init, Cmd, Lifecycle, the library half
of Cfg, Launcher and [Set] <path> = <value> are the library's); the [State] row becomes the
library's [Lifecycle] row; new [Cmd] row; Cfg gains the combat lock's refusals and the park's
flush line; Launcher's state lines go through the at-enable queue; Migrate lands on the first
enable; the change-gated lines name the console's gate. DebugLog contract cites 18.2.1 (v1.65.0).
- docs/debug-content.md tag vocabulary and the library-lines list, docs/common-tasks.md's reading
guide and docs/module-map.md's DebugErrorOnce and Lifecycle descriptor entries follow.
- docs/smoke-tests.md: DIAG-31 (a Slash refusal in the console), DIAG-32 (a Lifecycle edge,
once each, no [State] line), DIAG-33 (the launcher's registration on the first enable), in the
index, the re-vendor occasion row and Pending sign-off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 0428c13aeb02958a5546630a074f5b3bb6bce8d6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:07:00 2026 +0530
DG-WG-01: adopt the library's debug lines: Slash and Lifecycle take the sink, the console's change gate and at-enable queue replace the host's own
- settings/Slash.lua and core/LifecycleSetup.lua pass `debug` (Slash minor 18, Lifecycle minor 3);
Options and Launcher already did. core/LauncherSetup.lua passes `debugAtEnable`, so Register's
state lines land the first time logging is turned on.
- core/WhatGroup.lua drops its own [State] stand-down / stand-up lines: the library's
[Lifecycle] line is the edge now, one line, not two.
- NS.DebugErrorOnce keeps its call sites and its key but its memory is D.DebugOnce's; the
teleport state line in modules/Frame.lua is D.DebugChanged under one key, re-armed per show by
D.DebugForget (the gated line gains an " on cooldown" suffix, since the gate compares the line
it writes). Both are re-armed by Clear and by turning logging on, which the copies never were.
- core/Database.lua's [Migrate] line goes through D.DebugAtEnable: the login run is at
OnInitialize with the flag off, so it never landed before.
- tests/test_library_lines.lua (8 cases) pins each library-owned line landing here once; the
Lifecycle pins in test_debuglog re-pin to the library's line with no host copy; the two [Init]
cases find the summary after the bracket (the held lines follow it). 879/879.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit fff8fb8fbc8d65fd9b0da6c2384c437326f77f55
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 00:54:45 2026 +0530
DG-WG-01: re-vendor LibKa0s v1.65.0 (kit 34 unchanged); loader and DebugLog stub carry DebugLogGates
Whole-folder copy of libs/LibKa0s/ from the local tag v1.65.0 (tests/_kit/ is byte-identical at
revision 34). CLAUDE.md provenance rolls to v1.65.0 in the same commit. tests/loader.lua loads the
new DebugLogGates.lua after DebugLogDiagnostics.lua, as LibKa0s.xml does, and the library-absent
DebugLog stub gains DebugOnce / DebugChanged / DebugForget / DebugAtEnable as no-ops so the
surface-parity case holds. docs/testing.md's vendor-gate note names v1.65.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a680bcd6d9680be64f6ddb220db01bb695d18c1b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:51:32 2026 +0530
DL-FIN-01: sync docs (module map names NS.DebugErrorOnce, SchemaSetup in the Settings load order, ten wiring files)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a680bcd6d9680be64f6ddb220db01bb695d18c1b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:51:32 2026 +0530
DL-FIN-01: sync docs (module map names NS.DebugErrorOnce, SchemaSetup in the Settings load order, ten wiring files)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 002e470de9a340f58b878a3a8321a6992e0c9a02
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:21:48 2026 +0530
DL-WG-04: README uses bullets, never numbered lists (standard v2.72.0)
README.md's two numbered lists (the four Group Finder steps under Usage and the Reporting a bug
steps) become "- " bullets, markers only: the step names (Apply, Join, Teleport, Close it) and the
"takes four steps" lead-in already carry the order, and nothing cites a step by number. Reporting a
bug is now exactly documentation-§1 item 9's v2.72.0 fixed body with /wg. tests/test_doc_structure.lua
pins the bulleted text. No live standards-version stamp to refresh; test count unchanged (871).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit b28647410f701d9ca7e6ba099f0ccf6520ebf42a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 20:12:38 2026 +0530
DL-WG-03: re-vendor the final LibKa0s v1.64.0 (kit 34); diagnostics turns logging on for the session
Both payloads copied whole from the moved local tag v1.64.0 (5745222) and
normalized to .gitattributes: DebugLog 15 -> 17 (the orange Diagnostics link
in the console's title bar, beside the Debug On/Off toggle) and
DebugLogDiagnostics 1 -> 2, whose RunDiagnostics() calls SetEnabled(true)
before it writes when logging is off (standard v2.71.0, debug-logging-§14).
Kit revision 34 rewrites the contract case to "turns it on for the session"
and adds the opt-out case (skipped here: WhatGroup keeps the default) and the
already-on case. CLAUDE.md provenance stays v1.64.0. The standards reference
needs no stamp: the TOC X-Standard, README badge and CLAUDE.md are
versionless by rule.
tests/test_diagnostics.lua: the chat-line case splits in two, logging off
(the seam's ON ack, then the report line, flag on afterwards) and logging
already on (exactly one line).
docs/debug.md names the link and says a run turns logging on for the
session (a /reload turns it off); its DebugLog citation moves to version
17.2, as does debug-content.md's. ARCHITECTURE.md, slash-dispatch.md,
testing.md and the modules/Diagnostics.lua header comment match. The
README's Reporting a bug text is the standard's fixed text and is unchanged.
docs/smoke-tests.md corrects DIAG-19 (was "Ungated, flag untouched", now
diagnostics turns logging on for the session and /reload turns it off) and
adds DIAG-30 (the Diagnostics link), both under Pending sign-off.
docs/test-cases.md regenerated (872 cases, 1 skipped); badge 871/871.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 3d0f3563caa0c795a468d19dfe5f261ac4651728
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 16:36:08 2026 +0530
DL-WG-02: debug coverage audit and fill against debug-logging v2.70.0 §8/§9
Diagnosis checklist fills: [State] stand-down/stand-up edges naming the holds; the
combat-end queue's hold, flush and stand-down drop lines; a change-gated
[Frame] popup transition line (gate on a combat edge or setting, dismissal,
stand-down, owed Hide settling); refusals that were silent or chat-only
(apply/invite/chat link while stood down, notify.enabled off, already notified,
not in a group yet, autoShow off, /wg show, test mode in combat, size/scale and
re-anchor in combat, enabled refused); the degraded chat-link route on [Init];
caught pcall errors once per distinct message through NS.DebugErrorOnce.
Quiet steady state: the teleport state line is change-gated per show request
(one open no longer logs it twice); combat edges that change nothing and the
cooldown ticker are pinned quiet.
23 new cases in tests/test_debuglog.lua; docs/debug.md gains a Coverage section;
moved line citations re-pointed; test-cases.md regenerated, badge 869.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ad86cc45c795d15c1b77edd6ac8b9bc880ea11e1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 16:02:28 2026 +0530
DL-WG-01: re-vendor LibKa0s v1.64.0 (kit revision 33) and add the resize smoke checks
Both payloads copied whole from the local tag v1.64.0 (git archive), CLAUDE.md
provenance rolled in the same commit. The new minors (Core 9, DebugLog 15,
Widgets 11, PerfPanel 6) make the console and copy windows resizable; nothing is
adopted and no test fallout arose (846/846, luacheck 0/0). The three-place
standards reference is unversioned by rule, so it needs no v2.70.0 edit.
Docs: DebugLog citations move to minor 15 / version 15.1, testing.md names
v1.64.0, and smoke-tests.md gains DIAG-25 to DIAG-29 (console grip, minimum,
session-only size, copy window, another addon's console) in the debug-console
theme; no perf panel check, as Perf is declined here.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit f29a1d553c6109c64293bdf9623a4f7d23acfcbd
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:52:40 2026 +0530
SP-FIN-01: re-vendor the test kit at revision 32 (LibKa0s v1.63.0, re-cut)
LibKa0s folded kit revision 32 into the unpublished v1.63.0: tests/_kit/README.md now counts eleven
consumers and thirteen copies, and Kit.VERSION is 32. Prose and the revision integer only; no code,
case or mock changes. tests/_kit/ is byte-identical to the tag again (diff -r empty), so the
vendor-sync case stays green.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit f29a1d553c6109c64293bdf9623a4f7d23acfcbd
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:52:40 2026 +0530
SP-FIN-01: re-vendor the test kit at revision 32 (LibKa0s v1.63.0, re-cut)
LibKa0s folded kit revision 32 into the unpublished v1.63.0: tests/_kit/README.md now counts eleven
consumers and thirteen copies, and Kit.VERSION is 32. Prose and the revision integer only; no code,
case or mock changes. tests/_kit/ is byte-identical to the tag again (diff -r empty), so the
vendor-sync case stays green.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a65e4de495657206f6c8a558e66024fc23f7c27d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:12:19 2026 +0530
SP-FIN-01: refresh four stale line citations in the TOC's load-order notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 5b62a2f8e3ffaa14294d4e5cbbcc211a823b30ea
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 01:42:17 2026 +0530
SP-FIN-01: sync docs (re-point stale line citations, recount the perf sweep, widen the shell-out list)
- performance.md: the call-site sweep now returns 24 lines across five files (10 prose, 3 the
SafeRegisterEvent seam, 11 call sites in 10 rows); ApplyToGroup/SetItemRef/EventRegistry rows
re-pointed to core/WhatGroup.lua:69/:128/:119.
- modules/Frame.lua:524 -> :515 (the teleport countdown timer) in ARCHITECTURE, frame, module-map
and performance.
- DEPENDENCIES.md: tests/loader.lua setfenv at :120, docs/testing.md ranges re-pointed, the
ls -A listing now cited in tests/_kit/inventory.lua, and every other git/sh shell-out named.
- slash-dispatch.md: OptionsSetup RestoreAllDefaults override span is :308-324.
- debug.md / debug-content.md: DebugLog minor 14 is unchanged in the vendored v1.63.0.
- CLAUDE.md: the topic list names profiles, stand-down, compat layer, diagnostics and performance.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ce1ba1100fdd0702944daa703da20da8c53f57c8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 22:39:25 2026 +0530
SP-WG-03R: put COMBAT-10 and COMBAT-11 back in the release pass
The old pre-release checklist ran section 3.8 "in both directions".
The rewrite mapped that item to COMBAT-9 only, dropping the Only in
combat direction (COMBAT-10) and the no-capture combat edge
(COMBAT-11) from the release pass. List COMBAT-9 to COMBAT-11.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 07597828f750f886f18b0ac86bdd7154a198f4c1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 22:25:37 2026 +0530
SP-WG-03R: correct six expectations against the code; pending lists every unsigned check
Review defects:
- PROFILE-1 and docs/profiles.md named scope dropdowns AceDBOptions does
not have; they now name the controls it draws.
- COMBAT-12: `/wg test notify` in combat prints the join summary before
ShowFrame's deferred line (WhatGroup:RunTest).
Re-verified against the code and libs/LibKa0s:
- STATE-3, STATE-5: a disabled `/wg help` (and the typo's index) prints
the refusal line under its header (Sl:PrintHelp).
- DEGRADED setup disables every other Ka0s addon, since LibStub hands
WhatGroup their LibKa0s copy.
- DEGRADED-1: the degraded `/wg list` prints the settings-CLI line, not a
listing. DEGRADED-2 adds the launcher's login notice. DEGRADED-4 names
the verb each line prints. DEGRADED-5: no console opens without the
library; the footer Close half stays.
Pending sign-off follows the clarified S4 rule: every carried-over check
with no recorded pass, every new PROFILE check and every corrected check.
DIAG-5 and DIAG-17 to DIAG-24 stay out: the owner passed them on
2026-09-26 (diagnostics rollout 99_REPORT section 6).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit e1b00dd3ae1d3cc9faaabe0a4ce1e744b23e2d39
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 21:37:36 2026 +0530
SP-WG-03R: restore the in-combat /wg show step and the verbs' [Set] lines
The review found two old behaviors the rewrite had lost. Old 3.7h ran
`/wg show` in combat with Only in combat set; COMBAT-10 had dropped that
step, so the deferral line and the nothing-at-combat-end outcome went
unchecked (the headless visibility test covers neither). Old 2.19's
library-present half asked for one [Set] line per `/wg disable`,
`/wg enable` and `/wg test on` write; DIAG-6 now asks for each.
LAUNCH-11 switched to `Alt` without saying where it comes from, so on a
fresh install the switch leg never ran; it now points at the Profiles
setup.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 264ca9c966cffdcb357f67b7ee3fbe82eb7362c2
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 21:19:34 2026 +0530
SP-WG-03R: make the combat and reset checks runnable; restore the old run lists
The review of SP-WG-03 found checks that could not be run or could not pass
on a correct build. The library's combat cover sits over the whole settings
canvas, so COMBAT-1, COMBAT-5 and PANEL-10 now make their in-combat change
through the CLI: `/wg resetall` from a fresh /reload, so the reset popup's
first StaticPopupDialogs write still happens in combat, then `/wg set scale`
and `/wg set alpha`. STATE-6 changed Notification Delay, which the test flow
never reads, so it now changes Popup Width. The `/wg get notify.delay`
expectations print the row's `%.1fs` format.
The occasion rows had narrowed. The Interface-bump row, the LibKa0s re-vendor
row and LOC-6 again cover every check the old sections 1, 4, 11 and 12
scheduled, and the release pass names the tab strip and non-English checks by
ID so signing them off does not remove them. The library-absent intro lists
the ten seam files CLAUDE.md names.
The Profiles page renders through H.SetRenderer so it carries the combat lock
when the AddOns sidebar reaches it mid-fight. PROFILE-14 checks that in the
client and a new tests/test_profiles.lua case pins it (846 cases). COMBAT-2
now expects the Profiles subcategory after a combat /reload.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 4c66753bc8e51fe47143a555ec254e1e3274eb39
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 20:56:30 2026 +0530
SP-WG-03: rewrite docs/smoke-tests.md as one evergreen, theme-grouped suite
The old file had grown to 1070 lines of numbered sections, table rows and
step lists, with the same check restated up to six times (the GameMenu
Logout run, the reset-all popup, the visibility gate across combat) and
several expectations that contradicted the code: a bare /wg reset raising
the confirm, the debug console keeping its position, Only in combat opening
a hidden popup on the pull. It is now 663 lines: an index, one setup
section with the when-to-run table and the release pass, fourteen themes
with stable <THEME>-<n> IDs and a Result line per check, and a Pending
sign-off table for the never-run 7a/12a/12b checks. Every in-client
behavior is kept once; only 2.14 is dropped, since test_slash's unknown-verb
case asserts all of it. The PROFILE theme adds the /wg profile verb and the
Profiles page checks.
The Non-English client section keeps deDE/frFR, the failure wording and
the literal C_SpellBook.IsSpellKnown that test_doc_structure pins; LOC-5
is the old 7a. Inbound references (midnight-quirks, common-tasks, debug,
debug-content, compat-layer, testing, the ARCHITECTURE map row, and the
test_compat / test_doc_structure comments) now cite the new IDs, and the
KickCD and ConsumableMaster locale citations read LOC-1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a8dfe5a2d9b0e9dc072c2adb40944fcaa850c6df
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 12:37:21 2026 +0530
SP-WG-02: /wg profile via CliProfile
Adds the `profile` verb (spec S3, owner decisions D1/D3). The behavior is
LibKa0s-Slash-1.0 minor 17's CliProfile, shared across the collection; this
addon owns only the wiring:
- COMMANDS row `profile`, after the schema CLI, with its NS.L description.
- Descriptor `profiles = function() return WhatGroup.db end`, asked at call
time because the db is built in OnInitialize, after this file loads.
- Descriptor `liveVerbs` = lib.LIVE_VERBS plus "profile" (read, not
hand-copied). WhatGroup passed no liveVerbs before; `profile` is a host
verb, so the default would refuse it while disabled, and `enabled` is
profile-scoped, so switching to an enabled profile is a way back.
- The switch fires OnProfileChanged, so the one [Profile] log line and the
re-apply stay the host handler's (debug-logging-§10); the verb logs
nothing. The popup's Hide is protected in combat, and the library already
refuses a switch in combat.
- The degraded stub's row reaches the stand-in CliProfile, which prints the
library-absent line and switches nothing.
Tests first (red before the wiring): tests/test_profiles.lua covers the
list, a switch that runs the handler, an unknown name refused with nothing
created (and the did-you-mean), quotes/case/spaces and the combat refusal;
tests/test_disabled.lua pins `profile` as live while disabled and a switch
back out; tests/test_slash.lua gains the COMMANDS order pin and `profile` in
LIVE_VERBS (allowed == #LIVE_VERBS); the degraded case in
tests/test_libka0s.lua drives `/wg profile` through OnSlashCommand.
Docs: ARCHITECTURE Slash Commands table and the 15-verb count,
slash-dispatch.md (row, behavior table, the liveVerbs note, the absent
path), profiles.md "From chat", module-map.md, the README FAQ. Re-pointed
the citations the edits shifted (WhatGroup.toc -> settings/Slash.lua:132,
OnSlashCommand :518, lib:New :249). docs/test-cases.md regenerated and the
badge rolled, 838 -> 845.
Gate: tests 845 passed, 0 failed; luacheck 0/0 in 58 files; vendor diff
gate clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 132921805234a52d2d981d4de7f5437a6480f260
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 12:27:53 2026 +0530
SP-WG-02: re-vendor LibKa0s v1.63.0
LibKa0s payload from the local v1.63.0 tag (dd7a774), copied whole from a
git archive of the tag, never a working tree. Only Slash.lua moves: minor
16 -> 17, the shared profile verb (descriptor field `profiles`,
Sl:CliProfile, Sl:ProfileSwitch, lib.ProfileNames, nine PROFILE_* strings).
tests/_kit is unchanged at kit revision 31. CLAUDE.md provenance and
docs/testing.md roll to v1.63.0 in the same commit, as the vendor-sync gate
requires.
The copy alone turned the by-name Slash surface-parity case red, because the
live dispatcher instance now carries CliProfile and ProfileSwitch. The
library-absent stub gains both, each printing the library-absent line for
`/wg profile` and switching nothing (options-ui-§1 route (b), the stub shape
version-17-docs.md gives), pinned by a new degraded case in
tests/test_libka0s.lua (tests first: it was red before the members).
Re-pointed citations the library's line shifts moved (DISABLED_LINE_FORMAT
:84 -> :94, the dispatcher split -> :949-951) and two stale host ones
(OnSlashCommand :496, lib:New :233). docs/test-cases.md regenerated and the
README badge rolled, 837 -> 838. Bundle: docs/revendor/2026-09-29-v1.63.0/,
recording that only Slash minor 17's profile surface is adopted, by SP-WG-02.
Gate: tests 838 passed, 0 failed; luacheck 0/0 in 58 files; vendor diff
gate clean against the tag and the sibling.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ca1923578f05bbad48ce9a41a984c403fe722fd6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 11:15:25 2026 +0530
SP-WG-01R: make the shown-container case able to fail; cover the visibility re-apply on a profile event
The review found two tests that could not go red under the regression they
were written for.
The "dialog fills a SHOWN container" case asserted IsShown on a group the kit's
AceGUI had just created, and the kit never pools and starts every frame shown,
so deleting the renderer's container.frame:Show() left the suite green. The
case now registers a SimpleGroup constructor that hands the group out hidden,
the way AceGUI:Release leaves a pooled one, and hides the same group again
before a profile switch re-renders the open page. Deleting the Show() now
turns it red.
reloadProfile's ApplyFrameVisibility call had no covering case: the re-apply
test only checked size, scale and alpha. A new case shows the popup under an
'always' profile, switches to one whose visibility is 'never', and asserts the
popup is off screen. Deleting the call turns it red.
The suite runs 837 cases; docs/test-cases.md is regenerated from --list, the
README badge follows, and docs/profiles.md's Tests paragraph names both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit dc5a9d6b7a2dd723047b4eaedd0c2b9325c0e737
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 10:59:25 2026 +0530
SP-WG-01R: regenerate the inventory and badge at 836; re-point the TOC libs span; retire the smoke doc's single-profile claim
9e62990 added the /wg resetall blast-radius case, so the suite runs 836 cases,
but docs/test-cases.md and the README badge still said 835. Both are
regenerated from `lua tests/run.lua --list`.
The same commit grew the AceConfig comment block in WhatGroup.toc by three
lines, so DEPENDENCIES.md's `WhatGroup.toc:16-36` stopped at a comment and left
out LibDataBroker, LibDBIcon and LibKa0s. It now cites 16-39.
docs/smoke-tests.md section 6 still said WhatGroup uses a single
account-shared profile, which the Profiles page made false and which the
item's doc sweep had already retired everywhere else. The step's expectation
now holds only while the second character is on Default, and says so.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 9e629900cfd50949e2eb9c9623e99f54abb8d942
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 10:06:42 2026 +0530
SP-WG-01R: test the global reset's blast radius; mark the AceConfig TOC slot load-bearing
The review of SP-WG-01 found two defects.
options-ui-§12's testing MUST asks the suite to prove the blast radius of
Reset all settings, not its mechanism, and docs/profiles.md claims the reset
never touches another profile or the profile list. The only reset case
checked the veto predicate. The new case runs /wg resetall through the
popup's OnAccept with two profiles and asserts the active profile is still
"Alt", the list is still "Alt,Default", the active profile is back to its
defaults and the other profile kept its value. It goes red when the reset
also wipes the other profile.
The TOC comment above AceConfig-3.0.xml called the slot conventional. It is
load-bearing: AceConfigDialog-3.0.lua:7 resolves AceGUI-3.0 with a
non-silent LibStub at file load, so the line raises if it moves above
AceGUI-3.0.xml (toc-file-§5). The comment now says so and names what
resolves at load; AceDBOptions' slot stays conventional, since it resolves
nothing at load beyond LibStub.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 02b224727604436e85306433b18aec501d9a112f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 09:53:29 2026 +0530
SP-WG-01R: make the disabled-profile test switch into a disabled profile; re-point .luacheckrc citations
The review found that "switching to a disabled profile stands the addon down"
never did that. It switched to a fresh, enabled profile and unticked
`enabled`, so the stand-down it asserted came from the row's onChange rather
than from the profile callback. A reloadProfile that only ever released
HOLD_DISABLED left the whole suite green (testing-§12). The case now leaves
"off" once it is disabled and switches back into it, then asserts the
stand-down, then switches out again and asserts the stand-up. It carries a
`-- red under:` comment. Checked by mutation in a scratch copy: the case now
fails under the reviewer's one-way latch.
.luacheckrc cited core/WhatGroup.lua:924 for the ApplyFrameVisibility probe.
This item moved that line to :984, and the lint config was not re-pointed
with the other citations. The settings/Schema.lua:263 citation in the same
comment was already stale on master (the probe is at :265), so it is
corrected too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 4f9d7916d144e53b83a112f683644d87fd53de1a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 09:39:12 2026 +0530
SP-WG-01: Profiles page, profile callbacks and docs/profiles.md
WhatGroup already kept its settings in db.profile, but nothing let a player
see or change profiles, so an AceDB switch could only be reached with /run.
Owner decision D2 (2026-09-29) brings it in line with the seven addons that
ship profiles, ahead of the collection-wide `profile` verb.
- Vendor AceConfig-3.0 (Registry, Cmd, Dialog) and AceDBOptions-3.0,
byte-identical to the collection's copies (AuraMaster, KickCD and the
other five diff clean), loaded after AceGUI as the siblings do.
- settings/Profiles.lua: AceDBOptions drawn by AceConfigDialog into a
LibKa0s canvas, registered last in the Settings tree, no Defaults button,
built on first show through SetRenderer, opting out without the libs.
- OnProfileChanged now logs one `[Profile] switched to '<name>'` line
(debug-logging-§10). All three events share reloadProfile, which now also
re-draws the Profiles page and re-applies the popup's size, scale, alpha
and visibility from the incoming profile (those reach a built popup only
through row onChange, which a profile event never runs).
- Options descriptor: resetProfile + profilesPage, so the Reset all
settings tooltip names Profiles -> Reset Profile (options-ui-§12), and
skipRestoreAll = Settings.VetoedFromResetAll, one named veto shared with
the host's session sweep (options-ui-§3).
- docs/profiles.md added and registered Present in the Tier 2 map; scope,
module map, settings panel, debug tags, dependencies, README FAQ and the
CLAUDE.md summary updated. Line citations into core/WhatGroup.lua and
settings/OptionsSetup.lua re-pointed at their current lines.
- tests/test_profiles.lua (11 cases); inventory and badge now 835.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
This mod has no additional files

