Commit Graph
1942 Commits
Author SHA1 Message Date
Cursor Agent b9be864801 fix(settings): parse runtime launch seeds at the operation boundary
Startup no longer rejects a runtime-owned REA_ seed, so update_analysis_settings can replace it. Debugger construction keeps only the restart-only caps, Kuna stores the launch baseline rather than a cached override, and the advertised operations include GDB close, Rizin close, Kuna list_procedures, and the stable-file ChangeTime callers.
2026-11-11 20:16:24 +08:00
Cursor Agent e0dcdab1a9 fix(settings): advertise every bridge operation and prefer accepted overrides
The bridge ceiling lists every Hopper and Ghidra bridge operation plus the Cutter calls, and a test fails when a registry entry is missing. ChangeTime observation and the other launch-seed parsers read an accepted override before rejecting an invalid value.
2026-11-11 20:16:24 +08:00
Cursor Agent 2bac42cde5 fix(settings): apply runtime overrides before provider limit validation
JEB, Kuna, Windows, debugger, and Cutter consult an accepted override before rejecting an invalid launch value. JEB and Hopper startup deadlines keep default, setting, or runtime as the limit source, and a Kuna timeout without its own limit uses the selected project deadline source.
2026-11-11 20:16:24 +08:00
Cursor Agent 1613f2b777 fix(settings): keep limit provenance through wrappers and Cutter inspection
Startup timeout wrapping keeps the debugger setting limit. Pwntools and Kuna failures report the selected source. Cutter session and command operations can inspect the bridge ceiling.
2026-11-11 20:16:24 +08:00
Cursor Agent 649b9c089c fix(settings): enforce runtime caps on each GDB command and Cutter request
GDB reads the accepted command-output cap when it admits a command. Cutter uses that same accepted bridge ceiling for mismatch and request checks. Kuna project-timeout metadata includes the operations that wait on the shared export.
2026-11-11 20:16:24 +08:00
Cursor Agent b0541c80b3 feat(settings): read per-call REA_ limits from the operation snapshot
Part of #9881. Move the limits checked on each call into update_analysis_settings, keep their REA_ seeds and bounds, and reject updates outside the allowed range.
2026-11-11 20:16:24 +08:00
morluto dc521dc0d9 fix(settings): omit unknown pending restart state 2026-11-11 19:48:33 +08:00
Cursor Agent 0ae186e196 fix(settings): classify caller-selected limits as parameter updates
analysis_timeout_ms, max_heap_mb, and command_timeout_ms keep the source chosen by the caller, the runtime override, or the built-in default. A request value reports update_mode parameter because update_analysis_settings cannot change that call.
2026-11-11 19:48:33 +08:00
Cursor Agent be20bdfb26 feat(settings)!: replace effect with update_mode and pending_restart
Callers read update_mode to see whether update_analysis_settings can change a limit, and pending_restart only when a configured value is not active in this process.
2026-11-11 19:48:33 +08:00
Cursor Agent aee1178839 feat(settings)!: report when a limit change takes effect
Part of #9881. Add effect immediate or next_process and keep rea_restart_required, restart_required, and restartRequired as compatibility aliases.
2026-11-11 19:48:33 +08:00
morluto 0e0af455f2 fix(reference): preserve physical failures across late cancellation (#10072)
* fix(reference): preserve physical failures across late cancellation

* fix(reference): retain late cancellation alongside read failures

* fix(reference): preserve metadata errors through cancellation

* fix(reference): retain directory failure identity

* fix(reference): preserve parallel physical and cancellation outcomes

* fix(reference): preserve optional Git metadata absence
2026-11-11 18:53:08 +08:00
morluto 84041fff23 fix(process): retain cleanup ownership through input finalization (#10095) 2026-11-11 18:37:29 +08:00
morluto 20aeaf110f fix(javascript): preserve incomplete package and artifact identity facts (#10032)
fix(javascript): preserve artifact identity and manifest uncertainty
2026-11-11 05:28:59 -05:00
morluto e9f12d212c fix(layout): validate numeric ELF type identities (#10092) 2026-11-11 18:26:22 +08:00
N0zoM1z0andgensokyo-dev c80e6cd845 fix(native): require retained Evidence before registering alias identity
Validate the Evidence owner on every successful dossier before canonical deduplication. Preserve the unowned alias observation in the typed refusal.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
N0zoM1z0andgensokyo-dev ca268ead0a fix(native): finalize repeated call destinations once
Preserve resolution rows while coalescing identical binding tasks before input-index expansion. A 16-target fixture retains one gap group and one argument binding.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
N0zoM1z0andgensokyo-dev 87cd7070b6 test(native): cover call-input gaps through paging, budgets and MCP
Verify canonical aliases, parameter and edge refusal, provider truncation, zero-argument calls, source Evidence closure and historical snapshot profiles.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
N0zoM1z0andgensokyo-dev 3dced80300 fix(native): locate recovered call inputs without parameter bindings
Group exact input indices with caller Evidence after complete parameter examination; preserve budget uncertainty and advance the trace workflow profile.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
N0zoM1z0andgensokyo-dev a77e02788e fix(native): bind call dependencies through analyzed procedure identities
Move binding finalization into one owner; preserve exact callee selectors while indexing retained parameter and return nodes by the dossier address.

Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
N0zoM1z0andgensokyo-dev 47704ab093 test(native): reproduce unlocated call inputs and named-callee binding loss
Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
2026-11-11 18:24:58 +08:00
morluto 930c56d670 fix(native)!: enforce paired Swift literal coverage in shared dossiers (#10068)
* fix(native)!: enforce paired Swift literal coverage in shared dossiers

BREAKING CHANGE: Retained function dossiers containing only one Swift inventory are rejected. Regenerate observations through a canonical provider; both-absent unsupported observations remain valid.

* fix(contracts): advertise paired Swift literal coverage
2026-11-11 18:23:45 +08:00
morlutoandCursor Agent cb17828dd1 fix(reference): retain proven loader calls and unresolved targets (#9920)
* fix(reference): retain proven loader calls and unresolved targets

* refactor(reference): remove unused ancestor lookup

* fix(reference): drop loader calls that return a reassigned member

An immediate call could still use a member's original require initializer
because mutation facts were not built for a call-valued callee. A definite
assignment that precedes the call now replaces that initializer.

* fix(reference): select returned loaders from indexed read facts

* fix(reference): refresh loader facts for wrapped returned members

A sequence such as (0, box.load) still used the original require
initializer. Follow sequence, conditional, and logical returns to the
member before deciding whether a prior assignment replaced it.

* test(reference): record unresolved CommonJS targets in source evidence

unknown.cjs calls require with a non-literal target. The inventory now
keeps that coverage limitation on the file entry, and the boundary
fixture asserts it beside the resolved member relationships.

* fix(reference): cover opaque apply lists and assigned returned members

require.apply(null, args) has no normalized argument list, so the
inventory now records an unresolved target instead of complete coverage.
An assignment return such as f = box.load is followed to the member
before a prior replacement is trusted.

* fix(reference): keep self-defaulted module delegates loadable

Timing a member read at a later call made `box.load = box.load || null` observe its own write and drop the native delegate. Reads that already fed an earlier assignment stay at the member.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 18:23:15 +08:00
morluto d9537fc75c fix(native): validate ELF section backing against its type (#10066)
fix(native): reject contradictory ELF section backing
2026-11-11 05:22:25 -05:00
morluto 34025d2fcd fix(managed): derive native platform facts before symbol matching (#10090)
fix(managed): derive native verification platform at intake
2026-11-11 18:22:09 +08:00
morluto 98f796c991 fix(json): preserve cancellation through input finalization (#10022)
* fix(json): preserve owned stream cancellation facts

* fix(process): classify completion after input cleanup

* fix(process): retain typed failures through input cleanup

* fix(process): preserve late cancellation through failed input cleanup
2026-11-11 05:22:00 -05:00
morluto 389b69d097 fix(evidence): preserve APK and Android execution provenance (#10021)
* fix(evidence): preserve APK and Android execution provenance

* docs(apktool): clarify decoded string table observations
2026-11-11 05:19:58 -05:00
morluto 913c9fe194 fix(adb): preserve exact transport identity observations (#10062) 2026-11-11 18:18:35 +08:00
morluto 3eb502ae5d fix(javascript)!: bind runtime identities to capture evidence (#10063)
fix(javascript)!: bind runtime graph identities to capture Evidence
2026-11-11 18:18:22 +08:00
morluto 5b5990f7a9 fix(views): preserve application provenance and field omission (#10061)
fix(views): preserve canonical JavaScript provenance
2026-11-11 18:17:39 +08:00
morluto 3c0e9d8a02 fix(providers): retain candidate cleanup until close succeeds (#10020) 2026-11-11 05:08:15 -05:00
morlutoandCursor Agent 9f5f9c1289 fix(desktop): preserve capture evidence and output ownership (#9899)
* fix(desktop): retain capture identity and cleanup ownership

* fix(desktop): validate destinations and finish inputs before export

* fix(desktop): preserve package ownership and apt trust boundaries

* fix(sqlite): preserve observed facts and distinguish special real values

* fix(desktop): bind computer files to data-object metadata

* test(desktop): count the tagged negative-zero cell spelling

SQLite view cells encode negative zero as a real object so it stays
distinct from the text "-0". The byte budget follows that spelling.

* fix(desktop): keep unresolved discovered state directories

Canonicalizing an unreadable path or dangling symlink aborted capture
before the inventory could record that the path was unknown. Those
discovered directories now keep their absolute spelling in the scope.

* test(desktop): keep the capture scope suite within its line limit

The unresolved state-directory case lives beside the suite so the
existing callback stays within the lint limit.

* fix(desktop): retain cancellation through capture input cleanup

* fix(desktop): avoid reserved Pydantic settings properties

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:36:47 +08:00
morlutoandCursor Agent a896e35c47 fix(javascript): preserve semantic effects and graph evidence (#9900)
* fix(javascript): preserve semantic facts across writes and implicit effects

* fix(javascript): preserve bundler identities and helper bindings

* fix(javascript): retain semantic graph evidence and coverage

* test(javascript): include the request link in endpoint traces

Response consumers now also link the originating request to the response, so an endpoint trace reports both that association and the response's json consumer.

* fix(javascript): keep source accessors known after a copied value escapes

An unknown computed getter makes accessor lookup consider every property.
A spread copy already records a value escape, and that escape was treated
as an unknown getter on the source, so the next read escaped the whole
object. Accessor lookup still fails closed for unknown writes and calls.

* fix(javascript): keep Object.defineProperty identified at its own call

The call that escapes Object was treated as a prior replacement of
defineProperty, so a descriptor value never replaced the exported sender
and bundled IPC paths were dropped.

* fix(javascript): keep Vite preload calls that precede reassignment

Helper identity used every write to the binding, so a later assignment
erased a call that had already read the canonical helper. Use the binding
value at the call when that order is known.

* fix(javascript): apply Vite cache mutations before a later reassignment

A later helper write made the whole-binding initializer check ignore an earlier cache mutation. Identity at that mutation uses the same ordered read as the call.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:33:47 +08:00
morlutoandCursor Agent 67f74c5fb9 fix(setup): retain Hopper operation failure attribution (#9958)
* fix(setup): retain Hopper operation failure attribution

* fix(setup): retain falsy Hopper abort reasons from body reads

After response headers, Node's fetch body reader rejects a null, false,
0, or empty-string abort with a fresh AbortError instead of that reason.
Replace that substituted error with the caller's reason. A body
AbortError while the caller has not aborted still propagates.

* fix(setup): preserve independent response body aborts

* fix(setup): identify aborts through owned transport

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:28:23 +08:00
morlutoandCursor Agent 654feeef9c fix(api-contract): retain partial OpenAPI evidence (#9908)
* fix(api-contract): retain partial OpenAPI evidence

* docs(api-contract): describe partial OpenAPI Evidence on interruption

Early failures still keep the file snapshot hash. Cancellation or the
retained-facts limit after a row now returns authenticated Evidence, and
the guide explains how to reuse that partial inventory.

* fix(api-contract): count finished paths and keep earlier diagnostics

A path counts only after its item is read, so a path refused before
traversal does not increase path_entries_examined. A paths diagnostic
that exhausts the retained-facts allowance still keeps diagnostics
already stored, including invalid info.

* test(api-contract): keep invalid info when paths exhaust the allowance

The paths diagnostic can fail after invalid info is already stored. The
partial report must still carry that diagnostic and count no path entries.

* docs(api-contract): name every retained row and the view source

The hash remains only when no operation, reference, or diagnostic row was
kept. Partial Evidence is reread through inspect_analysis_view's source
and view, not as separate Evidence fields.

* test(api-contract): verify interrupted inventory evidence

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:27:00 +08:00
morlutoandCursor Agent eff195d6aa fix(adb): reject unrepresentable activity arguments (#9918)
* fix(adb): reject unrepresentable activity arguments

* test(adb): lock complete activity component boundaries

The CLI and advertised schema still admitted a slash-free 512-character
component after admission required a nonempty package and class. Keep
that length sample rejected, admit a pattern-valid 512-character
component, and assert the typed field error.

* style(docs): format NTFS verification tables

oxfmt rejects the tables merged from main. The alignment is formatting
only, so static checks can run on this branch.

* test(adb): use a well-formed component for the length constraint

An over-long run of letters also fails the package/activity pattern, so the selector check reported both issues. The length fixture now has a valid component shape.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:26:41 +08:00
morluto 2bb266b39b fix(frida): retain cancellation through final cleanup (#9963)
fix(frida): retain caller cancellation through failed session cleanup
2026-11-11 17:25:27 +08:00
morluto fcf8b99a77 fix(reverse): preserve owned command failure attribution (#9964)
fix(reverse): preserve owned command failure provenance during cancellation
2026-11-11 17:25:20 +08:00
morluto 7c0a658cb4 fix(export): preserve committed journal and function failure facts (#9965)
fix(decompile): preserve committed export failure facts
2026-11-11 17:24:28 +08:00
morluto e5fe737677 fix(native): preserve source graph coverage through UI tracing (#10030)
* fix(native): preserve graph truncation through UI tracing

* fix(native): preserve source and local trace cutoff causes
2026-11-11 17:23:37 +08:00
morlutoandCursor Agent e504e09aeb fix(elf): keep compressed storage out of decoded metadata facts (#9892)
* fix(elf): keep compressed storage out of decoded metadata facts

* fix(elf): admit compressed string tables the profile does not read

SHF_COMPRESSED string tables are rejected only when they name sections
or symbols. An unreferenced string table is not decoded, so it no longer
makes an otherwise analyzable ELF unsupported.

* fix(elf): keep requirement names when verdef declares no entries

A compressed GNU version-definition section with sh_info 0 has no
definitions to decode. Skipping it leaves requirement names in place
instead of clearing them as an unread compressed table.

* fix(elf): skip empty version requirements before storage reads

* fix(elf): skip empty compressed version-requirement tables

A GNU verneed section with sh_info 0 has no requirement records. Reading
its compressed bytes was a version failure and partial coverage; the
declared count now skips that read.

* fix(mips): distinguish compressed metadata storage (#9959)

* fix(elf): note a missing symbol table only when a relocation needs it

A sectionless image with direct DT_INIT and DT_FINI no longer becomes incomplete solely because DT_SYMTAB does not match a decoded table. The same note remains when a dynamic relocation asks for a symbol.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:21:19 +08:00
morluto 3896f72552 fix(environment): preserve null bodies and unique member matches (#10014) 2026-11-11 17:19:37 +08:00
morluto 44ef32c1c0 fix(binary): seal session admission during shutdown (#10012)
fix(session): seal binary work admission during shutdown
2026-11-11 17:19:24 +08:00
morlutoandCursor Agent 5b02119b69 fix(native): bind initializer evidence to selected Mach-O slices (#10013)
* fix(native): bind initializer evidence to selected Mach-O slices

* fix(native): reject initializer slices outside the artifact

* test(native): retain completed initializer evidence on late cancellation

completeProviderEvidence keeps the finished report on
AnalysisCancelledError.partialObservation and the caller's abort reason.
The regression only checked the error tag, so dropping that evidence
would pass. Restore both structured assertions.

* fix(native): bind initializer facts to the selected slice label and range

A universal report could keep an arm64 cpu_type beside an x86_64 slice
label, and entry file offsets only had to fall inside the container.
Require the slice architecture to match the request, and require each
slot and value file offset to lie in that slice.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:19:16 +08:00
morluto e55ce72d9d fix(cli): cancel reference source imports through cleanup (#9954)
* fix(cli): retain cancellation observed during final cleanup

* fix(cli): cancel reference source imports through cleanup

* fix(cli): preserve signal status through command logging
2026-11-11 17:18:05 +08:00
morluto 34d844dcad fix(analysis): preserve batch facts when traversal stops (#9955) 2026-11-11 17:17:58 +08:00
morluto 98bc82f1e1 fix(capabilities): include optional composed source effects (#9956)
* fix(capabilities): include optional composed source effects

* fix(capabilities): declare prior engine retirement effects
2026-11-11 17:17:51 +08:00
morlutoandCursor Agent bb200646e5 fix(views)!: distinguish unavailable artifact collections (#9893)
* fix(views)!: distinguish unavailable artifact collections

Keep missing BEAM tables and unavailable Go and Rust build metadata
separate from decoded empty collections. Retain producer limitations
on model metadata, tensor, and type pages.

BREAKING CHANGE: BEAM, Go, and Rust analysis view pages for unavailable
collections now report coverage.status "unavailable", coverage.total
null, and coverage.exhausted false. Refresh saved result schemas and
handle unknown totals before using coverage to infer absence.

* test(views): expect unavailable Go dependency pages

Missing Go build metadata is unavailable coverage, so the MCP page reports a null total instead of an empty collection.

* test(fixtures): ignore a torn build-computer note line

The cancellation test reads the helper's note file while the append is
still in progress. An empty file or an unfinished last line is not a
record yet. A completed line still has to parse.

* fix(fixtures): reject terminated malformed build-computer notes

Trim removed the final newline, so a completed corrupt record looked like
a torn append and the preceding notes were returned. Keep the terminator
and parse every finished line.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-11 17:17:18 +08:00
morluto ecf6ac9f8d fix(electron): admit provider reports and bind selected inputs (#10041)
* fix(electron): admit runtime observations before publishing evidence

* fix(electron): retain passive observation source JSON
2026-11-11 17:15:54 +08:00
morluto 550b7df262 fix(browser): admit provider reports and preserve source evidence (#10037)
* fix(browser): admit observations before promoting evidence

* fix(browser): retain admitted source JSON in evidence

* test(browser): verify source retention preserves producer redaction
2026-11-11 17:15:47 +08:00
morluto 81d4f6b42a fix(runtime): bind Inspector evidence to the selected request (#10039) 2026-11-11 17:15:08 +08:00