diff --git a/canvas/src/components/mobile/MobileApp.tsx b/canvas/src/components/mobile/MobileApp.tsx index a527a5ef..f9608d1f 100644 --- a/canvas/src/components/mobile/MobileApp.tsx +++ b/canvas/src/components/mobile/MobileApp.tsx @@ -20,6 +20,7 @@ import { MobileMe } from "./MobileMe"; import { MobileSpawn } from "./MobileSpawn"; import { usePalette } from "./palette"; import { MobileAccentProvider } from "./palette-context"; +import { SearchDialog } from "@/components/SearchDialog"; type Route = "home" | "canvas" | "detail" | "chat" | "comms" | "me"; @@ -204,6 +205,8 @@ export function MobileApp() { {showTabBar && } {showSpawn && setShowSpawn(false)} />} + + ); diff --git a/workspace-server/internal/memory/pgplugin/store_test.go b/workspace-server/internal/memory/pgplugin/store_test.go index 0e3160d4..ac025f3f 100644 --- a/workspace-server/internal/memory/pgplugin/store_test.go +++ b/workspace-server/internal/memory/pgplugin/store_test.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "errors" + "regexp" "strings" "testing" "time" @@ -313,8 +314,10 @@ func TestStore_PatchNamespace_DualFields(t *testing.T) { db, mock := setupMockDB(t) store := NewStore(db) exp := time.Now().Add(time.Hour).UTC() - // sqlmock matches by query string; we verify the query uses $2 and $3. - mock.ExpectQuery("UPDATE memory_namespaces SET expires_at = \\$2, metadata = \\$3 WHERE name = \\$1"). + // QueryMatcherRegexp (default): expectQuery is a regex. We verify the + // query uses $2 and $3 for the dual-field case by checking the full + // query pattern. regexp.QuoteMeta handles the $ escaping correctly. + mock.ExpectQuery(regexp.QuoteMeta("UPDATE memory_namespaces SET expires_at = $2, metadata = $3 WHERE name = $1")). WithArgs("workspace:abc", sqlmock.AnyArg(), sqlmock.AnyArg()). WillReturnRows(sqlmock.NewRows([]string{"name", "kind", "expires_at", "metadata", "created_at"}). AddRow("workspace:abc", "workspace", exp, []byte(`{}`), time.Now()))