Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

warehouse: the connection registry is process-global, so one server hands the first project's connections to every project

Open
#1,208 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
typescript
Domain
backend, cli, databases

Research direction

Start in packages/opencode/src/altimate/native/connections/registry.ts and trace how Instance.provide() supplies directory context to configs, pending loads, loaded state, and connector caching. Re-run the two-project reproduction, then inspect cli/cmd/run.ts:408 and server/server.ts:281 for the attach-without-dir path. Done means separate projects no longer share configs or live connectors, including when requests use nested directories.

Written by the indexing model from the issue text.

Description

What happens

ConnectionRegistry keeps configs, connectors, pending, and loaded as module-level state (packages/opencode/src/altimate/native/connections/registry.ts). ensureLoaded() loads once for the life of the process. One server process serving two projects therefore hands the first project's connections to both.

Reproduced with two Instance.provide() contexts against the same process:

first:   Instance.directory = .../project-a   →  path = .../project-a/warehouse.db
second:  Instance.directory = .../project-b   →  path = .../project-a/warehouse.db

Cached connectors make it worse: they are keyed only by connection name, so project B can be handed a live connector already open against project A's warehouse.

Why it matters now

This predates #1204 — before it, the base was the server's launch directory for everyone, so every project was equally wrong. #1204 made resolution correct for whichever project loads first, which is the right answer for the single-project case that covers nearly all real use. The residue is that the behaviour is now "first request wins" rather than "uniformly wrong", and that is worth closing properly rather than leaving in a comment.

Two related gaps in the same area:

  • Instance.directory is the request's working directory, not Instance.worktree. A request naming a nested directory looks for .altimate-code in that nested directory rather than at the project root.
  • run --attach without --dir sends no directory (cli/cmd/run.ts:408), so the server falls back to its own cwd (server/server.ts:281).
What a fix looks like

Make the registry state instance-scoped rather than module-scoped — keyed by Instance.directory, or held in the instance context — so each project loads and caches its own configs and connectors. Connector cache keys need the project in them too.

Not a blocker for #1204

#1204 documents this limitation in projectRoot()'s doc comment and does not regress it. Filing separately because the fix is a state-ownership change across the whole registry, not a path-resolution change.

Dominant language
TypeScript
Stars
813
Forks
134
Avg merge
2d 3h
Merged PRs (30d)
65

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from AltimateAI/altimate-code

All issues in AltimateAI/altimate-code

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.