Skip to content

Conversation

@tzanko-matev
Copy link
Contributor

@tzanko-matev tzanko-matev commented Oct 17, 2025

Configurable Trace Filters

Overview

  • Implements user story US0028 – Configurable Python trace filters (see design-docs/US0028 - Configurable Python trace filters.md).
  • Trace filters let callers decide which modules execute under tracing and which values are redacted before the recorder writes events.
  • Each filter file is TOML. Files can be chained to layer product defaults with per-project overrides. The runtime records the active filter summary in trace_metadata.json.
  • The recorder always prepends a built-in builtin-default filter that (a) skips CPython standard-library frames (including asyncio/concurrency internals) while still allowing third-party packages under site-packages (except helper shims like _virtualenv.py) and (b) redacts common sensitive identifiers (passwords, tokens, API keys, etc.) across locals/globals/args/returns/attributes. Project filters and explicit overrides append after this baseline and can relax rules where needed.

Filter Files

  • Filters live alongside the project (default: .codetracer/trace-filter.toml). Any other file can be supplied via CLI, environment variable, or Python API.
  • Required sections:
    • [meta]name, version (integer), optional description.
    • [scope]default_exec ("trace"/"skip"), default_value_action ("allow"/"redact"/"drop").
  • Rules appear under [[scope.rules]] in declaration order. Each rule has:
    • selector – matches a package, file, or object (see selector syntax).
    • Optional exec override ("trace"/"skip").
    • Optional value_default override ("allow"/"redact"/"drop").
    • Optional reason string stored in telemetry.
    • [[scope.rules.value_patterns]] entries that refine value capture by selector.
  • Example:
    [meta]
    name = "example-filter"
    version = 1
    description = "Protect secrets while allowing metrics."
    
    [scope]
    default_exec = "trace"
    default_value_action = "allow"
    
    [[scope.rules]]
    selector = "pkg:my_app.services.*"
    value_default = "redact"
    [[scope.rules.value_patterns]]
    selector = "local:glob:public_*"
    action = "allow"
    [[scope.rules.value_patterns]]
    selector = 'local:regex:^(metric|masked)_\w+$'
    action = "allow"
    [[scope.rules.value_patterns]]
    selector = "local:glob:secret_*"
    action = "redact"
    [[scope.rules.value_patterns]]
    selector = "arg:literal:debug_payload"
    action = "drop"

Selector Syntax

  • Domains (selector prefix before the first colon):
    • pkg – fully-qualified module name (package.module).
    • file – source path relative to the project root (POSIX separators).
    • obj – module-qualified object (package.module.func).
    • local, global, arg, ret, attr – value-level selectors.
  • Match types (second segment in kind:match:pattern):
    • glob (default) – wildcard matching with / treated as a separator.
    • regex – Rust/RE2-style regular expressions; invalid patterns log a single warning and fall back to configuration errors.
    • literal – exact string match.
  • Value selectors inherit the match type when omitted (e.g., local:token_* uses glob). Declare the match type explicitly when combining separators or anchors.

Loading and Chaining Filters

  • Default discovery: RuntimeTracer searches for .codetracer/trace-filter.toml near the target script.
  • CLI: --trace-filter path/to/filter.toml. Provide multiple times or use :: within one argument to append more files.
  • Environment: CODETRACER_TRACE_FILTER=filters/prod.toml::filters/hotfix.toml. Respected by the auto-start hook and the CLI.
  • Python API: trace(..., trace_filter=[path1, path2]) or pass a ::-delimited string. Paths are expanded to absolute locations and must exist.
  • The recorder loads filters in the order discovered: the built-in builtin-default filter first, then project defaults, CLI/env entries, and explicit Python API arguments. Later rules override earlier ones when selectors overlap.

