docs: v1.2.7 changelog + Research folder with verification guide and session summary

- CHANGELOG.md: added v1.2.7 entry covering WotLKDB stats fix, kill tracking
  filter, and WotLKDB Loader.lua stats population
- Research/QuestieLearner-Verification.md: 12-step in-game test guide for all
  QuestieLearner subsystems (mouseover, quest accept/turn-in, kills, loot,
  objects, export/import, plugin stats, peer sharing, quick diagnostic snippet)
- Research/SessionSummary-2026-03-16.md: full developer session log from
  plugin architecture overhaul through QuestieLearner rewrite
This commit is contained in:
Xurkon
2026-03-16 21:18:02 -05:00
parent a3eaba30fd
commit bf2a7969df
3 changed files with 478 additions and 0 deletions
+253
View File
@@ -0,0 +1,253 @@
# QuestieLearner — In-Game Verification Guide
This guide walks you through verifying every subsystem of QuestieLearner is working correctly after the v1.2.6 rewrite. Run each test in order and check expected outputs.
---
## Prerequisites
### Enable Develop Debug Output
In chat before starting any test:
```
/script Questie.db.profile.debugLevel = Questie.DEBUG_DEVELOP
```
Or enable **Develop** in Questie Options → Advanced → Debug Level.
> You do NOT need Critical enabled separately — Develop includes Critical-tier output.
---
## Test 1 — Initialization
After `/reload`, look for this in chat:
```
[QuestieLearner] Events registered
[QuestieLearner] Initialized
```
If you also had previously learned data, you should see:
```
[QuestieLearner] Injected learned data: N NPCs, N quests, N items, N objects
```
**Failure:** If you see nothing, check that `QuestieLearner.lua` and `QuestieLearnerComms.lua` are in the TOC and loading without errors.
---
## Test 2 — Mouseover Filter (Quest Giver ONLY)
### 2a — Quest Giver NPC
Walk up to an NPC with a **yellow `!`** above its head (not yet accepted), or a **yellow `?`** (turn-in).
**Expected output:**
```
[QuestieLearner] Cached mouseover NPC: <id> <NpcName> guid: 0x...
[QuestieLearner] Learned NPC: <id> <NpcName>
```
### 2b — Random Mob (Should Be Ignored)
Mouseover a wolf, enemy soldier, random creature — anything without a quest icon.
**Expected output:** Nothing. No `[QuestieLearner]` line should print.
### Why This Matters
Before v1.2.6, every single NPC moused over was recorded, flooding `learnedData.npcs` with useless entries. Now only `UnitNPCFlags` bit `0x02` (QUESTGIVER) or already-known DB quest NPCs are recorded.
---
## Test 3 — Quest Accept
Pick up any quest from an NPC. Look for:
```
[QuestieLearner] Learned Quest: <id> <QuestName>
[QuestieLearner] Learned NPC: <id> <GiverName> ← or "Learned Object" if quest giver is a chest/object
```
Verify data was stored:
```
/script local q=Questie.db.global.learnedData.quests; local n=0; for _ in pairs(q) do n=n+1 end; print("Learned quests:", n)
```
Inspect a specific quest (replace `<questId>` with the ID you just accepted):
```
/script local q=Questie.db.global.learnedData.quests[<questId>]; if q then print("name:", q[1], "level:", q[5], "reqLvl:", q[4], "zone:", q[8]) end
```
Expected: `name: <quest name> level: <number> zone: <mapId>`
---
## Test 4 — Quest Turn-In
Complete and turn in a quest. Look for:
```
[QuestieLearner] Learned Quest: <id> <QuestName>
[QuestieLearner] Learned NPC: <id> <FinisherName>
```
Verify both starter and finisher are recorded:
```
/script local q=Questie.db.global.learnedData.quests[<questId>]; if q then print("starters:", tostring(q[2]), "finishers:", tostring(q[3])) end
```
Expected: Both `q[2]` and `q[3]` should be tables, not nil.
- `q[2][1]` = list of NPC IDs that start the quest
- `q[3][1]` = list of NPC IDs that finish the quest
---
## Test 5 — Kill Coordinate Recording
### 5a — Quest Objective Kill (Should Record)
Have an active kill quest in your quest log (e.g., "Kill 10 Wolves"). Kill one of the objective mobs.
**Expected output:**
```
[QuestieLearner] UNIT_DIED: recording kill NPC <id> <MobName>
[QuestieLearner] Learned NPC: <id> <MobName>
```
Verify coordinates were stored:
```
/script local n=Questie.db.global.learnedData.npcs[<npcId>]; if n and n[7] then for z,c in pairs(n[7]) do print("zone "..z.." has "..#c.." coord clusters") end end
```
Kill the same mob type multiple times in the same area. The cluster count should NOT increase for every single kill — only when you move to a meaningfully different location (>2% of zone width away).
### 5b — Non-Quest Mob (Should Be Ignored)
Kill a mob that is NOT a quest objective and is NOT in QuestieDB.
**Expected output:** Nothing. `[QuestieLearner] UNIT_DIED` should NOT appear.
---
## Test 6 — Item Loot Recording
Loot a mob or chest that drops a **quest item** (purple/green bag icon in loot window, or any item that appears in the loot frame).
**Expected output (immediate, if item was already cached):**
```
[QuestieLearner] Learned Item: <id> <ItemName>
```
**Expected output (delayed by ~1 second if item was never seen before):**
```
[QuestieLearner] Learned Item: <id> <ItemName>
```
This fires when `GET_ITEM_INFO_RECEIVED` resolves the async `GetItemInfo` call.
Verify:
```
/script local i=Questie.db.global.learnedData.items; local n=0; for _ in pairs(i) do n=n+1 end; print("Learned items:", n)
```
---
## Test 7 — Object Recording
Interact with a **clickable quest object** (a chest, a crate, a brazier, a scroll — any game object that starts or is part of a quest).
**Expected output:**
```
[QuestieLearner] Learned Object: <id> <ObjectName>
```
Verify:
```
/script local o=Questie.db.global.learnedData.objects; local n=0; for _ in pairs(o) do n=n+1 end; print("Learned objects:", n)
```
---
## Test 8 — Overall Stats Check
Run this anytime to see a full summary of what has been learned this session:
```
/script local QL=QuestieLoader:ImportModule("QuestieLearner"); local n,q,i,o=QL:GetStats(); print("NPCs:"..n.." Quests:"..q.." Items:"..i.." Objects:"..o)
```
---
## Test 9 — Export
```
/script local E=QuestieLoader:ImportModule("QuestieLearnerExport"); local s,stats=E:Export(); if stats then print("Export OK | total:", stats.total, "| len:", string.len(s)) else print("Export FAILED:", tostring(stats)) end
```
Expected: `Export OK | total: N | len: XXXX`
The export string starts with `QxLD:1!`. Copy it from the Database tab → Export box in Questie Options.
---
## Test 10 — Import (Round-Trip)
1. Export your data (Test 9).
2. Run `/script QuestieLoader:ImportModule("QuestieLearner"):ClearAllData()` to wipe learned data.
3. Open Questie Options → Database → paste the export string into the Import box → click Import.
Expected in chat:
```
Import complete: merged N entries, skipped 0 (already known).
[QuestieLearner] Injected learned data: N NPCs, N quests, N items, N objects
```
Verify stats match original count (Test 8).
---
## Test 11 — Plugin Panel Stats (WotLKDB)
Open **Questie Options → Advanced** and scroll to **Loaded Questie-X Plugins**.
Expected for WotLKDB:
```
[Questie-WotLKDB] Quests: 9086 NPCs: XXXX Objects: XXXX Items: XXXX
```
If you see all zeros, the `QuestieX_WotLKDB_Counts` global was not set before the Loader.lua read it. Check that `QuestieInit:LoadBaseDB()` is running before `PLAYER_LOGIN` completes.
---
## Test 12 — Peer Sharing (Requires Two Clients)
On Client 1, learn a new NPC (walk up to a quest giver not previously recorded).
On Client 2, run:
```
/script print(type(Questie.db.global.learnedData.npcs[<npcId>]))
```
Expected: `table` (the NPC data arrived via the hidden `questiecomm` channel or AceComm guild broadcast).
> **Note:** Both clients must be in the same guild OR on the same server (for the hidden channel). Allow up to 10 seconds for the token-bucket throttle to release the message.
---
## Quick Diagnostic — All At Once
Paste this block into chat for a full snapshot:
```
/script local QL=QuestieLoader:ImportModule("QuestieLearner"); local n,q,i,o=QL:GetStats(); print("=== QuestieLearner Stats ==="); print("NPCs:"..n.." Quests:"..q.." Items:"..i.." Objects:"..o); local ld=Questie.db.global.learnedData; print("Enabled:", tostring(ld.settings.enabled)); print("Learn NPCs:", tostring(ld.settings.learnNpcs)); print("Learn Quests:", tostring(ld.settings.learnQuests)); print("Learn Items:", tostring(ld.settings.learnItems)); print("Learn Objects:", tostring(ld.settings.learnObjects))
```
---
## Common Issues
| Symptom | Cause | Fix |
|---|---|---|
| Nothing prints at all | Debug level not set to DEVELOP | `/script Questie.db.profile.debugLevel = Questie.DEBUG_DEVELOP` |
| Random mobs being recorded | Old QuestieLearner.lua still loaded | Confirm v1.2.6+ is deployed, `/reload` |
| Kill coords not recording | NPC not in QuestieDB and not explicitly targeted/hovered before kill | Target the mob before killing it, or ensure your DB plugin is loaded |
| Export returns nil | `learnedData` is empty | Run Tests 27 first to accumulate data |
| WotLKDB shows 0s in plugin panel | `QuestieX_WotLKDB_Counts` not set | Verify `QuestieInit:LoadBaseDB()` has the count-before-pull logic |
| Item not recorded after loot | `GetItemInfo` async — item never seen before | Wait 12 seconds; if still missing, the item may not be a quest item |