diff --git a/CHANGELOG.md b/CHANGELOG.md index 98a6616..e6f5445 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - **[QuestieLearner - Bystander Kill Suppression]** Changed visible nearby `UNIT_DIED` handling so kills from other players can update short-lived correlation evidence without immediately running full learner injection or pin refresh work. - **[QuestieLearner - PARTY_KILL Event-Order Fix]** Fixed an edge case where a `UNIT_DIED` debounce entry could suppress a later authoritative `PARTY_KILL` for the same GUID. The debounce now tracks event type and allows the player's/group's kill event through while still suppressing true duplicates. - **[QuestieLearner - Immediate Spawn Pin Rendering]** Learner kill evidence now becomes spawn coordinates immediately in learner mode so learned NPC kills can spawn map pins without waiting for the later confidence merge path. +- **[QuestieLearner - Quest Accept Resolver Hardening]** Removed the learner `QUEST_ACCEPTED` last-resort quest-ID fallback that could invent impossible quest IDs from raw event arguments. Accepted quests now only learn when the ID resolves back to a real quest-log entry, which prevents bogus keys from being persisted in learner SavedVariables or live overrides. - **[QuestieLearner - Live Performance Options]** Added Advanced-tab controls for learner intensity, pin refresh delay, maximum pin refresh wait, minimum kills before learned pins, and live NPC update delay so users can tune the system for low-end PCs or heavy-activity zones. - **[QuestieComms - User-Controlled Intensity]** Added Advanced-tab QuestieComms controls, including a full disable switch and live throttles for queue processing, quest-state broadcasts, and bulk sync pacing. - **[QuestieComms - Disable Gate Fix]** Scoped the comms enable helper so the disable switch no longer calls a nil global and every send/process entry point consistently respects the setting. diff --git a/docs/changelog.html b/docs/changelog.html index 7557139..4ee4807 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -182,6 +182,7 @@
  • [QuestieLearner — Bystander Kill Suppression] Changed visible nearby UNIT_DIED handling so kills from other players can update short-lived correlation evidence without immediately running full learner injection or pin refresh work.
  • [QuestieLearner — PARTY_KILL Event-Order Fix] Fixed an edge case where a UNIT_DIED debounce entry could suppress a later authoritative PARTY_KILL for the same GUID. The debounce now tracks event type and allows the player's/group's kill event through while still suppressing true duplicates.
  • [QuestieLearner — Immediate Spawn Pin Rendering] Learner kill evidence now becomes spawn coordinates immediately in learner mode so learned NPC kills can spawn map pins without waiting for the later confidence merge path.
  • +
  • [QuestieLearner — Quest Accept Resolver Hardening] Removed the learner QUEST_ACCEPTED last-resort quest-ID fallback that could invent impossible quest IDs from raw event arguments. Accepted quests now only learn when the ID resolves back to a real quest-log entry, which prevents bogus keys from being persisted in learner SavedVariables or live overrides.
  • [QuestieLearner — Live Performance Options] Added Advanced-tab controls for learner intensity, pin refresh delay, maximum pin refresh wait, minimum kills before learned pins, and live NPC update delay so users can tune the system for low-end PCs or heavy-activity zones.
  • [QuestieComms — User-Controlled Intensity] Added Advanced-tab QuestieComms controls, including a full disable switch and live throttles for queue processing, quest-state broadcasts, and bulk sync pacing.
  • [QuestieComms — Disable Gate Fix] Scoped the comms enable helper so the disable switch no longer calls a nil global and every send/process entry point consistently respects the setting.
  • @@ -196,7 +197,7 @@
  • [Tooltip Data Precedence] Updated tooltip handling so QuestieLearner defers to AscensionDB-owned tooltip/objective data instead of hiding or replacing server-plugin data for active quests.
  • - Release status: The most complete performance candidate is not yet a single branch. Merge questie-learner-comms-improvements with phase3-measured-perf, remove or revalidate the stale reverted QuestieMap.ProcessQueue profile-local commit, fix the unrelated Arrow asset test mismatch, and validate in game before stable release. Test learner-only/static-only switching, immediate spawn pin rendering, and available-quest scanning during real kill/loot gameplay. + Release status: The most complete performance candidate is not yet a single branch. Merge questie-learner-comms-improvements with phase3-measured-perf, remove or revalidate the stale reverted QuestieMap.ProcessQueue profile-local commit, fix the unrelated Arrow asset test mismatch, and validate in game before stable release. Test learner-only/static-only switching, immediate spawn pin rendering, available-quest scanning, and quest accept / NPC / item learning during real kill/loot gameplay.

    [v1.6.3] — Arrow Redesign, Minimap Pin Drift Fix (Live API + Corrected Pixel Math), Sunstrider Isle Arrow Distance, Map Pins, Tooltip Schema Fixes, QuestData String Safety

    diff --git a/release_notes.txt b/release_notes.txt index 39eb036..53bebb6 100644 --- a/release_notes.txt +++ b/release_notes.txt @@ -12,6 +12,7 @@ Current branch work includes: - Bystander `UNIT_DIED` suppression so nearby players killing mobs do not force local learner pin redraws. - A `PARTY_KILL` event-order fix so legitimate local/group kills are not skipped after an earlier `UNIT_DIED`. - Immediate learner spawn pin rendering so kill evidence can become map pins right away in learner mode. +- A hardened learner `QUEST_ACCEPTED` resolver so bogus quest IDs from raw event arguments are no longer persisted when they do not map back to a real quest-log entry. - Learner-aware DB reads that can fall back to `Questie.dbLearner.global.*` when static data is missing. - Advanced-tab performance controls for QuestieLearner, QuestieComms, and Arrow throttles. - A full QuestieComms disable switch with live queue/broadcast/sync throttles. @@ -19,7 +20,7 @@ Current branch work includes: - Available quest draw-thread guarding so missing quest IDs skip safely instead of crashing redraws. - A measured phase 3 branch with additional localization, quest eligibility, tooltip/map, cache, and allocation hot-path reductions. -Remaining before stable release: integrate the learner/comms branch with the measured phase 3 branch, remove or revalidate the stale reverted `QuestieMap.ProcessQueue` profile-local commit, fix unrelated Arrow asset test expectations, and validate in-game in heavy kill/loot zones with the minimap open, learner-only/static-only switching, and repeated loot/object objective testing. +Remaining before stable release: integrate the learner/comms branch with the measured phase 3 branch, remove or revalidate the stale reverted `QuestieMap.ProcessQueue` profile-local commit, fix unrelated Arrow asset test expectations, and validate in-game in heavy kill/loot zones with the minimap open, learner-only/static-only switching, repeated loot/object objective testing, and the new quest-accept / NPC / item learning paths. ## Highlights diff --git a/workflow/performance-audit-2026-06-03-FULL.md b/workflow/performance-audit-2026-06-03-FULL.md index 56bb49d..7fadf15 100644 --- a/workflow/performance-audit-2026-06-03-FULL.md +++ b/workflow/performance-audit-2026-06-03-FULL.md @@ -6153,3 +6153,33 @@ full-precision grouping key in `_MergeSpawnEvidence` (`Modules/QuestieLearner.lu disables proximity merge, and a larger radius widens merging. `Tests/QuestiePinClustering_spec.lua` asserts the knob wiring (default + UI + cache-clear redraw). + +### Pass-54 - Quest accept resolver hardening and current NPC/item ID investigation (2026-06-06) + +The learner was logging impossible quest IDs from `QUEST_ACCEPTED` because the +accept handler still had a last-resort `questId = firstArg` fallback. On this +client/server combination the raw event arguments can be misaligned, so that +fallback was persisting bogus quest keys such as `615514513` instead of waiting +for a real quest-log entry. The fix now resolves accepted quests only through a +real quest-log index / quest-log selection / quest ID that actually exists in +the log, and skips learning entirely if none of those resolve. + +- `Modules/QuestieLearner.lua` + - Added a strict accepted-quest resolver that only accepts IDs that map back + to a real quest-log entry. + - Removed the raw-argument last-resort quest-ID fallback. +- `Tests/QuestieLearnerDataSourceMode_spec.lua` + - Added a regression proving a garbage accepted-quest value resolves from the + real quest log instead of being used directly. + - Added a regression proving impossible quest IDs are ignored when they do + not resolve to the quest log. + +### Open follow-up + +The current live logs also show a separate learner issue where NPC IDs can be +mis-read from Ascension GUIDs (`Arcanist Helion` learning as `168` instead of +`15297`), and item IDs are not yet being learned reliably from the same flows. +That points to a GUID / source-ID extraction issue in the learner capture path, +not the quest accept resolver above. The next pass should trace the exact GUID +parsing and item-source events used by the live client so those IDs are learned +correctly before any static export work continues.