Files
Questie-X/Research/QuestieLearner-Verification.md
T
Xurkon bf2a7969df 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
2026-03-16 21:18:02 -05:00

254 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 |