[PR #6395] fix(signals): name the limiter as a possible cause of a failed sigrok version probe #7334

Open
opened 2026-11-01 21:47:08 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/6395
Author: @Abelo9996
Created: 10/22/2026
Status: 🔄 Open

Base: main ← Head: fix-5984-sigrok-version-probe-config


📝 Commits (5)

  • d11466f fix(signals): report a failed sigrok version probe as a configuration error
  • 115943e fix(signals): attribute a failed version probe to the limited probe
  • c7f83d4 Merge remote-tracking branch 'origin/main' into fix-5984-sigrok-version-probe-config
  • 25acc92 Merge remote-tracking branch 'origin/main' into fix-5984-sigrok-version-probe-config
  • fe938b1 fix(signals): name the limiter as a possible cause of a failed version probe

📊 Changes

2 files changed (+45 additions, -3 deletions)

View changed files

📝 src/signals/SigrokRecordingProvider.ts (+2 -1)
📝 tests/boundary/signals/recordingProvider.test.ts (+43 -2)

📄 Description

Summary

This follows up on #5984 and main's 928ba76882, which already refuses the failed probe; this PR only changes the attribution and adds the limiter test.

Main now returns capability_unavailable with the configuration guidance and details.captured_output when the --version probe exits nonzero. Its message says The selected sigrok-cli installation failed its --version probe. The probe runs under the resource limiter, though, so the nonzero status can come from prlimit as well as sigrok-cli. This PR rewords that one message so it names both, and adds a test where the limiter itself refuses to start the tool.

Problem and expected behavior

execute launches every sigrok command through REA_SIGROK_PRLIMIT_COMMAND (limits first, --version last). When that probe exits nonzero, main throws The selected sigrok-cli installation failed its --version probe; inspect its captured output. If the limiter is what failed, for example because it could not start the tool, the message still blames sigrok-cli, while captured_output.stderr shows the limiter's own error. With stand-in scripts (described below), main's MCP result for a limiter that exits 1 reads:

"reason":"The selected sigrok-cli installation failed its --version probe; inspect its captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null}

Expected: the same capability_unavailable result, with a message that does not pin the status on sigrok-cli alone.

Change and scope

One string in SigrokRecordingProvider execute, plus a one-line comment. The configuration refusal now reads The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. The existing configuration guidance about REA_SIGROK_COMMAND and REA_SIGROK_PRLIMIT_COMMAND is still appended by #failure.

I kept main's structure as is: the plain Error thrown in the configuration phase and the existing phase === "configuration" branch in #failure, which already attaches the captured output. The earlier SigrokVersionProbeFailure class and configurationFailure helper from this branch are gone, since main's path already produces the same category and captured output. My earlier failed-version test case is also gone, because main's own nonzero-version test covers it.

Unchanged: the error category, captured_output, the banner check, and every other failure path.

Follow the contribution scope.
Scope decision: not applicable (ordinary fix within existing boundaries).

Contract and boundary impact

  • Semantic owner and earliest changed stage: SigrokRecordingProvider execute, the message for a nonzero version probe in the configuration phase.
  • Contribution scope fit and linked maintainer decision: ordinary fix, not applicable.
  • CLI and MCP/tool-catalog contract: no schema change. Only the message, remediation.action and details.reason text of this one refusal changes.
  • Provider, bridge, target-format, or platform compatibility: sigrok provider only (Linux). No change to command arguments, limits or the expected 0.7.2 banner check.
  • Evidence, artifact, provenance, or reconstruction contract: none.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): unchanged.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs and skills/; edit authored instructions in .agents/skills/reverse-engineer-anything/ and never commit build outputs): none.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

(The existing sigrok-cli --version probe launch, unchanged by this PR; only its message changes.)

