mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[PR #4903] [MERGED] fix(setup): tell MSIX Claude Desktop's process view from any private roaming file #6666
Closed
opened 2026-11-01 21:42:10 +00:00 by bsakaguchi
·
0 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#6666
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/4903
Author: @pablodiazjorge
Created: 10/17/2026
Status: ✅ Merged
Merged: 10/22/2026
Merged by: @morluto
Base:
main← Head:fix/msix-claude-desktop-roaming-probe📝 Commits (8)
3f253d0fix(setup): tell MSIX Claude Desktop's process view from any private roaming fileccdba74fix(setup): address review findings on the MSIX roaming probeeb07605fix(setup): bound the roaming walk's directory listings by its entry budgeta55c805Merge upstream main into fix/msix-claude-desktop-roaming-probe6e674aafix(setup): recheck the private probe before accepting a mismatched targete67abbafix(setup): repeat the AppData lookup before trusting a rechecked probec882e56fix: bound Claude roaming folder probesef48460fix(setup): charge enumerated Claude folder names📊 Changes
6 files changed (+622 additions, -56 deletions)
View changed files
📝
docs/client-configuration.md(+11 -6)📝
src/application/ClaudeDesktopConfigLocation.test.ts(+339 -1)📝
src/application/ClaudeDesktopConfigLocation.ts(+200 -40)📝
src/application/Setup.configuration.test.ts(+15 -1)📝
src/application/SupportedClients.ts(+8 -3)📝
tests/boundary/filesystem/claudeDesktopClientConfiguration.test.ts(+49 -5)📄 Description
Summary
Fixes #4278. On some Windows profiles,
rea setup --client claude_desktopandrea uninstallrefuse Claude Desktop permanently. The MSIX app there reads and writes the real%APPDATA%\Claude, so the package never gets a privateLocalCache\Roaming\Claudefolder. Setup only looked for private files in that folder, so it could never decide whether this process was started by the package. It reportedunknownand refused, and the suggested remedy (open the app once, quit, rerun) cannot change that.Setup now decides from any private file under the package's
LocalCache\Roaming. It still compares theClaudefolder first. When that folder has nothing, it takes a few files from the package's other private roaming folders, which the package redirects in the same way. A package with no private roaming file at all still refuses, but the message now says how to proceed.Thanks to @myso-kr for the report, @CoreyKatzburg for the 2.31226.1.0 data point, and @mrcustsilva for the source trace, the manifest exclusions and the listing of the private roaming root.
Problem and expected behavior
processViewinClaudeDesktopConfigLocation.tsdecides whether this process sees the package's redirected AppData. A process the package started (a terminal in the Code tab, for example) sees private files at their%APPDATA%paths. Any other process sees the real files or nothing. The comparison only listedLocalCache\Roaming\Claude. When that folder is missing,readdirthrows and the view isunknown.registrationWriteBlockerlets onlydirectthrough.That folder can be missing for good. Microsoft's description of AppData virtualization (Understanding how packaged desktop apps run on Windows) covers Windows 10 1903 and later. New files and folders under
Roaminggo to the per-package location, but when a file is opened from the real AppData location "no virtualization for that file occurs". A%APPDATA%\Claudethat existed before the MSIX install, from an earlier unpackaged Claude Desktop, keeps being written in place. @mrcustsilva's profile fits:%APPDATA%\Claudedates from 2025-09-22 and its files change while the app runs. Meanwhile the private roaming root holdsClaude-3p,Claude-NativeHost,Microsoftand aturborepofolder created the day of the listing.Expected: setup should still tell whether this process was started by the package, and on such a profile write the
%APPDATA%file that REA already resolves asconfigPath.Change and scope
processViewcompares paths relative to the package's private roaming root.LocalCache\Roaming\Claudeis tried first, unchanged: the private config when it exists, else up to eight of that folder's files. When that folder yields nothing,roamingProbeswalks the private roaming root breadth first:opendirSyncwith a limit), so a crowded folder is never enumerated whole;lstat).realpathat the%APPDATA%path equals the private target, the view isredirected; a different target orENOENTgivesdirect; any other error givesunknown. One guard is new: a different target orENOENTcounts asdirectonly while the private file is still in place and a second AppData lookup agrees with the first. A log or telemetry file deleted between the lookups is skipped instead of passing for a direct view, whether the AppData lookup then finds nothing or an ordinary copy; one recreated meanwhile is caught by the second lookup, and a probe whose lookups disagree decides nothing.FileSystemWriteVirtualizationexcludes directories only under LocalAppData (Microsoft\Office\16.0\WEF,Claude-3p,Claude-DataandClaude\logsin 2.42304.0.0, as @mrcustsilva also reports), so every private roaming file is redirected for a process the package started.LocalCache\Localis not compared, because files under its excluded directories are not redirected and could not tell the views apart.unknownrefusal message now covers both remaining causes (no comparable private file, or an unreadable AppData path). It names the roaming roots it compared and offers the manual edit that @myso-kr and @mrcustsilva confirmed works, instead of "open Claude Desktop once". For setup it names the configuration REA resolved, which is the private copy whenever one exists; for uninstall it names both files, which uninstall itself cleans.docs/client-configuration.mddescribes the new order and the remaining refusal.Contract and boundary impact
resolveWindowsClaudeDesktopLocation'sprocessViewinsrc/application/ClaudeDesktopConfigLocation.ts; the refusal text inregistrationWriteBlocker(src/application/SupportedClients.ts).Claudefolder but with other private roaming files,setupanduninstallforclaude_desktopnow plan or perform the change instead of returningneeds_human. Theunknownremediation text changes. There is no catalog change.realpathresults under the package's private roaming root and%APPDATA%; it writes nothing new.Expected effects:
(The configuration change is setup's existing write of Claude Desktop's configuration, now reached on these profiles.)
Evidence and regression coverage
Tests added or updated:
src/application/ClaudeDesktopConfigLocation.test.ts, new describes "Claude Desktop MSIX process view from other roaming folders" and "... when a probe changes during the comparison", 12 tests:ENOENTat the AppData path counts as direct, but not when the private file was deleted meanwhile, nor when the lookup then reaches an ordinary AppData copy;unknownwhen that finds no file;unknown.src/application/Setup.configuration.test.ts: with a private copy and an unknown view, the setup advice names the private copy and the uninstall advice names both files.tests/boundary/filesystem/claudeDesktopClientConfiguration.test.ts:turborepo\telemetry.json: the view isdirect, setup configuresmcpServers.reain the AppData file;%APPDATA%with a junction: the view isredirectedand the file is unchanged;Base reproduction:
node scripts/rea.mjs setup --client claude_desktop --dry-run --json, in a temporary profile (APPDATAandLOCALAPPDATApointed into a temp directory; the package keepsClaude-NativeHost,turborepoandMicrosoft\Windowsfiles and noClaudefolder):01cdbbdc5:"status":"needs_human", no planned actions, exit 1;"status":"planned"withconfigure_client:claude_desktoptargeting<temp>\AppData\Roaming\Claude\claude_desktop_config.json, exit 0;unknowninstead ofdirectorredirected, or the old remediation). The eleventh, an empty roaming root stayingunknown, holds on both.3f253d092: the advice test and the uninstall test (the old advice named only the AppData file) and the entry-budget test. The deleted-file test fails without the new guard (directinstead ofunknown).Live redirection check on Windows 11 Pro 10.0.26300 with Claude Desktop MSIX 2.42304.0.0. The same Node script compared one private file from each of three roaming folders with its
%APPDATA%path:ghidra\…\application.log,turborepo\telemetry.jsonandClaude-NativeHost\com.anthropic.claude_browser_extension.jsonall resolve to the private copies;ENOENTandturborepo\telemetry.jsonresolves to a different, real file;Windows.ApplicationModel.Package.Currentreports no package identity (HRESULT0x80073D54) for a PowerShell child, andtasklist /appsdoes not list the Node process;fs.realpathSync.native, the same call REA's production file system uses for this comparison (ClaudeDesktopConfigLocation.ts);Claudefolder, so the new walk is not what decides here; the check shows that the rest of the roaming root is redirected in the same way.User-visible CLI output, empty private roaming root,
setup(paths shortened):Remaining proof gaps:
Microsoft\. Could you list the files under%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Microsoft? If it holds any file, this change decides your view. If it holds only empty folders, setup still refuses there, with the manual-edit message.unknown; that errs on the side of refusing.For evidence-bearing changes:
Validation performed
Windows 11 Pro 10.0.26300, Node 24.18.0, on main
01cdbbdc5:npx vitest run src/application/ClaudeDesktopConfigLocation.test.ts src/application/Setup.configuration.test.ts tests/boundary/filesystem/claudeDesktopClientConfiguration.test.ts: 70 passed, 1 failed, 1 skipped. The failure is "blocks managed skill removal through redirected AppData before any removal", which cannot create its symlink on Windows without developer mode and fails the same way on main.npx vitest run src/application tests/boundary/filesystemon main and on the change, compared test by test:npx vitest run src/application tests/boundary/filesystem/claudeDesktopClientConfiguration.test.tsgave 1200 passed, 11 failed and 1 skipped, the same failures as main, and the only differences from main are the new tests;npm run check:fast: typecheck and lint pass. Lint reports 0 errors and 1663 warnings on both main and the change.b83b9caf4into the branch:npm run check:fastpasses, andnpx vitest run src/application tests/boundary/filesystem/claudeDesktopClientConfiguration.test.ts tests/boundary/filesystem/setupClientConfigCleanupOwnership.test.tsgives 1267 passed, 11 failed and 1 skipped; the 11 are the same host-dependent failures as main (Hopper installers on Linux and macOS, skill planning paths, and the symlink case above).npx knip: clean.npx oxfmt --checkon the changed files: pass.npm run docs:checkwas not run; the change todocs/client-configuration.mdis prose only.npm run compile, then the dry runs above with and without the change.Compatibility, safety, and release
Claudefolder take the same path as before.Author readiness
Human owner: @pablodiazjorge
Before merge
type(scope): outcome.Maintainer blocker verification
The preferred
LocalCache/Roaming/Claudeprobe and fallback roaming probes now share a 1,024-name enumeration/inspection budget. Every returned name is charged before sorting or early leaf selection, so crowded folders cannot hide work from later probes. ProductionopendirSyncenumeration reads only the remaining permitted count.The focused Claude Desktop location suite passed 41 tests and
npm run check:fastpassed on Node 24.18.0/npm 11.16.0. The many-early-folders regression verifies remaining-budget propagation. No current Windows profile was exercised. This budget targets roaming probes; it does not claim to bound the separate pre-existing MSIX Packages-root scan.Windows CI follow-up
The initial Windows job timed out after 30 seconds in the unchanged Cursor override acceptance test. The same-revision failed-job rerun passed the curated Windows tests, package verification, Node 24 native directory identity and Node 22 native path boundaries. The previous timeout did not reproduce; no deterministic defect attributable to this PR was established. No timeout increase, skip or source change was made. The aggregate
CI requiredsummary subsequently passed on this same head, as did all four required contexts.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.