mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
705058f3e2
* fix(javascript): count one IPC observation per site-resolved channel A send with a local constant channel was recorded twice: once unresolved by the syntax pass and once resolved by wrapper substitution, because duplicates were keyed on the channel. A channel the call site determines now resolves that observation in place. A channel supplied through a wrapper argument stays a candidate beside the unresolved observation. Invocation identity now follows the call that supplies the wrapper's literal arguments, so one wrapper call reached through several entries is recorded once. Fixes #5710 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): keep wrapper invocations distinct while removing repeats Taking the nearest literal call as invocation identity collapsed separate outer calls that pass different handlers through one wrapper call. Entry identity is restored, and a finding is a repeat only when an identical finding was reached through the same trailing local calls. A registration replaces its unresolved source observation only when the site also determines its handler, so a parameter handler keeps the generic source registration beside per-invocation candidates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): compare site-determined IPC handlers by value In-place resolution compared handler representations, so a constant channel with a named local handler (recorded as an identifier by the syntax pass and as its function by substitution) stayed counted twice. The handler is now site-determined when it evaluates to the same function in the site's lexical environment. A replaced observation also removes the syntax pass's unknown-channel contribution, so a fully resolved file is no longer reported as partial. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): keep closures over invocation values as distinct IPC handlers A handler node created in different wrapper activations may capture different values, so the same function node alone does not prove the call site determines the registration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(javascript): guard optional call paths in closure handler test Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): decide IPC handler identity from activation captures A closure is one site-determined handler only when it reads no binding of a function this trace activated, such as a wrapper parameter or factory local. Unused bindings in the activation no longer split a known listener, and closures over outer-call values stay distinct when a shorter entry traced the same wrapper call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): treat implicit captures and bundle modules precisely in IPC handler identity An arrow handler reading its enclosing function's arguments or this captures that activation. A bundle module factory runs once per module load, so its bindings are shared by every trace rather than per-invocation captures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): attribute an arrow handler's inherited context to its owner An arrow inherits this and arguments from the nearest non-arrow function, so an activated arrow inside that owner does not make the handler depend on the traced call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): skip suffix scans for per-invocation IPC handlers Check activation capture before scanning recorded call chains, keep the chains of capture-dependent handlers out of the index, append chains in place, and treat an arrow's inherited super and new.target as captures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(javascript): supersede nested-entry IPC records and share module-init factories A shorter entry traced alone no longer swallows the outer calls that invoke the same wrapper sequence: the first fuller path takes over its record and separate outer calls stay distinct invocations. A factory activation called at module scope runs once per load, so its closure is shared unless the trace itself makes that call. The resolver now owns bundle module-factory recognition instead of an environment marker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>