* refactor(analysis): centralize resource budgets and recovery facts * feat(analysis): expose ASAR and Ghidra runtime admission controls * feat(artifacts): expose reader admission and preserve limited recognition * feat(javascript): expose recoverable semantic precision budgets * feat(web): add recoverable source-map budgets and compact retained views * feat(web): make historical capture decoding budgets recoverable * fix(desktop): enforce selected view policies across capture and export * feat(runtime): make Frida and LLDB retention budgets selectable * feat(native): expose diagnostic budgets and preserve exhaustion causes * feat(managed): expose recoverable snapshot and representation budgets * feat(metadata): make Go and Rust inspection budgets recoverable * feat(wasm): expose representation and producer admissions * feat(evm): expose per-call worker resource budgets * feat(android): make resource and string-pool omissions recoverable * feat(producers): expose command and recorded-capture budgets * docs(analysis): record recovery contracts and integrated validation * fix(docs): link calibration oracle from published verification pages * fix(docs): restore desktop task anchors and receipt links * test(analysis): align fixtures with selectable budget contracts * fix(analysis): remove source-location projector dependency cycle * test(analysis): refresh budget recovery and verifier regressions * test(analysis): preserve format and publication recovery expectations * test(windows): align conformance with owned runtime admission * fix(desktop): preserve selected alias kinds in exported state * test(analysis): align provider fixtures with recoverable budgets * test(desktop): validate emitted alias metadata structurally * fix(ghidra): classify bounded Windows endpoint refusals * test(cli): assert selectable artifact admission recovery * fix(cli): preserve capture provenance in environment builds
4.1 KiB
Recoverable analysis budgets
Problem
Several analysis workflows discard selected facts at fixed retention boundaries. Existing runtime settings control only some resources. Increasing a deadline, heap, or header allowance cannot repair an independent count or representation limit. Desktop readers also duplicate policy in generated Python.
Related discussions: #6176, #8434, #5808, and #8978.
Requirements
- Preserve defaults unless representative completed-task measurements justify a calibration; preserve caller selections, Evidence identity, omission, unknown coverage, and cleanup authority. Changes must not grant new target execution, injection, mutation, installation, or network authority.
- Keep source validity independent of retention completeness. In particular, an overlong but terminated kernel modinfo value is not malformed merely because REA omitted its text.
- Preserve exact exhaustion causes and give a next action addressing that resource. GDB byte, record-count, and single-line limits must remain distinct.
- Offer caller selection, continuation, or a bounded policy override for the reviewed desktop projections, Apktool string tables, JavaScript semantic precision, source maps, historical captures, provider capture retention, artifact/managed representations, and producer admission/output limits.
- Interpret each policy at its owner. Parent and child process checks consume the same accepted values; generated Python consumes the desktop policy rather than maintaining independent numeric defaults. Reject invalid values rather than clamping or silently falling back.
- Retain justified format, runtime, protocol, and ownership constraints. Distinguish them from adjustable resource policy and external client budgets. A larger delivery page cannot recover facts already discarded by a producer.
- A runtime default update affects new accepted operations only. Explicit per-call choices win. Report effective value, units, applicable control and retry/restart scope without claiming active-worker telemetry.
- Artifact recognition that cannot examine the selected carrier within its accepted resource policy remains limited/unknown, never examined absence. Preserve the exhausted cause through classification and retained probe facts. Add cohesive per-call Bun, .NET bundle, Node SEA and Godot admission controls at their producing owners, including preallocation and expansion checks.
- Desktop task checks must admit the actual shipped seed representation under the same selected view policy as the generated reader. Acquisition/export budgets remain separate from runtime view admission.
- Local source-location tracing offers opt-in compact retained delivery and bounded access to mapping alternatives and embedded text. Preserve complete Evidence, source identity, selected positions, unknowns and every equal-point mapping; compact output must not repeat the raw map or entire source text.
- Desktop SQLite projections share a configurable per-table encoded-view allowance with generated readers and check it before retaining rows. Keep the independent native SQLite value/record and worker-reply envelopes explicit; a projected-view override does not raise those constraints.
Acceptance
Exercise the exhausted boundary and its advertised repair through the strongest practical public or production workflow. Use small lowered-budget fixtures when they prove the same boundary without large allocations. Preserve independent malformed-input, cancellation, identity, cleanup and fixed-protocol controls. Record real-provider coverage separately from simulated process/protocol tests.
Non-goals
Unbounded analysis, changing all numeric constants, treating format bit widths as preferences, raising another application's client buffer/deadline, recovering lost live observations retroactively, or adding new execution authority.