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.