1.7.0-release
What's new
tag 9e09308e3a27bc51508c97b9fb1ae3569dbf8911 1.7.0-release
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 19:23:24 2026 +0530
Release 1.7.0
commit ec213161a98f89110493b183a5ef0e135d39d614
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 19:23:24 2026 +0530
Release 1.7.0: version bump, release notes and the gated release run
Version 1.6.0 -> 1.7.0. Release gate read from the release run's
manifest.json (docs/automated-tests/20261009-191724/, at 3c40352, clean):
- lint: pass, 0 warnings / 0 errors in 56 files
- tests: pass, 574 passed, 0 failed, 1 skipped, 575 total (the skip is
the kit's diagnostics-contract opt-out case, which this addon does not
take)
- perf: skip, performance-§12 no-combat-path exemption (no tests/perf.lua);
passes under the automated-tests-§3 exception, stated in the release notes
- complexity: pass, max CCN 15, 0 functions above CCN 15, blindFiles 0
(57462 NLOC, 1319 functions, avg CCN 2.1); the first sighted release run
Files:
- PrettyChat.toc: ## Version 1.7.0
- core/Namespace.lua: NS.version fallback literal 1.7.0
- tests/wow_mock.lua: fixture Version 1.7.0
- tests/test_envsetup.lua: comment naming the fixture version
- README.md: new 1.7.0 row at the top of ## Version History (Profiles
page, /pc profile, the Categories Defaults confirmation, the blank
format refusal, the newer-profile rollback guard), plus the perf-skip
note
- docs/automated-tests/20261009-191724/: the release bundle and its ANALYSIS.md
- docs/automated-tests/RESULTS.md: the run's row and the re-ruled
settings/Schema.lua disposition (1070 -> 1113)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2w6FgfFYw93meWZN9Ahn6
commit 3c40352188cf0c5f79719a90f8af0132be7d91c5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 18:53:29 2026 +0530
SD-FIN-03: remove dead export PrettyChat.ResetCategory
No panel button or /pc verb reached it; tests now drive Schema.ResetRows / ResetCategoriesPage with the same assertions. GENERAL_RESET_PATHS went dead with it. Two cases that covered only the deleted General arm removed; test-cases.md regenerated, badge 574.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2w6FgfFYw93meWZN9Ahn6
commit edfc2868d1edb3cacc458c301e69271e680bdf5b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 9 17:49:53 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 1febeb5710e3ab90cd2b2a7ea7bf8c747eb827c3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 22:20:43 2026 +0530
PC-STD: roll standards reference to v2.77.0; sync docs
Release-side item for the 2026-10-07 remediation (no finding of its own).
Checked against WowAddonStandards v2.77.0 on its feature branch (WS-11).
Standards reference:
- The three places (PrettyChat.toc `## X-Standard:`, the README Standard
badge, bare image, and CLAUDE.md `## Standards compliance (read
first)`) are already in the v2.77.0 form and carry no version;
toc-file-§1 and documentation-§1/§6 require none, so none is added.
- toc-file-§5's whole-listing denominator (WS-04): every listed file was
re-read for file-scope NS / library-major reads. Three positions were
load-bearing but described as conventional or not annotated, and now
carry a note naming what resolves at load: modules\Override.lua
(GetAddon("PrettyChat"), NS.Const.Color, NS.Util.note, NS.L),
modules\Diagnostics.lua (GetAddon("PrettyChat"); its place after
Override stays conventional) and settings\Schema.lua (GetAddon, rows
built at load from NS.Defaults / NS.GeneralDefaults / NS.GlobalDefaults,
sorted through Override's NS.SortedStringNames). The Settings group
header now says every line in it is load-bearing. docs/ARCHITECTURE.md's
Module Map and docs/module-map.md's load order (items 18-20) say the same.
- Citation sweep over authored files (libs/, tests/_kit/ and the frozen
audits/reviews/revendor/superpowers/automated-tests run stores excluded):
every filename-§N resolves to a `### N.` heading at v2.77.0 except
`packaging-§1` (three .pkgmeta comments); packaging.md is unnumbered,
so those now cite `packaging` (comment-only).
- line-endings (WS-03): .gitattributes is byte-identical (CR-stripped) to
line-endings-§5's client-bound body at v2.77.0; no edit. versioning-git
(WS-08): no doc here restates the branch rule. No register row's
Re-check trigger names a standard change made in this run, so no row is
re-dated.
- Line cites into the vendored library that RV-PC's re-vendor had moved
are now symbol-form (documentation-§6's symbol-or-heading SHOULD):
ARCHITECTURE.md's `OptionsWidgets.lua:352` -> `landingLogo`, and
.luacheckrc's `libs/LibKa0s/Options.lua:606` -> `buildHeader`.
Docs sync for RV-PC..PC-07:
- .luacheckrc's settings/Panel.lua 212/self stanza names
PrettyChat:ConfirmResetCategories (PC-03), a new method with the same
unread receiver as ConfirmResetAll; its Schema.lua:180/:194 and
Slash.lua:49 cites (now :50) become symbol references. Comment only.
- Verified unchanged: README Tests badge 576/576 equals the
docs/test-cases.md Total (576, one declared skip on its own row) and a
fresh `--list` matches byte-for-byte; CLAUDE.md provenance and
ARCHITECTURE/testing/module-map stamps read LibKa0s v1.71.0 / kit 38;
schema.md and settings-panel.md carry PC-01's blank-format refusal;
profiles.md and ARCHITECTURE.md carry PC-02's newer-build rule;
README, settings-panel, schema, slash-dispatch, module-map and
ARCHITECTURE carry PC-03's Categories confirmation. README.md is not
edited, so no de-AI pass is owed.
No version bump, no Version History row.
Deviations: the TOC and .luacheckrc annotations go beyond the item's
named files but are the toc-file-§5 re-read and the sync it asks for.
Gates: 576 passed / 0 failed / 1 skipped; luacheck 0/0 in 56 files;
lizard 0 functions above CCN 15; largest authored .lua 1113 lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 1febeb5710e3ab90cd2b2a7ea7bf8c747eb827c3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 22:20:43 2026 +0530
PC-STD: roll standards reference to v2.77.0; sync docs
Release-side item for the 2026-10-07 remediation (no finding of its own).
Checked against WowAddonStandards v2.77.0 on its feature branch (WS-11).
Standards reference:
- The three places (PrettyChat.toc `## X-Standard:`, the README Standard
badge, bare image, and CLAUDE.md `## Standards compliance (read
first)`) are already in the v2.77.0 form and carry no version;
toc-file-§1 and documentation-§1/§6 require none, so none is added.
- toc-file-§5's whole-listing denominator (WS-04): every listed file was
re-read for file-scope NS / library-major reads. Three positions were
load-bearing but described as conventional or not annotated, and now
carry a note naming what resolves at load: modules\Override.lua
(GetAddon("PrettyChat"), NS.Const.Color, NS.Util.note, NS.L),
modules\Diagnostics.lua (GetAddon("PrettyChat"); its place after
Override stays conventional) and settings\Schema.lua (GetAddon, rows
built at load from NS.Defaults / NS.GeneralDefaults / NS.GlobalDefaults,
sorted through Override's NS.SortedStringNames). The Settings group
header now says every line in it is load-bearing. docs/ARCHITECTURE.md's
Module Map and docs/module-map.md's load order (items 18-20) say the same.
- Citation sweep over authored files (libs/, tests/_kit/ and the frozen
audits/reviews/revendor/superpowers/automated-tests run stores excluded):
every filename-§N resolves to a `### N.` heading at v2.77.0 except
`packaging-§1` (three .pkgmeta comments); packaging.md is unnumbered,
so those now cite `packaging` (comment-only).
- line-endings (WS-03): .gitattributes is byte-identical (CR-stripped) to
line-endings-§5's client-bound body at v2.77.0; no edit. versioning-git
(WS-08): no doc here restates the branch rule. No register row's
Re-check trigger names a standard change made in this run, so no row is
re-dated.
- Line cites into the vendored library that RV-PC's re-vendor had moved
are now symbol-form (documentation-§6's symbol-or-heading SHOULD):
ARCHITECTURE.md's `OptionsWidgets.lua:352` -> `landingLogo`, and
.luacheckrc's `libs/LibKa0s/Options.lua:606` -> `buildHeader`.
Docs sync for RV-PC..PC-07:
- .luacheckrc's settings/Panel.lua 212/self stanza names
PrettyChat:ConfirmResetCategories (PC-03), a new method with the same
unread receiver as ConfirmResetAll; its Schema.lua:180/:194 and
Slash.lua:49 cites (now :50) become symbol references. Comment only.
- Verified unchanged: README Tests badge 576/576 equals the
docs/test-cases.md Total (576, one declared skip on its own row) and a
fresh `--list` matches byte-for-byte; CLAUDE.md provenance and
ARCHITECTURE/testing/module-map stamps read LibKa0s v1.71.0 / kit 38;
schema.md and settings-panel.md carry PC-01's blank-format refusal;
profiles.md and ARCHITECTURE.md carry PC-02's newer-build rule;
README, settings-panel, schema, slash-dispatch, module-map and
ARCHITECTURE carry PC-03's Categories confirmation. README.md is not
edited, so no de-AI pass is owed.
No version bump, no Version History row.
Deviations: the TOC and .luacheckrc annotations go beyond the item's
named files but are the toc-file-§5 re-read and the sync it asks for.
Gates: 576 passed / 0 failed / 1 skipped; luacheck 0/0 in 56 files;
lizard 0 functions above CCN 15; largest authored .lua 1113 lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit acacd9bb83ff96ba3502bf7460e21085fbca8818
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:24:58 2026 +0530
PC-07: spill the census exemption prose out of the hub
docs/ARCHITECTURE.md was 434 lines against documentation-§3's ~400-line
hub guideline (PC-A-03, audit PC-105). It is now 375.
- The three-condition reasoning for the GlobalStrings dump's layout-§1
exemption, its PC-83 re-check against the generator's move to tools/,
and the account of what the kit cap gate checks and leaves to the
auditor move verbatim to a new `## The cap exemption` section in
docs/global-strings.md (wording adjusted only where it pointed at
"this table"/"above" in the hub).
- The `### Files over the 1500-line cap` heading, measurement command,
table, verdict, drift note and 1000-1500 band note stay under
`## Documented deviations` (test_layout_cap reads them), with a
one-paragraph pointer to the new section; the table row's "three
conditions below" now links there.
- The four retired/narrowed register-row narratives shrink to one
sentence each, keeping the PC id (PC-61, PC-52, PC-88, PC-73) and the
standing instruction not to add X-Wago-ID or a placeholder.
- The Documentation map row for global-strings.md names the exemption
reasoning.
Deviation: lands at 375 lines rather than the ~360 target; the census
paragraphs the gate depends on and the band note stay in the hub, and no
rule content was dropped to reach a round number.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 2302d7dbe70a36f421d4f96cae88f03b710680a7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:19:34 2026 +0530
PC-06: sync hub, sweep page, luacheckrc and finding ids with the tree
Docs and comments only; no behaviour change.
- ARCHITECTURE.md External dependencies: Item/Pool/Widgets are not
consumed by the addon's own code, but vendored LibKa0s files resolve
them internally (v1.71.0: DebugLog.lua -> Widgets; OptionsNav,
OptionsTabs, OptionsWidgets -> Pool; OptionsIds, OptionsIdList ->
Item), cited by file name. The hand-kept list of vendored-but-unused
files is gone; the folder is copied whole.
- performance-§12: the sweep page and the register row now both name
DG-PC-01, the commit that last re-took the result block (git log on
performance-sweep.md); the row's history gains the 2026-10-01 entry.
The sweep was not re-run. The prose cites the tests/test_libka0s.lua
hits by the test's name and says the block's line numbers for it
have moved.
- .luacheckrc: "Seven files here DO read it" is count-free (the seven
named as the M4c-06 set); the historical "eleven" stays. Comment only.
- Cycle-less PRETTYCHAT-A-NN ids remapped to the 2026-09-23 audit's
in-repo ids, each checked against that bundle: A-03 -> PC-77,
A-07 -> PC-83, A-08 -> PC-84, A-09 -> PC-85, A-19 -> PC-94,
A-20 -> PC-95, A-25 -> PC-99. Frozen bundles untouched.
- ARCHITECTURE.md handoff H-1: the Known consumer sentence describes
LootHistory after LH-01 (records the source globals and rebuilds on
change; Util.ParseSelfLoot / ParseSelfCurrency / ParseRollWon cited
by symbol, no line numbers); the old defect is cited once as
LootHistory@79131e3. The general warning and OVR-9 stay.
Findings: PC-A-02, PC-R-10.
Deviations: core/Database.lua's id sits at :38, not :36. One more
cycle-less id the item did not list, PRETTYCHAT-A-05 in
docs/module-map.md, is the 2026-09-07 audit's PC-64 (MakeCloseButton
degraded stub; it is absent from the 2026-09-23 bundle) and is cited
as "PC-64 of the 2026-09-07 audit" so the verify grep is clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 72f3bf4308fdca642b7b91d0a4ce2989691a09e1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:14:57 2026 +0530
PC-05: correct the taint sentence and the contradictory report-size figures
Comment and doc changes only. No code changed.
- docs/data-flow.md: "`_G` writes don't taint" was false. The sentence now
says the writes DO taint the overridden globals (issecurevariable answers
false, "PrettyChat"), but only non-protected chat formatting reads them, so
no protected path is affected and the pipeline needs no combat guard. It is
marked as unverified against the current client: an owner in-client
observation, not a gate. (PC-R-05)
- The size of the Test() report was given three different ways: "500+",
"A 500-line preview" and "eighty-odd". Every site now says "a few hundred
lines" and gives no exact count: settings/Panel.lua (two sites),
modules/Override.lua, docs/settings-panel.md, docs/slash-dispatch.md,
tests/test_panel.lua and tests/test_slash.lua. (PC-R-06)
- settings/Schema.lua: "nine addons drawing the same tab from nine
hand-written copies" is now count-free. The roster has eleven. (PC-R-06)
Deviations: the cited lines had moved (Panel.lua's figures are now at :106
and :126, not :89-90 and :109). Step 2's sweep also found stale figures
outside the five named sites. Those were aligned the same way: the
report-size wording in docs/settings-panel.md, docs/slash-dispatch.md and
the two test comments, and the "nine addons" wording in core/MediaSetup.lua,
tests/run.lua and tests/test_surface_parity.lua.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 83217b5849da01d7d812c93cdcf49dc1c1f66594
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:13:15 2026 +0530
PC-04: address review — make the General no-preview check able to fail
The "nothing is previewed" assertion looked for a "Category:" header, which
Test() only prints for a category with strings; General has none, so the old
buggy path (header + "(no matching strings)") passed it too. Assert instead
that the console carries neither the preview header nor the empty-result
line. Verified red against a mutation that prints the refusal and still
previews the matched General.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 873e0996746899b7c9aeaa9e1312c58fa4d29f61
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:09:34 2026 +0530
PC-04: /pc test category no longer offers General
General is a page in Schema.CATEGORY_ORDER but owns no strings, so
`/pc test category General` resolved and previewed nothing, and both the
usage and the unknown-category lines advertised it in their Valid list.
runTest now builds the Valid list through a local testCategoryList()
helper that skips General (used by the usage and the unknown lines), and
a ResolveCategory match of "General" takes the unknown-category path with
the same message and the `test refused: unknown category '<name>'` debug
line. Schema.CATEGORY_ORDER is unchanged (the panel derives its tabs from
it). No slash help or docs/common-tasks.md text listed test categories,
so no doc prose changed.
Tests: a test_slash case (General and general refused, no preview; the
Valid list omits General and keeps Loot..Misc) and a debug-coverage
assertion for the refusal line. Inventory regenerated and the README
Tests badge moved to 576 in the same commit (docs/testing.md).
Resolves PC-R-11.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 8ceb091ce82efa6d71f68c41b111f580d6dfbe0a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:05:21 2026 +0530
PC-03: confirm the Categories header Defaults before resetting every tab
The Categories page's header Defaults button reset the strings on all
eight category tabs with one click and no confirmation, while General's
equivalent asks first. It now raises a new PRETTYCHAT_RESET_CATEGORIES
StaticPopup (new locale key "Reset the strings on every category tab to
their defaults? Your edits in every category are discarded.", Yes/No,
timeout 0, whileDead, hideOnEscape) through the new
PrettyChat:ConfirmResetCategories(); Accept runs ResetCategoriesPage.
The library routes both the header button (onClick(widget, event, ...))
and the canvas OnDefault footer forwarder (defaultsOnClick() with no
arguments) through panel.defaultsOnClick, so the handler tells them
apart by argument count: the footer path has already been confirmed by
Blizzard's own Defaults dialog and resets directly, without a second
popup. Combat refusal stays in the library on both paths. The General
page is unchanged.
Tests: test_panel's Categories Defaults case now fires the header
button, asserts the popup and that nothing changed, then runs OnAccept
and asserts the one `[Set] reset Categories: 2 rows` line (seen red
before the fix: no popup raised). The footer OnDefault case also asserts
no popup is raised. Case count unchanged (575/575 badge stands);
docs/test-cases.md regenerated for the two renamed cases.
Docs: README troubleshooting rows say the Categories Defaults asks first;
settings-panel.md, schema.md, slash-dispatch.md, ARCHITECTURE.md and
module-map.md describe the popup and the footer exception; smoke rows
RESET-3/RESET-4 reworded (pending owner sign-off).
Finding: PC-R-03.
Deviations: none in behaviour. The footer-path assertion was added to the
existing footer OnDefault case rather than as a new case.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 76600d76c12e22b90f0470dca0cdd0e920a98fd9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 20:00:25 2026 +0530
PC-02: do not prune or restamp a profile written by a newer build
Database.RunMigrations normalized a stored schemaVersion that was ahead
of SCHEMA_VERSION down to it and always ran PruneOrphans, so rolling the
addon back (CurseForge) silently and permanently deleted every
strings[G] / disabledStrings[G] override a newer build stored for a
global this build has no row for, and lowered the stamp so the newer
build would re-run its own steps.
core/Database.lua: when the stored stamp is a number greater than
SCHEMA_VERSION, RunMigrations emits one [Migrate] debug line ("stored
schema vN is newer than this build's vM; leaving the profile untouched")
and returns before runSteps, the restamp and PruneOrphans. Stamps at or
below SCHEMA_VERSION behave as before; the now-dead else-branch restamp
collapses to `schemaVersion = reached`. The RunMigrations header comment
and the file's contract block state the new rule instead of "normalized
down".
Tests (red first, both seen failing on the stamp being lowered):
test_database's "the runner stamps the current version even with no
steps to run" is deliberately rewritten as "a stamp ahead of the target
is left unchanged"; a new case seeds schemaVersion 99 with overrides and
a disabled flag under a global with no row in this build and asserts
they and the stamp survive and exactly one newer-than-this-build line is
logged. docs/test-cases.md regenerated, README Tests badge 575/575;
docs/ARCHITECTURE.md (load pass) and docs/profiles.md (schemaVersion)
describe the rollback rule.
Finding: PC-R-04.
Deviations: none.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 2068c10336b39ec3b08b84b1bc378356b92623f5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 19:57:19 2026 +0530
PC-01: refuse blank formats in the schema (panel stored "")
The conversion-signature gate accepted an empty format, because the empty
sequence is a prefix of every sequence. The panel's New box hands
Schema.Set whatever the player left in it, so clearing the box and
pressing Enter stored "" and ApplyStrings printed that message blank.
settings/Schema.lua refusedBySignature now refuses an empty or
whitespace-only format first, printing a new localized line
("Not saved — %s: a format can't be blank. Use Reset to restore the
default.", locales/enUS.lua, the only locale file this repo keeps) and
returning "blank format" as the reason; formatAccepted forwards that
reason as `why` and logs a matching [Set] refused trace. Every write the
seam runs (panel, /pc set, /pc reset, the reset walk's default check)
crosses it; no shipped default is blank. /pc set's own blank refusal in
the library's ParseValue is untouched.
Tests: test_schema drives "", " ", "\t" and mixed whitespace through
Schema.Set (refused, nothing stored, nothing in _G, message printed) and
a valid format still sets; test_panel_categories fires the New box's
Enter with "" and asserts db.profile is unchanged and the box snaps back.
Both carry red-under notes and were seen red before the fix.
test_libka0s's format-hook case now seeds "" into the DB (the only way a
blank can still exist) instead of writing it through Set; test_locale
records "blank format" as residue beside "conversion signature".
docs/test-cases.md regenerated, README Tests badge 574/574; schema.md,
settings-panel.md and a new SLASH-11 smoke row (pending sign-off).
Finding: PC-R-02.
Deviations: the panel case lives in tests/test_panel_categories.lua, not
tests/test_panel.lua, because that is the suite that builds the
Categories page's New box. The message text names the path ("Not saved
— %s: a format can't be blank. ...") to match the existing refusal line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit 85dcb848597fc8dae75b41142fa45948024d12b9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 19:51:11 2026 +0530
RV-PC: re-vendor LibKa0s v1.71.0 (kit 38); record the v1.69.0/v1.70.0 span
Mechanical re-vendor from the LOCAL annotated tag v1.71.0 (cb274a4):
libs/LibKa0s/ and tests/_kit/ replaced whole by the tag's LibKa0s/ and
testkit/ trees. Env 2, OptionsIdList 4, Slash 20, SlashParse 2,
WidgetsLineChart 3, WidgetsAutocomplete 2; kit revision 37 -> 38
(inventory.lua Totals, secrets.lua new). No adoption interview, no issue
filed (owner scope).
- CLAUDE.md provenance line rolls to v1.71.0 in the same commit.
- docs/test-cases.md regenerated: kit 38 counts the one declared skip on
a `| Skipped | 1 |` row; Total reads 572, equal to the README badge
572/572 (PC-R-07).
- docs/revendor/2026-10-07-v1.71.0/ records the delta, candidates
(Kit.secret, the LineChart/Autocomplete fixes: not adopted in this run;
Widgets declined #11) and summary.
- docs/revendor/2026-10-07-v1.69.0-v1.70.0/ (01_DELTA.md and 05_SUMMARY.md
only) records the two re-vendors 136cf54 and 7a1aabf that left no
bundle (PC-A-01). The AUDIT.md two-listing check now prints nothing.
Findings: PC-A-01, PC-R-07.
Deviations: besides the ARCHITECTURE.md External dependencies token, the
other live vendor stamps roll too (ARCHITECTURE.md Slash minor note
19 -> 20, module-map.md load order, debug.md, testing.md layout-cap
paragraph kit 37 -> 38), as every earlier re-vendor commit did. The
working-tree copies of four RA-00 audit/review files were LF on disk and
failed test_eol; they were re-checked-out (no content or index change).
An earlier-run "RV-PC:" commit (v1.56.0) exists on master; it is not
this item.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoCGDEVoaSdzqSHHsASPMi
commit caa366b8f0a734ae934c4017cb93e6d4a82777eb
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 16:52:02 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 7a1aabfc1b7a78f003e1f73e202132c5367f7be4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 11:38:41 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 7a1aabfc1b7a78f003e1f73e202132c5367f7be4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 7 11:38:41 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 136cf540ffae8f43702bba80028c5538f79a3acf
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 6 14:53:07 2026 +0530
chore: re-vendor LibKa0s v1.69.0 (kit 37; adds the line chart widget)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4XiFWzQrd9ee19aBpkVmt
commit 3c2560f97009f74ada1ca9f771a7f0639f51f308
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 15:09:26 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 (ARCHITECTURE, module-map load order, debug.md, testing.md's
layout-cap paragraph, whose "kit revision 35" moves to 36). 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 572 passed / 0 failed / 1 skipped / 573 total; after 572 / 0 / 1 / 573
- luacheck: 0 warnings / 0 errors in 56 files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit 3c2560f97009f74ada1ca9f771a7f0639f51f308
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 15:09:26 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 (ARCHITECTURE, module-map load order, debug.md, testing.md's
layout-cap paragraph, whose "kit revision 35" moves to 36). 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 572 passed / 0 failed / 1 skipped / 573 total; after 572 / 0 / 1 / 573
- luacheck: 0 warnings / 0 errors in 56 files
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MsGF7a1YxB69EsRnBC8rcE
commit 5eb0c2e10880d9050f6712026ef0013baebf77d4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:33:07 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 5eb0c2e10880d9050f6712026ef0013baebf77d4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:33:07 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 8f146f3dcc47c9fef5e4a61f86b6db31c9c45d70
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sun Oct 4 14:21:22 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 21ffeadd5cbf46746649a0e3b7c135a3af4b42c4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 3 12:48:11 2026 +0530
SD-FIN-01: sync docs (lint file count; .pkgmeta ignores; current LibKa0s API doc versions)
Comments and docs cite Core version-10 and Schema version-2 API docs; ResetCategory labeled a test seam; module-map points at tests/_kit/README.md instead of a stale kit listing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GBEbct8mwzFqZSG1oTkv8f
commit 3670b81b4bd4c077cbecdce88b8f4458555bc4a7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 23:37:33 2026 +0530
TP-PC-01: re-vendor LibKa0s v1.68.0 (WidgetsDragHandle 4; kit revision 35)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local annotated tag v1.68.0 (cc9f5eb;
the sibling checkout is at the tag commit and diff --quiet v1.68.0 -- LibKa0s testkit is clean),
CLAUDE.md provenance line rolled v1.67.0 -> v1.68.0 in the same commit. Moved minors:
WidgetsDragHandle 3 -> 4 (Widgets key 12.1.3 -> 12.1.4, the optional tooltipPlace hook). No file
added or removed, nothing only in the addon, testkit unchanged (kit revision 35). 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.0 (ARCHITECTURE, module-map load order, debug.md, testing.md).
docs/test-cases.md matches --list and the README badge stays 572/572: no case moved.
Frozen bundle docs/revendor/2026-10-02-v1.68.0/ (delta, candidates, decisions, summary). No
contract blocker: PrettyChat looks up no LibKa0s-Widgets-1.0. The one candidate, tooltipPlace, is
declined as not applicable (no drag strip); no issue filed, since it is not a gap. Nothing adopted.
Gates (ka0s-bounded):
- tests: before 572 passed / 0 failed / 1 skipped / 573 total; after 572 / 0 / 1 / 573
- luacheck: 0 warnings / 0 errors in 56 files
- complexity (sighted suite, --no-bundle): pass, max CCN 15, 0 warnings, 1314 functions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 3670b81b4bd4c077cbecdce88b8f4458555bc4a7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 23:37:33 2026 +0530
TP-PC-01: re-vendor LibKa0s v1.68.0 (WidgetsDragHandle 4; kit revision 35)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local annotated tag v1.68.0 (cc9f5eb;
the sibling checkout is at the tag commit and diff --quiet v1.68.0 -- LibKa0s testkit is clean),
CLAUDE.md provenance line rolled v1.67.0 -> v1.68.0 in the same commit. Moved minors:
WidgetsDragHandle 3 -> 4 (Widgets key 12.1.3 -> 12.1.4, the optional tooltipPlace hook). No file
added or removed, nothing only in the addon, testkit unchanged (kit revision 35). 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.0 (ARCHITECTURE, module-map load order, debug.md, testing.md).
docs/test-cases.md matches --list and the README badge stays 572/572: no case moved.
Frozen bundle docs/revendor/2026-10-02-v1.68.0/ (delta, candidates, decisions, summary). No
contract blocker: PrettyChat looks up no LibKa0s-Widgets-1.0. The one candidate, tooltipPlace, is
declined as not applicable (no drag strip); no issue filed, since it is not a gap. Nothing adopted.
Gates (ka0s-bounded):
- tests: before 572 passed / 0 failed / 1 skipped / 573 total; after 572 / 0 / 1 / 573
- luacheck: 0 warnings / 0 errors in 56 files
- complexity (sighted suite, --no-bundle): pass, max CCN 15, 0 warnings, 1314 functions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 59938e4a05f0432429f67f650a11f0fd6b6dda47
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 01:46:34 2026 +0530
CA-PC-NM: Options descriptor passes addonName (LibKa0s#42)
settings/OptionsSetup.lua keeps its first vararg as addonName (local addonName, NS = ...)
and passes addonName = addonName on the Options lib:New descriptor beside parentTitle and
mainPanelName, so OptionsIdList (minor 3) can draw the library's own info help-mark art
instead of the client glyph. Latent here: PrettyChat draws no IdList today. The
library-absent arm returns before lib:New and is unchanged.
Test first (red on the old header): tests/test_libka0s.lua pins, comments stripped, the
vararg rename and the descriptor field, and asserts libs/LibKa0s/media/icons/info.tga is
on disk where Media.Icon looks.
Docs: test inventory regenerated (573 total), README badge 572/572, ARCHITECTURE and
module-map header counts now ten readers / twelve discarders with OptionsSetup cited,
module-map seam row names the field, smoke PANEL-22 added (index 1 - 22, Pending sign-off).
Gates: lua tests/run.lua 572 passed, 0 failed, 1 skipped (573); luacheck 0/0 in 56 files;
vendor diff -r empty; sighted complexity green, max CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 59938e4a05f0432429f67f650a11f0fd6b6dda47
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 01:46:34 2026 +0530
CA-PC-NM: Options descriptor passes addonName (LibKa0s#42)
settings/OptionsSetup.lua keeps its first vararg as addonName (local addonName, NS = ...)
and passes addonName = addonName on the Options lib:New descriptor beside parentTitle and
mainPanelName, so OptionsIdList (minor 3) can draw the library's own info help-mark art
instead of the client glyph. Latent here: PrettyChat draws no IdList today. The
library-absent arm returns before lib:New and is unchanged.
Test first (red on the old header): tests/test_libka0s.lua pins, comments stripped, the
vararg rename and the descriptor field, and asserts libs/LibKa0s/media/icons/info.tga is
on disk where Media.Icon looks.
Docs: test inventory regenerated (573 total), README badge 572/572, ARCHITECTURE and
module-map header counts now ten readers / twelve discarders with OptionsSetup cited,
module-map seam row names the field, smoke PANEL-22 added (index 1 - 22, Pending sign-off).
Gates: lua tests/run.lua 572 passed, 0 failed, 1 skipped (573); luacheck 0/0 in 56 files;
vendor diff -r empty; sighted complexity green, max CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 19b37beda560c797d715f722621419e5fe8180a1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 2 01:40:29 2026 +0530
CA-PC-RV: re-vendor LibKa0s v1.67.0 (Core 10, Options 28, OptionsIdList 3; kit revision 35)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local tag v1.67.0 (0bccf4c; the
sibling checkout's HEAD equals the tag and its tree is clean), CLAUDE.md provenance line rolled
v1.66.0 -> v1.67.0 in the same commit. Moved minors: Core 9 -> 10, Options 27 -> 28,
OptionsIdList 2 -> 3. No file added or removed, nothing only in the addon, testkit unchanged
(kit revision 35). Vendor parity: diff -r of both payloads against the tag is empty.
Live vendor stamps roll to v1.67.0 (ARCHITECTURE, module-map load order, debug.md, testing.md).
docs/test-cases.md regenerates byte-identical and the README badge stays 571/571: no case moved.
Frozen bundle docs/revendor/2026-10-02-v1.67.0/ (delta, candidates listed but not interviewed):
the Options descriptor's addonName goes to CA-PC-NM; the MakeResizable fields to none (no
host-owned resizable window). No contract blocker; no consumer test broke.
Gates:
- tests: before 571 passed / 0 failed / 1 skipped / 572 total; after 571 / 0 / 1 / 572
- luacheck: 0 warnings / 0 errors in 56 files
- complexity (sighted suite, --no-bundle): pass, max CCN 15, 0 warnings, 1313 functions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X7u34U99DrEPHJTMx6E6u8
commit 7acf9c0378de636e53c1c698465f121889bcc06f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 13:54:19 2026 +0530
GI-PC-RV: re-vendor LibKa0s v1.66.0 (kit revision 35), wire test_lizard_sighted, record sighted complexity
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local tag v1.66.0 (e4c5ef7),
CLAUDE.md provenance line rolled v1.65.0 -> v1.66.0 in the same commit. Moved minors: Widgets 12,
DebugLog 19, Slash 19, OptionsWidgets 34, OptionsTabs 8, Perf 14; new files WidgetsReorder 1,
SlashParse 1, PerfSampler 1, PerfCommands 1 (all loaded through LibKa0s.xml, so the TOC is
unchanged). Nothing was only in the addon, so nothing was deleted. Vendor parity: diff -r of both
payloads against the tag is empty.
tests/run.lua wires { name = "test_lizard_sighted", dir = "tests/_kit/" }. docs/test-cases.md
regenerated (+8 cases), README badge 571/571. Live vendor stamps roll to v1.66.0 (ARCHITECTURE,
module-map load order, debug.md's DebugLog 19.2.1 link, testing.md); the raw lizard lines in
DEPENDENCIES.md and docs/testing.md now point at the runner's sighted complexity suite. CLAUDE.md's
green-gate line quotes no lizard, so it is unchanged.
Frozen bundle docs/revendor/2026-10-01-v1.66.0/ (delta, candidates listed but not interviewed, per
02_SPEC.md S4; GI-LK-13 takes them), plus the span bundle 2026-10-01-v1.64.0-v1.65.0/ for the two
tags vendored without one. No contract blocker; no consumer test broke.
Gates:
- tests: before 563 passed / 0 failed / 1 skipped / 564 total; after 571 / 0 / 1 / 572
- luacheck: 0 warnings / 0 errors in 56 files
- complexity (bash tests/_kit/run-automated-tests.sh --suite complexity, sighted): pass,
maxCcn 15, warnings 0, blindFiles 0, 1313 functions (raw lizard listed 1230)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 7acf9c0378de636e53c1c698465f121889bcc06f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 13:54:19 2026 +0530
GI-PC-RV: re-vendor LibKa0s v1.66.0 (kit revision 35), wire test_lizard_sighted, record sighted complexity
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local tag v1.66.0 (e4c5ef7),
CLAUDE.md provenance line rolled v1.65.0 -> v1.66.0 in the same commit. Moved minors: Widgets 12,
DebugLog 19, Slash 19, OptionsWidgets 34, OptionsTabs 8, Perf 14; new files WidgetsReorder 1,
SlashParse 1, PerfSampler 1, PerfCommands 1 (all loaded through LibKa0s.xml, so the TOC is
unchanged). Nothing was only in the addon, so nothing was deleted. Vendor parity: diff -r of both
payloads against the tag is empty.
tests/run.lua wires { name = "test_lizard_sighted", dir = "tests/_kit/" }. docs/test-cases.md
regenerated (+8 cases), README badge 571/571. Live vendor stamps roll to v1.66.0 (ARCHITECTURE,
module-map load order, debug.md's DebugLog 19.2.1 link, testing.md); the raw lizard lines in
DEPENDENCIES.md and docs/testing.md now point at the runner's sighted complexity suite. CLAUDE.md's
green-gate line quotes no lizard, so it is unchanged.
Frozen bundle docs/revendor/2026-10-01-v1.66.0/ (delta, candidates listed but not interviewed, per
02_SPEC.md S4; GI-LK-13 takes them), plus the span bundle 2026-10-01-v1.64.0-v1.65.0/ for the two
tags vendored without one. No contract blocker; no consumer test broke.
Gates:
- tests: before 563 passed / 0 failed / 1 skipped / 564 total; after 571 / 0 / 1 / 572
- luacheck: 0 warnings / 0 errors in 56 files
- complexity (bash tests/_kit/run-automated-tests.sh --suite complexity, sighted): pass,
maxCcn 15, warnings 0, blindFiles 0, 1313 functions (raw lizard listed 1230)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ng9STmzmM1JYwT2WWSakpL
commit 36b73c2d9c382fd2c70c66173ef1e7f3629a4f0b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:19:58 2026 +0530
DG-PC-01: adopt docs: debug.md Coverage names the library's lines, DIAG-23 to DIAG-25 smoke rows, moved citations re-pointed
docs/debug.md's Coverage says which lines are the library's (Slash's `refused` lines,
Lifecycle's edges, the Options combat lock's `refused (in combat)` and flush lines, the
Launcher's state lines through the at-enable queue), that this addon writes no copy of them,
and that the watcher and caught-error gates are the console's; the "library's own refusals
are chat only" bullet goes, it is no longer true. docs/smoke-tests.md gains DIAG-23 (a Slash
refusal in the console), DIAG-24 (a Lifecycle edge in the console) and DIAG-25 (the launcher's
state line at the first enable), indexed and listed as owed. The latch's TOC, header and
module-map lines say its edge lines go through NS.Debug; the performance sweep's result block
is re-taken on the v1.65.0 tree (Override.lua:200/212, UnregisterAllEvents at :208) and the
slash-dispatch and LOC-2 line citations follow the moved lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 36b73c2d9c382fd2c70c66173ef1e7f3629a4f0b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:19:58 2026 +0530
DG-PC-01: adopt docs: debug.md Coverage names the library's lines, DIAG-23 to DIAG-25 smoke rows, moved citations re-pointed
docs/debug.md's Coverage says which lines are the library's (Slash's `refused` lines,
Lifecycle's edges, the Options combat lock's `refused (in combat)` and flush lines, the
Launcher's state lines through the at-enable queue), that this addon writes no copy of them,
and that the watcher and caught-error gates are the console's; the "library's own refusals
are chat only" bullet goes, it is no longer true. docs/smoke-tests.md gains DIAG-23 (a Slash
refusal in the console), DIAG-24 (a Lifecycle edge in the console) and DIAG-25 (the launcher's
state line at the first enable), indexed and listed as owed. The latch's TOC, header and
module-map lines say its edge lines go through NS.Debug; the performance sweep's result block
is re-taken on the v1.65.0 tree (Override.lua:200/212, UnregisterAllEvents at :208) and the
slash-dispatch and LOC-2 line citations follow the moved lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 735bfae775e0e4e33fe07237f83c18c794614c2e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:13:44 2026 +0530
DG-PC-01: adopt the at-enable queue for the launcher's state lines (Launcher 5 debugAtEnable)
core/LauncherSetup.lua passes `debugAtEnable`, routed to `D.DebugAtEnable`, so Register's
state lines (LibDataBroker-1.1 / LibDBIcon-1.0 absent, no minimap table, `registered`), written
in OnEnable while the session-only flag is off, are held and land the first time the player
turns logging on, after the [Init] summary; events stay on `debug`. The [Init] summary's two
state tails (stood down, chat addons) stay where they are: they are read at each enable edge,
which is the fresher answer.
A test pins the held line landing once after [Init] and not repeating on a second enable.
Inventory and badge regenerated (563/563).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 9e9ef82a83d4e79e06bd7e41d636ce6c524c66d4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:09:17 2026 +0530
DG-PC-01: adopt the console's change gates for the watcher trace and TraceCaught; delete the hand-rolled memos
modules/Override.lua's `watchArmed` memo becomes `D.DebugChanged("combatWatch", ...)` and
core/Util.lua's `seenErrors` table becomes `D.DebugOnce(site .. err, ...)` (DebugLogGates 1),
so a Clear or the enable edge re-arms both and nothing is remembered while logging is off; the
steady state stays one line (the rejected-name line still rides the arm line only). The locale
scanner counts `.Debug<Word>(` calls as the debug sink, as it does NS.Debug.
Tests pin the Clear re-arming both gates, a watcher armed with logging off being stated on the
first pass after enable, the quiet steady state, and the library-absent stub answering false
without raising. Inventory and badge regenerated (562/562).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit f6e409cb0179a8dde508df9aca6a38fdfd6a41a0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 01:07:18 2026 +0530
DG-PC-01: adopt Slash 18 and Lifecycle 3 debug sinks; drop the arms' own edge lines
The Slash descriptor passes the gated sink as `debug`, so the dispatcher's refusals (the
disabled gate, an unknown verb, get/set/reset usage and not-found, parse and write refusals,
the profile verb's four) land as one `[Cmd] refused <verb>: <guard>` line each; the host keeps
its own lines for the verbs it owns. The Lifecycle descriptor passes it too, and the library
writes one `[Lifecycle]` line per edge with its holds, so modules/Override.lua's StandDown and
StandUp write none of their own (one line per edge, not two). traceCommand's stood-down tail
stays as context and its comment says the refusal is now the library's line.
Tests pin both library lines landing in this log, once, beside the host's command line; a host
verb's refusal gaining no library copy; no line for a call that fires no edge; and the Options
combat lock's `[Cfg] tab <key> refused (in combat)` line, once per combat, with the host's
switch not run. Inventory and badge regenerated (558/558).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 7548eceaeb98f139fa6f53bfe6f318dd711b3d62
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 1 00:55:54 2026 +0530
DG-PC-01: re-vendor LibKa0s v1.65.0 (Slash 18, DebugLog 18.2.1 with DebugLogGates 1, Options 27, Launcher 5, Lifecycle 3; kit revision 34)
Whole-folder copy of libs/LibKa0s/ and tests/_kit/ from the local tag v1.65.0, the CLAUDE.md
provenance line rolled in the same commit. The library-absent DebugLog stub gains DebugOnce,
DebugChanged, DebugForget and DebugAtEnable (each answering false, or nothing) so the
surface-parity case holds. Live vendor stamps (ARCHITECTURE, module-map load order with
DebugLogGates, testing, debug.md's api link) roll to v1.65.0. Adoption follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ebd8aa0e2ea02682e023d1e6b18cd7a0d9f4c6a7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:49:29 2026 +0530
DL-PC-SYNC: smoke-tests owed table names DebugLog 17, the vendored minor
DIAG-22's row still cited DebugLog 16 from the first v1.64.0 cut; the final
re-vendor (DL-PC-03) carries LibKa0s-DebugLog-1.0 minor 17, as debug.md says.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ebd8aa0e2ea02682e023d1e6b18cd7a0d9f4c6a7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:49:29 2026 +0530
DL-PC-SYNC: smoke-tests owed table names DebugLog 17, the vendored minor
DIAG-22's row still cited DebugLog 16 from the first v1.64.0 cut; the final
re-vendor (DL-PC-03) carries LibKa0s-DebugLog-1.0 minor 17, as debug.md says.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a3432431a882eabc618be12c9b49b2f5849bc697
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 21:24:16 2026 +0530
DL-PC-04: README uses bullets, never numbered lists (documentation-§1, standard v2.72.0)
CurseForge's description page does not render a Markdown numbered list, so
the Usage steps and ## Reporting a bug become `- ` bullets, markers only.
Reporting a bug is now the v2.72.0 item 9 fixed body with /pc. The doc
structure suite pins the bulleted body and gains a case that fails on any
numbered README list item outside a code fence (554/554, inventory
regenerated).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 0ebd9caeb765d9719e7e2a059f36e9285c25aeea
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 19:46:24 2026 +0530
DL-PC-03R: assert the end marker so `debug diagnostics` is told apart from `on`
The case's only discriminator had been replaced by the flag check, which
`/pc debug on` also satisfies. Assert the report's end marker instead and
credit it in the comment.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 49edc8bcfa63bda426baaacf85f55a7236801854
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 19:36:47 2026 +0530
DL-PC-03: re-vendor the final LibKa0s v1.64.0 (DebugLog 17, DebugLogDiagnostics 2, kit revision 34); diagnostics turns logging on
Both payloads copied whole from the local tag v1.64.0 and normalized to
.gitattributes. DebugLog 16 draws the orange Diagnostics link in the
console's title bar; DebugLog 17 / DebugLogDiagnostics 2 make a run turn
debug logging on for the session through SetEnabled(true) before it
writes (debug-logging-§14, standard v2.71.0). PrettyChat keeps the default:
no diagnosticsEnablesLogging = false, and runDiagnostics wraps no
SetEnabled. Kit revision 34's contract suite adds the already-on case and
declares the opt-out case a skip. The CLAUDE.md provenance line stays
v1.64.0, the same tag re-cut. The three-place standards reference carries
no version, so v2.71.0 needs no stamp there.
tests/test_diagnostics.lua: `debug diagnostics` now asserts the flag was
off before and on after, rather than unchanged. docs/debug.md says the run
turns logging on for the session (and a /reload turns it off), names the
link as the one non-slash way in, and points at the DebugLog 17.2 api doc;
slash-dispatch.md matches. testing.md: kit revision 34.
docs/smoke-tests.md: DIAG-4 rewritten (diagnostics, by verb or link, turns
logging on for the session; /reload turns it off) and DIAG-22 added (the
orange Diagnostics link beside Debug On/Off, a small gap, plain text; a
click writes the report); DIAG-19 lists the DIAGNOSTICS key; both listed as
owed. Inventory regenerated (554 cases, one declared skip); badge 553/553.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 1d7cdb5bb6527bab20c8bd6590faf0f44d33f72a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 16:38:49 2026 +0530
DL-PC-02: debug coverage audit and fill (debug-logging §8 Diagnosis, §9 quiet steady state)
- [Visibility] combat boundary line names the edge (combat entered/left).
- [Events] combat watch armed/disarmed, change-gated; the rejected-name line now
rides the arm line instead of repeating on every re-registration.
- [Init] summary gains ", stood down: <holds>" and ", chat addons: <names>" tails
(both settled at load, while the session-only flag is off).
- [Cmd] line per slash command as typed (pipes doubled, stood-down tail), plus a
"<verb> refused: <guard>" line at each host-owned refusal.
- [UI] Categories tab switch and string selection; refresher pcall errors traced
once per distinct site and error (NS.Util.TraceCaught).
- tests/test_debug_coverage.lua (14 cases), two quiet-steady-state cases; the
two resetall line-count cases now expect the [Cmd] line.
- docs/debug.md Coverage section; moved citations re-pointed; inventory and
badge at 552.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit fa4f9fd5829da94a48d9d862233b1228f3bf730e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 16:07:17 2026 +0530
DL-PC-01: re-vendor LibKa0s v1.64.0 (kit revision 33), resize smoke checks
Copies libs/LibKa0s/ and tests/_kit/ whole from the local v1.64.0 tag
(Core 9, DebugLog 15.1, Widgets 11.3, PerfPanel 6; kit revision 33 adds
mock_resize.lua) and rolls the CLAUDE.md provenance line in the same
commit. No surface is adopted: the resizable console and copy window
arrive through the library alone.
Live-doc stamps of the vendored release follow (ARCHITECTURE, module-map,
testing's kit revision, and performance-sweep's re-take, whose result is
unchanged). The three-place standards reference carries no version in
this addon, so v2.70.0 needs no edit there.
docs/smoke-tests.md gains DIAG-20 (console resize: grip, minimum, kept on
close and reopen, default after /reload, another addon's console
unaffected) and DIAG-21 (copy window resize), both listed as owed. No
perf panel: PrettyChat ships no perf harness.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 544e60f69db8f0bf280606f8626f1d66ee403752
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:52:35 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. Its own revision-31 citations move to 32.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 544e60f69db8f0bf280606f8626f1d66ee403752
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:52:35 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. Its own revision-31 citations move to 32.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ea56280457283ef09b65cb84b5ef4c0eb212245e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 08:12:22 2026 +0530
SP-FIN-01: renumber the mock header's _G override to 17 (two items were 16)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit cea1ed455fa7a01272fbcc5866ec01ebfebf5175
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Sep 30 01:40:42 2026 +0530
SP-FIN-01: sync docs (Lifecycle seam and Profiles load position mapped, stale counts and a citation fixed)
- ARCHITECTURE.md: seven load-bearing positions (settings/Profiles.lua last,
pinned by tests/test_profiles.lua); core/LifecycleSetup.lua row in the module
map and NS.Lifecycle row in the namespace table.
- module-map.md: thirteen `local _, NS` files; seven load-bearing positions;
NS.LIBKA0S_MISSING names settings/Schema.lua; NS.Config.BuildMain and
NS.SchemaRuntime / NS.SchemaLib rows.
- testing.md: luacheck covers 55 files; nine seam files (Lifecycle, Schema);
nine adopted seams plus the Profiles page; wow_mock overrides seventeen keys.
- DEPENDENCIES.md: logo recipe citation core/LauncherSetup.lua:102-103.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 697aeedacee095c85ded7eb35678358d1d4de32a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 22:29:31 2026 +0530
SP-PC-03R: apply the clarified Pending sign-off policy; fix three expected strings
Pending sign-off was written under the old wording, and an earlier review
had the new checks taken out of it. Under the 2026-09-29 clarification it
now lists, by new ID with origin and reason, 115 of the 128 checks: the 11
new checks (PROFILE-1 to 10, DEGRADED-9), the 22 whose expectation this
rework corrected against the code, the old checks an owed list names as
never run (T-99, T-104 to T-107, T-97/T-98, T-29c, SMK-F001), and every
other old check, since the old document carried no Result lines. The 13
left out have a recorded owner pass and an unchanged expectation: DIAG-1,
DIAG-3 to 8, DIAG-14, COMBAT-4 and DEGRADED-8 (the 2026-09-26 diagnostics
run) and LAUNCH-2 to 4 (the 2026-09-25 minimap re-check). DIAG-2 stays
pending: no recorded row covers the [Globals] line.
Every expected chat and console string was re-checked against the code
by driving the real dispatcher headlessly, live and library-absent. Three
did not match:
- SLASH-3: /pc list prints 180 lines (170 setting rows), not about 170.
- SLASH-6: /pc get echoes `<path> = <value>`, and the format is unquoted.
- RESET-5: the reset echo goes through the same formatter as /pc get, so
chat shows single pipes, not doubled ones.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit ed4ad53c74ac7f2880e4b0a5e26e73c427724d9e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 21:46:26 2026 +0530
SP-PC-03R: LOC-4 fails on the missing-original placeholder; PANEL-16 ticks Enable
LOC-4 carried T-106's wording and expected no empty or nil Original line.
The client never prints one: /pc test and the panel's Original box both
show the gray "(original not available)" for a global the locale does not
define (pinned by tests/test_override.lua). A first run of this owed check
would have passed while missing the very finding it exists for. It now
fails on that placeholder and records every global that shows it.
The routine row sends quick-recipe step 4 to PANEL-16, but PANEL-16 only
exercised the New box, so the toggle half was dropped: no check ticked a
row's Enable on the panel and watched the next chat line change live.
PANEL-16 now unticks the Enable, expects Blizzard's line at once with no
/reload, and ticks it back.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit cd39f6aafff414a383a85efe91c4101c04b8f551
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 21:30:26 2026 +0530
SP-PC-03R: restore smoke routing and correct six check texts
The review of SP-PC-03 found checks that no longer ran when their
trigger changed, lost arms of old checks, and expectations that do not
match the code.
- Which checks to run: every row now names the new ID of each check its
old When-to-run groups held. The re-vendor and chrome rows get back
RESET-3 to 7, RESET-10, COMBAT-1 to 2 and PANEL-14; the diagnostics
and slash rows get COMBAT-4; the Panel.lua row gets DIAG-9 to 15; the
launcher row gets STATE. The routine row replaces the quick recipe
with INSTALL-2 (a plain /reload), TEST-1, the new OVR-10 (one real
chat line, the recipe's step 3) and PANEL-16. debug.md names COMBAT-4.
- RESET-11 carries T-57's path-reset arm and its /pc list Loot check.
- RESET-12 includes the footer control's one [Set] line (T-26).
- STATE-2: the panel checkbox writes through the schema and prints
nothing to chat; only the verbs echo.
- DEGRADED-3: the stub reports the missing window once per entry point.
- SLASH-1: the help header ends with the /prettychat alias note.
- Pending sign-off lists only unsigned checks carried over from the old
doc, per S4.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit a2447f5239d80bf2efa2958f215c30832f5a853e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 21:10:49 2026 +0530
SP-PC-03: rewrite smoke tests as one evergreen, theme-grouped suite
The smoke document had grown to 1186 lines in 14 groups with two ID
schemes (T-NN and SMK-F001), two formats, a duplicated T-26b, four checks
orphaned under "Reporting a failure", and the same behavior walked in
several places (the resets, the degraded install, the console chrome,
enable and disable). Several expectations had gone stale: /pc test writes
to the debug console, not chat; a dropped conversion now saves; /pc reset
takes a path; Loot has 17 strings. Spec S4 (owner decision D4) asks for one
deduplicated suite grouped by theme with stable IDs.
All 83 old checks and the 4-step quick recipe map to 127 checks in 13
themes; none dropped, stale halves corrected. The new PROFILE checks cover
the Profiles page and the /pc profile verb (list, switch, unknown name,
quotes, while disabled, in combat), and DEGRADED-9 its library-absent
line. The never-run T-99 and T-104 to T-107 and the new profile checks sit
under Pending sign-off with their origin. The Non-English client section
keeps what tests/test_doc_structure.lua pins, and cites ConsumableMaster
LOC-1 and KickCD LOC-1. Inbound citations in ARCHITECTURE.md, debug.md,
common-tasks.md, testing.md and two test comments now name the new IDs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 54e4bdb6ab13a7a60f0217ac46ad79f6ac6d8ce0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 20:42:48 2026 +0530
SP-PC-02R: name profile, liveVerbs and profiles in the Tier-1 docs
docs/module-map.md's settings/Slash.lua row still listed the COMMANDS verbs
without `profile` and described the descriptor only by its format/parse hooks,
though the ARCHITECTURE module row was already updated. The row now lists
`profile` in COMMANDS order and names the descriptor's two new fields:
`liveVerbs` (lib.LIVE_VERBS copied at load plus `profile`) and `profiles` (a
function returning PrettyChat.db at call time, the store CliProfile uses).
Sweep of the other docs for verb lists or counts without `profile`: the only
other current list was docs/scope.md's slash CLI bullet, which gains `profile`;
its Profiles bullet now mentions the chat verb too. The README 1.3.0 history row
is a record of that release and stays as written. The counts (ARCHITECTURE's
"14 verbs", smoke T-03's fourteen, slash-dispatch.md's live set) already
include it.
Gate: tests 538/538, luacheck 0/0 in 55 files, lizard 0 functions above CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 2ad9c08dd8ff535e60fbaabd47916689d0103fa8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 20:28:15 2026 +0530
SP-PC-02R: dispatch every live verb in disabled/7 while actually disabled
The `profile = true` entry in step 7's LIVE_VERBS could not fail. The loop
walks NS.COMMANDS in order and `resetall` comes right before `profile`.
`resetall` puts General.enabled back to its default of true, so `profile`,
`debug`, `diagnostics` and `enable` all ran with the addon up. Those verbs
answer then whether they are live or not. Dropping `profile` from
settings/Slash.lua's liveVerbs left the case green, which testing-§12 forbids
and which defeats spec S3 step 4's "test_disabled.lua pins `profile` as live".
The loop now re-disables after `resetall` as well as after `enable`, and it
asserts that the addon is disabled before each dispatch. That way a future
writing verb that re-enables the addon breaks the case loudly instead of
quietly hollowing it out. Mutation check: with `profile` commented out of
liveVerbs, this case now goes red, alongside the test_slash.lua and
test_profiles.lua disabled cases. The test count is unchanged (538).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 22c53fcd3ddd393020caaf3a297293b7aacdb634
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 13:02:53 2026 +0530
SP-PC-02R: re-take the performance sweep; make the disabled profile case catch a narrowed liveVerbs
The result block in docs/performance-sweep.md had been hand-edited rather than
re-taken since SP-PC-01R added a C_Timer.After to settings/Profiles.lua. The
documented command now returns 43 lines across 12 files, and the block is
replaced with its real output. The three missing hits were
settings/Profiles.lua:130 (a comment), :137 and :143. The reconciliation now
counts fifteen comments and six shipped call sites. A new section covers the
Profiles page's next-frame redraw and why it does not touch criterion (a):
it is a one-shot, coalesced hop off a player-made profile change, not an
OnUpdate, a ticker or a game-event handler. The header now names the v1.63.0
tree. performance.md's runtime table and the performance-§12 register row in
ARCHITECTURE.md name the new consumer and the re-take.
The falsification comment on "/pc profile answers while the addon is
disabled" named a mutation (liveVerbs of `profile` alone) that left the case
green, because the case sent no reserved verb while disabled. The case now
asserts that `get General.enabled` still answers while disabled. Both named
mutations were run and both redden it. The test count is unchanged (538).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 08ea57d2af5a1b3268ed9650c4dcde9c5e0e9a7f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 12:42:29 2026 +0530
SP-PC-02: /pc profile via CliProfile
Profiles became user-visible with SP-PC-01's Profiles page, but nothing reached
them from chat. LibKa0s-Slash minor 17 ships the profile verb once for the whole
collection (owner decision D1), so PrettyChat registers its own row and routes it
to the library: bare `/pc profile` lists the profiles with the current one
marked, `/pc profile <name>` switches to an existing profile (case kept, spaces
kept, one pair of quotes stripped), an unknown name is refused with the list and
a did-you-mean, and nothing is ever created (D3).
- COMMANDS gains {"profile", L[...], Sl:CliProfile(rest)} after resetall, beside
the other settings verbs; its description joins the enUS manifest.
- The descriptor passes profiles = function() return PrettyChat.db end, asked at
call time since this file runs before OnInitialize builds the db. The switch
is db:SetProfile, so it runs the same OnProfileChanged adopt path and one
[Profile] line as a switch on the page; the library logs nothing.
- `profile` answers while disabled: PrettyChat used to pass no liveVerbs, and
the library leaves `profile` off lib.LIVE_VERBS on purpose, so the descriptor
now passes lib.LIVE_VERBS copied at load plus "profile". A profile holds its
own General.enabled, so switching to one where the addon is on is a repair.
The gate comments that said no liveVerbs is passed are rewritten.
Tests first: tests/test_profiles.lua gains six cases (list order and mark,
switch runs the handler once, unknown refused and nothing created, quotes,
combat refusal, live while disabled and brings the addon back up);
tests/test_slash.lua pins COMMANDS by value (fourteen verbs, help one row each);
both disabled LIVE literals gain `profile`; the degraded case also drives the
row. Docs: ARCHITECTURE Slash Commands and module row, slash-dispatch.md
(sample, gate, reference and internals tables), profiles.md, common-tasks.md,
the README profiles answer, smoke T-03's count; test-cases.md regenerated and
the badge moved to 538; shifted citations re-pointed (slash-dispatch.md into
settings/Slash.lua, performance-sweep.md into tests/test_libka0s.lua).
Gate: tests 538/538, luacheck 0/0 in 55 files, lizard 0 functions above CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 40a2b5f77f6fa600614ccf357bab7b0d3244dfdf
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 12:27:40 2026 +0530
SP-PC-02: re-vendor LibKa0s v1.63.0
Both payloads copied whole from the local v1.63.0 tag (dd7a774), never a working
tree. Only libs/LibKa0s/Slash.lua moved (minor 16 -> 17: the profiles descriptor
field, CliProfile, ProfileSwitch, lib.ProfileNames and nine PROFILE_* strings);
tests/_kit is byte-identical at kit revision 31. The CLAUDE.md provenance line
rolls in the same commit, as the vendor-sync gate requires.
The re-vendor alone turns the by-name Slash parity case red, because the live
instance now has CliProfile and ProfileSwitch and the library-absent stub had
neither. The stub gains both on the Slash version-17 route (b): each prints the
stub's missing-library line and switches nothing, ProfileSwitch answering false.
The degraded-Slash case in tests/test_libka0s.lua pins that (one line each, no
switch, no profile created), as assertions in the existing case, so the count
stays 531.
Version-now lines roll (ARCHITECTURE library inventory and gate minor,
module-map load order, testing.md, slash-dispatch.md), and performance-sweep.md's
citations into tests/test_libka0s.lua move by the 24 lines the case gained.
Bundle: docs/revendor/2026-09-29-v1.63.0/ (only the Slash minor 17 profile
surface is adopted, by this item; no interview, no issues filed).
Gate: tests 531/531, luacheck 0/0 in 55 files, lizard 0 functions above CCN 15.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 4f26883aad654bd4c712c362e23092687a3e561c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 11:30:36 2026 +0530
SP-PC-01R: redraw the shown Profiles page a frame later, never under its own control's callback
A switch, new profile, copy or reset made with the Profiles page's own
AceDBOptions control fires the profile event from inside AceConfigDialog's
ActivateControl. The adopt path redrew the shown page synchronously, which
re-opened AceConfigDialog into the page's container and released the
activated widget; AceGUI:Release wiped its userdata table in place, and
ActivateControl's read of user.rootframe after the callback raised
("attempt to index field 'rootframe'") whenever the shared pool handed the
re-open a different widget. That is the rebuild-under-a-live-callback
hazard options-ui-§11 names.
RefreshProfilesPage now marks a hidden page at once (which draws nothing)
and redraws a shown one through C_Timer.After(0), one queued pass per
frame. The header comment and docs no longer claim a change made on the
page needs nothing from the adopt path. A new case pins that no Open lands
while the event is on the stack and one lands the frame after; it goes red
under the synchronous redraw. The shown-page redraw cases flush a frame.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 5cf470299feded5216c6b2c3533c2de1bfbbd051
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 11:09:27 2026 +0530
SP-PC-01R: pin the Profiles page's silent opt-out with a chat survey
The degraded-install case asserted only that no Profiles page exists and
that a switch does not raise. OptionsRegistry pcalls every builder and
drops a page whose builder raises, printing PAGE_FAILED to the player, so
the case passed whether Build opted out or crashed (testing-§12, §8).
The case now asserts no printed line contains "failed to build", and
carries a red-under line. Verified in a scratch copy: narrowing the
four-library guard in settings/Profiles.lua aceLibs() to `libs.config`
turns the case red with "settings page 'Profiles' failed to build:
./settings/Profiles.lua:86: attempt to index field 'dbOptions'". No case
added or renamed, so docs/test-cases.md and the badge stay at 530.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit e545f38e383f1c4e418b7d343d36db23aa10de9a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 10:58:54 2026 +0530
SP-PC-01R: regenerate docs/test-cases.md after the Defaults-button case rename
43fc1b1 renamed the Profiles page case to "... with no Defaults button" but
left the generated inventory reading "... with no Defaults action", so
`lua tests/run.lua --list` no longer matched docs/test-cases.md.
testing-§5 and docs/testing.md require the inventory to be regenerated in
the same change as a rename. Regenerated from --list (CRLF); the count
stays 530, so the README Tests badge is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 43fc1b14cb4f7a949e4b19b604708367567e6910
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 10:09:31 2026 +0530
SP-PC-01R: pin the Profiles page's missing Defaults button and the veto wiring; fix stale docs
The review of SP-PC-01 found two cases in tests/test_profiles.lua that
testing-§12 does not accept. The "no Defaults button" check read
panel.defaultsOnClick, which only a host sets, so `defaultsButton = true`
left the suite green. It now reads the library's own state: the page must
record wantsDefaultsButton == false, and after the first show defaultsBtn
must be nil. Each assertion was checked red under that mutation on its own.
The reset-veto case named `skipRestoreAll` as a mutation that would turn it
red, but dropping it changed nothing. With resetProfile supplied, the library
already narrows its walk to sessionOnly rows, so no behavior can see the
field. The wiring is now read off settings/OptionsSetup.lua's source with
comments stripped, the pattern test_libka0s.lua already uses for descriptor
fields. This was checked red under that mutation too.
Docs had drifted from this item's changes. module-map.md still said
AceConfig-3.0 had been removed on the same line that now lists it as loaded.
smoke-tests.md T-21 and the LOC walk, slash-dispatch.md and settings-panel.md
still described two sub-pages. performance-sweep.md's result block (and its
prose citations) no longer matched the page's own sweep: test_libka0s.lua
moved by this item, and Override.lua had been stale since before it. The
block is now the live sweep output.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit f6dcc4acdfe4066c41e692daae07c1ce3b862ac4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 09:55:25 2026 +0530
SP-PC-01R: name Profiles -> Reset Profile in the reset tooltip; fix shifted wow_mock citations
The review of SP-PC-01 found two defects.
The Options descriptor passed neither `resetProfile` nor `profilesPage`, so the
composed Master controls "Reset all settings" tooltip kept the pre-profile
wording, "Restore every setting in this addon to its default". Now that a
Profiles page ships, that overstates the reset (it resets the active profile
only) and contradicts docs/profiles.md. options-ui-§12 says the tooltip SHOULD
name the equivalence with Profiles -> Reset Profile, and `profilesPage = true`
with `resetProfile` is the library's documented way to say so; every other
addon with a Profiles page passes both. `resetProfile` is PrettyChat:ResetAll,
late-bound, so the library's RestoreAllDefaults, if ever reached, is the same
profile reset. tests/test_profiles.lua now pins the tooltip through the real
button's OnEnter, and the veto case asserts the library's reset runs ResetAll
once (it previously pinned the row walk leaving profile rows alone, which is
no longer the whole act). Both go red with either field dropped.
SP-PC-01 inserted seven header lines into tests/wow_mock.lua, moving the
comment docs/performance-sweep.md cites from :134/:135 to :141/:142; the
citations are updated. README badge and docs/test-cases.md move to 530.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
commit 644178ec956d1e50a4abf03c510952f684e4d1f4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Sep 29 09:34:30 2026 +0530
SP-PC-01: Profiles page, profile-event redraw and docs/profiles.md
PrettyChat already kept every setting in db.profile and already had the three
AceDB callbacks, but no player could see or manage a profile: there was no
Profiles page, so the addon behaved unlike the seven siblings that ship one and
docs/ARCHITECTURE.md recorded profiles.md as Not applicable. The collection-wide
`profile` verb (S3) also needs profiles to be a visible, documented surface.
- Vendor AceConfig-3.0 (Registry, Cmd, Dialog) and AceDBOptions-3.0 from
AuraMaster/libs. Same Ace3 release as the Ace libs already here (content
identical apart from $Id$ keyword expansion; KickCD and ConsumableMaster
copies are byte-identical to AuraMaster's). Loaded after AceGUI, in the
AuraMaster/AbsorbTracker order, because AceConfigDialog resolves AceGUI
non-silently at load.
- settings/Profiles.lua: AceDBOptions in a library canvas, last in the rail,
no Defaults button, drawn lazily into a SimpleGroup that is shown on every
draw. It redraws once per profile event (counted), never on the library's
structural fan-out, so an open dropdown is not torn down.
- The shared adopt path in core/PrettyChat.lua (migrations, latch, Reapply,
one debug line) now also redraws the Profiles page.
- options-ui-§3/§12: the global reset's veto is named once
(Schema.VetoedFromResetAll: the Profiles page and every profile-backed row)
and passed as the Options descriptor's skipRestoreAll.
- tests/test_profiles.lua (11 cases) plus the Ace fakes in tests/wow_mock.lua;
page-count pins in test_panel/test_libka0s move from two pages to three.
- docs/profiles.md; ARCHITECTURE (load order, module map, namespace table,
Documentation map row now Present, dependencies, known limitation retired),
schema, scope, settings-panel, module-map, data-flow, testing, DEPENDENCIES,
README and the regenerated test-cases.md / badge (518 -> 529). Citations
shifted by these edits are corrected (.luacheckrc, smoke-tests.md).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R83GGMfYm2GoXLBwdCsbUH
This mod has no additional files