[GH-ISSUE #7646] [Bug] Desktop inspection handoff lists view collections without omissions #4572

Closed
opened 2026-10-31 00:50:53 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @coygeek on GitHub (Oct 28, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7646

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

MCP or agent integration

Observed behavior

After sending initialize, notifications/initialized and tools/list to node scripts/rea.mjs mcp, I observed different collection lists for the same desktop-application view. The inspect_desktop_application description hands callers to inspect_analysis_view and names files/candidates/components/next_probes. The view tool's description names files/omissions/candidates/components/next_probes.

This report concerns the producer's incomplete handoff enumeration. The view tool already documents omissions in the same response.

Reproduction

  1. Use the baseline below with its existing build and dependencies, and put Node.js v24.22.1 on PATH. From the checkout root, run this target-free probe. It creates refusal fixtures for package runners, supplies a fresh HOME/XDG environment, sends only discovery messages, and deletes its temporary directory when finished.
python3 -I - <<'PY'
import json, os, pathlib, subprocess, tempfile
node = subprocess.check_output(["node", "-p", "process.execPath"], text=True).strip()
assert subprocess.check_output([node, "--version"], text=True).strip() == "v24.22.1"
with tempfile.TemporaryDirectory() as trial:
    root = pathlib.Path(trial)
    for name in ("home", "config", "cache", "data", "state", "bin", "tmp"):
        (root / name).mkdir()
    for name in ("npx", "npm", "bun"):
        fixture = root / "bin" / name
        fixture.write_text("#!/bin/sh\nprintf 'unexpected package runner\\n' >&2\nexit 127\n")
        fixture.chmod(0o755)
    env = {"PATH": str(root / "bin") + os.pathsep + str(pathlib.Path(node).parent) + ":/usr/bin:/bin:/usr/sbin:/sbin",
           "HOME": str(root / "home"), "TMPDIR": str(root / "tmp"), "NO_COLOR": "1",
           "npm_config_prefix": str(root / "npm-global")}
    for key, name in (("XDG_CONFIG_HOME", "config"), ("XDG_CACHE_HOME", "cache"),
                      ("XDG_DATA_HOME", "data"), ("XDG_STATE_HOME", "state")):
        env[key] = str(root / name)
    version = subprocess.run([node, "scripts/rea.mjs", "--version"], env=env,
                             capture_output=True, text=True, timeout=30)
    assert version.returncode == 0 and version.stderr == ""
    print("REA version:", version.stdout.strip())
    requests = [
        {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {
            "protocolVersion": "2025-06-18", "capabilities": {},
            "clientInfo": {"name": "verification", "version": "1"}}},
        {"jsonrpc": "2.0", "method": "notifications/initialized"},
        {"jsonrpc": "2.0", "id": 2, "method": "tools/list"}]
    result = subprocess.run([node, "scripts/rea.mjs", "mcp"], env=env,
        input="".join(json.dumps(request) + "\n" for request in requests),
        capture_output=True, text=True, timeout=30)
    assert result.returncode == 0 and result.stderr == "", (result.returncode, result.stderr)
    messages = [json.loads(line) for line in result.stdout.splitlines() if line.strip()]
    tools = next(message["result"]["tools"] for message in messages if message.get("id") == 2)
    producer = next(tool["description"] for tool in tools if tool["name"] == "inspect_desktop_application")
    consumer = next(tool["description"] for tool in tools if tool["name"] == "inspect_analysis_view")
    start = consumer.index("Desktop directory views")
    desktop = consumer[start:consumer.index("Native load-image Evidence", start)].strip()
    print("Producer:", producer)
    print("View:", desktop)
    assert "collections files/candidates/components/next_probes" in producer
    assert "collection files/omissions/candidates/components/next_probes" in desktop
    print("Confirmed: the producer handoff list omits omissions; the view list includes it.")
PY
  1. Compare the printed producer and view collection lists. Both MCP discovery runs during verification showed the difference, including one run of the exact probe above. Both exited 0 with empty stderr. No target was opened.

Expected behavior

The desktop inspection handoff should agree with the five collections documented by the desktop-application guide and the owning view tool. Include omissions in the collection enumeration, or use general wording that directs callers to the view's collection documentation. This requires no change to accepted inputs or Evidence behavior.

Impact and scope

P3 wording defect: the producer's list understates the view's available collections. Reading the view tool's description or desktop-application guide provides the complete list today. No failed projection, lost Evidence, wrong analysis result, or actual agent-selection problem was observed. Runtime omission projection was source-checked only; it was not exercised in this discovery-only verification.

REA version

Exact node scripts/rea.mjs --version output:

6.8.0

Source baseline: 65f1c447344a423fa2785847dbcea1e9a9e2454a.

Runtime and platform

Node.js v24.22.1; macOS 27.0.1; Darwin 27.0.0; arm64. No analysis provider or GUI application was started.

Target and artifact context

No target or analysis artifact. The inputs were three JSON-RPC discovery messages; temporary package-runner fixtures refused execution.

Interface

MCP

Earliest failure stage

Transport or result projection

Relevant output or evidence

Observed excerpts from both tools/list responses:

inspect_desktop_application:
Default summary retains complete Evidence for inspect_analysis_view kind desktop-application; collections files/candidates/components/next_probes support paging and field selection, with exact file paths or candidate families.

inspect_analysis_view:
Desktop directory views use kind desktop-application and collection files/omissions/candidates/components/next_probes, with fields and pagination; files and omissions accept exact paths or their stable IDs, and candidates accept families.

Source corroboration at the baseline:

  • src/contracts/desktopApplicationToolContracts.ts:19: producer description containing the four-item list.
  • src/contracts/analysisViewToolContracts.ts:20: view description containing all five collections.
  • src/domain/analysisView/desktopApplicationView.ts:45-79: page parameters and collection alternatives; lines 63-69 define omissions, paths, omission_ids and field selection.
  • docs/desktop-applications.md:42-56: the full collection list and documented omission selectors, fields and paging.
  • docs/tool-design.md:327-332: guidance to update canonical contracts and relevant documentation together.

Analysis or suspected cause

Source-derived: the producer and consumer keep separate prose descriptions. Their collection enumerations differ although both refer to the same view. The history or intent behind the shorter producer list was not established.

Additional context

Searched open and closed issues, issue comments, and open/closed/merged PRs. Related #7388 concerns a missing prefix-variance limit; #1695 concerns advertised selector validation. Closed #6225, #5080 and #5733 concern other incomplete capability descriptions. None reports this producer's missing desktop omissions collection. No regression against their fixes is alleged.

Originally created by @coygeek on GitHub (Oct 28, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/7646 ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area MCP or agent integration ### Observed behavior After sending `initialize`, `notifications/initialized` and `tools/list` to `node scripts/rea.mjs mcp`, I observed different collection lists for the same desktop-application view. The `inspect_desktop_application` description hands callers to `inspect_analysis_view` and names `files/candidates/components/next_probes`. The view tool's description names `files/omissions/candidates/components/next_probes`. This report concerns the producer's incomplete handoff enumeration. The view tool already documents `omissions` in the same response. ### Reproduction 1. Use the baseline below with its existing build and dependencies, and put Node.js v24.22.1 on PATH. From the checkout root, run this target-free probe. It creates refusal fixtures for package runners, supplies a fresh HOME/XDG environment, sends only discovery messages, and deletes its temporary directory when finished. ```sh python3 -I - <<'PY' import json, os, pathlib, subprocess, tempfile node = subprocess.check_output(["node", "-p", "process.execPath"], text=True).strip() assert subprocess.check_output([node, "--version"], text=True).strip() == "v24.22.1" with tempfile.TemporaryDirectory() as trial: root = pathlib.Path(trial) for name in ("home", "config", "cache", "data", "state", "bin", "tmp"): (root / name).mkdir() for name in ("npx", "npm", "bun"): fixture = root / "bin" / name fixture.write_text("#!/bin/sh\nprintf 'unexpected package runner\\n' >&2\nexit 127\n") fixture.chmod(0o755) env = {"PATH": str(root / "bin") + os.pathsep + str(pathlib.Path(node).parent) + ":/usr/bin:/bin:/usr/sbin:/sbin", "HOME": str(root / "home"), "TMPDIR": str(root / "tmp"), "NO_COLOR": "1", "npm_config_prefix": str(root / "npm-global")} for key, name in (("XDG_CONFIG_HOME", "config"), ("XDG_CACHE_HOME", "cache"), ("XDG_DATA_HOME", "data"), ("XDG_STATE_HOME", "state")): env[key] = str(root / name) version = subprocess.run([node, "scripts/rea.mjs", "--version"], env=env, capture_output=True, text=True, timeout=30) assert version.returncode == 0 and version.stderr == "" print("REA version:", version.stdout.strip()) requests = [ {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": {"name": "verification", "version": "1"}}}, {"jsonrpc": "2.0", "method": "notifications/initialized"}, {"jsonrpc": "2.0", "id": 2, "method": "tools/list"}] result = subprocess.run([node, "scripts/rea.mjs", "mcp"], env=env, input="".join(json.dumps(request) + "\n" for request in requests), capture_output=True, text=True, timeout=30) assert result.returncode == 0 and result.stderr == "", (result.returncode, result.stderr) messages = [json.loads(line) for line in result.stdout.splitlines() if line.strip()] tools = next(message["result"]["tools"] for message in messages if message.get("id") == 2) producer = next(tool["description"] for tool in tools if tool["name"] == "inspect_desktop_application") consumer = next(tool["description"] for tool in tools if tool["name"] == "inspect_analysis_view") start = consumer.index("Desktop directory views") desktop = consumer[start:consumer.index("Native load-image Evidence", start)].strip() print("Producer:", producer) print("View:", desktop) assert "collections files/candidates/components/next_probes" in producer assert "collection files/omissions/candidates/components/next_probes" in desktop print("Confirmed: the producer handoff list omits omissions; the view list includes it.") PY ``` 2. Compare the printed producer and view collection lists. Both MCP discovery runs during verification showed the difference, including one run of the exact probe above. Both exited 0 with empty stderr. No target was opened. ### Expected behavior The desktop inspection handoff should agree with the five collections documented by the desktop-application guide and the owning view tool. Include `omissions` in the collection enumeration, or use general wording that directs callers to the view's collection documentation. This requires no change to accepted inputs or Evidence behavior. ### Impact and scope P3 wording defect: the producer's list understates the view's available collections. Reading the view tool's description or desktop-application guide provides the complete list today. No failed projection, lost Evidence, wrong analysis result, or actual agent-selection problem was observed. Runtime omission projection was source-checked only; it was not exercised in this discovery-only verification. ### REA version Exact `node scripts/rea.mjs --version` output: ```text 6.8.0 ``` Source baseline: `65f1c447344a423fa2785847dbcea1e9a9e2454a`. ### Runtime and platform Node.js v24.22.1; macOS 27.0.1; Darwin 27.0.0; arm64. No analysis provider or GUI application was started. ### Target and artifact context No target or analysis artifact. The inputs were three JSON-RPC discovery messages; temporary package-runner fixtures refused execution. ### Interface MCP ### Earliest failure stage Transport or result projection ### Relevant output or evidence Observed excerpts from both `tools/list` responses: ```text inspect_desktop_application: Default summary retains complete Evidence for inspect_analysis_view kind desktop-application; collections files/candidates/components/next_probes support paging and field selection, with exact file paths or candidate families. inspect_analysis_view: Desktop directory views use kind desktop-application and collection files/omissions/candidates/components/next_probes, with fields and pagination; files and omissions accept exact paths or their stable IDs, and candidates accept families. ``` Source corroboration at the baseline: - `src/contracts/desktopApplicationToolContracts.ts:19`: producer description containing the four-item list. - `src/contracts/analysisViewToolContracts.ts:20`: view description containing all five collections. - `src/domain/analysisView/desktopApplicationView.ts:45-79`: page parameters and collection alternatives; lines 63-69 define `omissions`, `paths`, `omission_ids` and field selection. - `docs/desktop-applications.md:42-56`: the full collection list and documented omission selectors, fields and paging. - `docs/tool-design.md:327-332`: guidance to update canonical contracts and relevant documentation together. ### Analysis or suspected cause Source-derived: the producer and consumer keep separate prose descriptions. Their collection enumerations differ although both refer to the same view. The history or intent behind the shorter producer list was not established. ### Additional context Searched open and closed issues, issue comments, and open/closed/merged PRs. Related #7388 concerns a missing prefix-variance limit; #1695 concerns advertised selector validation. Closed #6225, #5080 and #5733 concern other incomplete capability descriptions. None reports this producer's missing desktop `omissions` collection. No regression against their fixes is alleged.
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#4572
No description provided.