Skip to content

feat: harmonize out-dir flags, add blockchain language support and E2E tests#545

Open
zah wants to merge 39 commits intomainfrom
fix/harmonize-out-dir-flags
Open

feat: harmonize out-dir flags, add blockchain language support and E2E tests#545
zah wants to merge 39 commits intomainfrom
fix/harmonize-out-dir-flags

Conversation

@zah
Copy link
Copy Markdown
Member

@zah zah commented Apr 1, 2026

Summary

  • Harmonize recorder CLI flags to use --out-dir everywhere, replacing inconsistent --trace-dir variants
  • Add language support for 7 new blockchain platforms (Aiken, Cadence, Cairo, Circom, Leo, PolkaVM, Tolk) in the db-backend
  • Add Playwright UI tests and flow integration test targets for blockchain languages
  • Resolve test programs from sibling recorder repos instead of duplicating them
  • Add native libbpf backend for process monitoring with auto-fallback
  • Add ct ci CLI subcommand group with 8 CI commands
  • Add getting-started guides and CLI reference documentation for all supported languages
  • Simplify install scripts for unified ct install experience with Agent Harbor and GUI updates
  • Handle event-only traces (Stylus) in DAP server
  • Fix Nim 2 'result' capture in closure errors in frontend
  • Add comprehensive DAP tests for Noir (multi-breakpoint, stepping, call stack)

Test plan

  • Run just test-e2e to verify Playwright UI tests pass for all blockchain languages
  • Run cargo test in src/db-backend to verify language support and DAP tests
  • Run just flow-test-* targets for each new blockchain language
  • Verify ct install works with the simplified scripts
  • Verify BPF backend installs and falls back correctly when unavailable

🤖 Generated with Claude Code

zah and others added 30 commits April 1, 2026 18:04
Replace the external ct-remote C# binary with native Nim implementations
built directly into the ct executable. This eliminates the packaging
complexity of bundling a separate AOT-compiled .NET binary.

New modules in src/ct/online_sharing/:
- remote_config.nim: key=value config file (~/.config/codetracer/remote.config)
- api_client.nim: REST client for /api/v1/ endpoints (tenants, traces, license)
- file_transfer.nim: presigned S3 URL upload/download
- tenant_resolver.nim: org slug → tenant GUID resolution
- authenticate.nim: OAuth browser callback via TCP listener
- activate_command.nim: download and save CTL license blob
- check_license_command.nim: query license tier info

New CLI commands added via confutils:
- ct activate [--token TOKEN] [--base-url URL]
- ct check-license [--token TOKEN] [--base-url URL]
- ct get-default-org

Modified commands now use native HTTP instead of shelling out:
- ct upload (with new --token, --base-url flags)
- ct download (with new --token, --base-url flags)
- ct login (with new --base-url flag)
- ct set-default-org (native config write)

The ct remote <args> passthrough is kept but deprecated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow overriding the config directory via environment variable,
enabling isolated testing of ct-remote commands without touching
the user's real config at ~/.config/codetracer/remote.config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both commands now catch CatchableError and exit with code 1 on failure
instead of letting unhandled exceptions propagate with exit code 0.
This is needed for the subprocess-based integration tests to detect
missing tokens and other errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ing (M4)

Add Lang::Solidity variant, tree-sitter-solidity grammar integration in
ExprLoader, find_evm_recorder() in test harness, and Solidity flow test
program. DAP flow test and integration test are scaffolded but #[ignore]d
pending EVM recorder CLI implementation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add SolidityExample.sol (ERC20-like contract with storage, events, internal
calls) for visual testing. Add Playwright test spec with guards for EVM
pipeline availability, testing editor display, event log, state panel, and
call trace visualization. Register .sol in DB_BASED_EXTENSIONS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nt test bodies

- Add record_solidity_trace() to test harness, invoking `codetracer-evm-recorder record`
- Implement solidity_flow_dap_variables test body with full DAP flow verification
- Implement test_solidity_flow_integration test body with run_db_flow_test
- Update justfile test-solidity-flow target to build evm-recorder and use its dev shell
- Replace soft skips (eprintln + return) with hard asserts for prerequisite checks
- Add Language::Solidity to create_db_trace() and breakpoint path resolution

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Fuel, Solana, and Move