Evidence and regression coverage

  • Tests added or updated: tests/boundary/signals/recordingProvider.test.ts. The command simulator gains a limiter-refused mode where REA_SIGROK_PRLIMIT_COMMAND points at a separate limiter script that prints prlimit: failed to execute sigrok-cli on stderr and exits 1 without starting the tool. A new test, next to main's nonzero-version test, runs decode and inspectDecoders against it and checks capability_unavailable, the limiter's captured_output (exit_code: 1, empty stdout, its stderr), that the message names REA_SIGROK_PRLIMIT_COMMAND and says limiter or from sigrok-cli, and that it no longer says sigrok-cli installation failed its --version probe. Main's own test is untouched.

  • Base reproduction or other evidence: I put src/signals/SigrokRecordingProvider.ts back to its origin/main version (4c680d099), kept the updated test file and ran npx vitest run --project boundary tests/boundary/signals/recordingProvider.test.ts -t "version probe". Excerpt:

       ✓ classifies completed nonzero version probes as configuration failures for both signal operations 221ms
       × does not blame sigrok-cli alone when the limiter fails the version probe 75ms
    AssertionError: expected 'The selected sigrok-cli installation …' to contain 'limiter or from sigrok-cli'
    Expected: "limiter or from sigrok-cli"
    Received: "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."
          Tests  1 failed | 3 passed | 76 skipped (80)
    

    With the change, the same command reports Tests 4 passed | 76 skipped (80).

  • User-visible CLI/MCP output (if applicable): these come from a throwaway test, not committed, that sets up the provider like the existing tests (Linux platform and limit reader injected) with two stand-in scripts: a fake sigrok-cli that prints a supported sigrok-cli 0.7.2 / libsigrokdecode banner and version warning, then exits 1, and a fake prlimit that prints prlimit: failed to execute sigrok-cli and exits 1. The CLI case runs inspect-signal-decoders --format json through registerSignalCommands with the fake tool also standing in as the limiter. The MCP case calls inspect_signal_decoders through the MCP test harness with REA_SIGROK_PRLIMIT_COMMAND pointing at the fake prlimit. Neither is a real sigrok or prlimit.

    Before (origin/main), CLI stdout:

    {
      "code": "capability_unavailable",
      "category": "unsupported_provider",
      "message": "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).",
      "retryable": false,
      "remediation": {
        "action": "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."
      },
      "details": {
        "provider_id": "sigrok-recording",
        "operation": "inspect_signal_decoders",
        "reason": "The selected sigrok-cli installation failed its --version probe; inspect its captured output.",
        "captured_output": {
          "stdout": "sigrok-cli 0.7.2\nlibsigrokdecode 0.5.3\n",
          "stderr": "version warning\n",
          "truncated": false,
          "exit_code": 1,
          "signal": null
        }
      }
    }
    

    Before (origin/main), MCP tool result text with the fake prlimit:

    {"error":{"code":"capability_unavailable","category":"unsupported_provider","message":"The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).","retryable":false,"remediation":{"action":"The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."},"details":{"provider_id":"sigrok-recording","operation":"inspect_signal_decoders","reason":"The selected sigrok-cli installation failed its --version probe; inspect its captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null}}}}
    

    After (this branch), CLI stdout:

    {
      "code": "capability_unavailable",
      "category": "unsupported_provider",
      "message": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).",
      "retryable": false,
      "remediation": {
        "action": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."
      },
      "details": {
        "provider_id": "sigrok-recording",
        "operation": "inspect_signal_decoders",
        "reason": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output.",
        "captured_output": {
          "stdout": "sigrok-cli 0.7.2\nlibsigrokdecode 0.5.3\n",
          "stderr": "version warning\n",
          "truncated": false,
          "exit_code": 1,
          "signal": null
        }
      }
    }
    

    After (this branch), MCP tool result text with the fake prlimit:

    {"error":{"code":"capability_unavailable","category":"unsupported_provider","message":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).","retryable":false,"remediation":{"action":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."},"details":{"provider_id":"sigrok-recording","operation":"inspect_signal_decoders","reason":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null}}}}
    
  • Remaining proof gaps: no real sigrok installation, no real prlimit, and no Linux run. The tool and limiter are stand-in scripts, and the Linux platform and limit reader are injected, as in the existing tests. The output above does not come from the installed rea binary, because on macOS it stops at the Linux host check before it reaches the probe. I did not check which exit codes util-linux prlimit uses when it cannot start the tool. The Linux-only signal suites (recordingDescriptorCleanup, resourceLimits) were skipped on macOS when run directly with vitest.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