Runtime Metadata

  • trace_metadata.json now exposes a trace_filter object containing:
    • filters – ordered list of filter summaries (name, version, SHA-256 digest, absolute path).
    • stats.scopes_skipped – total number of code objects blocked by exec = "skip".
    • stats.value_redactions – per-kind counts for redacted values (argument, local, global, return, attribute).
    • stats.value_drops – per-kind counts for values removed entirely from the trace.
  • These counters help CI/quality tooling detect unexpectedly aggressive filters.

Benchmarks and Guard Rails

  • Rust microbench: cargo bench --bench trace_filter --no-default-features exercises baseline vs glob/regex-heavy rule sets.
  • Python smoke benchmark: pytest codetracer-python-recorder/tests/python/perf/test_trace_filter_perf.py runs end-to-end tracing with synthetic workloads when CODETRACER_TRACE_FILTER_PERF=1.
  • just bench orchestrates both:
    1. Ensures the development virtualenv exists (just venv).
    2. Runs the Criterion bench with PYO3_PYTHON pinned to the virtualenv interpreter.
  1. Executes the Python smoke benchmark, writing codetracer-python-recorder/target/perf/trace_filter_py.json (durations plus redaction/drop stats per scenario).
  • Use the JSON artefact to feed dashboards or simple regression checks while longer-term gating thresholds are defined.

configurable-trace-filters-implementation-plan.md: Initial design

Signed-off-by: Tzanko Matev <[email protected]>
design-docs/configurable-trace-filters-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/Cargo.lock: 
codetracer-python-recorder/Cargo.toml: 
codetracer-python-recorder/src/trace_filter/config.rs: 
codetracer-python-recorder/src/trace_filter/mod.rs: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/codetracer_python_recorder/auto_start.py: 
codetracer-python-recorder/codetracer_python_recorder/cli.py: 
codetracer-python-recorder/codetracer_python_recorder/session.py: 
codetracer-python-recorder/src/session/bootstrap.rs: 
codetracer-python-recorder/src/session.rs: 
codetracer-python-recorder/tests/python/test_cli_integration.py: 
codetracer-python-recorder/tests/python/unit/test_backend_exceptions.py: 
codetracer-python-recorder/tests/python/unit/test_cli.py: 
codetracer-python-recorder/tests/python/unit/test_session_helpers.py: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/README.md: 
codetracer-python-recorder/codetracer_python_recorder/cli.py: 
codetracer-python-recorder/tests/python/unit/test_auto_start.py: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 
design-docs/py-api-001.md: 

Signed-off-by: Tzanko Matev <[email protected]>
Justfile: 
codetracer-python-recorder/Cargo.lock: 
codetracer-python-recorder/Cargo.toml: 
codetracer-python-recorder/benches/trace_filter.rs: 
codetracer-python-recorder/src/lib.rs: 
codetracer-python-recorder/src/runtime/mod.rs: 
codetracer-python-recorder/src/runtime/value_capture.rs: 
codetracer-python-recorder/src/trace_filter/config.rs: 
codetracer-python-recorder/src/trace_filter/engine.rs: 
codetracer-python-recorder/src/trace_filter/mod.rs: 
codetracer-python-recorder/src/trace_filter/selector.rs: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 

Signed-off-by: Tzanko Matev <[email protected]>
@github-actions
Copy link

Coverage Summary

