Skip to content

Commit 3a6b59b

Browse files
anandgupta42claude
andcommitted
fix: line-by-line audit of v1.4.0 bridge merge regressions
Comprehensive audit found 16 user-impacting regressions across 28 files. Fixes batched here. Each change is wrapped in altimate_change markers (`upstream_fix:` tag) so the next bridge merge re-evaluates them. CRITICAL — would crash or hang at runtime - `control-plane/workspace-router-middleware.ts` — `(adaptor as any).fetch(...)` threw TypeError when `OPENCODE_EXPERIMENTAL_WORKSPACES=1`. The Adaptor API was renamed `fetch → target` in v1.4.0; the misleading marker comment said the opposite. Rewrote to use `adaptor.target()` + `ServerProxy.http()` (same pattern as `src/server/router.ts:98`); skip routing for local targets so they fall through to next(). HIGH — user-visible regressions - `cli/cmd/serve.ts`, `web.ts`, `uninstall.ts` — describe/log strings said "opencode server" / "opencode" (yargs help text shown to every user). - `cli/error.ts` — three error messages referenced `opencode` / `opencode models` / `opencode.json`. - `cli/cmd/tui/component/dialog-status.tsx` — auth hint said "run: opencode mcp auth". - `cli/cmd/mcp.ts` — `Remote MCP servers ... opencode.json` info text; `opencode x ...` placeholder; `opencode-debug` MCP client name (sent to MCP servers as the client identity); resolveConfigPath wrote new MCP entries to `opencode.json`. Restored main's `altimate-code.json` precedence with `opencode.json` as fallback for existing installs. - `cli/cmd/tui/component/error-component.tsx` — bug-report titles prefixed "opentui: fatal:" instead of "altimate-code: fatal:". - `cli/ui.ts` — non-TTY path used a hardcoded "opencode" wordmark for piped output / CI logs / the WebCommand banner. Replaced with the same ALTIMATE | CODE glyphs used by the TTY path (sans ANSI). - `cli/cmd/github.ts` — sweeping brand revert: `AGENT_USERNAME`, `WORKFLOW_FILE` (committed to user repos), GitHub App slug, provider priority key, workflow YAML name + job + mention triggers + step name, console logs, OIDC audience, branch prefix, share-image URL, share link text, "opencode infrastructure" in the system prompt. Verified domain changes (`altimate-code.dev` → `altimate.ai`) match the rest of our codebase and are intentional — kept those. - `server/routes/global.ts` — new `/upgrade` route OpenAPI summary + description said "opencode" (ships in SDK codegen). - `plugin/codex.ts` — three User-Agent strings sent to OpenAI auth servers reverted to `opencode/${VERSION}`; OAuth refresh retry loop (3 attempts, 4xx-vs-5xx aware) removed; 30s token-expiry skew buffer removed. - `session/.../message-v2.ts` (via `util/error.ts`) — opaque-error augmentation from PR #118/#133 replaced with bare `errorMessage(e)`, which only handles empty messages, not bare-name messages like "Error" / matching `error.name`. Centralized the augmentation in `errorMessage()` so every caller benefits, plus 4 new tests. - `provider/models.ts` — `setTimeout(..., 0)` deferral on initial refresh was removed, re-introducing the circular-dep risk that altimate commit `980efaab64` was added to fix. - `project/bootstrap.ts` — `Truncate.init()` call dropped. Without it the hourly scheduler that prunes `Global.Path.data/tool-output/tool_*` never registers, so the directory grows unboundedly. MEDIUM — observability / robustness - `cli/cmd/tui/util/clipboard.ts` (6 sites) — `Log.Default.debug` replaced with `console.log`, which writes directly to the terminal mid-render and corrupts the TUI display. Restored structured logger. - `cli/cmd/tui/component/dialog-workspace-list.tsx` — same pattern, plus a stray `console.log(JSON.stringify(result, null, 2))` debug-print of every workspace creation result. Removed. Restored "workspace created" info log. - `cli/cmd/tui/component/dialog-mcp.tsx` — same pattern. - `control-plane/workspace.ts` — fetch lost its defensive `.catch(() => undefined)`, so a transient network blip kills the SSE reconnect loop forever; local workspaces also `return`ed out of the loop permanently. Restored both. - `plugin/install.ts` — new plugin installs wrote to `.opencode/opencode.json` instead of `.altimate-code/altimate-code.json`. Now writes to `.altimate-code/` for new installs, keeps using `.opencode/` if it exists to avoid orphaning existing plugin configs. LOW - Catppuccin themes (3 variants) — `textMuted` darkened from `Subtext1` to `Overlay2` (upstream a11y regression). Restored. - `cli/cmd/tui/context/route.tsx` — navigate debug log dropped. - `plugin/github-copilot/copilot.ts` (4 sites) — User-Agent reverted to `opencode/${VERSION}`. - `server/instance.ts:37` — `import("opencode-web-ui.gen.ts")` is dead in our build (no embedded UI; we proxy to app.altimate.ai). Marker added so the next merge knows it's intentional. False positives flagged in audit but verified out of scope: - `tool/plan.ts` PlanEnter `answer === "No"` — the entire PlanEnterTool is commented out (`/* */`) in both main and current branch. Dead code. - `cli/cmd/pr.ts` `spawn("opencode", ...)` — pre-existing in main, not a v1.4.0 regression. Track separately. Verified - bun turbo typecheck — 5/5 packages clean - bun test (focused: util, upstream, permission, server) — 553 pass / 0 fail - Marker check — 107 warnings before/after (no new warnings introduced; every edit wrapped in `altimate_change` markers) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 72c215d commit 3a6b59b

