3400 Commits
  • fix(javascript): preserve guarded factory fallthrough (#4341)
    Preserve per-exit factory initialization and shared export facts.
    Keep capture/caller boundaries, call-kind semantics and conditional
    registration evidence consistent through CLI and MCP.
    
    Fixes #3963
  • fix(kuna): stream string scans instead of capping them at 16 MiB (#4318)
    * fix(kuna): stream string scans instead of capping them at 16 MiB
    
    `list_strings` and `search_strings` buffered Kuna's whole string JSON and
    refused anything above 16 MiB. Kuna writes about 290 bytes per row, so
    every app above roughly 10 MB failed with a non-retryable memory error:
    a 20 MB Ghostty binary produces 31 MB, Raycast 30 MB and an arm64
    Firefox XUL 179 MB.
    
    Parse the scan as Kuna writes it. `runOwnedCommand` accepts a stdout
    sink, and `KunaStringInventoryReader` owns the interpretation: it
    tokenizes synchronously with stream-json, keeps exact u64 address
    tokens, validates each row before retaining it, skips members it does
    not interpret, and admits retained rows against live heap headroom
    rather than a fixed scan size. The first contradiction stops Kuna
    instead of waiting for the rest; an incomplete document is judged only
    after Kuna's own exit status. Diagnostics keep the 8 MiB Kuna budget,
    now shared with the project export.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * fix(kuna): admit string scan text as it streams and drop sinks with their command
    
    Review found that packed string tokens were assembled whole before the
    reader could discard them or check heap headroom, and that a stdout sink
    could outlive a cancelled or timed-out command.
    
    Move the token mechanics into `KunaJsonDocumentReader`: keys and numbers
    (Kuna's own fields) stay packed, while strings, which carry target-derived
    text, arrive in chunks. Ignored strings are dropped unassembled and kept
    ones are admitted against live heap headroom as they grow. Kept text is
    copied out of the decoded chunk it was sliced from, so retained rows no
    longer pin whole chunks (XUL: 278 MB retained before, 156 MB after).
    `KunaStringInventoryReader` keeps only the string-scan semantics.
    
    `runOwnedCommand` now ties the stdout pipeline to the command's deadline
    signal and aborts it when collection fails, destroying the sink.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * fix(kuna): type the stream-json tokenizer where it is imported
    
    The Reverse tools quality lane type-checks a partial project that reaches
    KunaJsonStream without the separate streamJsonParser.d.ts augmentation,
    so jsonParser had no declaration there. Declare the tokenizer's shape at
    its only import site and remove the augmentation file, so every
    compilation of the reader is self-contained. Split two helpers out of
    the token dispatcher and simplify the stdout sink wait in
    runOwnedCommand, which keeps the added complexity minimal.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * fix(kuna): bound key and number assembly in streamed Kuna JSON
    
    Review found that packed keys (and packed numbers) were assembled whole
    by the tokenizer before the reader could discard or constrain them, so a
    malformed scan with one enormous key could still exhaust the heap.
    
    Stream every scalar. Keys are assembled only up to 64 code units, past
    every field name the reader keeps, so a longer key is skipped unmatched;
    kept numbers longer than that are rejected, and ignored numbers are
    dropped unassembled. XUL's 611k-row scan parses in the same time.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * fix(kuna): stream the call graph instead of capping it at 32 MiB (#4329)
    
    * fix(kuna): stream the call graph instead of capping it at 32 MiB
    
    Call relationships buffered `kuna decompile-graph` and refused output
    above 32 MiB. A 53 MB Raycast binary produces a 157 MB graph (180k
    functions, 773k edges), so every call query failed with a non-retryable
    memory error after Kuna's minute-long whole-program walk.
    
    `KunaCallGraphReader` validates the graph through the shared streaming
    document reader. It retains only the facts queries use (126 MB for
    Raycast) and checks edges against the complete node set once Kuna
    exits. Unrequested bodies are refused before any of their text is
    assembled, through new must-be-null row fields; address fields may be
    null, as `forwardsTo` is. Malformed graphs are now `AnalysisOutputError`
    like the string scan.
    
    `KunaQueryWork.scan` owns the run-and-validate sequence both producers
    shared: diagnostics budget, early rejection and retention of
    deterministic overflow.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * fix(kuna): index call-graph edges as they stream
    
    Review found that the reader kept every parsed edge and built the edge
    indexes only after streaming, outside any heap admission, so a large
    graph could exhaust the heap instead of returning a memory constraint.
    
    Index each edge when it arrives: duplicate pairs and callee orders are
    checked per caller, call edges go straight into the caller/callee
    indexes, and no edge array is kept, so the whole working set grows under
    the per-row admission. Endpoints and order completeness are checked once
    all nodes are known, and the validation-only indexes are released then.
    Raycast's graph now peaks at 346 MB instead of 503 MB and retains 93 MB
    instead of 126 MB, in the same time.
    
    Also drop imports the shared scan made unused.
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    * docs(kuna): state the graph's retained size after incremental indexing
    
    Refs #1957
    
    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
  • feat(javascript): query retained application facts by exact path (#4265)
    Expose exact-path, selected-property, paged reads of retained JavaScript application facts through the shared CLI/MCP analysis view. Preserve original identities, complete row Evidence and partial coverage; retain reproducible real-Joplin and actual-agent measurements, including negative cost results.
    
    Fixes #4190. Part of #4027. Code mode remains deferred by #4091.
    
    Integrate main after #4274. Validation: 114 distinct focused cases across documented invocations, 106 Python cases, full static/docs checks and 18 version-labelled real-application workflows with 9 complete CLI/MCP view parity controls. Preserve two local fixture deadline failures and the unchanged test passing on an available single CPU. Final-head CI passed all 36 jobs after one Windows timeout retry without source changes; both exact-head automated reviews are clear and all review threads resolved. Downloadable apps and raw large Evidence/transcripts are excluded.
    
    Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
  • fix(lifecycle): preserve observations and cleanup ownership (#4274)
    * fix(application): retain completed evidence through cancellation
    
    Validate completed provider reports before classifying cancellation and preserve Evidence and captured diagnostics. Share MCP recording and delivery across custom observation handlers. Add source-owned completion and public SDK recording controls. Refs #3923, #3927, #4261.
    
    * fix(wasm): retain final observations through cancellation
    
    Keep completed Evidence after finalization and through CLI/MCP delivery. Preserve output and cleanup failure precedence. Refs #4254.
    
    * fix(browser): retain final observations and forward cancellation
    
    Classify final CDP detach and completed scenario cleanup at the provider boundary. Translate completed partials into canonical Evidence for MCP recording, and forward CLI cancellation to passive Electron tools. Refs #4255, #4256, #4257.
    
    * fix(ghidra): isolate cancellation of shared startup waiters
    
    Keep startup group-owned while each caller has an independent abortable wait. Await final-owner cleanup and preserve cleanup facts before retrying. Reuse the shared abortable promise helper. Refs #3983.
    
    * fix(mcp): keep shutdown registrations until cleanup succeeds
    
    Retain repeated event requests while unresolved owners need cleanup, and unregister only after success. Verify coalescing and failed-owner retry. Refs #4253.
    
    * fix(adb): own transfer snapshots and stage screen publication
    
    Bind transfer digests to the exact private input bytes and preserve caller APK names. Retain failed descriptors and private-root owners with typed cleanup evidence; publish captures exclusively after the cancellation cutoff. Refs #4251, #4252.
    
    * fix(verification): report ADB cleanup failures
    
    Always close after attempted verification and keep unexpected primary failures and cleanup details visible. Exercise the production script with controlled imports, including null and undefined throws. Refs #4260.
    
    * fix(runner): stop owned Windows commands on cancellation
    
    Use the retained ChildProcess handle for IPC cancellation and parent disconnection. Keep the SQLite lock until observed child close, and include native Windows regressions in the curated CI lane. Native Windows results remain pending. Refs #4258.
    
    * fix(website): canonicalize link containment boundaries
    
    Compare resolved targets with resolved repository and site roots. Accept directory aliases while preserving escape checks and keep fixtures within their temporary owner. Refs #4264.
    
    * docs(testing): cover completion races and cleanup retry
    
    Clarify validation-before-cancellation, independent startup waiter controls, producer and adapter coverage, and repeated shutdown events.
    
    * fix(filesystem): retain file owners and completed reads after close failure
    
    * fix(session): report retained snapshot staging in cleanup status
    
    Fixes #4277. Include both snapshot and profile file-resource scopes in the owning status fact, preserving publication receipts and cleanup retry.
    
    * docs(mcp): clarify recovery of raw partial observations
    
    Document the observed SDK cancellation boundary and the open design decision in #4276 without promoting raw errors to Evidence.
    
    * fix(kuna): own the complete installation inspection lifetime
    
    * test(kuna): cover session cleanup of shared cache resources
    
    * fix(hopper): isolate publisher operation resource admission
    
    * fix(hopper): preserve launcher cleanup failure classification
    
    * fix(adb): retain ordered cleanup and screen publication outcomes
    
    * fix(runner): retain Windows job ownership through cleanup retries
    
    * docs: clarify inspection admission and ordered cleanup regressions
    
    * fix(ghidra): preserve startup cleanup and request deadlines
    
    * fix(runner): supervise stdin errors and bootstrap native controls
    
    * docs: require queued lifecycle controls to survive admission
    
    * fix(cli): leave cleanup resolution with resource owners
    
    * test(adb): verify owned install snapshots through CLI
    
    * fix(errors): exclude resolved primary cleanup resources
    
    * fix(adb): resolve publication cleanup after its handle closes
    
    * fix(android): resolve JADX hash cleanup after owned close
    
    * refactor(android): share hash failure cause options
    
    * fix(kuna): gate commands on retained descriptor cleanup
    
    * docs: cover cleanup admission and owner-confirmed recovery
    
    * refactor(artifacts): bind cleanup errors to confirmed release
    
    * fix(adb): resolve recovered cleanup at retained owners
    
    * fix(kuna): resolve installation cleanup after owned close
    
    * fix(kuna): gate cache reads on retained hash cleanup
    
    * fix(setup): preserve publisher cleanup admission failures
    
    * fix(android): resolve the reported retirement cleanup error
    
    * test(runner): scope post-spawn fault control to POSIX
    
    * test(adb): cover persistent snapshot owner retirement
    
    * fix(kuna): preserve file outcomes with explicit cleanup ownership
    
    * fix(artifacts): resolve errors through retained cleanup owners
    
    * docs(lifecycle): carry cleanup ownership in typed outcomes
    
    * fix(adb): bind staged screen errors to their cleanup lease
    
    * fix(kuna): bind profile cleanup through a close capability
    
    * fix(artifacts): retain descriptor resources in cleanup errors
    
    * fix(pcap): bind existing errors to snapshot retirement
    
    * fix(windows): load source owner through its file URL
    
    * test(build): copy the command runner helper into fixtures
    
    * fix(mcp): own shared observation providers in the transport
    
    * fix(jadx): resolve every retained cleanup retry error
    
    * fix(kuna): bind retry errors to every retained cleanup owner
    
    * fix(adb): bind admission and shutdown errors to exact cleanup leases
    
    * fix(windows): resolve command paths before native ownership
    
    * test(publisher): assert exact descriptor recovery without release metadata
    
    * docs(lifecycle): require every retry error to follow its owners
    
    * fix(kuna): keep hash cleanup state stable across concurrent retries
    
    * test(windows): exercise surviving descendants with scoped shutdown deadlines
    
    * fix(uninstall): preserve primary read errors through cleanup failure
    
    * test(publisher): assert cleanup Result and exact owner recovery
    
    * test(windows): observe supervisor resources through IPC disconnect
    
    * fix(browser): retain typed cancellation after interrupted actions
    
    * test(publisher): assert ownership phases without retry-count coupling
    
    * fix(lifecycle): preserve abort reasons through shared provider execution
    
    * fix(jadx): preserve execution and late hash cancellation causes
    
    * fix(adb): compose late cancellation with exact cleanup failures
    
    * test(mcp): use the shared budget for session workflows
  • fix(javascript): preserve incoming callback target uncertainty (#4243)
    Preserve incoming callback uncertainty and resolve proven preceding writes.
    Share read-position and initializer identity facts with returned-reference
    analysis; cache completed projected work with actual cycle dependencies.
    
    Fixes #3880
  • fix(adb): retain and resolve owned hash cleanup
    Keep exact returned hash and directory failures linked to their cleanup owners. Retain input staging while its descriptor remains unresolved, and resolve the linked errors only after successful release. Preserve typed cleanup and partial acquisition facts through file, package, and bugreport consumers instead of wrapping or flattening them away.
    
    Validated 189 affected tests across 13 files, build, typecheck, lint, and docs. Three larger integration cases were excluded to respect the CPU limit. New real-file fault controls reproduce on the old source and verify persistent failure, owner identity, cancellation, retained output, and recovery. No physical ADB device or real JADX engine verification. Refs #4266, #4274.
  • fix(android): resolve hash cleanup through its owner
    Bind the typed hash failure to its retained descriptor and resolve cleanup uncertainty only when that exact owner closes. Preserve the original failure through immediate retirement and later shutdown recovery. Controlled real-file regressions cover immediate and persistent close faults; no real JADX engine was launched. Refs #4266, #4274.
  • fix(errors): exclude recovered cleanup resources
    Compose only unresolved primary resources into a later cleanup failure, retaining both original causes and diagnostics. Document exact-owner recovery and cover resolved and unresolved composition controls. Refs #4266, #4274.
  • fix(providers): own shared startup and retained cleanup
    Give concurrent Ghidra and Hopper callers independent waits over one owned startup. Join final-caller cleanup, preserve failed cleanup owners, and derive readiness from the current startup result and live transport. Distinguish provider closure from caller cancellation and clean up interrupted final lineage observation.
    
    Reuse the Ghidra socket fixture, replace stale cancellation health assertions with cold and warm reuse controls, and cover public MCP peer cancellation. Validation: 315 affected tests, build, typecheck, lint, docs, and 25 relocated startup controls passed. Controlled child bridges only; real Ghidra JVM and Hopper GUI verification remains unperformed. Refs #3983, #4227, #4274.
  • fix(native): distinguish undecoded Swift spelling adjustments
    Recognize known undecoded producer spellings without treating them as successful demangles. Preserve actual producer output and derive symbol types from the domain contract instead of duplicating its validation schema.
    
    Compare retained output with the real demangler through MCP, while preserving CLI malformed-input and line-ending coverage.
    
    Refs: #4215, #4287
    
    Co-authored-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>
  • fix(native): preserve slice identity when selecting UUID rows
    Carry the selected slice name and the existing tool owner's dwarfdump spelling separately. Compare observed row labels exactly, preserving explicit ABI versions and uncertainty for missing rows.
    
    Correct the production-boundary fixture and retain wrong-version and mixed-row controls. Real Apple multi-version selection behavior remains unverified.
    
    Refs: #4195, #4288
    
    Co-authored-by: Henglie <ebhenglie@gmail.com>
  • fix(ghidra): retain request limits and startup cleanup
    Preserve the full request options through the FIFO and settle interrupted or rejected final lineage observation through owned startup cleanup. Keep the startup diagnostic checkpoint until finalization succeeds.
    
    Validate typed expired ping, cancellation, child exit, runtime removal, retry, and MCP recovery without running a native Ghidra instance.
    
    Refs: #4289, #4274
  • fix(javascript): retain unresolved network targets with provenance
    Resolve stable lexical and URL targets using shared effects, and preserve unresolved request expressions as partial facts. Carry their uncertainty through workers, artifact graphs, and the CLI. Scope partial endpoint identity to the source site.
    
    Refs: #3451, #3534
    
    Co-authored-by: Hemang Varshney <218273197+hemv-857@users.noreply.github.com>
  • fix(javascript): unify loader binding and mutation ownership
    Model the CommonJS wrapper binding and query shared lexical identity, mutation, and evaluation timing at each call. Remove duplicate importer interpretation and preserve uncertainty for with scopes, prototypes, repeated writes, and opaque object escapes.
    
    Validate generated fixtures against bounded Node oracles; no analyzed target execution is added.
    
    Refs: #3982, #4072
    
    Co-authored-by: Geronimo <varungore1@gmail.com>
  • fix(electron): unwrap transparent inline window options
    Use the shared expression owner for BrowserWindow options and webPreferences. Retain overwrite and spread uncertainty through CLI and MCP evidence.
    
    Refs: #4250, #4281
    
    Co-authored-by: Geekwolf <geekwolf@163.com>
  • fix(browser): match exact WebMCP receiver segments
    Inspect AST property segments instead of flattened suffixes. Reject dotted-key and suffix collisions while retaining page-declared trust and source evidence through the CLI.
    
    Refs: #4205, #4279
    
    Co-authored-by: Geekwolf <geekwolf@163.com>
  • fix(mcp): preserve nested JSON values in compact array schemas
    Give array unions an unrestricted item schema and validate converted tools/list schemas for both advertised profiles. Keep client constraints separate from JSON Schema validity.
    
    Refs: #3838, #3921, #3842
    
    Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
    Co-authored-by: 冰水泡枸杞 <xingzihai@users.noreply.github.com>
  • fix(setup): preserve JSONC trivia when removing registrations
    Remove properties and their separators using parsed JSONC token spans. Preserve unrelated comments, BOM, CRLF, backups, and repeated removal behavior.
    
    Refs: #4244, #4284
    
    Co-authored-by: alfredo1491 <208325033+alfredo1491@users.noreply.github.com>
  • fix(ghidra): retain scoped failures through process finalization
    Drain output within caller bounds at asynchronous completion owners and classify JVM exhaustion from the failing operation only. Preserve raw-byte scope, credential redaction, configured heap provenance, cancellation and exact cleanup failures. Validation uses controlled processes and provider fixtures; native Ghidra OOM execution was not repeated.
    
    Refs #4241, #4275
    
    Co-authored-by: Syed Rishad <rishadzzzz@gmail.com>
  • fix(javascript): preserve canonical rest-array property keys
    Reuse the semantic array-index parser so leading-zero keys stay unresolved instead of selecting positional arguments. Preserve canonical indices, literal fallback and dynamic-key uncertainty.
    
    Refs #4242, #4272
    
    Co-authored-by: Liu Jie <maxazure@gmail.com>
  • fix(analysis-view): preserve native relationship coverage
    Carry the parent native coverage facts through inline and retained views independently of row-page exhaustion. Preserve uncertainty, optional diagnostics and source Evidence.
    
    Refs #3891, #4263
    
    Co-authored-by: ogutdgn <79801848+ogutdgn@users.noreply.github.com>
  • fix(go): distinguish dependency coverage from parse completeness
    Explain unknown dependency coverage when embedded metadata has no main-module record. Preserve decoded dependencies and distinguish GOPATH-style omissions from observed module-mode empty lists.
    
    Refs #4191, #4267
    
    Co-authored-by: Y0UW1SH <29498139+Y0UW1SH@users.noreply.github.com>
  • fix(setup): resolve empty Claude profile paths consistently
    Use the default home registration and personal skill roots for an empty profile override. Share marker and skill path resolution while preserving nonempty caller paths, backups and idempotence.
    
    Refs #4262, #4270
    
    Co-authored-by: Polly Labs <pollychen.lab@gmail.com>
  • fix(artifacts): reject colliding extraction paths before writing
    Preserve duplicate archive occurrences in inventory and reject an ambiguous materialization before acquiring readers or output resources. Keep path collisions distinct from integrity failures.
    
    Refs #4271, #4273
    
    Co-authored-by: Liu Jie <maxazure@gmail.com>
  • fix(session): report retained file and candidate cleanup
    Report cleanup from the owning snapshot and provider-candidate resource scopes without retrying or starting work. Keep status accurate before a client exists and through cleanup retry.
    
    Refs #4277, #4274
  • fix(browser): own transport cleanup through finalization
    Own CDP transports from admission through observed close, retain failed
    owners for retry, and keep active peers separate from pending cleanup.
    Preserve primary errors and completed facts through final cancellation.
    Forward passive Electron CLI cancellation and dispose browser, runtime and
    scenario owners from CLI and MCP shutdown.
    
    Refs #4255, #4256, #4257
  • fix(evidence): retain completed observations on late cancellation
    Validate completed reports before cancellation projection, retain valid
    Evidence and captured command diagnostics, and convert raw cleanup partials
    at their application owner. Record partial Evidence consistently across MCP
    handlers. Keep page inspection separate from unfinished bundle analysis.
    
    Refs #4261
  • fix(filesystem): retain stable hash cleanup owners across callers
    Preserve completed digests and primary failures when descriptor close fails.
    Carry the exact handle owner through provider, readiness, cache, doctor and
    verifier boundaries, and retry cleanup without rehashing or retrying a raw fd.
    Close candidate-owned resources even when no target client was opened.
    Keep verifier workspaces when provider shutdown remains incomplete.
    
    Refs #4266
  • fix(docs): resolve link roots before containment checks
    Normalize repository and generated-site roots at the owning boundary so
    symlink aliases do not reject valid local links. Preserve missing-fragment
    and escaping-path rejection.
    
    Refs #4264
  • fix(verifiers): report adb operation and cleanup failures together
    Close the provider on every verifier path and report primary and cleanup
    failures before printing success. Preserve operation failures when shutdown
    also fails instead of swallowing cleanup or exiting before it completes.
    
    Refs #4260
  • fix(dev): retain exclusive ownership through command shutdown
    Terminate the directly owned Windows command on cancellation and retain the
    SQLite lock until child close. Record post-spawn errors without releasing
    ownership early or leaving later error events unhandled.
    
    Refs #4258
    
    Co-authored-by: DeryFerd <deryferdikao125@gmail.com>
  • fix(javascript): select timer handles at cancellation reads
    Use the shared binding-at-read owner instead of grouping schedules across the
    whole binding lifetime. Match selected initializer nodes, retain uncertain
    origins as candidate links, and preserve immutable closure captures.
    
    Adapt the diagnosis in PR #3794 by @Xinglan233, whose source commit was authored
    by Codex. Verify stale writes, later schedules, replacements and CLI graph links.
    
    Refs #3358, #3794
    
    Co-authored-by: Codex <codex@openai.com>
  • fix(web): read WebMCP inputs from schema properties
    Remove the fallback that interpreted schema metadata as parameter names.
    Preserve exact literal property keys, including empty names, without inventing
    names for missing or dynamic properties. Keep this an observed name projection.
    
    Refs #3331, #3765
    
    Co-authored-by: abdooo2235 <abdalrhmantheiv15@gmail.com>
  • fix(javascript): attribute service workers to intact platform paths
    Check the complete navigator.serviceWorker.register identity through the shared
    ambient-write owner, including replaced methods and aliased receiver mutations.
    Reuse the module URL reader for intact registrations while preserving unknown
    document-relative strings. Cover the unresolved review case and the CLI graph.
    
    Refs #3841
    
    Co-authored-by: Chandan Chaudhary <chandankkumar156@gmail.com>
    Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
  • fix(javascript): bound static getter reference expansion
    Replace recursive getter histories with a query-owned worklist and memo. Bound
    precise expansion at 512 states and widen growing receiver cycles; retain
    escaped roots and constructed children rather than silently dropping suffixes.
    Carry the resource limit through semantic coverage, worker transport and graph
    Evidence while preserving direct writes, imports and unrelated literal facts.
    
    The small source probe reduced 65/326 paths to one widened reference for five
    and six getters. The original large Claude artifact was not rerun. Validate
    receiver/alias/mutation controls and compiled CLI/MCP consumers.
    
    Refs #3839, #3848
    
    Co-authored-by: Yi Han <yhan606@aucklanduni.ac.nz>
  • fix(adb): retain cancellation at screen publication
    Stop before publishing when screencap returns after cancellation. If the file
    has already committed, preserve its path, digest and dimensions in cancellation
    Evidence. Reuse the execution-to-Evidence owner and remove a duplicate check.
    
    Validated both sides of publication using a valid PNG and real temporary
    filesystem writes; provider and process replies are simulated.
    Refs #4251.
  • fix(adb): bind transfer evidence to consumed snapshots
    Push and install now consume private copies whose stable hashes identify the
    transferred bytes. Preserve original caller paths, remote side-effect receipts
    and cancellation through final cleanup. Retain failed snapshot owners in the
    existing directory cleanup lifecycle and remove redundant stored identity.
    
    Validated path replacement through real subprocess stubs and a public CLI
    negative/positive reproduction, plus capacity, cancellation and cleanup retry.
    The small cold/warm CLI comparison does not establish a speed improvement.
    Real Android devices and Windows private-root behavior were not exercised.
    Refs #4252.
  • fix(mcp): retain shutdown signals until cleanup succeeds
    Give process signal registration a named owner and keep SIGINT/SIGTERM
    listeners until successful cleanup unregisters them. Reuse existing shutdown
    coalescing and failed-owner retry behavior.
    
    Validated repeated signals with mixed cleanup results through the production
    registration boundary. No real OS signal integration claim.
    Refs #4253.
  • fix(wasm): retain cancellation through final cleanup
    Observe cancellation after releasing the private runtime root and preserve
    completed Evidence. Keep cleanup failure, cancellation and retry ownership
    separate. Construct partial Evidence only when the outcome needs it.
    
    Validate both successful cleanup and abort plus cleanup failure/retry. Type
    the scenario tag map and give cleanup assertions live counters to prevent
    missing-tag and stale-counter test debt. Tests use simulated WABT executables.
    Refs #4254.
  • fix(electron): snapshot script frame identity at ingestion
    Keep each parsed script's observed frame after context destruction or ID reuse.
    Remove the later context lookup so record identity and deduplication use the
    same historical fact. Unknown and unauthorized frame mappings remain null.
    
    Validated event-to-record behavior with real local files and simulated CDP
    events, plus existing provider tests; no real Electron engine was exercised.
    Refs #3823.
    
    Co-authored-by: Liu Jie <maxazure@gmail.com>
  • fix(javascript): version syntax-aware structural fingerprints
    Retain bigint/directive values, assignment operators, fixed public keys and
    execution-affecting syntax flags in v3. Preserve local/private binding renames
    and isolate structural matching by algorithm version. Remove the redundant
    test grouping and document structural matching as heuristic evidence.
    
    Validated AST, worker admission, archived-version matching, reconstruction and
    public CLI comparisons. Auto-accessors are tested at the AST boundary because
    the production JavaScript parser does not enable their Babel plugin.
    Refs #3952, #4020.
    
    Co-authored-by: ShitK <1724059440@qq.com>
  • fix(reference): resolve runtime imports from their owning syntax
    Distinguish call-form require from TypeScript import-equals before resolving
    inventory paths. Probe CommonJS files before indexes and honor package main
    without requiring an index. Retain selected manifest directory identities and
    reuse the path lookup owner for canonical ambiguity.
    
    Validated with source/reader tests and a public CLI fixture controlled by the
    pinned Node loader. Windows no-follow reader behavior remains unverified.
    Refs #3895, #3896, #3973, #4017.
    
    Co-authored-by: hhang <169027046+xu91102@users.noreply.github.com>
    Co-authored-by: IssueHunter Worker <issuehunter@users.noreply.github.com>
  • fix(apple): preserve exact Interface Builder plist integers
    Reuse byte-derived numeric metadata after graph classification so emitted
    attributes preserve exact integers without changing UID links or identities.
    Reserve metadata and attribute projection within the shared decode budget.
    
    Validated six CLI cases covering XML, binary, collisions, real values and
    incomplete metadata, plus decode-budget regressions. A small cold/warm CLI
    comparison showed similar costs; it does not establish a speed improvement.
    Refs #3876, #3972.
    
    Co-authored-by: hhang <169027046+xu91102@users.noreply.github.com>
  • fix(browser): compare accessibility only with observed coverage
    Return unknown before fingerprinting incomplete accessibility trees. Keep
    known structural changes comparable when only text permission is absent,
    and preserve independent changes in other dimensions.
    
    Validated through seven CLI cases and existing network comparison semantics.
    Refs #3385, #3824.
    
    Co-authored-by: Liu Jie <maxazure@gmail.com>
  • fix(browser): retain malformed inventory uncertainty
    Distinguish missing CDP inventories from observed empty arrays, retain valid
    accessibility and worker siblings, and admit required fields before scope
    inference. Stop interpreting DOM documents without a usable string table.
    
    Validated producer semantics and simulated CDP provider boundaries; this does
    not establish real Chrome or Electron engine behavior.
    Refs #3376, #3379, #3850.
    
    Co-authored-by: 李云周 <154221037+YunzhouLi-hub@users.noreply.github.com>
    Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
  • fix(apple): scan keyed archive root values in context
    Treat top-level names separately from encoded values so scalar roots named
    UID or CF$UID cannot become references. Keep one shared root traversal budget
    and deterministic reference paths.
    
    Validated projection and filesystem reader regressions. The aggregate-budget
    stress regression is retained for CI and was not executed locally.
    Refs #3913, #4019.
    
    Co-authored-by: Sriram-PR <160517347+Sriram-PR@users.noreply.github.com>
  • fix(reconstruction): preserve residual replay uncertainty
    Keep overall verification unknown when an unchanged process comparison cannot
    prove the absence of divergence. Preserve independently complete dimensions
    and known changes. Let the named comparison schema own status consistency.
    
    Validated through stdio MCP comparison and verification, plus domain tests.
    Refs #3980, #4160.
    
    Co-authored-by: Rudy Celekli <rudy@gradiahq.com>
  • fix(lifecycle): preserve ownership, cancellation, and cleanup outcomes (#4238)
    * fix(cleanup): preserve owner recovery instructions
    
    Keep cleanup remediation through combined errors and direct or managed one-shot analysis while retaining primary diagnostics.
    
    Refs: #4227
    
    * fix(hopper): recover late startup and retained cleanup
    
    Authenticate initial and cleanup handshakes through the same identity owner. Expose startup and cleanup activity, retain health after target retirement, and expire abandoned unauthenticated listeners without timing out authenticated work.
    
    Refs: #4227
    
    * fix(providers): retain composite lifecycle facts across retries
    
    Preserve observed child health with incomplete peer coverage, retry only unresolved clients, and retain all child cleanup recovery actions.
    
    Refs: #4233
    
    * fix(process): honor cancellation through capture cleanup
    
    Check the request signal after cleanup and before final publication, retaining completed observations under typed cancellation.
    
    Refs: #4005
    
    * fix(native): preserve failed LLDB launch ownership and exit proof
    
    Publish failed-launch process identity and observed exit separately from object validity. Retire only the exact owned process and retain uncertainty when exit cannot be established.
    
    Refs: #4232
    
    * fix(native): honor cancellation after trace finalization
    
    Check cancellation after runtime-root cleanup and retain collected trace observations as partial cancellation evidence.
    
    Refs: #4009
    
    * fix(cli): preserve analysis results when provider cleanup fails
    
    Reuse the existing one-shot finalizer across thirteen command families to retain completed Evidence and primary diagnostics on close failure. Cover success, denied cleanup, and combined primary/cleanup failure through the public CLI.
    
    Refs: #3935
    
    * docs(lifecycle): define completion invariants and regression scenarios
    
    Document distinct ownership/readiness/exit facts, late cancellation and atomic publication boundaries, partial child cleanup, and diagnostic retention. Link representative regressions and route contributor guidance through AGENTS.md.
    
    Refs: #4227
    
    * fix(session): retain run identity through pending cleanup
    
    * fix(cli): preserve original cleanup resource diagnostics
    
    * fix(native): retain completed facts through finalization failure
    
    * fix(providers): report retained cleanup paths at their owners
  • fix(reference): retain unverified symlink target provenance
    Keep the observed target path and failed directory in the unreadable-link diagnostic without promoting either to proven graph identity. Verify the retained path through the importer boundary.
    
    Refs: #4013, #4053
  • docs(browser): explain CDP detach effects on caller emulation
    Describe Chromium platform-emulation reset across connected page workflows and recovery by the owning client. Browser survival does not imply state preservation; the upstream limitation remains unresolved.
    
    Refs: #4089