From d053ff97ab3613a3813eb76604de1435f02607ae Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Thu, 22 Oct 2026 06:04:04 -0700 Subject: [PATCH] refactor: colocate mobile web route and bundle tooling (#32008) --- config/scripts/build-mobile-web-app-bundle.mjs | 4 ++-- .../scripts/build-mobile-web-app-bundle.test.mjs | 6 +++--- .../mobile-web-app-agent-history-render.test.mjs | 4 ++-- .../mobile-web-app-browser-pane-render.test.mjs | 6 +++--- .../mobile-web-app-bundle-dependencies.mjs | 2 +- .../mobile-web-app-bundle-test-fixture.mjs | 2 +- ...-web-app-clipboard-image-resize-render.test.mjs | 4 ++-- .../mobile-web-app-drawer-render.test.mjs | 4 ++-- ...bile-web-app-external-navigation-grant.test.mjs | 6 +++--- .../mobile-web-app-files-external-links.test.mjs | 8 ++++---- .../mobile-web-app-files-render.test.mjs | 4 ++-- .../mobile-web-app-frame-budget-sweep.test.ts | 14 +++++++------- .../mobile-web-app-handoff-grants-render.test.mjs | 4 ++-- .../mobile-web-app-held-press-render.test.mjs | 8 ++++---- .../mobile-web-app-mermaid-render.test.mjs | 4 ++-- ...ile-web-app-module-closure-entrypoints.test.mjs | 2 +- ...obile-web-app-native-chat-visual-links.test.mjs | 7 ++++--- .../mobile-web-app-native-parity-render.test.mjs | 9 +++------ .../mobile-web-app-page-closure-families.mjs | 0 .../mobile-web-app-page-closure-families.test.mjs | 4 ++-- .../mobile-web-app-page-grant-call-sites.mjs | 0 .../mobile-web-app-page-grant-call-sites.test.mjs | 6 +++--- .../mobile-web-app-page-route-modules.mjs | 0 .../mobile-web-app-push-subsystem-closure.test.mjs | 4 ++-- .../mobile-web-app-render.test.mjs | 4 ++-- .../mobile-web-app-rich-markdown-render.test.mjs | 8 ++++---- .../mobile-web-app-route-chunk-closure.mjs | 4 ++-- .../mobile-web-app-route-manifest.mjs | 0 .../mobile-web-app-route-manifest.test.mjs | 2 +- .../mobile-web-app-route-snapshot.mjs | 0 .../mobile-web-app-route-snapshot.test.mjs | 2 +- .../mobile-web-app-safe-area-render.test.mjs | 4 ++-- .../mobile-web-app-screencast-lane-grant.test.mjs | 6 +++--- ...bile-web-app-session-dictation-capture.test.mjs | 12 ++++++------ .../mobile-web-app-session-external-links.test.mjs | 6 +++--- .../mobile-web-app-session-media-picker.test.mjs | 6 +++--- .../mobile-web-app-session-render.test.mjs | 6 +++--- ...obile-web-app-session-terminal-closure.test.mjs | 8 ++++---- .../mobile-web-app-session-terminal-init.test.mjs | 6 +++--- ...bile-web-app-session-webview-consumers.test.mjs | 2 +- ...-web-app-source-control-external-links.test.mjs | 6 +++--- ...mobile-web-app-source-control-keyboard.test.mjs | 2 +- .../mobile-web-app-source-control-render.test.mjs | 6 +++--- ...ile-web-app-source-control-text-inputs.test.mjs | 6 +++--- ...mobile-web-app-stack-transition-render.test.mjs | 6 +++--- .../mobile-web-app-tasks-external-links.test.mjs | 6 +++--- .../mobile-web-app-tasks-render.test.mjs | 4 ++-- .../mobile-web-app-terminal-font-render.test.mjs | 0 ...ile-web-app-terminal-live-input-render.test.mjs | 10 +++++----- .../mobile-web-app-terminal-render-fixture.mjs | 8 ++++---- ...mobile-web-app-terminal-render-fixture.test.mjs | 0 .../mobile-web-app-terminal-render.test.mjs | 4 ++-- .../mobile-web-app-text-input-discovery.test.mjs | 2 +- .../mobile-web-app-working-spinner-render.test.mjs | 6 +++--- .../mobile-web-app-haptics-seam.test.mjs | 4 ++-- .../mobile-web-app-html-preview-render.test.mjs | 2 +- .../mobile-web-app-media-preview-render.test.mjs | 2 +- config/scripts/mobile-web-page-routes.test.mjs | 2 +- .../mobile-web-terminal-engine-closure.test.mjs | 2 +- config/scripts/node-server-change-scope.test.mjs | 2 +- config/scripts/pr-code-change-scope.test.mjs | 2 +- config/scripts/run-mobile-web-app-checks.mjs | 4 ++-- .../browser-screencast-budget-at-the-shell.test.ts | 2 +- .../src/components/pr-sidebar/MermaidDiagram.tsx | 2 +- .../pr-sidebar/pr-comment-card-web-avatar.test.tsx | 2 +- .../rich-markdown-web-document-mount.test.ts | 2 +- mobile/web-entry/web-overrides.json | 2 +- 67 files changed, 141 insertions(+), 143 deletions(-) rename config/scripts/{ => mobile-web-app}/mobile-web-app-agent-history-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-browser-pane-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-bundle-dependencies.mjs (94%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-bundle-test-fixture.mjs (94%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-clipboard-image-resize-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-drawer-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-external-navigation-grant.test.mjs (96%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-files-external-links.test.mjs (92%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-files-render.test.mjs (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-frame-budget-sweep.test.ts (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-handoff-grants-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-held-press-render.test.mjs (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-mermaid-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-module-closure-entrypoints.test.mjs (95%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-native-chat-visual-links.test.mjs (96%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-native-parity-render.test.mjs (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-page-closure-families.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-page-closure-families.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-page-grant-call-sites.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-page-grant-call-sites.test.mjs (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-page-route-modules.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-push-subsystem-closure.test.mjs (96%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-rich-markdown-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-route-chunk-closure.mjs (94%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-route-manifest.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-route-manifest.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-route-snapshot.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-route-snapshot.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-safe-area-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-screencast-lane-grant.test.mjs (95%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-dictation-capture.test.mjs (95%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-external-links.test.mjs (94%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-media-picker.test.mjs (97%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-terminal-closure.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-terminal-init.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-session-webview-consumers.test.mjs (93%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-source-control-external-links.test.mjs (95%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-source-control-keyboard.test.mjs (90%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-source-control-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-source-control-text-inputs.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-stack-transition-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-tasks-external-links.test.mjs (93%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-tasks-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-terminal-font-render.test.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-terminal-live-input-render.test.mjs (98%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-terminal-render-fixture.mjs (96%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-terminal-render-fixture.test.mjs (100%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-terminal-render.test.mjs (99%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-text-input-discovery.test.mjs (88%) rename config/scripts/{ => mobile-web-app}/mobile-web-app-working-spinner-render.test.mjs (95%) diff --git a/config/scripts/build-mobile-web-app-bundle.mjs b/config/scripts/build-mobile-web-app-bundle.mjs index 5ff406dc84b..66462468d2d 100644 --- a/config/scripts/build-mobile-web-app-bundle.mjs +++ b/config/scripts/build-mobile-web-app-bundle.mjs @@ -1,5 +1,5 @@ import { readFile } from 'node:fs/promises' -import { readRouteSnapshot } from './mobile-web-app-route-snapshot.mjs' +import { readRouteSnapshot } from './mobile-web-app/mobile-web-app-route-snapshot.mjs' import { realpathSync } from 'node:fs' import { basename, extname, join, resolve } from 'node:path' import { createRequire } from 'node:module' @@ -21,7 +21,7 @@ import { collectMobileWebAppRoutes, renderMobileWebAppRouteManifest, routePathnameFromKey -} from './mobile-web-app-route-manifest.mjs' +} from './mobile-web-app/mobile-web-app-route-manifest.mjs' import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' const projectDir = fileURLToPath(new URL('../..', import.meta.url)) diff --git a/config/scripts/build-mobile-web-app-bundle.test.mjs b/config/scripts/build-mobile-web-app-bundle.test.mjs index 622a163eb88..1a6b5d77b55 100644 --- a/config/scripts/build-mobile-web-app-bundle.test.mjs +++ b/config/scripts/build-mobile-web-app-bundle.test.mjs @@ -7,7 +7,7 @@ import { readAppBundle, readWrittenBundle, copyWrittenBundle -} from './mobile-web-app-bundle-test-fixture.mjs' +} from './mobile-web-app/mobile-web-app-bundle-test-fixture.mjs' import { MOBILE_WEB_APP_NATIVE_PARITY_STYLE, MOBILE_WEB_APP_ROOT_RESET, @@ -20,7 +20,7 @@ import { import { MOBILE_WEB_APP_ROUTE_ROOT, collectMobileWebAppRouteKeys -} from './mobile-web-app-route-manifest.mjs' +} from './mobile-web-app/mobile-web-app-route-manifest.mjs' import { MOBILE_WEB_APP_BUNDLE_MAX_ENTRY_BYTES, MOBILE_WEB_APP_BUNDLE_MAX_TOTAL_BYTES, @@ -50,7 +50,7 @@ import { MOBILE_WEB_BUNDLE_MAX_ASSET_BYTES, MOBILE_WEB_BUNDLE_MAX_ASSETS } from '../../src/shared/mobile-web-bundle/manifest-contract.js' -import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' +import { mobileWebAppDependenciesPresent } from './mobile-web-app/mobile-web-app-bundle-dependencies.mjs' const projectDir = fileURLToPath(new URL('../..', import.meta.url)) const appDir = join(projectDir, 'mobile', 'app') diff --git a/config/scripts/mobile-web-app-agent-history-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-agent-history-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-agent-history-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-agent-history-render.test.mjs index ea304747d65..73629ddafa7 100644 --- a/config/scripts/mobile-web-app-agent-history-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-agent-history-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -12,7 +12,7 @@ import { readBridgePagePainted, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The agent-history page route in a real browser. diff --git a/config/scripts/mobile-web-app-browser-pane-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-browser-pane-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-browser-pane-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-browser-pane-render.test.mjs index 894ccdecfaa..8f8c6b6d524 100644 --- a/config/scripts/mobile-web-app-browser-pane-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-browser-pane-render.test.mjs @@ -20,7 +20,7 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { @@ -31,9 +31,9 @@ import { readBridgeWindowCaps, readBrowserFrameQuality, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) const HOST_ID = 'render-check-host' const ROUTE = { pathname: '/h' } diff --git a/config/scripts/mobile-web-app-bundle-dependencies.mjs b/config/scripts/mobile-web-app/mobile-web-app-bundle-dependencies.mjs similarity index 94% rename from config/scripts/mobile-web-app-bundle-dependencies.mjs rename to config/scripts/mobile-web-app/mobile-web-app-bundle-dependencies.mjs index 57ec6325033..17b98fa3e6c 100644 --- a/config/scripts/mobile-web-app-bundle-dependencies.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-bundle-dependencies.mjs @@ -2,7 +2,7 @@ import { existsSync } from 'node:fs' import { join } from 'node:path' import { fileURLToPath } from 'node:url' -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) /** * Set by the one CI job that installs mobile dependencies, so a broken install there fails the diff --git a/config/scripts/mobile-web-app-bundle-test-fixture.mjs b/config/scripts/mobile-web-app/mobile-web-app-bundle-test-fixture.mjs similarity index 94% rename from config/scripts/mobile-web-app-bundle-test-fixture.mjs rename to config/scripts/mobile-web-app/mobile-web-app-bundle-test-fixture.mjs index 3846cc4a54e..0abcaeb27bf 100644 --- a/config/scripts/mobile-web-app-bundle-test-fixture.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-bundle-test-fixture.mjs @@ -2,7 +2,7 @@ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { dirname, join } from 'node:path' import { deserialize, serialize } from 'node:v8' -import { bundleMobileWebApp, buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { bundleMobileWebApp, buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' export async function withScratch(run) { const scratch = await mkdtemp(join(tmpdir(), 'orca-mobile-web-app-test-')) diff --git a/config/scripts/mobile-web-app-clipboard-image-resize-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-clipboard-image-resize-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-clipboard-image-resize-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-clipboard-image-resize-render.test.mjs index 891479ac2f5..b20d85d143a 100644 --- a/config/scripts/mobile-web-app-clipboard-image-resize-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-clipboard-image-resize-render.test.mjs @@ -21,9 +21,9 @@ import { createBundleServer, readClipboardImageUploadChunkBase64Chars, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) /** * The budget the run is held to: the chunk the upload path already sends, in base64 characters, diff --git a/config/scripts/mobile-web-app-drawer-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-drawer-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-drawer-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-drawer-render.test.mjs index 843ae221423..d327a3981e3 100644 --- a/config/scripts/mobile-web-app-drawer-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-drawer-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium, webkit } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -12,7 +12,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' const HOST_ROUTE = '/h/render-check-host' const SHELL_HOST = { diff --git a/config/scripts/mobile-web-app-external-navigation-grant.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-external-navigation-grant.test.mjs similarity index 96% rename from config/scripts/mobile-web-app-external-navigation-grant.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-external-navigation-grant.test.mjs index dfb0e267311..a524a137b0e 100644 --- a/config/scripts/mobile-web-app-external-navigation-grant.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-external-navigation-grant.test.mjs @@ -21,15 +21,15 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { PAGE_ROUTE_MODULES, pageRouteModulesCoverTheManifest } from './mobile-web-app-page-route-modules.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip /** The seam as the web build resolves it, and the native sibling the page must never reach. */ diff --git a/config/scripts/mobile-web-app-files-external-links.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-files-external-links.test.mjs similarity index 92% rename from config/scripts/mobile-web-app-files-external-links.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-files-external-links.test.mjs index d3443727b91..f258acf57db 100644 --- a/config/scripts/mobile-web-app-files-external-links.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-files-external-links.test.mjs @@ -14,15 +14,15 @@ */ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' import { EXTERNAL_LINK_SEAM as SEAM, externalLinkOffenders -} from './mobile-web-app/platform-seams/mobile-web-app-external-link-seam.mjs' +} from './platform-seams/mobile-web-app-external-link-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const EXPLORER = 'app/h/[hostId]/files/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-files-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-files-render.test.mjs similarity index 97% rename from config/scripts/mobile-web-app-files-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-files-render.test.mjs index 3e1f52dfd03..3191cdda124 100644 --- a/config/scripts/mobile-web-app-files-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-files-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -11,7 +11,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The file preview's unsaved-draft prompt, in a real browser. diff --git a/config/scripts/mobile-web-app-frame-budget-sweep.test.ts b/config/scripts/mobile-web-app/mobile-web-app-frame-budget-sweep.test.ts similarity index 97% rename from config/scripts/mobile-web-app-frame-budget-sweep.test.ts rename to config/scripts/mobile-web-app/mobile-web-app-frame-budget-sweep.test.ts index beffa67462a..d3d9c804b0f 100644 --- a/config/scripts/mobile-web-app-frame-budget-sweep.test.ts +++ b/config/scripts/mobile-web-app/mobile-web-app-frame-budget-sweep.test.ts @@ -24,7 +24,7 @@ import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium, type Browser, type CDPSession, type Page } from 'playwright-core' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import type { BrowserScreencastFrame } from '../../mobile/src/transport/browser-screencast-protocol' +import type { BrowserScreencastFrame } from '../../../mobile/src/transport/browser-screencast-protocol' /** * The mobile modules load lazily, after the dependency check, never at the top of the file: vite @@ -34,12 +34,12 @@ import type { BrowserScreencastFrame } from '../../mobile/src/transport/browser- */ async function loadSweepModules() { const [request, parameters, caps, fakes, harnessModule, protocol] = await Promise.all([ - import('../../mobile/src/browser/browser-screencast-request.web'), - import('../../mobile/src/browser/browser-screencast-request-parameters'), - import('../../mobile/src/mobile-web-shell/bridge/bridge-caps'), - import('../../mobile/src/mobile-web-shell/bridge-host-test-fakes'), - import('../../mobile/src/mobile-web-shell/bridge-host-test-harness'), - import('../../mobile/src/transport/browser-screencast-protocol') + import('../../../mobile/src/browser/browser-screencast-request.web.ts'), + import('../../../mobile/src/browser/browser-screencast-request-parameters'), + import('../../../mobile/src/mobile-web-shell/bridge/bridge-caps'), + import('../../../mobile/src/mobile-web-shell/bridge-host-test-fakes'), + import('../../../mobile/src/mobile-web-shell/bridge-host-test-harness'), + import('../../../mobile/src/transport/browser-screencast-protocol') ]) return { budgetedMobileViewDeviceScaleFactor: request.budgetedMobileViewDeviceScaleFactor, diff --git a/config/scripts/mobile-web-app-handoff-grants-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-handoff-grants-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-handoff-grants-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-handoff-grants-render.test.mjs index 7195dfc9e17..ab4d8bc2789 100644 --- a/config/scripts/mobile-web-app-handoff-grants-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-handoff-grants-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -11,7 +11,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The in-page hop the sidebar makes, in a browser, under the grants the session actually has. diff --git a/config/scripts/mobile-web-app-held-press-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-held-press-render.test.mjs similarity index 97% rename from config/scripts/mobile-web-app-held-press-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-held-press-render.test.mjs index b7292786e6d..2db60c4ec9f 100644 --- a/config/scripts/mobile-web-app-held-press-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-held-press-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { BROWSER_VIEWPORT_ID, @@ -14,7 +14,7 @@ import { browserPaneProbeRouteSource, commandDockProbeRouteSource, holdDictationProbeRouteSource -} from './mobile-web-app/preview/mobile-web-app-held-press-probe-routes.mjs' +} from './preview/mobile-web-app-held-press-probe-routes.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { createBundleServer, @@ -23,8 +23,8 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' -import { LAYOUT_SOURCE } from './mobile-web-app/preview/mobile-web-app-terminal-probe-route.mjs' +} from './preview/mobile-web-app-render-harness.mjs' +import { LAYOUT_SOURCE } from './preview/mobile-web-app-terminal-probe-route.mjs' /** * Held presses on the page. Held ~500 ms, Android WebView turns a touch into a long-press: it fires diff --git a/config/scripts/mobile-web-app-mermaid-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-mermaid-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-mermaid-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-mermaid-render.test.mjs index ea01dd20536..4a3d0c0ace5 100644 --- a/config/scripts/mobile-web-app-mermaid-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-mermaid-render.test.mjs @@ -28,9 +28,9 @@ import { installCspViolationRecorder, installListenerRecorder, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) const diagramDir = join(mobileDir, 'src/components/pr-sidebar') /** The design's own fixture, so the byte counts in the docstring above name this diagram. */ diff --git a/config/scripts/mobile-web-app-module-closure-entrypoints.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-module-closure-entrypoints.test.mjs similarity index 95% rename from config/scripts/mobile-web-app-module-closure-entrypoints.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-module-closure-entrypoints.test.mjs index c2af5741cda..9bcf7d695fa 100644 --- a/config/scripts/mobile-web-app-module-closure-entrypoints.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-module-closure-entrypoints.test.mjs @@ -2,7 +2,7 @@ import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { expect, it } from 'vitest' -import { mobileWebAppModuleClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppModuleClosure } from '../build-mobile-web-app-bundle.mjs' it('resolves local entry paths against the requested tree and selects browser siblings', async () => { const root = await mkdtemp(join(tmpdir(), 'orca-route-entrypoints-')) diff --git a/config/scripts/mobile-web-app-native-chat-visual-links.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-native-chat-visual-links.test.mjs similarity index 96% rename from config/scripts/mobile-web-app-native-chat-visual-links.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-native-chat-visual-links.test.mjs index 17a48c837dd..9a74e6fa293 100644 --- a/config/scripts/mobile-web-app-native-chat-visual-links.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-native-chat-visual-links.test.mjs @@ -11,7 +11,7 @@ import { createServer } from 'node:http' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium, webkit } from 'playwright-core' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { readShellCsp } from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +import { readShellCsp } from './preview/mobile-web-app-render-harness.mjs' const bundles = mobileWebAppDependenciesPresent() const describeEngines = bundles ? describe : describe.skip @@ -40,9 +40,10 @@ beforeAll(async () => { } // Imported behind the gate: transforming a mobile/ module reads mobile/tsconfig.json, which // extends a package the root-only unit shards do not install (see the session-dictation check). - ;({ buildNativeChatVisualDocument } = await import('../../src/shared/native-chat-visual-shell')) + ;({ buildNativeChatVisualDocument } = + await import('../../../src/shared/native-chat-visual-shell')) ;({ buildMobileNativeChatVisualHostDocument } = - await import('../../mobile/src/session/mobile-native-chat-visual-host-document')) + await import('../../../mobile/src/session/mobile-native-chat-visual-host-document')) const header = await readShellCsp() const sealed = buildNativeChatVisualDocument({ html: VISUAL, channel: 'sealed', theme: THEME }) // The web shell's page, under the header the shell ships, holding the visual as the web sibling does. diff --git a/config/scripts/mobile-web-app-native-parity-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-native-parity-render.test.mjs similarity index 97% rename from config/scripts/mobile-web-app-native-parity-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-native-parity-render.test.mjs index 1f83849d495..a0b49805f05 100644 --- a/config/scripts/mobile-web-app-native-parity-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-native-parity-render.test.mjs @@ -13,14 +13,11 @@ import { MOBILE_WEB_APP_NATIVE_PARITY_STYLE, MOBILE_WEB_APP_ROOT_RESET, mobileWebAppBuildOptions -} from './build-mobile-web-app-bundle.mjs' +} from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { - createBundleServer, - readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +import { createBundleServer, readShellCsp } from './preview/mobile-web-app-render-harness.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) // The emulator the audit measured on is 480 dpi, which a WebView reports as 3. Chromium by launch // flag, not Playwright's emulated scale, under which it floors borders to CSS px as no phone does. diff --git a/config/scripts/mobile-web-app-page-closure-families.mjs b/config/scripts/mobile-web-app/mobile-web-app-page-closure-families.mjs similarity index 100% rename from config/scripts/mobile-web-app-page-closure-families.mjs rename to config/scripts/mobile-web-app/mobile-web-app-page-closure-families.mjs diff --git a/config/scripts/mobile-web-app-page-closure-families.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-page-closure-families.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-page-closure-families.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-page-closure-families.test.mjs index 82e03967281..336a5c5f64c 100644 --- a/config/scripts/mobile-web-app-page-closure-families.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-page-closure-families.test.mjs @@ -12,13 +12,13 @@ import { describe, expect, it } from 'vitest' import { mobileWebAppModuleClosure, mobileWebAppRouteClosure -} from './build-mobile-web-app-bundle.mjs' +} from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { pageClosureFamilies, pinnedFamilyNames } from './mobile-web-app-page-closure-families.mjs' const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const read = (path) => - readFileSync(fileURLToPath(new URL(`../../${path}`, import.meta.url)), 'utf8') + readFileSync(fileURLToPath(new URL(`../../../${path}`, import.meta.url)), 'utf8') const C1_TABLE = 'mobile/src/test-support/bridged-parity/c1-page-closure.ts' diff --git a/config/scripts/mobile-web-app-page-grant-call-sites.mjs b/config/scripts/mobile-web-app/mobile-web-app-page-grant-call-sites.mjs similarity index 100% rename from config/scripts/mobile-web-app-page-grant-call-sites.mjs rename to config/scripts/mobile-web-app/mobile-web-app-page-grant-call-sites.mjs diff --git a/config/scripts/mobile-web-app-page-grant-call-sites.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-page-grant-call-sites.test.mjs similarity index 97% rename from config/scripts/mobile-web-app-page-grant-call-sites.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-page-grant-call-sites.test.mjs index c9a93a79cb3..a28683f3d14 100644 --- a/config/scripts/mobile-web-app-page-grant-call-sites.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-page-grant-call-sites.test.mjs @@ -11,13 +11,13 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { PAGE_ROUTE_MODULES, pageRouteModulesCoverTheManifest } from './mobile-web-app-page-route-modules.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' import { PAGE_GRANT_CALL_SITES, createGrantCallSiteReader, @@ -27,7 +27,7 @@ import { moduleReachesGrantRow } from './mobile-web-app-page-grant-call-sites.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const SESSION = '/h/[hostId]/session/[worktreeId]' diff --git a/config/scripts/mobile-web-app-page-route-modules.mjs b/config/scripts/mobile-web-app/mobile-web-app-page-route-modules.mjs similarity index 100% rename from config/scripts/mobile-web-app-page-route-modules.mjs rename to config/scripts/mobile-web-app/mobile-web-app-page-route-modules.mjs diff --git a/config/scripts/mobile-web-app-push-subsystem-closure.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-push-subsystem-closure.test.mjs similarity index 96% rename from config/scripts/mobile-web-app-push-subsystem-closure.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-push-subsystem-closure.test.mjs index 1457594a56b..0c5870934a5 100644 --- a/config/scripts/mobile-web-app-push-subsystem-closure.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-push-subsystem-closure.test.mjs @@ -2,7 +2,7 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import * as esbuild from 'esbuild' import { describe, expect, it } from 'vitest' -import { mobileWebAppBuildOptions } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppBuildOptions } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { collectMobileWebAppRoutes } from './mobile-web-app-route-manifest.mjs' @@ -43,7 +43,7 @@ import { collectMobileWebAppRoutes } from './mobile-web-app-route-manifest.mjs' * presence as its precondition would now be asserting the fence had a hole. */ -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const appDir = join(projectDir, 'mobile', 'app') const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip diff --git a/config/scripts/mobile-web-app-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-render.test.mjs index bfb16587e31..6b059582ba5 100644 --- a/config/scripts/mobile-web-app-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -14,7 +14,7 @@ import { readBridgePagePainted, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' // Why a real browser: the route tree is handed to expo-router's own ExpoRoot through a synthesized // RequireContext. Nothing short of mounting it proves that object is the shape ExpoRoot reads. diff --git a/config/scripts/mobile-web-app-rich-markdown-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-rich-markdown-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-rich-markdown-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-rich-markdown-render.test.mjs index 8b9645bcf2f..df6a77696f7 100644 --- a/config/scripts/mobile-web-app-rich-markdown-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-rich-markdown-render.test.mjs @@ -24,18 +24,18 @@ import { MOBILE_WEB_APP_NATIVE_PARITY_STYLE, MOBILE_WEB_APP_ROOT_RESET, lucideBarrelPlugin -} from './build-mobile-web-app-bundle.mjs' +} from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { textInputFontSizeFloor } from './mobile-web-app/platform-seams/mobile-web-app-text-input-font-size-seam.mjs' +import { textInputFontSizeFloor } from './platform-seams/mobile-web-app-text-input-font-size-seam.mjs' import { createBundleServer, installCspViolationRecorder, installListenerRecorder, installSchedulerRecorder, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) const componentDir = join(mobileDir, 'src/components') /** diff --git a/config/scripts/mobile-web-app-route-chunk-closure.mjs b/config/scripts/mobile-web-app/mobile-web-app-route-chunk-closure.mjs similarity index 94% rename from config/scripts/mobile-web-app-route-chunk-closure.mjs rename to config/scripts/mobile-web-app/mobile-web-app-route-chunk-closure.mjs index c624622631a..2ceb9bd54f7 100644 --- a/config/scripts/mobile-web-app-route-chunk-closure.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-route-chunk-closure.mjs @@ -1,10 +1,10 @@ import { basename, join, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import * as esbuild from 'esbuild' -import { entryStaticClosure, mobileWebAppBuildOptions } from './build-mobile-web-app-bundle.mjs' +import { entryStaticClosure, mobileWebAppBuildOptions } from '../build-mobile-web-app-bundle.mjs' import { collectMobileWebAppRoutes } from './mobile-web-app-route-manifest.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile', import.meta.url)) /** * The file the build actually put in a chunk for this route, which is not always the one named. diff --git a/config/scripts/mobile-web-app-route-manifest.mjs b/config/scripts/mobile-web-app/mobile-web-app-route-manifest.mjs similarity index 100% rename from config/scripts/mobile-web-app-route-manifest.mjs rename to config/scripts/mobile-web-app/mobile-web-app-route-manifest.mjs diff --git a/config/scripts/mobile-web-app-route-manifest.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-route-manifest.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-route-manifest.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-route-manifest.test.mjs index 1cbf256bd7a..b350e48b9a2 100644 --- a/config/scripts/mobile-web-app-route-manifest.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-route-manifest.test.mjs @@ -14,7 +14,7 @@ import { } from './mobile-web-app-route-manifest.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const appDir = join(projectDir, 'mobile', 'app') // The sharded `test` job does not install mobile dependencies, so anything that runs esbuild over diff --git a/config/scripts/mobile-web-app-route-snapshot.mjs b/config/scripts/mobile-web-app/mobile-web-app-route-snapshot.mjs similarity index 100% rename from config/scripts/mobile-web-app-route-snapshot.mjs rename to config/scripts/mobile-web-app/mobile-web-app-route-snapshot.mjs diff --git a/config/scripts/mobile-web-app-route-snapshot.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-route-snapshot.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-route-snapshot.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-route-snapshot.test.mjs index a4dc897271e..b69a2c62c03 100644 --- a/config/scripts/mobile-web-app-route-snapshot.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-route-snapshot.test.mjs @@ -5,7 +5,7 @@ import { prepareRouteSnapshot, withPreparedRouteSnapshot, withRouteSnapshot -} from './run-mobile-web-app-checks.mjs' +} from '../run-mobile-web-app-checks.mjs' import { PAGE_ROUTE_MODULES } from './mobile-web-app-page-route-modules.mjs' const collect = async (entries) => ({ diff --git a/config/scripts/mobile-web-app-safe-area-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-safe-area-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-safe-area-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-safe-area-render.test.mjs index 399df86917e..ef25501912b 100644 --- a/config/scripts/mobile-web-app-safe-area-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-safe-area-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -11,7 +11,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' // The page lays out edge-to-edge under the shell's system bars and pads through its own // SafeAreaViews, and its root for the sides, by the insets `init` carries. Measured in a real browser because what is under diff --git a/config/scripts/mobile-web-app-screencast-lane-grant.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-screencast-lane-grant.test.mjs similarity index 95% rename from config/scripts/mobile-web-app-screencast-lane-grant.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-screencast-lane-grant.test.mjs index d1498dee868..ebc26175d44 100644 --- a/config/scripts/mobile-web-app-screencast-lane-grant.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-screencast-lane-grant.test.mjs @@ -16,15 +16,15 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { PAGE_ROUTE_MODULES, pageRouteModulesCoverTheManifest } from './mobile-web-app-page-route-modules.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip /** The seam as the web build resolves it, and the native sibling the page must never reach. */ diff --git a/config/scripts/mobile-web-app-session-dictation-capture.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-dictation-capture.test.mjs similarity index 95% rename from config/scripts/mobile-web-app-session-dictation-capture.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-dictation-capture.test.mjs index 0001266f4ed..c4aac62c412 100644 --- a/config/scripts/mobile-web-app-session-dictation-capture.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-dictation-capture.test.mjs @@ -28,10 +28,10 @@ import { createRequire } from 'node:module' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' -import { MobileWebBundleRouteSchema } from '../../src/shared/mobile-web-bundle/manifest-contract.ts' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' +import { MobileWebBundleRouteSchema } from '../../../src/shared/mobile-web-bundle/manifest-contract.ts' /** The mobile install: the closure builds need it, and so does anything that imports a mobile * module, because transforming one resolves `mobile/tsconfig.json` and its Expo base. */ @@ -75,7 +75,7 @@ function closureOf(routeModule) { /** Resolved from `mobile/`, which is the tree the bundler resolves the closure out of: this suite * runs at the repo root, where neither package is installed. */ function resolveFromMobile(specifier) { - return createRequire(new URL('../../mobile/package.json', import.meta.url)).resolve(specifier) + return createRequire(new URL('../../../mobile/package.json', import.meta.url)).resolve(specifier) } /** The route module a registered pathname is served from, the way expo-router files are named. */ @@ -219,7 +219,7 @@ describe('the census rule itself', () => { // The failure this guards is the rule agreeing with itself: a list of four names the census // holds routes to, none of which the shell has a row for. const { BRIDGE_NATIVE_VERB_NAMES } = - await import('../../mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts') + await import('../../../mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts') expect(new Set(DICTATION_GRANTS).size).toBe(3) for (const grant of DICTATION_GRANTS) { expect(BRIDGE_NATIVE_VERB_NAMES, grant).toContain(grant) @@ -233,4 +233,4 @@ describe('the census rule itself', () => { }) /** Kept so a reader can find the tree this ran against without a machine path in the file. */ -export const MOBILE_DIR = fileURLToPath(new URL('../../mobile/', import.meta.url)) +export const MOBILE_DIR = fileURLToPath(new URL('../../../mobile/', import.meta.url)) diff --git a/config/scripts/mobile-web-app-session-external-links.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-external-links.test.mjs similarity index 94% rename from config/scripts/mobile-web-app-session-external-links.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-external-links.test.mjs index 51988d03162..8286c9e62b9 100644 --- a/config/scripts/mobile-web-app-session-external-links.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-external-links.test.mjs @@ -16,14 +16,14 @@ */ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { EXTERNAL_LINK_SEAM as SEAM, externalLinkOffenders -} from './mobile-web-app/platform-seams/mobile-web-app-external-link-seam.mjs' +} from './platform-seams/mobile-web-app-external-link-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const SESSION = 'app/h/[hostId]/session/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-session-media-picker.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-media-picker.test.mjs similarity index 97% rename from config/scripts/mobile-web-app-session-media-picker.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-media-picker.test.mjs index 28d5dade79a..a4a7d2d08d7 100644 --- a/config/scripts/mobile-web-app-session-media-picker.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-media-picker.test.mjs @@ -16,15 +16,15 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { MEDIA_PICKER_SEAM as SEAM, mediaPickerOffenders, mediaPickerSites -} from './mobile-web-app/platform-seams/mobile-web-app-media-picker-seam.mjs' +} from './platform-seams/mobile-web-app-media-picker-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const SESSION = 'app/h/[hostId]/session/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-session-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-session-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-render.test.mjs index 99fc2137f07..b9192880fba 100644 --- a/config/scripts/mobile-web-app-session-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-render.test.mjs @@ -3,9 +3,9 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' import { createBundleServer, installShellDouble, @@ -13,7 +13,7 @@ import { readBridgeProtocolVersion, readShellCsp, waitForRecordedRequests -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The session route in a real browser, on the bundle the shell would serve, under its own header. diff --git a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-terminal-closure.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-session-terminal-closure.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-terminal-closure.test.mjs index 2f620075c1b..5772620f07d 100644 --- a/config/scripts/mobile-web-app-session-terminal-closure.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-terminal-closure.test.mjs @@ -1,18 +1,18 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { beforeAll, describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { mobileWebAppRouteChunkClosure } from './mobile-web-app-route-chunk-closure.mjs' import { editableHostFontSizeOffenders, editableHostsIn, unresolvedEditableHostStyles -} from './mobile-web-app/platform-seams/mobile-web-app-editable-host-font-size.mjs' +} from './platform-seams/mobile-web-app-editable-host-font-size.mjs' import { textInputFontSizeOffenders, unresolvedTextInputStyles -} from './mobile-web-app/platform-seams/mobile-web-app-text-input-font-size-seam.mjs' +} from './platform-seams/mobile-web-app-text-input-font-size-seam.mjs' /** * What putting the terminal on the page costs the session route's closure. @@ -122,7 +122,7 @@ import { * than argued with. */ -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const mobileDir = join(projectDir, 'mobile') const SESSION_ROUTE = 'app/h/[hostId]/session/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-session-terminal-init.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-terminal-init.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-session-terminal-init.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-terminal-init.test.mjs index b74f27a6821..628f02a761a 100644 --- a/config/scripts/mobile-web-app-session-terminal-init.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-terminal-init.test.mjs @@ -3,9 +3,9 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' -import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' +import { MOBILE_WEB_PAGE_ROUTES } from '../mobile-web-page-routes.mjs' import { createBundleServer, installShellDouble, @@ -13,7 +13,7 @@ import { readBridgePageClientIdentity, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The session route's terminal, driven from a shell double that answers the streams a host does. diff --git a/config/scripts/mobile-web-app-session-webview-consumers.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-session-webview-consumers.test.mjs similarity index 93% rename from config/scripts/mobile-web-app-session-webview-consumers.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-session-webview-consumers.test.mjs index d209a18a0ab..2271f176793 100644 --- a/config/scripts/mobile-web-app-session-webview-consumers.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-session-webview-consumers.test.mjs @@ -1,6 +1,6 @@ /** Session routes resolve the named components to their web implementations. */ import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip diff --git a/config/scripts/mobile-web-app-source-control-external-links.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-source-control-external-links.test.mjs similarity index 95% rename from config/scripts/mobile-web-app-source-control-external-links.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-source-control-external-links.test.mjs index 73f0e9decd1..2fc491fd9f7 100644 --- a/config/scripts/mobile-web-app-source-control-external-links.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-source-control-external-links.test.mjs @@ -16,14 +16,14 @@ */ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { EXTERNAL_LINK_SEAM as SEAM, externalLinkOffenders -} from './mobile-web-app/platform-seams/mobile-web-app-external-link-seam.mjs' +} from './platform-seams/mobile-web-app-external-link-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const HUB = 'app/h/[hostId]/source-control/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-source-control-keyboard.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-source-control-keyboard.test.mjs similarity index 90% rename from config/scripts/mobile-web-app-source-control-keyboard.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-source-control-keyboard.test.mjs index 141fe9829b4..5001d863071 100644 --- a/config/scripts/mobile-web-app-source-control-keyboard.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-source-control-keyboard.test.mjs @@ -1,6 +1,6 @@ /** Source-control and review routes include the web keyboard seam. */ import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip diff --git a/config/scripts/mobile-web-app-source-control-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-source-control-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-source-control-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-source-control-render.test.mjs index a099baf34ee..2238670453f 100644 --- a/config/scripts/mobile-web-app-source-control-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-source-control-render.test.mjs @@ -4,7 +4,7 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -12,7 +12,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The two C4 page routes in a real browser, in the shape of the tasks and files checks. @@ -42,7 +42,7 @@ import { * What this file deliberately does not claim is at the bottom. */ -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const HOST_ROUTE = '/h/render-check-host' const WORKTREE = 'wt-1' const HUB_ROUTE = `${HOST_ROUTE}/source-control/${WORKTREE}` diff --git a/config/scripts/mobile-web-app-source-control-text-inputs.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-source-control-text-inputs.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-source-control-text-inputs.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-source-control-text-inputs.test.mjs index 253cb1e6148..d0944558bb9 100644 --- a/config/scripts/mobile-web-app-source-control-text-inputs.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-source-control-text-inputs.test.mjs @@ -16,16 +16,16 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { TEXT_INPUT_FONT_SIZE_SEAM, textInputFontSizeFloor, textInputFontSizeOffenders, unresolvedTextInputStyles -} from './mobile-web-app/platform-seams/mobile-web-app-text-input-font-size-seam.mjs' +} from './platform-seams/mobile-web-app-text-input-font-size-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip const HUB = 'app/h/[hostId]/source-control/[worktreeId].tsx' diff --git a/config/scripts/mobile-web-app-stack-transition-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-stack-transition-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-stack-transition-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-stack-transition-render.test.mjs index 5a56dac9d11..41d948013c7 100644 --- a/config/scripts/mobile-web-app-stack-transition-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-stack-transition-render.test.mjs @@ -4,7 +4,7 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium, webkit } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { @@ -14,7 +14,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The host stack's push and pop on the page, sampled every animation frame in a real browser. @@ -98,7 +98,7 @@ beforeAll(async () => { if (!bundles) { return } - const projectDir = fileURLToPath(new URL('../..', import.meta.url)) + const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const cspHeader = await readShellCsp() bridgeVersion = await readBridgeProtocolVersion() faultGrant = await readBridgeFaultGrant() diff --git a/config/scripts/mobile-web-app-tasks-external-links.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-tasks-external-links.test.mjs similarity index 93% rename from config/scripts/mobile-web-app-tasks-external-links.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-tasks-external-links.test.mjs index 958cefeda16..3fb6eca06d6 100644 --- a/config/scripts/mobile-web-app-tasks-external-links.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-tasks-external-links.test.mjs @@ -13,14 +13,14 @@ */ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' -import { mobileWebAppRouteClosure } from './build-mobile-web-app-bundle.mjs' +import { mobileWebAppRouteClosure } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { EXTERNAL_LINK_SEAM as SEAM, externalLinkOffenders -} from './mobile-web-app/platform-seams/mobile-web-app-external-link-seam.mjs' +} from './platform-seams/mobile-web-app-external-link-seam.mjs' -const mobileDir = fileURLToPath(new URL('../../mobile/', import.meta.url)) +const mobileDir = fileURLToPath(new URL('../../../mobile/', import.meta.url)) const describeClosure = mobileWebAppDependenciesPresent() ? describe : describe.skip describeClosure( diff --git a/config/scripts/mobile-web-app-tasks-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-tasks-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-tasks-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-tasks-render.test.mjs index 73a43852db2..ede55f20a62 100644 --- a/config/scripts/mobile-web-app-tasks-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-tasks-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, @@ -11,7 +11,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The tasks page route in a real browser: its own file, as C1.10 split the harness for. diff --git a/config/scripts/mobile-web-app-terminal-font-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-terminal-font-render.test.mjs similarity index 100% rename from config/scripts/mobile-web-app-terminal-font-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-terminal-font-render.test.mjs diff --git a/config/scripts/mobile-web-app-terminal-live-input-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-terminal-live-input-render.test.mjs similarity index 98% rename from config/scripts/mobile-web-app-terminal-live-input-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-terminal-live-input-render.test.mjs index 5c70c00151e..40c64d1b798 100644 --- a/config/scripts/mobile-web-app-terminal-live-input-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-terminal-live-input-render.test.mjs @@ -4,13 +4,13 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { BUFFERED_FIELD_ID, LIVE_INPUT_FIELD_ID, liveInputProbeRouteSource -} from './mobile-web-app/preview/mobile-web-app-live-input-probe-route.mjs' +} from './preview/mobile-web-app-live-input-probe-route.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { createBundleServer, @@ -18,8 +18,8 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' -import { LAYOUT_SOURCE } from './mobile-web-app/preview/mobile-web-app-terminal-probe-route.mjs' +} from './preview/mobile-web-app-render-harness.mjs' +import { LAYOUT_SOURCE } from './preview/mobile-web-app-terminal-probe-route.mjs' /** * The terminal's live input, in a real browser, on the bundle the shell would serve. @@ -67,7 +67,7 @@ beforeAll(async () => { if (!bundles) { return } - const projectDir = fileURLToPath(new URL('../..', import.meta.url)) + const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const terminalDir = join(projectDir, 'mobile', 'src', 'terminal') const cspHeader = await readShellCsp() bridgeVersion = await readBridgeProtocolVersion() diff --git a/config/scripts/mobile-web-app-terminal-render-fixture.mjs b/config/scripts/mobile-web-app/mobile-web-app-terminal-render-fixture.mjs similarity index 96% rename from config/scripts/mobile-web-app-terminal-render-fixture.mjs rename to config/scripts/mobile-web-app/mobile-web-app-terminal-render-fixture.mjs index 81f484cf02d..1b219c000a7 100644 --- a/config/scripts/mobile-web-app-terminal-render-fixture.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-terminal-render-fixture.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { COLS, @@ -11,7 +11,7 @@ import { LAYOUT_SOURCE, probeRouteSource, ROWS -} from './mobile-web-app/preview/mobile-web-app-terminal-probe-route.mjs' +} from './preview/mobile-web-app-terminal-probe-route.mjs' import { createBundleServer, installCspViolationRecorder, @@ -22,7 +22,7 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The scratch bundle the terminal render check runs against, and the two ways to open a page on it. @@ -32,7 +32,7 @@ import { * built in the closures it hands back, so two of them could not read each other's browser. */ -const projectDir = fileURLToPath(new URL('../..', import.meta.url)) +const projectDir = fileURLToPath(new URL('../../..', import.meta.url)) const mobileDir = join(projectDir, 'mobile') export const PROBE_ROUTE = '/h/terminal-probe' diff --git a/config/scripts/mobile-web-app-terminal-render-fixture.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-terminal-render-fixture.test.mjs similarity index 100% rename from config/scripts/mobile-web-app-terminal-render-fixture.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-terminal-render-fixture.test.mjs diff --git a/config/scripts/mobile-web-app-terminal-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-terminal-render.test.mjs similarity index 99% rename from config/scripts/mobile-web-app-terminal-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-terminal-render.test.mjs index 781b0adae00..f7d8b16b7e7 100644 --- a/config/scripts/mobile-web-app-terminal-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-terminal-render.test.mjs @@ -5,7 +5,7 @@ import { FIRST_MARKER, LAST_MARKER, MIN_STREAM_BYTES -} from './mobile-web-app/preview/mobile-web-app-terminal-probe-route.mjs' +} from './preview/mobile-web-app-terminal-probe-route.mjs' import { CONTROL_ROUTE, openProbeTerminal, @@ -15,7 +15,7 @@ import { import { readRootComputedStyles, terminalStyleReach -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' +} from './preview/mobile-web-app-render-harness.mjs' /** * The page's terminal, in a real browser, under the policy the shell sends. diff --git a/config/scripts/mobile-web-app-text-input-discovery.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-text-input-discovery.test.mjs similarity index 88% rename from config/scripts/mobile-web-app-text-input-discovery.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-text-input-discovery.test.mjs index 0c449395515..b107f61b3fd 100644 --- a/config/scripts/mobile-web-app-text-input-discovery.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-text-input-discovery.test.mjs @@ -2,7 +2,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { expect, it } from 'vitest' -import { modulesDeclaringTextInput } from './mobile-web-app/platform-seams/mobile-web-app-text-input-font-size-seam.mjs' +import { modulesDeclaringTextInput } from './platform-seams/mobile-web-app-text-input-font-size-seam.mjs' it('discovers input modules and ignores tests and non-JSX mentions', () => { const scratch = mkdtempSync(join(tmpdir(), 'orca-text-input-discovery-')) diff --git a/config/scripts/mobile-web-app-working-spinner-render.test.mjs b/config/scripts/mobile-web-app/mobile-web-app-working-spinner-render.test.mjs similarity index 95% rename from config/scripts/mobile-web-app-working-spinner-render.test.mjs rename to config/scripts/mobile-web-app/mobile-web-app-working-spinner-render.test.mjs index 74da23519e4..d40ee1b4a9c 100644 --- a/config/scripts/mobile-web-app-working-spinner-render.test.mjs +++ b/config/scripts/mobile-web-app/mobile-web-app-working-spinner-render.test.mjs @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' -import { buildMobileWebAppBundle } from './build-mobile-web-app-bundle.mjs' +import { buildMobileWebAppBundle } from '../build-mobile-web-app-bundle.mjs' import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' import { MOBILE_WEB_APP_ROUTE_ROOT } from './mobile-web-app-route-manifest.mjs' import { @@ -13,8 +13,8 @@ import { readBridgeFaultGrant, readBridgeProtocolVersion, readShellCsp -} from './mobile-web-app/preview/mobile-web-app-render-harness.mjs' -import { LAYOUT_SOURCE } from './mobile-web-app/preview/mobile-web-app-terminal-probe-route.mjs' +} from './preview/mobile-web-app-render-harness.mjs' +import { LAYOUT_SOURCE } from './preview/mobile-web-app-terminal-probe-route.mjs' /** * The working rings keep turning on the page. Each is a one-second rotation loop; a loop that diff --git a/config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.test.mjs b/config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.test.mjs index b3ab709eed5..0f8b1e973ad 100644 --- a/config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.test.mjs +++ b/config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.test.mjs @@ -14,11 +14,11 @@ import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' import { mobileWebAppRouteClosure } from '../../build-mobile-web-app-bundle.mjs' import { MOBILE_WEB_PAGE_ROUTES } from '../../mobile-web-page-routes.mjs' -import { mobileWebAppDependenciesPresent } from '../../mobile-web-app-bundle-dependencies.mjs' +import { mobileWebAppDependenciesPresent } from '../mobile-web-app-bundle-dependencies.mjs' import { PAGE_ROUTE_MODULES, pageRouteModulesCoverTheManifest -} from '../../mobile-web-app-page-route-modules.mjs' +} from '../mobile-web-app-page-route-modules.mjs' import { HAPTICS_KINDS_MODULE, HAPTICS_NATIVE, diff --git a/config/scripts/mobile-web-app/preview/mobile-web-app-html-preview-render.test.mjs b/config/scripts/mobile-web-app/preview/mobile-web-app-html-preview-render.test.mjs index bae85ec07d9..0fb2af516d3 100644 --- a/config/scripts/mobile-web-app/preview/mobile-web-app-html-preview-render.test.mjs +++ b/config/scripts/mobile-web-app/preview/mobile-web-app-html-preview-render.test.mjs @@ -24,7 +24,7 @@ import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest' import * as esbuild from 'esbuild' import { chromium, webkit } from 'playwright-core' import { lucideBarrelPlugin } from '../../build-mobile-web-app-bundle.mjs' -import { mobileWebAppDependenciesPresent } from '../../mobile-web-app-bundle-dependencies.mjs' +import { mobileWebAppDependenciesPresent } from '../mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, readShellCsp, diff --git a/config/scripts/mobile-web-app/preview/mobile-web-app-media-preview-render.test.mjs b/config/scripts/mobile-web-app/preview/mobile-web-app-media-preview-render.test.mjs index b7d4edf8fc0..f93ed2f22d8 100644 --- a/config/scripts/mobile-web-app/preview/mobile-web-app-media-preview-render.test.mjs +++ b/config/scripts/mobile-web-app/preview/mobile-web-app-media-preview-render.test.mjs @@ -4,7 +4,7 @@ import { join } from 'node:path' import { afterAll, beforeAll, describe, expect, it } from 'vitest' import { chromium } from 'playwright-core' import { buildMobileWebAppBundle } from '../../build-mobile-web-app-bundle.mjs' -import { mobileWebAppDependenciesPresent } from '../../mobile-web-app-bundle-dependencies.mjs' +import { mobileWebAppDependenciesPresent } from '../mobile-web-app-bundle-dependencies.mjs' import { createBundleServer, installShellDouble, diff --git a/config/scripts/mobile-web-page-routes.test.mjs b/config/scripts/mobile-web-page-routes.test.mjs index 4d32eee840a..be1df1c155c 100644 --- a/config/scripts/mobile-web-page-routes.test.mjs +++ b/config/scripts/mobile-web-page-routes.test.mjs @@ -5,7 +5,7 @@ import { } from '../../src/shared/mobile-web-bundle/manifest-contract.ts' import { resolveMobileWebPageRoutes } from './build-mobile-web-app-bundle.mjs' import { MOBILE_WEB_PAGE_ROUTES } from './mobile-web-page-routes.mjs' -import { routePathnameFromKey } from './mobile-web-app-route-manifest.mjs' +import { routePathnameFromKey } from './mobile-web-app/mobile-web-app-route-manifest.mjs' /** * Which screens this desktop declares as page routes, and whether the bundle can render each. diff --git a/config/scripts/mobile-web-terminal-engine-closure.test.mjs b/config/scripts/mobile-web-terminal-engine-closure.test.mjs index db074c08feb..9541515d155 100644 --- a/config/scripts/mobile-web-terminal-engine-closure.test.mjs +++ b/config/scripts/mobile-web-terminal-engine-closure.test.mjs @@ -4,7 +4,7 @@ import { join } from 'node:path' import { fileURLToPath } from 'node:url' import { describe, expect, it } from 'vitest' import { mobileWebAppModuleClosure } from './build-mobile-web-app-bundle.mjs' -import { mobileWebAppDependenciesPresent } from './mobile-web-app-bundle-dependencies.mjs' +import { mobileWebAppDependenciesPresent } from './mobile-web-app/mobile-web-app-bundle-dependencies.mjs' /** * The 612 KiB xterm engine string, and where the page must never meet it. diff --git a/config/scripts/node-server-change-scope.test.mjs b/config/scripts/node-server-change-scope.test.mjs index fe6cd375fb2..96ed9adad24 100644 --- a/config/scripts/node-server-change-scope.test.mjs +++ b/config/scripts/node-server-change-scope.test.mjs @@ -504,7 +504,7 @@ describe('the actual Bun build and profile-test dependency graph', () => { it.each([ 'config/scripts/ci-shard-timings.json', - 'config/scripts/mobile-web-app-terminal-render.test.mjs', + 'config/scripts/mobile-web-app/mobile-web-app-terminal-render.test.mjs', 'src/renderer/src/components/terminal/pty-running-work-probe.ts', 'src/renderer/src/runtime/runtime-terminal-inspection.ts', 'src/main/ssh/ssh-relay-upload-stage-commands.test.ts', diff --git a/config/scripts/pr-code-change-scope.test.mjs b/config/scripts/pr-code-change-scope.test.mjs index d76493d6efc..4249ab0bfeb 100644 --- a/config/scripts/pr-code-change-scope.test.mjs +++ b/config/scripts/pr-code-change-scope.test.mjs @@ -339,7 +339,7 @@ describe('per-job path classification', () => { 'config/scripts/build-mobile-web-app-bundle.mjs', 'config/scripts/run-mobile-web-app-checks.mjs', 'src/packages/process-host/src/run-process.ts', - 'config/scripts/mobile-web-app-route-manifest.mjs', + 'config/scripts/mobile-web-app/mobile-web-app-route-manifest.mjs', 'config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.mjs', 'config/scripts/mobile-web-app/platform-seams/mobile-web-app-haptics-seam.test.mjs', 'mobile/web-entry/index.tsx', diff --git a/config/scripts/run-mobile-web-app-checks.mjs b/config/scripts/run-mobile-web-app-checks.mjs index b876fc57af6..5425ad99cba 100644 --- a/config/scripts/run-mobile-web-app-checks.mjs +++ b/config/scripts/run-mobile-web-app-checks.mjs @@ -4,8 +4,8 @@ import { dirname, join } from 'node:path' import { pathToFileURL } from 'node:url' import { createRequire } from 'node:module' import { mobileWebAppModuleClosure } from './build-mobile-web-app-bundle.mjs' -import { readRouteSnapshot } from './mobile-web-app-route-snapshot.mjs' -import { PAGE_ROUTE_MODULES } from './mobile-web-app-page-route-modules.mjs' +import { readRouteSnapshot } from './mobile-web-app/mobile-web-app-route-snapshot.mjs' +import { PAGE_ROUTE_MODULES } from './mobile-web-app/mobile-web-app-page-route-modules.mjs' import { spawnProcess } from '@orca/process-host' const require = createRequire(import.meta.url) diff --git a/mobile/src/browser/browser-screencast-budget-at-the-shell.test.ts b/mobile/src/browser/browser-screencast-budget-at-the-shell.test.ts index d83578e6547..16424f5db3f 100644 --- a/mobile/src/browser/browser-screencast-budget-at-the-shell.test.ts +++ b/mobile/src/browser/browser-screencast-budget-at-the-shell.test.ts @@ -156,7 +156,7 @@ describe('the envelope bound against a real posted frame', () => { * itself produced — so they cannot falsify the constant, only the expansion and the drop rule * around it. Said plainly because the earlier version of this block read as if it validated the * worst case: it did not, and the constant it agreed with was wrong by enough to post a phone's - * frame over the cap. `config/scripts/mobile-web-app-frame-budget-sweep.test.ts` is what encodes + * frame over the cap. `config/scripts/mobile-web-app/mobile-web-app-frame-budget-sweep.test.ts` is what encodes * real Chromium JPEGs across the viewport range and holds the constant to them. */ describe('a frame at exactly the budgeted area', () => { diff --git a/mobile/src/components/pr-sidebar/MermaidDiagram.tsx b/mobile/src/components/pr-sidebar/MermaidDiagram.tsx index 84da1812840..1557f35c552 100644 --- a/mobile/src/components/pr-sidebar/MermaidDiagram.tsx +++ b/mobile/src/components/pr-sidebar/MermaidDiagram.tsx @@ -16,7 +16,7 @@ export type MermaidDiagramProps = { * process to sandbox in. The fence is mermaid's own `securityLevel: 'strict'`, which runs the * serialized SVG through DOMPurify before handing it back — a `