Add blockchain language support for four new platforms:

- Miden/MASM: Lang::Masm variant, masm_flow_test.masm test program,
  find_miden_recorder() + record_masm_trace() in test harness,
  masm_flow_dap_test.rs DAP integration test

- Sway/FuelVM: Lang::Sway variant, flow_test Sway project (Forc.toml +
  src/main.sw), find_fuel_recorder() + record_fuel_trace(),
  sway_flow_dap_test.rs DAP integration test

- Move/Sui: Lang::Move variant, flow_test Move project (Move.toml +
  sources/flow_test.move), find_move_recorder() + record_move_trace(),
  move_flow_dap_test.rs DAP integration test

- Solana/SBF: Language::Solana variant, solana_flow_test.rs test program,
  find_solana_recorder() + record_solana_trace(),
  solana_flow_dap_test.rs DAP integration test

All tests use #[ignore] since they require external recorder binaries.
Justfile targets: test-masm-flow, test-sway-flow, test-move-flow,
test-solana-flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…en, and Move (M7)

Add four new blockchain language test suites following the Solidity template:
- solana_example: Rust-based Solana/SBF trace tests with codetracer-solana-recorder guard;
  structural test correctly verifies .rs is NOT DB-based (pipeline detection)
- sway_example: Sway/Fuel trace tests with codetracer-fuel-recorder guard and Forc.toml
  project marker; .sw extension classified as DB-based
- masm_example: Miden/MASM trace tests with codetracer-miden-recorder guard; .masm
  extension classified as DB-based
- move_example: Move trace tests with codetracer-move-recorder guard and Move.toml
  project marker; .move extension classified as DB-based

Each test program implements the canonical computation (a=10, b=32, sum=42,
doubled=84, final_result=94) in its respective language. All UI interaction
tests are gated with test.skip() on recorder availability, and unimplemented
features (variable decoding, calltrace, stepping) use test.fixme().

lang-support.ts updated with masm, sw, move extensions and Forc.toml, Move.toml
folder markers in the DB-based sets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace trivial 5-variable test programs with comprehensive programs
that exercise all language constructs for each smart contract language:

MASM (193 lines): 9 procedures covering arithmetic, bitwise ops,
fibonacci loops, conditionals, memory operations, nested calls,
stack manipulation, and comparisons.

Sway (298 lines): 13 functions with structs, enums, pattern matching,
while loops, conditionals, arrays, tuples, bitwise ops, and nested
function calls.

Move (407 lines): 10 functions + 9 test functions with structs
(abilities), generics, vectors, loops, references, tuple returns,
constants, and abort handling.

Solana/Rust (599 lines): structs, enums, pattern matching, for/while/
loop, arrays/slices/tuples, multi-width arithmetic, bitwise ops,
Option/Result patterns, iterators, references, byte manipulation,
and recursive fibonacci.

Expand each DAP test file from 1 to 7 tests with breakpoints at
different program locations verifying distinct language features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Per Test-Program-Layout.md, test programs belong in their recorder
repos and are discovered via sibling detection. This commit:

- Removes local test-programs/{masm,sway,move,solana}/ directories
- Adds 6 discovery functions to test_harness (find_masm_flow_test,
  find_sway_flow_test, find_sway_flow_source, find_move_flow_test,
  find_move_flow_source, find_solana_flow_test) with 2-tier fallback
  (sibling repo canonical, local deprecated)
- Updates all 4 DAP test files to use the new discovery functions

The canonical test programs now live in:
  codetracer-miden-recorder/test-programs/masm/masm_flow_test.masm
  codetracer-fuel-recorder/test-programs/flow_test/
  codetracer-move-recorder/test-programs/move/flow_test/
  codetracer-solana-recorder/test-programs/solana/solana_flow_test.rs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Per Test-Program-Layout.md, test programs live exclusively in their
canonical recorder repos. Remove the deprecated local fallback paths
— discovery now returns None if the sibling recorder repo is not
checked out.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the core CI command infrastructure for the ct CLI:

- New CICommand enum with 8 subcommands: start, attach, exec, finish,
  run (all-in-one), log, status, and cancel
