1.0.0-release
What's new
commit 419bc1e8999d72090d3947173dbe1d7a45d8c9ae
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 17 01:25:44 2026 +0530
Release v1.0.0: the first release. The TOC, NS.version, scope.md's heading, INSTALL-2's tooltip and test_slash's version check move to 1.0.0; the README's Version History replaces the unreleased 0.1.0 row with a single 1.0.0 row, and its intro says any loot rather than a ring. The release run 20261017-012204 (80df719, clean) passed every gate: lint 0/0, 1480 passed, 7 perf scenarios, max CCN 14 and blindFiles 0. Its ANALYSIS.md records core/Compat.lua newly in the 1000–1500 band at 1009 lines
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 80df71955247a25868aeafdf74409b889f28fd0e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 17 01:22:03 2026 +0530
FR.Pick under the release CCN ceiling (19 → under 15): the session-group test and the per-entry test move into two local helpers, sessionFeedKey and pickable, with no change in what is picked. The release run that refused 1.0.0 on it (docs/automated-tests/20261017-011710/) is committed as the record of the refusal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 05b777ca983845211d6ec570f90d2dac500cf18d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 17 01:15:43 2026 +0530
Perf capture 20261017-010913: the first in-game capture (two trash pulls in Murder Row, party of 5) recorded as a bundle — no bucket fired in either combat-gated arm and the -2.35 ms/frame delta is backwards, so it measured no addon code; DIAG-4 stays owed, and the analysis notes that its recipe may not be reachable while the arms close at combat end
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit d0364e625072f36aa6cad0f7775be15ed0d4eb70
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Sat Oct 17 01:03:55 2026 +0530
README: the Screenshots section links the eight CurseForge screenshots (compact and full Drops, drop details and History, the Offer window and the toast) in place of the placeholder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit bed8d48615857b3e4e92d917b76eb5bd4cdbbed6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 22:44:32 2026 +0530
DW-R4: the strips place their buttons only when the layout or Post changes — tests/perf.lua's four refresh scenarios had crept over their ceilings (16048.8 full and 12672.9 compact bytes a repaint against 14500 and 11500), bisected to feedback-15's footer row and feedback-16's icon-only strip: the Drops strip built its row and slot tables and re-anchored its three buttons and its text on every repaint in both layouts, History's its row. Each strip now remembers what it was placed for (Drops: the layout and whether Post shows; History: the layout) and skips the work when neither changed. After: 14096.8 full and 10864.9 compact, every pair matching and under its ceiling. test_drops_strip pins it (fails before: 8 re-anchors over two unchanged repaints); docs/performance.md records the re-run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit bed8d48615857b3e4e92d917b76eb5bd4cdbbed6
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 22:44:32 2026 +0530
DW-R4: the strips place their buttons only when the layout or Post changes — tests/perf.lua's four refresh scenarios had crept over their ceilings (16048.8 full and 12672.9 compact bytes a repaint against 14500 and 11500), bisected to feedback-15's footer row and feedback-16's icon-only strip: the Drops strip built its row and slot tables and re-anchored its three buttons and its text on every repaint in both layouts, History's its row. Each strip now remembers what it was placed for (Drops: the layout and whether Post shows; History: the layout) and skips the work when neither changed. After: 14096.8 full and 10864.9 compact, every pair matching and under its ceiling. test_drops_strip pins it (fails before: 8 re-anchors over two unchanged repaints); docs/performance.md records the re-run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 9ef5e69403617298326801028d9696a1394f27a1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 21:48:53 2026 +0530
Interface 120105 (patch 12.1.5): the TOC's Interface line, the README's WoW badge, DEPENDENCIES.md's Retail line and test_harness's pinned value
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit ad7971aa0bf51706e2e7988bb69af18261ab605a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 21:38:14 2026 +0530
Smoke tests: STATE-6 and FEED-79 passed in the client (the owner, 2026-10-16) — feedback-17's real-boss test data at M+10, Heroic, Mythic, LFR and world bosses, the group tooltip's rows, and feedback-18's You from the sample's own gear; both off the pending sign-off table
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 3edbbdbd327bf1ce821a2d49136d5ebc6f2ea681
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 21:32:48 2026 +0530
Screenshots retaken: all eight project-page images in media/screenshots replaced with the owner's new captures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 3edbbdbd327bf1ce821a2d49136d5ebc6f2ea681
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 21:32:48 2026 +0530
Screenshots retaken: all eight project-page images in media/screenshots replaced with the owner's new captures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 93188c4ae4c21f06238d6504888363bcfce14bde
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 21:02:04 2026 +0530
DW-R3: a sample's You is its own worn gear, never yours (feedback-18) — the Drops row's Me cell and the compact card's You read your real equipped gear while the verdict and the detail card's Replaces came from the sample's worn item, so a test row read `You 334 ▲19` over a card replacing a 292; every sample now carries the worn items its Me verdict was judged against (`testGear`, TestData.GearFor: the baseline in the first slot, a pair's or one-hander's other slot another item at least as high, a two-hander's off hand empty, nothing for an unknown verdict) and TestMode.GearOf hands it to both layouts in place of the gear snapshot (its icons' tooltips the links, not your slots); the inspected looters' gear is built the same way, so Them fills both slots of a pair. Regression test with your real gear at 999 in every slot (fails before the fix); docs synced (module-map, testing, STATE-6, test-cases)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 7e30809836134b5591a326f6da2e8b19dc9b623d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 20:32:07 2026 +0530
DW-R2: test mode's data looks like real play, and a group's tooltip is rows (feedback-17) — test mode's pool reads the season's dungeons and raids at every difficulty (SimPool `everything`), the keys' loot previewed at Mythic+ 10 (Compat.JournalSelect's keystoneLevel, set only where GetPreviewMythicPlusLevel can restore it), each entry naming its boss (JournalEncounterName) and flagging world bosses (JournalInstances' worldBoss); every sample group is one real place dropping that boss's or dungeon's loot at its difficulty and named for it, sized as its content is (a party of five, a raid of twenty, Raid Finder's 25): Drops is this session, a +10 run and three Heroic raid bosses (16 drops, every state still covered), History 22 groups over four weeks across M+10, Heroic dungeons, Heroic, Mythic and LFR raids and world bosses (66 drops, every outcome, the alt's group kept). Header tooltips in both layouts and both tabs drop the one-line long form for gold-labeled rows (WC.HeaderFacts: Instance, Difficulty, When, Drops, Seen by, Group (n) with every member five a row, GroupRoster.TipRows replacing TipLine), the kind line in gray after. Mock journal gains a raid, world bosses, boss names and the preview level; docs synced (module-map, compat-layer, testing, test-cases, smoke-tests STATE-6 and FEED-79 with supersession notes)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 806cea549aff0b959a50077f1187e3cab17f3523
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 19:56:07 2026 +0530
Screenshots for the project page: eight images in media/screenshots, named dropwatcher.screenshot.01.png to .08.png as the other Ka0s addons name theirs (.pkgmeta already keeps media/screenshots out of the package)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit a4956af48d72dfb08817b014c39fc25e16a63101
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 17:34:30 2026 +0530
DW-R1: no Scan group in the title bar — compact showed it twice, in the title bar and as the strip's icon; the title bar's button is gone in both layouts (it was already hidden in full), so Scan group is the Drops strip's alone (WindowTitleBar no longer builds f.scanButton, CompactChrome's layoutScan removed; TB.ScanTip stays for the strip). Tests move their clicks and tooltip checks to the strip's button. Docs synced (module-map, data-flow, testing, smoke-tests with supersession notes, design-readings); the FEED-64 ledger row marked superseded by feedback-16
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 8e67922f5088caacf6866a9538612a79cb368773
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 17:19:48 2026 +0530
README in the Ka0s addons' layout: Screenshots (a placeholder until images land) after the intro and Credits (JetBrains Mono, Open Iconic) at the end, the short GitHub issues form, unwrapped paragraphs; Usage cut from about 130 lines to five paragraphs (the window and the compact view, Drops, your own drops, History, the extras and settings), and a humanize pass over it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 23f7c5daff5f418df91ab0452a9f3d3dcc2cd256
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:57:43 2026 +0530
DW-R0: compact strips as icons with Scan group, chevron toggle, bare empty state (feedback-16) — in the compact layout every strip button is its mark alone, K.FOOTER_ICON_W (24) wide and centered, its tooltip naming it (FooterRow.Width / SetCompact), and the Drops strip carries Scan group beside the toggle as the full one does (right to left: Expand all / Collapse all, Scan group, Post); full keeps the labeled 150px buttons; the toggle's mark is chevron-down / chevron-up (was expand-down / collapse-up); the Drops empty state keeps `No drops yet` and its line and loses Preview with test data and Scan group in both layouts (SCAN_W and the two unused strings retired, EMPTY_H 50). COMPACT-9 in smoke-tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 23f7c5daff5f418df91ab0452a9f3d3dcc2cd256
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:57:43 2026 +0530
DW-R0: compact strips as icons with Scan group, chevron toggle, bare empty state (feedback-16) — in the compact layout every strip button is its mark alone, K.FOOTER_ICON_W (24) wide and centered, its tooltip naming it (FooterRow.Width / SetCompact), and the Drops strip carries Scan group beside the toggle as the full one does (right to left: Expand all / Collapse all, Scan group, Post); full keeps the labeled 150px buttons; the toggle's mark is chevron-down / chevron-up (was expand-down / collapse-up); the Drops empty state keeps `No drops yet` and its line and loses Preview with test data and Scan group in both layouts (SCAN_W and the two unused strings retired, EMPTY_H 50). COMPACT-9 in smoke-tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit f950a6a55f0403b2cf6e6a2bf3c53bd8da4965f9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:44:31 2026 +0530
New logo: the owner's new dropwatcher.logo.png and .jpg, and the TGAs regenerated from the PNG with DEPENDENCIES.md's Pillow commands (128x128 for the TOC icon, 300x300), RGBA, the same sizes as before
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 48f25a20ebc7531d2deaf0b3417fe88346551e37
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:44:32 2026 +0530
DW-Q4: published on CurseForge — the TOC carries `## X-Curse-Project-ID: 1748054` as its last field (the unpublished comment gone, toc-file-§1) and the README its CurseForge Version badge; test_harness asserts both. README also gains the History tab's detail card and that a /reload keeps this session's drops (a cleared drop stays cleared)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit f950a6a55f0403b2cf6e6a2bf3c53bd8da4965f9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:44:31 2026 +0530
New logo: the owner's new dropwatcher.logo.png and .jpg, and the TGAs regenerated from the PNG with DEPENDENCIES.md's Pillow commands (128x128 for the TOC icon, 300x300), RGBA, the same sizes as before
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 77d3612b3a4b9a46319b8116b0c1a2324f18cb94
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:44:31 2026 +0530
DW-Q4: doc sync before the merge — module-map names GroupPlace.ShortNames, Parts' roles and Who's limit, the left-justified NewHeader and CompactCards' HEADER_MAX / HEADER_CHARS (no longer "a long instance name"); testing.md names the LFR and per-piece cases; scope.md's window gains Expand all / Collapse all, the reload restore and History's detail card; slash-dispatch's clear stores the clear (Session.MarkCleared) so a reload keeps it; FEED-70 marked superseded by feedback-15; the compat family counts 85 shims (Compat.lua 63); the stale PLACE_MAX doc line removed from CompactCards
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 08ed03e215b98848b1b3c657fa0134fa76113fe7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:17:11 2026 +0530
DW-Q4: compact headers fit the pane — Looking For Raid reads LFR in every header and the History card's Where (GroupPlace.ShortNames: the client's two LFR difficulty names and the English one a History entry stored; GroupPlace.Parts takes them and answers each part's role), and a compact header cuts each piece to its own limit (CompactCards.HEADER_MAX: instance 14, boss 14, difficulty 11, situation word 16, age 7, count 6, recorder 9 characters), so a line with every piece at its limit fits the 76 characters a default-width pane holds; the long form in the tooltip keeps every name whole; Truncate drops a trailing space before its `…`. COMPACT-8 in smoke-tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 6a7d8c3f05d85cfcf0c9e9cdf38f892960612a6c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 16:04:29 2026 +0530
DW-Q4: compact headers read from the left — the shared header button (WindowGroup.NewHeader) justifies its text LEFT, so a compact Drops or History header, whose text is sized to the line, no longer centers it; the mock records SetJustifyH (the game's default CENTER when unset)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 131b59c0292dfa6321ca86a629693e6bed4184a5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 15:41:27 2026 +0530
DW-Q4: review leftovers — the History card's outcome chip no longer offers a right-click it does not have (the card's own Mark declined / Clear declined do that), the defaults comment for feed.content lists instance | session, README's Drops strips name Expand all / Collapse all and Post my tradeables, the smoke index reads HIST-1..7, and design-readings marks the feedback-10 strip reading superseded by feedback-15
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit fc3664273e2cf85d0ca163bba3adf6e6b44e4cb0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 15:38:24 2026 +0530
DW-Q4: final review fixes — one ask per item per looter and a cleared Drops tab both hold across a reload: History.AskState reads an entry asked (or asked before it went expired or declined) as sent while this load's Asks book says ready, so a restored asked drop's Ask button reads Asked and cannot whisper the looter again; a live LootFeed.Clear (/dw clear, Clear on boss kill) stores its time() as char.session.cleared (Session.MarkCleared / Cleared, dropped by a login) and FeedRestore.Pick skips entries dated before it, so cleared drops stay cleared; ARCHITECTURE's migration count reads eight; own-drop offers not kept across a reload recorded in known-limitations. test_feed_restore +2, 1474 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit cb5f75c2b45095a30073fdd667d9b7d17744396c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 15:19:02 2026 +0530
DW-Q4: The History tab's detail card: a History row (and a compact History card) draws the Drops rows' chevron, is indented under its header (the columns after WindowGroup.LEAD) and expands, on a click, a cell's or a plain item-button click, one entry at a time (WindowHistory.ToggleExpand / Expanded, the entry itself; both layouts share it), the chevron up while open; the card is new modules/HistoryCard.lua, drawn from the kept snapshot in the Drops card's frame pieces (DetailCard's box, chips, side boxes and trade box, now exported; DetailCells.VerdictChip): chips for slot, type, ilvl and the outcome in its tone, FOR YOU · AT THE TIME with the verdict and its deltas, FOR THE GROUP with the looter and the Them verdict (your own drop: the upgrade list is not kept), the recorded trade estimate in the Drops card's words, WHEN AND WHERE, and Link in chat, Mark declined / Clear declined and Show in Drops (History.DropOf finds the live drop, WindowGroup.Reveal opens its header and card, then the Drops tab is selected); side by side in the table, stacked in the compact layout. test_history_card, 1472 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit a1c721f341bd3c9d89ec0eb61a2554e197dd16f5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 15:00:44 2026 +0530
DW-Q3: Clear history lives in Settings: the button leaves both History strips (full Sort then Expand all / Collapse all, compact the toggle alone); Settings › Window › Layout draws Clear history beside Keep history for, as that row's pairWith partner (Settings.PageEditors.ClearHistoryButton, wired in settings/Pages.lua); its confirmation moved from WindowHistory into the History module (History.AskClear, History.CLEAR_POPUP: the same text, preferredIndex 3), so the settings row reaches it without a UI dependency, and Yes clears what Log() answers, test mode's or a simulation's session-only log while one is on. test_settings_pages +2, 1457 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit c9eb33a5ee3a8f675778add55ed948aa10949764
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 14:47:09 2026 +0530
DW-Q2: One footer button kind and Expand all / Collapse all: every button on a tab's strip is C.WINDOW.FOOTER_BUTTON_W (150) wide with the same icon and label in both layouts (new modules/FooterRow.lua: Slots, Place, PlaceInfo; Sort takes the width too, the short Post and Clear retired), right to left full Drops Sort, the toggle, Scan group, Post my tradeables, compact Drops the toggle and Post, History Sort (full) then the toggle and Clear history; the info text one line, ending where the row starts; the toggle reads Expand all while a shown header is collapsed and Collapse all once every one is open, sets every shown header of the active tab in its own state (WindowGroup.FoldAll, WindowHistory.FoldAll over FooterRow.FoldAll) and is off with no header; the compact Drops strip is always shown. test_footer_row, 1455 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit ec0126e5ecfb1d765e2ad6b5e134873340703e37
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 14:29:12 2026 +0530
DW-Q1: Content per tab: the Drops tab offers This instance and This session, History adds All, in both layouts (WindowFilterBar.CONTENTS / ContentValues; the one Content dropdown takes the active tab's rows on Sync, the compact Filters panel holding the same control, and a value the tab does not offer is refused); Drops' This session filters from the stored login turned into the client clock (Session.StartClock, a second early for time()'s whole seconds); one Content tooltip on both tabs; the feed.content row offers This instance and This session, and migration step 8 (NS.MigrateContentAll, per profile, idempotent) turns a stored all into session. The mock's time() follows GetTime(), and the suites that craft drops dated before the clock's zero log in a day earlier. test_content_tabs, 1447 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit cba6e686a28f9357ee465bbace40f3cdeea5eabb
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 14:13:16 2026 +0530
DW-Q0: review fixes — area group keys unique across a reload and restored drops not counted new: a new area group's key carries the drop's GetTime() after its id (area:<name>:<id>:<t>), since s.seq restarts every load while a restored group keeps its old key, so FeedRecords.Materialize no longer builds a second group under a restored key and History files the live drop in a group of its own; Window's onDropAdded skips the `n new` count for a restored drop on a window minimized before the reload. test_feed_restore +2, 1441 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 6569f4eeb0fdfc453fb873f8c9be6a88be7d1498
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 14:04:49 2026 +0530
DW-Q0: The session is the login and the Drops tab survives a reload: modules/Session.lua keeps the session start per character (char.session; an initial login sets it, a reload keeps it, a zone change moves nothing) and This instance's start, restored by a reload's first announcement in the same situation and instance; modules/FeedRestore.lua rebuilds this session's drops from the History log after a reload (this character's, not gone, the newest 200) through LootFeed.Restore (source restore: dated, grouped and placed as kept, past the situation gate and the filters, quality gate kept, never merged with another restored drop) and links each to its entry first (History.Adopt), so nothing is recorded twice; a restored drop opens no window, queues no toast and asks nothing. A false Expired is undone by the trade timer's live yes (beforeExpired). Compat.InstanceInfo answers the instance map id; LootFeed's average item level peeled into FeedFilter.AverageIlvl. test_feed_restore, 1439 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit cdd2abb06ec0e3a3c00617768ac6c3ea00a18839
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 13:35:38 2026 +0530
DW-P: Spec and checkpointed plan for the feedback-15 run (M25): the session is the login and the Drops tab survives a reload, Content per tab, one footer button kind with Expand all / Collapse all, Clear history in Settings, the History tab's detail card
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 384c3989ce44f3e8af56df4d302ddfe4ee973018
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 12:23:54 2026 +0530
Trade line read on 12.1.5 and a four-hour trade window: the bag item's TradeTimeRemaining line carries its hour term unexpanded ("3 |4hour:hrs; 49 min (including time offline)", captured in game 2026-10-16), so the decoder read no window and called a tradeable drop expired; TextParse takes each grammar template as one more spelling. C.TRADE_WINDOW is 14400 (four hours, seen in game), the simulator's window and the group-loot wording follow; the timer's expired fold carries the window so its reason no longer reads "(0s)"; the restriction signature is slash-separated so the debug log and diagnostics no longer eat "|t" as a texture escape. midnight-quirks row and compat-layer step added; 1429 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 384c3989ce44f3e8af56df4d302ddfe4ee973018
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 12:23:54 2026 +0530
Trade line read on 12.1.5 and a four-hour trade window: the bag item's TradeTimeRemaining line carries its hour term unexpanded ("3 |4hour:hrs; 49 min (including time offline)", captured in game 2026-10-16), so the decoder read no window and called a tradeable drop expired; TextParse takes each grammar template as one more spelling. C.TRADE_WINDOW is 14400 (four hours, seen in game), the simulator's window and the group-loot wording follow; the timer's expired fold carries the window so its reason no longer reads "(0s)"; the restriction signature is slash-separated so the debug log and diagnostics no longer eat "|t" as a texture escape. midnight-quirks row and compat-layer step added; 1429 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGzLWjsUwnJyJahyt4CYMC
commit 1519cb77dde6cd90e67a2ae71e71bbcbebe04247
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 01:05:58 2026 +0530
Docs sync for the multi-stat fix: module-map's TextParse row names StatLine and its ItemFacts row the tooltip's primary stats and specsClass; design-readings' class tables read the spec list as covering the class it was read on alone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012gzxsWPJfKmvpiLPWyX5KU
commit 1519cb77dde6cd90e67a2ae71e71bbcbebe04247
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 01:05:58 2026 +0530
Docs sync for the multi-stat fix: module-map's TextParse row names StatLine and its ItemFacts row the tooltip's primary stats and specsClass; design-readings' class tables read the spec list as covering the class it was read on alone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012gzxsWPJfKmvpiLPWyX5KU
commit 49509b69d425bda741da8826832f1c8193135606
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Fri Oct 16 01:03:06 2026 +0530
Multi-stat items judged for every primary stat: C_Item.GetItemStats answers the playing spec's primary stat alone and C_Item.GetItemSpecInfo the playing class's specs alone (confirmed in game 2026-10-15 on a Fireproof Drape judged useless to a Blood death knight and a Retribution paladin); Compat.ItemPrimaryStats reads every primary off the tooltip with the localized ITEM_MOD_* lines, ItemFacts merges them into the stats and records specsClass, and Evaluate holds only that class to the spec list; smoke ITEM-5 and the midnight-quirks row added; 1429 cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012gzxsWPJfKmvpiLPWyX5KU
commit 8c56ba69b248ca8ddddba4772548a92b635e3a11
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 15 00:22:40 2026 +0530
DW-P: Record M24 checkpoints; DW-P30 added; LibKa0s v1.72.0 tagged early with the owner's approval
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 8c56ba69b248ca8ddddba4772548a92b635e3a11
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 15 00:22:40 2026 +0530
DW-P: Record M24 checkpoints; DW-P30 added; LibKa0s v1.72.0 tagged early with the owner's approval
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit e0ebfb0e75ad0daff7c9f253177ca5aa4e49ffeb
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 15 00:16:01 2026 +0530
DW-P30: Automated-test bundle 20261015-001310 at 0109f2a, green on a clean tree after DW-P22, DW-P24 and DW-P25: lint 0/0 over 170 files, 1422/1/1423, 7 perf scenarios with every bytes/iter unchanged, max CCN 14 with no warnings and no blind files; DW.OnSharedFeatureEvent CCN 6 and LF.Receive CCN 4 stay under 15 (F16 X12)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 0109f2a8f263ff352309151d4caa3892d2e1ba28
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 15 00:12:02 2026 +0530
DW-P30: Docs sync for DW-P22, DW-P24 and DW-P25: INSTALL-4 and DIAG-4 read as landed (ff567d3, 917449f) and owe only the owner's client pass and capture, DW-P25 joins the no-in-client-check note, testing.md names test_setup's four nesting cases, module-map's PerfSetup row names within = "feed.add", the offline perf re-run is recorded after DW-P25; test-cases.md regenerates unchanged at 1422, the badge and the deviations register already match (X08 X12)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit c718bd3c7724d3f4c7471701272f33dcc990e8aa
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Thu Oct 15 00:00:54 2026 +0530
DW-P25: The disabled-state suite proves step 6 reach (every FeatureEventNames event fired through kit 39's __fireUnconditional, count >= 1 each, no write, print or show), walks step 7 over every NS.COMMANDS verb and the bare command, drives both launcher buttons for step 8, and adds step 10 through Kit.assertLatchHoldOrder; each case carries its red-under note, verified by mutation; 1422 cases (F04 F05 F18)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 917449f89d6373bb10837886ab5c4be65e4f1965
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 23:46:42 2026 +0530
DW-P24: evaluate and quality.gate declare within = "feed.add" and note a truthful parent (feed.add inside Receive, Perf 15's false at top level) from a depth counter LF.Receive holds around a pcall; four perf cases, offline pairs unchanged, LF.Receive CCN 4 (F06 X05 X10 X12)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit ff567d34e3eaae5ec6ed2440fae1b3a730e9a0e1
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 23:39:30 2026 +0530
DW-P22: Re-vendor LibKa0s v1.72.0 from the tag (Perf minor 15, kit revision 39) with its docs/revendor bundle; the CLAUDE.md provenance line rolls, and all six deviation rows are re-checked against the new tag with no trigger fired (F17 X06)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 6b8f198431b6304426d72614f7cf4e6fda6661ab
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 23:17:30 2026 +0530
DW-P29: Automated-test bundle 20261014-231415 at fb8128c, green on a clean tree: lint 0/0 over 170 files, 1417/1/1418, 7 perf scenarios, max CCN 14 with no warnings and no blind files; locales/enUS.lua enters the 1000-1500 band, Accepted (F16)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit fb8128cfdd03788f9ec7583439126c6bbd363eb4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 23:14:02 2026 +0530
DW-P29: The toc-file-§5 load-bearing harness case splits into sourcesOf, eventFiles, flagSharedEvents and flagSectionReads; its CCN 22 closure from DW-P26 drops under the release gate's 15 (F16)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 7f196b354d0c94321a93841f5660a5826d11333a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 23:02:28 2026 +0530
DW-P28: Docs sync for M24; smoke checks for each change (perf capture DIAG-4 included) with their sign-off rows; test-cases.md and the badge confirmed at 1417 (X04 X05 X08)
data-flow.md gains the stood-down refusal path (NS.StoodDownRefusal, DW-P16). performance.md says
what a press answers during a suspended run, records the 2026-10-14 offline re-run (every
capture-off/on pair still matches) and points at DIAG-4 for the in-client nesting capture, owed once
DW-P22 and DW-P24 land and never invented. testing.md names the new cases in test_disabled,
test_harness, test_setup, test_settings_pages, test_asks, test_compat and test_toast.
smoke-tests.md adds INSTALL-4, SLASH-7, PANEL-8, STATE-5, COMPAT-4, DIAG-4, DEGRADED-2, ROSTER-3,
ASK-10, TOAST-4 and LOC-2, their index ranges and Pending sign-off rows, and a Review 2026-10-14
(M24) sign-off table mapping the review's C-01..C-08, ANN-1, re-vendor, regression and cross-addon
checks onto them, every row empty for the owner. test-cases.md regenerates unchanged (1417), so the
README badge already matches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit eae722a39835823d04a753156771e5447b39c5cc
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 22:49:22 2026 +0530
DW-P27: ARCHITECTURE.md spills Module Map, Settings Schema and Known Limitations to module-map.md, schema.md and the new known-limitations.md per the corrected documentation-§3; the TOC count is dropped and the compat family count reads 84 (F13 F14)
The hub goes from 576 to 291 lines, and each spilled section keeps a summary and one link.
schema.md now holds the write seam, every out-of-seam key with its owner and writers, the load
pass and the session-only state. It also corrects the stale 972/380 geometry defaults to
1038/440. known-limitations.md is registered as Tier 2 Present, taint.md as Not applicable,
and design-readings.md is linked from it rather than being the spill target. compat-layer.md
counts across the family (62 + 17 + 5).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 51d10b78ecaecb1c093d9d12102436c1136d59f4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 22:37:09 2026 +0530
DW-P26: TOC position labels follow the corrected toc-file-§5; the harness fails a Conventional label on a load-bearing position or a Conventional comment stating handler order (F15 X07, D7)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 3dca4e0852d1aa1754e8c437d6f7743304c09684
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 22:17:05 2026 +0530
DW-P23: Standards reference refreshed against v2.81.0; the CLAUDE.md deviation clause carries the canonical Rule shape and where the reasoning lives (X09)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 2e56e14488c2a8d95166efe3f7f74fd14b652c5a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:57:20 2026 +0530
DW-P21: NS.SetTestMode doc block moved to its function; When-to-show table reparent undone in the widget's OnRelease; Toast close degrades to nothing (no typed × button) (F09 F11 F12)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 415c999b68caa44166c13850d31b53aae26e20de
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:50:08 2026 +0530
DW-P20: .luacheckrc world-API globals scoped to the files that need them; the two optional-addon probes go through Compat (F08 X10)
The fifteen world reads leave the top-level read_globals: core/CompatWorld.lua gets its own stanza,
core/Compat.lua gains C_ChallengeMode and UnitName; C_AddOns and C_Item stay shared for EnvSetup and
ItemSetup. New Compat.IsAddOnLoaded (CompatWorld, wrapped by the seam) is the one read behind
logDependencies and the Diagnostics optional line; Roster's UNKNOWNOBJECT goes through
Compat.GlobalString. test_compat covers the probe (loaded, absent, API missing); test_sim_e2e adds
C_AddOns.IsAddOnLoaded and UNKNOWNOBJECT to WORLD_READS and IsAddOnLoaded to the seam keys. Docs:
compat-layer.md, ARCHITECTURE.md, module-map.md, common-tasks.md, test-cases.md and the README
badge (1412).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 652a29a435358d4523a89ac51b6c6cc79d757b2b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:42:44 2026 +0530
DW-P19: locales/enUS.lua carries every string routed through NS.L; test_locale fails on any routed literal missing from enUS (F07, D8)
The 720 keys the code routed through NS.L without an enUS entry are added mechanically, one heading
per first user in TOC load order. tests/test_locale.lua scans every addon file's L["..."] literals
(escape-aware) and asserts a raw entry for each, bypassing the key-on-miss fallback; one direction
only, since some keys are reached dynamically. Docs: testing.md, test-cases.md, common-tasks.md,
module-map.md and the README badge (1411).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 3b34ef156b9417a90f4871e9dfc1f237166b7330
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:35:47 2026 +0530
DW-P18: The shared event dispatcher isolates each handler; the first error is raised after the rest ran (F03 X12)
DW:OnSharedFeatureEvent pcalls each declared handler, so one that raises no longer skips the
later rows (a raising situation edge used to skip the roster, inspect and ask updates on
GROUP_ROSTER_UPDATE). Each failure is an Init debug line through NS.SafeToString, and the first
error is re-raised after the loop, as the client's registrant dispatch and AceAddon's
errorCollector do. CCN 6 (X12, under 15). New test_setup case; ARCHITECTURE.md, data-flow.md,
test-cases.md and the README badge (1409) follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit cceda3733268688f0c0c07754cbe397e0e1eef35
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:29:53 2026 +0530
DW-P17: A fixed announce channel honours the not-in-a-group refusal (noChannel), Post my tradeables included (F02 X10)
A.AnnounceChannel now answers a stored PARTY, RAID or INSTANCE_CHAT only while you are in that kind
of group (PARTY: any group, as the auto branch reads it), else nil, so send() fails noChannel instead
of posting blind, confirming "Announced in ..." and marking the ask sent for Ask once to block. Post
my tradeables shares the path and prints its "Not announced" line. The roster cancel agrees: a
queued announce is canceled once A.AnnounceChannel is nil, not only once you leave every group.
Tests for solo PARTY (with retry), party-with-RAID, party-with-INSTANCE_CHAT, the instance group,
the queued cancel and Post my tradeables; test-cases.md, the badge, data-flow, design-readings and
ASK-1 follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 26c357f7e320da150cea164a11d9ab96cffe24b0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:21:29 2026 +0530
DW-P16: NS.StoodDownRefusal for every stood-down refusal; perf hold says the capture (F01 F10 X01, D5)
The five refusal sites (test mode, ScanGroup, RetryInspect, PostTradeables, Sim.Refusal) and the
Ask/Offer/Announce presses and Trade now print one line from NS.StoodDownRefusal(): the dispatcher's
refusal line under the disabled hold, "Not available during a performance capture." under the perf
hold alone. The presses print it unwrapped and return the reason disabled or perf; the ad-hoc
"The addon is disabled." is gone, and the trade tooltip and Edit box fragment name the brand.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit c0d9c4b0b3665310e927c48cec144c724421737b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:12:15 2026 +0530
DW-P: Spec, plan and evidence for the review + audit remediation (M24)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit a0f038ce073040a3252ecae57dd41f520419f562
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 21:12:14 2026 +0530
DW-P: Review and standards audit bundles (2026-10-14)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit f38ff915290a382bcf56d0cdfe15b528e28e7a50
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 20:15:01 2026 +0530
DW-M0 + DW-N0: Per-tab default filters (Drops This session/Current, History All), secret tooltip widths fall back to the estimate
- M22 (DW-M0): feed.content seeds Drops with This session; History's
filters are fixed to All via WindowFilterBar.TAB_FIXED.
- M23 (DW-N0): TipGrid treats a secret width or line count as unknown
and uses the estimate instead of erroring.
- Specs, plans and evidence for the thirteenth and fourteenth owner
feedback; docs synced (schema, settings-panel, ARCHITECTURE,
compat-layer, smoke checks FEED-8/FEED-75/FEED-76/SIM-9, test-case list).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit f38ff915290a382bcf56d0cdfe15b528e28e7a50
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 20:15:01 2026 +0530
DW-M0 + DW-N0: Per-tab default filters (Drops This session/Current, History All), secret tooltip widths fall back to the estimate
- M22 (DW-M0): feed.content seeds Drops with This session; History's
filters are fixed to All via WindowFilterBar.TAB_FIXED.
- M23 (DW-N0): TipGrid treats a secret width or line count as unknown
and uses the estimate instead of erroring.
- Specs, plans and evidence for the thirteenth and fourteenth owner
feedback; docs synced (schema, settings-panel, ARCHITECTURE,
compat-layer, smoke checks FEED-8/FEED-75/FEED-76/SIM-9, test-case list).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 50f971f9fc592aab7168aa7e7fef18042842bac0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 16:58:27 2026 +0530
DW-L2: Sync docs for M21: README, module-map, data-flow, testing, smoke checks FEED-73..74, test-case list
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 50f971f9fc592aab7168aa7e7fef18042842bac0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 16:58:27 2026 +0530
DW-L2: Sync docs for M21: README, module-map, data-flow, testing, smoke checks FEED-73..74, test-case list
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 13232027165f766a150daea866c377b91711def3
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 16:58:26 2026 +0530
DW-L0 + DW-L1: History's outcomes in the action buttons' colors, no 0 shown header where Character or Content left a group empty
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 200d3c6759902b18f32e71e7ce551ae74d6d130b
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 16:58:24 2026 +0530
DW-L: Spec, plan and evidence for the twelfth owner feedback (M21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit ecadbc371b388b70b63a7452e12cd3ca1378e22c
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 13:34:40 2026 +0530
DW-K2: Record the M20 automated-test bundle (20261014-133254), green
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 599681878f027df6311c43fa99f3f22d1f367d6e
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 13:32:52 2026 +0530
DW-K2: Sync docs for M20: README, ARCHITECTURE, module-map, data-flow, testing, design readings' superseded notes, smoke checks FEED-71..72, test-case list
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 36aa65c7d89b270835804981697a0109b5d6a801
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 13:32:50 2026 +0530
DW-K0 + DW-K1: Pending read said once, Them cut at the card's edge, a gray No action button in every action slot
- K0: CompactCards.FreshMark leaves the pending read out (Them's … says
it); line 3's Them is bounded at the card's right inset.
- K1: WindowCells.NoAction (No action, ban, state none, gray) replaces the
dash and the empty slot on Drops rows, compact cards, the detail card's
first action and Offer panel rows; its tooltip gives the reason. The
Offer panel's button grows to 80 (its Actions column at 314).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 44037a985751a6fac5b78b599951fc5020c5a2c4
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 13:32:49 2026 +0530
DW-K: Spec, plan and evidence for the eleventh owner feedback (M20)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 415554893306afcafd487cd5fdc8236592b69465
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 12:51:59 2026 +0530
DW-J4: Record the M19 automated-test bundle (20261014-124905), green
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit d34072e5d5c4480a504570ee7a71b5901df62243
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 12:48:31 2026 +0530
DW-J4: Sync docs for M19: README, ARCHITECTURE, module-map, data-flow, testing, scope, design readings' superseded notes, smoke checks FEED-67..70, test-case list
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 7f08515770555295556bdc04022fe51f0f12a29f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 12:48:29 2026 +0530
DW-J0 + DW-J1 + DW-J2 + DW-J3: Filled ▼ downgrade glyph, Offer wears external-link, simplified compact cards, Sort on the tab's strip
- J0: WindowCells.GLYPH's downgrade and every literal ▽ become ▼.
- J1: Offer's icon is external-link (row, compact card, detail card, Offer
panel), apart from the detail card Trade's transfer.
- J2: compact cards read ilvl then name, the inspect freshness bracketed
after it or left out; the action on line 2's right, an empty slot with
none; no trade window countdown or bar (and no compact tick); gold
You/Them, Them a fixed gap after You. History cards share the kit.
- J3: Sort leaves the footer for the active tab's strip in the full layout
([Post my tradeables] [Scan group] [Sort] on Drops, after Clear history on
History), re-anchored each pass through pane.sortHost.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 5d7037910efd0d5af98826c6cbaff8d24fb0431d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Wed Oct 14 12:48:28 2026 +0530
DW-J: Spec, plan and evidence for the tenth owner feedback (M19)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzpSR2txp5mknB3Th6hJcu
commit 180fb3585db92260615c6c05f38f12339c945dc9
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 20:04:15 2026 +0530
DW-I1: Record the M16-M18 automated-test bundle (20261013-200128), green
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 98688dc99bd037559700b1a76c6c0ed7c7dbe888
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 20:00:59 2026 +0530
DW-I1: Sync docs for M18: the toast's four rows in README, ARCHITECTURE, module-map and data-flow, design readings' superseded note, the owed FEED-66 check
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit f28b4c1300e3fd846c4ab858eafdb474d64ac1f5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:57:52 2026 +0530
DW-I0: fix review — toast widened to 350 and row 3 cut at the inset, stale TipMarks notes, empty-slot glyph and plain-looter pins
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 856a8c3289989322d1598f1e6a81c62e4ced087f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:50:34 2026 +0530
DW-I0: The toast as four rows beside a four-row icon: quality and class colors, You/Them verdicts, trade reason, right-click closes
Toast.Compose answers the rows' parts (item name and quality color, item
level, looter and class color, the Me and Them verdicts through
SideCells.Merge, the trade word, tone and short reason, the Trade cell's
tooltip); the frame paints row 3 as segments with monospace glyphs, row 2's
item level as a WindowRows mark, row 4's reason cut at the right inset. The
icon grows to 56 (the toast to 340x74); a right-click anywhere closes it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit a68f8b5d4de92e1a954aa9358274889730b1b9b0
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:39:06 2026 +0530
DW-I: Spec, plan and evidence for the ninth owner feedback (M18, the toast)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 11cecdbe060b1bad6a0fa0ebe4a81aa2df012d2f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:38:29 2026 +0530
DW-H1: Sync docs for M17: When to show's per-situation table, its skipRender rows, the owed FEED-65 check
settings-panel.md describes the table (columns, look, dimming, pooling, the parked host); schema.md and
ARCHITECTURE.md mark the situations.<key>.* rows skipRender; module-map.md and testing.md name the
table's halves and the new when-to-show cases; design-readings.md carries the superseded-by-feedback-8
note; smoke-tests.md adds FEED-65 and its owed row, and notes PANEL-4's blocks as superseded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 3e092c8ff8f8460d2856524972a31fec15f62366
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:35:47 2026 +0530
DW-H0: fix review — TOC names Panel.lua's render-time PageEditors edge, profile-switch test for When to show's table, re-wrap two comment blocks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 6742d165ecc21b38acc2e8a7797977e8b583a2eb
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:30:47 2026 +0530
DW-H0: When to show as one table, a line per situation (Situation, Track, Auto-open, Quality)
The per-situation rows stay in the schema, now skipRender with no subsection, and are drawn by a
pooled table in Loot History's Price sources look (gold headers, striped fixed-height lines, the
panel's CheckBox and Dropdown), written through the schema seam and repainted on every write.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 8937752642594474f274f8771509e0af80d7a456
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:19:24 2026 +0530
DW-H: Spec, plan and evidence for the eighth owner feedback (M17)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit b621e51b9a0a02cb03dd3c9ef94b2a00ece3b0dc
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:18:54 2026 +0530
DW-G5: Retire the give path the Offer panel's Trade button used (NS.GiveDrop, TradeHelper.Give)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 547f32de8210947dddc4bcdcf6d57ad1ce6335ac
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:11:29 2026 +0530
DW-G5: Sync docs for M16: Offer panel Their eq, action icons, Upgrade for N, gear grids, Scan group on the strip
- README: Scan group on the Drops strip (compact keeps the title-bar icon), the gold [YOU], Trade No
in red, the gear grid tooltips, Upgrade for N and Trade without its count, the Offer panel's Their
eq with no Trade button, an icon on every action button, Post my tradeables above Sort.
- ARCHITECTURE, module-map (TipGrid.lua at 58, rows renumbered; TooltipLeftLine), data-flow, scope
and testing's suite descriptions follow DW-G0..DW-G4.
- design-readings: dated "superseded by feedback-7" notes on the window shell, the drops table, the
detail card, the Offer panel and compact mode.
- smoke-tests: FEED-56..64 owed, indexed and pending sign-off; superseded pointers on FEED-8, 42,
43, 45, 52, 55 and ASK-6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 1d3ad2192a8c55e0dadd225a0ffaabb2ddba0b06
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 19:00:04 2026 +0530
DW-G3: fix review — Their eq empty slot, shared slot/read helpers, CCN, Them/History grid names, one button-mark helper, ClassTone, empty state to DropsStrip, stale comments
- SideCells.Candidate reads gear through WindowCells.SlotItems/ReadOk/Num (now
published) instead of local copies; a slot read empty is a grid row again,
and candidateEq is split (fromBaseline) under CCN 15.
- WC.Them's unknown cell names the looter for the gear grid; WH.MeCell colors
your `You` from the gear snapshot's class.
- Window.SetButtonMark (WindowTitleBar) replaces four copies of the label and
mark block (Toast, WindowGroup, CompactGroup, WindowOwn).
- WindowGroup.ClassTone shared by the Offer panel and the detail card.
- The Drops empty state moves to DropsStrip.BuildEmpty (WindowGroup 997 -> 969).
- Stale text: the detail card's own-drop Trade tooltip, NS.GiveDrop's doc,
TipMarks' header, State's windowOwn note, the TOC's OfferPanel/DropsStrip/
WindowHistory comments.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit aaa910f1625133128f4dd34401726ea3b146fc40
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 18:44:33 2026 +0530
DW-G4: Post my tradeables above Sort, Scan group beside it on the Drops strip, empty-state pair centered
- Post my tradeables takes the footer Sort's size (WindowFooter.SORT_W, the control height) with
its right edge on Sort's (WindowFooter.SORT_INSET), directly above it.
- The full layout's Scan group moves from the title bar to the Drops strip, 8px left of Post; while
Post is hidden it slides into Post's slot (DropsStrip.Slots, pure). The strip is therefore always
shown on Drops in the full layout; compact keeps its title-bar icon and its strip rules.
- The title bar still builds the compact Scan group icon and hides it in the full layout; the
restriction badge anchors to the layout toggle. One Scan group tooltip (WindowTitleBar.ScanTip).
- The empty state's Preview with test data and Scan group are centered as a pair under the text, in
both layouts.
- K.POST_W retired for K.SCAN_W (the strip's and the empty state's Scan group).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 5c9e14fbe55a74949019b6a490a75b3e9fb2d8d5
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 18:35:39 2026 +0530
DW-G3: Columnar gear tooltips with the table's mono arrows, tone on glyph and number
A tooltip that lists worn gear against a drop now lays it out as columns,
[Name] [Item level] [Item name] [glyph+difference]: the Me and Them cells,
your own drop's Upgrade for N (table, compact, detail card), the detail
card's verdict chips and the Offer panel's Their eq. NS.TipMarks describes
the grid as data (Grid, GearRows, ArrowCell); the new modules/TipGrid.lua
paints it on a pooled child frame of GameTooltip, anchored to reserved
lines (NS.Compat.TooltipLeftLine), widened through SetMinimumWidth and
released on hide or clear. The arrow is the table's glyph in the monospace
face, glyph and number in the verdict tone. The X wears / Item (ilvl)
lines and the "Item level A against B" prose give way to the grid; the
read's age and the verdict's explanation stay after it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit b1a355a83a07ee5aa7a440c33b1d46cfee094cfd
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 18:13:50 2026 +0530
DW-G2: Cells that say more at a glance: Trade No red, looter Name [YOU], Upgrade for N, Trade count dropped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 567b1f133afc227de129626b20bc397e7014fd89
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 17:58:40 2026 +0530
DW-G1: An icon on every action button: Ask chat, Offer export, every view
Ask wears chat and Offer export (LibKa0s catalog), tinted with the button's
tone as the other states' marks are; Announce to group keeps speech-bubble
once its look is painted. The Drops row, the compact card, the detail card
(its Ask/Offer now take their state's mark), the Offer panel and the toast's
Ask all draw them. PANEL_BTN_W grows 52 -> 72 so Offered and Queued fit with
an icon. The look tables are exposed for a suite that fails on a state with
no shipped icon, plus a fit check of every word and icon against its width.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 84f91bd0b7d544fe7588ca7b0b6cc577674902ab
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 17:49:26 2026 +0530
DW-G0: Offer panel rows read like the Drops table: Their eq in the Them look, no class bar, alternating rows, Trade button removed
Eq -> drop and Status merge into one Their eq column drawn as the Drops Them cell
(SideCells.Candidate, painted by WindowGroup.PaintSide: worn icons, item level, mono
glyph and difference in the verdict tone; Can't use, …, Unavailable, empty as words).
The pill's explanation moves into the cell's tooltip. The class stripe is gone; every
second row draws the main window's faint stripe. The Trade button and MC.TradeButton
are removed (NS.GiveDrop and the trade helper stay). Columns re-measured inside 440px.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit cdb68e88ea0de40a0b816d740223fe8e3840dcd8
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 17:36:41 2026 +0530
DW-G: Spec, plan and evidence for the seventh owner feedback (M16)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit d7c3554fad3433764bd5ecddae0fae03e7b18571
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 16:04:09 2026 +0530
DW-F4: Record the M15 automated-test bundle (20261013-160309), green
Four suites on 453bab1, clean tree: lint 0/0 in 168 files, tests
1366/1/1367, perf 7 scenarios (full refresh pair 13664.8 bytes, -736
with two columns merged away; compact unchanged at 10368.9), complexity
max CCN 14 (a test closure), 0 warnings, 0 band files, 0 blind files.
Plan checkpoint logged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 453bab1f26a9073637f0de2ccd0642edce165156
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 16:02:41 2026 +0530
DW-F5: Glyph boxes outside tooltips: toast, detail card chips and rows, Offer panel arrows as textures
The default face (GameFont*) has no → and none of ▲ ▽ ≈ ⊘ ⊕, so the
toast's line, the detail card's verdict chips and Item level / Track rows,
and the Offer panel's Eq label, tooltip and eq text drew boxes. They now
use NS.TipMarks inline textures: TM.Mark for verdict marks and the new
TM.Arrow (muted arrow-right, "->" without the media library). TM.Chars
counts what a text draws (an escape as two) for DetailCard's chip width
estimate; the mock measures an escape as two characters too. Monospace
table cells and compact lines keep their glyphs.
Tests: T.marks renders escapes as [icon] for readable expectations; new
cases pin TM.Arrow and TM.Chars, and an audit walks every text test mode
draws in the default face (Drops, detail card, Offer panel, History,
both layouts) for the six glyphs. FEED-55 smoke check, items.tsv row,
TOC and module docs updated; test-cases.md regenerated (1366).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 5e4f522aa637a662885d08feec2cf71d98627aa7
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 15:49:32 2026 +0530
DW-F4: Sync docs for M15: README, ARCHITECTURE, data-flow, module-map, schema, settings panel, scope, design readings (superseded notes), testing; smoke checks rewritten and FEED-48..54 owed
The 76px Trade window column; My eq merged into Me and Their eq into Them
(`321/308 ▽8`, History the verdict alone, compact line 3 `You 321/308 ▽8`);
(Multiple) renamed (Details) with its one-line-per-member, non-wrapping
tooltip; Offer in cyan; verdict marks in tooltips as textures; the least
width 1038 (compact 440). SideCells and TipMarks added to the module map
(rows renumbered, 96); schema step 7 (NS.RetireEqColumns) and
SCHEMA_VERSION 7 documented, the myEq/theirEq toggles retired; Database's
row names steps 5-7. test_side_cells and test_tip_marks described in
testing.md. Smoke checks touching the old columns, (Multiple), Offer's red,
signed differences and 1132 rewritten; FEED-48..54 added and owed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 9a227771731e4d6893f0e1cfe6279b8fbd7e029d
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 15:41:31 2026 +0530
DW-F3: fix review — Me/Them word clipped at the cell edge, TOC names TipMarks, dead own-drop TheirEq branch gone, merged-cell names aligned
- WG.PlaceSide ends the difference or word at the cell's right edge, so a long
word or a larger Font size is cut short instead of drawing over Them and Trade.
- TOC load-order comments name NS.TipMarks for MineCells, WindowGroup and
WindowHistory, which take it at load.
- WC.TheirEq loses its unreachable own-drop branch (SideCells.Them answers
MineCells.Details there), along with the retired "Their eq" title and its test.
- Names: WH.Me -> WH.MeCell, WH.Them -> WH.ThemVerdict (the unmerged verdict),
MC.Multiple -> MC.Details.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit ab3bb928837c3a715dd776b618eb16085964e59a
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 15:32:21 2026 +0530
DW-F3: (Details) tooltip lines readable and non-wrapping, verdict marks in tooltips as textures
Your own drop's Them (Details) tooltip now lists one line per member it
upgrades, ranked by gain, and the line never wraps:
"<Name in class color> wears <ilvl> <Item in quality color> <arrow><gain>".
The arrow is an inline texture escape of LibKa0s media arrow-up (64x64,
whole canvas) tinted C.TONE.good, never a font glyph. The gain is unsigned.
The worn item is the evaluation's baseline, which for two worn items is the
lower one, the one it would replace.
- New pure-ish module modules/TipMarks.lua (TOC after WindowCells):
TM.Escape, TM.Mark (arrow-up green, transfer yellow, arrow-down red; plain
+/~/- when the media library is absent), TM.NoWrap / TM.Text, and
TM.ClassName / TM.ItemName for the colors.
- Window.AttachTooltip's lines may be { text, wrap = false }: added with wrap
off so the tooltip grows to fit. Explanatory lines stay strings and wrap.
- Tooltip glyph audit: the Drops Me column tip and the History Them column
tip drew ▲ ≈ ▽ in the tooltip face; they now use TM.Mark textures. No
other tooltip string carried a verdict glyph.
Tests: new suite tests/test_tip_marks.lua (escape strings, TGA size, marks,
fallback, colors, the non-wrapping AddLine, (Details) lines ranked/colored,
the lower of two rings, and audits of the column tips, every L[] key in the
sources, and every tooltip of test mode on both tabs and both layouts).
test_own_drops, test_detail_card and test_compact_cards updated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit a28509760c758cdf3cfd8990c9cf407d53d08503
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 15:17:34 2026 +0530
DW-F2: Offer in cyan while it is your move (C.TONE.cyan), Ask and Retry stay red
New tone C.TONE.cyan (0.35, 0.82, 0.95). WC.ActionTone(state, kind) maps
a button of kind "offer" in ready/failed to cyan; every other state falls
through to ACTION_TONE (Offered/Queued yellow, Traded green). WG.ToneButton
takes the kind. MC.OwnOffer carries kind "offer" (Drops row, compact card,
detail card via DetailCells' offerAction); MC.OfferButton carries it while
the member's button reads Offer or Offered, not as Retry, which stays red.
Announce to group carries no kind and is unchanged.
Tests: ActionTone's offer kind, the cyan's shape, the row/detail/compact
Offer painted cyan (another player's Ask still red), OwnOffer/OfferButton
kinds, DC.Actions' kind, and the Offer panel's per-member Offer cyan,
Offered yellow, Retry red, Announce red.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit c149a0d1a33091d4ed925050f51775de7e8b8c3f
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 15:13:33 2026 +0530
DW-F1: My eq merged into Me and Their eq into Them (321/308 ▽8), toggles retired, least width 1038
Feedback-6 spec §1. Drops shows two columns where it had four. Each Me and Them cell
reads [icon(s)] [item level] [glyph][unsigned difference]. The glyph and the number take
the verdict's tone and the item level stays plain. Can't use and Not wanted stay words.
A `?` is left out when the gear part already says why (…, range, combat, !, –). An empty
slot reads `empty` (muted). Your own drop's Them reads (Details), renamed from (Multiple)
everywhere. Each tooltip lists the gear lines first, then the verdict's.
- New pure module modules/SideCells.lua (SC.Merge, SC.Me, SC.Them), placed in the TOC
after MineCells. WindowGroup paints the merged cells (sideCell, paintSide,
WG.PlaceSide, WG.SIDE gaps) and WG.ThemCells became WG.ThemCell. WindowOwn.Multiple
is removed because nothing calls it any more.
- History: kept entries have no worn-item data, so Me and Them show the verdict alone,
in the new unsigned form (WH.Me, WH.ThemCell).
- Compact line 3 now reads `You 321/308 ▽8` and `Them (Details)`. CompactCards.Half
takes one SideCells cell. CC.Eq is gone. CompactGroup's halves place their pieces
one after another.
- Schema step 7 (NS.RetireEqColumns) removes window.columns.myEq and theirEq from every
stored profile. Their defaults and settings rows are gone too.
- Widths are measured over every kind of cell. Me and Them are 127px each: two icons,
`321/308`, then `Not wanted`. The new shed order is armorType, slot, looter,
tradeWindow, ilvl, them, trade, me. The least and default width fall from 1104 to
1038 (arithmetic in core/Constants.lua). COMPACT_MIN_W stays 440: line 3's fullest
halves fit with about 46px to spare.
- Tests: new suite tests/test_side_cells.lua. Added a step 7 migration case and a
compact line 3 width case. Updated the table, compact, own-drop, test-mode and
width suites.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit 92d76bef40f38ee6e270c44865cb1ca0895e6837
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 14:48:37 2026 +0530
DW-F0: Trade window column fits its widest answer (76px), least width 1104
The Drops Trade window column is now its widest MineCells.TradeWindow answer
(`No limit (BoE)`, 14 characters at the harness's 5px measure) plus the cell's
own padding (WindowGroup.TRADE_WINDOW_PAD, 6, the bar's right inset): 76, down
from 104. A new test in test_drops_layout enumerates every answer through
MC.TradeWindow (each NO_SHORT and NO_SHORT_THEIRS reason on your drop and
another's, the reason with no short word, BoE, Checking, the longest exact and
estimated countdowns) and pins the width to the widest; the table test pins a
full bar to the column less its padding. The least and default width drop by
28 to 1104 (Constants arithmetic and the width tests follow; DW-F1 recomputes).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit d7ce87db36bc46d6a3409ac9379e310a64088efc
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 14:43:28 2026 +0530
DW-F: Spec and checkpointed plan for M15 (owner feedback 6): Trade window fits its text, eq merged into Me/Them, Offer in cyan, the (Details) tooltip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit dd8849a12152cd1cb6ff58de6563448270653144
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 14:21:55 2026 +0530
DW-E5: Record the M14 automated-test bundle (20261013-141937), green
Four suites on d2c4e7a, clean tree: lint 0/0 in 164 files, tests
1335/1/1336, perf 7 scenarios (full refresh pair 14400.8 bytes, -24;
compact pair 10368.9, -551.9 with compact My drops gone), complexity
max CCN 13, 0 warnings, 0 band files, 0 blind files. docs/test-cases.md
regenerated, the README badge at 1335/1335, plan checkpoint logged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
commit d2c4e7afbffee18f11aab0866d9d0d229c4b0e71
Author: Tushar Saxena <tushar.saxena@gmail.com>
Date: Tue Oct 13 14:19:37 2026 +0530
DW-E5: test_slash's comment says /dw mine stays as an alias for Drops
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017FPsQsDp7zpVbnvWMx7zKk
This mod has no additional files