Clear Combat Log 2.0.6 - 2026-09-24
67 regression scenarios passed under Lua 5.1 and LuaJIT 2.1.1774896198.
Real local ToME 1.7.6 functions; simulated map/UI. ASCII arrows checked; full in-game visual validation pending.

PASS Flame, anonymous Arcane Destruction, melee and an already burning target
PASS damage and healing arrows point toward the affected side
PASS instant actions in the same turn stay separate
PASS unidentified nested projection never inherits Flame
PASS known delayed projectile uses its own descriptor
PASS scope unwinds on errors and preserves nil return values
PASS coroutines do not share talent scopes
PASS DoT requires an actual ticking effect source
PASS outgoing retaliation keeps outgoing direction
PASS healing, absorption, damage and final HP stay separate
PASS native deaths, delayed messages and flyers still execute once
PASS invisible names and HP stay hidden
PASS summons keep their own names
PASS partial native packet uses untouched vanilla output
PASS ambiguous shared source keeps both native messages
PASS disable restores native output, no ICT or logdisplay mutation
PASS renderer error restores methods and propagates
PASS presentation failure falls back without rerunning native side effects
PASS capture failure preserves the complete native packet
PASS exact totals remain numeric, never parsed from descriptions
PASS attack misses still produce details without a damage packet
PASS actor avatars return on direct, splash and miss rows
PASS nested extra strikes consolidate splash totals per target, keeping Flame and heals separate
PASS splash never merges separate actions or sources
PASS splash retains absorbed fragments and exact numeric totals
PASS details toggle suppresses only attack stats
PASS retaliation names the real actor once and preserves separate triggers
PASS retaliation does not identify an invisible real source through its proxy
PASS unique enemy color applies to incoming, outgoing and splash names only
PASS only exact scoped melee critical notices are eligible for deduplication
PASS each nested critical attack keeps one inline CRIT
PASS render fallback replays the deferred native critical once
PASS reset, disable and queue replacement preserve deferred native critical
PASS every splash target shows HP even when its later melee row has HP
PASS native Flame cast is adjacent to its own damage for repeated Arcane Combat procs
PASS travelling spell keeps its announcement once when damage arrives in a later batch
PASS spell announcements survive native fallback, disable, reset and queue replacement
PASS spell announcement wrapper restores logger and nil returns after errors
PASS native weapon UID icon and hover tag survive melee rendering and shield lookup
PASS real 1.7.6 hit-proc and grid code: Arcane Combat then Arcane Destruction
PASS native melee: accuracy after talent bonuses and unrelated save checks
PASS native melee: misses retain chance without damage
PASS native melee: evasion bypasses accuracy roll
PASS native melee: repel bypasses accuracy roll
PASS native melee: forced hits keep base chance distinct
PASS native melee: no-procs attacks still capture the real chance
PASS native melee: critical result on damage row
PASS native melee: no-procs critical has inline CRIT without redundant notice
PASS native melee: saved actor logger cannot bypass critical deduplication
PASS native melee: saved actor logger cannot bypass miss deduplication
PASS attack logger and scope restore after a failed attack
PASS native text renderer keeps hits and for neutral after nested weapon colors
PASS multiple splash targets use hits and indirect sources have descriptive tags
PASS native spell crit computation is unchanged while all standalone notices are hidden
PASS spell critical filtering preserves other notices and respects disable
PASS native status lifecycle shows effective duration/source and preserves callbacks/flyers
PASS buff and debuff arrows point toward their affected target
PASS merged status shows resulting duration without duplicate activation
PASS silent, resisted, invisible and unknown-source statuses stay truthful
PASS status errors restore definitions and replay native flavor
PASS status presentation survives renderer failure and disable
PASS shield crumble duplicate disappears only when structured removal succeeds
PASS unarmed strikes link equipped gloves while empty hands stay unarmed
PASS damage total precedes breakdown including absorbed zero damage; heals stay healing
PASS turn separators show game tick deltas once and reset between combats
PASS native talent readiness keeps flyers and suppresses only its journal notice
PASS talent readiness filter restores logger and nil return values on errors