- ci_state.nim: State file management for active CI run context
  (runId, tenantId, baseUrl, token, sequenceCounter) persisted to
  $CODETRACER_STATE_DIR or ~/.codetracer-ci/ci-run.json
- ci_api_client.nim: CI-specific API client wrapping ApiClient with
  methods for all CI endpoints (create, start, complete, cancel,
  logs, status, traces) and exponential backoff retry on network errors
- ci_commands.nim: Command implementations with auto-detection of git
  info, child process spawning with log streaming (500ms/100-line
  flush), cancellation polling every 10s with SIGTERM/SIGKILL, and
  token resolution (--token flag > CODETRACER_TOKEN env > stored token)
- Config fields added to codetracerconf.nim for all subcommands
- CI dispatch added to launch.nim
- Exported baseApiUrl and httpClient fields on ApiClient

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add bpf_monitor.nim which spawns bpftrace via sudo to capture process
lifecycle events (EXEC, EXIT, INTV) for the child process tree during
`ct ci exec` and `ct ci run`. Events are parsed from bpftrace's JSON
output, batched, and POSTed to the Monolith backend's
POST /api/v1/ci/runs/{runId}/processes endpoint.

Key design decisions:
- Non-blocking pipe I/O via O_NONBLOCK + posix.read to avoid blocking
  the main stdout-reading loop when bpftrace has no output ready
- Graceful fallback: if bpftrace is unavailable or passwordless sudo
  fails, a warning is printed and execution continues unmonitored
- Environment deduplication via SHA-256 content-addressing to avoid
  re-sending identical env snapshots across processes
- bpftrace subprocess cleanup uses SIGTERM with grace period, then
  SIGKILL, followed by a blocking drain of remaining output
- Process event types (ProcessStartEvent, ProcessExitEvent,
  ProcessMetricsEvent, ProcessEnvironment) are defined in
  ci_api_client.nim to avoid circular imports
- New --monitor-processes flag on both exec and run subcommands

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previously verify_flow_results had 4 ways to silently pass despite
missing or incorrect data:
- Missing expected variables: silently skipped (no else clause)
- Unloaded values: printed warning but continued
- Non-numeric values: silently skipped extraction
- Partial verification: only required >=1 match, not all

Now all 4 paths return Err with descriptive messages. A verified_count
ensures every expected value is explicitly checked.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Test program discovery functions now check environment variables before
falling back to sibling repo paths, matching the pattern used by
recorder binary discovery functions:

- find_masm_flow_test()    → CODETRACER_MASM_FLOW_TEST
- find_sway_flow_test()    → CODETRACER_SWAY_FLOW_TEST
- find_sway_flow_source()  → CODETRACER_SWAY_FLOW_SOURCE
- find_move_flow_test()    → CODETRACER_MOVE_FLOW_TEST
- find_move_flow_source()  → CODETRACER_MOVE_FLOW_SOURCE
- find_solana_flow_test()  → CODETRACER_SOLANA_FLOW_TEST

This enables CI and custom setups to specify test program locations
without requiring sibling repo checkout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extracted verify_flow_results into a free function (method delegates
to it) to enable lightweight unit testing without spawning a DAP
subprocess.

Added 3 meta-tests that verify the function's error handling:
- test_verify_rejects_missing_variable: Err when expected var absent
- test_verify_rejects_wrong_value: Err when value doesn't match
- test_verify_accepts_correct_values: Ok when values match

These guard against regressions that might re-introduce silent-pass
behavior in the flow test infrastructure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strengthen the verify_flow_results test suite with additional edge cases:
- test_verify_rejects_excluded_identifier: ensures function names in
  excluded_identifiers cause rejection when present in flow data
- test_verify_rejects_unloaded_value: ensures <NONE> values are rejected
- test_verify_rejects_non_integer_value: ensures non-parseable values
  are rejected when integer comparison is expected
- test_verify_accepts_multiple_variables: ensures multi-variable configs
  with all correct values pass
- test_verify_rejects_when_no_values_loaded: ensures zero loaded values
  cause rejection even without explicit expected_values