Rust (lines)
81.2% covered (7,039 / 8,668 | 1,629 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,192 277 87.4%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 207 102 50.7%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 415 45 89.2%
codetracer-python-recorder/src/trace_filter/config.rs 671 149 77.8%
codetracer-python-recorder/src/trace_filter/engine.rs 521 68 86.9%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.9% covered (230 / 299 | 69 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 137 59 56.9%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

Justfile: 
README.md: 
codetracer-python-recorder/README.md: 
codetracer-python-recorder/tests/python/perf/__init__.py: 
codetracer-python-recorder/tests/python/perf/test_trace_filter_perf.py: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 
docs/onboarding/trace-filters.md: 

Signed-off-by: Tzanko Matev <[email protected]>
codetracer-python-recorder/README.md: 
codetracer-python-recorder/codetracer_python_recorder/cli.py: 
codetracer-python-recorder/codetracer_python_recorder/session.py: 
codetracer-python-recorder/tests/python/unit/test_auto_start.py: 
codetracer-python-recorder/tests/python/unit/test_cli.py: 
codetracer-python-recorder/tests/python/unit/test_session_helpers.py: 
design-docs/US0028 - Configurable Python trace filters.md: 
design-docs/adr/0009-configurable-trace-filters.md: 
design-docs/adr/0010-codetracer-python-recorder-benchmarking.md: 
design-docs/codetracer-python-benchmarking-implementation-plan.md: 
design-docs/configurable-trace-filters-implementation-plan.md: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 
design-docs/py-api-001.md: 
docs/onboarding/trace-filters.md: 
nix/flake.nix: 

Signed-off-by: Tzanko Matev <[email protected]>
@tzanko-matev tzanko-matev marked this pull request as ready for review October 17, 2025 13:00
@github-actions
Copy link

Coverage Summary

Rust (lines)
81.4% covered (7,168 / 8,806 | 1,638 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 80 78.7%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,238 278 87.6%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@github-actions
Copy link

Coverage Summary

Rust (lines)
81.4% covered (7,169 / 8,806 | 1,637 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,238 278 87.6%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

1 similar comment
@github-actions
Copy link

Coverage Summary

Rust (lines)
81.4% covered (7,169 / 8,806 | 1,637 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,238 278 87.6%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@tzanko-matev
Copy link
Contributor Author

@codex review this

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting

@github-actions
Copy link

Coverage Summary

Rust (lines)
81.4% covered (7,168 / 8,806 | 1,638 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 80 78.7%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,238 278 87.6%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@github-actions
Copy link

Coverage Summary

Rust (lines)
81.6% covered (7,254 / 8,895 | 1,641 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,327 282 87.9%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@tzanko-matev
Copy link
Contributor Author

@codex review this. Did we fix your last comment?

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@tzanko-matev
Copy link
Contributor Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 40 to +68
enverr!(ErrorCode::Io, "failed to collect program metadata")
.with_context("details", err.to_string())
})?;
let trace_filter = load_trace_filter(explicit_trace_filters, &metadata.program)?;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Default filter discovery ignores API target script

TraceSessionBootstrap::prepare determines the default .codetracer/trace-filter.toml by calling collect_program_metadata(py) and passing metadata.program into load_trace_filter. Because collect_program_metadata reads sys.argv[0], the lookup walks the host process’s path, not the script supplied by session.start()/trace(). When the API is used from a wrapper process to trace a different script, the project filter sitting next to the traced script is never discovered, contradicting the docs that say discovery happens near the target script. The search should fall back to the provided activation_path or the user‑supplied script path when present rather than sys.argv.

Useful? React with 👍 / 👎.

@github-actions
Copy link

Coverage Summary

Rust (lines)
81.8% covered (7,395 / 9,036 | 1,641 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,327 282 87.9%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 670 68 89.9%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@tzanko-matev
Copy link
Contributor Author

@codex review

@chatgpt-codex-connector
Copy link

Codex Review: Didn't find any major issues. 👍

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions
Copy link

Coverage Summary

Rust (lines)
82.0% covered (7,492 / 9,132 | 1,640 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,327 280 88.0%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 525 46 91.2%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 670 68 89.9%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

@tzanko-matev
Copy link
Contributor Author

@codex review

@chatgpt-codex-connector
Copy link

Codex Review: Didn't find any major issues. You're on a roll.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions
Copy link

Coverage Summary

Rust (lines)
82.3% covered (7,594 / 9,231 | 1,637 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,327 282 87.9%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 525 46 91.2%
codetracer-python-recorder/src/trace_filter/config.rs 713 146 79.5%
codetracer-python-recorder/src/trace_filter/engine.rs 764 63 91.8%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

codetracer-python-recorder/README.md: 
codetracer-python-recorder/codetracer_python_recorder/cli.py: 
codetracer-python-recorder/resources/trace_filters/builtin_default.toml: 
codetracer-python-recorder/src/session/bootstrap.rs: 
codetracer-python-recorder/src/trace_filter/config.rs: 
codetracer-python-recorder/tests/python/test_cli_integration.py: 
design-docs/US0028 - Configurable Python trace filters.md: 
design-docs/adr/0009-configurable-trace-filters.md: 
design-docs/configurable-trace-filters-implementation-plan.md: 
design-docs/configurable-trace-filters-implementation-plan.status.md: 
design-docs/py-api-001.md: 
docs/onboarding/trace-filters.md: 
tf.toml: 
trace-out/trace_metadata.json: 
trace-out/trace_paths.json: 

Signed-off-by: Tzanko Matev <[email protected]>
@tzanko-matev
Copy link
Contributor Author

I found several issues, but I'll merge the fixes later. First I want to merge a big refactor and then I'll add the trace-filter issues on top of them

@tzanko-matev tzanko-matev merged commit 00f83f9 into main Oct 24, 2025
2 checks passed
@tzanko-matev tzanko-matev deleted the trace-filters branch October 24, 2025 13:30
@github-actions
Copy link

Coverage Summary

Rust (lines)
81.4% covered (7,167 / 8,806 | 1,639 missed)

File Lines Miss Cover
codetracer-python-recorder/src/code_object.rs 117 16 86.3%
codetracer-python-recorder/src/ffi.rs 191 19 90.1%
codetracer-python-recorder/src/logging.rs 478 80 83.3%
codetracer-python-recorder/src/monitoring/tracer.rs 794 221 72.2%
codetracer-python-recorder/src/policy.rs 350 59 83.1%
codetracer-python-recorder/src/runtime/frame_inspector.rs 148 63 57.4%
codetracer-python-recorder/src/runtime/io_capture/fd_mirror/unix.rs 376 79 79.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/common.rs 159 62 61.0%
codetracer-python-recorder/src/runtime/io_capture/proxies/input.rs 128 91 28.9%
codetracer-python-recorder/src/runtime/io_capture/proxies/output.rs 41 27 34.1%
codetracer-python-recorder/src/runtime/io_capture/sink/batcher.rs 238 21 91.2%
codetracer-python-recorder/src/runtime/io_capture/sink/enricher.rs 73 17 76.7%
codetracer-python-recorder/src/runtime/mod.rs 2,238 280 87.5%
codetracer-python-recorder/src/runtime/output_paths.rs 98 16 83.7%
codetracer-python-recorder/src/runtime/value_capture.rs 240 112 53.3%
codetracer-python-recorder/src/session.rs 84 84 0.0%
codetracer-python-recorder/src/session/bootstrap.rs 429 45 89.5%
codetracer-python-recorder/src/trace_filter/config.rs 708 146 79.4%
codetracer-python-recorder/src/trace_filter/engine.rs 529 68 87.1%
codetracer-python-recorder/src/trace_filter/selector.rs 258 64 75.2%
Showing top 20 entries by missed lines (of 34 total).

Python (statements)
76.3% covered (232 / 304 | 72 missed)

File Stmts Miss Cover
codetracer-python-recorder/codetracer_python_recorder/__init__.py 7 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/__main__.py 2 2 0.0%
codetracer-python-recorder/codetracer_python_recorder/api.py 5 0 100.0%
codetracer-python-recorder/codetracer_python_recorder/auto_start.py 24 2 91.7%
codetracer-python-recorder/codetracer_python_recorder/cli.py 142 62 56.3%
codetracer-python-recorder/codetracer_python_recorder/formats.py 13 1 92.3%
codetracer-python-recorder/codetracer_python_recorder/session.py 111 5 95.5%

Generated automatically via generate_coverage_comment.py.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants