Skip to content

v0.20.2

Choose a tag to compare

@clouatre clouatre released this 22 Jun 01:22
v0.20.2
f60bdf5

What's Changed

Features

  • analyze_symbol: L2 on-disk cache (#1149, closes #1147, #1148): analyze_symbol was the only analysis tool without a disk cache tier. The CallGraphCache is now wired into DiskCache using an L1-miss -> L2-check -> compute -> write-both pattern. Measured across 84 calls, the tool had a 94% miss rate and 271 ms average latency; the disk tier (already delivering 39-58% hit rates for other tools) eliminates redundant re-parses across sessions. APTU_CODER_DISK_CACHE_DISABLED=1 disables the new tier alongside all others. A test_meta_field_ordering regression guard is included to protect the _meta field ordering invariant.

  • exec_command: optional timeout_secs parameter (#1155, closes #1152): Accepts an integer >= 0; 0 or omitted means no limit. When the child process exceeds the limit it is killed and the response carries timed_out: true with a null exit_code. Type is Option<i64> (not u64) to avoid a non-standard JSON Schema format.

  • exec_command: heredoc pre-spawn validation (#1153, closes #1151): validate_heredocs scans the command string for unclosed heredoc delimiters before any process is spawned, preventing indefinite hangs when JSON escaping corrupts a closing delimiter. The scanner tracks single-quoted and double-quoted regions (avoiding false positives from awk bitshift operators and inline strings), extracts the bare delimiter word, and applies POSIX exact-match semantics for both << and <<- forms. A malformed heredoc now returns an immediate isError: true response instead of timing out after hundreds of seconds.

  • analyze_symbol: call_frequency filtered on field projection (#1156, closes #1142): SemanticAnalysis::project() now strips call_frequency entries for symbols absent from the projected functions/classes set when fields is Some and does not include All. Also applies .with_priority(0.9) to primary Content::text() success blocks in analyze_file, analyze_symbol, and analyze_directory handlers.

  • Metrics: language field in JSONL MetricEvent (#1154, closes #1150): A new language: Option<String> field is populated at all six emit sites for analyze_file and analyze_module, backed by a path_language() helper that reuses language_for_extension(). Schema table in OBSERVABILITY.md updated.

Maintenance

  • Dependency update: actions/checkout v7 (#1158); GitHub Actions updates (#1157); clouatre-labs/aptu action v0.10.1 (#1141).

Full Changelog

v0.20.1...v0.20.2