Total meta-tests: 8 (3 existing + 5 new), all passing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add capabilities-based bpftrace setup so BPF process monitoring can run
without sudo at runtime. The new `src/common/bpf_install.nim` module
handles kernel version verification (>=5.8 for CAP_BPF), locating the
system bpftrace, copying it to /usr/local/lib/codetracer/ with
cap_bpf,cap_perfmon,cap_dac_read_search capabilities, and creating the
codetracer-bpf group -- all in a single sudo invocation with input
validation to prevent shell injection.

Key changes:
- `ct install --bpf` (default true, `--no-bpf` to skip) triggers setup
- GUI install dialog adds BPF checkbox; privileged step uses pkexec
- bpf_monitor.nim now uses priority: nix wrapper > local caps > sudo
- install-on-distributions.sh splits BPF into a non-fatal second step
- NixOS module uses security.wrappers for declarative capabilities
- Nix package (codetracer-appimage) bundles bpftrace in libexec

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ctations

Two fixes to make the Noir flow DAP test pass:

1. Change --out-dir to --trace-dir in record_noir_trace() to match the
   current nargo trace CLI interface.

2. Update noir_flow_dap_variables_and_values to expect only the variables
   that the Noir trace actually exposes (sum_val, doubled, final_result).
   Function parameters (a, b) are inlined by the Noir compiler and don't
   appear in the trace output.

Test now passes with all 3 values verified: sum_val=42, doubled=84,
final_result=94.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nargo CLI renamed --out-dir to --trace-dir in a recent version.
This fixes the same issue in tracepoint_interpreter/tests.rs that was
already fixed in test_harness/mod.rs (commit 4a0d44d).

Fixes the pre-existing array_indexing test failure. Full test suite
now passes: 124/124 tests pass, 0 failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lake

Add a `just user-setup` target for one-time developer machine setup that:
- Runs ct install for PATH and desktop file (non-privileged)
- Sets up BPF process monitoring with capabilities (requires sudo)
- Detects NixOS security.wrappers and skips manual setup
- Supports --without-bpf flag to skip BPF setup

Wire the codetracer-appimage package into the flake outputs so it's
buildable via `nix build .#codetracer-appimage`. Expose the NixOS
module at `nixosModules.default` for declarative BPF setup via
`programs.codetracer.enable = true`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename to better reflect its purpose: setting up a development machine
for iterative BPF script development without requiring sudo at runtime.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…or Noir

Implement the three remaining M5 deliverables:
- Multi-breakpoint test: sets breakpoints at lines 25 and 26, verifies
  sum_val=42 and doubled=84 at each stop
- Stepping test: breaks at line 24, steps next through lines 25 and 26
- Call stack test: breaks inside add_offset, verifies stack frames
  [add_offset, calculate_sum, main]

Also adds stack_trace() and dap_step() to ct-dap-client, and fixes
dap_continue() to consume trailing response from the step handler.
Updates noir_flow_integration test for restructured main.nr.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Convert test.fixme() to real tests for MASM, Sway, Move, and Solana:
- State panel variable assertions (decoded values)
- Call trace pane entry verification
- Continue and next stepping operations

Tests remain behind pipeline availability skip guards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…esting

Add helper functions, conditional branches, and function calls to all
4 blockchain test programs while preserving the original arithmetic
(a=10, b=32, sum=42, doubled=84, final_result=94) for backward
compatibility with existing Playwright assertions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace bpftrace dependency with C BPF programs loaded via libbpf from
Nim. bpftrace 0.24.x has a hardcoded geteuid()==0 check that prevents
non-root execution even with Linux capabilities (CAP_BPF + CAP_PERFMON +
CAP_DAC_READ_SEARCH). The native backend compiles BPF programs with
clang, loads them via libbpf's C API, and sets capabilities directly on
the ct binary.

New files (Stage 1 — additive, no existing code modified):
- src/bpf-monitor/monitor.bpf.c: kernel-side BPF programs (execve + exit)
- src/bpf-monitor/events.h: shared event struct definitions (C + Nim)
- src/bpf-monitor/vmlinux_minimal.h: minimal kernel type definitions
- src/ct/ci/libbpf_wrapper.nim: Nim FFI bindings for libbpf C API
- src/ct/ci/bpf_monitor_native.nim: native libbpf-based backend
- src/ct/ci/bpf_monitor_native_test.nim: 16 unit tests
- nix/modules/developer-bpf.nix: NixOS module for passwordless setcap