30 files changed

Lines changed: 331 additions & 123 deletions

packages/opencode/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ gen
44
app.log
55
src/provider/models-snapshot.js
66
src/provider/models-snapshot.d.ts
7+
src/provider/models-snapshot.ts

packages/opencode/src/cli/cmd/github.ts

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,13 @@ type IssueQueryResponse = {
135135
}
136136
}
137137

138-
const AGENT_USERNAME = "opencode-agent[bot]"
138+
// altimate_change start — upstream_fix: bridge merge reverted these constants from
139+
// our altimate-code branding back to upstream. They affect the GitHub App identity,
140+
// the workflow filename committed to user repos, and the agent username we react as.
141+
const AGENT_USERNAME = "altimate-code-agent[bot]"
139142
const AGENT_REACTION = "eyes"
140-
const WORKFLOW_FILE = ".github/workflows/opencode.yml"
143+
const WORKFLOW_FILE = ".github/workflows/altimate-code.yml"
144+
// altimate_change end
141145

142146
// Event categories for routing
143147
// USER_EVENTS: triggered by user actions, have actor/issueId, support reactions/comments
@@ -268,7 +272,9 @@ export const GithubInstallCommand = cmd({
268272

269273
async function promptProvider() {
270274
const priority: Record<string, number> = {
271-
opencode: 0,
275+
// altimate_change start — upstream_fix: provider priority key was "altimate-code"
276+
"altimate-code": 0,
277+
// altimate_change end
272278
anthropic: 1,
273279
openai: 2,
274280
google: 3,
@@ -326,7 +332,9 @@ export const GithubInstallCommand = cmd({
326332
if (installation) return s.stop("GitHub app already installed")
327333

328334
// Open browser
329-
const url = "https://github.com/apps/opencode-agent"
335+
// altimate_change start — upstream_fix: GitHub App slug is altimate-code-agent
336+
const url = "https://github.com/apps/altimate-code-agent"
337+
// altimate_change end
330338
const command =
331339
process.platform === "darwin"
332340
? `open "${url}"`
@@ -378,7 +386,9 @@ export const GithubInstallCommand = cmd({
378386

379387
await Filesystem.write(
380388
path.join(app.root, WORKFLOW_FILE),
381-
`name: opencode
389+
// altimate_change start — upstream_fix: workflow yaml name + job +
390+
// mention triggers should be altimate-code branded
391+
`name: altimate-code
382392
383393
on:
384394
issue_comment:
@@ -387,12 +397,12 @@ on:
387397
types: [created]
388398
389399
jobs:
390-
opencode:
400+
altimate-code:
391401
if: |
392402
contains(github.event.comment.body, ' /oc') ||
393403
startsWith(github.event.comment.body, '/oc') ||
394-
contains(github.event.comment.body, ' /opencode') ||
395-
startsWith(github.event.comment.body, '/opencode')
404+
contains(github.event.comment.body, ' /altimate-code') ||
405+
startsWith(github.event.comment.body, '/altimate-code')
396406
runs-on: ubuntu-latest
397407
permissions:
398408
id-token: write
@@ -405,10 +415,11 @@ jobs:
405415
with:
406416
persist-credentials: false
407417
408-
- name: Run opencode
418+
- name: Run altimate-code
409419
uses: AltimateAI/altimate-code/github@latest${envStr}
410420
with:
411421
model: ${provider}/${model}`,
422+
// altimate_change end
412423
)
413424

414425
prompts.log.success(`Added workflow file: "${WORKFLOW_FILE}"`)
@@ -544,7 +555,7 @@ export const GithubRunCommand = cmd({
544555
await addReaction(commentType)
545556
}
546557

547-
// Setup opencode session
558+
// Setup altimate-code session
548559
const repoData = await fetchRepo()
549560
session = await Session.create({
550561
permission: [
@@ -562,7 +573,7 @@ export const GithubRunCommand = cmd({
562573
await Session.share(session.id)
563574
return session.id.slice(-8)
564575
})()
565-
console.log("opencode session", session.id)
576+
console.log("altimate-code session", session.id)
566577

567578
// Handle event types:
568579
// REPO_EVENTS (schedule, workflow_dispatch): no issue/PR context, output to logs/PR only
@@ -784,7 +795,7 @@ export const GithubRunCommand = cmd({
784795
}
785796

786797
const reviewContext = getReviewCommentContext()
787-
const mentions = (process.env["MENTIONS"] || "/opencode,/oc")
798+
const mentions = (process.env["MENTIONS"] || "/altimate-code,/oc")
788799
.split(",")
789800
.map((m) => m.trim().toLowerCase())
790801
.filter(Boolean)
@@ -930,7 +941,7 @@ export const GithubRunCommand = cmd({
930941
}
931942

932943
async function chat(message: string, files: PromptFiles = []) {
933-
console.log("Sending message to opencode...")
944+
console.log("Sending message to altimate-code...")
934945

935946
const result = await SessionPrompt.prompt({
936947
sessionID: session.id,
@@ -1026,7 +1037,7 @@ export const GithubRunCommand = cmd({
10261037

10271038
async function getOidcToken() {
10281039
try {
1029-
return await core.getIDToken("opencode-github-action")
1040+
return await core.getIDToken("altimate-code-github-action")
10301041
} catch (error) {
10311042
console.error("Failed to get OIDC token:", error instanceof Error ? error.message : error)
10321043
throw new Error(
@@ -1128,9 +1139,9 @@ export const GithubRunCommand = cmd({
11281139
.join("")
11291140
if (type === "schedule" || type === "dispatch") {
11301141
const hex = crypto.randomUUID().slice(0, 6)
1131-
return `opencode/${type}-${hex}-${timestamp}`
1142+
return `altimate-code/${type}-${hex}-${timestamp}`
11321143
}
1133-
return `opencode/${type}${issueId}-${timestamp}`
1144+
return `altimate-code/${type}${issueId}-${timestamp}`
11341145
}
11351146

11361147
async function pushToNewBranch(summary: string, branch: string, commit: boolean, isSchedule: boolean) {
@@ -1402,9 +1413,9 @@ export const GithubRunCommand = cmd({
14021413
const titleAlt = encodeURIComponent(session.title.substring(0, 50))
14031414
const title64 = Buffer.from(session.title.substring(0, 700), "utf8").toString("base64")
14041415

1405-
return `<a href="${shareBaseUrl}/s/${shareId}"><img width="200" alt="${titleAlt}" src="https://social-cards.sst.dev/opencode-share/${title64}.png?model=${providerID}/${modelID}&version=${session.version}&id=${shareId}" /></a>\n`
1416+
return `<a href="${shareBaseUrl}/s/${shareId}"><img width="200" alt="${titleAlt}" src="https://social-cards.sst.dev/altimate-code-share/${title64}.png?model=${providerID}/${modelID}&version=${session.version}&id=${shareId}" /></a>\n`
14061417
})()
1407-
const shareUrl = shareId ? `[opencode session](${shareBaseUrl}/s/${shareId})&nbsp;&nbsp;|&nbsp;&nbsp;` : ""
1418+
const shareUrl = shareId ? `[altimate-code session](${shareBaseUrl}/s/${shareId})&nbsp;&nbsp;|&nbsp;&nbsp;` : ""
14081419
return `\n\n${image}${shareUrl}[github run](${runUrl})`
14091420
}
14101421

@@ -1465,7 +1476,7 @@ query($owner: String!, $repo: String!, $number: Int!) {
14651476
return [
14661477
"<github_action_context>",
14671478
"You are running as a GitHub Action. Important:",
1468-
"- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response",
1479+
"- Git push and PR creation are handled AUTOMATICALLY by the altimate-code infrastructure after your response",
14691480
"- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities",
14701481
"- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically",
14711482
"- Focus only on the code changes and your analysis/response",
@@ -1603,7 +1614,7 @@ query($owner: String!, $repo: String!, $number: Int!) {
16031614
return [
16041615
"<github_action_context>",
16051616
"You are running as a GitHub Action. Important:",
1606-
"- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response",
1617+
"- Git push and PR creation are handled AUTOMATICALLY by the altimate-code infrastructure after your response",
16071618
"- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities",
16081619
"- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically",
16091620
"- Focus only on the code changes and your analysis/response",

packages/opencode/src/cli/cmd/mcp.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@ export const McpAuthCommand = cmd({
168168

169169
if (oauthServers.length === 0) {
170170
prompts.log.warn("No OAuth-capable MCP servers configured")
171-
prompts.log.info("Remote MCP servers support OAuth by default. Add a remote server in opencode.json:")
171+
// altimate_change start — upstream_fix: branding regression
172+
prompts.log.info("Remote MCP servers support OAuth by default. Add a remote server in altimate-code.json:")
173+
// altimate_change end
172174
prompts.log.info(`
173175
"mcp": {
174176
"my-server": {
@@ -387,21 +389,31 @@ export const McpLogoutCommand = cmd({
387389
})
388390

389391
async function resolveConfigPath(baseDir: string, global = false) {
390-
// Check for existing config files (prefer .jsonc over .json, check .opencode/ subdirectory too)
391-
const candidates = [path.join(baseDir, "opencode.json"), path.join(baseDir, "opencode.jsonc")]
392+
// altimate_change start — upstream_fix: bridge merge wrote new MCP entries to
393+
// opencode.json. Mirror main's behavior: prefer altimate-code.json (primary),
394+
// accept opencode.json (fallback) for existing installs that have it.
395+
const CONFIG_FILENAMES = ["altimate-code.json", "opencode.json", "opencode.jsonc"]
396+
const candidates: string[] = []
392397

393398
if (!global) {
394-
candidates.push(path.join(baseDir, ".opencode", "opencode.json"), path.join(baseDir, ".opencode", "opencode.jsonc"))
399+
// Subdirectory configs first — that's where existing project configs typically live
400+
candidates.push(
401+
...CONFIG_FILENAMES.map((f) => path.join(baseDir, ".altimate-code", f)),
402+
...CONFIG_FILENAMES.map((f) => path.join(baseDir, ".opencode", f)),
403+
)
395404
}
396405

406+
candidates.push(...CONFIG_FILENAMES.map((f) => path.join(baseDir, f)))
407+
397408
for (const candidate of candidates) {
398409
if (await Filesystem.exists(candidate)) {
399410
return candidate
400411
}
401412
}
402413

403-
// Default to opencode.json if none exist
414+
// Default to altimate-code.json (root) when nothing exists yet
404415
return candidates[0]
416+
// altimate_change end
405417
}
406418

407419
async function addMcpToConfig(name: string, mcpConfig: Config.Mcp, configPath: string) {
@@ -565,7 +577,9 @@ export const McpAddCommand = cmd({
565577
if (type === "local") {
566578
const command = await prompts.text({
567579
message: "Enter command to run",
568-
placeholder: "e.g., opencode x @modelcontextprotocol/server-filesystem",
580+
// altimate_change start — upstream_fix: branding regression
581+
placeholder: "e.g., altimate x @modelcontextprotocol/server-filesystem",
582+
// altimate_change end
569583
validate: (x) => (x && x.length > 0 ? undefined : "Required"),
570584
})
571585
if (prompts.isCancel(command)) throw new UI.CancelledError()
@@ -799,7 +813,7 @@ export const McpDebugCommand = cmd({
799813
params: {
800814
protocolVersion: "2024-11-05",
801815
capabilities: {},
802-
clientInfo: { name: "opencode-debug", version: Installation.VERSION },
816+
clientInfo: { name: "altimate-code-debug", version: Installation.VERSION },
803817
},
804818
id: 1,
805819
}),
@@ -840,7 +854,7 @@ export const McpDebugCommand = cmd({
840854

841855
try {
842856
const client = new Client({
843-
name: "opencode-debug",
857+
name: "altimate-code-debug",
844858
version: Installation.VERSION,
845859
})
846860
await client.connect(transport)

packages/opencode/src/cli/cmd/plug.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export type PlugDeps = {
2828
readText: (file: string) => Promise<string>
2929
write: (file: string, text: string) => Promise<void>
3030
exists: (file: string) => Promise<boolean>
31-
files: (dir: string, name: "opencode" | "tui") => string[]
31+
files: (dir: string, name: "altimate-code" | "opencode" | "tui") => string[]
3232
global: string
3333
}
3434

packages/opencode/src/cli/cmd/serve.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ import { Installation } from "../../installation"
99
export const ServeCommand = cmd({
1010
command: "serve",
1111
builder: (yargs) => withNetworkOptions(yargs),
12-
describe: "starts a headless opencode server",
12+
// altimate_change start — upstream_fix: branding regression in describe + log line
13+
describe: "starts a headless altimate-code server",
1314
handler: async (args) => {
1415
if (!Flag.OPENCODE_SERVER_PASSWORD) {
1516
console.log("Warning: OPENCODE_SERVER_PASSWORD is not set; server is unsecured.")
1617
}
1718
const opts = await resolveNetworkOptions(args)
1819
const server = await Server.listen(opts)
19-
console.log(`opencode server listening on http://${server.hostname}:${server.port}`)
20+
console.log(`altimate-code server listening on http://${server.hostname}:${server.port}`)
21+
// altimate_change end
2022

2123
await new Promise(() => {})
2224
await server.stop()

packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ import { useTheme } from "../context/theme"
77
import { Keybind } from "@/util/keybind"
88
import { TextAttributes } from "@opentui/core"
99
import { useSDK } from "@tui/context/sdk"
10+
// altimate_change start — upstream_fix: bridge merge replaced Log.Default.error
11+
// with console.error inside the TUI process. console output corrupts the TUI
12+
// render. Restore main's structured logger.
13+
import { Log } from "@/util/log"
14+
// altimate_change end
1015

1116
function Status(props: { enabled: boolean; loading: boolean }) {
1217
const { theme } = useTheme()
@@ -61,10 +66,10 @@ export function DialogMcp() {
6166
if (status.data) {
6267
sync.set("mcp", status.data)
6368
} else {
64-
console.error("Failed to refresh MCP status: no data returned")
69+
Log.Default.error("Failed to refresh MCP status: no data returned")
6570
}
6671
} catch (error) {
67-
console.error("Failed to toggle MCP:", error)
72+
Log.Default.error("Failed to toggle MCP", { error })
6873
} finally {
6974
setLoading(null)
7075
}

packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ export function DialogStatus() {
8080
<Match when={item.status === "failed" && item}>{(val) => val().error}</Match>
8181
<Match when={item.status === "disabled"}>Disabled in configuration</Match>
8282
<Match when={(item.status as string) === "needs_auth"}>
83-
Needs authentication (run: opencode mcp auth {key})
83+
{/* altimate_change start — upstream_fix: branding regression */}
84+
Needs authentication (run: altimate mcp auth {key})
85+
{/* altimate_change end */}
8486
</Match>
8587
<Match when={(item.status as string) === "needs_client_registration" && item}>
8688
{(val) => (val() as { error: string }).error}

packages/opencode/src/cli/cmd/tui/component/dialog-workspace-list.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ import { useToast } from "../ui/toast"
99
import { useKeybind } from "../context/keybind"
1010
import { DialogSessionList } from "./workspace/dialog-session-list"
1111
import { setTimeout as sleep } from "node:timers/promises"
12+
// altimate_change start — upstream_fix: bridge merge replaced Log.Default with
13+
// console.log inside the TUI. console output corrupts the TUI render. There was
14+
// also a stray `console.log(JSON.stringify(result, null, 2))` debug-print of
15+
// every workspace creation result. Restore main's structured logging.
16+
import { Log } from "@/util/log"
17+
// altimate_change end
1218

1319
function scoped(sdk: ReturnType<typeof useSDK>, sync: ReturnType<typeof useSync>, workspaceID?: string) {
1420
return createOpencodeClient({
@@ -116,10 +122,9 @@ function DialogWorkspaceCreate(props: { onSelect: (workspaceID: string) => Promi
116122
setCreating(type)
117123

118124
const result = await sdk.client.experimental.workspace.create({ type, branch: null }).catch((err) => {
119-
console.log(err)
125+
Log.Default.error("workspace creation failed", { error: err })
120126
return undefined
121127
})
122-
console.log(JSON.stringify(result, null, 2))
123128
const workspace = result?.data
124129
if (!workspace) {
125130
setCreating(undefined)
@@ -129,6 +134,7 @@ function DialogWorkspaceCreate(props: { onSelect: (workspaceID: string) => Promi
129134
})
130135
return
131136
}
137+
Log.Default.info("workspace created", { workspaceId: workspace.id })
132138
await sync.workspace.sync()
133139
await props.onSelect(workspace.id)
134140
setCreating(undefined)

packages/opencode/src/cli/cmd/tui/component/error-component.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ export function ErrorComponent(props: {
4343
}
4444

4545
if (props.error.message) {
46-
issueURL.searchParams.set("title", `opentui: fatal: ${props.error.message}`)
46+
// altimate_change start — upstream_fix: prefix said "opentui: fatal:"; we file
47+
// bugs against AltimateAI/altimate-code, so use that prefix instead.
48+
issueURL.searchParams.set("title", `altimate-code: fatal: ${props.error.message}`)
49+
// altimate_change end
4750
}
4851

4952
if (props.error.stack) {

packages/opencode/src/cli/cmd/tui/context/route.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { createStore } from "solid-js/store"
22
import { createSimpleContext } from "./helper"
33
import type { PromptInfo } from "../component/prompt/history"
4+
// altimate_change start — upstream_fix: bridge merge dropped the navigate debug log
5+
import { Log } from "@/util/log"
6+
// altimate_change end
47

58
export type HomeRoute = {
69
type: "home"
@@ -38,6 +41,9 @@ export const { use: useRoute, provider: RouteProvider } = createSimpleContext({
3841
return store
3942
},
4043
navigate(route: Route) {
44+
// altimate_change start — upstream_fix: navigation debug log was dropped
45+
Log.Default.debug("navigate", { route })
46+
// altimate_change end
4147
setStore(route)
4248
},
4349
}

0 commit comments

Comments
 (0)