fix(config): load configs across git boundaries (#36568)

Co-authored-by: Dax Raad <thdxr@users.noreply.github.com>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
This commit is contained in:
opencode-agent[bot]
2026-07-12 22:07:20 +00:00
committed by GitHub
co-authored by Dax Raad opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
parent f8f8cc9546
commit 6e55ddd078
4 changed files with 38 additions and 13 deletions
@@ -999,6 +999,37 @@ it.instance("resolves scoped npm plugins in config", () =>
}),
)
it.effect("loads shared config above a child git repository", () =>
Effect.gen(function* () {
const root = yield* tmpdirScoped()
const global = yield* tmpdirScoped()
const workspace = path.join(root, "workspace")
const project = path.join(workspace, "project")
yield* writeConfigEffect(path.join(workspace, ".opencode"), {
model: "shared/model",
username: "shared-user",
})
yield* writeConfigEffect(path.join(project, ".opencode"), { username: "project-user" })
yield* Effect.promise(async () => {
const child = Bun.spawn(["git", "init"], { cwd: project, stdout: "ignore", stderr: "ignore" })
await child.exited
})
yield* withGlobalConfigDir(
global,
withInstanceDir(
project,
Effect.gen(function* () {
const config = yield* Config.use.get()
expect(config.model).toBe("shared/model")
expect(config.username).toBe("project-user")
}),
),
)
}),
)
it.effect("merges plugin arrays from global and local configs", () =>
withConfigTree(
{