Build integration:
- Tuprules.tup: split !codetracer into !codetracer (plain) and
  !codetracer_bpf (with automatic setcap after compilation)
- justfile: build-bpf-programs, test-bpf-native, setcap-bpf targets
- nix/shells/main.nix: add libbpf and bpftools packages
- developer-setup.sh: NixOS module instructions + sudoers drop-in for
  non-NixOS systems

The existing bpftrace backend (bpf_monitor.nim) is unchanged and
continues to work. Both backends coexist during the transition.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sudoers validates that command arguments are fully-qualified paths,
which rejects bare capability strings like 'cap_bpf,...=eip'. Fix by
wrapping setcap in a single-purpose `codetracer-setcap` script that
the NixOS module installs on PATH and allows via sudoers.

The tup rule now calls `sudo -n codetracer-setcap` instead of
`sudo -n setcap <caps> <path>`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sudo matches commands against the real path in the sudoers rule, not
the /run/current-system/sw/bin symlink. Use readlink -f to resolve
codetracer-setcap to its Nix store path before passing to sudo -n.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add bpf_native_integration_test.nim with 9 tests covering:
- Capability detection (available + missing file)
- Live EXEC event capture (basic, binary path, command line args)
- Live EXIT event capture (PID matching, root PID detection)
- Environment variable capture
- Process tree tracking (child processes, exit codes)

Extend codetracer-setcap to accept an optional path argument (restricted
to files under the repo root) so test binaries can also receive BPF
capabilities.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete Stage 3 of the native BPF migration: ci_commands.nim now
auto-selects the native libbpf backend when available (CAP_BPF +
monitor.bpf.o present) and falls back to bpftrace otherwise.

Key changes:

- ci_commands.nim: runtime backend selection — try native first, fall
  back to bpftrace. Both backends use the same polling/flush loop.

- monitor.bpf.c: fix BPF verifier "8193 jumps too complex" error by
  reducing MAX_ARGV/ENVP_COUNT to 32 and moving envp KEY=VALUE
  splitting to userspace. The BPF program now emits raw "KEY=VALUE"
  strings via a single bpf_probe_read_user_str() call, eliminating
  the nested byte-by-byte loops that exceeded the verifier's jump
  complexity limit.

- events.h + bpf_monitor_native.nim: envp event struct uses a single
  `raw` field instead of separate key/value; Nim splits on '='.

- Tuprules.tup: simplified !codetracer_bpf rule — removed inline
  setcap attempt since tup's FUSE sandbox prevents sudo. Setcap is
  now a post-build step in build-once.sh.

- build-once.sh + post-build-setcap.sh: re-apply BPF capabilities
  after each tup build via the codetracer-setcap helper.

- nix/shells/main.nix: export LIBRARY_PATH (elfutils, zlib) and
  C_INCLUDE_PATH (libbpf) so Nim's gcc invocation finds libbpf
  headers and link libraries inside tup's sanitized environment.

- bpf_native_integration_test.nim: complete rewrite as an E2E test
  that drives the ct binary (not the BPF programs directly). Uses a
  non-blocking polling loop for both ct's stdout pipe and a mock HTTP
  server to avoid deadlocks. All 4 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
zah and others added 7 commits April 1, 2026 18:04
Add PolkaVM, Cairo, Circom, Leo, Tolk, Aiken, and Cadence to the
language enum, test harness, and UI test infrastructure.

For each language: Lang variant + extension mapping, recorder binary
discovery (env var override + sibling repo fallback), flow test source
file discovery, trace recording function, DAP flow test, Playwright
UI test, and stub test program.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…orted languages

Add comprehensive user-facing documentation to the CodeTracer book:

- 13 getting-started guides covering all supported languages (Solidity,
  Circom, Cairo, Aiken, Cadence, Solana, Move, Sway, Miden, PolkaVM,
  Leo, Tolk, JavaScript/TypeScript)
