diff --git a/.agents/skills/mock-slack-testing/SKILL.md b/.agents/skills/mock-slack-testing/SKILL.md index 46d2cbc54..afb316c7f 100644 --- a/.agents/skills/mock-slack-testing/SKILL.md +++ b/.agents/skills/mock-slack-testing/SKILL.md @@ -42,9 +42,9 @@ INSERT INTO slack_installations (organization_id, team_id, team_name, app_id, bo VALUES ('', 'TROOMOTE', 'roomote-mock', 'AMOCK', 'BROOMOTE', 'xoxb-mock-token', '', true) ON CONFLICT (team_id) DO NOTHING; --- Seed user mapping for mock user UDAN +-- Seed user mapping for mock user UGRACE INSERT INTO slack_user_mappings (slack_user_id, slack_team_id, user_id, organization_id) -VALUES ('UDAN', 'TROOMOTE', '', '') +VALUES ('UGRACE', 'TROOMOTE', '', '') ON CONFLICT ON CONSTRAINT slack_user_mappings_unique DO NOTHING; ``` @@ -103,7 +103,7 @@ curl -s -X POST http://127.0.0.1:3012/mock/events \ "event": { "type": "app_mention", "channel": "C123ABC456", - "user": "UDAN", + "user": "UGRACE", "text": "<@BROOMOTE> !fast what file handles Slack mentions?", "ts": "1710000000.000200", "channel_type": "channel" diff --git a/.agents/skills/mock-telegram-testing/SKILL.md b/.agents/skills/mock-telegram-testing/SKILL.md index 345c70d03..f45e351e7 100644 --- a/.agents/skills/mock-telegram-testing/SKILL.md +++ b/.agents/skills/mock-telegram-testing/SKILL.md @@ -22,7 +22,7 @@ Telegram has no threads: conversation continuity is inferred from **chat id (+ f | Example scenario | `packages/communication/scripts/mock-telegram.example.json` | | Webhook secret source | `Env.R_TELEGRAM_WEBHOOK_SECRET` from dotenvx | | Mock bot identity | `roomote_mock_bot` (id `7000000001`) | -| Mock linked user | Telegram user id `111000111` (`dan_mock`) | +| Mock linked user | Telegram user id `111000111` (`grace_mock`) | ## Step 1: Seed the database @@ -41,7 +41,7 @@ Then seed (adjust user_id from the query above): ```sql -- Link mock Telegram user 111000111 to a local Roomote user INSERT INTO telegram_user_mappings (telegram_user_id, telegram_chat_id, telegram_username, user_id) -VALUES ('111000111', '111000111', 'dan_mock', '') +VALUES ('111000111', '111000111', 'grace_mock', '') ON CONFLICT ON CONSTRAINT telegram_user_mappings_unique DO NOTHING; ``` @@ -92,8 +92,8 @@ curl -s -X POST http://127.0.0.1:3013/mock/events \ -d '{ "kind": "message", "message": { - "chat": { "id": 111000111, "type": "private", "first_name": "Dan" }, - "from": { "id": 111000111, "first_name": "Dan", "username": "dan_mock" }, + "chat": { "id": 111000111, "type": "private", "first_name": "Grace" }, + "from": { "id": 111000111, "first_name": "Grace", "username": "grace_mock" }, "text": "!fast what file handles Telegram webhooks?" } }' @@ -104,8 +104,8 @@ curl -s -X POST http://127.0.0.1:3013/mock/events \ -d '{ "kind": "message", "message": { - "chat": { "id": 111000111, "type": "private", "first_name": "Dan" }, - "from": { "id": 111000111, "first_name": "Dan", "username": "dan_mock" }, + "chat": { "id": 111000111, "type": "private", "first_name": "Grace" }, + "from": { "id": 111000111, "first_name": "Grace", "username": "grace_mock" }, "text": "also check the retry logic please" } }' @@ -117,7 +117,7 @@ curl -s -X POST http://127.0.0.1:3013/mock/events \ "kind": "callback_query", "callbackQuery": { "id": "cbq-manual-1", - "from": { "id": 111000111, "first_name": "Dan", "username": "dan_mock" }, + "from": { "id": 111000111, "first_name": "Grace", "username": "grace_mock" }, "data": "cancel_task:", "message": { "message_id": 42, "chat": { "id": 111000111, "type": "private" } } } diff --git a/apps/api/src/handlers/ado/__tests__/getAdoAutomationTargets.test.ts b/apps/api/src/handlers/ado/__tests__/getAdoAutomationTargets.test.ts index 8f6f51a60..ec4cf90a1 100644 --- a/apps/api/src/handlers/ado/__tests__/getAdoAutomationTargets.test.ts +++ b/apps/api/src/handlers/ado/__tests__/getAdoAutomationTargets.test.ts @@ -250,8 +250,8 @@ describe('isRoomoteAdoIdentity', () => { // Regression: a bare `@roomote` substring check treated every user in a // `roomote.*` Entra tenant as Roomote's own bot and dropped their // mentions. - expect(isRoomoteAdoIdentity('dan@roomote.onmicrosoft.com')).toBe(false); + expect(isRoomoteAdoIdentity('grace@roomote.onmicrosoft.com')).toBe(false); expect(isRoomoteAdoIdentity('alice@roomote.dev')).toBe(false); - expect(isRoomoteAdoIdentity('Dan Riccio')).toBe(false); + expect(isRoomoteAdoIdentity('Grace Hopper')).toBe(false); }); }); diff --git a/apps/api/src/handlers/ado/__tests__/handleComment.test.ts b/apps/api/src/handlers/ado/__tests__/handleComment.test.ts index 5e921dee7..523ca35cf 100644 --- a/apps/api/src/handlers/ado/__tests__/handleComment.test.ts +++ b/apps/api/src/handlers/ado/__tests__/handleComment.test.ts @@ -349,8 +349,8 @@ describe('handleAdoComment', () => { comment: { author: { id: 'ado-user-2', - uniqueName: 'dan@roomote.onmicrosoft.com', - displayName: 'Dan Riccio', + uniqueName: 'grace@roomote.onmicrosoft.com', + displayName: 'Grace Hopper', }, }, }), diff --git a/apps/api/src/handlers/ado/__tests__/normalizeCommentWebhook.test.ts b/apps/api/src/handlers/ado/__tests__/normalizeCommentWebhook.test.ts index 0c4bb1b41..579130958 100644 --- a/apps/api/src/handlers/ado/__tests__/normalizeCommentWebhook.test.ts +++ b/apps/api/src/handlers/ado/__tests__/normalizeCommentWebhook.test.ts @@ -30,7 +30,7 @@ const flatCommentPayload = { parentCommentId: 0, content: '@roomote please summarize this change', commentType: 'text', - author: { id: 'user-1', displayName: 'Dan Riccio' }, + author: { id: 'user-1', displayName: 'Grace Hopper' }, _links: { self: { href: 'https://dev.azure.com/roomote/_apis/git/repositories/5c210c4f-f090-4f1c-a860-12ed1a7a307a/pullRequests/2/threads/2/comments/1', diff --git a/apps/api/src/handlers/ado/getAdoAutomationTargets.ts b/apps/api/src/handlers/ado/getAdoAutomationTargets.ts index e9e31d68a..039082a18 100644 --- a/apps/api/src/handlers/ado/getAdoAutomationTargets.ts +++ b/apps/api/src/handlers/ado/getAdoAutomationTargets.ts @@ -50,7 +50,7 @@ export function isRoomoteAdoIdentity(identityName: string): boolean { // Match Roomote's own bot by its identity name/handle only. A bare // `@roomote` substring check also matched every human whose Azure DevOps // uniqueName is an email in a `roomote.*` tenant (e.g. - // `dan@roomote.onmicrosoft.com`), which silently dropped their `@roomote` + // `grace@roomote.onmicrosoft.com`), which silently dropped their `@roomote` // PR comment mentions. The comment path additionally guards against // Roomote's own posts with `isDeploymentTokenAuthor`, which resolves the // exact deployment identity rather than guessing from the name. diff --git a/apps/api/src/handlers/tasks/__tests__/sendMessageToTask.test.ts b/apps/api/src/handlers/tasks/__tests__/sendMessageToTask.test.ts index ab11bdfcc..54ea8405a 100644 --- a/apps/api/src/handlers/tasks/__tests__/sendMessageToTask.test.ts +++ b/apps/api/src/handlers/tasks/__tests__/sendMessageToTask.test.ts @@ -494,8 +494,8 @@ describe('sendMessageToTask', () => { it('passes the resolved display name to the worker for GitHub PR follow-up sendPrompt messages', async () => { mockFindLatestTaskRun.mockResolvedValue(createActiveRun()); mockUserFindFirst.mockResolvedValue({ - name: 'Matt Rubens', - email: 'matt@example.com', + name: 'Ada Lovelace', + email: 'ada@example.com', }); const result = await sendMessageToTask({ @@ -512,7 +512,7 @@ describe('sendMessageToTask', () => { expect(mockTrackLatestUserMessageForSlackQuote).not.toHaveBeenCalled(); expect(mockSendPromptMutate).toHaveBeenCalledWith({ prompt: 'Route this through the existing PR task.', - userName: 'Matt Rubens', + userName: 'Ada Lovelace', }); }); @@ -548,8 +548,8 @@ describe('sendMessageToTask', () => { it('skips API-side Slack quote tracking for GitHub PR follow-up steering messages but passes the resolved display name to the worker', async () => { mockFindLatestTaskRun.mockResolvedValue(createActiveRun()); mockUserFindFirst.mockResolvedValue({ - name: 'Matt Rubens', - email: 'matt@example.com', + name: 'Ada Lovelace', + email: 'ada@example.com', }); const result = await steerMessageToTask({ @@ -567,7 +567,7 @@ describe('sendMessageToTask', () => { expect(mockUserFindFirst).toHaveBeenCalledWith(expect.anything()); expect(mockSteerTaskMutate).toHaveBeenCalledWith({ prompt: 'Route this through the existing PR task.', - userName: 'Matt Rubens', + userName: 'Ada Lovelace', }); }); diff --git a/apps/dev/src/__tests__/doctor.test.ts b/apps/dev/src/__tests__/doctor.test.ts index 5640b0cee..806680ff5 100644 --- a/apps/dev/src/__tests__/doctor.test.ts +++ b/apps/dev/src/__tests__/doctor.test.ts @@ -83,7 +83,7 @@ function mockFetch( function mockExeca({ containers = ['roomote-postgres', 'roomote-redis', 'roomote-minio'], pm2Status = 'online', - publicUrl = 'https://roomote-matt.ngrok.app', + publicUrl = 'https://roomote-example.ngrok.app', publicUrlLocation = 'nested', runtimeTooling = true, includeDefaultAuth = true, @@ -203,7 +203,7 @@ describe('runDoctor', () => { expect.objectContaining({ name: 'Public callback URL', status: 'pass', - detail: 'https://roomote-matt.ngrok.app', + detail: 'https://roomote-example.ngrok.app', }), ); expect(checks).toContainEqual( @@ -337,7 +337,7 @@ describe('runDoctor', () => { name: 'Teams app callback', status: 'pass', detail: expect.stringContaining( - 'Azure Bot messaging endpoint https://roomote-matt.ngrok.app/api/webhooks/teams', + 'Azure Bot messaging endpoint https://roomote-example.ngrok.app/api/webhooks/teams', ), }), ); @@ -346,7 +346,7 @@ describe('runDoctor', () => { expect.objectContaining({ method: 'POST' }), ); expect(global.fetch).toHaveBeenCalledWith( - 'https://roomote-matt.ngrok.app/api/webhooks/teams', + 'https://roomote-example.ngrok.app/api/webhooks/teams', expect.objectContaining({ method: 'POST', body: '{}' }), ); }); @@ -416,7 +416,7 @@ describe('runDoctor', () => { env: name === 'roomote-web' ? { - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', R_SLACK_CLIENT_ID: 'slack-client-id', R_SLACK_CLIENT_SECRET: 'slack-client-secret', R_MODEL: 'openrouter/openai/gpt-5.4', @@ -535,7 +535,7 @@ describe('runDoctor', () => { }); it('warns when sign-in and model providers are not configured yet', async () => { - mockExeca({ publicUrl: 'https://roomote-matt.ngrok.app' }); + mockExeca({ publicUrl: 'https://roomote-example.ngrok.app' }); mockedExeca.mockImplementation(async (command, args) => { if (command === 'docker') { return { @@ -560,7 +560,7 @@ describe('runDoctor', () => { env: name === 'roomote-web' ? { - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', } : {}, }, @@ -614,7 +614,7 @@ describe('runDoctor', () => { env: name === 'roomote-web' ? { - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', R_SLACK_CLIENT_ID: 'slack-client-id', R_MODEL: 'openrouter/openai/gpt-5.4', OPENROUTER_API_KEY: 'openrouter-key', diff --git a/apps/dev/src/services/__tests__/ecosystem.test.ts b/apps/dev/src/services/__tests__/ecosystem.test.ts index 2801d036c..6e6380d3b 100644 --- a/apps/dev/src/services/__tests__/ecosystem.test.ts +++ b/apps/dev/src/services/__tests__/ecosystem.test.ts @@ -125,19 +125,20 @@ describe('ecosystem.config.js', () => { it('uses R_PUBLIC_URL as the local app callback base', () => { process.env = { ...originalEnv, - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', }; const apps = loadEcosystemApps(); const webApp = apps.find((app) => app.name === 'roomote-web'); expect(webApp?.env).toMatchObject({ - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', - R_APP_URL: 'https://roomote-matt.ngrok.app', - SLACK_REDIRECT_URI: 'https://roomote-matt.ngrok.app/api/slack/callback', - SLACK_AUTH_URI: 'https://roomote-matt.ngrok.app/api/slack/auth', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', + R_APP_URL: 'https://roomote-example.ngrok.app', + SLACK_REDIRECT_URI: + 'https://roomote-example.ngrok.app/api/slack/callback', + SLACK_AUTH_URI: 'https://roomote-example.ngrok.app/api/slack/auth', R_LINEAR_REDIRECT_URI: - 'https://roomote-matt.ngrok.app/api/linear/callback', + 'https://roomote-example.ngrok.app/api/linear/callback', }); }); diff --git a/apps/dev/src/services/__tests__/env.test.ts b/apps/dev/src/services/__tests__/env.test.ts index 38d796e07..6635b4cb3 100644 --- a/apps/dev/src/services/__tests__/env.test.ts +++ b/apps/dev/src/services/__tests__/env.test.ts @@ -41,7 +41,7 @@ describe('EnvService.checkEnvVars', () => { }); it('creates an empty local env file and allows setup to start without model config', async () => { - process.env.R_PUBLIC_URL = 'https://roomote-matt.ngrok.app'; + process.env.R_PUBLIC_URL = 'https://roomote-example.ngrok.app'; await expect(EnvService.checkEnvVars()).resolves.toBeUndefined(); @@ -67,7 +67,7 @@ describe('EnvService.checkEnvVars', () => { fs.writeFileSync( path.join(tempRoot, '.env.local'), [ - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app', + 'R_PUBLIC_URL=https://roomote-example.ngrok.app', 'R_MODEL=openrouter/openai/gpt-5.4', '', ].join('\n'), @@ -82,7 +82,7 @@ describe('EnvService.checkEnvVars', () => { fs.writeFileSync( path.join(tempRoot, '.env.local'), [ - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app', + 'R_PUBLIC_URL=https://roomote-example.ngrok.app', 'R_MODEL=gpt-5.4', 'OPENAI_API_KEY=openai-key', '', @@ -98,7 +98,7 @@ describe('EnvService.checkEnvVars', () => { fs.writeFileSync( path.join(tempRoot, '.env.local'), [ - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app', + 'R_PUBLIC_URL=https://roomote-example.ngrok.app', 'R_MODEL=openrouter/openai/gpt-5.4', 'OPENROUTER_API_KEY=openrouter-key', '', @@ -112,7 +112,7 @@ describe('EnvService.checkEnvVars', () => { fs.writeFileSync( path.join(tempRoot, '.env.local'), [ - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app', + 'R_PUBLIC_URL=https://roomote-example.ngrok.app', 'R_MODEL=vercel/openai/gpt-5.4', 'AI_GATEWAY_API_KEY=vercel-key', '', @@ -126,7 +126,7 @@ describe('EnvService.checkEnvVars', () => { fs.writeFileSync( path.join(tempRoot, '.env.local'), [ - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app', + 'R_PUBLIC_URL=https://roomote-example.ngrok.app', 'R_MODEL=custom-provider/custom-model', 'R_MODEL_ENV_KEYS=CUSTOM_PROVIDER_API_KEY', 'CUSTOM_PROVIDER_API_KEY=custom-key', @@ -140,7 +140,7 @@ describe('EnvService.checkEnvVars', () => { it('accepts model config from process env', async () => { process.env.R_MODEL = 'openrouter/openai/gpt-5.4'; process.env.OPENROUTER_API_KEY = 'openrouter-key'; - process.env.R_PUBLIC_URL = 'https://roomote-matt.ngrok.app'; + process.env.R_PUBLIC_URL = 'https://roomote-example.ngrok.app'; await expect(EnvService.checkEnvVars()).resolves.toBeUndefined(); }); diff --git a/apps/dev/src/services/__tests__/pm2.test.ts b/apps/dev/src/services/__tests__/pm2.test.ts index 2ae278f3b..2321f27f3 100644 --- a/apps/dev/src/services/__tests__/pm2.test.ts +++ b/apps/dev/src/services/__tests__/pm2.test.ts @@ -24,7 +24,7 @@ describe('PM2Service.startServices', () => { reset: false, verbose: false, autoNgrok: false, - publicUrl: 'https://roomote-matt.ngrok.app', + publicUrl: 'https://roomote-example.ngrok.app', skipWorkerReleaseBuild: false, useRelease: false, workerReleaseChannel: 'stable', @@ -63,8 +63,8 @@ describe('PM2Service.startServices', () => { const pm2Env = getPm2Env(); expect(pm2Env).toMatchObject({ - R_PUBLIC_URL: 'https://roomote-matt.ngrok.app', - R_APP_URL: 'https://roomote-matt.ngrok.app', + R_PUBLIC_URL: 'https://roomote-example.ngrok.app', + R_APP_URL: 'https://roomote-example.ngrok.app', USE_WORKER_RELEASE: 'false', }); expect(pm2Env).not.toHaveProperty('WORKER_RELEASE_CHANNEL'); diff --git a/apps/dev/src/services/env.ts b/apps/dev/src/services/env.ts index ba9f449d7..42a58ed03 100644 --- a/apps/dev/src/services/env.ts +++ b/apps/dev/src/services/env.ts @@ -129,7 +129,7 @@ export class EnvService { 'domain, Cloudflare Tunnel, Tailscale Funnel, or your own domain). For\n' + 'an ngrok domain, pnpm dev starts and reuses the tunnel for you:\n' + '\n' + - 'R_PUBLIC_URL=https://roomote-matt.ngrok.app\n', + 'R_PUBLIC_URL=https://your-ngrok-domain.ngrok.app\n', ); } diff --git a/apps/web/src/app/(authenticated)/analytics/AnalyticsStackedBarChart.client.test.tsx b/apps/web/src/app/(authenticated)/analytics/AnalyticsStackedBarChart.client.test.tsx index 94344421f..461424be5 100644 --- a/apps/web/src/app/(authenticated)/analytics/AnalyticsStackedBarChart.client.test.tsx +++ b/apps/web/src/app/(authenticated)/analytics/AnalyticsStackedBarChart.client.test.tsx @@ -8,7 +8,7 @@ const mockRechartsState = vi.hoisted(() => ({ tooltipProps: null as Record | null, barProps: [] as Array>, tooltipPayload: [ - { name: 'Raphi Winkler', value: 2, color: '#ff9900' }, + { name: 'Radia Perlman', value: 2, color: '#ff9900' }, { name: 'John Richmond', value: 1, color: '#3366ff' }, ] as Array<{ name: string; value: number; color: string }>, })); @@ -61,7 +61,7 @@ const CHART: AnalyticsChartResponse = { viewBy: 'user', total: 3, series: [ - { key: 'raphi', label: 'Raphi Winkler', total: 2 }, + { key: 'radia', label: 'Radia Perlman', total: 2 }, { key: 'john', label: 'John Richmond', total: 1 }, ], buckets: [ @@ -70,7 +70,7 @@ const CHART: AnalyticsChartResponse = { label: 'Mar 27', total: 3, segments: { - raphi: 2, + radia: 2, john: 1, }, }, @@ -138,7 +138,7 @@ describe('AnalyticsStackedBarChart', () => { mockRechartsState.tooltipProps = null; mockRechartsState.barProps = []; mockRechartsState.tooltipPayload = [ - { name: 'Raphi Winkler', value: 2, color: '#ff9900' }, + { name: 'Radia Perlman', value: 2, color: '#ff9900' }, { name: 'John Richmond', value: 1, color: '#3366ff' }, ]; }); @@ -207,9 +207,9 @@ describe('AnalyticsStackedBarChart', () => { it('sorts user tooltip labels alphabetically', () => { mockRechartsState.tooltipPayload = [ - { name: 'Raphi Winkler', value: 2, color: '#ff9900' }, - { name: 'Chris Estreich', value: 4, color: '#8250df' }, - { name: 'Dan Riccio', value: 3, color: '#6e7781' }, + { name: 'Radia Perlman', value: 2, color: '#ff9900' }, + { name: 'Edsger Dijkstra', value: 4, color: '#8250df' }, + { name: 'Grace Hopper', value: 3, color: '#6e7781' }, ]; const { container } = render( @@ -233,7 +233,7 @@ describe('AnalyticsStackedBarChart', () => { container.querySelectorAll('.scroll-thin .truncate'), ).map((element) => element.textContent); - expect(names).toEqual(['Chris Estreich', 'Dan Riccio', 'Raphi Winkler']); + expect(names).toEqual(['Edsger Dijkstra', 'Grace Hopper', 'Radia Perlman']); }); it('keeps status tooltip labels in status order', () => { @@ -321,7 +321,7 @@ describe('AnalyticsStackedBarChart', () => { chart={{ ...CHART, series: [ - { key: 'user:user_123', label: 'Bruno Bergher', total: 2 }, + { key: 'user:user_123', label: 'Alan Turing', total: 2 }, { key: 'github:hannesrudolph', label: '@hannesrudolph', total: 1 }, ], buckets: [ @@ -354,7 +354,7 @@ describe('AnalyticsStackedBarChart', () => { ).toEqual([ { dataKey: 'user:user_123', - name: 'Bruno Bergher', + name: 'Alan Turing', }, { dataKey: 'github:hannesrudolph', diff --git a/apps/web/src/app/(sandbox)/task/[taskId]/hooks/__tests__/HistoricalSandboxProvider.client.test.tsx b/apps/web/src/app/(sandbox)/task/[taskId]/hooks/__tests__/HistoricalSandboxProvider.client.test.tsx index c7672278e..3ad09eac7 100644 --- a/apps/web/src/app/(sandbox)/task/[taskId]/hooks/__tests__/HistoricalSandboxProvider.client.test.tsx +++ b/apps/web/src/app/(sandbox)/task/[taskId]/hooks/__tests__/HistoricalSandboxProvider.client.test.tsx @@ -94,8 +94,8 @@ describe('HistoricalSandboxProvider', () => { { id: 'user-1', userId: 'user-1', - userName: 'Matt', - userEmail: 'matt@example.com', + userName: 'Ada', + userEmail: 'ada@example.com', userImageUrl: null, taskId: 'task-123', ts: 1, diff --git a/apps/web/src/components/settings/UserProfileSection.test.tsx b/apps/web/src/components/settings/UserProfileSection.test.tsx index 038053bf2..8e1d38f98 100644 --- a/apps/web/src/components/settings/UserProfileSection.test.tsx +++ b/apps/web/src/components/settings/UserProfileSection.test.tsx @@ -74,16 +74,16 @@ describe('UserProfileSection', () => { render( , ); expect(screen.getByText('Profile')).toBeInTheDocument(); - expect(screen.getByText('Matt User')).toBeInTheDocument(); - expect(screen.getByText('matt@example.com')).toBeInTheDocument(); + expect(screen.getByText('Ada User')).toBeInTheDocument(); + expect(screen.getByText('ada@example.com')).toBeInTheDocument(); expect(screen.queryByLabelText('Password')).not.toBeInTheDocument(); expect( screen.queryByRole('button', { name: 'Edit' }), @@ -120,9 +120,9 @@ describe('UserProfileSection', () => { , ); @@ -134,8 +134,8 @@ describe('UserProfileSection', () => { fireEvent.click(screen.getByRole('button', { name: 'Edit' })); - expect(screen.getByLabelText('Name')).toHaveValue('Matt User'); - expect(screen.getByLabelText('Email')).toHaveValue('matt@example.com'); + expect(screen.getByLabelText('Name')).toHaveValue('Ada User'); + expect(screen.getByLabelText('Email')).toHaveValue('ada@example.com'); expect(screen.getByLabelText('Current password')).toBeInTheDocument(); expect(screen.getByLabelText('New password')).toBeInTheDocument(); expect(screen.getByLabelText('Confirm password')).toBeInTheDocument(); @@ -146,9 +146,9 @@ describe('UserProfileSection', () => { , ); @@ -191,9 +191,9 @@ describe('UserProfileSection', () => { , ); @@ -218,9 +218,9 @@ describe('UserProfileSection', () => { , ); @@ -245,9 +245,9 @@ describe('UserProfileSection', () => { , ); diff --git a/apps/web/src/components/system/primitives/avatar.test.tsx b/apps/web/src/components/system/primitives/avatar.test.tsx index 80ecd2e98..fe2da3a8f 100644 --- a/apps/web/src/components/system/primitives/avatar.test.tsx +++ b/apps/web/src/components/system/primitives/avatar.test.tsx @@ -4,13 +4,13 @@ import { Avatar, getInitials } from './avatar'; describe('getInitials', () => { it('uses the first letters of up to two name parts', () => { - expect(getInitials('Matt Rubens')).toBe('MR'); - expect(getInitials('Bruno')).toBe('B'); + expect(getInitials('Grace Hopper')).toBe('GH'); + expect(getInitials('Alan')).toBe('A'); expect(getInitials(' Ada Lovelace Byron ')).toBe('AL'); }); it('falls back to the first email character when name is missing', () => { - expect(getInitials(null, 'matt@roomote.test')).toBe('M'); + expect(getInitials(null, 'grace@roomote.test')).toBe('G'); expect(getInitials(' ', 'local@roomote.dev')).toBe('L'); }); @@ -23,11 +23,15 @@ describe('getInitials', () => { describe('Avatar', () => { it('renders initials when no image is available', () => { const { container } = render( - , + , ); - expect(container.firstChild).toHaveAttribute('aria-label', 'Matt Rubens'); - expect(screen.getByText('MR')).toBeInTheDocument(); + expect(container.firstChild).toHaveAttribute('aria-label', 'Grace Hopper'); + expect(screen.getByText('GH')).toBeInTheDocument(); expect(document.querySelector('img')).toBeNull(); }); @@ -42,8 +46,8 @@ describe('Avatar', () => { render( , ); @@ -51,15 +55,15 @@ describe('Avatar', () => { expect(image).not.toBeNull(); expect(image).toHaveAttribute('src', 'https://example.com/avatar.png'); expect(image).toHaveAttribute('alt', ''); - expect(screen.queryByText('MR')).not.toBeInTheDocument(); + expect(screen.queryByText('GH')).not.toBeInTheDocument(); }); it('falls back to initials when the image fails to load', () => { render( , ); @@ -68,8 +72,8 @@ describe('Avatar', () => { fireEvent.error(image!); expect(document.querySelector('img')).toBeNull(); - expect(screen.getByText('MR')).toBeInTheDocument(); - expect(screen.queryByText('Matt Rubens')).not.toBeInTheDocument(); + expect(screen.getByText('GH')).toBeInTheDocument(); + expect(screen.queryByText('Grace Hopper')).not.toBeInTheDocument(); }); it('falls back to initials when the image is already complete and broken', async () => { @@ -99,16 +103,16 @@ describe('Avatar', () => { render( , ); await waitFor(() => { - expect(screen.getByText('MR')).toBeInTheDocument(); + expect(screen.getByText('GH')).toBeInTheDocument(); }); expect(document.querySelector('img')).toBeNull(); - expect(screen.queryByText('Matt Rubens')).not.toBeInTheDocument(); + expect(screen.queryByText('Grace Hopper')).not.toBeInTheDocument(); } finally { if (completeDescriptor) { Object.defineProperty( diff --git a/apps/web/src/components/tasks/TaskCard.client.test.tsx b/apps/web/src/components/tasks/TaskCard.client.test.tsx index 751e18722..12b16acca 100644 --- a/apps/web/src/components/tasks/TaskCard.client.test.tsx +++ b/apps/web/src/components/tasks/TaskCard.client.test.tsx @@ -140,8 +140,8 @@ function createTask(overrides?: Partial): TaskCardTask { timestamp: Date.now() / 1000, user: { id: 'user-1', - name: 'Matt Rubens', - email: 'matt@roomote.test', + name: 'Ada Lovelace', + email: 'ada@roomote.test', imageUrl: 'https://example.com/avatar.png', }, taskRun: { @@ -172,11 +172,11 @@ describe('TaskCard', () => { />, ); - expect(screen.getByText('Matt Rubens')).toBeInTheDocument(); + expect(screen.getByText('Ada Lovelace')).toBeInTheDocument(); expect(screen.getByText('started a task')).toBeInTheDocument(); expect(screen.queryByText(/with Agent/i)).not.toBeInTheDocument(); expect(screen.queryByText(/completed/i)).not.toBeInTheDocument(); - expect(screen.getByRole('img', { name: 'Matt Rubens' })).toHaveAttribute( + expect(screen.getByRole('img', { name: 'Ada Lovelace' })).toHaveAttribute( 'src', 'https://example.com/avatar.png', ); @@ -258,8 +258,8 @@ describe('TaskCard', () => { task={createTask({ user: { id: 'user-3', - name: 'Matt Rubens', - email: 'matt@roomote.test', + name: 'Ada Lovelace', + email: 'ada@roomote.test', imageUrl: '', }, })} @@ -269,9 +269,9 @@ describe('TaskCard', () => { />, ); - expect(screen.getByText('Matt Rubens')).toBeInTheDocument(); + expect(screen.getByText('Ada Lovelace')).toBeInTheDocument(); expect(screen.queryByRole('img')).not.toBeInTheDocument(); - expect(screen.getByText('MR')).toBeInTheDocument(); + expect(screen.getByText('AL')).toBeInTheDocument(); }); it('shows relative time from the last activity timestamp when present', () => { diff --git a/apps/web/src/lib/server/auth.test.ts b/apps/web/src/lib/server/auth.test.ts index bf7044c8c..64d572b13 100644 --- a/apps/web/src/lib/server/auth.test.ts +++ b/apps/web/src/lib/server/auth.test.ts @@ -155,15 +155,15 @@ describe('getAuth', () => { return Response.json({ authenticatedUser: { id: 'connection-user-guid', - providerDisplayName: 'Matt Rubens', - uniqueName: 'Matt@Roomote.OnMicrosoft.com', + providerDisplayName: 'Ada Lovelace', + uniqueName: 'Ada@Roomote.OnMicrosoft.com', }, }); } return Response.json({ - displayName: 'Matt Rubens', - emailAddress: 'matt@roomote.onmicrosoft.com', + displayName: 'Ada Lovelace', + emailAddress: 'ada@roomote.onmicrosoft.com', id: 'profile-user-guid', }); }); @@ -204,10 +204,10 @@ describe('getAuth', () => { // connectionData id — that id namespace never matches the org identity id // Azure DevOps delivers as the comment author on PR webhooks. expect(profile).toEqual({ - email: 'matt@roomote.onmicrosoft.com', + email: 'ada@roomote.onmicrosoft.com', emailVerified: false, - id: 'matt@roomote.onmicrosoft.com', - name: 'Matt Rubens', + id: 'ada@roomote.onmicrosoft.com', + name: 'Ada Lovelace', }); }); }); diff --git a/apps/web/src/trpc/commands/tasks/__tests__/generate-summary.test.ts b/apps/web/src/trpc/commands/tasks/__tests__/generate-summary.test.ts index 5381fa715..bbd61213a 100644 --- a/apps/web/src/trpc/commands/tasks/__tests__/generate-summary.test.ts +++ b/apps/web/src/trpc/commands/tasks/__tests__/generate-summary.test.ts @@ -96,7 +96,7 @@ describe('generateTaskSummaryCommand', () => { mockDbSelect.limit.mockResolvedValue([ { taskUserId: 'user-summary-test', - userName: 'Bruno Bergher', + userName: 'Alan Turing', userEmail: 'bruno@example.com', }, ]); @@ -187,14 +187,14 @@ describe('generateTaskSummaryCommand', () => { const prompt = mockGenerateTrackedNonTaskObject.mock.calls[0]?.[0] ?.prompt as string; expect(prompt).toContain( - 'Bruno Bergher (task starter): Please help me implement task run message persistence.', + 'Alan Turing (task starter): Please help me implement task run message persistence.', ); expect(prompt).toContain( 'Roomote: Implemented Postgres persistence and wired historical hydration.', ); // Verify the prompt uses the task creator's name, not the viewer's - expect(prompt).toContain('The task was started by Bruno'); + expect(prompt).toContain('The task was started by Alan'); expect(prompt).not.toContain('Alice'); expect(prompt).not.toContain('User:'); expect(prompt).not.toContain('Assistant:'); @@ -325,7 +325,7 @@ describe('generateTaskSummaryCommand', () => { const prompt = mockGenerateTrackedNonTaskObject.mock.calls[0]?.[0] ?.prompt as string; expect(prompt).toContain( - 'Bruno Bergher (task starter): Please summarize the actual conversation only.', + 'Alan Turing (task starter): Please summarize the actual conversation only.', ); expect(prompt).toContain('Roomote: Assistant message 0'); expect(prompt).not.toContain( diff --git a/apps/worker/src/commands/utils/execute-task-run.test.ts b/apps/worker/src/commands/utils/execute-task-run.test.ts index 7bb0837c0..c4ac7b997 100644 --- a/apps/worker/src/commands/utils/execute-task-run.test.ts +++ b/apps/worker/src/commands/utils/execute-task-run.test.ts @@ -140,7 +140,7 @@ describe('executeTaskRun', () => { workerEnvFromProcessEnvMock.mockReturnValue({ authToken: 'run-token-123', - trpcUrl: 'https://api-cte.ngrok.dev', + trpcUrl: 'https://api-example.ngrok.dev', appEnv: 'development', setRuntimeEnv: vi.fn(), buildUserFacingEnv: vi.fn(() => ({ diff --git a/apps/worker/src/run-task/__tests__/communication-message-prompt.test.ts b/apps/worker/src/run-task/__tests__/communication-message-prompt.test.ts index f7dded5a2..8fc768caa 100644 --- a/apps/worker/src/run-task/__tests__/communication-message-prompt.test.ts +++ b/apps/worker/src/run-task/__tests__/communication-message-prompt.test.ts @@ -8,13 +8,13 @@ describe('wrapCommunicationMessage', () => { expect( wrapCommunicationMessage('teams', { ts: 'activity-1', - user: 'Matt Rubens', + user: 'Ada Lovelace', channel: '19:conversation@thread.v2', threadTs: 'activity-root', text: 'Please also update the docs', }), ).toBe( - '\nPlease also update the docs\n', + '\nPlease also update the docs\n', ); }); diff --git a/apps/worker/src/sandbox-server/__tests__/server.test.ts b/apps/worker/src/sandbox-server/__tests__/server.test.ts index 55514ba95..7d54bde7d 100644 --- a/apps/worker/src/sandbox-server/__tests__/server.test.ts +++ b/apps/worker/src/sandbox-server/__tests__/server.test.ts @@ -119,7 +119,7 @@ describe('sandbox server transports', () => { const response = await fetch(`http://127.0.0.1:${sandbox.port}/ws/trpc`, { method: 'OPTIONS', headers: { - Origin: 'https://roomote-matt.ngrok.app', + Origin: 'https://roomote-example.ngrok.app', 'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Private-Network': 'true', }, diff --git a/apps/worker/src/sandbox-server/procedures/__tests__/slackQuoteTracking.test.ts b/apps/worker/src/sandbox-server/procedures/__tests__/slackQuoteTracking.test.ts index e7599324a..ce447ae2a 100644 --- a/apps/worker/src/sandbox-server/procedures/__tests__/slackQuoteTracking.test.ts +++ b/apps/worker/src/sandbox-server/procedures/__tests__/slackQuoteTracking.test.ts @@ -211,7 +211,7 @@ describe('trackLatestUserMessageForSlackThreadQuote', () => { await trackLatestUserMessageForSlackThreadQuote({ runId: 1, text: wrappedMessage, - userName: 'Matt Rubens', + userName: 'Ada Lovelace', logPrefix: 'testProcedure', }); @@ -223,7 +223,7 @@ describe('trackLatestUserMessageForSlackThreadQuote', () => { { runId: 1, text: '@roomote please fix the failing CI test', - userName: 'Matt Rubens', + userName: 'Ada Lovelace', }, ); }); @@ -237,7 +237,7 @@ describe('trackLatestUserMessageForSlackThreadQuote', () => { await trackLatestUserMessageForSlackThreadQuote({ runId: 1, text: malformedMessage, - userName: 'Matt Rubens', + userName: 'Ada Lovelace', logPrefix: 'testProcedure', }); @@ -249,7 +249,7 @@ describe('trackLatestUserMessageForSlackThreadQuote', () => { { runId: 1, text: 'This envelope is missing the requested-follow-up block so it will not fully parse.', - userName: 'Matt Rubens', + userName: 'Ada Lovelace', }, ); }); diff --git a/packages/ado/src/__tests__/api.test.ts b/packages/ado/src/__tests__/api.test.ts index aeacba75f..1efef1bd8 100644 --- a/packages/ado/src/__tests__/api.test.ts +++ b/packages/ado/src/__tests__/api.test.ts @@ -767,11 +767,11 @@ describe('Azure DevOps API helpers', () => { describe('normalizeAdoLinkedAccountKey', () => { it('lowercases and trims so the link and webhook sides agree', () => { - expect(normalizeAdoLinkedAccountKey(' Dan@Roomote.OnMicrosoft.com ')).toBe( - 'dan@roomote.onmicrosoft.com', - ); - expect(normalizeAdoLinkedAccountKey('dan@roomote.onmicrosoft.com')).toBe( - 'dan@roomote.onmicrosoft.com', + expect( + normalizeAdoLinkedAccountKey(' Grace@Roomote.OnMicrosoft.com '), + ).toBe('grace@roomote.onmicrosoft.com'); + expect(normalizeAdoLinkedAccountKey('grace@roomote.onmicrosoft.com')).toBe( + 'grace@roomote.onmicrosoft.com', ); }); diff --git a/packages/cloud-agents/evals/authorship/datasets/convoluted-and-ambiguous.yaml b/packages/cloud-agents/evals/authorship/datasets/convoluted-and-ambiguous.yaml index 4b0988d28..bff79f834 100644 --- a/packages/cloud-agents/evals/authorship/datasets/convoluted-and-ambiguous.yaml +++ b/packages/cloud-agents/evals/authorship/datasets/convoluted-and-ambiguous.yaml @@ -27,7 +27,7 @@ - description: 'Authorship - Slack human-created backend work assigns Bruno to author and PR owner' vars: authorshipInstructions: | - For human-created Slack tasks in acme/backend, make Bruno Bergher both the author and the PR owner. + For human-created Slack tasks in acme/backend, make Alan Turing both the author and the PR owner. availableRepositoriesKey: standard availableUsersKey: brunoAlice expected: @@ -124,7 +124,7 @@ vars: authorshipInstructions: | 1. For GitHub-started tasks in acme/frontend, keep Roomote as the author and assign PRs to Alice Nguyen. - 2. For human-created Slack tasks in acme/backend, keep the matched human as the author and assign PRs to Bruno Bergher. + 2. For human-created Slack tasks in acme/backend, keep the matched human as the author and assign PRs to Alan Turing. availableRepositoriesKey: standard availableUsersKey: brunoAlice expected: @@ -254,7 +254,7 @@ - description: 'Authorship - concrete rule can survive alongside an ambiguous remainder' vars: authorshipInstructions: | - For GitHub-started tasks in Roomote/example-app, make Bruno Bergher the author. + For GitHub-started tasks in Roomote/example-app, make Alan Turing the author. For anything urgent, use whoever is on call. availableRepositoriesKey: standard availableUsersKey: brunoAlice @@ -277,7 +277,7 @@ - description: 'Authorship - repo-specific exception can coexist with a broader Slack rule' vars: authorshipInstructions: | - For human-created Slack tasks, keep the matched human as the author and assign PRs to Bruno Bergher. + For human-created Slack tasks, keep the matched human as the author and assign PRs to Alan Turing. But for human-created Slack tasks in acme/frontend, keep Roomote as the author and assign PRs to Alice Nguyen. availableRepositoriesKey: standard availableUsersKey: brunoAlice diff --git a/packages/cloud-agents/evals/authorship/prompts/compile-authorship.ts b/packages/cloud-agents/evals/authorship/prompts/compile-authorship.ts index 0594288f2..b66190338 100644 --- a/packages/cloud-agents/evals/authorship/prompts/compile-authorship.ts +++ b/packages/cloud-agents/evals/authorship/prompts/compile-authorship.ts @@ -79,7 +79,7 @@ const USER_FIXTURES: Record = { brunoOnly: [ { userId: 'user-bruno', - displayName: 'Bruno Bergher', + displayName: 'Alan Turing', githubLogin: 'brunobergher', githubUserId: 101, }, @@ -95,7 +95,7 @@ const USER_FIXTURES: Record = { brunoAlice: [ { userId: 'user-bruno', - displayName: 'Bruno Bergher', + displayName: 'Alan Turing', githubLogin: 'brunobergher', githubUserId: 101, }, @@ -109,7 +109,7 @@ const USER_FIXTURES: Record = { brunoSam: [ { userId: 'user-bruno', - displayName: 'Bruno Bergher', + displayName: 'Alan Turing', githubLogin: 'brunobergher', githubUserId: 101, }, @@ -123,7 +123,7 @@ const USER_FIXTURES: Record = { defaultWithSam: [ { userId: 'user-bruno', - displayName: 'Bruno Bergher', + displayName: 'Alan Turing', githubLogin: 'brunobergher', githubUserId: 101, }, diff --git a/packages/cloud-agents/src/server/router/__tests__/router-helpers.test.ts b/packages/cloud-agents/src/server/router/__tests__/router-helpers.test.ts index f6a2d33ba..e393b3153 100644 --- a/packages/cloud-agents/src/server/router/__tests__/router-helpers.test.ts +++ b/packages/cloud-agents/src/server/router/__tests__/router-helpers.test.ts @@ -365,7 +365,7 @@ describe('router helpers', () => { it('includes Roomote lookup support only for Slack permalink references', () => { expect( shouldIncludeRoomoteRouterLookup( - 'https://roomote.slack.com/archives/C08NY3HU5AR/p1776819983463289', + 'https://example.slack.com/archives/C0EXAMPLE01/p1776819983463289', ), ).toBe(true); expect( diff --git a/packages/communication/evals/scenarios/telegram-duplicate-delivery.json b/packages/communication/evals/scenarios/telegram-duplicate-delivery.json index 47916c4a1..6dd801720 100644 --- a/packages/communication/evals/scenarios/telegram-duplicate-delivery.json +++ b/packages/communication/evals/scenarios/telegram-duplicate-delivery.json @@ -11,8 +11,10 @@ "username": "roomote_mock_bot", "first_name": "Roomote" }, - "chats": [{ "id": 111000111, "type": "private", "first_name": "Dan" }], - "users": [{ "id": 111000111, "first_name": "Dan", "username": "dan_mock" }] + "chats": [{ "id": 111000111, "type": "private", "first_name": "Grace" }], + "users": [ + { "id": 111000111, "first_name": "Grace", "username": "grace_mock" } + ] }, "events": [ { @@ -22,11 +24,11 @@ "updateId": "$U1", "message": { "message_id": "$M1", - "chat": { "id": 111000111, "type": "private", "first_name": "Dan" }, + "chat": { "id": 111000111, "type": "private", "first_name": "Grace" }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "!fast what does the /new command do on Telegram?" } @@ -39,11 +41,11 @@ "updateId": "$U1", "message": { "message_id": "$M1", - "chat": { "id": 111000111, "type": "private", "first_name": "Dan" }, + "chat": { "id": 111000111, "type": "private", "first_name": "Grace" }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "!fast what does the /new command do on Telegram?" } diff --git a/packages/communication/evals/scenarios/telegram-fast-answer.json b/packages/communication/evals/scenarios/telegram-fast-answer.json index df90b6ec7..950c73eb5 100644 --- a/packages/communication/evals/scenarios/telegram-fast-answer.json +++ b/packages/communication/evals/scenarios/telegram-fast-answer.json @@ -13,8 +13,10 @@ "username": "roomote_mock_bot", "first_name": "Roomote" }, - "chats": [{ "id": 111000111, "type": "private", "first_name": "Dan" }], - "users": [{ "id": 111000111, "first_name": "Dan", "username": "dan_mock" }] + "chats": [{ "id": 111000111, "type": "private", "first_name": "Grace" }], + "users": [ + { "id": 111000111, "first_name": "Grace", "username": "grace_mock" } + ] }, "events": [ { @@ -24,11 +26,11 @@ "updateId": "$U1", "message": { "message_id": "$M1", - "chat": { "id": 111000111, "type": "private", "first_name": "Dan" }, + "chat": { "id": 111000111, "type": "private", "first_name": "Grace" }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "!fast what file handles Telegram webhooks?" } diff --git a/packages/communication/evals/scenarios/telegram-group-mention-gating.json b/packages/communication/evals/scenarios/telegram-group-mention-gating.json index 4f8efdd48..78f1505c6 100644 --- a/packages/communication/evals/scenarios/telegram-group-mention-gating.json +++ b/packages/communication/evals/scenarios/telegram-group-mention-gating.json @@ -15,7 +15,9 @@ "chats": [ { "id": -100222000222, "type": "supergroup", "title": "roomote-dev" } ], - "users": [{ "id": 111000111, "first_name": "Dan", "username": "dan_mock" }] + "users": [ + { "id": 111000111, "first_name": "Grace", "username": "grace_mock" } + ] }, "events": [ { @@ -32,8 +34,8 @@ }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "just chatting with the team, nothing for the bot here" } @@ -53,8 +55,8 @@ }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "@roomote_mock_bot !fast which env var stores the Telegram bot token?" } diff --git a/packages/communication/scripts/mock-telegram.example.json b/packages/communication/scripts/mock-telegram.example.json index a5e610f25..a94cae408 100644 --- a/packages/communication/scripts/mock-telegram.example.json +++ b/packages/communication/scripts/mock-telegram.example.json @@ -13,7 +13,7 @@ { "id": 111000111, "type": "private", - "first_name": "Dan" + "first_name": "Grace" }, { "id": -100222000222, @@ -24,8 +24,8 @@ "users": [ { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" } ] }, @@ -36,12 +36,12 @@ "chat": { "id": 111000111, "type": "private", - "first_name": "Dan" + "first_name": "Grace" }, "from": { "id": 111000111, - "first_name": "Dan", - "username": "dan_mock" + "first_name": "Grace", + "username": "grace_mock" }, "text": "!fast what file handles Telegram webhooks?" } diff --git a/packages/communication/src/__tests__/mock-telegram-server.test.ts b/packages/communication/src/__tests__/mock-telegram-server.test.ts index bdcfae1f8..a0f6effc5 100644 --- a/packages/communication/src/__tests__/mock-telegram-server.test.ts +++ b/packages/communication/src/__tests__/mock-telegram-server.test.ts @@ -26,16 +26,16 @@ function baseState(): MockTelegramState { first_name: 'Roomote', }, chats: [ - { id: 111000111, type: 'private', first_name: 'Dan' }, + { id: 111000111, type: 'private', first_name: 'Grace' }, { id: -100222000222, type: 'supergroup', title: 'roomote-dev' }, ], - users: [{ id: 111000111, first_name: 'Dan', username: 'dan_mock' }], + users: [{ id: 111000111, first_name: 'Grace', username: 'grace_mock' }], messages: [ { message_id: 1000, chat_id: '111000111', date: 1_750_000_000, - from: { id: 111000111, first_name: 'Dan', username: 'dan_mock' }, + from: { id: 111000111, first_name: 'Grace', username: 'grace_mock' }, text: 'please look into the flaky login test', reactions: [], }, @@ -409,8 +409,8 @@ describe('MockTelegramServer', () => { const first = await server.dispatch({ kind: 'message', message: { - chat: { id: 111000111, type: 'private', first_name: 'Dan' }, - from: { id: 111000111, first_name: 'Dan', username: 'dan_mock' }, + chat: { id: 111000111, type: 'private', first_name: 'Grace' }, + from: { id: 111000111, first_name: 'Grace', username: 'grace_mock' }, text: '/new fix the flaky login test', }, }); @@ -440,8 +440,8 @@ describe('MockTelegramServer', () => { const second = await server.dispatch({ kind: 'message', message: { - chat: { id: 111000111, type: 'private', first_name: 'Dan' }, - from: { id: 111000111, first_name: 'Dan' }, + chat: { id: 111000111, type: 'private', first_name: 'Grace' }, + from: { id: 111000111, first_name: 'Grace' }, text: 'thanks!', }, }); diff --git a/packages/communication/src/__tests__/teams-activity.test.ts b/packages/communication/src/__tests__/teams-activity.test.ts index 051e02e77..b5b8e2e60 100644 --- a/packages/communication/src/__tests__/teams-activity.test.ts +++ b/packages/communication/src/__tests__/teams-activity.test.ts @@ -184,7 +184,7 @@ describe('Teams activity helpers', () => { const parsed = parseTeamsActivity({ type: 'message', id: 'activity-2', - text: 'Roomote ask Matt Rubens about this', + text: 'Roomote ask Ada Lovelace about this', recipient: { id: '28:bot', name: 'Roomote', @@ -204,10 +204,10 @@ describe('Teams activity helpers', () => { }, { type: 'mention', - text: 'Matt Rubens', + text: 'Ada Lovelace', mentioned: { id: '29:user', - name: 'Matt Rubens', + name: 'Ada Lovelace', }, }, ], @@ -221,7 +221,7 @@ describe('Teams activity helpers', () => { expect( teamsActivityToQueuedCommunicationMessage(parsed.data), ).toMatchObject({ - text: 'ask @Matt Rubens about this', + text: 'ask @Ada Lovelace about this', }); }); diff --git a/packages/sdk/src/client/index.test.ts b/packages/sdk/src/client/index.test.ts index ae3ffcc20..9307b798e 100644 --- a/packages/sdk/src/client/index.test.ts +++ b/packages/sdk/src/client/index.test.ts @@ -332,7 +332,7 @@ describe('createWorkerFetchWithRetry', () => { }); const response = await workerFetch( - 'https://web-dan.ngrok.dev/_roomote-api/trpc/taskRuns.dequeue?batch=1', + 'https://web-example.ngrok.dev/_roomote-api/trpc/taskRuns.dequeue?batch=1', { method: 'POST', body: '{"0":{"json":{"runId":68}}}', diff --git a/packages/slack/evals/scenarios/slack-duplicate-delivery.json b/packages/slack/evals/scenarios/slack-duplicate-delivery.json index f6ae6fb45..8460e307a 100644 --- a/packages/slack/evals/scenarios/slack-duplicate-delivery.json +++ b/packages/slack/evals/scenarios/slack-duplicate-delivery.json @@ -20,15 +20,15 @@ "name": "product-debug", "type": "public_channel", "isMember": true, - "members": ["UDAN", "BROOMOTE"] + "members": ["UGRACE", "BROOMOTE"] } ], "users": [ { "id": "BROOMOTE", "name": "roomote", "displayName": "Roomote" }, { - "id": "UDAN", - "name": "dan", - "displayName": "Dan Riccio", + "id": "UGRACE", + "name": "grace", + "displayName": "Grace Hopper", "email": "local@roomote.dev" } ], @@ -43,7 +43,7 @@ "event": { "type": "app_mention", "channel": "C123ABC456", - "user": "UDAN", + "user": "UGRACE", "text": "<@BROOMOTE> !fast In one short paragraph: what is idempotency in API design?", "ts": "$TS1", "channel_type": "channel" @@ -58,7 +58,7 @@ "event": { "type": "app_mention", "channel": "C123ABC456", - "user": "UDAN", + "user": "UGRACE", "text": "<@BROOMOTE> !fast In one short paragraph: what is idempotency in API design?", "ts": "$TS1", "channel_type": "channel" diff --git a/packages/slack/evals/scenarios/slack-fast-answer.json b/packages/slack/evals/scenarios/slack-fast-answer.json index 759bf4baf..b3458901b 100644 --- a/packages/slack/evals/scenarios/slack-fast-answer.json +++ b/packages/slack/evals/scenarios/slack-fast-answer.json @@ -21,15 +21,15 @@ "name": "product-debug", "type": "public_channel", "isMember": true, - "members": ["UDAN", "BROOMOTE"] + "members": ["UGRACE", "BROOMOTE"] } ], "users": [ { "id": "BROOMOTE", "name": "roomote", "displayName": "Roomote" }, { - "id": "UDAN", - "name": "dan", - "displayName": "Dan Riccio", + "id": "UGRACE", + "name": "grace", + "displayName": "Grace Hopper", "email": "local@roomote.dev" } ], @@ -44,7 +44,7 @@ "event": { "type": "app_mention", "channel": "C123ABC456", - "user": "UDAN", + "user": "UGRACE", "text": "<@BROOMOTE> !fast What does HTTP status code 429 mean, and what is the standard way for a client to respond to it?", "ts": "$TS1", "channel_type": "channel" diff --git a/packages/slack/scripts/mock-slack.example.json b/packages/slack/scripts/mock-slack.example.json index 98ced80da..3f4124b7c 100644 --- a/packages/slack/scripts/mock-slack.example.json +++ b/packages/slack/scripts/mock-slack.example.json @@ -19,7 +19,7 @@ "name": "product-debug", "type": "public_channel", "isMember": true, - "members": ["UDAN", "UROOMOTE"] + "members": ["UGRACE", "UROOMOTE"] } ], "users": [ @@ -29,9 +29,9 @@ "displayName": "Roomote" }, { - "id": "UDAN", - "name": "dan", - "displayName": "Dan Riccio", + "id": "UGRACE", + "name": "grace", + "displayName": "Grace Hopper", "email": "local@roomote.dev" } ], @@ -44,7 +44,7 @@ "event": { "type": "app_mention", "channel": "C123ABC456", - "user": "UDAN", + "user": "UGRACE", "text": "<@UROOMOTE> !fast what file handles Slack mentions?", "ts": "1710000000.000100", "channel_type": "channel" diff --git a/packages/slack/src/__tests__/forwarded-message-context.test.ts b/packages/slack/src/__tests__/forwarded-message-context.test.ts index f3ff58b97..6f0dc86d8 100644 --- a/packages/slack/src/__tests__/forwarded-message-context.test.ts +++ b/packages/slack/src/__tests__/forwarded-message-context.test.ts @@ -15,14 +15,14 @@ describe('forwarded-message-context', () => { const context = formatSlackForwardedMessageContext([ { ts: '1776819983.463289', - author_id: 'U01TE3R72D9', - channel_id: 'C08NY3HU5AR', + author_id: 'U0EXAMPLE01', + channel_id: 'C0EXAMPLE01', is_msg_unfurl: true, is_share: true, from_url: - 'https://roomote.slack.com/archives/C08NY3HU5AR/p1776819983463289', - text: 'congratulations on the new direction.', - author_name: 'Elliott Fouts', + 'https://example.slack.com/archives/C0EXAMPLE01/p1776819983463289', + text: 'excited about the roadmap update.', + author_name: 'Annie Easley', footer: 'Slack Conversation', }, ]); @@ -31,11 +31,11 @@ describe('forwarded-message-context', () => { [ 'Forwarded Slack message:', 'Context:', - '- Author: Elliott Fouts', - '- Channel: C08NY3HU5AR', - '- Source: https://roomote.slack.com/archives/C08NY3HU5AR/p1776819983463289', + '- Author: Annie Easley', + '- Channel: C0EXAMPLE01', + '- Source: https://example.slack.com/archives/C0EXAMPLE01/p1776819983463289', 'Text:', - 'congratulations on the new direction.', + 'excited about the roadmap update.', ].join('\n'), ); }); diff --git a/packages/slack/src/__tests__/mock-slack-server.test.ts b/packages/slack/src/__tests__/mock-slack-server.test.ts index d0c5a3d78..bc9d3afe7 100644 --- a/packages/slack/src/__tests__/mock-slack-server.test.ts +++ b/packages/slack/src/__tests__/mock-slack-server.test.ts @@ -440,11 +440,11 @@ describe('MockSlackServer', () => { id: 'C123ABC456', name: 'product-debug', isMember: true, - members: ['UDAN', 'UROOMOTE'], + members: ['UGRACE', 'UROOMOTE'], }, ], users: [ - { id: 'UDAN', name: 'dan', displayName: 'Dan Riccio' }, + { id: 'UGRACE', name: 'grace', displayName: 'Grace Hopper' }, { id: 'UROOMOTE', name: 'roomote', displayName: 'Roomote' }, ], }, @@ -465,7 +465,7 @@ describe('MockSlackServer', () => { expect(firstPageResponse.status).toBe(200); await expect(firstPageResponse.json()).resolves.toEqual({ ok: true, - members: ['UDAN'], + members: ['UGRACE'], response_metadata: { next_cursor: '1' }, }); @@ -499,11 +499,11 @@ describe('MockSlackServer', () => { id: 'C123ABC456', name: 'product-debug', isMember: false, - members: ['UDAN', 'UROOMOTE'], + members: ['UGRACE', 'UROOMOTE'], }, ], users: [ - { id: 'UDAN', name: 'dan', displayName: 'Dan Riccio' }, + { id: 'UGRACE', name: 'grace', displayName: 'Grace Hopper' }, { id: 'UROOMOTE', name: 'roomote', displayName: 'Roomote' }, ], }, diff --git a/packages/slack/src/__tests__/slack-notifier.test.ts b/packages/slack/src/__tests__/slack-notifier.test.ts index 022c48a9c..fbffa0dc2 100644 --- a/packages/slack/src/__tests__/slack-notifier.test.ts +++ b/packages/slack/src/__tests__/slack-notifier.test.ts @@ -1223,8 +1223,8 @@ describe('SlackNotifier', () => { is_share: true, is_msg_unfurl: true, text: 'Forwarded body', - author_name: 'Elliott Fouts', - channel_id: 'C08NY3HU5AR', + author_name: 'Annie Easley', + channel_id: 'C0EXAMPLE01', }, ], }, @@ -1243,8 +1243,8 @@ describe('SlackNotifier', () => { '', 'Forwarded Slack message:', 'Context:', - '- Author: Elliott Fouts', - '- Channel: C08NY3HU5AR', + '- Author: Annie Easley', + '- Channel: C0EXAMPLE01', 'Text:', 'Forwarded body', ].join('\n'),