Files
reverse-engineering-anything/docs/specs/native/call-source-locations/plan.md
T
3e8a5f76d0 feat(native): retain LLDB source coordinates and verify Pascal calls (#2800)
* feat(native): retain LLDB source coordinates and verify Pascal call entries

Preserve partial line-table attribution for native locations and historical
evidence compatibility. Verify owned Free Pascal call entries through CLI/MCP.

Refs #2382, #2372, #2397

Co-Authored-By: Codex <noreply@openai.com>

* docs: namespace native specifications by domain and feature

Use stable descriptive paths instead of numeric prefixes to avoid parallel contribution collisions.

Co-Authored-By: Codex <noreply@openai.com>

* fix(native): bound Pascal verification and compare caller coordinates

Address review findings at their producing boundaries and preserve directly affected consumers. Source inspection and git diff --check completed. Tests and automated checks were not run at the user’s explicit request.

* fix(native): bound compiler shutdown and source-coordinate fixtures

* docs: clarify historical native source verification

* fix(native): preserve source attribution and compiler ownership

* docs(native): qualify retained source attribution

* fix(ci): clean up native Pascal verifier processes

* test(native): type the Pascal verifier helper import after merging main

Main now typechecks this boundary test, which imports the untyped
canonical-temporary-directory helper and reads an unknown catch value.
Add the helper's declaration file and narrow the caught error.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(native): verify partial source attribution caveat

* fix(native): retain verifier compiler cleanup ownership

* fix(native): forward verifier cancellation and measure path bytes

CLI and MCP artifact runs observe the verifier abort signal, and a
failed Pascal verifier test stops the compiler group before deleting
its directory. Repeated source locations grow by measured UTF-8 JSON
bytes; workflow tokens, CPU and peak memory stay unmeasured.

---------

Co-authored-by: Matheus Breguêz <matbrgz@gmail.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-11-07 23:25:20 +08:00

2.0 KiB

Implementation plan

Boundary and contract

Extend nativeCodeLocationSchema in src/domain/native/nativeCallObservation.ts. Reuse that shape for events, breakpoint locations, backtraces and retained journal events. Keep the field optional for older evidence and nullable for current LLDB observations with unavailable metadata. Each inner facet can be independently unavailable; avoid dropping a valid line number because a file path is absent.

Read SBAddress.GetLineEntry once in the existing Python _location producer. A valid SBFileSpec supplies its displayed path without filesystem access. Convert zero line/column to null. An invalid entry returns null. Existing estimation and serialization budget checks already traverse the location object recursively.

Incremental work and validation

  1. Define contracts and criteria before code; add failing producer tests.
  2. Extend the canonical schema and _location producer. Update existing fake address objects to implement the actual LLDB line-entry interface.
  3. Extend provider/MCP boundary coverage and retained-journal coverage for the additive field; preserve omission compatibility.
  4. Extend the existing real macOS verifier with source-coordinate assertions against its own Objective-C/C fixture built with debug information.
  5. Update the native investigation guide; run Python tests, focused TypeScript tests, repository checks and the real verifier if host authority permits.

Effects and compatibility

The existing LLDB operation already owns its breakpoint callbacks and process lifecycle. This adds a metadata read within that observation. It does not introduce target execution or a new provider beyond existing behavior. No source file is acquired from a path in debug information. Consumers of historical evidence retain omission; consumers of new captures see either a partial/full object or null.

References