Skip to content

test(core): pin location reload reaps the prior graph - #55548

Open
titoune33 wants to merge 1 commit into
anomalyco:devfrom
titoune33:location-reload-reap-guard
Open

titoune33 wants to merge 1 commit into
anomalyco:devfrom
titoune33:location-reload-reap-guard

Conversation

@titoune33

@titoune33 titoune33 commented Oct 14, 2026 •

Copy link
Copy Markdown

Issue for this PR

Related to #51003 (does not close it — this PR is a regression guard, not the fix).

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

(Test-only change: pins an existing invariant. None of the boxes fit exactly; closest is code improvement of the test suite.)

What does this PR do?

#51003 reports that each opencode reload leaks the previous location boot's MCP subprocesses. Before touching the reload path I wrote a probe to check whether LocationServiceMap.reload() itself orphans the prior entry scope. It does not: Mcp.node is a location node owned by the entry scope, and that scope closes eagerly for an idle entry and on last-borrower release for a borrowed one.

This PR keeps that probe as a regression test (reaps the reloaded idle/borrowed graph's scope in test/location-layer.test.ts), so a future change to reload/invalidation cannot silently break the reaping contract. Details and next repro steps for the actual leak are in my comment on #51003.

How did you verify your code works?

bun test test/location-layer.test.ts: 26 pass, 0 fail. bun typecheck (tsgo) clean. I also verified the underlying ownership chain in source: Mcp.node → makeLocationNode → Instance.layer, stdio servers forked from the entry scope root and killed on scope close.

Screenshots / recordings

N/A — test-only.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@github-actions github-actions Bot added the needs:compliance This means the issue will auto-close after 2 hours. label Oct 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The new regression tests look sound to me. I ran test/location-layer.test.ts: both new cases pass, and the rest of the file is green (24 pass, 2 skip). To check the guard really catches the bug, I temporarily changed Effect's RcMap so it doesn't close a detached entry, idle or borrowed. Both cases then failed on expect(finalized).toContain(1), so the instrumented LocationWatcher finalizer is tied to the location entry scope as intended. The borrowed case passes on current dev because Effect 4.0.1 checks entry identity on release; that is the leak #52635 worked around for rc.112, so the description's claim holds. bun run typecheck in packages/core passes.

The public API is unchanged (test-only).

No blocking concerns.

Related: #51003, #50758

@github-actions github-actions Bot removed the needs:compliance This means the issue will auto-close after 2 hours. label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thanks for updating your PR! It now meets our contributing guidelines. 👍

This branch has not been deployed

No deployments
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