- ct CLI reference page with all commands, flags, and env variables
- Recorder CLI reference covering all 14 recorder binaries
- Reorganized SUMMARY.md and overview with categorized language sections
- Added [*.md] exception to .editorconfig for indent_size and
  max_line_length since markdown code blocks use language-native
  indentation and tables/URLs inherently exceed 80 characters

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update BPF installation to set capabilities on the ct binary itself
(not just bpftrace) for the native libbpf BPF backend. The native
backend loads BPF programs directly via libbpf, eliminating the
bpftrace dependency for production use.

- bpf_install.nim: Add installNativeBpf() that sets cap_bpf,
  cap_perfmon, cap_dac_read_search on the ct binary and installs
  monitor.bpf.o to /usr/local/lib/codetracer/. Rename the old
  installBpf to installBpftraceFallback. New installBpf tries
  native first, then falls back to bpftrace.
- bpf_monitor_native.nim: Add exe-relative and system install
  paths to defaultBpfObjectPath() discovery chain. Fix two
  pre-existing editorconfig line-length violations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Agent Harbor installation, machine-readable JSON progress output,
and step-by-step GUI progress display to `ct install`. All features
are now enabled by default with --no-X flags to opt out.

New modules:
- agent_harbor_install.nim: Detects and installs Agent Harbor via
  the official installer script. Retries 3 times on download failure
  and reports a descriptive error if internet is unavailable.
- install_progress.nim: Unified progress reporter that emits either
  human-readable text or NDJSON events (--json flag) for each
  install step (path, desktop, bpf, agent-harbor).

CLI changes (codetracerconf.nim):
- Add --agent-harbor flag (default: true, --no-agent-harbor to skip)
- Add --json flag for machine-readable progress output
- Update existing flag descriptions for consistency

Install handler (launch.nim):
- Refactor install case to use InstallReporter for all 4 steps
- Add Agent Harbor as step 4 (non-fatal on failure)

Frontend changes:
- subwindow.nim: Add Agent Harbor checkbox, step-by-step progress
  display with status icons, IPC handler for step/done events
- install.nim: Use --json flag, stream progress via
  readProcessOutputStreaming, forward JSON events to subwindow
- electron_lib.nim: Add readProcessOutputStreaming() for line-by-
  line stdout parsing with Node.js data events

Also fixes all pre-existing editorconfig violations (line length,
indentation) in the modified files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- install-on-distributions.sh: Replace split ct install calls
  (--no-bpf then --no-path --no-desktop --bpf) with a single
  `ct install` invocation. All features are now enabled by default.
- developer-setup.sh: Update comments to reflect native BPF backend.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…languages

Add just targets for running flow-level integration tests for the
newly supported blockchain languages: test-polkavm-flow,
test-cairo-flow, test-circom-flow, test-leo-flow, test-aiken-flow,
test-cadence-flow, test-tolk-flow, and test-stylus-flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add resolveRecorderTestProgram() helper in sibling-test-programs.ts
to locate test programs in sibling recorder repositories at build
time. Update fixtures.ts to support absolute source paths. Add new
JS and Stylus e2e specs, and update all blockchain-specific specs
(aiken, cadence, cairo, circom, leo, polkavm, tolk) to use the
sibling resolution mechanism.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@zah zah force-pushed the fix/harmonize-out-dir-flags branch from 4d7b320 to 0243a9c Compare April 1, 2026 15:05
zah and others added 2 commits April 2, 2026 01:11
- ci/lint/nix.sh: set NIXPKGS_ALLOW_UNFREE=1 and --impure to allow
  evaluation of codetracer-appimage which has an unfree license
- codetracerconf.nim: qualify ambiguous `run` as `StartupCommand.run`
  to disambiguate from `CICommand.run`
- db-backend tests: change `--trace-dir` to `--out-dir` in noir test
  helpers to match nargo's expected flag name

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The BPF backend modules (libbpf_wrapper.nim, bpf_monitor_native.nim)
require libbpf headers and elfutils for compilation. These were
available in the dev shell but missing from the nix derivation, causing
nix build to fail with 'fatal error: bpf/libbpf.h: No such file'.

Also export C_INCLUDE_PATH and LIBRARY_PATH in the build phase so the
Nim-invoked C compiler can find the headers and libraries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.

1 participant