I ran everything on macOS arm64 with Node 26.12.1 after npm ci, on the branch after merging origin/main (4c680d099).

  • npm run test:focused -- tests/boundary/signals/recordingProvider.test.ts: metadata and compile tasks passed, Tests 80 passed (80). Without the source change: 1 failed, shown above.
  • npx vitest run tests/boundary/signals/ tests/boundary/process/artifactFileOutcomes.test.ts tests/boundary/process/artifactProducerCancellation.test.ts tests/boundary/mcp/signalRecordingMcp.test.ts: Test Files 5 passed | 2 skipped (7), Tests 113 passed | 9 skipped (122). The 2 skipped files are Linux-only.
  • npm run typecheck: passed.
  • npm run lint:built: Lint: 5390 files, 0 errors, module boundaries checked. The two changed files have the same warnings as on main.
  • npm run knip, npm run metadata:check and npm run verify:architecture-guards: passed.
  • oxfmt --check on the two changed files: clean.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. Only the message text of this refusal changes; code, category and details stay the same.
  • Real Hopper/Ghidra, browser, or OS coverage: macOS only with a Node command simulator; no real sigrok or Linux resource enforcement.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: no change to what is captured or returned.

Author readiness

Human owner: @Abelo9996

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/6395 **Author:** [@Abelo9996](https://github.com/Abelo9996) **Created:** 10/22/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix-5984-sigrok-version-probe-config` --- ### 📝 Commits (5) - [`d11466f`](https://github.com/morluto/rea/commit/d11466fbe99c79902564e690ea097aa540861ed4) fix(signals): report a failed sigrok version probe as a configuration error - [`115943e`](https://github.com/morluto/rea/commit/115943e2f449932b51dc7eae8bc520b82556a939) fix(signals): attribute a failed version probe to the limited probe - [`c7f83d4`](https://github.com/morluto/rea/commit/c7f83d414de8fa7358b4931840f53087c4196600) Merge remote-tracking branch 'origin/main' into fix-5984-sigrok-version-probe-config - [`25acc92`](https://github.com/morluto/rea/commit/25acc92ab3eaadf5fa727e964bdf873718f25e5c) Merge remote-tracking branch 'origin/main' into fix-5984-sigrok-version-probe-config - [`fe938b1`](https://github.com/morluto/rea/commit/fe938b18857d55acb8ac7b6cc3253c2d3a84b25d) fix(signals): name the limiter as a possible cause of a failed version probe ### 📊 Changes **2 files changed** (+45 additions, -3 deletions) <details> <summary>View changed files</summary> 📝 `src/signals/SigrokRecordingProvider.ts` (+2 -1) 📝 `tests/boundary/signals/recordingProvider.test.ts` (+43 -2) </details> ### 📄 Description ## Summary This follows up on #5984 and main's 928ba76882, which already refuses the failed probe; this PR only changes the attribution and adds the limiter test. Main now returns `capability_unavailable` with the configuration guidance and `details.captured_output` when the `--version` probe exits nonzero. Its message says `The selected sigrok-cli installation failed its --version probe`. The probe runs under the resource limiter, though, so the nonzero status can come from prlimit as well as sigrok-cli. This PR rewords that one message so it names both, and adds a test where the limiter itself refuses to start the tool. ## Problem and expected behavior `execute` launches every sigrok command through `REA_SIGROK_PRLIMIT_COMMAND` (limits first, `--version` last). When that probe exits nonzero, main throws `The selected sigrok-cli installation failed its --version probe; inspect its captured output.` If the limiter is what failed, for example because it could not start the tool, the message still blames sigrok-cli, while `captured_output.stderr` shows the limiter's own error. With stand-in scripts (described below), main's MCP result for a limiter that exits 1 reads: ``` "reason":"The selected sigrok-cli installation failed its --version probe; inspect its captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null} ``` Expected: the same `capability_unavailable` result, with a message that does not pin the status on sigrok-cli alone. ## Change and scope One string in `SigrokRecordingProvider` `execute`, plus a one-line comment. The configuration refusal now reads `The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output.` The existing configuration guidance about `REA_SIGROK_COMMAND` and `REA_SIGROK_PRLIMIT_COMMAND` is still appended by `#failure`. I kept main's structure as is: the plain `Error` thrown in the configuration phase and the existing `phase === "configuration"` branch in `#failure`, which already attaches the captured output. The earlier `SigrokVersionProbeFailure` class and `configurationFailure` helper from this branch are gone, since main's path already produces the same category and captured output. My earlier `failed-version` test case is also gone, because main's own `nonzero-version` test covers it. Unchanged: the error category, `captured_output`, the banner check, and every other failure path. Follow the [contribution scope](https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#contribution-scope). Scope decision: not applicable (ordinary fix within existing boundaries). ## Contract and boundary impact - Semantic owner and earliest changed stage: `SigrokRecordingProvider` `execute`, the message for a nonzero version probe in the configuration phase. - Contribution scope fit and linked maintainer decision: ordinary fix, not applicable. - CLI and MCP/tool-catalog contract: no schema change. Only the `message`, `remediation.action` and `details.reason` text of this one refusal changes. - Provider, bridge, target-format, or platform compatibility: sigrok provider only (Linux). No change to command arguments, limits or the expected 0.7.2 banner check. - Evidence, artifact, provenance, or reconstruction contract: none. - Target selection, authority, upstream behavior, and cleanup details (if applicable): unchanged. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact (CI generates and validates ignored catalogs and `skills/`; edit authored instructions in `.agents/skills/reverse-engineer-anything/` and never commit build outputs): none. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [ ] Read existing files or captured data. - [x] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. (The existing `sigrok-cli --version` probe launch, unchanged by this PR; only its message changes.) ## Evidence and regression coverage - Tests added or updated: `tests/boundary/signals/recordingProvider.test.ts`. The command simulator gains a `limiter-refused` mode where `REA_SIGROK_PRLIMIT_COMMAND` points at a separate limiter script that prints `prlimit: failed to execute sigrok-cli` on stderr and exits 1 without starting the tool. A new test, next to main's `nonzero-version` test, runs `decode` and `inspectDecoders` against it and checks `capability_unavailable`, the limiter's `captured_output` (`exit_code: 1`, empty stdout, its stderr), that the message names `REA_SIGROK_PRLIMIT_COMMAND` and says `limiter or from sigrok-cli`, and that it no longer says `sigrok-cli installation failed its --version probe`. Main's own test is untouched. - Base reproduction or other evidence: I put `src/signals/SigrokRecordingProvider.ts` back to its `origin/main` version (4c680d099), kept the updated test file and ran `npx vitest run --project boundary tests/boundary/signals/recordingProvider.test.ts -t "version probe"`. Excerpt: ``` ✓ classifies completed nonzero version probes as configuration failures for both signal operations 221ms × does not blame sigrok-cli alone when the limiter fails the version probe 75ms AssertionError: expected 'The selected sigrok-cli installation …' to contain 'limiter or from sigrok-cli' Expected: "limiter or from sigrok-cli" Received: "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)." Tests 1 failed | 3 passed | 76 skipped (80) ``` With the change, the same command reports `Tests 4 passed | 76 skipped (80)`. - User-visible CLI/MCP output (if applicable): these come from a throwaway test, not committed, that sets up the provider like the existing tests (Linux platform and limit reader injected) with two stand-in scripts: a fake `sigrok-cli` that prints a supported `sigrok-cli 0.7.2` / `libsigrokdecode` banner and `version warning`, then exits 1, and a fake `prlimit` that prints `prlimit: failed to execute sigrok-cli` and exits 1. The CLI case runs `inspect-signal-decoders --format json` through `registerSignalCommands` with the fake tool also standing in as the limiter. The MCP case calls `inspect_signal_decoders` through the MCP test harness with `REA_SIGROK_PRLIMIT_COMMAND` pointing at the fake prlimit. Neither is a real sigrok or prlimit. Before (`origin/main`), CLI stdout: ```json { "code": "capability_unavailable", "category": "unsupported_provider", "message": "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).", "retryable": false, "remediation": { "action": "The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)." }, "details": { "provider_id": "sigrok-recording", "operation": "inspect_signal_decoders", "reason": "The selected sigrok-cli installation failed its --version probe; inspect its captured output.", "captured_output": { "stdout": "sigrok-cli 0.7.2\nlibsigrokdecode 0.5.3\n", "stderr": "version warning\n", "truncated": false, "exit_code": 1, "signal": null } } } ``` Before (`origin/main`), MCP tool result text with the fake prlimit: ```json {"error":{"code":"capability_unavailable","category":"unsupported_provider","message":"The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).","retryable":false,"remediation":{"action":"The selected sigrok-cli installation failed its --version probe; inspect its captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."},"details":{"provider_id":"sigrok-recording","operation":"inspect_signal_decoders","reason":"The selected sigrok-cli installation failed its --version probe; inspect its captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null}}}} ``` After (this branch), CLI stdout: ```json { "code": "capability_unavailable", "category": "unsupported_provider", "message": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).", "retryable": false, "remediation": { "action": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)." }, "details": { "provider_id": "sigrok-recording", "operation": "inspect_signal_decoders", "reason": "The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output.", "captured_output": { "stdout": "sigrok-cli 0.7.2\nlibsigrokdecode 0.5.3\n", "stderr": "version warning\n", "truncated": false, "exit_code": 1, "signal": null } } } ``` After (this branch), MCP tool result text with the fake prlimit: ```json {"error":{"code":"capability_unavailable","category":"unsupported_provider","message":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit).","retryable":false,"remediation":{"action":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output. On Linux, configure sigrok-cli 0.7.2 through REA_SIGROK_COMMAND and util-linux prlimit through REA_SIGROK_PRLIMIT_COMMAND (default /usr/bin/prlimit)."},"details":{"provider_id":"sigrok-recording","operation":"inspect_signal_decoders","reason":"The resource-limited sigrok-cli --version probe failed; the status may come from the limiter or from sigrok-cli, so inspect both selected installations and the captured output.","captured_output":{"stdout":"","stderr":"prlimit: failed to execute sigrok-cli\n","truncated":false,"exit_code":1,"signal":null}}}} ``` - Remaining proof gaps: no real sigrok installation, no real prlimit, and no Linux run. The tool and limiter are stand-in scripts, and the Linux platform and limit reader are injected, as in the existing tests. The output above does not come from the installed `rea` binary, because on macOS it stops at the Linux host check before it reaches the probe. I did not check which exit codes util-linux prlimit uses when it cannot start the tool. The Linux-only signal suites (`recordingDescriptorCleanup`, `resourceLimits`) were skipped on macOS when run directly with vitest. For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed I ran everything on macOS arm64 with Node 26.12.1 after `npm ci`, on the branch after merging `origin/main` (4c680d099). - `npm run test:focused -- tests/boundary/signals/recordingProvider.test.ts`: metadata and compile tasks passed, `Tests 80 passed (80)`. Without the source change: 1 failed, shown above. - `npx vitest run tests/boundary/signals/ tests/boundary/process/artifactFileOutcomes.test.ts tests/boundary/process/artifactProducerCancellation.test.ts tests/boundary/mcp/signalRecordingMcp.test.ts`: `Test Files 5 passed | 2 skipped (7)`, `Tests 113 passed | 9 skipped (122)`. The 2 skipped files are Linux-only. - `npm run typecheck`: passed. - `npm run lint:built`: `Lint: 5390 files, 0 errors`, module boundaries checked. The two changed files have the same warnings as on main. - `npm run knip`, `npm run metadata:check` and `npm run verify:architecture-guards`: passed. - `oxfmt --check` on the two changed files: clean. ## Compatibility, safety, and release - Breaking changes or migration steps: none. Only the message text of this refusal changes; code, category and details stay the same. - Real Hopper/Ghidra, browser, or OS coverage: macOS only with a Node command simulator; no real sigrok or Linux resource enforcement. - Package or release metadata impact: none. - Security, privacy, process, or containment review: no change to what is captured or returned. ## Author readiness Human owner: @Abelo9996 - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#7334
No description provided.