From 1f227013b6611e44e1da481d92b8367aee7ffe19 Mon Sep 17 00:00:00 2001 From: Juan Cruz Fortunatti Date: Mon, 5 Oct 2026 20:10:40 +0200 Subject: [PATCH 1/2] ci(architecture): treat fixtures under any site folder as helpers and the move declaration as plan input --- .github/scripts/architecture/nebula-inbound.mts | 2 +- .github/scripts/architecture/plan-references.mts | 4 ++-- site/{ => browser}/diagnostics-policy.mts | 0 site/{test => browser}/error-report.test.mts | 0 site/{ => browser}/in-flight-loader.mts | 0 site/{test => browser}/in-flight-loader.test.mts | 0 .../initial-shell-context.test.mts | 0 site/{ => browser}/narrow-layout.mts | 0 site/{ => browser}/native-input.mts | 0 .../next-frame.characterization.test.mts | 0 site/{ => browser}/next-frame.mts | 0 site/{ => browser}/runtime-policy.mts | 0 site/{test => browser}/runtime-policy.test.mts | 0 site/{ => browser}/source-link.mts | 0 site/{test => browser}/source-link.test.mts | 0 site/{test => browser}/web-analytics.test.mts | 0 .../charts.test.ts => build/charts/charts.test.mts} | 0 site/{test => build/charts}/folded-transit.test.mts | 0 .../content/load-object-content.test-support.mts} | 0 .../content}/prepared-dataset-facts.test.mts | 0 .../content}/prepared-dataset-legends.test.mts | 0 .../fixtures}/authored-object-fixture.mts | 0 site/{test => build}/fixtures/context-package.mts | 0 .../fixtures/object-content-fixture.mts | 0 .../{test => build}/inline-page-stylesheet.test.mts | 0 .../prepare}/arrival-discovery.test.mts | 0 .../{test => build/prepare}/body-additions.test.mts | 0 .../prepare}/check-preparation-inputs.test.mts | 0 .../prepare}/descriptor-roundtrip.test.mts | 0 .../prepare}/lonlat-slice-table.test.mts | 0 .../prepare}/prepare-authored.test.mts | 0 .../prepare}/prepare-context-availability.test.mts | 0 .../prepare}/prepare-object-json.test.mts | 0 .../prepare}/prepare-spatial-context.test.mts | 0 site/{test => build/prepare}/prepare-text.test.mts | 0 .../{test => build/prepare}/refresh-charts.test.mts | 0 site/{test => build/prepare}/setup-assets.test.mts | 0 site/{test => build}/prepared-motion-css.test.mts | 0 site/{test => build}/restore-inputs.test.mts | 0 site/{test => build}/run-script-chain.test.mts | 0 site/{ => content}/dataset-content.mts | 0 .../dataset-context.characterization.test.mts | 0 site/{ => content}/dataset-context.mts | 0 .../learn-more.characterization.test.mts | 0 site/{ => content}/learn-more.mts | 0 .../object-text.characterization.test.mts | 0 site/{ => content}/object-text.mts | 0 site/{test => content}/object-text.test.mts | 0 ...prepared-panel-content.characterization.test.mts | 0 site/{ => content}/prepared-panel-content.mts | 0 .../prepared-panel-content.shared-readers.test.mts | 0 .../prepared-panel-content.test.mts | 0 .../sidebar-thumbnails.characterization.test.mts | 0 site/{ => content}/sidebar-thumbnails.mts | 0 .../source-icons.characterization.test.mts | 0 site/{ => content}/source-icons.mts | 0 site/{ => content}/volume-presentation.mts | 0 site/{test => content}/volume-presentation.test.mts | 0 site/{ => contracts}/object-page-contract.mts | 0 site/{ => contracts}/object-shell-types.ts | 0 .../prepared-presentation-bindings.test.mts | 0 site/{test => directory}/fixtures/objects.mts | 0 .../object-entries.characterization.test.mts | 0 site/{ => directory}/object-entries.mts | 0 site/{ => directory}/object-entry-types.mts | 0 .../startup-requests.characterization.test.mts | 0 site/{ => directory}/startup-requests.mts | 0 site/{test => directory}/startup-requests.test.mts | 0 .../astro-component-imports.test.mts | 0 .../browser-node-imports.test.mts | 0 site/{test => journeys}/cloudflare-worker.test.mts | 0 site/{test => journeys}/context-lineage.test.mts | 0 .../{test => journeys}/diagnostic-accessor.test.mts | 0 .../neutral-catalogue-color.test.mts | 0 .../object-control-binding.test.mts | 0 .../object-runtime-contract.test.mts | 0 .../preparation-boundary.test.mts | 0 .../prepared-dataset-labels.test.mts | 0 .../prepared-presentation-contract.test.mts | 0 .../production-diagnostics.test.mts | 0 site/{test => journeys}/recovery-commands.test.mts | 0 site/{test => journeys}/rendered-page.test.mts | 0 .../seo-discovery.test-support.mts} | 0 site/{test => journeys}/seo-discovery.test.mts | 0 site/{test => journeys}/surface-label-loop.test.mts | 0 site/{test => journeys}/world-billboards.test.mts | 0 site/{ => layouts}/object-navigation-marker.css | 0 site/{ => layouts}/site.css | 0 site/{ => layouts}/wordmark.css | 0 .../evidence/passive-minimaps/browser.json | 0 .../evidence/passive-minimaps/earth.png | Bin .../evidence/passive-minimaps/jupiter-sequence.png | Bin site/{test => minimap}/surface-minimap.test.mts | 0 site/{ => model}/dataset-url.mts | 0 site/{test => model}/dataset-url.test.mts | 0 ...t-classification-label.characterization.test.mts | 0 site/{ => model}/object-classification-label.mts | 0 site/{ => model}/orbit-root.mts | 0 site/{ => model}/planetary-system-members.mts | 0 site/{ => model}/root-object.mts | 0 site/{navigation => model}/system-address.mts | 0 site/{ => navigation}/arrival-billboard.mts | 0 .../{test => navigation}/arrival-billboard.test.mts | 0 .../navigation-content.test.mts | 0 .../navigation-fragments.test.mts | 0 .../navigation-lifecycle.test.mts | 0 .../navigation-readiness.test.mts | 0 .../navigation-shell-content.test.mts | 0 .../{test => navigation}/navigation-styles.test.mts | 0 .../{test => navigation}/navigation-timing.test.mts | 0 site/{ => navigation}/prepared-descriptor.mts | 0 .../prepared-descriptor.test.mts | 0 site/{ => navigation}/prepared-scene-ownership.mts | 0 .../view-url-runtime.characterization.test.mts | 0 site/{ => navigation}/view-url-runtime.mts | 0 site/{test => navigation}/view-url-runtime.test.mts | 0 .../source-evidence-values.test-support.mts} | 0 site/{ => prepared}/prepared-object-path.mts | 0 site/{test => scene}/camera-handover.test.mts | 0 .../fixtures/characterization-runtime.mts | 0 .../initial-scene.characterization.test.mts | 0 site/{ => scene}/initial-scene.mts | 0 site/{test => scene}/scene-datasets.test.mts | 0 site/{test => scene}/scene-frame.test.mts | 0 site/{test => scene}/scene-publication.test.mts | 0 site/{test => scene}/scene-session.test.mts | 0 site/{test => search}/catalogue-window.test.mts | 0 site/{test => search}/galactic-focus.test.mts | 0 site/{test => search}/list-distance.test.mts | 0 site/{test => search}/object-result.test.mts | 0 site/{test => search}/object-search-rank.test.mts | 0 site/{test => search}/shell-selectors.test.mts | 0 .../asset-origin.characterization.test.mts | 0 site/{ => server-assets}/asset-origin.mts | 0 site/{test => server}/asset-origin.test.mts | 0 site/{ => server}/built-pages.mts | 0 site/{test => server}/built-pages.test.mts | 0 .../dataset-response.characterization.test.mts | 0 site/{ => server}/dataset-response.mts | 0 site/{test => server}/dataset-response.test.mts | 0 .../first-view-transport.characterization.test.mts | 0 site/{ => server}/first-view-transport.mts | 0 site/{test => server}/first-view-transport.test.mts | 0 .../information-tab-styles.test.mts | 0 site/{test => server}/kept-load.test.mts | 0 .../object-page-data.characterization.test.mts | 0 site/{ => server}/object-page-data.mts | 0 site/{test => server}/object-page-data.test.mts | 0 site/{test => server}/preview.test.mts | 0 site/{ => shell}/chart-pixel-alignment.mts | 0 site/{test => shell}/chart-pixel-alignment.test.mts | 0 .../dataset-picker.characterization.test.mts | 0 site/{ => shell}/dataset-picker.mts | 0 site/{test => shell}/dataset-picker.test.mts | 0 .../information-card-sections.test.mts | 0 .../information-card.characterization.test.mts | 0 site/{ => shell}/information-card.mts | 0 .../layout-sections.characterization.test.mts | 0 site/{ => shell}/layout-sections.mts | 0 .../native-view-forms.characterization.test.mts | 0 site/{ => shell}/native-view-forms.mts | 0 site/{test => shell}/shell-settings.test.mts | 0 site/{test => shell}/shell-sheet.test.mts | 0 .../tab-panels.characterization.test.mts | 0 site/{ => shell}/tab-panels.mts | 0 site/{ => startup}/error-report.mts | 0 site/{ => startup}/initial-shell-context.mts | 0 .../startup-cover.characterization.test.mts | 0 site/{ => startup}/startup-cover.mts | 0 site/{ => startup}/web-analytics.mts | 0 .../context-availability.characterization.test.mts | 0 site/{ => world}/context-availability.mts | 0 site/{ => world}/context-datasets.mts | 0 .../default-width-share.characterization.test.mts | 0 site/{ => world}/default-width-share.mts | 0 .../dot-catalogues.characterization.test.mts | 0 site/{ => world}/dot-catalogues.mts | 0 site/{test => world}/fixtures/anchor-table.mts | 0 .../{test => world}/fixtures/galaxies/captures.json | 0 site/{test => world}/fixtures/prepared-schemas.mts | 0 site/{test => world}/fixtures/saturn-prepared.mts | 0 .../moon-orbit-policy.characterization.test.mts | 0 site/{ => world}/moon-orbit-policy.mts | 0 site/{ => world}/system-framing-radii.mts | 0 site/{ => world}/world-camera.mts | 0 .../world-preferences.characterization.test.mts | 0 site/{ => world}/world-preferences.mts | 0 .../world-viewport.characterization.test.mts | 0 site/{ => world}/world-viewport.mts | 0 .../zoom-carry.characterization.test.mts | 0 site/{ => world}/zoom-carry.mts | 0 191 files changed, 3 insertions(+), 3 deletions(-) rename site/{ => browser}/diagnostics-policy.mts (100%) rename site/{test => browser}/error-report.test.mts (100%) rename site/{ => browser}/in-flight-loader.mts (100%) rename site/{test => browser}/in-flight-loader.test.mts (100%) rename site/{test => browser}/initial-shell-context.test.mts (100%) rename site/{ => browser}/narrow-layout.mts (100%) rename site/{ => browser}/native-input.mts (100%) rename site/{ => browser}/next-frame.characterization.test.mts (100%) rename site/{ => browser}/next-frame.mts (100%) rename site/{ => browser}/runtime-policy.mts (100%) rename site/{test => browser}/runtime-policy.test.mts (100%) rename site/{ => browser}/source-link.mts (100%) rename site/{test => browser}/source-link.test.mts (100%) rename site/{test => browser}/web-analytics.test.mts (100%) rename site/{test/charts.test.ts => build/charts/charts.test.mts} (100%) rename site/{test => build/charts}/folded-transit.test.mts (100%) rename site/{test/load-object-content.mts => build/content/load-object-content.test-support.mts} (100%) rename site/{test => build/content}/prepared-dataset-facts.test.mts (100%) rename site/{test => build/content}/prepared-dataset-legends.test.mts (100%) rename site/{test => build/fixtures}/authored-object-fixture.mts (100%) rename site/{test => build}/fixtures/context-package.mts (100%) rename site/{test => build}/fixtures/object-content-fixture.mts (100%) rename site/{test => build}/inline-page-stylesheet.test.mts (100%) rename site/{test => build/prepare}/arrival-discovery.test.mts (100%) rename site/{test => build/prepare}/body-additions.test.mts (100%) rename site/{test => build/prepare}/check-preparation-inputs.test.mts (100%) rename site/{test => build/prepare}/descriptor-roundtrip.test.mts (100%) rename site/{test => build/prepare}/lonlat-slice-table.test.mts (100%) rename site/{test => build/prepare}/prepare-authored.test.mts (100%) rename site/{test => build/prepare}/prepare-context-availability.test.mts (100%) rename site/{test => build/prepare}/prepare-object-json.test.mts (100%) rename site/{test => build/prepare}/prepare-spatial-context.test.mts (100%) rename site/{test => build/prepare}/prepare-text.test.mts (100%) rename site/{test => build/prepare}/refresh-charts.test.mts (100%) rename site/{test => build/prepare}/setup-assets.test.mts (100%) rename site/{test => build}/prepared-motion-css.test.mts (100%) rename site/{test => build}/restore-inputs.test.mts (100%) rename site/{test => build}/run-script-chain.test.mts (100%) rename site/{ => content}/dataset-content.mts (100%) rename site/{ => content}/dataset-context.characterization.test.mts (100%) rename site/{ => content}/dataset-context.mts (100%) rename site/{ => content}/learn-more.characterization.test.mts (100%) rename site/{ => content}/learn-more.mts (100%) rename site/{ => content}/object-text.characterization.test.mts (100%) rename site/{ => content}/object-text.mts (100%) rename site/{test => content}/object-text.test.mts (100%) rename site/{ => content}/prepared-panel-content.characterization.test.mts (100%) rename site/{ => content}/prepared-panel-content.mts (100%) rename site/{ => content}/prepared-panel-content.shared-readers.test.mts (100%) rename site/{test => content}/prepared-panel-content.test.mts (100%) rename site/{ => content}/sidebar-thumbnails.characterization.test.mts (100%) rename site/{ => content}/sidebar-thumbnails.mts (100%) rename site/{ => content}/source-icons.characterization.test.mts (100%) rename site/{ => content}/source-icons.mts (100%) rename site/{ => content}/volume-presentation.mts (100%) rename site/{test => content}/volume-presentation.test.mts (100%) rename site/{ => contracts}/object-page-contract.mts (100%) rename site/{ => contracts}/object-shell-types.ts (100%) rename site/{test => contracts}/prepared-presentation-bindings.test.mts (100%) rename site/{test => directory}/fixtures/objects.mts (100%) rename site/{ => directory}/object-entries.characterization.test.mts (100%) rename site/{ => directory}/object-entries.mts (100%) rename site/{ => directory}/object-entry-types.mts (100%) rename site/{ => directory}/startup-requests.characterization.test.mts (100%) rename site/{ => directory}/startup-requests.mts (100%) rename site/{test => directory}/startup-requests.test.mts (100%) rename site/{test => journeys}/astro-component-imports.test.mts (100%) rename site/{test => journeys}/browser-node-imports.test.mts (100%) rename site/{test => journeys}/cloudflare-worker.test.mts (100%) rename site/{test => journeys}/context-lineage.test.mts (100%) rename site/{test => journeys}/diagnostic-accessor.test.mts (100%) rename site/{test => journeys}/neutral-catalogue-color.test.mts (100%) rename site/{test => journeys}/object-control-binding.test.mts (100%) rename site/{test => journeys}/object-runtime-contract.test.mts (100%) rename site/{test => journeys}/preparation-boundary.test.mts (100%) rename site/{test => journeys}/prepared-dataset-labels.test.mts (100%) rename site/{test => journeys}/prepared-presentation-contract.test.mts (100%) rename site/{test => journeys}/production-diagnostics.test.mts (100%) rename site/{test => journeys}/recovery-commands.test.mts (100%) rename site/{test => journeys}/rendered-page.test.mts (100%) rename site/{test/seo-discovery.mts => journeys/seo-discovery.test-support.mts} (100%) rename site/{test => journeys}/seo-discovery.test.mts (100%) rename site/{test => journeys}/surface-label-loop.test.mts (100%) rename site/{test => journeys}/world-billboards.test.mts (100%) rename site/{ => layouts}/object-navigation-marker.css (100%) rename site/{ => layouts}/site.css (100%) rename site/{ => layouts}/wordmark.css (100%) rename site/{test => minimap}/evidence/passive-minimaps/browser.json (100%) rename site/{test => minimap}/evidence/passive-minimaps/earth.png (100%) rename site/{test => minimap}/evidence/passive-minimaps/jupiter-sequence.png (100%) rename site/{test => minimap}/surface-minimap.test.mts (100%) rename site/{ => model}/dataset-url.mts (100%) rename site/{test => model}/dataset-url.test.mts (100%) rename site/{ => model}/object-classification-label.characterization.test.mts (100%) rename site/{ => model}/object-classification-label.mts (100%) rename site/{ => model}/orbit-root.mts (100%) rename site/{ => model}/planetary-system-members.mts (100%) rename site/{ => model}/root-object.mts (100%) rename site/{navigation => model}/system-address.mts (100%) rename site/{ => navigation}/arrival-billboard.mts (100%) rename site/{test => navigation}/arrival-billboard.test.mts (100%) rename site/{test => navigation}/navigation-content.test.mts (100%) rename site/{test => navigation}/navigation-fragments.test.mts (100%) rename site/{test => navigation}/navigation-lifecycle.test.mts (100%) rename site/{test => navigation}/navigation-readiness.test.mts (100%) rename site/{test => navigation}/navigation-shell-content.test.mts (100%) rename site/{test => navigation}/navigation-styles.test.mts (100%) rename site/{test => navigation}/navigation-timing.test.mts (100%) rename site/{ => navigation}/prepared-descriptor.mts (100%) rename site/{test => navigation}/prepared-descriptor.test.mts (100%) rename site/{ => navigation}/prepared-scene-ownership.mts (100%) rename site/{ => navigation}/view-url-runtime.characterization.test.mts (100%) rename site/{ => navigation}/view-url-runtime.mts (100%) rename site/{test => navigation}/view-url-runtime.test.mts (100%) rename site/{test/source-evidence-values.mts => overview/source-evidence-values.test-support.mts} (100%) rename site/{ => prepared}/prepared-object-path.mts (100%) rename site/{test => scene}/camera-handover.test.mts (100%) rename site/{test => scene}/fixtures/characterization-runtime.mts (100%) rename site/{ => scene}/initial-scene.characterization.test.mts (100%) rename site/{ => scene}/initial-scene.mts (100%) rename site/{test => scene}/scene-datasets.test.mts (100%) rename site/{test => scene}/scene-frame.test.mts (100%) rename site/{test => scene}/scene-publication.test.mts (100%) rename site/{test => scene}/scene-session.test.mts (100%) rename site/{test => search}/catalogue-window.test.mts (100%) rename site/{test => search}/galactic-focus.test.mts (100%) rename site/{test => search}/list-distance.test.mts (100%) rename site/{test => search}/object-result.test.mts (100%) rename site/{test => search}/object-search-rank.test.mts (100%) rename site/{test => search}/shell-selectors.test.mts (100%) rename site/{ => server-assets}/asset-origin.characterization.test.mts (100%) rename site/{ => server-assets}/asset-origin.mts (100%) rename site/{test => server}/asset-origin.test.mts (100%) rename site/{ => server}/built-pages.mts (100%) rename site/{test => server}/built-pages.test.mts (100%) rename site/{ => server}/dataset-response.characterization.test.mts (100%) rename site/{ => server}/dataset-response.mts (100%) rename site/{test => server}/dataset-response.test.mts (100%) rename site/{ => server}/first-view-transport.characterization.test.mts (100%) rename site/{ => server}/first-view-transport.mts (100%) rename site/{test => server}/first-view-transport.test.mts (100%) rename site/{test => server}/information-tab-styles.test.mts (100%) rename site/{test => server}/kept-load.test.mts (100%) rename site/{ => server}/object-page-data.characterization.test.mts (100%) rename site/{ => server}/object-page-data.mts (100%) rename site/{test => server}/object-page-data.test.mts (100%) rename site/{test => server}/preview.test.mts (100%) rename site/{ => shell}/chart-pixel-alignment.mts (100%) rename site/{test => shell}/chart-pixel-alignment.test.mts (100%) rename site/{ => shell}/dataset-picker.characterization.test.mts (100%) rename site/{ => shell}/dataset-picker.mts (100%) rename site/{test => shell}/dataset-picker.test.mts (100%) rename site/{test => shell}/information-card-sections.test.mts (100%) rename site/{ => shell}/information-card.characterization.test.mts (100%) rename site/{ => shell}/information-card.mts (100%) rename site/{ => shell}/layout-sections.characterization.test.mts (100%) rename site/{ => shell}/layout-sections.mts (100%) rename site/{ => shell}/native-view-forms.characterization.test.mts (100%) rename site/{ => shell}/native-view-forms.mts (100%) rename site/{test => shell}/shell-settings.test.mts (100%) rename site/{test => shell}/shell-sheet.test.mts (100%) rename site/{ => shell}/tab-panels.characterization.test.mts (100%) rename site/{ => shell}/tab-panels.mts (100%) rename site/{ => startup}/error-report.mts (100%) rename site/{ => startup}/initial-shell-context.mts (100%) rename site/{ => startup}/startup-cover.characterization.test.mts (100%) rename site/{ => startup}/startup-cover.mts (100%) rename site/{ => startup}/web-analytics.mts (100%) rename site/{ => world}/context-availability.characterization.test.mts (100%) rename site/{ => world}/context-availability.mts (100%) rename site/{ => world}/context-datasets.mts (100%) rename site/{ => world}/default-width-share.characterization.test.mts (100%) rename site/{ => world}/default-width-share.mts (100%) rename site/{ => world}/dot-catalogues.characterization.test.mts (100%) rename site/{ => world}/dot-catalogues.mts (100%) rename site/{test => world}/fixtures/anchor-table.mts (100%) rename site/{test => world}/fixtures/galaxies/captures.json (100%) rename site/{test => world}/fixtures/prepared-schemas.mts (100%) rename site/{test => world}/fixtures/saturn-prepared.mts (100%) rename site/{ => world}/moon-orbit-policy.characterization.test.mts (100%) rename site/{ => world}/moon-orbit-policy.mts (100%) rename site/{ => world}/system-framing-radii.mts (100%) rename site/{ => world}/world-camera.mts (100%) rename site/{ => world}/world-preferences.characterization.test.mts (100%) rename site/{ => world}/world-preferences.mts (100%) rename site/{ => world}/world-viewport.characterization.test.mts (100%) rename site/{ => world}/world-viewport.mts (100%) rename site/{ => world}/zoom-carry.characterization.test.mts (100%) rename site/{ => world}/zoom-carry.mts (100%) diff --git a/.github/scripts/architecture/nebula-inbound.mts b/.github/scripts/architecture/nebula-inbound.mts index 2a71ba4b913..95823881b02 100644 --- a/.github/scripts/architecture/nebula-inbound.mts +++ b/.github/scripts/architecture/nebula-inbound.mts @@ -36,7 +36,7 @@ function files(directory: string): string[] { } function policy(path: string): Policy { // Tests hold fixtures and helpers beside their owners; a runtime module that imports one is still checked through its own closure. - if (/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(path) || /^site\/test\/[^/]+-browser\.mts$/.test(path) || path.startsWith('site/test/fixtures/') || path.startsWith('packages/bake/src/contract/fixtures/') || path.startsWith('integration/prepared-object-mount/fixtures/') || + if (/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(path) || /^site\/(?:[^/]+\/)*[^/]+-browser\.mts$/.test(path) || /^site\/(?:[^/]+\/)*fixtures\//.test(path) || path.startsWith('packages/bake/src/contract/fixtures/') || path.startsWith('integration/prepared-object-mount/fixtures/') || path.startsWith('src/platform/fixtures/') || path.startsWith('src/objects/earth/fixtures/')) return 'test'; // `@cssearth/telescope-cli` is the telescope command, preparation tooling that imports the bake by design. // `.github/scripts` holds the CI and repository checks. `site/build/` is site-owned preparation (build diff --git a/.github/scripts/architecture/plan-references.mts b/.github/scripts/architecture/plan-references.mts index 707959da126..455d4fee79c 100644 --- a/.github/scripts/architecture/plan-references.mts +++ b/.github/scripts/architecture/plan-references.mts @@ -31,7 +31,7 @@ export function references(root: string, moves: Readonly const selected = only ?? [...new Set([...grep.stdout.split('\n').filter(Boolean), ...untracked, ...paths.filter(path => !path.endsWith('/') && isTestPath(path))])].sort(); for (const file of selected) { if (!existsSync(resolve(root, file))) continue; - if (file.startsWith('docs/site-architecture/') || /^\.github\/scripts\/architecture\/(?:site-architecture|projection|plan-proofs|plan-references|import-declarations)(?:\.test)?\.mts$/u.test(file)) continue; // The inventory cannot inventory its own serialization. + if (file === '.github/site-refactor.json' || file.startsWith('docs/site-architecture/') || /^\.github\/scripts\/architecture\/(?:site-architecture|projection|plan-proofs|plan-references|import-declarations)(?:\.test)?\.mts$/u.test(file)) continue; // The inventory cannot inventory its own serialization. const bytes = readFileSync(resolve(root, file)); if (bytes.includes(0)) continue; const content = bytes.toString('utf8'); const candidates = paths.filter(old => { @@ -42,7 +42,7 @@ export function references(root: string, moves: Readonly }); if (!candidates.length && !(isTestPath(file) && typeof moves[file] === 'string')) continue; const lines = content.split('\n'); - const scope = file.startsWith('docs/site-architecture') || /^\.github\/scripts\/architecture\/(?:site-architecture|projection|plan-proofs|plan-references|import-declarations)(?:\.test)?\.mts$/u.test(file) ? 'plan' + const scope = file === '.github/site-refactor.json' || file.startsWith('docs/site-architecture') || /^\.github\/scripts\/architecture\/(?:site-architecture|projection|plan-proofs|plan-references|import-declarations)(?:\.test)?\.mts$/u.test(file) ? 'plan' : /(?:^untangle\/|\/history\/|\/archive\/|\/done\/|(?:^|\/)(?:reports|records)\/)/u.test(file) ? 'history' : 'live'; let generated = false; for (const [index, line] of lines.entries()) { diff --git a/site/diagnostics-policy.mts b/site/browser/diagnostics-policy.mts similarity index 100% rename from site/diagnostics-policy.mts rename to site/browser/diagnostics-policy.mts diff --git a/site/test/error-report.test.mts b/site/browser/error-report.test.mts similarity index 100% rename from site/test/error-report.test.mts rename to site/browser/error-report.test.mts diff --git a/site/in-flight-loader.mts b/site/browser/in-flight-loader.mts similarity index 100% rename from site/in-flight-loader.mts rename to site/browser/in-flight-loader.mts diff --git a/site/test/in-flight-loader.test.mts b/site/browser/in-flight-loader.test.mts similarity index 100% rename from site/test/in-flight-loader.test.mts rename to site/browser/in-flight-loader.test.mts diff --git a/site/test/initial-shell-context.test.mts b/site/browser/initial-shell-context.test.mts similarity index 100% rename from site/test/initial-shell-context.test.mts rename to site/browser/initial-shell-context.test.mts diff --git a/site/narrow-layout.mts b/site/browser/narrow-layout.mts similarity index 100% rename from site/narrow-layout.mts rename to site/browser/narrow-layout.mts diff --git a/site/native-input.mts b/site/browser/native-input.mts similarity index 100% rename from site/native-input.mts rename to site/browser/native-input.mts diff --git a/site/next-frame.characterization.test.mts b/site/browser/next-frame.characterization.test.mts similarity index 100% rename from site/next-frame.characterization.test.mts rename to site/browser/next-frame.characterization.test.mts diff --git a/site/next-frame.mts b/site/browser/next-frame.mts similarity index 100% rename from site/next-frame.mts rename to site/browser/next-frame.mts diff --git a/site/runtime-policy.mts b/site/browser/runtime-policy.mts similarity index 100% rename from site/runtime-policy.mts rename to site/browser/runtime-policy.mts diff --git a/site/test/runtime-policy.test.mts b/site/browser/runtime-policy.test.mts similarity index 100% rename from site/test/runtime-policy.test.mts rename to site/browser/runtime-policy.test.mts diff --git a/site/source-link.mts b/site/browser/source-link.mts similarity index 100% rename from site/source-link.mts rename to site/browser/source-link.mts diff --git a/site/test/source-link.test.mts b/site/browser/source-link.test.mts similarity index 100% rename from site/test/source-link.test.mts rename to site/browser/source-link.test.mts diff --git a/site/test/web-analytics.test.mts b/site/browser/web-analytics.test.mts similarity index 100% rename from site/test/web-analytics.test.mts rename to site/browser/web-analytics.test.mts diff --git a/site/test/charts.test.ts b/site/build/charts/charts.test.mts similarity index 100% rename from site/test/charts.test.ts rename to site/build/charts/charts.test.mts diff --git a/site/test/folded-transit.test.mts b/site/build/charts/folded-transit.test.mts similarity index 100% rename from site/test/folded-transit.test.mts rename to site/build/charts/folded-transit.test.mts diff --git a/site/test/load-object-content.mts b/site/build/content/load-object-content.test-support.mts similarity index 100% rename from site/test/load-object-content.mts rename to site/build/content/load-object-content.test-support.mts diff --git a/site/test/prepared-dataset-facts.test.mts b/site/build/content/prepared-dataset-facts.test.mts similarity index 100% rename from site/test/prepared-dataset-facts.test.mts rename to site/build/content/prepared-dataset-facts.test.mts diff --git a/site/test/prepared-dataset-legends.test.mts b/site/build/content/prepared-dataset-legends.test.mts similarity index 100% rename from site/test/prepared-dataset-legends.test.mts rename to site/build/content/prepared-dataset-legends.test.mts diff --git a/site/test/authored-object-fixture.mts b/site/build/fixtures/authored-object-fixture.mts similarity index 100% rename from site/test/authored-object-fixture.mts rename to site/build/fixtures/authored-object-fixture.mts diff --git a/site/test/fixtures/context-package.mts b/site/build/fixtures/context-package.mts similarity index 100% rename from site/test/fixtures/context-package.mts rename to site/build/fixtures/context-package.mts diff --git a/site/test/fixtures/object-content-fixture.mts b/site/build/fixtures/object-content-fixture.mts similarity index 100% rename from site/test/fixtures/object-content-fixture.mts rename to site/build/fixtures/object-content-fixture.mts diff --git a/site/test/inline-page-stylesheet.test.mts b/site/build/inline-page-stylesheet.test.mts similarity index 100% rename from site/test/inline-page-stylesheet.test.mts rename to site/build/inline-page-stylesheet.test.mts diff --git a/site/test/arrival-discovery.test.mts b/site/build/prepare/arrival-discovery.test.mts similarity index 100% rename from site/test/arrival-discovery.test.mts rename to site/build/prepare/arrival-discovery.test.mts diff --git a/site/test/body-additions.test.mts b/site/build/prepare/body-additions.test.mts similarity index 100% rename from site/test/body-additions.test.mts rename to site/build/prepare/body-additions.test.mts diff --git a/site/test/check-preparation-inputs.test.mts b/site/build/prepare/check-preparation-inputs.test.mts similarity index 100% rename from site/test/check-preparation-inputs.test.mts rename to site/build/prepare/check-preparation-inputs.test.mts diff --git a/site/test/descriptor-roundtrip.test.mts b/site/build/prepare/descriptor-roundtrip.test.mts similarity index 100% rename from site/test/descriptor-roundtrip.test.mts rename to site/build/prepare/descriptor-roundtrip.test.mts diff --git a/site/test/lonlat-slice-table.test.mts b/site/build/prepare/lonlat-slice-table.test.mts similarity index 100% rename from site/test/lonlat-slice-table.test.mts rename to site/build/prepare/lonlat-slice-table.test.mts diff --git a/site/test/prepare-authored.test.mts b/site/build/prepare/prepare-authored.test.mts similarity index 100% rename from site/test/prepare-authored.test.mts rename to site/build/prepare/prepare-authored.test.mts diff --git a/site/test/prepare-context-availability.test.mts b/site/build/prepare/prepare-context-availability.test.mts similarity index 100% rename from site/test/prepare-context-availability.test.mts rename to site/build/prepare/prepare-context-availability.test.mts diff --git a/site/test/prepare-object-json.test.mts b/site/build/prepare/prepare-object-json.test.mts similarity index 100% rename from site/test/prepare-object-json.test.mts rename to site/build/prepare/prepare-object-json.test.mts diff --git a/site/test/prepare-spatial-context.test.mts b/site/build/prepare/prepare-spatial-context.test.mts similarity index 100% rename from site/test/prepare-spatial-context.test.mts rename to site/build/prepare/prepare-spatial-context.test.mts diff --git a/site/test/prepare-text.test.mts b/site/build/prepare/prepare-text.test.mts similarity index 100% rename from site/test/prepare-text.test.mts rename to site/build/prepare/prepare-text.test.mts diff --git a/site/test/refresh-charts.test.mts b/site/build/prepare/refresh-charts.test.mts similarity index 100% rename from site/test/refresh-charts.test.mts rename to site/build/prepare/refresh-charts.test.mts diff --git a/site/test/setup-assets.test.mts b/site/build/prepare/setup-assets.test.mts similarity index 100% rename from site/test/setup-assets.test.mts rename to site/build/prepare/setup-assets.test.mts diff --git a/site/test/prepared-motion-css.test.mts b/site/build/prepared-motion-css.test.mts similarity index 100% rename from site/test/prepared-motion-css.test.mts rename to site/build/prepared-motion-css.test.mts diff --git a/site/test/restore-inputs.test.mts b/site/build/restore-inputs.test.mts similarity index 100% rename from site/test/restore-inputs.test.mts rename to site/build/restore-inputs.test.mts diff --git a/site/test/run-script-chain.test.mts b/site/build/run-script-chain.test.mts similarity index 100% rename from site/test/run-script-chain.test.mts rename to site/build/run-script-chain.test.mts diff --git a/site/dataset-content.mts b/site/content/dataset-content.mts similarity index 100% rename from site/dataset-content.mts rename to site/content/dataset-content.mts diff --git a/site/dataset-context.characterization.test.mts b/site/content/dataset-context.characterization.test.mts similarity index 100% rename from site/dataset-context.characterization.test.mts rename to site/content/dataset-context.characterization.test.mts diff --git a/site/dataset-context.mts b/site/content/dataset-context.mts similarity index 100% rename from site/dataset-context.mts rename to site/content/dataset-context.mts diff --git a/site/learn-more.characterization.test.mts b/site/content/learn-more.characterization.test.mts similarity index 100% rename from site/learn-more.characterization.test.mts rename to site/content/learn-more.characterization.test.mts diff --git a/site/learn-more.mts b/site/content/learn-more.mts similarity index 100% rename from site/learn-more.mts rename to site/content/learn-more.mts diff --git a/site/object-text.characterization.test.mts b/site/content/object-text.characterization.test.mts similarity index 100% rename from site/object-text.characterization.test.mts rename to site/content/object-text.characterization.test.mts diff --git a/site/object-text.mts b/site/content/object-text.mts similarity index 100% rename from site/object-text.mts rename to site/content/object-text.mts diff --git a/site/test/object-text.test.mts b/site/content/object-text.test.mts similarity index 100% rename from site/test/object-text.test.mts rename to site/content/object-text.test.mts diff --git a/site/prepared-panel-content.characterization.test.mts b/site/content/prepared-panel-content.characterization.test.mts similarity index 100% rename from site/prepared-panel-content.characterization.test.mts rename to site/content/prepared-panel-content.characterization.test.mts diff --git a/site/prepared-panel-content.mts b/site/content/prepared-panel-content.mts similarity index 100% rename from site/prepared-panel-content.mts rename to site/content/prepared-panel-content.mts diff --git a/site/prepared-panel-content.shared-readers.test.mts b/site/content/prepared-panel-content.shared-readers.test.mts similarity index 100% rename from site/prepared-panel-content.shared-readers.test.mts rename to site/content/prepared-panel-content.shared-readers.test.mts diff --git a/site/test/prepared-panel-content.test.mts b/site/content/prepared-panel-content.test.mts similarity index 100% rename from site/test/prepared-panel-content.test.mts rename to site/content/prepared-panel-content.test.mts diff --git a/site/sidebar-thumbnails.characterization.test.mts b/site/content/sidebar-thumbnails.characterization.test.mts similarity index 100% rename from site/sidebar-thumbnails.characterization.test.mts rename to site/content/sidebar-thumbnails.characterization.test.mts diff --git a/site/sidebar-thumbnails.mts b/site/content/sidebar-thumbnails.mts similarity index 100% rename from site/sidebar-thumbnails.mts rename to site/content/sidebar-thumbnails.mts diff --git a/site/source-icons.characterization.test.mts b/site/content/source-icons.characterization.test.mts similarity index 100% rename from site/source-icons.characterization.test.mts rename to site/content/source-icons.characterization.test.mts diff --git a/site/source-icons.mts b/site/content/source-icons.mts similarity index 100% rename from site/source-icons.mts rename to site/content/source-icons.mts diff --git a/site/volume-presentation.mts b/site/content/volume-presentation.mts similarity index 100% rename from site/volume-presentation.mts rename to site/content/volume-presentation.mts diff --git a/site/test/volume-presentation.test.mts b/site/content/volume-presentation.test.mts similarity index 100% rename from site/test/volume-presentation.test.mts rename to site/content/volume-presentation.test.mts diff --git a/site/object-page-contract.mts b/site/contracts/object-page-contract.mts similarity index 100% rename from site/object-page-contract.mts rename to site/contracts/object-page-contract.mts diff --git a/site/object-shell-types.ts b/site/contracts/object-shell-types.ts similarity index 100% rename from site/object-shell-types.ts rename to site/contracts/object-shell-types.ts diff --git a/site/test/prepared-presentation-bindings.test.mts b/site/contracts/prepared-presentation-bindings.test.mts similarity index 100% rename from site/test/prepared-presentation-bindings.test.mts rename to site/contracts/prepared-presentation-bindings.test.mts diff --git a/site/test/fixtures/objects.mts b/site/directory/fixtures/objects.mts similarity index 100% rename from site/test/fixtures/objects.mts rename to site/directory/fixtures/objects.mts diff --git a/site/object-entries.characterization.test.mts b/site/directory/object-entries.characterization.test.mts similarity index 100% rename from site/object-entries.characterization.test.mts rename to site/directory/object-entries.characterization.test.mts diff --git a/site/object-entries.mts b/site/directory/object-entries.mts similarity index 100% rename from site/object-entries.mts rename to site/directory/object-entries.mts diff --git a/site/object-entry-types.mts b/site/directory/object-entry-types.mts similarity index 100% rename from site/object-entry-types.mts rename to site/directory/object-entry-types.mts diff --git a/site/startup-requests.characterization.test.mts b/site/directory/startup-requests.characterization.test.mts similarity index 100% rename from site/startup-requests.characterization.test.mts rename to site/directory/startup-requests.characterization.test.mts diff --git a/site/startup-requests.mts b/site/directory/startup-requests.mts similarity index 100% rename from site/startup-requests.mts rename to site/directory/startup-requests.mts diff --git a/site/test/startup-requests.test.mts b/site/directory/startup-requests.test.mts similarity index 100% rename from site/test/startup-requests.test.mts rename to site/directory/startup-requests.test.mts diff --git a/site/test/astro-component-imports.test.mts b/site/journeys/astro-component-imports.test.mts similarity index 100% rename from site/test/astro-component-imports.test.mts rename to site/journeys/astro-component-imports.test.mts diff --git a/site/test/browser-node-imports.test.mts b/site/journeys/browser-node-imports.test.mts similarity index 100% rename from site/test/browser-node-imports.test.mts rename to site/journeys/browser-node-imports.test.mts diff --git a/site/test/cloudflare-worker.test.mts b/site/journeys/cloudflare-worker.test.mts similarity index 100% rename from site/test/cloudflare-worker.test.mts rename to site/journeys/cloudflare-worker.test.mts diff --git a/site/test/context-lineage.test.mts b/site/journeys/context-lineage.test.mts similarity index 100% rename from site/test/context-lineage.test.mts rename to site/journeys/context-lineage.test.mts diff --git a/site/test/diagnostic-accessor.test.mts b/site/journeys/diagnostic-accessor.test.mts similarity index 100% rename from site/test/diagnostic-accessor.test.mts rename to site/journeys/diagnostic-accessor.test.mts diff --git a/site/test/neutral-catalogue-color.test.mts b/site/journeys/neutral-catalogue-color.test.mts similarity index 100% rename from site/test/neutral-catalogue-color.test.mts rename to site/journeys/neutral-catalogue-color.test.mts diff --git a/site/test/object-control-binding.test.mts b/site/journeys/object-control-binding.test.mts similarity index 100% rename from site/test/object-control-binding.test.mts rename to site/journeys/object-control-binding.test.mts diff --git a/site/test/object-runtime-contract.test.mts b/site/journeys/object-runtime-contract.test.mts similarity index 100% rename from site/test/object-runtime-contract.test.mts rename to site/journeys/object-runtime-contract.test.mts diff --git a/site/test/preparation-boundary.test.mts b/site/journeys/preparation-boundary.test.mts similarity index 100% rename from site/test/preparation-boundary.test.mts rename to site/journeys/preparation-boundary.test.mts diff --git a/site/test/prepared-dataset-labels.test.mts b/site/journeys/prepared-dataset-labels.test.mts similarity index 100% rename from site/test/prepared-dataset-labels.test.mts rename to site/journeys/prepared-dataset-labels.test.mts diff --git a/site/test/prepared-presentation-contract.test.mts b/site/journeys/prepared-presentation-contract.test.mts similarity index 100% rename from site/test/prepared-presentation-contract.test.mts rename to site/journeys/prepared-presentation-contract.test.mts diff --git a/site/test/production-diagnostics.test.mts b/site/journeys/production-diagnostics.test.mts similarity index 100% rename from site/test/production-diagnostics.test.mts rename to site/journeys/production-diagnostics.test.mts diff --git a/site/test/recovery-commands.test.mts b/site/journeys/recovery-commands.test.mts similarity index 100% rename from site/test/recovery-commands.test.mts rename to site/journeys/recovery-commands.test.mts diff --git a/site/test/rendered-page.test.mts b/site/journeys/rendered-page.test.mts similarity index 100% rename from site/test/rendered-page.test.mts rename to site/journeys/rendered-page.test.mts diff --git a/site/test/seo-discovery.mts b/site/journeys/seo-discovery.test-support.mts similarity index 100% rename from site/test/seo-discovery.mts rename to site/journeys/seo-discovery.test-support.mts diff --git a/site/test/seo-discovery.test.mts b/site/journeys/seo-discovery.test.mts similarity index 100% rename from site/test/seo-discovery.test.mts rename to site/journeys/seo-discovery.test.mts diff --git a/site/test/surface-label-loop.test.mts b/site/journeys/surface-label-loop.test.mts similarity index 100% rename from site/test/surface-label-loop.test.mts rename to site/journeys/surface-label-loop.test.mts diff --git a/site/test/world-billboards.test.mts b/site/journeys/world-billboards.test.mts similarity index 100% rename from site/test/world-billboards.test.mts rename to site/journeys/world-billboards.test.mts diff --git a/site/object-navigation-marker.css b/site/layouts/object-navigation-marker.css similarity index 100% rename from site/object-navigation-marker.css rename to site/layouts/object-navigation-marker.css diff --git a/site/site.css b/site/layouts/site.css similarity index 100% rename from site/site.css rename to site/layouts/site.css diff --git a/site/wordmark.css b/site/layouts/wordmark.css similarity index 100% rename from site/wordmark.css rename to site/layouts/wordmark.css diff --git a/site/test/evidence/passive-minimaps/browser.json b/site/minimap/evidence/passive-minimaps/browser.json similarity index 100% rename from site/test/evidence/passive-minimaps/browser.json rename to site/minimap/evidence/passive-minimaps/browser.json diff --git a/site/test/evidence/passive-minimaps/earth.png b/site/minimap/evidence/passive-minimaps/earth.png similarity index 100% rename from site/test/evidence/passive-minimaps/earth.png rename to site/minimap/evidence/passive-minimaps/earth.png diff --git a/site/test/evidence/passive-minimaps/jupiter-sequence.png b/site/minimap/evidence/passive-minimaps/jupiter-sequence.png similarity index 100% rename from site/test/evidence/passive-minimaps/jupiter-sequence.png rename to site/minimap/evidence/passive-minimaps/jupiter-sequence.png diff --git a/site/test/surface-minimap.test.mts b/site/minimap/surface-minimap.test.mts similarity index 100% rename from site/test/surface-minimap.test.mts rename to site/minimap/surface-minimap.test.mts diff --git a/site/dataset-url.mts b/site/model/dataset-url.mts similarity index 100% rename from site/dataset-url.mts rename to site/model/dataset-url.mts diff --git a/site/test/dataset-url.test.mts b/site/model/dataset-url.test.mts similarity index 100% rename from site/test/dataset-url.test.mts rename to site/model/dataset-url.test.mts diff --git a/site/object-classification-label.characterization.test.mts b/site/model/object-classification-label.characterization.test.mts similarity index 100% rename from site/object-classification-label.characterization.test.mts rename to site/model/object-classification-label.characterization.test.mts diff --git a/site/object-classification-label.mts b/site/model/object-classification-label.mts similarity index 100% rename from site/object-classification-label.mts rename to site/model/object-classification-label.mts diff --git a/site/orbit-root.mts b/site/model/orbit-root.mts similarity index 100% rename from site/orbit-root.mts rename to site/model/orbit-root.mts diff --git a/site/planetary-system-members.mts b/site/model/planetary-system-members.mts similarity index 100% rename from site/planetary-system-members.mts rename to site/model/planetary-system-members.mts diff --git a/site/root-object.mts b/site/model/root-object.mts similarity index 100% rename from site/root-object.mts rename to site/model/root-object.mts diff --git a/site/navigation/system-address.mts b/site/model/system-address.mts similarity index 100% rename from site/navigation/system-address.mts rename to site/model/system-address.mts diff --git a/site/arrival-billboard.mts b/site/navigation/arrival-billboard.mts similarity index 100% rename from site/arrival-billboard.mts rename to site/navigation/arrival-billboard.mts diff --git a/site/test/arrival-billboard.test.mts b/site/navigation/arrival-billboard.test.mts similarity index 100% rename from site/test/arrival-billboard.test.mts rename to site/navigation/arrival-billboard.test.mts diff --git a/site/test/navigation-content.test.mts b/site/navigation/navigation-content.test.mts similarity index 100% rename from site/test/navigation-content.test.mts rename to site/navigation/navigation-content.test.mts diff --git a/site/test/navigation-fragments.test.mts b/site/navigation/navigation-fragments.test.mts similarity index 100% rename from site/test/navigation-fragments.test.mts rename to site/navigation/navigation-fragments.test.mts diff --git a/site/test/navigation-lifecycle.test.mts b/site/navigation/navigation-lifecycle.test.mts similarity index 100% rename from site/test/navigation-lifecycle.test.mts rename to site/navigation/navigation-lifecycle.test.mts diff --git a/site/test/navigation-readiness.test.mts b/site/navigation/navigation-readiness.test.mts similarity index 100% rename from site/test/navigation-readiness.test.mts rename to site/navigation/navigation-readiness.test.mts diff --git a/site/test/navigation-shell-content.test.mts b/site/navigation/navigation-shell-content.test.mts similarity index 100% rename from site/test/navigation-shell-content.test.mts rename to site/navigation/navigation-shell-content.test.mts diff --git a/site/test/navigation-styles.test.mts b/site/navigation/navigation-styles.test.mts similarity index 100% rename from site/test/navigation-styles.test.mts rename to site/navigation/navigation-styles.test.mts diff --git a/site/test/navigation-timing.test.mts b/site/navigation/navigation-timing.test.mts similarity index 100% rename from site/test/navigation-timing.test.mts rename to site/navigation/navigation-timing.test.mts diff --git a/site/prepared-descriptor.mts b/site/navigation/prepared-descriptor.mts similarity index 100% rename from site/prepared-descriptor.mts rename to site/navigation/prepared-descriptor.mts diff --git a/site/test/prepared-descriptor.test.mts b/site/navigation/prepared-descriptor.test.mts similarity index 100% rename from site/test/prepared-descriptor.test.mts rename to site/navigation/prepared-descriptor.test.mts diff --git a/site/prepared-scene-ownership.mts b/site/navigation/prepared-scene-ownership.mts similarity index 100% rename from site/prepared-scene-ownership.mts rename to site/navigation/prepared-scene-ownership.mts diff --git a/site/view-url-runtime.characterization.test.mts b/site/navigation/view-url-runtime.characterization.test.mts similarity index 100% rename from site/view-url-runtime.characterization.test.mts rename to site/navigation/view-url-runtime.characterization.test.mts diff --git a/site/view-url-runtime.mts b/site/navigation/view-url-runtime.mts similarity index 100% rename from site/view-url-runtime.mts rename to site/navigation/view-url-runtime.mts diff --git a/site/test/view-url-runtime.test.mts b/site/navigation/view-url-runtime.test.mts similarity index 100% rename from site/test/view-url-runtime.test.mts rename to site/navigation/view-url-runtime.test.mts diff --git a/site/test/source-evidence-values.mts b/site/overview/source-evidence-values.test-support.mts similarity index 100% rename from site/test/source-evidence-values.mts rename to site/overview/source-evidence-values.test-support.mts diff --git a/site/prepared-object-path.mts b/site/prepared/prepared-object-path.mts similarity index 100% rename from site/prepared-object-path.mts rename to site/prepared/prepared-object-path.mts diff --git a/site/test/camera-handover.test.mts b/site/scene/camera-handover.test.mts similarity index 100% rename from site/test/camera-handover.test.mts rename to site/scene/camera-handover.test.mts diff --git a/site/test/fixtures/characterization-runtime.mts b/site/scene/fixtures/characterization-runtime.mts similarity index 100% rename from site/test/fixtures/characterization-runtime.mts rename to site/scene/fixtures/characterization-runtime.mts diff --git a/site/initial-scene.characterization.test.mts b/site/scene/initial-scene.characterization.test.mts similarity index 100% rename from site/initial-scene.characterization.test.mts rename to site/scene/initial-scene.characterization.test.mts diff --git a/site/initial-scene.mts b/site/scene/initial-scene.mts similarity index 100% rename from site/initial-scene.mts rename to site/scene/initial-scene.mts diff --git a/site/test/scene-datasets.test.mts b/site/scene/scene-datasets.test.mts similarity index 100% rename from site/test/scene-datasets.test.mts rename to site/scene/scene-datasets.test.mts diff --git a/site/test/scene-frame.test.mts b/site/scene/scene-frame.test.mts similarity index 100% rename from site/test/scene-frame.test.mts rename to site/scene/scene-frame.test.mts diff --git a/site/test/scene-publication.test.mts b/site/scene/scene-publication.test.mts similarity index 100% rename from site/test/scene-publication.test.mts rename to site/scene/scene-publication.test.mts diff --git a/site/test/scene-session.test.mts b/site/scene/scene-session.test.mts similarity index 100% rename from site/test/scene-session.test.mts rename to site/scene/scene-session.test.mts diff --git a/site/test/catalogue-window.test.mts b/site/search/catalogue-window.test.mts similarity index 100% rename from site/test/catalogue-window.test.mts rename to site/search/catalogue-window.test.mts diff --git a/site/test/galactic-focus.test.mts b/site/search/galactic-focus.test.mts similarity index 100% rename from site/test/galactic-focus.test.mts rename to site/search/galactic-focus.test.mts diff --git a/site/test/list-distance.test.mts b/site/search/list-distance.test.mts similarity index 100% rename from site/test/list-distance.test.mts rename to site/search/list-distance.test.mts diff --git a/site/test/object-result.test.mts b/site/search/object-result.test.mts similarity index 100% rename from site/test/object-result.test.mts rename to site/search/object-result.test.mts diff --git a/site/test/object-search-rank.test.mts b/site/search/object-search-rank.test.mts similarity index 100% rename from site/test/object-search-rank.test.mts rename to site/search/object-search-rank.test.mts diff --git a/site/test/shell-selectors.test.mts b/site/search/shell-selectors.test.mts similarity index 100% rename from site/test/shell-selectors.test.mts rename to site/search/shell-selectors.test.mts diff --git a/site/asset-origin.characterization.test.mts b/site/server-assets/asset-origin.characterization.test.mts similarity index 100% rename from site/asset-origin.characterization.test.mts rename to site/server-assets/asset-origin.characterization.test.mts diff --git a/site/asset-origin.mts b/site/server-assets/asset-origin.mts similarity index 100% rename from site/asset-origin.mts rename to site/server-assets/asset-origin.mts diff --git a/site/test/asset-origin.test.mts b/site/server/asset-origin.test.mts similarity index 100% rename from site/test/asset-origin.test.mts rename to site/server/asset-origin.test.mts diff --git a/site/built-pages.mts b/site/server/built-pages.mts similarity index 100% rename from site/built-pages.mts rename to site/server/built-pages.mts diff --git a/site/test/built-pages.test.mts b/site/server/built-pages.test.mts similarity index 100% rename from site/test/built-pages.test.mts rename to site/server/built-pages.test.mts diff --git a/site/dataset-response.characterization.test.mts b/site/server/dataset-response.characterization.test.mts similarity index 100% rename from site/dataset-response.characterization.test.mts rename to site/server/dataset-response.characterization.test.mts diff --git a/site/dataset-response.mts b/site/server/dataset-response.mts similarity index 100% rename from site/dataset-response.mts rename to site/server/dataset-response.mts diff --git a/site/test/dataset-response.test.mts b/site/server/dataset-response.test.mts similarity index 100% rename from site/test/dataset-response.test.mts rename to site/server/dataset-response.test.mts diff --git a/site/first-view-transport.characterization.test.mts b/site/server/first-view-transport.characterization.test.mts similarity index 100% rename from site/first-view-transport.characterization.test.mts rename to site/server/first-view-transport.characterization.test.mts diff --git a/site/first-view-transport.mts b/site/server/first-view-transport.mts similarity index 100% rename from site/first-view-transport.mts rename to site/server/first-view-transport.mts diff --git a/site/test/first-view-transport.test.mts b/site/server/first-view-transport.test.mts similarity index 100% rename from site/test/first-view-transport.test.mts rename to site/server/first-view-transport.test.mts diff --git a/site/test/information-tab-styles.test.mts b/site/server/information-tab-styles.test.mts similarity index 100% rename from site/test/information-tab-styles.test.mts rename to site/server/information-tab-styles.test.mts diff --git a/site/test/kept-load.test.mts b/site/server/kept-load.test.mts similarity index 100% rename from site/test/kept-load.test.mts rename to site/server/kept-load.test.mts diff --git a/site/object-page-data.characterization.test.mts b/site/server/object-page-data.characterization.test.mts similarity index 100% rename from site/object-page-data.characterization.test.mts rename to site/server/object-page-data.characterization.test.mts diff --git a/site/object-page-data.mts b/site/server/object-page-data.mts similarity index 100% rename from site/object-page-data.mts rename to site/server/object-page-data.mts diff --git a/site/test/object-page-data.test.mts b/site/server/object-page-data.test.mts similarity index 100% rename from site/test/object-page-data.test.mts rename to site/server/object-page-data.test.mts diff --git a/site/test/preview.test.mts b/site/server/preview.test.mts similarity index 100% rename from site/test/preview.test.mts rename to site/server/preview.test.mts diff --git a/site/chart-pixel-alignment.mts b/site/shell/chart-pixel-alignment.mts similarity index 100% rename from site/chart-pixel-alignment.mts rename to site/shell/chart-pixel-alignment.mts diff --git a/site/test/chart-pixel-alignment.test.mts b/site/shell/chart-pixel-alignment.test.mts similarity index 100% rename from site/test/chart-pixel-alignment.test.mts rename to site/shell/chart-pixel-alignment.test.mts diff --git a/site/dataset-picker.characterization.test.mts b/site/shell/dataset-picker.characterization.test.mts similarity index 100% rename from site/dataset-picker.characterization.test.mts rename to site/shell/dataset-picker.characterization.test.mts diff --git a/site/dataset-picker.mts b/site/shell/dataset-picker.mts similarity index 100% rename from site/dataset-picker.mts rename to site/shell/dataset-picker.mts diff --git a/site/test/dataset-picker.test.mts b/site/shell/dataset-picker.test.mts similarity index 100% rename from site/test/dataset-picker.test.mts rename to site/shell/dataset-picker.test.mts diff --git a/site/test/information-card-sections.test.mts b/site/shell/information-card-sections.test.mts similarity index 100% rename from site/test/information-card-sections.test.mts rename to site/shell/information-card-sections.test.mts diff --git a/site/information-card.characterization.test.mts b/site/shell/information-card.characterization.test.mts similarity index 100% rename from site/information-card.characterization.test.mts rename to site/shell/information-card.characterization.test.mts diff --git a/site/information-card.mts b/site/shell/information-card.mts similarity index 100% rename from site/information-card.mts rename to site/shell/information-card.mts diff --git a/site/layout-sections.characterization.test.mts b/site/shell/layout-sections.characterization.test.mts similarity index 100% rename from site/layout-sections.characterization.test.mts rename to site/shell/layout-sections.characterization.test.mts diff --git a/site/layout-sections.mts b/site/shell/layout-sections.mts similarity index 100% rename from site/layout-sections.mts rename to site/shell/layout-sections.mts diff --git a/site/native-view-forms.characterization.test.mts b/site/shell/native-view-forms.characterization.test.mts similarity index 100% rename from site/native-view-forms.characterization.test.mts rename to site/shell/native-view-forms.characterization.test.mts diff --git a/site/native-view-forms.mts b/site/shell/native-view-forms.mts similarity index 100% rename from site/native-view-forms.mts rename to site/shell/native-view-forms.mts diff --git a/site/test/shell-settings.test.mts b/site/shell/shell-settings.test.mts similarity index 100% rename from site/test/shell-settings.test.mts rename to site/shell/shell-settings.test.mts diff --git a/site/test/shell-sheet.test.mts b/site/shell/shell-sheet.test.mts similarity index 100% rename from site/test/shell-sheet.test.mts rename to site/shell/shell-sheet.test.mts diff --git a/site/tab-panels.characterization.test.mts b/site/shell/tab-panels.characterization.test.mts similarity index 100% rename from site/tab-panels.characterization.test.mts rename to site/shell/tab-panels.characterization.test.mts diff --git a/site/tab-panels.mts b/site/shell/tab-panels.mts similarity index 100% rename from site/tab-panels.mts rename to site/shell/tab-panels.mts diff --git a/site/error-report.mts b/site/startup/error-report.mts similarity index 100% rename from site/error-report.mts rename to site/startup/error-report.mts diff --git a/site/initial-shell-context.mts b/site/startup/initial-shell-context.mts similarity index 100% rename from site/initial-shell-context.mts rename to site/startup/initial-shell-context.mts diff --git a/site/startup-cover.characterization.test.mts b/site/startup/startup-cover.characterization.test.mts similarity index 100% rename from site/startup-cover.characterization.test.mts rename to site/startup/startup-cover.characterization.test.mts diff --git a/site/startup-cover.mts b/site/startup/startup-cover.mts similarity index 100% rename from site/startup-cover.mts rename to site/startup/startup-cover.mts diff --git a/site/web-analytics.mts b/site/startup/web-analytics.mts similarity index 100% rename from site/web-analytics.mts rename to site/startup/web-analytics.mts diff --git a/site/context-availability.characterization.test.mts b/site/world/context-availability.characterization.test.mts similarity index 100% rename from site/context-availability.characterization.test.mts rename to site/world/context-availability.characterization.test.mts diff --git a/site/context-availability.mts b/site/world/context-availability.mts similarity index 100% rename from site/context-availability.mts rename to site/world/context-availability.mts diff --git a/site/context-datasets.mts b/site/world/context-datasets.mts similarity index 100% rename from site/context-datasets.mts rename to site/world/context-datasets.mts diff --git a/site/default-width-share.characterization.test.mts b/site/world/default-width-share.characterization.test.mts similarity index 100% rename from site/default-width-share.characterization.test.mts rename to site/world/default-width-share.characterization.test.mts diff --git a/site/default-width-share.mts b/site/world/default-width-share.mts similarity index 100% rename from site/default-width-share.mts rename to site/world/default-width-share.mts diff --git a/site/dot-catalogues.characterization.test.mts b/site/world/dot-catalogues.characterization.test.mts similarity index 100% rename from site/dot-catalogues.characterization.test.mts rename to site/world/dot-catalogues.characterization.test.mts diff --git a/site/dot-catalogues.mts b/site/world/dot-catalogues.mts similarity index 100% rename from site/dot-catalogues.mts rename to site/world/dot-catalogues.mts diff --git a/site/test/fixtures/anchor-table.mts b/site/world/fixtures/anchor-table.mts similarity index 100% rename from site/test/fixtures/anchor-table.mts rename to site/world/fixtures/anchor-table.mts diff --git a/site/test/fixtures/galaxies/captures.json b/site/world/fixtures/galaxies/captures.json similarity index 100% rename from site/test/fixtures/galaxies/captures.json rename to site/world/fixtures/galaxies/captures.json diff --git a/site/test/fixtures/prepared-schemas.mts b/site/world/fixtures/prepared-schemas.mts similarity index 100% rename from site/test/fixtures/prepared-schemas.mts rename to site/world/fixtures/prepared-schemas.mts diff --git a/site/test/fixtures/saturn-prepared.mts b/site/world/fixtures/saturn-prepared.mts similarity index 100% rename from site/test/fixtures/saturn-prepared.mts rename to site/world/fixtures/saturn-prepared.mts diff --git a/site/moon-orbit-policy.characterization.test.mts b/site/world/moon-orbit-policy.characterization.test.mts similarity index 100% rename from site/moon-orbit-policy.characterization.test.mts rename to site/world/moon-orbit-policy.characterization.test.mts diff --git a/site/moon-orbit-policy.mts b/site/world/moon-orbit-policy.mts similarity index 100% rename from site/moon-orbit-policy.mts rename to site/world/moon-orbit-policy.mts diff --git a/site/system-framing-radii.mts b/site/world/system-framing-radii.mts similarity index 100% rename from site/system-framing-radii.mts rename to site/world/system-framing-radii.mts diff --git a/site/world-camera.mts b/site/world/world-camera.mts similarity index 100% rename from site/world-camera.mts rename to site/world/world-camera.mts diff --git a/site/world-preferences.characterization.test.mts b/site/world/world-preferences.characterization.test.mts similarity index 100% rename from site/world-preferences.characterization.test.mts rename to site/world/world-preferences.characterization.test.mts diff --git a/site/world-preferences.mts b/site/world/world-preferences.mts similarity index 100% rename from site/world-preferences.mts rename to site/world/world-preferences.mts diff --git a/site/world-viewport.characterization.test.mts b/site/world/world-viewport.characterization.test.mts similarity index 100% rename from site/world-viewport.characterization.test.mts rename to site/world/world-viewport.characterization.test.mts diff --git a/site/world-viewport.mts b/site/world/world-viewport.mts similarity index 100% rename from site/world-viewport.mts rename to site/world/world-viewport.mts diff --git a/site/zoom-carry.characterization.test.mts b/site/world/zoom-carry.characterization.test.mts similarity index 100% rename from site/zoom-carry.characterization.test.mts rename to site/world/zoom-carry.characterization.test.mts diff --git a/site/zoom-carry.mts b/site/world/zoom-carry.mts similarity index 100% rename from site/zoom-carry.mts rename to site/world/zoom-carry.mts From 023ac7907c0960a689832c3a2deb9d56529a52b5 Mon Sep 17 00:00:00 2001 From: Juan Cruz Fortunatti Date: Mon, 5 Oct 2026 20:10:41 +0200 Subject: [PATCH 2/2] refactor(site): move site files no pending change touches into their owner folders --- .../references/implementation-map.md | 6 +- .github/ci-areas.json | 2 +- .github/coverage-ratchet.json | 220 ++++++++--------- .../architecture/architecture.test.mts | 2 +- .../format-schema-exceptions.json | 2 +- .../moved-format-ownership.test.mts | 2 +- .../build-compare/apply-moves.test.mts | 4 +- .github/scripts/checks/check-no-variables.mts | 2 +- .../checks/package-boundaries.test.mts | 2 +- .github/scripts/ci/astroquery-tests.test.mts | 2 +- .../journeys/breakages/dependent-order.json | 2 +- .../journeys/breakages/duplicate-fetch.json | 2 +- .../journeys/breakages/reduced-motion.json | 2 +- .../scripts/performance/breakages/apply.mts | 2 +- .../performance/breakages/chunk-split.json | 2 +- .../breakages/extra-first-view-request.json | 2 +- .github/site-refactor.json | 198 ++++++++++++++- .github/workflows/audit.yml | 6 +- .github/workflows/nightly.yml | 2 +- AGENTS.md | 2 +- CONTRIBUTING.md | 2 +- astro.config.mts | 2 +- cloudflare/worker.ts | 2 +- docs/architecture/exploration-catalog.md | 8 +- docs/flight-lifecycle.md | 12 +- docs/galaxies/README.md | 2 +- docs/moon-catalogues.md | 2 +- docs/native-scroll-zoom.md | 2 +- docs/navigation-identity.md | 4 +- docs/object-provenance.md | 2 +- docs/page-navigation-transport.md | 14 +- docs/prepared-navigation-ownership.md | 4 +- docs/reader-text.md | 2 +- docs/seo.md | 4 +- docs/site-architecture.md | 38 +-- docs/site-architecture/moves.json | 189 --------------- docs/site-architecture/tiers.json | 226 +++++++++--------- .../lab/src/adapters/css-earth-shell.css | 2 +- netlify/functions/report.ts | 2 +- .../bake/src/delivery/asset-origin-scenes.ts | 2 +- .../src/delivery/public-runtime-assets.ts | 2 +- .../prepared-presentation-bindings.ts | 2 +- .../renderer/src/navigation/camera-layout.ts | 2 +- .../src/rendering/prepared-asset-origin.ts | 2 +- ...on-world-context.characterization.test.mts | 6 +- site/application-world-context.mts | 6 +- ...-world-resources.characterization.test.mts | 10 +- site/application-world-resources.mts | 14 +- site/application-world-visibility.mts | 6 +- site/browser/error-report.test.mts | 2 +- site/browser/in-flight-loader.test.mts | 2 +- site/browser/initial-shell-context.test.mts | 2 +- site/browser/runtime-policy.mts | 2 +- site/browser/runtime-policy.test.mts | 2 +- site/browser/source-link.test.mts | 2 +- site/browser/web-analytics.test.mts | 2 +- site/build/charts/charts.test.mts | 2 +- site/build/charts/folded-transit.test.mts | 4 +- .../load-object-content.test-support.mts | 2 +- .../content/prepared-dataset-facts.test.mts | 6 +- .../content/prepared-dataset-legends.test.mts | 4 +- site/build/inline-page-stylesheet.test.mts | 2 +- site/build/object-package-contract.mts | 2 +- site/build/prepare/arrival-discovery.test.mts | 6 +- site/build/prepare/body-additions.test.mts | 8 +- .../prepare/check-preparation-inputs.mts | 4 +- .../prepare/check-preparation-inputs.test.mts | 2 +- .../prepare/descriptor-roundtrip.test.mts | 2 +- .../build/prepare/lonlat-slice-table.test.mts | 6 +- site/build/prepare/prepare-authored.test.mts | 2 +- site/build/prepare/prepare-catalog.mts | 2 +- .../prepare/prepare-context-availability.mts | 2 +- .../prepare-context-availability.test.mts | 4 +- site/build/prepare/prepare-feature-index.mts | 2 +- site/build/prepare/prepare-interior-fills.mts | 2 +- .../prepare/prepare-object-discovery.mts | 2 +- site/build/prepare/prepare-object-json.mts | 2 +- .../prepare/prepare-object-json.test.mts | 2 +- .../prepare/prepare-sidebar-thumbnails.mts | 2 +- .../prepare/prepare-spatial-context.test.mts | 4 +- site/build/prepare/prepare-spatial-context.ts | 2 +- site/build/prepare/prepare-text.mts | 6 +- site/build/prepare/prepare-text.test.mts | 2 +- .../prepare/prepare-volume-presentation.mts | 8 +- site/build/prepare/refresh-charts.test.mts | 2 +- site/build/prepare/refresh-source-icons.mts | 2 +- site/build/prepare/setup-assets.test.mts | 4 +- site/build/prepare/system-packages.mts | 2 +- site/build/prepare/system-text.mts | 2 +- site/build/prepared-motion-css.test.mts | 2 +- site/build/restore-inputs.test.mts | 4 +- site/build/run-script-chain.test.mts | 2 +- site/build/share-images.mts | 2 +- site/components/ContextNavigationMarker.astro | 2 +- site/components/CssEarthWordmark.astro | 2 +- site/components/DatasetContextPanels.astro | 4 +- site/components/DatasetDescription.astro | 4 +- site/components/DatasetLegend.astro | 2 +- site/components/DatasetList.astro | 4 +- site/components/ObjectBreadcrumbs.astro | 2 +- site/components/ObjectCardHeader.astro | 2 +- site/components/ObjectFactsheet.astro | 2 +- site/components/ObjectInformationPanel.astro | 4 +- site/components/ObjectPage.astro | 6 +- site/components/ObjectShell.astro | 4 +- site/components/PreparedObjectPanel.astro | 2 +- site/components/SequencePlayer.astro | 2 +- site/content/object-text.test.mts | 2 +- site/content/prepared-panel-content.mts | 2 +- site/content/prepared-panel-content.test.mts | 2 +- site/content/sidebar-thumbnails.mts | 2 +- site/content/volume-presentation.test.mts | 2 +- .../prepared-presentation-bindings.test.mts | 2 +- site/directory/fixtures/objects.mts | 4 +- site/directory/object-entry-types.mts | 2 +- site/directory/startup-requests.test.mts | 2 +- site/inside-view.mts | 2 +- site/journeys/manifest-entries.json | 42 ++-- site/journeys/seo-discovery.test.mts | 2 +- site/journeys/unreachable.json | 4 +- site/layouts/ObjectLayout.astro | 26 +- site/minimap/surface-minimap.test.mts | 2 +- site/model/dataset-url.test.mts | 2 +- site/model/planetary-system-members.mts | 2 +- site/model/root-object.mts | 2 +- site/navigation/arrival-billboard.test.mts | 2 +- site/navigation/navigation-content.mts | 2 +- site/navigation/navigation-content.test.mts | 2 +- site/navigation/navigation-fragments.mts | 2 +- site/navigation/navigation-fragments.test.mts | 2 +- site/navigation/navigation-history.mts | 2 +- site/navigation/navigation-lifecycle.test.mts | 2 +- site/navigation/navigation-readiness.test.mts | 2 +- site/navigation/navigation-request.mts | 2 +- site/navigation/navigation-scope.mts | 4 +- .../navigation-shell-content.test.mts | 2 +- site/navigation/navigation-styles.test.mts | 2 +- site/navigation/navigation-timing.test.mts | 4 +- site/navigation/prepared-descriptor.test.mts | 2 +- ...view-url-runtime.characterization.test.mts | 2 +- site/navigation/view-url-runtime.mts | 2 +- site/navigation/view-url-runtime.test.mts | 2 +- site/object-browser.mts | 2 +- site/object-directory.mts | 4 +- site/object-entry-types.test.mts | 6 +- site/object-systems.mts | 4 +- site/objects.mts | 4 +- site/overview-selection.mts | 2 +- ...d-object-runtime.characterization.test.mts | 8 +- site/packaged-object-runtime.mts | 10 +- site/pages/[id].astro | 2 +- site/pages/index.astro | 2 +- site/pages/native-input.css.ts | 4 +- site/pages/navigation/[id].astro | 4 +- .../objects/[id]/asset-hashes/[group].json.ts | 2 +- .../objects/[id]/datasets/[dataset].json.ts | 6 +- site/pages/objects/[id]/entry.json.ts | 2 +- site/pages/objects/[id]/first-view.json.ts | 6 +- site/pages/objects/[id]/object.json.ts | 6 +- site/pages/sitemap.xml.ts | 2 +- site/pages/world/anywhere.json.ts | 2 +- site/pages/world/systems/[id].json.ts | 2 +- ...epare-body-moons.characterization.test.mts | 2 +- site/prepare-body-moons.mts | 2 +- site/prepared-arrival.mts | 4 +- site/prepared-world-navigation.mts | 10 +- site/satellite-systems.mts | 2 +- site/scene/camera-handover.mts | 2 +- site/scene/camera-handover.test.mts | 4 +- site/scene/scene-activation.mts | 2 +- site/scene/scene-datasets.mts | 4 +- site/scene/scene-datasets.test.mts | 4 +- site/scene/scene-feature.mts | 2 +- site/scene/scene-frame-presenter.mts | 2 +- site/scene/scene-frame.test.mts | 2 +- site/scene/scene-publication.mts | 4 +- site/scene/scene-publication.test.mts | 6 +- site/scene/scene-router.mts | 18 +- site/scene/scene-selection.mts | 2 +- site/scene/scene-session.mts | 2 +- site/scene/scene-session.test.mts | 6 +- site/scene/scene-subject.mts | 2 +- site/scene/scene-view.mts | 4 +- site/search/catalogue-window.test.mts | 4 +- site/search/galactic-focus.test.mts | 2 +- site/search/list-distance.test.mts | 2 +- site/search/object-result.test.mts | 4 +- site/search/object-search-rank.test.mts | 2 +- site/search/prepared-catalogue-index.mts | 2 +- site/search/search-client.mts | 4 +- site/search/search-objects.mts | 2 +- site/search/shell-selectors.test.mts | 2 +- site/selection-presentation.mts | 2 +- site/server/asset-origin.test.mts | 2 +- site/server/built-pages.test.mts | 2 +- ...dataset-response.characterization.test.mts | 2 +- site/server/dataset-response.mts | 10 +- site/server/dataset-response.test.mts | 14 +- site/server/first-view-transport.test.mts | 6 +- site/server/information-tab-styles.test.mts | 2 +- site/server/kept-load.test.mts | 2 +- site/server/load-prepared-scene.mts | 4 +- ...object-page-data.characterization.test.mts | 4 +- site/server/object-page-data.mts | 2 +- site/server/object-page-data.test.mts | 4 +- site/server/preview.test.mts | 2 +- site/server/search-response.mts | 6 +- site/server/search-route.mts | 2 +- site/shell/chart-pixel-alignment.mts | 2 +- site/shell/chart-pixel-alignment.test.mts | 4 +- .../dataset-picker.characterization.test.mts | 4 +- site/shell/dataset-picker.mts | 4 +- site/shell/dataset-picker.test.mts | 2 +- site/shell/information-card-sections.test.mts | 2 +- ...information-card.characterization.test.mts | 2 +- site/shell/information-card.mts | 4 +- .../layout-sections.characterization.test.mts | 4 +- site/shell/layout-sections.mts | 4 +- site/shell/object-shell-client.mts | 12 +- site/shell/object-shell-types.mts | 2 +- site/shell/shell-settings.mts | 2 +- site/shell/shell-settings.test.mts | 4 +- site/shell/shell-sheet.mts | 2 +- site/shell/shell-sheet.test.mts | 6 +- site/shell/tab-panels.mts | 2 +- site/source-documentation.mts | 2 +- ...tartup-billboard.characterization.test.mts | 2 +- site/startup-billboard.mts | 4 +- site/startup-world.characterization.test.mts | 2 +- site/startup-world.mts | 4 +- site/system-card.mts | 2 +- site/system-framing.mts | 6 +- site/test/compact-spectrum.test.mts | 2 +- site/test/hosted-banks.test.mts | 2 +- site/test/navigation-history.test.mts | 2 +- site/test/navigation-ontology.test.mts | 2 +- site/test/navigation-preparation.test.mts | 2 +- site/test/navigation-scope.test.mts | 6 +- site/test/object-navigation.test.mts | 2 +- site/test/object-package-contract.test.mts | 2 +- site/test/object-systems.test.mts | 4 +- site/test/prepared-icons.test.mts | 2 +- site/test/runtime-package.test.mts | 4 +- site/test/startup-billboard.test.mts | 4 +- site/test/startup-cover.test.mts | 4 +- site/test/system-framing.test.mts | 2 +- site/test/system-text.test.mts | 2 +- ...rld-context-plan.characterization.test.mts | 2 +- site/world-context-plan.mts | 4 +- site/world-system-views.mts | 2 +- site/world/system-framing-radii.mts | 2 +- site/zoom-scope.mts | 2 +- src/objects/README.md | 2 +- .../nearby-universe-galaxies/README.md | 2 +- src/objects/observable-universe-cmb/README.md | 2 +- src/objects/wasp-103b/README.md | 2 +- 256 files changed, 875 insertions(+), 876 deletions(-) diff --git a/.agents/skills/celestial-skill/references/implementation-map.md b/.agents/skills/celestial-skill/references/implementation-map.md index 6ecf6429eb8..3ebb31662f7 100644 --- a/.agents/skills/celestial-skill/references/implementation-map.md +++ b/.agents/skills/celestial-skill/references/implementation-map.md @@ -52,8 +52,8 @@ fallback requirements are not the current authored-package template. | Preparation dispatch and publication | `site/build/prepare/prepare-authored.ts`, `packages/bake/src/delivery/publication.ts`, `site/build/prepare/prepare-object-json.mts` | | Source acquisition, verification and runtime inventory | `packages/bake/src/objects/acquisition/operations-acquisition.ts`, `packages/bake/src/objects/sources/source-files.ts`, `packages/bake/src/objects/acquisition/object-operations.ts`, package source manifests and acquisition JSON | | Retained scene, selection, resources and lifecycle | `packages/renderer/src/runtime/object-runtime.ts`, `packages/renderer/src/rendering/`, `packages/renderer/src/runtime/shell-contract.ts`, `site/scene/scene-router.mts` | -| Shared input, world camera and physical registration | `site/runtime-policy.mts`, `packages/renderer/src/navigation/`, `packages/renderer/src/rendering/prepared-camera-runtime.ts`, `packages/bake/src/objects/scene/world-navigation.ts` | -| Shared page and content presentation | `site/pages/[id].astro`, `site/components/ObjectPage.astro`, `site/object-page-data.mts`, `site/object-page-contract.mts`, `site/layouts/ObjectLayout.astro` | +| Shared input, world camera and physical registration | `site/browser/runtime-policy.mts`, `packages/renderer/src/navigation/`, `packages/renderer/src/rendering/prepared-camera-runtime.ts`, `packages/bake/src/objects/scene/world-navigation.ts` | +| Shared page and content presentation | `site/pages/[id].astro`, `site/components/ObjectPage.astro`, `site/server/object-page-data.mts`, `site/contracts/object-page-contract.mts`, `site/layouts/ObjectLayout.astro` | | Content, dataset labels and minimap preparation | `@cssearth/bake/objects/content` (the content contract, dataset labels, dataset steps and legends), `site/build/content/prepare.ts`, `@cssearth/bake/surface-previews` (`surface-minimaps.ts`) | | Search and marker presentation | `site/search/search-objects.mts`, `packages/bake/src/navigation/prepare-navigation.ts`, `packages/renderer/src/navigation/marker-presentation.ts` | | Open hyperbolic trajectories | `packages/astronomy/src/kepler.ts`, `packages/bake/src/world-context/hyperbolic-path.ts`, shared world-context preparation and orbit validation/projector | @@ -475,7 +475,7 @@ are retired. `pnpm test` runs packages, renderer, native tests, the preparation subset and lab checks; use the affected suite or direct test files for a focused change. The shared runtime-package test exercises registered object packages. -`site/test/rendered-page.test.mts` reads an existing build and checks that the +`site/journeys/rendered-page.test.mts` reads an existing build and checks that the information-tab rules live in the scene head. It does not build every object or test interaction, raster appearance or line wrapping. The old Playwright conformance profiles are retired; inspect changed browser views and interactions as required diff --git a/.github/ci-areas.json b/.github/ci-areas.json index c74f1275f3b..076a800dde1 100644 --- a/.github/ci-areas.json +++ b/.github/ci-areas.json @@ -28,7 +28,7 @@ "src/objects/cubic-sky-contract.test.mts", "integration/**", "packages/objects/src/provenance/dataset-destination.ts", - "site/orbit-root.mts", + "site/model/orbit-root.mts", "src/sources/factsheet-sources.test.mts", "src/objects/object-package-consistency.test.mts", "site/objects.mts", diff --git a/.github/coverage-ratchet.json b/.github/coverage-ratchet.json index d9b5a9dd9fa..c9f47009662 100644 --- a/.github/coverage-ratchet.json +++ b/.github/coverage-ratchet.json @@ -8,69 +8,69 @@ "site/application-world-resources.mts", "site/application-world-types.mts", "site/application-world-visibility.mts", - "site/arrival-billboard.mts", - "site/asset-origin.mts", - "site/built-pages.mts", + "site/navigation/arrival-billboard.mts", + "site/server-assets/asset-origin.mts", + "site/server/built-pages.mts", "site/catalogue-moon-labels.mts", - "site/chart-pixel-alignment.mts", - "site/context-availability.mts", - "site/context-datasets.mts", - "site/dataset-content.mts", - "site/dataset-context.mts", - "site/dataset-picker.mts", - "site/dataset-response.mts", - "site/dataset-url.mts", - "site/default-width-share.mts", + "site/shell/chart-pixel-alignment.mts", + "site/world/context-availability.mts", + "site/world/context-datasets.mts", + "site/content/dataset-content.mts", + "site/content/dataset-context.mts", + "site/shell/dataset-picker.mts", + "site/server/dataset-response.mts", + "site/model/dataset-url.mts", + "site/world/default-width-share.mts", "site/destination-browser.mts", "site/diagnostic-recorder.mts", - "site/diagnostics-policy.mts", + "site/browser/diagnostics-policy.mts", "site/dot-catalogue-data.mts", - "site/dot-catalogues.mts", - "site/error-report.mts", + "site/world/dot-catalogues.mts", + "site/startup/error-report.mts", "site/exploration-catalog.mts", "site/feature-browser.mts", - "site/first-view-transport.mts", + "site/server/first-view-transport.mts", "site/hosted-banks.mts", "site/import-queue.mts", - "site/in-flight-loader.mts", - "site/information-card.mts", - "site/initial-scene.mts", - "site/initial-shell-context.mts", + "site/browser/in-flight-loader.mts", + "site/shell/information-card.mts", + "site/scene/initial-scene.mts", + "site/startup/initial-shell-context.mts", "site/inside-view.mts", - "site/layout-sections.mts", - "site/learn-more.mts", - "site/moon-orbit-policy.mts", - "site/narrow-layout.mts", - "site/native-input.mts", - "site/native-view-forms.mts", - "site/next-frame.mts", + "site/shell/layout-sections.mts", + "site/content/learn-more.mts", + "site/world/moon-orbit-policy.mts", + "site/browser/narrow-layout.mts", + "site/browser/native-input.mts", + "site/shell/native-view-forms.mts", + "site/browser/next-frame.mts", "site/object-adapter.mts", "site/object-browser.mts", "site/object-children.mts", - "site/object-classification-label.mts", + "site/model/object-classification-label.mts", "site/object-directory.mts", - "site/object-entries.mts", + "site/directory/object-entries.mts", "site/object-entry.mts", - "site/object-page-contract.mts", - "site/object-page-data.mts", - "site/object-shell-types.ts", + "site/contracts/object-page-contract.mts", + "site/server/object-page-data.mts", + "site/contracts/object-shell-types.ts", "site/object-systems.mts", - "site/object-text.mts", + "site/content/object-text.mts", "site/objects.mts", - "site/orbit-root.mts", + "site/model/orbit-root.mts", "site/overview-selection.mts", "site/packaged-object-runtime.mts", - "site/planetary-system-members.mts", + "site/model/planetary-system-members.mts", "site/prepare-body-moons.mts", "site/prepared-arrival.mts", - "site/prepared-descriptor.mts", - "site/prepared-object-path.mts", - "site/prepared-panel-content.mts", - "site/prepared-scene-ownership.mts", + "site/navigation/prepared-descriptor.mts", + "site/prepared/prepared-object-path.mts", + "site/content/prepared-panel-content.mts", + "site/navigation/prepared-scene-ownership.mts", "site/prepared-world-navigation.mts", "site/prepared-world-presentation.mts", - "site/root-object.mts", - "site/runtime-policy.mts", + "site/model/root-object.mts", + "site/browser/runtime-policy.mts", "site/satellite-selection.mts", "site/satellite-systems.mts", "site/selection-presentation.mts", @@ -78,34 +78,34 @@ "site/seo.mts", "site/shared-imports.mts", "site/showcase.mts", - "site/sidebar-thumbnails.mts", + "site/content/sidebar-thumbnails.mts", "site/social-images.mts", "site/source-documentation.mts", - "site/source-icons.mts", - "site/source-link.mts", + "site/content/source-icons.mts", + "site/browser/source-link.mts", "site/startup-billboard.mts", "site/startup-boot.mts", - "site/startup-cover.mts", - "site/startup-requests.mts", + "site/startup/startup-cover.mts", + "site/directory/startup-requests.mts", "site/startup-world.mts", "site/stellar-extents.mts", "site/system-card.mts", - "site/system-framing-radii.mts", + "site/world/system-framing-radii.mts", "site/system-framing.mts", - "site/tab-panels.mts", + "site/shell/tab-panels.mts", "site/view-readout.mts", - "site/view-url-runtime.mts", - "site/volume-presentation.mts", - "site/web-analytics.mts", + "site/navigation/view-url-runtime.mts", + "site/content/volume-presentation.mts", + "site/startup/web-analytics.mts", "site/world-approach.mts", - "site/world-camera.mts", + "site/world/world-camera.mts", "site/world-context-plan.mts", "site/world-objects.mts", "site/world-places.mts", - "site/world-preferences.mts", + "site/world/world-preferences.mts", "site/world-system-views.mts", - "site/world-viewport.mts", - "site/zoom-carry.mts", + "site/world/world-viewport.mts", + "site/world/zoom-carry.mts", "site/zoom-scope.mts" ] }, @@ -140,17 +140,17 @@ "branches": 90.9, "functions": 97.3 }, - "site/arrival-billboard.mts": { + "site/navigation/arrival-billboard.mts": { "lines": 98.1, "branches": 60.6, "functions": 90.9 }, - "site/asset-origin.mts": { + "site/server-assets/asset-origin.mts": { "lines": 100, "branches": 95.3, "functions": 100 }, - "site/built-pages.mts": { + "site/server/built-pages.mts": { "lines": 100, "branches": 93.7, "functions": 100 @@ -160,47 +160,47 @@ "branches": 90.4, "functions": 96.4 }, - "site/chart-pixel-alignment.mts": { + "site/shell/chart-pixel-alignment.mts": { "lines": 100, "branches": 87.5, "functions": 100 }, - "site/context-availability.mts": { + "site/world/context-availability.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/context-datasets.mts": { + "site/world/context-datasets.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/dataset-content.mts": { + "site/content/dataset-content.mts": { "lines": 100, "branches": 88.8, "functions": 100 }, - "site/dataset-context.mts": { + "site/content/dataset-context.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/dataset-picker.mts": { + "site/shell/dataset-picker.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/dataset-response.mts": { + "site/server/dataset-response.mts": { "lines": 95.9, "branches": 84, "functions": 94.4 }, - "site/dataset-url.mts": { + "site/model/dataset-url.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/default-width-share.mts": { + "site/world/default-width-share.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -215,7 +215,7 @@ "branches": 93, "functions": 97.1 }, - "site/diagnostics-policy.mts": { + "site/browser/diagnostics-policy.mts": { "lines": 100, "branches": 33.3, "functions": 100 @@ -225,12 +225,12 @@ "branches": 0, "functions": 0 }, - "site/dot-catalogues.mts": { + "site/world/dot-catalogues.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/error-report.mts": { + "site/startup/error-report.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -245,7 +245,7 @@ "branches": 100, "functions": 100 }, - "site/first-view-transport.mts": { + "site/server/first-view-transport.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -260,22 +260,22 @@ "branches": 100, "functions": 100 }, - "site/in-flight-loader.mts": { + "site/browser/in-flight-loader.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/information-card.mts": { + "site/shell/information-card.mts": { "lines": 100, "branches": 96.7, "functions": 100 }, - "site/initial-scene.mts": { + "site/scene/initial-scene.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/initial-shell-context.mts": { + "site/startup/initial-shell-context.mts": { "lines": 100, "branches": 75, "functions": 100 @@ -285,37 +285,37 @@ "branches": 92.6, "functions": 84.6 }, - "site/layout-sections.mts": { + "site/shell/layout-sections.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/learn-more.mts": { + "site/content/learn-more.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/moon-orbit-policy.mts": { + "site/world/moon-orbit-policy.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/narrow-layout.mts": { + "site/browser/narrow-layout.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/native-input.mts": { + "site/browser/native-input.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/native-view-forms.mts": { + "site/shell/native-view-forms.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/next-frame.mts": { + "site/browser/next-frame.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -335,7 +335,7 @@ "branches": 92.1, "functions": 100 }, - "site/object-classification-label.mts": { + "site/model/object-classification-label.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -345,7 +345,7 @@ "branches": 95.2, "functions": 100 }, - "site/object-entries.mts": { + "site/directory/object-entries.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -355,17 +355,17 @@ "branches": 60, "functions": 100 }, - "site/object-page-contract.mts": { + "site/contracts/object-page-contract.mts": { "lines": 100, "branches": 90, "functions": 100 }, - "site/object-page-data.mts": { + "site/server/object-page-data.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/object-shell-types.ts": { + "site/contracts/object-shell-types.ts": { "lines": 100, "branches": 100, "functions": 100 @@ -375,7 +375,7 @@ "branches": 100, "functions": 100 }, - "site/object-text.mts": { + "site/content/object-text.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -385,7 +385,7 @@ "branches": 75, "functions": 100 }, - "site/orbit-root.mts": { + "site/model/orbit-root.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -400,7 +400,7 @@ "branches": 91.6, "functions": 100 }, - "site/planetary-system-members.mts": { + "site/model/planetary-system-members.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -415,22 +415,22 @@ "branches": 100, "functions": 100 }, - "site/prepared-descriptor.mts": { + "site/navigation/prepared-descriptor.mts": { "lines": 100, "branches": 75, "functions": 100 }, - "site/prepared-object-path.mts": { + "site/prepared/prepared-object-path.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/prepared-panel-content.mts": { + "site/content/prepared-panel-content.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/prepared-scene-ownership.mts": { + "site/navigation/prepared-scene-ownership.mts": { "lines": 100, "branches": 77.7, "functions": 100 @@ -445,12 +445,12 @@ "branches": 100, "functions": 100 }, - "site/root-object.mts": { + "site/model/root-object.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/runtime-policy.mts": { + "site/browser/runtime-policy.mts": { "lines": 95.1, "branches": 81.8, "functions": 91.6 @@ -490,7 +490,7 @@ "branches": 100, "functions": 100 }, - "site/sidebar-thumbnails.mts": { + "site/content/sidebar-thumbnails.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -505,12 +505,12 @@ "branches": 69.7, "functions": 70 }, - "site/source-icons.mts": { + "site/content/source-icons.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/source-link.mts": { + "site/browser/source-link.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -525,12 +525,12 @@ "branches": 100, "functions": 100 }, - "site/startup-cover.mts": { + "site/startup/startup-cover.mts": { "lines": 100, "branches": 94.5, "functions": 80 }, - "site/startup-requests.mts": { + "site/directory/startup-requests.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -550,7 +550,7 @@ "branches": 87.5, "functions": 100 }, - "site/system-framing-radii.mts": { + "site/world/system-framing-radii.mts": { "lines": 100, "branches": 89.2, "functions": 100 @@ -560,7 +560,7 @@ "branches": 90.4, "functions": 100 }, - "site/tab-panels.mts": { + "site/shell/tab-panels.mts": { "lines": 100, "branches": 87.5, "functions": 100 @@ -570,17 +570,17 @@ "branches": 97.1, "functions": 100 }, - "site/view-url-runtime.mts": { + "site/navigation/view-url-runtime.mts": { "lines": 100, "branches": 100, "functions": 91.6 }, - "site/volume-presentation.mts": { + "site/content/volume-presentation.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/web-analytics.mts": { + "site/startup/web-analytics.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -590,7 +590,7 @@ "branches": 100, "functions": 100 }, - "site/world-camera.mts": { + "site/world/world-camera.mts": { "lines": 100, "branches": 60, "functions": 100 @@ -610,7 +610,7 @@ "branches": 90, "functions": 100 }, - "site/world-preferences.mts": { + "site/world/world-preferences.mts": { "lines": 100, "branches": 100, "functions": 100 @@ -620,12 +620,12 @@ "branches": 100, "functions": 100 }, - "site/world-viewport.mts": { + "site/world/world-viewport.mts": { "lines": 100, "branches": 100, "functions": 100 }, - "site/zoom-carry.mts": { + "site/world/zoom-carry.mts": { "lines": 100, "branches": 100, "functions": 100 diff --git a/.github/scripts/architecture/architecture.test.mts b/.github/scripts/architecture/architecture.test.mts index 04c78b656bf..b1c1631c301 100644 --- a/.github/scripts/architecture/architecture.test.mts +++ b/.github/scripts/architecture/architecture.test.mts @@ -433,7 +433,7 @@ test('nothing-imports-applications covers tests and every non-application tree, const rule = LAYER_RULES.find(item => item.id === 'nothing-imports-applications')!; const found = (...pairs: readonly (readonly [string, string])[]) => measure(graph(...pairs), [rule]).rules.get(rule.id)!.length; for (const from of ['src/platform/x.mts', 'src/platform/x.test.mts', 'integration/x.test.mts', 'packages/core/src/x.test.ts', 'labs/other/x.test.mts']) - assert.equal(found([from, 'site/runtime-policy.mts']), 1, `${from} -> site/ fails`); + assert.equal(found([from, 'site/browser/runtime-policy.mts']), 1, `${from} -> site/ fails`); assert.equal(found(['src/platform/x.mts', 'labs/nebula/y.mts']), 1, 'src -> labs fails'); assert.equal(found(['src/platform/x.mts', '.github/scripts/y.mts']), 1, 'src -> .github fails'); assert.equal(found(['labs/performance/source-maps.test.mts', 'site/build/source-maps.mts']), 1, 'the former named exception fails'); diff --git a/.github/scripts/architecture/format-schema-exceptions.json b/.github/scripts/architecture/format-schema-exceptions.json index f4c7390a34d..d8e4a7107d3 100644 --- a/.github/scripts/architecture/format-schema-exceptions.json +++ b/.github/scripts/architecture/format-schema-exceptions.json @@ -89,6 +89,6 @@ "owners": [ "site" ], - "reason": "P5 moves build preview admission into objects. The existing site/volume-presentation.mts runtime adapter retains its schema spelling because this packet forbids runtime changes; site/test/volume-presentation.test.mts pins its admission. Remove this exception when that runtime adapter imports the objects identifier in Plan 7." + "reason": "P5 moves build preview admission into objects. The existing site/content/volume-presentation.mts runtime adapter retains its schema spelling because this packet forbids runtime changes; site/content/volume-presentation.test.mts pins its admission. Remove this exception when that runtime adapter imports the objects identifier in Plan 7." } ] diff --git a/.github/scripts/architecture/moved-format-ownership.test.mts b/.github/scripts/architecture/moved-format-ownership.test.mts index 2f1d554251e..dfcdb1c63ec 100644 --- a/.github/scripts/architecture/moved-format-ownership.test.mts +++ b/.github/scripts/architecture/moved-format-ownership.test.mts @@ -14,7 +14,7 @@ const publishers = new Set([ 'packages/telescope/src/node/product-record.ts', 'packages/telescope-cli/src/body-map-publication.mts', 'packages/telescope-cli/src/vo/discovery.mts', 'packages/telescope-cli/authoring/circumstellar/author.mts', 'packages/bake/authoring/betelgeuse-shell/author.mts', 'packages/bake/authoring/galileo-lucy/orbits.mts', - 'packages/bake/cli/prepare-nebula-field-catalogues.mts', 'site/test/fixtures/context-package.mts', + 'packages/bake/cli/prepare-nebula-field-catalogues.mts', 'site/build/fixtures/context-package.mts', ]); // Routing and scientific checks retained by the move. Only these exact AST expressions // are admitted, never the containing file or a named function's arbitrary body. diff --git a/.github/scripts/build-compare/apply-moves.test.mts b/.github/scripts/build-compare/apply-moves.test.mts index 0629d58b47a..45478a9394c 100644 --- a/.github/scripts/build-compare/apply-moves.test.mts +++ b/.github/scripts/build-compare/apply-moves.test.mts @@ -166,10 +166,10 @@ test('finite computed references in moved importers still refuse', () => { }); test('every tracked owner is scanned, including CSS, Astro styles, config and exact globs', () => { - fixture({ 'site/leaf.css': 'body{}', 'site/site.css': "@import './leaf.css';", 'site/page.astro': "", 'astro.config.mts': "import './site/leaf.css';", 'packages/check.mts': "import '../site/leaf.css';", 'site/glob.mts': "import.meta.glob('./leaf.css');" }, root => { + fixture({ 'site/leaf.css': 'body{}', 'site/sheet.css': "@import './leaf.css';", 'site/page.astro': "", 'astro.config.mts': "import './site/leaf.css';", 'packages/check.mts': "import '../site/leaf.css';", 'site/glob.mts': "import.meta.glob('./leaf.css');" }, root => { const plan = applyMoves(root, { 'site/leaf.css': 'site/styles/leaf.css' }); assert.equal(plan.rewritten, 5); - assert.match(readFileSync(resolve(root, 'site/site.css'), 'utf8'), /styles\/leaf.css/u); + assert.match(readFileSync(resolve(root, 'site/sheet.css'), 'utf8'), /styles\/leaf.css/u); assert.match(readFileSync(resolve(root, 'astro.config.mts'), 'utf8'), /styles\/leaf.css/u); assert.match(readFileSync(resolve(root, 'packages/check.mts'), 'utf8'), /styles\/leaf.css/u); assert.match(readFileSync(resolve(root, 'site/page.astro'), 'utf8'), /styles\/leaf.css/u); diff --git a/.github/scripts/checks/check-no-variables.mts b/.github/scripts/checks/check-no-variables.mts index dad161ccc57..9a8fd9a4433 100644 --- a/.github/scripts/checks/check-no-variables.mts +++ b/.github/scripts/checks/check-no-variables.mts @@ -6,7 +6,7 @@ * (packages/objects/src/prepared-data/runtime-validation/shipped-runtime.ts). * * The bake's working form does name custom properties, inside its own headless measurement - * (packages/bake/src/presentation/*-records.ts); it is not checked here. The shell's stylesheets (site/shell, site/site.css, + * (packages/bake/src/presentation/*-records.ts); it is not checked here. The shell's stylesheets (site/shell, site/layouts/site.css, * site/object-shell.css) keep their design tokens: they style the interface, not a body. */ import { execFileSync } from 'node:child_process'; diff --git a/.github/scripts/checks/package-boundaries.test.mts b/.github/scripts/checks/package-boundaries.test.mts index 22883facece..b26f96a0243 100644 --- a/.github/scripts/checks/package-boundaries.test.mts +++ b/.github/scripts/checks/package-boundaries.test.mts @@ -52,7 +52,7 @@ test('runtime packages cannot reach site, legacy sources, Node tooling, or rever } } const fixture = path.join(root, 'packages/engine/src/runtime/probe.ts'); - for (const specifier of ['../../../../site/runtime-policy.mts', '../../../../src/platform/object-runtime.mts', '@cssearth/objects', 'node:fs']) { + for (const specifier of ['../../../../site/browser/runtime-policy.mts', '../../../../src/platform/object-runtime.mts', '@cssearth/objects', 'node:fs']) { const tree = parse(`import data from ${JSON.stringify(specifier)}`, { sourceType: 'module' }); assert.ok(imports(tree).some(value => forbiddenImport('engine', fixture, value)), specifier); } diff --git a/.github/scripts/ci/astroquery-tests.test.mts b/.github/scripts/ci/astroquery-tests.test.mts index 213081239ba..3185389e4c0 100644 --- a/.github/scripts/ci/astroquery-tests.test.mts +++ b/.github/scripts/ci/astroquery-tests.test.mts @@ -20,7 +20,7 @@ test('astroquery classification and workflow preserve the protected lane', async const config = await loadCiAreasConfig(); for (const path of ['packages/telescope/src/node/toolchain/python.ts', 'packages/telescope/toolchains/toolchain.json', 'packages/telescope/toolchains/requirements.lock', 'packages/telescope-cli/src/toolchains/astronomy-toolchains.mts', 'packages/telescope-cli/src/archives/jwst/toolchain.json', 'packages/telescope-cli/src/archives/toolchain-descriptor.mts', 'packages/telescope-cli/src/vo/package.mts', 'packages/telescope-cli/src/families/f07-dynamic-spectrum.mts', '.github/ci-areas.json', 'packages/telescope-cli/src/families/f07-dynamic-spectrum.test.mts', 'packages/telescope-cli/src/vo/package.test.mts', '.github/workflows/universe.yml']) assert.ok(classifyAffectedPaths([path], config).jobs.has('astroquery'), path); - for (const path of ['README.md', 'site/runtime-policy.mts']) + for (const path of ['README.md', 'site/browser/runtime-policy.mts']) assert.equal(classifyAffectedPaths([path], config).jobs.has('astroquery'), false, path); const workflow = requireRecord(parse(await readFile(new URL('../../workflows/universe.yml', import.meta.url), 'utf8'))); const jobs = requireRecord(workflow.jobs), job = requireRecord(jobs.astroquery); diff --git a/.github/scripts/journeys/breakages/dependent-order.json b/.github/scripts/journeys/breakages/dependent-order.json index 0a55a4e8c7c..26d26e0777f 100644 --- a/.github/scripts/journeys/breakages/dependent-order.json +++ b/.github/scripts/journeys/breakages/dependent-order.json @@ -15,7 +15,7 @@ ], "substitutions": [ { - "file": "site/startup-requests.mts", + "file": "site/directory/startup-requests.mts", "before": "defaultView ? [transportUrl, ...urls] : urls", "after": "defaultView ? [...urls, transportUrl] : urls", "occurrences": 1 diff --git a/.github/scripts/journeys/breakages/duplicate-fetch.json b/.github/scripts/journeys/breakages/duplicate-fetch.json index e96ea51148a..8a36f2885e5 100644 --- a/.github/scripts/journeys/breakages/duplicate-fetch.json +++ b/.github/scripts/journeys/breakages/duplicate-fetch.json @@ -15,7 +15,7 @@ ], "substitutions": [ { - "file": "site/startup-requests.mts", + "file": "site/directory/startup-requests.mts", "before": " const response = fetch(url);", "after": " const response = fetch(url);\n void fetch(url).catch(() => {});", "occurrences": 1 diff --git a/.github/scripts/journeys/breakages/reduced-motion.json b/.github/scripts/journeys/breakages/reduced-motion.json index 3158e2430fb..589a378c865 100644 --- a/.github/scripts/journeys/breakages/reduced-motion.json +++ b/.github/scripts/journeys/breakages/reduced-motion.json @@ -13,7 +13,7 @@ ], "substitutions": [ { - "file": "site/runtime-policy.mts", + "file": "site/browser/runtime-policy.mts", "before": "const lightCurves = sceneState === \"ready\" && lightCurvesRequested && !documentHidden && !reducedMotion;", "after": "const lightCurves = sceneState === \"ready\" && lightCurvesRequested && !documentHidden;", "occurrences": 1 diff --git a/.github/scripts/performance/breakages/apply.mts b/.github/scripts/performance/breakages/apply.mts index eb9242599de..b55fb2e801f 100644 --- a/.github/scripts/performance/breakages/apply.mts +++ b/.github/scripts/performance/breakages/apply.mts @@ -10,7 +10,7 @@ const patch = record(JSON.parse(await readFile(options.get('--patch')!, 'utf8')) const edits = array(patch.edits).map(raw => { const edit = record(raw); return { file: string(edit.file), before: string(edit.before), after: string(edit.after) }; }); const writes: { file: string; content: string }[] = []; for (const edit of edits) { - if (!['site/layouts/ObjectLayout.astro', 'site/import-queue.mts', 'site/startup-requests.mts', 'astro.config.mts', 'index.html'].includes(edit.file)) throw new Error('Unexpected patch target'); + if (!['site/layouts/ObjectLayout.astro', 'site/import-queue.mts', 'site/directory/startup-requests.mts', 'astro.config.mts', 'index.html'].includes(edit.file)) throw new Error('Unexpected patch target'); const file = resolve(root, edit.file), real = await realpath(file); if (!real.startsWith(root + sep) || (await lstat(file)).isSymbolicLink()) throw new Error('Refusing symlink/outside copy'); const content = await readFile(file, 'utf8'); diff --git a/.github/scripts/performance/breakages/chunk-split.json b/.github/scripts/performance/breakages/chunk-split.json index a06d5f0e34d..c93ba863805 100644 --- a/.github/scripts/performance/breakages/chunk-split.json +++ b/.github/scripts/performance/breakages/chunk-split.json @@ -5,7 +5,7 @@ { "file": "astro.config.mts", "before": "{ build: { modulePreload: false } }", - "after": "{ build: { modulePreload: false, rollupOptions: { output: { manualChunks: (id: string) => id.endsWith('/site/native-view-forms.mts') ? 'l7a-forced-split' : undefined } } } }" + "after": "{ build: { modulePreload: false, rollupOptions: { output: { manualChunks: (id: string) => id.endsWith('/site/shell/native-view-forms.mts') ? 'l7a-forced-split' : undefined } } } }" } ] } diff --git a/.github/scripts/performance/breakages/extra-first-view-request.json b/.github/scripts/performance/breakages/extra-first-view-request.json index cc8b2a741ad..6025b7f214c 100644 --- a/.github/scripts/performance/breakages/extra-first-view-request.json +++ b/.github/scripts/performance/breakages/extra-first-view-request.json @@ -3,7 +3,7 @@ "expected": "FAIL", "edits": [ { - "file": "site/startup-requests.mts", + "file": "site/directory/startup-requests.mts", "before": "const urls = [summaryUrl,", "after": "const urls = ['/objects/earth/entry.json?l7a-extra=1', summaryUrl," } diff --git a/.github/site-refactor.json b/.github/site-refactor.json index 683402f8958..a7b6be98f8b 100644 --- a/.github/site-refactor.json +++ b/.github/site-refactor.json @@ -1,7 +1,195 @@ { - "mode": "semantic", - "moves": {}, - "outputs": [], - "layout": "changes", - "change": "S3-4 moon catalogue" + "mode": "pure-move", + "moves": { + "site/runtime-policy.mts": "site/browser/runtime-policy.mts", + "site/diagnostics-policy.mts": "site/browser/diagnostics-policy.mts", + "site/in-flight-loader.mts": "site/browser/in-flight-loader.mts", + "site/next-frame.mts": "site/browser/next-frame.mts", + "site/narrow-layout.mts": "site/browser/narrow-layout.mts", + "site/object-shell-types.ts": "site/contracts/object-shell-types.ts", + "site/object-page-contract.mts": "site/contracts/object-page-contract.mts", + "site/navigation/system-address.mts": "site/model/system-address.mts", + "site/root-object.mts": "site/model/root-object.mts", + "site/orbit-root.mts": "site/model/orbit-root.mts", + "site/planetary-system-members.mts": "site/model/planetary-system-members.mts", + "site/object-classification-label.mts": "site/model/object-classification-label.mts", + "site/dataset-url.mts": "site/model/dataset-url.mts", + "site/startup-requests.mts": "site/directory/startup-requests.mts", + "site/object-entries.mts": "site/directory/object-entries.mts", + "site/context-availability.mts": "site/world/context-availability.mts", + "site/context-datasets.mts": "site/world/context-datasets.mts", + "site/dot-catalogues.mts": "site/world/dot-catalogues.mts", + "site/world-camera.mts": "site/world/world-camera.mts", + "site/world-viewport.mts": "site/world/world-viewport.mts", + "site/world-preferences.mts": "site/world/world-preferences.mts", + "site/moon-orbit-policy.mts": "site/world/moon-orbit-policy.mts", + "site/system-framing-radii.mts": "site/world/system-framing-radii.mts", + "site/zoom-carry.mts": "site/world/zoom-carry.mts", + "site/initial-scene.mts": "site/scene/initial-scene.mts", + "site/prepared-scene-ownership.mts": "site/navigation/prepared-scene-ownership.mts", + "site/arrival-billboard.mts": "site/navigation/arrival-billboard.mts", + "site/view-url-runtime.mts": "site/navigation/view-url-runtime.mts", + "site/prepared-descriptor.mts": "site/navigation/prepared-descriptor.mts", + "site/information-card.mts": "site/shell/information-card.mts", + "site/chart-pixel-alignment.mts": "site/shell/chart-pixel-alignment.mts", + "site/dataset-picker.mts": "site/shell/dataset-picker.mts", + "site/tab-panels.mts": "site/shell/tab-panels.mts", + "site/layout-sections.mts": "site/shell/layout-sections.mts", + "site/native-view-forms.mts": "site/shell/native-view-forms.mts", + "site/source-link.mts": "site/browser/source-link.mts", + "site/dataset-content.mts": "site/content/dataset-content.mts", + "site/dataset-context.mts": "site/content/dataset-context.mts", + "site/object-text.mts": "site/content/object-text.mts", + "site/prepared-panel-content.mts": "site/content/prepared-panel-content.mts", + "site/volume-presentation.mts": "site/content/volume-presentation.mts", + "site/source-icons.mts": "site/content/source-icons.mts", + "site/sidebar-thumbnails.mts": "site/content/sidebar-thumbnails.mts", + "site/learn-more.mts": "site/content/learn-more.mts", + "site/native-input.mts": "site/browser/native-input.mts", + "site/startup-cover.mts": "site/startup/startup-cover.mts", + "site/initial-shell-context.mts": "site/startup/initial-shell-context.mts", + "site/error-report.mts": "site/startup/error-report.mts", + "site/web-analytics.mts": "site/startup/web-analytics.mts", + "site/asset-origin.mts": "site/server-assets/asset-origin.mts", + "site/object-page-data.mts": "site/server/object-page-data.mts", + "site/first-view-transport.mts": "site/server/first-view-transport.mts", + "site/dataset-response.mts": "site/server/dataset-response.mts", + "site/built-pages.mts": "site/server/built-pages.mts", + "site/default-width-share.mts": "site/world/default-width-share.mts", + "site/prepared-object-path.mts": "site/prepared/prepared-object-path.mts", + "site/prepared-panel-content.shared-readers.test.mts": "site/content/prepared-panel-content.shared-readers.test.mts", + "site/test/arrival-billboard.test.mts": "site/navigation/arrival-billboard.test.mts", + "site/test/arrival-discovery.test.mts": "site/build/prepare/arrival-discovery.test.mts", + "site/test/asset-origin.test.mts": "site/server/asset-origin.test.mts", + "site/test/astro-component-imports.test.mts": "site/journeys/astro-component-imports.test.mts", + "site/test/authored-object-fixture.mts": "site/build/fixtures/authored-object-fixture.mts", + "site/test/body-additions.test.mts": "site/build/prepare/body-additions.test.mts", + "site/test/browser-node-imports.test.mts": "site/journeys/browser-node-imports.test.mts", + "site/test/built-pages.test.mts": "site/server/built-pages.test.mts", + "site/test/camera-handover.test.mts": "site/scene/camera-handover.test.mts", + "site/test/catalogue-window.test.mts": "site/search/catalogue-window.test.mts", + "site/test/chart-pixel-alignment.test.mts": "site/shell/chart-pixel-alignment.test.mts", + "site/test/charts.test.ts": "site/build/charts/charts.test.mts", + "site/test/check-preparation-inputs.test.mts": "site/build/prepare/check-preparation-inputs.test.mts", + "site/test/cloudflare-worker.test.mts": "site/journeys/cloudflare-worker.test.mts", + "site/test/context-lineage.test.mts": "site/journeys/context-lineage.test.mts", + "site/test/dataset-picker.test.mts": "site/shell/dataset-picker.test.mts", + "site/test/dataset-response.test.mts": "site/server/dataset-response.test.mts", + "site/test/dataset-url.test.mts": "site/model/dataset-url.test.mts", + "site/test/descriptor-roundtrip.test.mts": "site/build/prepare/descriptor-roundtrip.test.mts", + "site/test/diagnostic-accessor.test.mts": "site/journeys/diagnostic-accessor.test.mts", + "site/test/error-report.test.mts": "site/browser/error-report.test.mts", + "site/test/evidence/passive-minimaps/browser.json": "site/minimap/evidence/passive-minimaps/browser.json", + "site/test/evidence/passive-minimaps/earth.png": "site/minimap/evidence/passive-minimaps/earth.png", + "site/test/evidence/passive-minimaps/jupiter-sequence.png": "site/minimap/evidence/passive-minimaps/jupiter-sequence.png", + "site/test/first-view-transport.test.mts": "site/server/first-view-transport.test.mts", + "site/test/fixtures/anchor-table.mts": "site/world/fixtures/anchor-table.mts", + "site/test/fixtures/context-package.mts": "site/build/fixtures/context-package.mts", + "site/test/fixtures/galaxies/captures.json": "site/world/fixtures/galaxies/captures.json", + "site/test/fixtures/object-content-fixture.mts": "site/build/fixtures/object-content-fixture.mts", + "site/test/fixtures/objects.mts": "site/directory/fixtures/objects.mts", + "site/test/fixtures/prepared-schemas.mts": "site/world/fixtures/prepared-schemas.mts", + "site/test/fixtures/saturn-prepared.mts": "site/world/fixtures/saturn-prepared.mts", + "site/test/folded-transit.test.mts": "site/build/charts/folded-transit.test.mts", + "site/test/galactic-focus.test.mts": "site/search/galactic-focus.test.mts", + "site/test/in-flight-loader.test.mts": "site/browser/in-flight-loader.test.mts", + "site/test/information-card-sections.test.mts": "site/shell/information-card-sections.test.mts", + "site/test/information-tab-styles.test.mts": "site/server/information-tab-styles.test.mts", + "site/test/initial-shell-context.test.mts": "site/browser/initial-shell-context.test.mts", + "site/test/inline-page-stylesheet.test.mts": "site/build/inline-page-stylesheet.test.mts", + "site/test/kept-load.test.mts": "site/server/kept-load.test.mts", + "site/test/list-distance.test.mts": "site/search/list-distance.test.mts", + "site/test/load-object-content.mts": "site/build/content/load-object-content.test-support.mts", + "site/test/lonlat-slice-table.test.mts": "site/build/prepare/lonlat-slice-table.test.mts", + "site/test/navigation-content.test.mts": "site/navigation/navigation-content.test.mts", + "site/test/navigation-fragments.test.mts": "site/navigation/navigation-fragments.test.mts", + "site/test/navigation-lifecycle.test.mts": "site/navigation/navigation-lifecycle.test.mts", + "site/test/navigation-readiness.test.mts": "site/navigation/navigation-readiness.test.mts", + "site/test/navigation-shell-content.test.mts": "site/navigation/navigation-shell-content.test.mts", + "site/test/navigation-styles.test.mts": "site/navigation/navigation-styles.test.mts", + "site/test/navigation-timing.test.mts": "site/navigation/navigation-timing.test.mts", + "site/test/neutral-catalogue-color.test.mts": "site/journeys/neutral-catalogue-color.test.mts", + "site/test/object-control-binding.test.mts": "site/journeys/object-control-binding.test.mts", + "site/test/object-page-data.test.mts": "site/server/object-page-data.test.mts", + "site/test/object-result.test.mts": "site/search/object-result.test.mts", + "site/test/object-runtime-contract.test.mts": "site/journeys/object-runtime-contract.test.mts", + "site/test/object-search-rank.test.mts": "site/search/object-search-rank.test.mts", + "site/test/object-text.test.mts": "site/content/object-text.test.mts", + "site/test/preparation-boundary.test.mts": "site/journeys/preparation-boundary.test.mts", + "site/test/prepare-authored.test.mts": "site/build/prepare/prepare-authored.test.mts", + "site/test/prepare-context-availability.test.mts": "site/build/prepare/prepare-context-availability.test.mts", + "site/test/prepare-object-json.test.mts": "site/build/prepare/prepare-object-json.test.mts", + "site/test/prepare-spatial-context.test.mts": "site/build/prepare/prepare-spatial-context.test.mts", + "site/test/prepare-text.test.mts": "site/build/prepare/prepare-text.test.mts", + "site/test/prepared-dataset-facts.test.mts": "site/build/content/prepared-dataset-facts.test.mts", + "site/test/prepared-dataset-labels.test.mts": "site/journeys/prepared-dataset-labels.test.mts", + "site/test/prepared-dataset-legends.test.mts": "site/build/content/prepared-dataset-legends.test.mts", + "site/test/prepared-descriptor.test.mts": "site/navigation/prepared-descriptor.test.mts", + "site/test/prepared-motion-css.test.mts": "site/build/prepared-motion-css.test.mts", + "site/test/prepared-panel-content.test.mts": "site/content/prepared-panel-content.test.mts", + "site/test/prepared-presentation-bindings.test.mts": "site/contracts/prepared-presentation-bindings.test.mts", + "site/test/prepared-presentation-contract.test.mts": "site/journeys/prepared-presentation-contract.test.mts", + "site/test/preview.test.mts": "site/server/preview.test.mts", + "site/test/production-diagnostics.test.mts": "site/journeys/production-diagnostics.test.mts", + "site/test/recovery-commands.test.mts": "site/journeys/recovery-commands.test.mts", + "site/test/refresh-charts.test.mts": "site/build/prepare/refresh-charts.test.mts", + "site/test/rendered-page.test.mts": "site/journeys/rendered-page.test.mts", + "site/test/restore-inputs.test.mts": "site/build/restore-inputs.test.mts", + "site/test/run-script-chain.test.mts": "site/build/run-script-chain.test.mts", + "site/test/runtime-policy.test.mts": "site/browser/runtime-policy.test.mts", + "site/test/scene-datasets.test.mts": "site/scene/scene-datasets.test.mts", + "site/test/scene-frame.test.mts": "site/scene/scene-frame.test.mts", + "site/test/scene-publication.test.mts": "site/scene/scene-publication.test.mts", + "site/test/scene-session.test.mts": "site/scene/scene-session.test.mts", + "site/test/seo-discovery.mts": "site/journeys/seo-discovery.test-support.mts", + "site/test/seo-discovery.test.mts": "site/journeys/seo-discovery.test.mts", + "site/test/setup-assets.test.mts": "site/build/prepare/setup-assets.test.mts", + "site/test/shell-selectors.test.mts": "site/search/shell-selectors.test.mts", + "site/test/shell-settings.test.mts": "site/shell/shell-settings.test.mts", + "site/test/shell-sheet.test.mts": "site/shell/shell-sheet.test.mts", + "site/test/source-evidence-values.mts": "site/overview/source-evidence-values.test-support.mts", + "site/test/source-link.test.mts": "site/browser/source-link.test.mts", + "site/test/startup-requests.test.mts": "site/directory/startup-requests.test.mts", + "site/test/surface-label-loop.test.mts": "site/journeys/surface-label-loop.test.mts", + "site/test/surface-minimap.test.mts": "site/minimap/surface-minimap.test.mts", + "site/test/view-url-runtime.test.mts": "site/navigation/view-url-runtime.test.mts", + "site/test/volume-presentation.test.mts": "site/content/volume-presentation.test.mts", + "site/test/web-analytics.test.mts": "site/browser/web-analytics.test.mts", + "site/test/world-billboards.test.mts": "site/journeys/world-billboards.test.mts", + "site/site.css": "site/layouts/site.css", + "site/wordmark.css": "site/layouts/wordmark.css", + "site/object-navigation-marker.css": "site/layouts/object-navigation-marker.css", + "site/asset-origin.characterization.test.mts": "site/server-assets/asset-origin.characterization.test.mts", + "site/dataset-picker.characterization.test.mts": "site/shell/dataset-picker.characterization.test.mts", + "site/dataset-response.characterization.test.mts": "site/server/dataset-response.characterization.test.mts", + "site/object-page-data.characterization.test.mts": "site/server/object-page-data.characterization.test.mts", + "site/startup-requests.characterization.test.mts": "site/directory/startup-requests.characterization.test.mts", + "site/view-url-runtime.characterization.test.mts": "site/navigation/view-url-runtime.characterization.test.mts", + "site/test/fixtures/characterization-runtime.mts": "site/scene/fixtures/characterization-runtime.mts", + "site/context-availability.characterization.test.mts": "site/world/context-availability.characterization.test.mts", + "site/dataset-context.characterization.test.mts": "site/content/dataset-context.characterization.test.mts", + "site/default-width-share.characterization.test.mts": "site/world/default-width-share.characterization.test.mts", + "site/dot-catalogues.characterization.test.mts": "site/world/dot-catalogues.characterization.test.mts", + "site/first-view-transport.characterization.test.mts": "site/server/first-view-transport.characterization.test.mts", + "site/information-card.characterization.test.mts": "site/shell/information-card.characterization.test.mts", + "site/initial-scene.characterization.test.mts": "site/scene/initial-scene.characterization.test.mts", + "site/layout-sections.characterization.test.mts": "site/shell/layout-sections.characterization.test.mts", + "site/learn-more.characterization.test.mts": "site/content/learn-more.characterization.test.mts", + "site/moon-orbit-policy.characterization.test.mts": "site/world/moon-orbit-policy.characterization.test.mts", + "site/native-view-forms.characterization.test.mts": "site/shell/native-view-forms.characterization.test.mts", + "site/next-frame.characterization.test.mts": "site/browser/next-frame.characterization.test.mts", + "site/object-classification-label.characterization.test.mts": "site/model/object-classification-label.characterization.test.mts", + "site/object-entries.characterization.test.mts": "site/directory/object-entries.characterization.test.mts", + "site/object-text.characterization.test.mts": "site/content/object-text.characterization.test.mts", + "site/prepared-panel-content.characterization.test.mts": "site/content/prepared-panel-content.characterization.test.mts", + "site/sidebar-thumbnails.characterization.test.mts": "site/content/sidebar-thumbnails.characterization.test.mts", + "site/source-icons.characterization.test.mts": "site/content/source-icons.characterization.test.mts", + "site/startup-cover.characterization.test.mts": "site/startup/startup-cover.characterization.test.mts", + "site/tab-panels.characterization.test.mts": "site/shell/tab-panels.characterization.test.mts", + "site/world-preferences.characterization.test.mts": "site/world/world-preferences.characterization.test.mts", + "site/world-viewport.characterization.test.mts": "site/world/world-viewport.characterization.test.mts", + "site/zoom-carry.characterization.test.mts": "site/world/zoom-carry.characterization.test.mts", + "site/object-entry-types.mts": "site/directory/object-entry-types.mts" + }, + "change": "S4-1 move the dependency-closed set of site files no pending S3 change touches into their owner folders" } diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index 522948b9e3d..dfb727457a9 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -148,7 +148,7 @@ jobs: # Package-file completeness (a body without its browser profile or ledger) and source *restorability* # (a declared input with neither a tracked copy nor an acquisition operation). Neither reaches the # deployed site: it serves the already-baked prepared bank from R2 at the addresses its inventory names. - run: node --test site/test/restore-inputs.test.mts + run: node --test site/build/restore-inputs.test.mts - name: Reconcile the source catalogue, facility records and provenance receipts if: ${{ !cancelled() }} # Moved off the `Universe / sources` gate lane. These assert that every catalogue row, facility record @@ -177,9 +177,9 @@ jobs: if [ "${GITHUB_EVENT_NAME:-}" != pull_request ]; then # Authoring replays the volume presentations from their FITS sources. node packages/bake/cli/restore-source-inputs.mts --repository-volumes - CSSEARTH_SOURCE_CHECK_MODE=author node --test packages/objects/src/provenance/exploration-catalog.test.ts src/sources/factsheet-sources.test.mts "packages/bake/src/sources/*.test.mts" packages/bake/src/objects/sources/source-manifest-parsers.test.mts "site/test/*{source,facilit}*.test.mts" + CSSEARTH_SOURCE_CHECK_MODE=author node --test packages/objects/src/provenance/exploration-catalog.test.ts src/sources/factsheet-sources.test.mts "packages/bake/src/sources/*.test.mts" packages/bake/src/objects/sources/source-manifest-parsers.test.mts "site/browser/source-link.test.mts" else - CSSEARTH_SOURCE_CHECK_MODE=published node --test packages/objects/src/provenance/exploration-catalog.test.ts src/sources/factsheet-sources.test.mts "packages/bake/src/sources/*.test.mts" packages/bake/src/objects/sources/source-manifest-parsers.test.mts "site/test/*{source,facilit}*.test.mts" + CSSEARTH_SOURCE_CHECK_MODE=published node --test packages/objects/src/provenance/exploration-catalog.test.ts src/sources/factsheet-sources.test.mts "packages/bake/src/sources/*.test.mts" packages/bake/src/objects/sources/source-manifest-parsers.test.mts "site/browser/source-link.test.mts" fi - name: Explain that this job does not gate the merge if: failure() diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 78907231574..876f665a8e2 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -142,4 +142,4 @@ jobs: - name: Check production page invariants and asset URLs env: ASSET_ORIGIN: https://earth-assets.lowpoly.cc - run: node --test site/test/rendered-page.test.mts site/test/asset-origin.test.mts + run: node --test site/journeys/rendered-page.test.mts site/server/asset-origin.test.mts diff --git a/AGENTS.md b/AGENTS.md index f77517a4849..0a389c3ae39 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,7 +4,7 @@ This is the shared agent contract. `CLAUDE.md` is a symlink to this file; directory-specific `AGENTS.md` files add guidance for their owners. - Mount exactly one object scene at a time. Navigation entries navigate; they never coexist as rendered objects. -- Shared input policy belongs in `site/runtime-policy.mts`; browser conformance proves common interaction behavior. Keep object-specific rendering facts inside each object package. Do not fabricate fallback scenes for planned objects. +- Shared input policy belongs in `site/browser/runtime-policy.mts`; browser conformance proves common interaction behavior. Keep object-specific rendering facts inside each object package. Do not fabricate fallback scenes for planned objects. - Keep one open-ended `OBJECTS` registry and one generic object adapter. The Sun, planets, and future moons, dwarf planets, asteroids, or other bodies use the same object contract. The fixed eight planet ids are a reporting filter, not a second registry or adapter. - Use one shared world camera and navigation contract for every prepared object. Menu membership never limits rendering; new object types extend prepared capabilities rather than introduce separate page-based scene owners. - Read the camera's place through the engine's `fromEyeM`, `eyeDistanceM` or `eyeAnchor`; never subtract `world.pose.positionM` by hand. The pose carries its exact offset from the body it is near, which a position in metres from the Sun cannot hold for a small, distant body. `packages/renderer/src/navigation/eye-relative-readers.test.ts` refuses a hand subtraction. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ca24b1a1b9..7b49d94c4fc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -111,7 +111,7 @@ That approval does not publish assets; use the separate workflow above. Prepared runtime files are served from an R2 bucket, content-addressed as `runtime-assets//`. One small inventory per object is tracked in Git instead of the baked bytes: `inventory.json`, listing the public browser textures and everything baked under `prepared/`, each entry with its location, filename, bytes and hash (`object.json` and `page.json` are regenerated, not inventoried). The inventory owner also excludes audit-only terrain reports and source-index rasters. -A page embeds only the hashes its first view reads: files its prepared markup and styles name, its startup resources and the textures its server markup writes. Each other resource's hash waits in a same-origin group file, `/objects//asset-hashes/.json`, which the browser reads the first time a zoom level or dataset needs it. Resources whose keys differ only in their first index share a group (one dataset's pages at one level); keys without an index share one. A hash is 64 characters that do not compress, so Earth's page would otherwise carry 1,754 of them ([`site/asset-origin.mts`](site/asset-origin.mts)). +A page embeds only the hashes its first view reads: files its prepared markup and styles name, its startup resources and the textures its server markup writes. Each other resource's hash waits in a same-origin group file, `/objects//asset-hashes/.json`, which the browser reads the first time a zoom level or dataset needs it. Resources whose keys differ only in their first index share a group (one dataset's pages at one level); keys without an index share one. A hash is 64 characters that do not compress, so Earth's page would otherwise carry 1,754 of them ([`site/server-assets/asset-origin.mts`](./site/server-assets/asset-origin.mts)). After baking, publish and commit the refreshed inventory: diff --git a/astro.config.mts b/astro.config.mts index 22957c29f0d..43e03db0732 100644 --- a/astro.config.mts +++ b/astro.config.mts @@ -10,7 +10,7 @@ import { inlinePageStylesheets } from "./site/build/inline-page-stylesheet.mts"; import { searchServer } from './site/server/search-server.mts'; import { prepareContextAvailability } from "./site/build/prepare/prepare-context-availability.mts"; import { preparedMotionCss } from "./site/build/prepared-motion-css.mts"; -import { assetOrigin, resolveWorldBillboards } from "./site/asset-origin.mts"; +import { assetOrigin, resolveWorldBillboards } from "./site/server-assets/asset-origin.mts"; function cssEarthVersion() { try { diff --git a/cloudflare/worker.ts b/cloudflare/worker.ts index 0fbc8b84e29..5c70309a5a5 100644 --- a/cloudflare/worker.ts +++ b/cloudflare/worker.ts @@ -14,7 +14,7 @@ const SEARCH_PATH = '/.netlify/functions/search', REPORT_PATH = '/.netlify/funct /** How long a reader waits for a page rendered for its query before the static page is sent instead. */ const PAGE_PATIENCE_MS = 10_000; -/** A page's report of its own failure (site/error-report.mts), written to the Worker's log and answered with no content. +/** A page's report of its own failure (site/startup/error-report.mts), written to the Worker's log and answered with no content. * Nothing is stored. The body is capped: this endpoint is public. */ async function report(request: Request): Promise { if (request.method !== 'POST') return new Response(null, { status: 405 }); diff --git a/docs/architecture/exploration-catalog.md b/docs/architecture/exploration-catalog.md index 49398f9311f..df4466e9b77 100644 --- a/docs/architecture/exploration-catalog.md +++ b/docs/architecture/exploration-catalog.md @@ -207,10 +207,10 @@ For changes to dataset selection or routing, also run the affected router tests for cancellation and history. For dataset navigation or card presentation changes, run the affected -[dataset response](../../site/test/dataset-response.test.mts), -[URL](../../site/test/dataset-url.test.mts) and -[scene session](../../site/test/scene-session.test.mts) tests. After a build, -[`rendered-page.test.mts`](../../site/test/rendered-page.test.mts) parses the +[dataset response](../../site/server/dataset-response.test.mts), +[URL](../../site/model/dataset-url.test.mts) and +[scene session](../../site/scene/scene-session.test.mts) tests. After a build, +[`rendered-page.test.mts`](../../site/journeys/rendered-page.test.mts) parses the built HTML to check that the information-tab rules live in the scene head, not in the replaceable card. It does not exercise navigation or inspect browser screenshots. A source association does not certify texture delivery or scientific accuracy. diff --git a/docs/flight-lifecycle.md b/docs/flight-lifecycle.md index 4d0fc008799..5d4a8e5503e 100644 --- a/docs/flight-lifecycle.md +++ b/docs/flight-lifecycle.md @@ -228,7 +228,7 @@ replacement selection therefore settles the old navigation immediately, even when the underlying restoration is still completing. Late transport results release their resources and cannot commit a replacement's history or readiness. -`site/world-preferences.mts` owns motion and display intent independently of +`site/world/world-preferences.mts` owns motion and display intent independently of navigation. Settings controls and search read its current state and issue commands to it; replacing a card never reads preferences back from the DOM. A newly mounted world receives the latest settings. Playback permission remains @@ -259,7 +259,7 @@ releasing resources; a failed URL flush or destructor cannot skip the remaining cleanup. Cancelled activation observes late promise rejection without mounting another scene. -`site/prepared-scene-ownership.mts` keeps the prepared bank under the request's +`site/navigation/prepared-scene-ownership.mts` keeps the prepared bank under the request's abort signal until `WorldHandoff.transferTo` assigns it to the session immediately before mounting. A failed mount releases unclaimed preparation through the session signal. Successful renderer claims continue owning native residency and @@ -270,7 +270,7 @@ Both preserved-view and animated handoffs use this transfer. `pnpm test:site` covers interrupted flights, history, dataset selection, late transport disposal and superseded saved-view restoration. The focused -`site/test/navigation-lifecycle.test.mts` suite checks commit authority and +`site/navigation/navigation-lifecycle.test.mts` suite checks commit authority and cleanup ordering, including abort callbacks and failed destructors. Use an immutable build for sustained recording; repeated preparation and HMR @@ -287,9 +287,9 @@ Choose checks for the changed behavior after building and preparing its inputs: ```sh node --test packages/objects/src/node/prepared-activation-transport.test.mts -node --test site/test/navigation-lifecycle.test.mts -node --test site/test/scene-session.test.mts -node --test site/test/rendered-page.test.mts +node --test site/navigation/navigation-lifecycle.test.mts +node --test site/scene/scene-session.test.mts +node --test site/journeys/rendered-page.test.mts ``` The rendered-page test parses built HTML for the information-tab rules; it does diff --git a/docs/galaxies/README.md b/docs/galaxies/README.md index e8dd96d3eef..d314d515a47 100644 --- a/docs/galaxies/README.md +++ b/docs/galaxies/README.md @@ -75,6 +75,6 @@ The shared [diffuse resampler](../../packages/bake/src/image-layers/resize-rgba. This independently written TypeScript implementation uses the numerical methods documented in libvips 8.18.3's [reduction and kernel tables](https://github.com/libvips/libvips/blob/v8.18.3/libvips/resample/reduceh.cpp), [Lanczos coefficients](https://github.com/libvips/libvips/blob/v8.18.3/libvips/resample/templates.h) and [alpha conversion](https://github.com/libvips/libvips/blob/v8.18.3/libvips/conversion/premultiply.c), plus Sharp 0.35.3's [byte casts](https://github.com/lovell/sharp/blob/v0.35.3/src/pipeline.cc) and [centered crop](https://github.com/lovell/sharp/blob/v0.35.3/src/common.cc). No third-party source text is incorporated. These method references retain their upstream LGPL-2.1-or-later (libvips) and Apache-2.0 (Sharp) licenses. -[capture-galaxies.mts](../../labs/investigations/capture-galaxies.mts) uses an isolated browser context and the real app, verifies all 943 stars and the camera, and reports script and HTTP errors. [captures.json](../../site/test/fixtures/galaxies/captures.json) records the capture settings. +[capture-galaxies.mts](../../labs/investigations/capture-galaxies.mts) uses an isolated browser context and the real app, verifies all 943 stars and the camera, and reports script and HTTP errors. [captures.json](../../site/world/fixtures/galaxies/captures.json) records the capture settings. **Open visual limits:** simulation/observation registration still has an approximately 2.8 kpc model offset; oblique whitening, slice banding and the transition from the interior panorama remain research work. Continue with the lab's [method](../../labs/nebula/METHOD.md), [research](../../labs/nebula/RESEARCH.md), [next steps](../../labs/nebula/NEXTSTEPS.md) and [slice-stability evidence](../../labs/nebula/docs/slice-stability.md). diff --git a/docs/moon-catalogues.md b/docs/moon-catalogues.md index f445fd660e1..8ddadb13028 100644 --- a/docs/moon-catalogues.md +++ b/docs/moon-catalogues.md @@ -80,6 +80,6 @@ identity and ephemeris coverage before accepting refreshed inputs. Do not reuse cached replies for a different epoch or reference frame. Focused checks: `node --test site/test/body-moons.test.mts -site/test/moon-labels.test.mts site/test/source-link.test.mts`. They verify full +site/test/moon-labels.test.mts site/browser/source-link.test.mts`. They verify full catalogue membership, available destinations, major/minor orbit policy, planet occlusion, caption collision and overview hiding. diff --git a/docs/native-scroll-zoom.md b/docs/native-scroll-zoom.md index eeb3a0e1c4f..4a8185921b9 100644 --- a/docs/native-scroll-zoom.md +++ b/docs/native-scroll-zoom.md @@ -80,7 +80,7 @@ With both servers running: ```sh pnpm typecheck:renderer pnpm --filter @cssearth/engine exec tsc -p ../../labs/experiments/native-scroll/tsconfig.json -`pnpm test:site` (the browser suites were retired; scene retention is checked in `site/test/scene-session.test.mts`) +`pnpm test:site` (the browser suites were retired; scene retention is checked in `site/scene/scene-session.test.mts`) ``` The browser checks disable JavaScript, verify the initial centred body, wheel and diff --git a/docs/navigation-identity.md b/docs/navigation-identity.md index b4df70eb1d7..14f7250df5b 100644 --- a/docs/navigation-identity.md +++ b/docs/navigation-identity.md @@ -58,7 +58,7 @@ A planetary system is a star and every prepared body inside its system in the object tree, at any depth. The Solar System is the Sun's; WASP-43 and its planet WASP-43b form another. Each world row says which object its body is inside: the object whose file the row arrives in. -[`planetary-system-members.mts`](../site/planetary-system-members.mts) reads each +[`planetary-system-members.mts`](../site/model/planetary-system-members.mts) reads each system's members from that, and [`object-systems.mts`](../site/object-systems.mts) joins them with the registry, so no list names the systems and nothing walks orbits or bonds to find them. The @@ -203,6 +203,6 @@ owners. Its test preload rejects accidental use of application boot; it does not prove the Vite-generated context inventory or browser startup. Scene conformance remains derived from the scene capability filter. Run -`pnpm test:site` (the browser suites were retired; scene retention is checked in `site/test/scene-session.test.mts`) to check search, selection, saved links and retained +`pnpm test:site` (the browser suites were retired; scene retention is checked in `site/scene/scene-session.test.mts`) to check search, selection, saved links and retained camera ownership. These checks do not establish the scientific accuracy of a catalogue measurement or a reconstructed volume. diff --git a/docs/object-provenance.md b/docs/object-provenance.md index 92782f584f7..ab51c615765 100644 --- a/docs/object-provenance.md +++ b/docs/object-provenance.md @@ -128,7 +128,7 @@ pnpm test:site ``` This is the broad native suite. For a focused change, select the relevant tests under `packages/objects/src/provenance/`, `packages/bake/src/objects/lineage/body-lineage.test.mts`, -`site/test/context-lineage.test.mts`, `src/sources/factsheet-sources.test.mts` and the affected preparer. +`site/journeys/context-lineage.test.mts`, `src/sources/factsheet-sources.test.mts` and the affected preparer. Report source-dependent skips separately. A pass does not replace independent scientific qualification. diff --git a/docs/page-navigation-transport.md b/docs/page-navigation-transport.md index dbc5a9bc126..3e4911849f0 100644 --- a/docs/page-navigation-transport.md +++ b/docs/page-navigation-transport.md @@ -201,12 +201,12 @@ For the camera handoff and interruption behavior, read [flight lifecycle](flight After building the packages and renderer, check page metadata with: ```sh -node --test site/test/object-page-data.test.mts +node --test site/server/object-page-data.test.mts pnpm test:packages # includes rendering/prepared-scene-serialization.test.ts -node --test site/test/rendered-page.test.mts +node --test site/journeys/rendered-page.test.mts node --test site/test/search-response.test.mts -node --test site/test/dataset-response.test.mts site/test/dataset-url.test.mts -node --test site/test/scene-session.test.mts +node --test site/server/dataset-response.test.mts site/model/dataset-url.test.mts +node --test site/scene/scene-session.test.mts ``` Worker reuse, cancellation and disposal are covered by @@ -253,14 +253,14 @@ search field listed the planets, because the first browse pill was the form's de its own. A dataset, settings or saved-view response drew its scene under the default arrival photograph; the photograph now shows only over the empty default stage. At phone width the sheet, with search and the card, stayed hidden waiting for its controller; it now rests at its peek, and its handle opens it. -`site/test/rendered-page.test.mts` checks all three in the built pages. +`site/journeys/rendered-page.test.mts` checks all three in the built pages. ![Saturn at phone width with JavaScript disabled: the search field and the card's sheet at its peek](images/native-phone.png) A dataset, settings or feature response without a saved view used to keep the prepared tree's mount pose: depth was left unscaled, which drew each polar cap as a hole, and the body had one fixed size that overflowed a phone. It now takes the pose of a fresh mount, framed at the share of the viewport width the live camera fits a body to -(`site/default-width-share.mts`), and the photograph of a page without script is sized by the same share. The live +(`site/world/default-width-share.mts`), and the photograph of a page without script is sized by the same share. The live camera also keeps a body within a share of the viewport's height; a page without script now takes the smaller of the two, as a scale on the drawn stage and a cap on the photograph. Before that a window wide for its height drew the body too large: Saturn was 475 px across at 1320×559 against 338 px with script, and is 338 px in Chromium 148, WebKit 26.4 @@ -269,7 +269,7 @@ and after. ![The Moon and Europa drawn by a native response, before and after the default view](images/native-default-view.png) -A drawn body also takes a drag and the wheel without script (`site/native-input.mts`, which those pages link as +A drawn body also takes a drag and the wheel without script (`site/browser/native-input.mts`, which those pages link as `/native-input.css`; a page with script never requests it). Dragging turns the body's prepared rotation: the browser's resize handle holds the drag, a row of hover strips keeps that handle under the pointer, and anchor positioning carries the stored width to the body. A body without a prepared rotation, such as a star, only zooms. The wheel scales the whole diff --git a/docs/prepared-navigation-ownership.md b/docs/prepared-navigation-ownership.md index d6d25affc4d..c789cdbf688 100644 --- a/docs/prepared-navigation-ownership.md +++ b/docs/prepared-navigation-ownership.md @@ -113,9 +113,9 @@ comparisons and the interpretation used for its model. ## Verification - `node --test packages/objects/src/node/prepared-activation-transport.test.mts` checks the served transport carries the runtime whole. -- `node --test site/test/navigation-lifecycle.test.mts site/test/scene-session.test.mts` +- `node --test site/navigation/navigation-lifecycle.test.mts site/scene/scene-session.test.mts` checks navigation and retained scene state. -- `node --test site/test/rendered-page.test.mts` parses built HTML for the +- `node --test site/journeys/rendered-page.test.mts` parses built HTML for the information-tab rules. It does not run Chrome or verify animation and flight behavior. - [prepared-data-worker-client.test.ts](../packages/renderer/src/prepared-data-worker-client.test.ts) in the renderer suite — persistent worker reuse, cancellation and disposal. diff --git a/docs/reader-text.md b/docs/reader-text.md index 947642572b5..7514ea0a9de 100644 --- a/docs/reader-text.md +++ b/docs/reader-text.md @@ -133,6 +133,6 @@ Warnings are for the reviewer and never block: `site/prepared-facilities.json`, so run `node site/build/prepare/prepare-facilities.mts --catalog-only` first. -`site/test/prepare-text.test.mts` runs the check on every registered body. +`site/build/prepare/prepare-text.test.mts` runs the check on every registered body. No repository test measures line wrapping. Inspect affected desktop and phone layouts in a browser when text or typography changes. diff --git a/docs/seo.md b/docs/seo.md index b6554abd797..20af4a1f7cd 100644 --- a/docs/seo.md +++ b/docs/seo.md @@ -38,7 +38,7 @@ pnpm build node site/build/prepare/prepare-social-images.mts # all registered objects # node site/build/prepare/prepare-social-images.mts --object=earth # one object pnpm build # include the new images -node --test site/test/seo-discovery.test.mts +node --test site/journeys/seo-discovery.test.mts ``` Inspect the images before committing them. A new object needs its own capture. @@ -48,7 +48,7 @@ The social-image preparer starts and closes a preview on port 4266; pass ## Check metadata and deployment `site/test/seo.test.mts` checks the homepage metadata, the breadcrumb trails and -that every scene page has a share image of its own. `site/test/seo-discovery.test.mts` checks the reachability algorithm with synthetic +that every scene page has a share image of its own. `site/journeys/seo-discovery.test.mts` checks the reachability algorithm with synthetic page graphs. It does not crawl a running site. Inspect the built HTML and an already-running preview for titles, descriptions, canonical URLs, headings, sitemap coverage and image dimensions. The retired `seo-browser.mts` runner and diff --git a/docs/site-architecture.md b/docs/site-architecture.md index 2d9746e5304..cac29d80b23 100644 --- a/docs/site-architecture.md +++ b/docs/site-architecture.md @@ -11,30 +11,30 @@ A folder imports itself or strictly lower layers. Sibling folders, including L0 | Tier | Folder | Purpose | Incoming moves | | ---: | --- | --- | --- | -| 0 | `browser/` | Browser input, DOM and serialized import queue | 16; `runtime-policy.mts`, `diagnostics-policy.mts`, `in-flight-loader.mts`, `next-frame.mts` | -| 0 | `model/` | Object identities, routes and held addresses | 8; `navigation/system-address.mts`, `root-object.mts`, `orbit-root.mts`, `planetary-system-members.mts` | -| 0 | `overview/` | Prepared spectral overview readers | 2 | -| 0 | `prepared/` | Prepared transports and generated inputs | 24; `prepared-catalogue.d.mts`, `prepared-navigation-markers.d.mts`, `prepared-object-path.mts`, `prepared-shell-icons.d.mts` | +| 0 | `browser/` | Browser input, DOM and serialized import queue | 2; `import-queue.mts` | +| 0 | `model/` | Object identities, routes and held addresses | 0 | +| 0 | `overview/` | Prepared spectral overview readers | 1 | +| 0 | `prepared/` | Prepared transports and generated inputs | 23; `prepared-catalogue.d.mts`, `prepared-navigation-markers.d.mts`, `prepared-shell-icons.d.mts`, `prepared-shell-titles.d.mts` | | 0 | `source/` | Preserved input records and artwork | 0 | | 0 | `vendor/` | Preserved third-party notices | 0 | -| 0 | `server-assets/` | Server and build prepared-asset origin | 2; `asset-origin.mts` | -| 0 | `contracts/` | Shared page and shell interfaces | 3; `object-shell-types.ts`, `object-page-contract.mts` | -| 1 | `directory/` | Startup reads and object catalogue directory | 16; `startup-world.mts`, `startup-requests.mts`, `object-entries.mts`, `object-directory.mts` | -| 1 | `minimap/` | Surface-map measurements and view formatting | 4 | -| 2 | `world/` | Shared framing, visibility and camera context | 73; `world-objects.mts`, `world-system-views.mts`, `context-availability.mts`, `context-datasets.mts` | -| 3 | `content/` | Card content, citations and metadata | 31; `dataset-content.mts`, `dataset-context.mts`, `object-text.mts`, `prepared-panel-content.mts` | -| 3 | `navigation/` | History, requests, flights and arrivals | 25; `prepared-arrival.mts`, `prepared-scene-ownership.mts`, `arrival-billboard.mts`, `prepared-world-navigation.mts` | -| 4 | `search/` | Catalogue search and result presentation | 6 | +| 0 | `server-assets/` | Server and build prepared-asset origin | 0 | +| 0 | `contracts/` | Shared page and shell interfaces | 0 | +| 1 | `directory/` | Startup reads and object catalogue directory | 9; `startup-world.mts`, `object-directory.mts`, `objects.mts`, `world-context-plan.mts` | +| 1 | `minimap/` | Surface-map measurements and view formatting | 0 | +| 2 | `world/` | Shared framing, visibility and camera context | 52; `world-objects.mts`, `world-system-views.mts`, `stellar-extents.mts`, `hosted-banks.mts` | +| 3 | `content/` | Card content, citations and metadata | 13; `exploration-catalog.mts`, `source-documentation.mts`, `seo.mts`, `seo-trail.mts` | +| 3 | `navigation/` | History, requests, flights and arrivals | 10; `prepared-arrival.mts`, `prepared-world-navigation.mts` | +| 4 | `search/` | Catalogue search and result presentation | 0 | | 4 | `selection/` | Committed selection and camera handovers | 8; `scene/scene-selection.mts`, `satellite-selection.mts`, `overview-selection.mts`, `showcase.mts` | -| 5 | `shell/` | Retained shell controls and panels | 30; `object-browser.mts`, `feature-browser.mts`, `destination-browser.mts`, `selection-presentation.mts` | -| 6 | `server/` | SSR readers, responses and host middleware | 23; `object-page-data.mts`, `first-view-transport.mts`, `object-entry.mts`, `world-places.mts` | -| 6 | `scene/` | Scene sessions, replacement and publication | 16; `object-adapter.mts`, `packaged-object-runtime.mts`, `startup-billboard.mts`, `initial-scene.mts` | -| 7 | `startup/` | Page boot helpers and router entry | 10; `shared-imports.mts`, `startup-boot.mts`, `startup-cover.mts`, `initial-shell-context.mts` | -| 7 | `build/` | Site preparation and packaging | 32; `prepare-body-moons.mts` | -| 8 | `layouts/` | Shared page frame and its styles | 5; `components/ObjectSwatchStyles.astro`, `site.css`, `object-shell.css`, `wordmark.css` | +| 5 | `shell/` | Retained shell controls and panels | 14; `object-browser.mts`, `feature-browser.mts`, `destination-browser.mts`, `selection-presentation.mts` | +| 6 | `server/` | SSR readers, responses and host middleware | 8; `object-entry.mts`, `world-places.mts`, `dot-catalogue-data.mts`, `social-images.mts` | +| 6 | `scene/` | Scene sessions, replacement and publication | 8; `object-adapter.mts`, `packaged-object-runtime.mts`, `startup-billboard.mts` | +| 7 | `startup/` | Page boot helpers and router entry | 5; `shared-imports.mts`, `startup-boot.mts` | +| 7 | `build/` | Site preparation and packaging | 8; `prepare-body-moons.mts` | +| 8 | `layouts/` | Shared page frame and its styles | 2; `components/ObjectSwatchStyles.astro`, `object-shell.css` | | 9 | `components/` | Reusable Astro markup and SSR composition | 0 | | 10 | `pages/` | Routes and object-page entries | 0 | -| 11 | `journeys/` | Cross-cutting journeys and support | 19 | +| 11 | `journeys/` | Cross-cutting journeys and support | 1 | | 11 | `test/` | Retired test folder; no final occupants | 0 | diff --git a/docs/site-architecture/moves.json b/docs/site-architecture/moves.json index 6ae9fac196b..27efda59aa9 100644 --- a/docs/site-architecture/moves.json +++ b/docs/site-architecture/moves.json @@ -1,30 +1,12 @@ { - "site/runtime-policy.mts": "site/browser/runtime-policy.mts", - "site/diagnostics-policy.mts": "site/browser/diagnostics-policy.mts", - "site/in-flight-loader.mts": "site/browser/in-flight-loader.mts", - "site/next-frame.mts": "site/browser/next-frame.mts", - "site/narrow-layout.mts": "site/browser/narrow-layout.mts", - "site/object-shell-types.ts": "site/contracts/object-shell-types.ts", - "site/object-page-contract.mts": "site/contracts/object-page-contract.mts", - "site/navigation/system-address.mts": "site/model/system-address.mts", - "site/root-object.mts": "site/model/root-object.mts", - "site/orbit-root.mts": "site/model/orbit-root.mts", - "site/planetary-system-members.mts": "site/model/planetary-system-members.mts", - "site/object-classification-label.mts": "site/model/object-classification-label.mts", - "site/dataset-url.mts": "site/model/dataset-url.mts", "site/startup-world.mts": "site/directory/startup-world.mts", - "site/startup-requests.mts": "site/directory/startup-requests.mts", - "site/object-entries.mts": "site/directory/object-entries.mts", "site/object-directory.mts": "site/directory/object-directory.mts", "site/objects.mts": "site/directory/objects.mts", "site/world-context-plan.mts": "site/directory/world-context-plan.mts", "site/world-objects.mts": "site/world/world-objects.mts", "site/world-system-views.mts": "site/world/world-system-views.mts", - "site/context-availability.mts": "site/world/context-availability.mts", - "site/context-datasets.mts": "site/world/context-datasets.mts", "site/stellar-extents.mts": "site/world/stellar-extents.mts", "site/hosted-banks.mts": "site/world/hosted-banks.mts", - "site/dot-catalogues.mts": "site/world/dot-catalogues.mts", "site/prepared-world-presentation.mts": "site/world/prepared-world-presentation.mts", "site/application-world-context.mts": "site/world/application-world-context.mts", "site/application-world-frames.mts": "site/world/application-world-frames.mts", @@ -32,15 +14,9 @@ "site/application-world-types.mts": "site/world/application-world-types.mts", "site/application-world-visibility.mts": "site/world/application-world-visibility.mts", "site/world-approach.mts": "site/world/world-approach.mts", - "site/world-camera.mts": "site/world/world-camera.mts", - "site/world-viewport.mts": "site/world/world-viewport.mts", - "site/world-preferences.mts": "site/world/world-preferences.mts", - "site/moon-orbit-policy.mts": "site/world/moon-orbit-policy.mts", "site/catalogue-moon-labels.mts": "site/world/catalogue-moon-labels.mts", "site/system-framing.mts": "site/world/system-framing.mts", - "site/system-framing-radii.mts": "site/world/system-framing-radii.mts", "site/zoom-scope.mts": "site/world/zoom-scope.mts", - "site/zoom-carry.mts": "site/world/zoom-carry.mts", "site/inside-view.mts": "site/world/inside-view.mts", "site/object-systems.mts": "site/world/object-systems.mts", "site/satellite-systems.mts": "site/world/satellite-systems.mts", @@ -55,13 +31,8 @@ "site/object-adapter.mts": "site/scene/object-adapter.mts", "site/packaged-object-runtime.mts": "site/scene/packaged-object-runtime.mts", "site/startup-billboard.mts": "site/scene/startup-billboard.mts", - "site/initial-scene.mts": "site/scene/initial-scene.mts", "site/prepared-arrival.mts": "site/navigation/prepared-arrival.mts", - "site/prepared-scene-ownership.mts": "site/navigation/prepared-scene-ownership.mts", - "site/arrival-billboard.mts": "site/navigation/arrival-billboard.mts", "site/prepared-world-navigation.mts": "site/navigation/prepared-world-navigation.mts", - "site/view-url-runtime.mts": "site/navigation/view-url-runtime.mts", - "site/prepared-descriptor.mts": "site/navigation/prepared-descriptor.mts", "site/import-queue.mts": "site/browser/import-queue.mts", "site/shared-imports.mts": "site/startup/shared-imports.mts", "site/startup-boot.mts": "site/startup/startup-boot.mts", @@ -69,197 +40,71 @@ "site/feature-browser.mts": "site/shell/feature-browser.mts", "site/destination-browser.mts": "site/shell/destination-browser.mts", "site/selection-presentation.mts": "site/shell/selection-presentation.mts", - "site/information-card.mts": "site/shell/information-card.mts", - "site/chart-pixel-alignment.mts": "site/shell/chart-pixel-alignment.mts", - "site/dataset-picker.mts": "site/shell/dataset-picker.mts", - "site/tab-panels.mts": "site/shell/tab-panels.mts", - "site/layout-sections.mts": "site/shell/layout-sections.mts", "site/view-readout.mts": "site/shell/view-readout.mts", - "site/native-view-forms.mts": "site/shell/native-view-forms.mts", - "site/source-link.mts": "site/browser/source-link.mts", - "site/dataset-content.mts": "site/content/dataset-content.mts", - "site/dataset-context.mts": "site/content/dataset-context.mts", - "site/object-text.mts": "site/content/object-text.mts", - "site/prepared-panel-content.mts": "site/content/prepared-panel-content.mts", - "site/volume-presentation.mts": "site/content/volume-presentation.mts", "site/exploration-catalog.mts": "site/content/exploration-catalog.mts", "site/source-documentation.mts": "site/content/source-documentation.mts", - "site/source-icons.mts": "site/content/source-icons.mts", - "site/sidebar-thumbnails.mts": "site/content/sidebar-thumbnails.mts", "site/seo.mts": "site/content/seo.mts", "site/seo-trail.mts": "site/content/seo-trail.mts", "site/system-card.mts": "site/content/system-card.mts", "site/object-children.mts": "site/content/object-children.mts", - "site/learn-more.mts": "site/content/learn-more.mts", - "site/native-input.mts": "site/browser/native-input.mts", - "site/startup-cover.mts": "site/startup/startup-cover.mts", - "site/initial-shell-context.mts": "site/startup/initial-shell-context.mts", - "site/error-report.mts": "site/startup/error-report.mts", - "site/web-analytics.mts": "site/startup/web-analytics.mts", - "site/asset-origin.mts": "site/server-assets/asset-origin.mts", - "site/object-page-data.mts": "site/server/object-page-data.mts", - "site/first-view-transport.mts": "site/server/first-view-transport.mts", "site/object-entry.mts": "site/server/object-entry.mts", "site/world-places.mts": "site/server/world-places.mts", "site/dot-catalogue-data.mts": "site/server/dot-catalogue-data.mts", - "site/dataset-response.mts": "site/server/dataset-response.mts", - "site/built-pages.mts": "site/server/built-pages.mts", "site/prepare-body-moons.mts": "site/build/prepare/prepare-body-moons.mts", "site/components/ObjectSwatchStyles.astro": "site/layouts/ObjectSwatchStyles.astro", - "site/default-width-share.mts": "site/world/default-width-share.mts", "site/diagnostic-recorder.mts": "site/shell/diagnostic-recorder.mts", "site/env.d.ts": "site/env.d.ts", "site/prepared-catalogue.d.mts": "site/prepared/prepared-catalogue.d.mts", "site/prepared-navigation-markers.d.mts": "site/prepared/prepared-navigation-markers.d.mts", - "site/prepared-object-path.mts": "site/prepared/prepared-object-path.mts", "site/prepared-shell-icons.d.mts": "site/prepared/prepared-shell-icons.d.mts", "site/prepared-shell-titles.d.mts": "site/prepared/prepared-shell-titles.d.mts", "site/social-images.mts": "site/server/social-images.mts", "site/build/source-maps.test.mts": "site/build/source-maps.test.mts", "site/navigation/evidence/star-click/one-click.jpg": "site/navigation/evidence/star-click/one-click.jpg", - "site/prepared-panel-content.shared-readers.test.mts": "site/content/prepared-panel-content.shared-readers.test.mts", "site/test/application-world-frames.test.mts": "site/world/application-world-frames.test.mts", "site/test/application-world-visibility.test.mts": "site/world/application-world-visibility.test.mts", - "site/test/arrival-billboard.test.mts": "site/navigation/arrival-billboard.test.mts", - "site/test/arrival-discovery.test.mts": "site/build/prepare/arrival-discovery.test.mts", - "site/test/asset-origin.test.mts": "site/server/asset-origin.test.mts", - "site/test/astro-component-imports.test.mts": "site/journeys/astro-component-imports.test.mts", - "site/test/authored-object-fixture.mts": "site/build/fixtures/authored-object-fixture.mts", - "site/test/body-additions.test.mts": "site/build/prepare/body-additions.test.mts", "site/test/body-moons.test.mts": "site/build/prepare/body-moons.test.mts", - "site/test/browser-node-imports.test.mts": "site/journeys/browser-node-imports.test.mts", - "site/test/built-pages.test.mts": "site/server/built-pages.test.mts", - "site/test/camera-handover.test.mts": "site/scene/camera-handover.test.mts", - "site/test/catalogue-window.test.mts": "site/search/catalogue-window.test.mts", "site/test/category-frames.test.mts": "site/build/prepare/category-frames.test.mts", - "site/test/chart-pixel-alignment.test.mts": "site/shell/chart-pixel-alignment.test.mts", - "site/test/charts.test.ts": "site/build/charts/charts.test.mts", - "site/test/check-preparation-inputs.test.mts": "site/build/prepare/check-preparation-inputs.test.mts", - "site/test/cloudflare-worker.test.mts": "site/journeys/cloudflare-worker.test.mts", "site/test/compact-spectrum.test.mts": "site/overview/compact-spectrum.test.mts", - "site/test/context-lineage.test.mts": "site/journeys/context-lineage.test.mts", - "site/test/dataset-picker.test.mts": "site/shell/dataset-picker.test.mts", - "site/test/dataset-response.test.mts": "site/server/dataset-response.test.mts", - "site/test/dataset-url.test.mts": "site/model/dataset-url.test.mts", - "site/test/descriptor-roundtrip.test.mts": "site/build/prepare/descriptor-roundtrip.test.mts", "site/test/destination-browser.test.mts": "site/shell/destination-browser.test.mts", - "site/test/diagnostic-accessor.test.mts": "site/journeys/diagnostic-accessor.test.mts", "site/test/diagnostic-recorder.test.mts": "site/shell/diagnostic-recorder.test.mts", - "site/test/error-report.test.mts": "site/browser/error-report.test.mts", - "site/test/evidence/passive-minimaps/browser.json": "site/minimap/evidence/passive-minimaps/browser.json", - "site/test/evidence/passive-minimaps/earth.png": "site/minimap/evidence/passive-minimaps/earth.png", - "site/test/evidence/passive-minimaps/jupiter-sequence.png": "site/minimap/evidence/passive-minimaps/jupiter-sequence.png", - "site/test/first-view-transport.test.mts": "site/server/first-view-transport.test.mts", - "site/test/fixtures/anchor-table.mts": "site/world/fixtures/anchor-table.mts", - "site/test/fixtures/context-package.mts": "site/build/fixtures/context-package.mts", - "site/test/fixtures/galaxies/captures.json": "site/world/fixtures/galaxies/captures.json", - "site/test/fixtures/object-content-fixture.mts": "site/build/fixtures/object-content-fixture.mts", - "site/test/fixtures/objects.mts": "site/directory/fixtures/objects.mts", - "site/test/fixtures/prepared-schemas.mts": "site/world/fixtures/prepared-schemas.mts", - "site/test/fixtures/saturn-prepared.mts": "site/world/fixtures/saturn-prepared.mts", - "site/test/folded-transit.test.mts": "site/build/charts/folded-transit.test.mts", - "site/test/galactic-focus.test.mts": "site/search/galactic-focus.test.mts", "site/test/hosted-banks.test.mts": "site/build/prepare/hosted-banks.test.mts", "site/test/import-queue.test.mts": "site/startup/import-queue.test.mts", - "site/test/in-flight-loader.test.mts": "site/browser/in-flight-loader.test.mts", - "site/test/information-card-sections.test.mts": "site/shell/information-card-sections.test.mts", - "site/test/information-tab-styles.test.mts": "site/server/information-tab-styles.test.mts", - "site/test/initial-shell-context.test.mts": "site/browser/initial-shell-context.test.mts", - "site/test/inline-page-stylesheet.test.mts": "site/build/inline-page-stylesheet.test.mts", - "site/test/kept-load.test.mts": "site/server/kept-load.test.mts", - "site/test/list-distance.test.mts": "site/search/list-distance.test.mts", - "site/test/load-object-content.mts": "site/build/content/load-object-content.test-support.mts", - "site/test/lonlat-slice-table.test.mts": "site/build/prepare/lonlat-slice-table.test.mts", "site/test/moon-labels.test.mts": "site/world/moon-labels.test.mts", - "site/test/navigation-content.test.mts": "site/navigation/navigation-content.test.mts", - "site/test/navigation-fragments.test.mts": "site/navigation/navigation-fragments.test.mts", "site/test/navigation-history.test.mts": "site/navigation/navigation-history.test.mts", - "site/test/navigation-lifecycle.test.mts": "site/navigation/navigation-lifecycle.test.mts", "site/test/navigation-ontology.test.mts": "site/world/navigation-ontology.test.mts", "site/test/navigation-preparation.test.mts": "site/world/navigation-preparation.test.mts", - "site/test/navigation-readiness.test.mts": "site/navigation/navigation-readiness.test.mts", "site/test/navigation-request.test.mts": "site/navigation/navigation-request.test.mts", "site/test/navigation-router-context.mts": "site/scene/navigation-router-context.test-support.mts", "site/test/navigation-scope.test.mts": "site/world/navigation-scope.test.mts", - "site/test/navigation-shell-content.test.mts": "site/navigation/navigation-shell-content.test.mts", - "site/test/navigation-styles.test.mts": "site/navigation/navigation-styles.test.mts", "site/test/navigation-test-values.mts": "site/navigation/navigation-test-values.test-support.mts", - "site/test/navigation-timing.test.mts": "site/navigation/navigation-timing.test.mts", "site/test/nebula-search.test.mts": "site/world/nebula-search.test.mts", - "site/test/neutral-catalogue-color.test.mts": "site/journeys/neutral-catalogue-color.test.mts", "site/test/object-children.test.mts": "site/content/object-children.test.mts", - "site/test/object-control-binding.test.mts": "site/journeys/object-control-binding.test.mts", "site/test/object-directory.test.mts": "site/directory/object-directory.test.mts", "site/test/object-navigation.test.mts": "site/world/object-navigation.test.mts", "site/test/object-package-contract.test.mts": "site/build/object-package-contract.test.mts", - "site/test/object-page-data.test.mts": "site/server/object-page-data.test.mts", - "site/test/object-result.test.mts": "site/search/object-result.test.mts", - "site/test/object-runtime-contract.test.mts": "site/journeys/object-runtime-contract.test.mts", - "site/test/object-search-rank.test.mts": "site/search/object-search-rank.test.mts", "site/test/object-systems.test.mts": "site/world/object-systems.test.mts", - "site/test/object-text.test.mts": "site/content/object-text.test.mts", "site/test/overview-selection.test.mts": "site/selection/overview-selection.test.mts", - "site/test/preparation-boundary.test.mts": "site/journeys/preparation-boundary.test.mts", - "site/test/prepare-authored.test.mts": "site/build/prepare/prepare-authored.test.mts", - "site/test/prepare-context-availability.test.mts": "site/build/prepare/prepare-context-availability.test.mts", - "site/test/prepare-object-json.test.mts": "site/build/prepare/prepare-object-json.test.mts", - "site/test/prepare-spatial-context.test.mts": "site/build/prepare/prepare-spatial-context.test.mts", - "site/test/prepare-text.test.mts": "site/build/prepare/prepare-text.test.mts", "site/test/prepared-arrival.test.mts": "site/navigation/prepared-arrival.test.mts", "site/test/prepared-body-billboards.test.mts": "site/world/prepared-body-billboards.test.mts", - "site/test/prepared-dataset-facts.test.mts": "site/build/content/prepared-dataset-facts.test.mts", - "site/test/prepared-dataset-labels.test.mts": "site/journeys/prepared-dataset-labels.test.mts", - "site/test/prepared-dataset-legends.test.mts": "site/build/content/prepared-dataset-legends.test.mts", - "site/test/prepared-descriptor.test.mts": "site/navigation/prepared-descriptor.test.mts", "site/test/prepared-icons.test.mts": "site/build/prepare/prepared-icons.test.mts", - "site/test/prepared-motion-css.test.mts": "site/build/prepared-motion-css.test.mts", - "site/test/prepared-panel-content.test.mts": "site/content/prepared-panel-content.test.mts", - "site/test/prepared-presentation-bindings.test.mts": "site/contracts/prepared-presentation-bindings.test.mts", - "site/test/prepared-presentation-contract.test.mts": "site/journeys/prepared-presentation-contract.test.mts", "site/test/prepared-world-context.test.ts": "site/world/prepared-world-context.test.ts", "site/test/prepared-world-navigation.test.mts": "site/navigation/prepared-world-navigation.test.mts", - "site/test/preview.test.mts": "site/server/preview.test.mts", - "site/test/production-diagnostics.test.mts": "site/journeys/production-diagnostics.test.mts", - "site/test/recovery-commands.test.mts": "site/journeys/recovery-commands.test.mts", - "site/test/refresh-charts.test.mts": "site/build/prepare/refresh-charts.test.mts", - "site/test/rendered-page.test.mts": "site/journeys/rendered-page.test.mts", - "site/test/restore-inputs.test.mts": "site/build/restore-inputs.test.mts", - "site/test/run-script-chain.test.mts": "site/build/run-script-chain.test.mts", "site/test/runtime-package.test.mts": "site/world/runtime-package.test.mts", - "site/test/runtime-policy.test.mts": "site/browser/runtime-policy.test.mts", "site/test/satellite-arrival-framing.test.mts": "site/navigation/satellite-arrival-framing.test.mts", "site/test/satellite-systems.test.mts": "site/world/satellite-systems.test.mts", "site/test/scene-contract.test.mts": "site/world/scene-contract.test.mts", - "site/test/scene-datasets.test.mts": "site/scene/scene-datasets.test.mts", - "site/test/scene-frame.test.mts": "site/scene/scene-frame.test.mts", - "site/test/scene-publication.test.mts": "site/scene/scene-publication.test.mts", - "site/test/scene-session.test.mts": "site/scene/scene-session.test.mts", "site/test/search-api.test.mts": "site/journeys/search-api.test.mts", "site/test/search-response.test.mts": "site/server/search-response.test.mts", - "site/test/seo-discovery.mts": "site/journeys/seo-discovery.test-support.mts", - "site/test/seo-discovery.test.mts": "site/journeys/seo-discovery.test.mts", "site/test/seo.test.mts": "site/content/seo.test.mts", - "site/test/setup-assets.test.mts": "site/build/prepare/setup-assets.test.mts", - "site/test/shell-selectors.test.mts": "site/search/shell-selectors.test.mts", - "site/test/shell-settings.test.mts": "site/shell/shell-settings.test.mts", - "site/test/shell-sheet.test.mts": "site/shell/shell-sheet.test.mts", "site/test/showcase.test.mts": "site/selection/showcase.test.mts", - "site/test/source-evidence-values.mts": "site/overview/source-evidence-values.test-support.mts", - "site/test/source-link.test.mts": "site/browser/source-link.test.mts", "site/test/startup-billboard.test.mts": "site/scene/startup-billboard.test.mts", "site/test/startup-cover.test.mts": "site/browser/startup-cover.test.mts", - "site/test/startup-requests.test.mts": "site/directory/startup-requests.test.mts", "site/test/stellar-extents.test.mts": "site/world/stellar-extents.test.mts", - "site/test/surface-label-loop.test.mts": "site/journeys/surface-label-loop.test.mts", - "site/test/surface-minimap.test.mts": "site/minimap/surface-minimap.test.mts", "site/test/system-framing.test.mts": "site/world/system-framing.test.mts", "site/test/system-text.test.mts": "site/build/prepare/system-text.test.mts", "site/test/system-view-file.mts": "site/world/system-view-file.test-support.mts", "site/test/view-readout.test.mts": "site/shell/view-readout.test.mts", - "site/test/view-url-runtime.test.mts": "site/navigation/view-url-runtime.test.mts", - "site/test/volume-presentation.test.mts": "site/content/volume-presentation.test.mts", - "site/test/web-analytics.test.mts": "site/browser/web-analytics.test.mts", - "site/test/world-billboards.test.mts": "site/journeys/world-billboards.test.mts", "site/test/world-stars.test.mts": "site/world/world-stars.test.mts", "site/test/world-tables.test.mts": "site/world/world-tables.test.mts", "site/test/zoom-scope.test.mts": "site/world/zoom-scope.test.mts", @@ -282,13 +127,7 @@ "site/prepared-sources.json": "site/prepared/prepared-sources.json", "site/prepared-stellar-extents.json": "site/prepared/prepared-stellar-extents.json", "site/prepared-world-presentation.json": "site/prepared/prepared-world-presentation.json", - "site/site.css": "site/layouts/site.css", "site/object-shell.css": "site/layouts/object-shell.css", - "site/wordmark.css": "site/layouts/wordmark.css", - "site/object-navigation-marker.css": "site/layouts/object-navigation-marker.css", - "site/asset-origin.characterization.test.mts": "site/server-assets/asset-origin.characterization.test.mts", - "site/dataset-picker.characterization.test.mts": "site/shell/dataset-picker.characterization.test.mts", - "site/dataset-response.characterization.test.mts": "site/server/dataset-response.characterization.test.mts", "site/destination-browser.characterization.test.mts": "site/shell/destination-browser.characterization.test.mts", "site/diagnostic-recorder.characterization.test.mts": "site/shell/diagnostic-recorder.characterization.test.mts", "site/feature-browser.characterization.test.mts": "site/shell/feature-browser.characterization.test.mts", @@ -296,64 +135,36 @@ "site/object-browser.characterization.test.mts": "site/shell/object-browser.characterization.test.mts", "site/object-children.characterization.test.mts": "site/content/object-children.characterization.test.mts", "site/object-directory.characterization.test.mts": "site/directory/object-directory.characterization.test.mts", - "site/object-page-data.characterization.test.mts": "site/server/object-page-data.characterization.test.mts", "site/packaged-object-runtime.characterization.test.mts": "site/scene/packaged-object-runtime.characterization.test.mts", "site/prepare-body-moons.characterization.test.mts": "site/build/prepare/prepare-body-moons.characterization.test.mts", "site/startup-billboard.characterization.test.mts": "site/scene/startup-billboard.characterization.test.mts", "site/startup-boot.characterization.test.mts": "site/startup/startup-boot.characterization.test.mts", - "site/startup-requests.characterization.test.mts": "site/directory/startup-requests.characterization.test.mts", "site/startup-world.characterization.test.mts": "site/directory/startup-world.characterization.test.mts", - "site/view-url-runtime.characterization.test.mts": "site/navigation/view-url-runtime.characterization.test.mts", - "site/test/fixtures/characterization-runtime.mts": "site/scene/fixtures/characterization-runtime.mts", "site/application-world-context.characterization.test.mts": "site/world/application-world-context.characterization.test.mts", "site/application-world-frames.characterization.test.mts": "site/world/application-world-frames.characterization.test.mts", "site/application-world-resources.characterization.test.mts": "site/world/application-world-resources.characterization.test.mts", "site/application-world-visibility.characterization.test.mts": "site/world/application-world-visibility.characterization.test.mts", "site/catalogue-moon-labels.characterization.test.mts": "site/world/catalogue-moon-labels.characterization.test.mts", - "site/context-availability.characterization.test.mts": "site/world/context-availability.characterization.test.mts", - "site/dataset-context.characterization.test.mts": "site/content/dataset-context.characterization.test.mts", - "site/default-width-share.characterization.test.mts": "site/world/default-width-share.characterization.test.mts", "site/dot-catalogue-data.characterization.test.mts": "site/server/dot-catalogue-data.characterization.test.mts", - "site/dot-catalogues.characterization.test.mts": "site/world/dot-catalogues.characterization.test.mts", "site/exploration-catalog.characterization.test.mts": "site/content/exploration-catalog.characterization.test.mts", - "site/first-view-transport.characterization.test.mts": "site/server/first-view-transport.characterization.test.mts", "site/hosted-banks.characterization.test.mts": "site/world/hosted-banks.characterization.test.mts", - "site/information-card.characterization.test.mts": "site/shell/information-card.characterization.test.mts", - "site/initial-scene.characterization.test.mts": "site/scene/initial-scene.characterization.test.mts", "site/inside-view.characterization.test.mts": "site/world/inside-view.characterization.test.mts", - "site/layout-sections.characterization.test.mts": "site/shell/layout-sections.characterization.test.mts", - "site/learn-more.characterization.test.mts": "site/content/learn-more.characterization.test.mts", - "site/moon-orbit-policy.characterization.test.mts": "site/world/moon-orbit-policy.characterization.test.mts", - "site/native-view-forms.characterization.test.mts": "site/shell/native-view-forms.characterization.test.mts", - "site/next-frame.characterization.test.mts": "site/browser/next-frame.characterization.test.mts", - "site/object-classification-label.characterization.test.mts": "site/model/object-classification-label.characterization.test.mts", - "site/object-entries.characterization.test.mts": "site/directory/object-entries.characterization.test.mts", "site/object-systems.characterization.test.mts": "site/world/object-systems.characterization.test.mts", - "site/object-text.characterization.test.mts": "site/content/object-text.characterization.test.mts", "site/overview-selection.characterization.test.mts": "site/selection/overview-selection.characterization.test.mts", "site/prepared-arrival.characterization.test.mts": "site/navigation/prepared-arrival.characterization.test.mts", - "site/prepared-panel-content.characterization.test.mts": "site/content/prepared-panel-content.characterization.test.mts", "site/prepared-world-navigation.characterization.test.mts": "site/navigation/prepared-world-navigation.characterization.test.mts", "site/prepared-world-presentation.characterization.test.mts": "site/world/prepared-world-presentation.characterization.test.mts", "site/seo.characterization.test.mts": "site/content/seo.characterization.test.mts", "site/shared-imports.characterization.test.mts": "site/startup/shared-imports.characterization.test.mts", "site/showcase.characterization.test.mts": "site/selection/showcase.characterization.test.mts", - "site/sidebar-thumbnails.characterization.test.mts": "site/content/sidebar-thumbnails.characterization.test.mts", "site/social-images.characterization.test.mts": "site/server/social-images.characterization.test.mts", - "site/source-icons.characterization.test.mts": "site/content/source-icons.characterization.test.mts", - "site/startup-cover.characterization.test.mts": "site/startup/startup-cover.characterization.test.mts", "site/system-framing.characterization.test.mts": "site/world/system-framing.characterization.test.mts", - "site/tab-panels.characterization.test.mts": "site/shell/tab-panels.characterization.test.mts", "site/view-readout.characterization.test.mts": "site/shell/view-readout.characterization.test.mts", "site/world-approach.characterization.test.mts": "site/world/world-approach.characterization.test.mts", "site/world-context-plan.characterization.test.mts": "site/directory/world-context-plan.characterization.test.mts", "site/world-places.characterization.test.mts": "site/server/world-places.characterization.test.mts", - "site/world-preferences.characterization.test.mts": "site/world/world-preferences.characterization.test.mts", "site/world-system-views.characterization.test.mts": "site/world/world-system-views.characterization.test.mts", - "site/world-viewport.characterization.test.mts": "site/world/world-viewport.characterization.test.mts", - "site/zoom-carry.characterization.test.mts": "site/world/zoom-carry.characterization.test.mts", "site/zoom-scope.characterization.test.mts": "site/world/zoom-scope.characterization.test.mts", - "site/object-entry-types.mts": "site/directory/object-entry-types.mts", "site/object-entry-types.test.mts": "site/directory/object-entry-types.test.mts", "site/moon-catalogue.mts": "site/content/moon-catalogue.mts", "site/moon-catalogue.test.mts": "site/content/moon-catalogue.test.mts" diff --git a/docs/site-architecture/tiers.json b/docs/site-architecture/tiers.json index 931b34d549a..adb4087aff3 100644 --- a/docs/site-architecture/tiers.json +++ b/docs/site-architecture/tiers.json @@ -188,10 +188,10 @@ "lateral": [], "tests": "any-tier", "testFiles": [ - "site/asset-origin.characterization.test.mts", + "site/server-assets/asset-origin.characterization.test.mts", "site/build/source-maps.test.mts", - "site/dataset-picker.characterization.test.mts", - "site/dataset-response.characterization.test.mts", + "site/shell/dataset-picker.characterization.test.mts", + "site/server/dataset-response.characterization.test.mts", "site/destination-browser.characterization.test.mts", "site/diagnostic-recorder.characterization.test.mts", "site/feature-browser.characterization.test.mts", @@ -200,167 +200,167 @@ "site/object-browser.characterization.test.mts", "site/object-children.characterization.test.mts", "site/object-directory.characterization.test.mts", - "site/object-page-data.characterization.test.mts", + "site/server/object-page-data.characterization.test.mts", "site/packaged-object-runtime.characterization.test.mts", "site/prepare-body-moons.characterization.test.mts", - "site/prepared-panel-content.shared-readers.test.mts", + "site/content/prepared-panel-content.shared-readers.test.mts", "site/startup-billboard.characterization.test.mts", "site/startup-boot.characterization.test.mts", - "site/startup-requests.characterization.test.mts", + "site/directory/startup-requests.characterization.test.mts", "site/startup-world.characterization.test.mts", "site/test/application-world-frames.test.mts", "site/test/application-world-visibility.test.mts", - "site/test/arrival-billboard.test.mts", - "site/test/arrival-discovery.test.mts", - "site/test/asset-origin.test.mts", - "site/test/astro-component-imports.test.mts", - "site/test/authored-object-fixture.mts", - "site/test/body-additions.test.mts", + "site/navigation/arrival-billboard.test.mts", + "site/build/prepare/arrival-discovery.test.mts", + "site/server/asset-origin.test.mts", + "site/journeys/astro-component-imports.test.mts", + "site/build/fixtures/authored-object-fixture.mts", + "site/build/prepare/body-additions.test.mts", "site/test/body-moons.test.mts", - "site/test/browser-node-imports.test.mts", - "site/test/built-pages.test.mts", - "site/test/camera-handover.test.mts", - "site/test/catalogue-window.test.mts", + "site/journeys/browser-node-imports.test.mts", + "site/server/built-pages.test.mts", + "site/scene/camera-handover.test.mts", + "site/search/catalogue-window.test.mts", "site/test/category-frames.test.mts", - "site/test/chart-pixel-alignment.test.mts", - "site/test/charts.test.ts", - "site/test/check-preparation-inputs.test.mts", - "site/test/cloudflare-worker.test.mts", + "site/shell/chart-pixel-alignment.test.mts", + "site/build/charts/charts.test.mts", + "site/build/prepare/check-preparation-inputs.test.mts", + "site/journeys/cloudflare-worker.test.mts", "site/test/compact-spectrum.test.mts", - "site/test/context-lineage.test.mts", - "site/test/dataset-picker.test.mts", - "site/test/dataset-response.test.mts", - "site/test/dataset-url.test.mts", - "site/test/descriptor-roundtrip.test.mts", + "site/journeys/context-lineage.test.mts", + "site/shell/dataset-picker.test.mts", + "site/server/dataset-response.test.mts", + "site/model/dataset-url.test.mts", + "site/build/prepare/descriptor-roundtrip.test.mts", "site/test/destination-browser.test.mts", - "site/test/diagnostic-accessor.test.mts", + "site/journeys/diagnostic-accessor.test.mts", "site/test/diagnostic-recorder.test.mts", - "site/test/error-report.test.mts", - "site/test/evidence/passive-minimaps/browser.json", - "site/test/evidence/passive-minimaps/earth.png", - "site/test/evidence/passive-minimaps/jupiter-sequence.png", - "site/test/first-view-transport.test.mts", - "site/test/fixtures/anchor-table.mts", - "site/test/fixtures/characterization-runtime.mts", - "site/test/fixtures/context-package.mts", - "site/test/fixtures/galaxies/captures.json", - "site/test/fixtures/object-content-fixture.mts", - "site/test/fixtures/objects.mts", - "site/test/fixtures/prepared-schemas.mts", - "site/test/fixtures/saturn-prepared.mts", - "site/test/folded-transit.test.mts", - "site/test/galactic-focus.test.mts", + "site/browser/error-report.test.mts", + "site/minimap/evidence/passive-minimaps/browser.json", + "site/minimap/evidence/passive-minimaps/earth.png", + "site/minimap/evidence/passive-minimaps/jupiter-sequence.png", + "site/server/first-view-transport.test.mts", + "site/world/fixtures/anchor-table.mts", + "site/scene/fixtures/characterization-runtime.mts", + "site/build/fixtures/context-package.mts", + "site/world/fixtures/galaxies/captures.json", + "site/build/fixtures/object-content-fixture.mts", + "site/directory/fixtures/objects.mts", + "site/world/fixtures/prepared-schemas.mts", + "site/world/fixtures/saturn-prepared.mts", + "site/build/charts/folded-transit.test.mts", + "site/search/galactic-focus.test.mts", "site/test/hosted-banks.test.mts", "site/test/import-queue.test.mts", - "site/test/in-flight-loader.test.mts", - "site/test/information-card-sections.test.mts", - "site/test/information-tab-styles.test.mts", - "site/test/initial-shell-context.test.mts", - "site/test/inline-page-stylesheet.test.mts", - "site/test/kept-load.test.mts", - "site/test/list-distance.test.mts", - "site/test/load-object-content.mts", - "site/test/lonlat-slice-table.test.mts", + "site/browser/in-flight-loader.test.mts", + "site/shell/information-card-sections.test.mts", + "site/server/information-tab-styles.test.mts", + "site/browser/initial-shell-context.test.mts", + "site/build/inline-page-stylesheet.test.mts", + "site/server/kept-load.test.mts", + "site/search/list-distance.test.mts", + "site/build/content/load-object-content.test-support.mts", + "site/build/prepare/lonlat-slice-table.test.mts", "site/test/moon-labels.test.mts", - "site/test/navigation-content.test.mts", - "site/test/navigation-fragments.test.mts", + "site/navigation/navigation-content.test.mts", + "site/navigation/navigation-fragments.test.mts", "site/test/navigation-history.test.mts", - "site/test/navigation-lifecycle.test.mts", + "site/navigation/navigation-lifecycle.test.mts", "site/test/navigation-ontology.test.mts", "site/test/navigation-preparation.test.mts", - "site/test/navigation-readiness.test.mts", + "site/navigation/navigation-readiness.test.mts", "site/test/navigation-request.test.mts", "site/test/navigation-router-context.mts", "site/test/navigation-scope.test.mts", - "site/test/navigation-shell-content.test.mts", - "site/test/navigation-styles.test.mts", + "site/navigation/navigation-shell-content.test.mts", + "site/navigation/navigation-styles.test.mts", "site/test/navigation-test-values.mts", - "site/test/navigation-timing.test.mts", + "site/navigation/navigation-timing.test.mts", "site/test/nebula-search.test.mts", - "site/test/neutral-catalogue-color.test.mts", + "site/journeys/neutral-catalogue-color.test.mts", "site/test/object-children.test.mts", - "site/test/object-control-binding.test.mts", + "site/journeys/object-control-binding.test.mts", "site/test/object-directory.test.mts", "site/test/object-navigation.test.mts", "site/test/object-package-contract.test.mts", - "site/test/object-page-data.test.mts", - "site/test/object-result.test.mts", - "site/test/object-runtime-contract.test.mts", - "site/test/object-search-rank.test.mts", + "site/server/object-page-data.test.mts", + "site/search/object-result.test.mts", + "site/journeys/object-runtime-contract.test.mts", + "site/search/object-search-rank.test.mts", "site/test/object-systems.test.mts", - "site/test/object-text.test.mts", + "site/content/object-text.test.mts", "site/test/overview-selection.test.mts", - "site/test/preparation-boundary.test.mts", - "site/test/prepare-authored.test.mts", - "site/test/prepare-context-availability.test.mts", - "site/test/prepare-object-json.test.mts", - "site/test/prepare-spatial-context.test.mts", - "site/test/prepare-text.test.mts", + "site/journeys/preparation-boundary.test.mts", + "site/build/prepare/prepare-authored.test.mts", + "site/build/prepare/prepare-context-availability.test.mts", + "site/build/prepare/prepare-object-json.test.mts", + "site/build/prepare/prepare-spatial-context.test.mts", + "site/build/prepare/prepare-text.test.mts", "site/test/prepared-arrival.test.mts", "site/test/prepared-body-billboards.test.mts", - "site/test/prepared-dataset-facts.test.mts", - "site/test/prepared-dataset-labels.test.mts", - "site/test/prepared-dataset-legends.test.mts", - "site/test/prepared-descriptor.test.mts", + "site/build/content/prepared-dataset-facts.test.mts", + "site/journeys/prepared-dataset-labels.test.mts", + "site/build/content/prepared-dataset-legends.test.mts", + "site/navigation/prepared-descriptor.test.mts", "site/test/prepared-icons.test.mts", - "site/test/prepared-motion-css.test.mts", - "site/test/prepared-panel-content.test.mts", - "site/test/prepared-presentation-bindings.test.mts", - "site/test/prepared-presentation-contract.test.mts", + "site/build/prepared-motion-css.test.mts", + "site/content/prepared-panel-content.test.mts", + "site/contracts/prepared-presentation-bindings.test.mts", + "site/journeys/prepared-presentation-contract.test.mts", "site/test/prepared-world-context.test.ts", "site/test/prepared-world-navigation.test.mts", - "site/test/preview.test.mts", - "site/test/production-diagnostics.test.mts", - "site/test/recovery-commands.test.mts", - "site/test/refresh-charts.test.mts", - "site/test/rendered-page.test.mts", - "site/test/restore-inputs.test.mts", - "site/test/run-script-chain.test.mts", + "site/server/preview.test.mts", + "site/journeys/production-diagnostics.test.mts", + "site/journeys/recovery-commands.test.mts", + "site/build/prepare/refresh-charts.test.mts", + "site/journeys/rendered-page.test.mts", + "site/build/restore-inputs.test.mts", + "site/build/run-script-chain.test.mts", "site/test/runtime-package.test.mts", - "site/test/runtime-policy.test.mts", + "site/browser/runtime-policy.test.mts", "site/test/satellite-arrival-framing.test.mts", "site/test/satellite-systems.test.mts", "site/test/scene-contract.test.mts", - "site/test/scene-datasets.test.mts", - "site/test/scene-frame.test.mts", - "site/test/scene-publication.test.mts", - "site/test/scene-session.test.mts", + "site/scene/scene-datasets.test.mts", + "site/scene/scene-frame.test.mts", + "site/scene/scene-publication.test.mts", + "site/scene/scene-session.test.mts", "site/test/search-api.test.mts", "site/test/search-response.test.mts", - "site/test/seo-discovery.mts", - "site/test/seo-discovery.test.mts", + "site/journeys/seo-discovery.test-support.mts", + "site/journeys/seo-discovery.test.mts", "site/test/seo.test.mts", - "site/test/setup-assets.test.mts", - "site/test/shell-selectors.test.mts", - "site/test/shell-settings.test.mts", - "site/test/shell-sheet.test.mts", + "site/build/prepare/setup-assets.test.mts", + "site/search/shell-selectors.test.mts", + "site/shell/shell-settings.test.mts", + "site/shell/shell-sheet.test.mts", "site/test/showcase.test.mts", - "site/test/source-evidence-values.mts", - "site/test/source-link.test.mts", + "site/overview/source-evidence-values.test-support.mts", + "site/browser/source-link.test.mts", "site/test/startup-billboard.test.mts", "site/test/startup-cover.test.mts", - "site/test/startup-requests.test.mts", + "site/directory/startup-requests.test.mts", "site/test/stellar-extents.test.mts", - "site/test/surface-label-loop.test.mts", - "site/test/surface-minimap.test.mts", + "site/journeys/surface-label-loop.test.mts", + "site/minimap/surface-minimap.test.mts", "site/test/system-framing.test.mts", "site/test/system-text.test.mts", "site/test/system-view-file.mts", "site/test/view-readout.test.mts", - "site/test/view-url-runtime.test.mts", - "site/test/volume-presentation.test.mts", - "site/test/web-analytics.test.mts", - "site/test/world-billboards.test.mts", + "site/navigation/view-url-runtime.test.mts", + "site/content/volume-presentation.test.mts", + "site/browser/web-analytics.test.mts", + "site/journeys/world-billboards.test.mts", "site/test/world-stars.test.mts", "site/test/world-tables.test.mts", "site/test/zoom-scope.test.mts", - "site/view-url-runtime.characterization.test.mts" + "site/navigation/view-url-runtime.characterization.test.mts" ], "assets": [ "site/layouts/cubic-sky.css", "site/moon-labels.prepared.json", "site/navigation/evidence/star-click/one-click.jpg", - "site/object-navigation-marker.css", + "site/layouts/object-navigation-marker.css", "site/object-shell.css", "site/prepared-catalogue.mjs", "site/prepared-context-bank-assets.json", @@ -383,7 +383,7 @@ "site/shell/maps-shell.css", "site/shell/settings-panel.css", "site/shell/shell-layout.css", - "site/site.css", + "site/layouts/site.css", "site/source/agency-logos.json", "site/source/branding/particle-globe.svg", "site/source/facilities/catalog.json", @@ -440,12 +440,12 @@ "site/source/titles/title-surface-photos.svg", "site/source/titles/title-telescope-images.svg", "site/source/titles/title-thermal-profile.svg", - "site/test/evidence/passive-minimaps/browser.json", - "site/test/evidence/passive-minimaps/earth.png", - "site/test/evidence/passive-minimaps/jupiter-sequence.png", - "site/test/fixtures/galaxies/captures.json", + "site/minimap/evidence/passive-minimaps/browser.json", + "site/minimap/evidence/passive-minimaps/earth.png", + "site/minimap/evidence/passive-minimaps/jupiter-sequence.png", + "site/world/fixtures/galaxies/captures.json", "site/vendor/cesium-LICENSE.md", - "site/wordmark.css" + "site/layouts/wordmark.css" ], "status": "planned", "forbid": [ diff --git a/labs/nebula/packages/lab/src/adapters/css-earth-shell.css b/labs/nebula/packages/lab/src/adapters/css-earth-shell.css index 8ad0bc3e8c7..85c0df2db4c 100644 --- a/labs/nebula/packages/lab/src/adapters/css-earth-shell.css +++ b/labs/nebula/packages/lab/src/adapters/css-earth-shell.css @@ -1 +1 @@ -@import "../../../../../../site/site.css"; +@import "../../../../../../site/layouts/site.css"; diff --git a/netlify/functions/report.ts b/netlify/functions/report.ts index 5161ad8c269..37169cdc43e 100644 --- a/netlify/functions/report.ts +++ b/netlify/functions/report.ts @@ -1,4 +1,4 @@ -// A page's report of its own failure (site/error-report.mts), written to the function log and answered with no content. +// A page's report of its own failure (site/startup/error-report.mts), written to the function log and answered with no content. // Nothing is stored. The body is capped: this endpoint is public. export default async (request: Request) => { if (request.method !== 'POST') return new Response(null, { status: 405 }); diff --git a/packages/bake/src/delivery/asset-origin-scenes.ts b/packages/bake/src/delivery/asset-origin-scenes.ts index 20c03366c1a..6a8337bfc50 100644 --- a/packages/bake/src/delivery/asset-origin-scenes.ts +++ b/packages/bake/src/delivery/asset-origin-scenes.ts @@ -21,7 +21,7 @@ const CONTEXT_CHARS = 70; /** Every literal `/scenes/` occurrence remaining in emitted HTML or CSS: with * `ASSET_ORIGIN` set, every consumption point should have resolved it away * before it reached the page (see `packages/renderer/src/rendering/prepared-asset-origin.ts`, - * `site/asset-origin.mts`). A non-empty result means one was missed. + * `site/server-assets/asset-origin.mts`). A non-empty result means one was missed. * `text` is a short window around the match, not the whole (often minified, multi-megabyte) line. */ export async function findSceneReferences(distDir: string): Promise { const files = await walk(distDir, distDir); diff --git a/packages/bake/src/delivery/public-runtime-assets.ts b/packages/bake/src/delivery/public-runtime-assets.ts index 71966902f25..8aa5db1e29c 100644 --- a/packages/bake/src/delivery/public-runtime-assets.ts +++ b/packages/bake/src/delivery/public-runtime-assets.ts @@ -39,7 +39,7 @@ async function verifyAssetFiles(root:string,manifest:RuntimeManifest,exact:boole } /** The object page stylesheets (the renderer package's own stylesheets name no scene image), whose `url(/scenes//…)` values the deploy resolves to published hashes like the - * prepared data's (site/asset-origin.mts). A body's stylesheet datasets are part of what it ships. */ + * prepared data's (site/server-assets/asset-origin.mts). A body's stylesheet datasets are part of what it ships. */ export async function stylesheetTexts():Promise { const directory=resolve(checkoutProjectRoot(import.meta.url),'src/renderers/css/styles'); // A tree without renderer stylesheets (an isolated fixture) has no stylesheet references. diff --git a/packages/bake/src/prepared-presentation/prepared-presentation-bindings.ts b/packages/bake/src/prepared-presentation/prepared-presentation-bindings.ts index 543ec8ac91b..09065dae566 100644 --- a/packages/bake/src/prepared-presentation/prepared-presentation-bindings.ts +++ b/packages/bake/src/prepared-presentation/prepared-presentation-bindings.ts @@ -19,7 +19,7 @@ import { prepareDepthPartitions, restoreDepthSource } from './prepared-depth-par import { verifyDepthStyles } from './prepared-depth-styles.ts'; /** The stylesheets an object's page loads, in cascade order, as repository paths. The application owns its page, so it - * passes this in (`objectPageStyles` in `site/object-page-contract.mts`). */ + * passes this in (`objectPageStyles` in `site/contracts/object-page-contract.mts`). */ export type ObjectPageStyles = (descriptor: unknown) => readonly string[]; /** Resolve authored motion offline. Runtime receives explicit animation diff --git a/packages/renderer/src/navigation/camera-layout.ts b/packages/renderer/src/navigation/camera-layout.ts index 993e39ff923..340ad28baf8 100644 --- a/packages/renderer/src/navigation/camera-layout.ts +++ b/packages/renderer/src/navigation/camera-layout.ts @@ -1,6 +1,6 @@ import { type CameraPlan } from '@cssearth/objects'; -/** The camera plan fields the responsive fit reads; a page bakes them for its startup cover (site/startup-cover.mts). */ +/** The camera plan fields the responsive fit reads; a page bakes them for its startup cover (site/startup/startup-cover.mts). */ export type ResponsiveZoomPlan = Pick; export interface ResponsiveZoomOptions { plan: ResponsiveZoomPlan; mobile: boolean; framingReferenceZoom?: number; viewport: import('./camera-viewport.js').CameraViewport; } import { smoothstep } from "@cssearth/engine"; diff --git a/packages/renderer/src/rendering/prepared-asset-origin.ts b/packages/renderer/src/rendering/prepared-asset-origin.ts index 71897fc7032..64f293a39f6 100644 --- a/packages/renderer/src/rendering/prepared-asset-origin.ts +++ b/packages/renderer/src/rendering/prepared-asset-origin.ts @@ -32,7 +32,7 @@ export function resolvePreparedAssetUrl(address: string, assetOrigin: PreparedAs return `${assetOrigin.origin}/runtime-assets/${digest}/${filename}`; } -// Matches `site/asset-origin.mts`'s `CSS_SCENE_URL`: `url(` and its closing `)` may wrap +// Matches `site/server-assets/asset-origin.mts`'s `CSS_SCENE_URL`: `url(` and its closing `)` may wrap // the quoted address across lines, so whitespace is allowed around it but excluded from it. const STYLE_SCENE_URL = /url\(\s*(["']?)(\/scenes\/[a-z][a-z0-9-]*\/[^\s"')]+)\1\s*\)/gu; diff --git a/site/application-world-context.characterization.test.mts b/site/application-world-context.characterization.test.mts index 135bb08a5f4..84f7727c1aa 100644 --- a/site/application-world-context.characterization.test.mts +++ b/site/application-world-context.characterization.test.mts @@ -37,7 +37,7 @@ mock.module('@cssearth/renderer', { namedExports: { ...renderer, labelOcclusionFor: () => ({ read: () => ['sidebar'], subscribe: () => () => effects.push(['occlusion-unsubscribe']) }) } }); mock.module('@cssearth/renderer/rendering/startup-gate.ts', { namedExports: { afterStartup: (_target: unknown, callback: () => void) => { startup = callback; } } }); mock.module(new URL('./world-approach.mts', import.meta.url).href, { namedExports: { createWorldApproach: () => ({ start: () => effects.push(['approach-start']), observe(position: unknown) { effects.push(['observe', position]); } }) } }); -mock.module(new URL('./moon-orbit-policy.mts', import.meta.url).href, { namedExports: { suppressMinorMoonOrbitPaint: () => () => effects.push(['orbit-paint-destroy']) } }); +mock.module(new URL('./world/moon-orbit-policy.mts', import.meta.url).href, { namedExports: { suppressMinorMoonOrbitPaint: () => () => effects.push(['orbit-paint-destroy']) } }); mock.module(new URL('./catalogue-moon-labels.mts', import.meta.url).href, { namedExports: { mountCatalogueMoonLabels: (_host: unknown, bodies: () => unknown, _focus: unknown, _clock: unknown, refresh: () => boolean) => { assert.ok(Array.isArray(bodies())); effects.push(['initial-label-refresh', refresh()]); return ({ selectObject: (id: string) => effects.push(['moon-select', id]), destroy: () => effects.push(['labels-destroy']) }); } } }); mock.module(new URL('./application-world-frames.mts', import.meta.url).href, { namedExports: { createApplicationWorldFrames: (options: typeof frameOptions) => { frameOptions = options; return ({ refresh: () => { effects.push(['refresh']); return true; }, stats: {}, present() {}, createFramePresenter() {}, setNavigationInFlight() {}, @@ -45,8 +45,8 @@ mock.module(new URL('./application-world-frames.mts', import.meta.url).href, { n mock.module(new URL('./application-world-visibility.mts', import.meta.url).href, { namedExports: { worldVisibilityPolicy: { minorMoonIds: [] }, createApplicationWorldVisibility: () => ({ selectObject: (id: string) => effects.push(['visibility-select', id]), setIllustrationModelsEnabled() {}, setHighlightedClassification() {} }) } }); mock.module(new URL('./object-directory.mts', import.meta.url).href, { namedExports: { knownAncestors: (...args: unknown[]) => { effects.push(['known-ancestors', ...args]); return [{ id: 'known' }]; }, ancestorIds: (...args: unknown[]) => { effects.push(['ancestor-ids', ...args]); return ancestorResult; } } }); -mock.module(new URL('./context-availability.mts', import.meta.url).href, { namedExports: { CONTEXT_AVAILABILITY: {} } }); -mock.module(new URL('./diagnostics-policy.mts', import.meta.url).href, { namedExports: { DIAGNOSTICS_ENABLED: true } }); +mock.module(new URL('./world/context-availability.mts', import.meta.url).href, { namedExports: { CONTEXT_AVAILABILITY: {} } }); +mock.module(new URL('./browser/diagnostics-policy.mts', import.meta.url).href, { namedExports: { DIAGNOSTICS_ENABLED: true } }); const { createApplicationWorldContext } = await import('./application-world-context.mts'); const viewport = { read() {}, subscribe() {}, destroy() {} } as unknown as ReturnType; const frame = {} as PreparedWorldCameraFrame; diff --git a/site/application-world-context.mts b/site/application-world-context.mts index 2baad593fab..e9ba9bd480e 100644 --- a/site/application-world-context.mts +++ b/site/application-world-context.mts @@ -8,9 +8,9 @@ import type { PreparedWorldCameraFrame } from '@cssearth/objects'; import { PREPARED_WORLD_PRESENTATION } from './prepared-world-presentation.mts'; import { APPLICATION_WORLD_CONTEXT as applicationContext } from './world-context-plan.mts'; import { createWorldApproach } from './world-approach.mts'; -import { DIAGNOSTICS_ENABLED } from './diagnostics-policy.mts'; -import { CONTEXT_AVAILABILITY } from './context-availability.mts'; -import { suppressMinorMoonOrbitPaint } from './moon-orbit-policy.mts'; +import { DIAGNOSTICS_ENABLED } from './browser/diagnostics-policy.mts'; +import { CONTEXT_AVAILABILITY } from './world/context-availability.mts'; +import { suppressMinorMoonOrbitPaint } from './world/moon-orbit-policy.mts'; import { mountCatalogueMoonLabels } from './catalogue-moon-labels.mts'; import { loadApplicationUniverse } from './application-world-resources.mts'; import { ancestorIds, knownAncestors } from './object-directory.mts'; diff --git a/site/application-world-resources.characterization.test.mts b/site/application-world-resources.characterization.test.mts index 1959fcc7258..9975d2b3e50 100644 --- a/site/application-world-resources.characterization.test.mts +++ b/site/application-world-resources.characterization.test.mts @@ -8,11 +8,11 @@ import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import { OBJECT_SCHEMA } from '@cssearth/objects'; import { APPLICATION_WORLD_CONTEXT } from './world-context-plan.mts'; -import { CONTEXT_DATASETS } from './context-datasets.mts'; +import { CONTEXT_DATASETS } from './world/context-datasets.mts'; const renderer = await import('@cssearth/renderer/universe'); const world = await import('./world-context-plan.mts'); -const entries = await import('./object-entries.mts'); +const entries = await import('./directory/object-entries.mts'); const visibility = await import('./application-world-visibility.mts'); mock.module(new URL('./application-world-visibility.mts', import.meta.url).href, { namedExports: { ...visibility, worldVisibilityPolicy: { ...visibility.worldVisibilityPolicy, compact: process.env.RESOURCE_PHONE === 'true' } } }); const frame = { referenceFrame: 'sun-icrf', epochJdTt: 1, originM: [0, 0, 0], localToReferenceXyzw: [0, 0, 0, 1], metersPerUnit: 1, boundsUnits: { min: [-1, -1, -1], max: [1, 1, 1] } }; @@ -43,11 +43,11 @@ let bankResponse: Response | null = null; let catalogLoads = 0, plannerCount = 0; let loadFailure: Error | null = new Error('initial volume decode'); mock.module(new URL('./prepared-context-objects.mts', import.meta.url).href, { namedExports: { CONTEXT_OBJECT_DESCRIPTORS: declarations, CONTEXT_OBJECT_ASSET_URLS: assets, CONTEXT_GALAXY_SAMPLE: {} } }); -mock.module(new URL('./context-availability.mts', import.meta.url).href, { namedExports: { CONTEXT_AVAILABILITY: availability } }); +mock.module(new URL('./world/context-availability.mts', import.meta.url).href, { namedExports: { CONTEXT_AVAILABILITY: availability } }); mock.module(new URL('./world-context-plan.mts', import.meta.url).href, { namedExports: { ...world, WORLD_DOT_BANKS: ['inside'], onWorldSystems: (callback: typeof onSystems) => { onSystems = callback; return () => {}; } } }); -mock.module(new URL('./object-entries.mts', import.meta.url).href, { namedExports: { ...entries, onObjectEntry: (callback: typeof onEntry) => { onEntry = callback; return () => {}; } } }); -mock.module(new URL('./dot-catalogues.mts', import.meta.url).href, { namedExports: { loadCatalogueDots: async () => { catalogLoads++; return { fixture: true }; } } }); +mock.module(new URL('./directory/object-entries.mts', import.meta.url).href, { namedExports: { ...entries, onObjectEntry: (callback: typeof onEntry) => { onEntry = callback; return () => {}; } } }); +mock.module(new URL('./world/dot-catalogues.mts', import.meta.url).href, { namedExports: { loadCatalogueDots: async () => { catalogLoads++; return { fixture: true }; } } }); mock.module('@cssearth/renderer/universe', { namedExports: { ...renderer, loadPreparedCssVolume: async () => { if (loadFailure) throw loadFailure; return { volume: true }; }, loadPreparedPointAppearance: async () => ({ points: true }), diff --git a/site/application-world-resources.mts b/site/application-world-resources.mts index a618b0cf838..1ebb964ff36 100644 --- a/site/application-world-resources.mts +++ b/site/application-world-resources.mts @@ -1,5 +1,5 @@ import { IMAGE_MESH_SCHEMA, bankCataloguePoints, parseDatasetBillboards, parseCataloguePointBankDescriptor, parseDensityVolumeFrame, parseImageLayerBankDescriptor, parseObjectDescriptor } from '@cssearth/objects'; -import { DATASET_VISIBILITY } from './runtime-policy.mts'; +import { DATASET_VISIBILITY } from './browser/runtime-policy.mts'; import { isRecord } from '@cssearth/core'; // Generated after the prepared dataset payloads are restored: text now, validated below. import datasetBillboardText from './prepared-dataset-billboards.json?raw'; @@ -7,16 +7,16 @@ import { createPreparedUniverse, loadPreparedCssVolume, loadPreparedPointAppeara import { APPLICATION_WORLD_CONTEXT as applicationContext, APPLICATION_WORLD_PLANNER_SOURCE, WORLD_DOT_BANKS, onWorldSystems } from './world-context-plan.mts'; import { preparedBodyBillboards } from '@cssearth/renderer/navigation/prepared-body-billboards.ts'; import { CONTEXT_OBJECT_ASSET_URLS, CONTEXT_OBJECT_DESCRIPTORS } from './prepared-context-objects.mts'; -import { CONTEXT_AVAILABILITY } from './context-availability.mts'; +import { CONTEXT_AVAILABILITY } from './world/context-availability.mts'; import { PREPARED_WORLD_PRESENTATION } from './prepared-world-presentation.mts'; -import { createInFlightLoader } from './in-flight-loader.mts'; -import { startupFetch } from './startup-requests.mts'; -import { loadCatalogueDots } from './dot-catalogues.mts'; +import { createInFlightLoader } from './browser/in-flight-loader.mts'; +import { startupFetch } from './directory/startup-requests.mts'; +import { loadCatalogueDots } from './world/dot-catalogues.mts'; import { annotationsForBodies, worldVisibilityPolicy } from './application-world-visibility.mts'; import { STELLAR_EXTENTS } from './stellar-extents.mts'; -import { CONTEXT_DATASETS } from './context-datasets.mts'; +import { CONTEXT_DATASETS } from './world/context-datasets.mts'; import { navigationHref } from './navigation/navigation-history.mts'; -import { onObjectEntry } from './object-entries.mts'; +import { onObjectEntry } from './directory/object-entries.mts'; /** The view an image mesh package is drawn in: the view of the dataset the mounted object shows of it (context-datasets.mts), * or of its default dataset; its descriptor names each dataset's view (`properties.views`). A package without views is cut open. */ diff --git a/site/application-world-visibility.mts b/site/application-world-visibility.mts index 20d5e8ac014..308964c0f9f 100644 --- a/site/application-world-visibility.mts +++ b/site/application-world-visibility.mts @@ -1,4 +1,4 @@ -import { MOBILE_VIEWPORT_QUERY } from './runtime-policy.mts'; +import { MOBILE_VIEWPORT_QUERY } from './browser/runtime-policy.mts'; // Every world body's classification and discovery come with the world summary, not the object registry. import { WORLD_OBJECTS, worldObjects, type WorldObject } from './world-objects.mts'; import { contextAnnotationOpacity } from '@cssearth/renderer/navigation/marker-presentation.ts'; @@ -7,8 +7,8 @@ import { labelImportance } from '@cssearth/renderer/labels/universe-label-policy import { APPLICATION_WORLD_CONTEXT as applicationContext, loadWorldHolder, onWorldSystems } from './world-context-plan.mts'; import { PREPARED_WORLD_PRESENTATION as prepared } from './prepared-world-presentation.mts'; import { satelliteSystemByHost, satelliteSystemOfMember } from './satellite-systems.mts'; -import { planetarySystemParents } from './planetary-system-members.mts'; -import { orbitRoot } from './orbit-root.mts'; +import { planetarySystemParents } from './model/planetary-system-members.mts'; +import { orbitRoot } from './model/orbit-root.mts'; import type { SceneLifetime } from '@cssearth/engine'; import type { ApplicationWorldLayer } from './application-world-types.mts'; diff --git a/site/browser/error-report.test.mts b/site/browser/error-report.test.mts index e68409a07ba..07134359dbf 100644 --- a/site/browser/error-report.test.mts +++ b/site/browser/error-report.test.mts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { test } from 'node:test'; -import { errorReportBootstrap } from '../error-report.mts'; +import { errorReportBootstrap } from '../startup/error-report.mts'; function run(hostname: string) { const listeners = new Map void>(), beacons: { url: string; body: Record }[] = []; diff --git a/site/browser/in-flight-loader.test.mts b/site/browser/in-flight-loader.test.mts index e8ae382d2b1..7e3d7b72deb 100644 --- a/site/browser/in-flight-loader.test.mts +++ b/site/browser/in-flight-loader.test.mts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { createInFlightLoader } from '../in-flight-loader.mts'; +import { createInFlightLoader } from './in-flight-loader.mts'; test('in-flight loader shares concurrent work but releases successful values', async () => { let calls = 0, resolve!: (value: object) => void; diff --git a/site/browser/initial-shell-context.test.mts b/site/browser/initial-shell-context.test.mts index 812da3aaa10..ca56aa719bd 100644 --- a/site/browser/initial-shell-context.test.mts +++ b/site/browser/initial-shell-context.test.mts @@ -2,7 +2,7 @@ import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import assert from 'node:assert/strict'; import { parseHTML } from 'linkedom'; -import { deferInitialShellContext, initialShellContextBootstrap } from '../initial-shell-context.mts'; +import { deferInitialShellContext, initialShellContextBootstrap } from '../startup/initial-shell-context.mts'; test('query-specific views withhold static object facts until the requested context is ready', () => { for (const query of ['dataset=spectral-slope', 'v=saved', 'feature=12']) { diff --git a/site/browser/runtime-policy.mts b/site/browser/runtime-policy.mts index 88360432eaf..63d218af7bf 100644 --- a/site/browser/runtime-policy.mts +++ b/site/browser/runtime-policy.mts @@ -1,6 +1,6 @@ import { isSharedInputSurface } from '@cssearth/renderer'; import type { RuntimePolicy } from "@cssearth/renderer/navigation/runtime-policy.ts"; -import type { AutomaticPlaybackInput, AutomaticPlaybackPolicy } from "./browser/shell-contract-types.mts"; +import type { AutomaticPlaybackInput, AutomaticPlaybackPolicy } from "./shell-contract-types.mts"; /** Typed suggestions wait for enough text to avoid broad one-character catalogue requests. */ export const SEARCH_SUGGESTION_MIN_CHARACTERS = 2; diff --git a/site/browser/runtime-policy.test.mts b/site/browser/runtime-policy.test.mts index c0ce39841d6..04fc48e194f 100644 --- a/site/browser/runtime-policy.test.mts +++ b/site/browser/runtime-policy.test.mts @@ -16,7 +16,7 @@ import { wheelZoomInputKind, mobileSheetKeyboardInset, MOBILE_SHEET_POLICY, -} from "../runtime-policy.mts"; +} from "./runtime-policy.mts"; import { PREPARED_WHEEL_ZOOM, pinchTargetDistance } from "@cssearth/renderer/navigation/prepared-wheel-zoom.ts"; test("only a keyboard-sized covering takes room from the sheet", () => { diff --git a/site/browser/source-link.test.mts b/site/browser/source-link.test.mts index 6ce53654a1a..91f0f79c968 100644 --- a/site/browser/source-link.test.mts +++ b/site/browser/source-link.test.mts @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import { parseHTML } from 'linkedom'; -import { renderSourceLink, sourceDocuments } from '../source-link.mts'; +import { renderSourceLink, sourceDocuments } from './source-link.mts'; test('one source link follows selection, independent of search, dataset and accordion state', () => { const { document } = parseHTML(` diff --git a/site/browser/web-analytics.test.mts b/site/browser/web-analytics.test.mts index 7d8694fb5a2..f3c39674d50 100644 --- a/site/browser/web-analytics.test.mts +++ b/site/browser/web-analytics.test.mts @@ -3,7 +3,7 @@ import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import { runInNewContext } from "node:vm"; -import { WEB_ANALYTICS_TOKEN, webAnalyticsBootstrap } from "../web-analytics.mts"; +import { WEB_ANALYTICS_TOKEN, webAnalyticsBootstrap } from "../startup/web-analytics.mts"; test("analytics ignores local visits and loads the Cloudflare beacon on css.earth after the page", () => { for (const hostname of ["localhost", "127.0.0.1", "::1"]) { diff --git a/site/build/charts/charts.test.mts b/site/build/charts/charts.test.mts index bff6e6dd002..4a66f23ea60 100644 --- a/site/build/charts/charts.test.mts +++ b/site/build/charts/charts.test.mts @@ -4,7 +4,7 @@ import assert from 'node:assert/strict'; import {readFile,mkdtemp,rm} from 'node:fs/promises'; import {tmpdir} from 'node:os'; import {join} from 'node:path'; -import {prepareChartAssets,parseChartAssetRecipe} from '../build/charts/charts.ts'; +import {prepareChartAssets,parseChartAssetRecipe} from './charts.ts'; test('phase source rejects an uncovered angle range',()=>{ assert.throws(()=>parseChartAssetRecipe({schema:'cssearth-chart-assets@1',publicBase:'/scenes/open-body/',charts:[{kind:'phase',id:'phase',title:'Phase',description:'Observed model',output:'phase.svg',metadata:{},sampleCount:181,maximumAngleDegrees:180,segments:[{kind:'polynomialMagnitude',maximumAngleDegrees:90,coefficients:[1,2]}]}]}),/cover/); diff --git a/site/build/charts/folded-transit.test.mts b/site/build/charts/folded-transit.test.mts index eb422d176cd..4bf45edb825 100644 --- a/site/build/charts/folded-transit.test.mts +++ b/site/build/charts/folded-transit.test.mts @@ -3,10 +3,10 @@ import { mkdtemp, readFile, rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { sourceTest } from '@cssearth/objects/node/source-test'; -import { prepareChartAssets } from '../build/charts/charts.ts'; +import { prepareChartAssets } from './charts.ts'; const test = sourceTest(); -const source = new URL('../../src/objects/hd-189733/source/', import.meta.url).pathname; +const source = new URL('../../../src/objects/hd-189733/source/', import.meta.url).pathname; const files = ['tess2021204101404-s0041-0000000256364928-0212-s_lc.fits', 'tess2022190063128-s0054-0000000256364928-0227-s_lc.fits', 'tess2024196212429-s0081-0000000256364928-0276-s_lc.fits'].map(name => `photometry/tess/${name}`); test('HD 189733 b folds from its pinned TESS sectors to a dip as deep as its radius ratio says, flat outside it', async () => { diff --git a/site/build/content/load-object-content.test-support.mts b/site/build/content/load-object-content.test-support.mts index 447f1af29f9..d4dfb6e47c2 100644 --- a/site/build/content/load-object-content.test-support.mts +++ b/site/build/content/load-object-content.test-support.mts @@ -27,7 +27,7 @@ interface LoadedObjectContent { // Follow descriptor references, not a fixed source filename or private module. export async function loadObjectContent(id: string): Promise { - const root = new URL(`../../src/objects/${id}/`, import.meta.url); + const root = new URL(`../../../src/objects/${id}/`, import.meta.url); const readJson = async (path: string): Promise => JSON.parse(await readFile(new URL(path, root), "utf8")); const descriptor = requireDescriptor(await readJson("object.json"), `${id}: object descriptor`); async function source(name: string): Promise> { diff --git a/site/build/content/prepared-dataset-facts.test.mts b/site/build/content/prepared-dataset-facts.test.mts index 9f9e2182e3e..345486d391d 100644 --- a/site/build/content/prepared-dataset-facts.test.mts +++ b/site/build/content/prepared-dataset-facts.test.mts @@ -1,11 +1,11 @@ import { parseCompleteObjectContentSource } from '@cssearth/objects/node/contract'; -import { OBJECT_CONTENT_FIXTURE_LABEL } from './fixtures/object-content-fixture.mts'; +import { OBJECT_CONTENT_FIXTURE_LABEL } from '../fixtures/object-content-fixture.mts'; import { type ObjectContentSource } from '@cssearth/objects'; import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { loadObjectContent } from './load-object-content.mts'; -import { prepareObjectContent } from '../build/content/prepare.ts'; +import { loadObjectContent } from './load-object-content.test-support.mts'; +import { prepareObjectContent } from './prepare.ts'; import { requireArray, requireRecord, requireString } from '@cssearth/core'; const preparedObject = (value: unknown): { readonly data: { readonly datasets: { readonly controls: readonly Record[] } } } => { diff --git a/site/build/content/prepared-dataset-legends.test.mts b/site/build/content/prepared-dataset-legends.test.mts index b68d3970846..38d7e023317 100644 --- a/site/build/content/prepared-dataset-legends.test.mts +++ b/site/build/content/prepared-dataset-legends.test.mts @@ -1,6 +1,6 @@ import assert from "node:assert/strict"; -import { loadObjectContent } from "./load-object-content.mts"; -import { prepareObjectContent } from "../build/content/prepare.ts"; +import { loadObjectContent } from "./load-object-content.test-support.mts"; +import { prepareObjectContent } from "./prepare.ts"; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); diff --git a/site/build/inline-page-stylesheet.test.mts b/site/build/inline-page-stylesheet.test.mts index 19171830e9a..a3b69cfeb6f 100644 --- a/site/build/inline-page-stylesheet.test.mts +++ b/site/build/inline-page-stylesheet.test.mts @@ -3,7 +3,7 @@ import test from 'node:test'; import { mkdtemp, mkdir, readFile, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; -import { inlinePageStylesheets } from '../build/inline-page-stylesheet.mts'; +import { inlinePageStylesheets } from './inline-page-stylesheet.mts'; test('pages carry their stylesheet inline and flight fragments keep the link', async () => { const dist = await mkdtemp(join(tmpdir(), 'inline-stylesheet-')); diff --git a/site/build/object-package-contract.mts b/site/build/object-package-contract.mts index d26023b8786..43f8fd92559 100644 --- a/site/build/object-package-contract.mts +++ b/site/build/object-package-contract.mts @@ -1,5 +1,5 @@ import { parseObjectDescriptor } from '@cssearth/objects'; -import { objectPageStyles } from '../object-page-contract.mts'; +import { objectPageStyles } from '../contracts/object-page-contract.mts'; import { access, readFile } from "node:fs/promises"; import { resolve } from "node:path"; import type { ObjectEntry } from '@cssearth/objects'; diff --git a/site/build/prepare/arrival-discovery.test.mts b/site/build/prepare/arrival-discovery.test.mts index d4381d92341..c4ac293c46d 100644 --- a/site/build/prepare/arrival-discovery.test.mts +++ b/site/build/prepare/arrival-discovery.test.mts @@ -5,14 +5,14 @@ import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { parseObjectDiscovery, OBJECT_RUNTIME_SCHEMA, OBJECT_SCHEMA, OBJECT_CONTENT_SCHEMA, OBJECT_CONTENT_VERSION, RASTER_RECIPE_SCHEMA } from '@cssearth/objects'; import { preparedDefaultViewRotation } from '@cssearth/engine'; -import { prepareObjectDiscovery } from '../build/prepare/prepare-object-discovery.mts'; +import { prepareObjectDiscovery } from './prepare-object-discovery.mts'; test('a shape-only body gets a prepared arrival without becoming photographic', async () => { const directory = await mkdtemp(join(tmpdir(), 'arrival-discovery-')); try { const prepared = join(directory, 'prepared'); await mkdir(prepared); - const runtime = JSON.parse(await readFile(new URL('../../src/objects/mercury/prepared/runtime.json', import.meta.url), 'utf8')); + const runtime = JSON.parse(await readFile(new URL('../../../src/objects/mercury/prepared/runtime.json', import.meta.url), 'utf8')); await writeFile(join(prepared, 'runtime.json'), JSON.stringify({ schema: OBJECT_RUNTIME_SCHEMA, camera: runtime.camera })); await writeFile(join(prepared, 'controls.json'), JSON.stringify({ datasets: { defaultDataset: 'shape', controls: [{ id: 'shape' }] } })); const billboard = { url: '/scenes/body/body-arrival.webp', dataset: 'shape', size: 1024, @@ -39,7 +39,7 @@ test('a shape-only body gets a prepared arrival without becoming photographic', test('an object without a surface is reached on its default view when its dataset is pictured, not when it is dots', async () => { const root = await mkdtemp(join(tmpdir(), 'arrival-discovery-')), directory = join(root, 'galaxy'); try { - const runtime = JSON.parse(await readFile(new URL('../../src/objects/m31/prepared/runtime.json', import.meta.url), 'utf8')); + const runtime = JSON.parse(await readFile(new URL('../../../src/objects/m31/prepared/runtime.json', import.meta.url), 'utf8')); for (const path of ['galaxy/prepared', 'galaxy/source/content', 'layers', 'dots']) await mkdir(join(root, path), { recursive: true }); await writeFile(join(directory, 'prepared/runtime.json'), JSON.stringify({ schema: OBJECT_RUNTIME_SCHEMA, camera: runtime.camera })); await writeFile(join(root, 'layers/object.json'), JSON.stringify({ schema: OBJECT_SCHEMA, id: 'layers', type: 'image-layer-bank', properties: {} })); diff --git a/site/build/prepare/body-additions.test.mts b/site/build/prepare/body-additions.test.mts index ab3a40d94e8..cbd4e2bea7c 100644 --- a/site/build/prepare/body-additions.test.mts +++ b/site/build/prepare/body-additions.test.mts @@ -5,11 +5,11 @@ import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { contextObjectAssetUrls, contextObjectJsonModule, contextObjectModule, prepareCatalog, splitContextObjectAssets } from '../build/prepare/prepare-catalog.mts'; +import { contextObjectAssetUrls, contextObjectJsonModule, contextObjectModule, prepareCatalog, splitContextObjectAssets } from './prepare-catalog.mts'; import { readCatalog } from '@cssearth/objects/node'; import { prepareSceneDistance } from '@cssearth/bake/navigation'; -import { prepareBodyRecords } from '../../packages/astronomy/cli/body-records.mts'; -import { literalRecords } from '../../packages/astronomy/cli/lib/write-record-sections.mts'; +import { prepareBodyRecords } from '../../../packages/astronomy/cli/body-records.mts'; +import { literalRecords } from '../../../packages/astronomy/cli/lib/write-record-sections.mts'; import type { PathLike } from 'node:fs'; const write = async (path: string, value: unknown) => { @@ -82,7 +82,7 @@ async function addBody(root: string, id: string, classification: string, parent id, classification, physical: { name: id, horizonsCode: null, meanRadiusKm: 1, gravitationalParameterKm3PerS2: 0, parent: id === 'sun' ? null : parent }, }); - await write(resolve(root, `src/objects/${id}/prepared/runtime.json`), { schema: 'cssearth-object-runtime@5', id, camera: JSON.parse(await readFile(new URL('../../src/objects/mercury/prepared/runtime.json', import.meta.url), 'utf8')).camera }); + await write(resolve(root, `src/objects/${id}/prepared/runtime.json`), { schema: 'cssearth-object-runtime@5', id, camera: JSON.parse(await readFile(new URL('../../../src/objects/mercury/prepared/runtime.json', import.meta.url), 'utf8')).camera }); await write(resolve(root, `src/objects/${id}/prepared/controls.json`), { datasets: { controls: [] } }); } diff --git a/site/build/prepare/check-preparation-inputs.mts b/site/build/prepare/check-preparation-inputs.mts index 99f9ac5c429..b0f80e3edcf 100644 --- a/site/build/prepare/check-preparation-inputs.mts +++ b/site/build/prepare/check-preparation-inputs.mts @@ -16,8 +16,8 @@ import { resolve } from 'node:path'; import { pathToFileURL } from 'node:url'; import { sha256 } from '@cssearth/core/node'; import { hasErrorCode } from '@cssearth/core'; -import { textBudgetErrors } from '../../object-text.mts'; -import type { TextFinding } from '../../object-text.mts'; +import { textBudgetErrors } from '../../content/object-text.mts'; +import type { TextFinding } from '../../content/object-text.mts'; import { inventoryAssets } from '@cssearth/bake/delivery'; import type { InventoryAsset } from '@cssearth/objects/node'; import { installRuntimeAssets } from '@cssearth/bake/asset-publication'; diff --git a/site/build/prepare/check-preparation-inputs.test.mts b/site/build/prepare/check-preparation-inputs.test.mts index b9d0c3f0c47..435c9f8d6db 100644 --- a/site/build/prepare/check-preparation-inputs.test.mts +++ b/site/build/prepare/check-preparation-inputs.test.mts @@ -4,7 +4,7 @@ import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { dirname, join } from 'node:path'; import { sourceTest } from '@cssearth/objects/node/source-test'; -import { missingPreparedFiles, restoreDriftedFiles, textBudgetFindings, worldStepOutput } from '../build/prepare/check-preparation-inputs.mts'; +import { missingPreparedFiles, restoreDriftedFiles, textBudgetFindings, worldStepOutput } from './check-preparation-inputs.mts'; const test = sourceTest(); const put = async (path: string, bytes: string | Buffer) => { await mkdir(dirname(path), { recursive: true }); await writeFile(path, bytes); }; diff --git a/site/build/prepare/descriptor-roundtrip.test.mts b/site/build/prepare/descriptor-roundtrip.test.mts index ae69d530011..e2a3a2844ed 100644 --- a/site/build/prepare/descriptor-roundtrip.test.mts +++ b/site/build/prepare/descriptor-roundtrip.test.mts @@ -6,7 +6,7 @@ import { runInNewContext } from 'node:vm'; import { requireRecord } from '@cssearth/core'; import { readObjectDescriptorRecord, parsePreparedObjectRuntime } from '@cssearth/objects'; import { sourceTest } from '@cssearth/objects/node/source-test'; -import { prepareWorldNavigationDefinition } from '../build/prepare/prepare-world-navigation.ts'; +import { prepareWorldNavigationDefinition } from './prepare-world-navigation.ts'; const test = sourceTest(); const root = process.cwd(); const ids = ['mercury', 'earth', 'moon', 'mars', 'jupiter', 'io', 'sun', 'ceres']; diff --git a/site/build/prepare/lonlat-slice-table.test.mts b/site/build/prepare/lonlat-slice-table.test.mts index c2ddc51e4ba..36b2afc3219 100644 --- a/site/build/prepare/lonlat-slice-table.test.mts +++ b/site/build/prepare/lonlat-slice-table.test.mts @@ -4,7 +4,7 @@ import { test } from 'node:test'; import { parseLonLatSliceTable } from '@cssearth/bake/objects/raster'; import { sourceTest } from '@cssearth/objects/node/source-test'; import { requireRecord } from '@cssearth/core'; -import { deriveObjectDiscovery } from '../build/prepare/prepare-object-discovery.mts'; +import { deriveObjectDiscovery } from './prepare-object-discovery.mts'; import { parseObjectDiscovery, discoveryDescription } from '@cssearth/objects'; const specification = { columns: { longitude: 2, latitude: 3, value: 5 }, slice: { column: 4, value: 0.1 }, coordinateToleranceDegrees: 0 }; @@ -12,7 +12,7 @@ const rows = [-135, -45, 45, 135].flatMap(lon => [-60, 0, 60].flatMap(lat => [0. const text = rows.join('\n'); test('the climate simulation is never advertised as observed imagery', async () => { - const read = async (path: string) => requireRecord(JSON.parse(await readFile(new URL(`../../src/objects/wasp-103b/${path}`, import.meta.url), 'utf8'))); + const read = async (path: string) => requireRecord(JSON.parse(await readFile(new URL(`../../../src/objects/wasp-103b/${path}`, import.meta.url), 'utf8'))); const descriptor = await read('object.json'), content = await read('source/content/object.json'); const discovery = deriveObjectDiscovery(requireRecord(descriptor.properties).catalog, content, [await read('source/preparation/raster.json')]); assert.equal(discovery.imagery, false); @@ -43,7 +43,7 @@ test('an absent level, duplicate, missing cell, nonnumeric value or nonperiodic }); sourceTest('wasp-103b')('the released GCM slice matches the independent temperature anchors in Kreidberg 2018 section 6', async () => { - const text = await readFile(new URL('../../src/objects/wasp-103b/source/science/kreidberg-2018/pressure-temperature.dat', import.meta.url), 'utf8'); + const text = await readFile(new URL('../../../src/objects/wasp-103b/source/science/kreidberg-2018/pressure-temperature.dat', import.meta.url), 'utf8'); const map = parseLonLatSliceTable(text, { ...specification, slice: { column: 4, value: 0.11542 }, coordinateToleranceDegrees: 0.005 }); assert.equal(map.report.width, 64); assert.equal(map.report.height, 30); diff --git a/site/build/prepare/prepare-authored.test.mts b/site/build/prepare/prepare-authored.test.mts index c35505bcbc6..81885c0a98d 100644 --- a/site/build/prepare/prepare-authored.test.mts +++ b/site/build/prepare/prepare-authored.test.mts @@ -4,7 +4,7 @@ import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import test from 'node:test'; import { readAuthoredSources } from '@cssearth/bake/objects/sources'; -import { redrawOnlyDecision, readPublishedSun } from '../build/prepare/prepare-authored.ts'; +import { redrawOnlyDecision, readPublishedSun } from './prepare-authored.ts'; // A published copy of Iapetus whose recipes match the working tree, so only the feature record's left edge can decide. async function publishedIapetus(publishedEdge: number) { diff --git a/site/build/prepare/prepare-catalog.mts b/site/build/prepare/prepare-catalog.mts index 0e3cfdc0aeb..20e2223c6b7 100644 --- a/site/build/prepare/prepare-catalog.mts +++ b/site/build/prepare/prepare-catalog.mts @@ -13,7 +13,7 @@ import { prepareSceneDistance } from '@cssearth/bake/navigation'; import { prepareObjectDiscovery } from './prepare-object-discovery.mts'; import { BODIES, M_PER_PC, STAR_IDS, starAstrometry } from '@cssearth/astronomy'; -import { assetOrigin } from '../../asset-origin.mts'; +import { assetOrigin } from '../../server-assets/asset-origin.mts'; import { readInventory } from '@cssearth/objects/node'; const root = resolve(import.meta.dirname, '../../..'); diff --git a/site/build/prepare/prepare-context-availability.mts b/site/build/prepare/prepare-context-availability.mts index 093affa3639..c3d22b84a5e 100644 --- a/site/build/prepare/prepare-context-availability.mts +++ b/site/build/prepare/prepare-context-availability.mts @@ -7,7 +7,7 @@ import { readVolumeDatasetBank } from '@cssearth/objects/node'; import { lineageSource } from '@cssearth/objects/provenance'; import type { ContextAvailability } from '@cssearth/objects/provenance'; import { sourceArray, sourceObject } from '@cssearth/objects/sources'; -import { parsePreparedVolumePresentation } from '../../volume-presentation.mts'; +import { parsePreparedVolumePresentation } from '../../content/volume-presentation.mts'; import { readContextObjects } from '@cssearth/objects/node'; import { hasErrorCode } from '@cssearth/core'; import { requireInventory } from '@cssearth/objects/node'; diff --git a/site/build/prepare/prepare-context-availability.test.mts b/site/build/prepare/prepare-context-availability.test.mts index d5e1b9fe8e4..80398f48435 100644 --- a/site/build/prepare/prepare-context-availability.test.mts +++ b/site/build/prepare/prepare-context-availability.test.mts @@ -4,9 +4,9 @@ const test = sourceTest(); import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; -import { inspectContextAvailability, prepareContextAvailability } from '../build/prepare/prepare-context-availability.mts'; +import { inspectContextAvailability, prepareContextAvailability } from './prepare-context-availability.mts'; import { parseContextAvailability } from '@cssearth/objects/provenance'; -import { writeContextPackage } from './fixtures/context-package.mts'; +import { writeContextPackage } from '../fixtures/context-package.mts'; test('a missing bank isolates one object; restoring it admits the complete package on the next startup', async t => { const root = await mkdtemp(resolve(tmpdir(), 'cssearth-availability-')); t.after(() => rm(root, { recursive: true, force: true })); diff --git a/site/build/prepare/prepare-feature-index.mts b/site/build/prepare/prepare-feature-index.mts index 4a5c838991e..e2d5956fe12 100644 --- a/site/build/prepare/prepare-feature-index.mts +++ b/site/build/prepare/prepare-feature-index.mts @@ -3,7 +3,7 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import { isRecord } from '@cssearth/core'; import { normalizeDestinationQuery, readDestinationSettlements, readFeatureSearchCatalog, readRuntimeFeatureDatasets, readPreparedFeaturePins } from '@cssearth/objects'; -import { resolveBuildSceneAddress } from '../../asset-origin.mts'; +import { resolveBuildSceneAddress } from '../../server-assets/asset-origin.mts'; import { readPreparedObjects } from '@cssearth/objects/node'; const SCENE_OBJECTS = readPreparedObjects(resolve(import.meta.dirname, '../../..')).sceneObjects; diff --git a/site/build/prepare/prepare-interior-fills.mts b/site/build/prepare/prepare-interior-fills.mts index ead0903b208..0928dcca7a0 100644 --- a/site/build/prepare/prepare-interior-fills.mts +++ b/site/build/prepare/prepare-interior-fills.mts @@ -8,7 +8,7 @@ import { pathToFileURL } from 'node:url'; import { chromium } from 'playwright'; import { preparePresentationBindings } from '@cssearth/bake/prepared-presentation'; -import { objectPageStyles } from '../../object-page-contract.mts'; +import { objectPageStyles } from '../../contracts/object-page-contract.mts'; import { repinObjectJson } from '@cssearth/bake/contract'; import { readPreparedObjects } from '@cssearth/objects/node'; diff --git a/site/build/prepare/prepare-object-discovery.mts b/site/build/prepare/prepare-object-discovery.mts index 50c140139b2..d1ea0cee34e 100644 --- a/site/build/prepare/prepare-object-discovery.mts +++ b/site/build/prepare/prepare-object-discovery.mts @@ -3,7 +3,7 @@ import { basename, resolve, sep } from 'node:path'; import { hasErrorCode, isRecord } from '@cssearth/core'; import { readShapeModelDiscovery, readRasterDiscovery, readRuntimeCamera, readRuntimeCameraPrefix, parseObjectDescriptor, readObjectContentDatasets, requireCamera, parseArrivalView, parseArrivalBillboard, type CameraPlan, type ObjectDiscovery } from '@cssearth/objects'; import { preparedDefaultViewRotation } from '@cssearth/engine'; -import { resolveBuildSceneAddress } from '../../asset-origin.mts'; +import { resolveBuildSceneAddress } from '../../server-assets/asset-origin.mts'; /** Authored exceptions describe illustrative datasets, not a permanent body blacklist. */ export function discoveryPolicy(value: unknown) { diff --git a/site/build/prepare/prepare-object-json.mts b/site/build/prepare/prepare-object-json.mts index 1f4d49619cd..4566433a14d 100644 --- a/site/build/prepare/prepare-object-json.mts +++ b/site/build/prepare/prepare-object-json.mts @@ -26,7 +26,7 @@ import { basename, resolve, sep } from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import { authoredObject } from '@cssearth/bake/sources'; import { preparePresentationBindings, withImageSizes } from '@cssearth/bake/prepared-presentation'; -import { objectPageStyles } from '../../object-page-contract.mts'; +import { objectPageStyles } from '../../contracts/object-page-contract.mts'; import { readPreparedObjects } from '@cssearth/objects/node'; const SCENE_OBJECTS = readPreparedObjects(resolve(import.meta.dirname, '../../..')).sceneObjects; diff --git a/site/build/prepare/prepare-object-json.test.mts b/site/build/prepare/prepare-object-json.test.mts index e57cb52c5eb..331870f83dc 100644 --- a/site/build/prepare/prepare-object-json.test.mts +++ b/site/build/prepare/prepare-object-json.test.mts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { refuseStaleKeptBindings } from '../build/prepare/prepare-object-json.mts'; +import { refuseStaleKeptBindings } from './prepare-object-json.mts'; test('--keep-bindings refuses when the solved system transform moved', () => { // A body outside any solved lane (world-context focus, or a lane with nothing to solve) carries no system transform. diff --git a/site/build/prepare/prepare-sidebar-thumbnails.mts b/site/build/prepare/prepare-sidebar-thumbnails.mts index 152fce6fd0b..020c5086dc8 100644 --- a/site/build/prepare/prepare-sidebar-thumbnails.mts +++ b/site/build/prepare/prepare-sidebar-thumbnails.mts @@ -3,7 +3,7 @@ import { parseObjectDescriptor } from '@cssearth/objects'; import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import sharp from 'sharp'; -import { parseDatasetControl } from '../../prepared-panel-content.mts'; +import { parseDatasetControl } from '../../content/prepared-panel-content.mts'; import { sourceArray, sourceId, sourceObject, sourcePath, sourceText } from '@cssearth/objects/sources'; import { hasErrorCode } from '@cssearth/core'; import { objectThumbnail } from '@cssearth/bake/site-assets'; diff --git a/site/build/prepare/prepare-spatial-context.test.mts b/site/build/prepare/prepare-spatial-context.test.mts index 572bb6bef21..e6a69b580d1 100644 --- a/site/build/prepare/prepare-spatial-context.test.mts +++ b/site/build/prepare/prepare-spatial-context.test.mts @@ -10,12 +10,12 @@ import { SCENE_SATELLITE_IDS, SMALL_BODY_IDS, asteroidPositionKm, COMET_IDS, com import type { SmallBodyId, CometId, BodyId, DwarfPlanetId, Vsop87BodyKey, StarId, HostedPlanetId } from '@cssearth/astronomy'; import { readCatalog } from '@cssearth/objects/node'; import { prepareSceneDistance } from '@cssearth/bake/navigation'; -import { parseSpatialContextCommand, prepareSpatialContext, worldFilesRoot } from '../build/prepare/prepare-spatial-context.ts'; +import { parseSpatialContextCommand, prepareSpatialContext, worldFilesRoot } from './prepare-spatial-context.ts'; const root = process.cwd(); const sourcePath = resolve(root, 'src/objects/observable-universe/source/navigation/universe.json'); const solarGeometryPath = resolve(root, 'src/platform/solar-geometry.mts'); -const contextEntries = (await readCatalog(resolve(import.meta.dirname, '../../src/objects'), prepareSceneDistance)).filter(body => body.context && body.id !== 'sun') +const contextEntries = (await readCatalog(resolve(import.meta.dirname, '../../../src/objects'), prepareSceneDistance)).filter(body => body.context && body.id !== 'sun') .sort((a, b) => (a.context!.order ?? Number.MAX_SAFE_INTEGER) - (b.context!.order ?? Number.MAX_SAFE_INTEGER) || a.id.localeCompare(b.id, 'en')); test("the command names no path: the world's source and full context are the root object's, in the objects folder it is given", () => { diff --git a/site/build/prepare/prepare-spatial-context.ts b/site/build/prepare/prepare-spatial-context.ts index ba70646d94f..4b77eee3034 100644 --- a/site/build/prepare/prepare-spatial-context.ts +++ b/site/build/prepare/prepare-spatial-context.ts @@ -137,7 +137,7 @@ export async function prepareSpatialContext(options: SpatialContextPreparationOp // A planet of another star closes its orbit. A star on a hosted orbit (an S-star around Sgr A*) draws the half-orbit trail a // comet does: dozens of eccentric ellipses around one host read as a tangle, their recent paths as motion. const hostedIds = new Set(HOSTED_PLANET_IDS), hostedStarIds = new Set(HOSTED_PLANET_IDS.filter(id => !(EXOPLANET_IDS as readonly string[]).includes(id))); - const { SYSTEM_FRAMING_MIN_MOON_RADIUS_SHARE, SYSTEM_FRAMING_ANGLES } = await import(pathToFileURL(resolve(process.cwd(), 'site/runtime-policy.mts')).href) as { + const { SYSTEM_FRAMING_MIN_MOON_RADIUS_SHARE, SYSTEM_FRAMING_ANGLES } = await import(pathToFileURL(resolve(process.cwd(), 'site/browser/runtime-policy.mts')).href) as { SYSTEM_FRAMING_MIN_MOON_RADIUS_SHARE: number; SYSTEM_FRAMING_ANGLES: { readonly elevationsDegrees: readonly number[]; readonly azimuthStepDegrees: number }; }; diff --git a/site/build/prepare/prepare-text.mts b/site/build/prepare/prepare-text.mts index bc47204f75e..27a2e744110 100644 --- a/site/build/prepare/prepare-text.mts +++ b/site/build/prepare/prepare-text.mts @@ -3,9 +3,9 @@ import { pathToFileURL } from 'node:url'; import assert from 'node:assert/strict'; import { readFile } from 'node:fs/promises'; import { resolve } from 'node:path'; -import { datasetContributors } from '../../dataset-context.mts'; -import { catalogueTextWarnings, compositionWarnings, readerTextErrors, readerTextWarnings } from '../../object-text.mts'; -import type { TextContext, TextFinding } from '../../object-text.mts'; +import { datasetContributors } from '../../content/dataset-context.mts'; +import { catalogueTextWarnings, compositionWarnings, readerTextErrors, readerTextWarnings } from '../../content/object-text.mts'; +import type { TextContext, TextFinding } from '../../content/object-text.mts'; import { bodyLineage } from '@cssearth/bake/objects/lineage'; import { parsePreparedExploration } from '@cssearth/objects/provenance'; import { sourceResolver } from '@cssearth/objects/sources'; diff --git a/site/build/prepare/prepare-text.test.mts b/site/build/prepare/prepare-text.test.mts index 755f0900fe5..738326bad8a 100644 --- a/site/build/prepare/prepare-text.test.mts +++ b/site/build/prepare/prepare-text.test.mts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { prepareText, reviewWarnings } from '../build/prepare/prepare-text.mts'; +import { prepareText, reviewWarnings } from './prepare-text.mts'; test('every registered object has publishable reader text, and its published copies are current', async () => { const { objects, composition } = await prepareText({ check: true }); diff --git a/site/build/prepare/prepare-volume-presentation.mts b/site/build/prepare/prepare-volume-presentation.mts index edf76eb44ad..7967dd3a788 100644 --- a/site/build/prepare/prepare-volume-presentation.mts +++ b/site/build/prepare/prepare-volume-presentation.mts @@ -7,9 +7,9 @@ import { dirname, resolve } from 'node:path'; import { pathToFileURL } from 'node:url'; import sharp from 'sharp'; -import type { Dataset } from '../../object-shell-types.ts'; -import { validateDatasetText } from '../../dataset-content.mts'; -import { parsePreparedVolumePresentation } from '../../volume-presentation.mts'; +import type { Dataset } from '../../contracts/object-shell-types.ts'; +import { validateDatasetText } from '../../content/dataset-content.mts'; +import { parsePreparedVolumePresentation } from '../../content/volume-presentation.mts'; import { checkLineage, lineageSource } from '@cssearth/objects/provenance'; import type { ObjectLineage } from '@cssearth/objects/provenance'; import { sourceArray, sourceId, sourceObject, sourcePath, sourceText, sourceUnique, sourceUrl } from '@cssearth/objects/sources'; @@ -21,7 +21,7 @@ import { composeSkyBandPng, verifySkyBandRecipe } from '@cssearth/telescope-cli/ import { RUNTIME_ASSET_ORIGIN, fetchWithRetry, sourceCacheUrl } from '@cssearth/bake/objects/sources'; import { DECORATIVE_WEBP } from '@cssearth/bake/raster'; -export const volumePresentationCompilerClosure = ['site/build/prepare/prepare-volume-presentation.mts', 'site/dataset-content.mts', 'packages/bake/src/sources/context-source-records.ts', +export const volumePresentationCompilerClosure = ['site/build/prepare/prepare-volume-presentation.mts', 'site/content/dataset-content.mts', 'packages/bake/src/sources/context-source-records.ts', 'packages/objects/src/prepared-data/source/volume-source-manifest.ts', 'packages/objects/src/prepared-data/source/volume-presentation-source.ts', 'packages/telescope-cli/src/sky/sky-band-composite.mts', 'packages/bake/src/objects/raster/wise-atlas-mosaic.ts', 'packages/bake/src/objects/color/color-transfer.ts', 'packages/fits/src/fits.ts', 'packages/fits/src/node/file.ts', 'packages/bake/src/raster/lossy-lane.ts'] as const; diff --git a/site/build/prepare/refresh-charts.test.mts b/site/build/prepare/refresh-charts.test.mts index 4ec23a4a8f8..3b08a40aad3 100644 --- a/site/build/prepare/refresh-charts.test.mts +++ b/site/build/prepare/refresh-charts.test.mts @@ -4,7 +4,7 @@ import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { sha256 } from '@cssearth/core/node'; -import { refreshObjectCharts } from '../build/prepare/refresh-charts.mts'; +import { refreshObjectCharts } from './refresh-charts.mts'; test('partial refresh changes only chart bytes and sizes; refuses local content edits', async () => { const root = await mkdtemp(resolve(tmpdir(), 'chart-refresh-test-')); diff --git a/site/build/prepare/refresh-source-icons.mts b/site/build/prepare/refresh-source-icons.mts index a7d09f69d23..a0eabd13348 100644 --- a/site/build/prepare/refresh-source-icons.mts +++ b/site/build/prepare/refresh-source-icons.mts @@ -9,7 +9,7 @@ import { readFile, writeFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import { projectRoot } from '@cssearth/core/node'; import { parseSourceCredits } from '@cssearth/objects/provenance'; -import { parseSourceIcons, type SourceIcon } from '../../source-icons.mts'; +import { parseSourceIcons, type SourceIcon } from '../../content/source-icons.mts'; const TIMEOUT_MS = 20_000; const HEADERS = { 'user-agent': 'Mozilla/5.0 (compatible; cssEarth source icons; +https://css.earth)', accept: '*/*' }; diff --git a/site/build/prepare/setup-assets.test.mts b/site/build/prepare/setup-assets.test.mts index 2f0c4fd17cd..3158e124459 100644 --- a/site/build/prepare/setup-assets.test.mts +++ b/site/build/prepare/setup-assets.test.mts @@ -7,8 +7,8 @@ import { join, resolve } from "node:path"; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import { installRuntimeAssets, readAllowMissingFlag } from "@cssearth/bake/asset-publication"; -import { inspectContextAvailability } from "../build/prepare/prepare-context-availability.mts"; -import { writeContextPackage } from "./fixtures/context-package.mts"; +import { inspectContextAvailability } from "./prepare-context-availability.mts"; +import { writeContextPackage } from "../fixtures/context-package.mts"; /** Retries are asserted by count, not by waiting out the real backoff. */ const noWait = async () => {}; diff --git a/site/build/prepare/system-packages.mts b/site/build/prepare/system-packages.mts index b4728c4e741..4483dc524f6 100644 --- a/site/build/prepare/system-packages.mts +++ b/site/build/prepare/system-packages.mts @@ -18,7 +18,7 @@ import { resolve } from 'node:path'; import { SCENE_OBJECTS } from '../../objects.mts'; import { allPlanetarySystems, SOLAR_SYSTEM_ID } from '../../object-systems.mts'; import { allSatelliteSystems } from '../../satellite-systems.mts'; -import { systemObjectId } from '../../navigation/system-address.mts'; +import { systemObjectId } from '../../model/system-address.mts'; import { readSourceCatalog } from '@cssearth/bake/sources'; import { prepareSystemIntroductions } from './system-text.mts'; import { APPLICATION_WORLD_CONTEXT } from '../../world-context-plan.mts'; diff --git a/site/build/prepare/system-text.mts b/site/build/prepare/system-text.mts index a0d40de18e7..a68f419f2e2 100644 --- a/site/build/prepare/system-text.mts +++ b/site/build/prepare/system-text.mts @@ -1,6 +1,6 @@ import { parseCitedText, readSystemText } from '@cssearth/objects'; import { sourceId, sourceObject } from '@cssearth/objects/sources'; -import { textBlockBudgetErrors } from '../../object-text.mts'; +import { textBlockBudgetErrors } from '../../content/object-text.mts'; /** Prepare short, cited system introductions: each becomes its system object's description (system-packages.mts). */ export function prepareSystemIntroductions(input: unknown, hosts: readonly string[], catalogue: ReadonlySet) { diff --git a/site/build/prepared-motion-css.test.mts b/site/build/prepared-motion-css.test.mts index 90449ea993c..26cf1527da2 100644 --- a/site/build/prepared-motion-css.test.mts +++ b/site/build/prepared-motion-css.test.mts @@ -4,7 +4,7 @@ import { readFile, readdir } from 'node:fs/promises'; import { resolve } from 'node:path'; import { preprocessCSS, resolveConfig } from 'vite'; import { isRecord } from '@cssearth/core'; -import { preparedMotionCss } from '../build/prepared-motion-css.mts'; +import { preparedMotionCss } from './prepared-motion-css.mts'; const root = resolve(import.meta.dirname, '../..'); const config = await resolveConfig({ root, configFile: false, css: { postcss: { plugins: [preparedMotionCss(root)] } } }, 'build'); diff --git a/site/build/restore-inputs.test.mts b/site/build/restore-inputs.test.mts index af9b790e7e2..c45b5df7f5e 100644 --- a/site/build/restore-inputs.test.mts +++ b/site/build/restore-inputs.test.mts @@ -6,7 +6,7 @@ import { copyFile, mkdir, mkdtemp, readFile, realpath, rm, symlink, writeFile } import { tmpdir } from 'node:os'; import { relative, resolve } from 'node:path'; import test, { type TestContext } from 'node:test'; -import { validateObjectPackageFiles } from '../build/object-package-contract.mts'; +import { validateObjectPackageFiles } from './object-package-contract.mts'; import { requireArray, requireRecord, requireString } from '@cssearth/core'; import { parseAcquisitionPlan } from '@cssearth/bake/objects/acquisition'; import { sourceFormatProblem } from '@cssearth/bake/objects/sources'; @@ -21,7 +21,7 @@ const json = (path: string, value: unknown): Promise => writeFile(path, JS async function fixture(t: TestContext, id = 'titan'): Promise { const root = await mkdtemp(resolve(tmpdir(), 'cssearth-restore-')); t.after(() => rm(root, { recursive: true, force: true })); - for (const dir of ['packages/bake/cli', 'site', `src/objects/${id}/source/preparation`, `src/objects/${id}/prepared`, `public/scenes/${id}`]) { + for (const dir of ['packages/bake/cli', 'site/directory', `src/objects/${id}/source/preparation`, `src/objects/${id}/prepared`, `public/scenes/${id}`]) { await mkdir(resolve(root, dir), { recursive: true }); } await writeRestore(root); diff --git a/site/build/run-script-chain.test.mts b/site/build/run-script-chain.test.mts index 8aea448fd04..dd786789724 100644 --- a/site/build/run-script-chain.test.mts +++ b/site/build/run-script-chain.test.mts @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import { readFile } from 'node:fs/promises'; -import { expandScriptChain } from '../build/run-script-chain.mts'; +import { expandScriptChain } from './run-script-chain.mts'; test('aliases expand in place, depth first, and only plain node steps remain', () => { const scripts = { a: 'node one.mts && pnpm b && node four.mts', b: 'pnpm -s c && node three.mts', c: 'node two.mts --flag x' }; diff --git a/site/build/share-images.mts b/site/build/share-images.mts index 4e09b133bb2..54ae4ad7e57 100644 --- a/site/build/share-images.mts +++ b/site/build/share-images.mts @@ -7,7 +7,7 @@ import { resolve } from 'node:path'; import sharp from 'sharp'; import { SCENE_OBJECTS } from '../objects.mts'; import { billboardSocialImages } from '../social-images.mts'; -import { resolveBuildSceneAddress } from '../asset-origin.mts'; +import { resolveBuildSceneAddress } from '../server-assets/asset-origin.mts'; const root = resolve(import.meta.dirname, '../..'); const WIDTH = 1200, HEIGHT = 630; diff --git a/site/components/ContextNavigationMarker.astro b/site/components/ContextNavigationMarker.astro index 1c211e58c06..6b0e0b9c0db 100644 --- a/site/components/ContextNavigationMarker.astro +++ b/site/components/ContextNavigationMarker.astro @@ -1,5 +1,5 @@ --- -import { sidebarThumbnail } from '../sidebar-thumbnails.mts'; +import { sidebarThumbnail } from '../content/sidebar-thumbnails.mts'; interface Props { objectId: string; } const thumbnail = sidebarThumbnail(Astro.props.objectId); --- diff --git a/site/components/CssEarthWordmark.astro b/site/components/CssEarthWordmark.astro index 6d7d15e58a5..fa4588a94ac 100644 --- a/site/components/CssEarthWordmark.astro +++ b/site/components/CssEarthWordmark.astro @@ -1,5 +1,5 @@ --- -import "../wordmark.css"; +import "../layouts/wordmark.css"; --- diff --git a/site/components/DatasetContextPanels.astro b/site/components/DatasetContextPanels.astro index 3c4e451921b..299d8fe1ee9 100644 --- a/site/components/DatasetContextPanels.astro +++ b/site/components/DatasetContextPanels.astro @@ -1,11 +1,11 @@ --- -import type { Props as ShellProps } from '../object-shell-types'; +import type { Props as ShellProps } from '../contracts/object-shell-types'; interface Props { objectId: string; datasets?: Pick, 'controls' | 'defaultDataset'>; directSourceIdsByDataset?: Readonly>; } -import { datasetContributors } from '../dataset-context.mts'; +import { datasetContributors } from '../content/dataset-context.mts'; import { EXPLORATION } from '../exploration-catalog.mts'; import ObjectCard from './ObjectCard.astro'; import InformationTabs from './InformationTabs.astro'; diff --git a/site/components/DatasetDescription.astro b/site/components/DatasetDescription.astro index aa6f070cf2b..d0fc7ccee8b 100644 --- a/site/components/DatasetDescription.astro +++ b/site/components/DatasetDescription.astro @@ -1,7 +1,7 @@ --- -import type { Props as ShellProps } from '../object-shell-types'; +import type { Props as ShellProps } from '../contracts/object-shell-types'; interface Props { dataset: NonNullable['controls'][number]; } -import { validateDatasetText } from "../dataset-content.mts"; +import { validateDatasetText } from "../content/dataset-content.mts"; import SelectedContent from "./SelectedContent.astro"; const { dataset } = Astro.props; const { title } = validateDatasetText(dataset); diff --git a/site/components/DatasetLegend.astro b/site/components/DatasetLegend.astro index 6d204f1c504..6c13698df4a 100644 --- a/site/components/DatasetLegend.astro +++ b/site/components/DatasetLegend.astro @@ -1,5 +1,5 @@ --- -import type { Props as ShellProps } from '../object-shell-types'; +import type { Props as ShellProps } from '../contracts/object-shell-types'; interface Props { objectId: string; dataset: NonNullable['controls'][number]; /** The dataset this legend is shown under, when it is borrowed from another one; it keeps the element ids unique. */ owner?: string; } diff --git a/site/components/DatasetList.astro b/site/components/DatasetList.astro index b4afb887897..807bd3ea967 100644 --- a/site/components/DatasetList.astro +++ b/site/components/DatasetList.astro @@ -1,10 +1,10 @@ --- -import type { Props as ShellProps } from '../object-shell-types'; +import type { Props as ShellProps } from '../contracts/object-shell-types'; import DatasetLegend from './DatasetLegend.astro'; import DatasetThumbnail from './DatasetThumbnail.astro'; import DatasetDescription from './DatasetDescription.astro'; import SequencePlayer from './SequencePlayer.astro'; -import { sidebarThumbnail } from '../sidebar-thumbnails.mts'; +import { sidebarThumbnail } from '../content/sidebar-thumbnails.mts'; interface Props { objectId: string; datasets: Pick, 'controls' | 'defaultDataset'>; diff --git a/site/components/ObjectBreadcrumbs.astro b/site/components/ObjectBreadcrumbs.astro index c7101b8f81a..ef658d61806 100644 --- a/site/components/ObjectBreadcrumbs.astro +++ b/site/components/ObjectBreadcrumbs.astro @@ -2,7 +2,7 @@ import type { HTMLAttributes } from 'astro/types'; interface Props extends HTMLAttributes<'nav'> { objectId?: string; scope?: string; system?: boolean; includeObject?: boolean; currentPage?: boolean; } import { OBJECTS, ancestorsOf } from '../objects.mts'; -import { systemObjectId } from '../navigation/system-address.mts'; +import { systemObjectId } from '../model/system-address.mts'; const { objectId, scope, system = false, includeObject: requestedIncludeObject, currentPage: requestedCurrentPage, ...attributes } = Astro.props; diff --git a/site/components/ObjectCardHeader.astro b/site/components/ObjectCardHeader.astro index 7962d17ab28..9cfbd89430e 100644 --- a/site/components/ObjectCardHeader.astro +++ b/site/components/ObjectCardHeader.astro @@ -3,7 +3,7 @@ import { SCENE_OBJECTS } from '../objects.mts'; import { discoveryDescription, isDiscoveryAnchor, type ObjectTitle } from '@cssearth/objects'; import type { HTMLAttributes } from 'astro/types'; -import { wikipediaLearnMoreUrl } from '../learn-more.mts'; +import { wikipediaLearnMoreUrl } from '../content/learn-more.mts'; /** `heading` is the page heading by default; overview cards pass false so a * document keeps exactly one h1, the object's own title. */ interface Props extends Omit, 'title'> { title: ObjectTitle; introduction?: string; articleUrl?: string; heading?: boolean; objectId?: string } diff --git a/site/components/ObjectFactsheet.astro b/site/components/ObjectFactsheet.astro index 29806e00ddf..334530bd282 100644 --- a/site/components/ObjectFactsheet.astro +++ b/site/components/ObjectFactsheet.astro @@ -1,5 +1,5 @@ --- -import type { Props as ObjectProps } from "../object-shell-types"; +import type { Props as ObjectProps } from "../contracts/object-shell-types"; import { PREPARED_SHELL_ICONS } from "../prepared-shell-icons.mjs"; import { orderFacts } from "@cssearth/objects"; diff --git a/site/components/ObjectInformationPanel.astro b/site/components/ObjectInformationPanel.astro index b377f562d2a..1a0f9de307e 100644 --- a/site/components/ObjectInformationPanel.astro +++ b/site/components/ObjectInformationPanel.astro @@ -1,5 +1,5 @@ --- -import type { Props } from "../object-shell-types"; +import type { Props } from "../contracts/object-shell-types"; import ObjectBreadcrumbs from "./ObjectBreadcrumbs.astro"; import SystemCard from './SystemCard.astro'; import ObjectCard from "./ObjectCard.astro"; @@ -14,7 +14,7 @@ import DatasetList from "./DatasetList.astro"; import TreeDisclosure from './TreeDisclosure.astro'; import { readObjectArticleUrl } from '../server/object-article.mts'; import { OBJECTS } from '../objects.mts'; -import { systemObjectId } from '../navigation/system-address.mts'; +import { systemObjectId } from '../model/system-address.mts'; import ChildList from './ChildList.astro'; import { childrenOf } from '../object-children.mts'; const { objectId, title, introduction = "", facts = [], moreFacts = [], galleries = [], datasets } = Astro.props; diff --git a/site/components/ObjectPage.astro b/site/components/ObjectPage.astro index b01b5cf12a2..5a14208d8a2 100644 --- a/site/components/ObjectPage.astro +++ b/site/components/ObjectPage.astro @@ -3,12 +3,12 @@ import { requireObject } from '../objects.mts'; import ObjectLayout from '../layouts/ObjectLayout.astro'; import PreparedObjectHead from './PreparedObjectHead.astro'; import PreparedObjectPanel from './PreparedObjectPanel.astro'; -import { loadObjectPageData } from '../object-page-data.mts'; -import { objectPageStyles } from '../object-page-contract.mts'; +import { loadObjectPageData } from '../server/object-page-data.mts'; +import { objectPageStyles } from '../contracts/object-page-contract.mts'; import { objectPageCss } from '@cssearth/objects'; import shellCss from '../object-shell.css?inline'; import { loadPreparedSceneMarkup } from '../server/load-prepared-scene.mts'; -import { rewriteSceneCss, resolveSceneAddressesDeep, withPreparedAssetOrigin } from '../asset-origin.mts'; +import { rewriteSceneCss, resolveSceneAddressesDeep, withPreparedAssetOrigin } from '../server-assets/asset-origin.mts'; /** `objectId` owns the scene; `pageId` is what the page is: the object, or an object seen from inside that scene shows when it differs. */ interface Props { objectId: string; pageId?: string; navigation?: boolean; home?: boolean; } diff --git a/site/components/ObjectShell.astro b/site/components/ObjectShell.astro index e8ea5dd5918..34d8f717f67 100644 --- a/site/components/ObjectShell.astro +++ b/site/components/ObjectShell.astro @@ -1,7 +1,7 @@ --- -import { DIAGNOSTICS_ENABLED } from "../diagnostics-policy.mts"; +import { DIAGNOSTICS_ENABLED } from "../browser/diagnostics-policy.mts"; import ObjectInformationPanel from "./ObjectInformationPanel.astro"; -import type { Props } from "../object-shell-types"; +import type { Props } from "../contracts/object-shell-types"; import { SCENE_OBJECTS } from "../objects.mts"; import { PREPARED_SHELL_TITLES } from "../prepared-shell-titles.mjs"; import { requireObjectControls } from "@cssearth/objects"; diff --git a/site/components/PreparedObjectPanel.astro b/site/components/PreparedObjectPanel.astro index 8771f803d1b..4c5fa6c7272 100644 --- a/site/components/PreparedObjectPanel.astro +++ b/site/components/PreparedObjectPanel.astro @@ -2,7 +2,7 @@ import { parsePreparedText, authoredDatasetMetadata, parsePreparedPanelContent } from '@cssearth/objects'; import ObjectShell from "./ObjectShell.astro"; -import { parsePanelControls, uniformDatasetColors, withDatasetText } from '../prepared-panel-content.mts'; +import { parsePanelControls, uniformDatasetColors, withDatasetText } from '../content/prepared-panel-content.mts'; interface Props { navigation?: boolean; preparedContent: unknown; preparedControls: unknown; } const { preparedContent, preparedControls } = Astro.props; diff --git a/site/components/SequencePlayer.astro b/site/components/SequencePlayer.astro index d2c1c903d90..5b937af668a 100644 --- a/site/components/SequencePlayer.astro +++ b/site/components/SequencePlayer.astro @@ -1,5 +1,5 @@ --- -import type { Props as ShellProps } from '../object-shell-types'; +import type { Props as ShellProps } from '../contracts/object-shell-types'; import MaterialSymbol from './MaterialSymbol.astro'; type Control = NonNullable['controls'][number]; interface Props { diff --git a/site/content/object-text.test.mts b/site/content/object-text.test.mts index 548c814d0c7..a4a3b186600 100644 --- a/site/content/object-text.test.mts +++ b/site/content/object-text.test.mts @@ -2,7 +2,7 @@ import { OBJECT_TEXT_SCHEMA, parseObjectText } from '@cssearth/objects'; import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { compositionWarnings, readerTextErrors, readerTextWarnings } from '../object-text.mts'; +import { compositionWarnings, readerTextErrors, readerTextWarnings } from './object-text.mts'; const source = { catalogueId: 'nasa-saturn-facts', url: 'https://science.nasa.gov/saturn/facts/', label: 'NASA Science · Saturn facts', checked: '2026-09-13' }; const blocks = { diff --git a/site/content/prepared-panel-content.mts b/site/content/prepared-panel-content.mts index 378bed4ea5b..a72b0dfc24d 100644 --- a/site/content/prepared-panel-content.mts +++ b/site/content/prepared-panel-content.mts @@ -1,6 +1,6 @@ import { requireControls, preparedPanelReaders, type PreparedTitle, type Fact } from '@cssearth/objects'; const { object, text, number, optionalText, optionalBoolean, array } = preparedPanelReaders; -import type { Props, Dataset, DatasetControl, DatasetReaderText } from './object-shell-types.js'; +import type { Props, Dataset, DatasetControl, DatasetReaderText } from '../contracts/object-shell-types.js'; const stepOpens = (value: unknown) => { if (value !== 'first' && value !== 'last') throw new TypeError(`Prepared dataset step opens must be "first" or "last", not ${JSON.stringify(value)}.`); diff --git a/site/content/prepared-panel-content.test.mts b/site/content/prepared-panel-content.test.mts index 94c1d8fc40e..db9d20cab94 100644 --- a/site/content/prepared-panel-content.test.mts +++ b/site/content/prepared-panel-content.test.mts @@ -2,7 +2,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); import { readFile } from 'node:fs/promises'; -import { parsePanelControls } from '../prepared-panel-content.mts'; +import { parsePanelControls } from './prepared-panel-content.mts'; import { parsePreparedPanelContent } from '@cssearth/objects'; type PanelContentInput = { schema: string; title: { label: unknown }; facts: { value: unknown }[] }; diff --git a/site/content/sidebar-thumbnails.mts b/site/content/sidebar-thumbnails.mts index 4efd4752f34..1ab3ca30582 100644 --- a/site/content/sidebar-thumbnails.mts +++ b/site/content/sidebar-thumbnails.mts @@ -1,4 +1,4 @@ -import manifest from '../public/navigation/sidebar-thumbnails.json' with { type: 'json' }; +import manifest from '../../public/navigation/sidebar-thumbnails.json' with { type: 'json' }; import { sourceObject, sourceText } from '@cssearth/objects/sources'; const data = sourceObject(manifest); diff --git a/site/content/volume-presentation.test.mts b/site/content/volume-presentation.test.mts index 2c2d7856034..52645038fbf 100644 --- a/site/content/volume-presentation.test.mts +++ b/site/content/volume-presentation.test.mts @@ -1,7 +1,7 @@ import assert from 'node:assert/strict'; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { parsePreparedVolumePresentation } from '../volume-presentation.mts'; +import { parsePreparedVolumePresentation } from './volume-presentation.mts'; const ids = ['optical', 'infrared']; const bank = { id: 'nebula', defaultDataset: 'optical', datasets: ids.map(id => ({ id })) }; diff --git a/site/contracts/prepared-presentation-bindings.test.mts b/site/contracts/prepared-presentation-bindings.test.mts index 7da45696cbb..9db3c61038d 100644 --- a/site/contracts/prepared-presentation-bindings.test.mts +++ b/site/contracts/prepared-presentation-bindings.test.mts @@ -8,7 +8,7 @@ import { fileURLToPath } from 'node:url'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { preparePresentationBindings } from '@cssearth/bake/prepared-presentation'; -import { objectPageStyles } from '../object-page-contract.mts'; +import { objectPageStyles } from './object-page-contract.mts'; import { requireObjectRuntimeDefinition } from '@cssearth/bake/contract'; import type { PresentationSource } from '@cssearth/bake/prepared-presentation'; diff --git a/site/directory/fixtures/objects.mts b/site/directory/fixtures/objects.mts index 65b968da736..f351eabef48 100644 --- a/site/directory/fixtures/objects.mts +++ b/site/directory/fixtures/objects.mts @@ -1,7 +1,7 @@ import { type PreparedCubicSkyPlan, type PreparedDirectionalSunPlan, parsePreparedObjectRuntime, validatePreparedCubicSky, validateDirectionalSunPlan } from '@cssearth/objects'; -import {parseSaturnScene,parseSaturnViews,parseSaturnDatasets,parseSaturnLayouts} from './saturn-prepared.mts'; -import {parseTitle,parsePanel,parseContent} from './prepared-schemas.mts'; +import {parseSaturnScene,parseSaturnViews,parseSaturnDatasets,parseSaturnLayouts} from '../../world/fixtures/saturn-prepared.mts'; +import {parseTitle,parsePanel,parseContent} from '../../world/fixtures/prepared-schemas.mts'; import {requireObjectRuntimeDefinition} from '@cssearth/bake/contract'; import { readFile } from 'node:fs/promises'; diff --git a/site/directory/object-entry-types.mts b/site/directory/object-entry-types.mts index c0a67344496..a83626513ea 100644 --- a/site/directory/object-entry-types.mts +++ b/site/directory/object-entry-types.mts @@ -1,5 +1,5 @@ import type { CatalogEntry as RegistryCatalogEntry, NavigableObject as RegistryNavigableObject, ObjectEntry as RegistryObjectEntry } from '@cssearth/objects'; -import type { SceneFactory } from './browser/browser-types.mts'; +import type { SceneFactory } from '../browser/browser-types.mts'; /** The shared registry types, bound to the shell's scene loader and its abort signal. */ export type ObjectEntry = RegistryObjectEntry; diff --git a/site/directory/startup-requests.test.mts b/site/directory/startup-requests.test.mts index f3f41964cf9..54a80c1b46f 100644 --- a/site/directory/startup-requests.test.mts +++ b/site/directory/startup-requests.test.mts @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import { startStartupRequests, startupFetch, startupRequestsBootstrap, releaseStartupRequests } from '../startup-requests.mts'; +import { startStartupRequests, startupFetch, startupRequestsBootstrap, releaseStartupRequests } from './startup-requests.mts'; function withPage(href: string, run: (fetched: string[]) => Promise) { const fetched: string[] = []; diff --git a/site/inside-view.mts b/site/inside-view.mts index be3816678cb..ab665c759b2 100644 --- a/site/inside-view.mts +++ b/site/inside-view.mts @@ -2,7 +2,7 @@ import { isRecord } from '@cssearth/core'; import { knownAncestors, knownObject, loadAncestors, loadObject } from './object-directory.mts'; import { SOLAR_SYSTEM_ID } from './object-systems.mts'; import { starSystem, subjectHost, subjectView, type SceneSubject } from './scene/scene-subject.mts'; -import { systemHostId } from './navigation/system-address.mts'; +import { systemHostId } from './model/system-address.mts'; import type { ZoomStep } from './zoom-scope.mts'; /** An object the view hands over to as the camera backs out of something inside it (the Milky Way) is seen from inside: its diff --git a/site/journeys/manifest-entries.json b/site/journeys/manifest-entries.json index 7ddeed4ea60..bdb87e48176 100644 --- a/site/journeys/manifest-entries.json +++ b/site/journeys/manifest-entries.json @@ -897,7 +897,7 @@ { "id": "control:site:native-input:div:markup:1", "kind": "control", - "source": "site/native-input.mts:87", + "source": "site/browser/native-input.mts:87", "tag": "div", "selector": "[role=\"group\"]", "markup": "
" @@ -905,7 +905,7 @@ { "id": "control:site:native-input:span:markup:1", "kind": "control", - "source": "site/native-input.mts:87", + "source": "site/browser/native-input.mts:87", "tag": "span", "selector": ".native-zoom-start", "markup": "" @@ -913,7 +913,7 @@ { "id": "control:site:native-view-forms:input:input:1", "kind": "control", - "source": "site/native-view-forms.mts:17", + "source": "site/shell/native-view-forms.mts:17", "tag": "input", "selector": "input" }, @@ -1713,7 +1713,7 @@ { "id": "handler:site:arrival-billboard:prepareArrivalBillboard:abort:1", "kind": "handler", - "source": "site/arrival-billboard.mts:61", + "source": "site/navigation/arrival-billboard.mts:61", "eventTypes": [ "abort" ], @@ -1731,7 +1731,7 @@ { "id": "handler:site:chart-pixel-alignment:createChartPixelAlignmentController:chartchange:1", "kind": "handler", - "source": "site/chart-pixel-alignment.mts:47", + "source": "site/shell/chart-pixel-alignment.mts:47", "eventTypes": [ "chartchange" ], @@ -1740,7 +1740,7 @@ { "id": "handler:site:chart-pixel-alignment:createChartPixelAlignmentController:load:1", "kind": "handler", - "source": "site/chart-pixel-alignment.mts:45", + "source": "site/shell/chart-pixel-alignment.mts:45", "eventTypes": [ "load" ], @@ -1749,7 +1749,7 @@ { "id": "handler:site:chart-pixel-alignment:createChartPixelAlignmentController:resize:1", "kind": "handler", - "source": "site/chart-pixel-alignment.mts:48", + "source": "site/shell/chart-pixel-alignment.mts:48", "eventTypes": [ "resize" ], @@ -1758,7 +1758,7 @@ { "id": "handler:site:dataset-picker:bindDatasetPicker:change:1", "kind": "handler", - "source": "site/dataset-picker.mts:18", + "source": "site/shell/dataset-picker.mts:18", "eventTypes": [ "change" ], @@ -1767,7 +1767,7 @@ { "id": "handler:site:dataset-picker:mountDatasetPickerLayout:change:1", "kind": "handler", - "source": "site/dataset-picker.mts:34", + "source": "site/shell/dataset-picker.mts:34", "eventTypes": [ "change" ], @@ -1830,13 +1830,13 @@ { "id": "handler:site:error-report:errorReportBootstrap:embedded:error:1", "kind": "handler", - "source": "site/error-report.mts:18", + "source": "site/startup/error-report.mts:18", "mechanism": "embedded-script" }, { "id": "handler:site:error-report:errorReportBootstrap:embedded:unhandledrejection:1", "kind": "handler", - "source": "site/error-report.mts:19", + "source": "site/startup/error-report.mts:19", "mechanism": "embedded-script" }, { @@ -1851,7 +1851,7 @@ { "id": "handler:site:information-card:createPanelController:toggle:1", "kind": "handler", - "source": "site/information-card.mts:96", + "source": "site/shell/information-card.mts:96", "eventTypes": [ "toggle" ], @@ -1860,7 +1860,7 @@ { "id": "handler:site:layout-sections:mountLayoutSections:change:1", "kind": "handler", - "source": "site/layout-sections.mts:15", + "source": "site/shell/layout-sections.mts:15", "eventTypes": [ "change" ], @@ -1878,7 +1878,7 @@ { "id": "handler:site:native-view-forms:bindNativeViewForms:submit:1", "kind": "handler", - "source": "site/native-view-forms.mts:28", + "source": "site/shell/native-view-forms.mts:28", "eventTypes": [ "submit" ], @@ -2239,7 +2239,7 @@ { "id": "handler:site:prepared-scene-ownership:createPreparedSceneOwnership:abort:1", "kind": "handler", - "source": "site/prepared-scene-ownership.mts:15", + "source": "site/navigation/prepared-scene-ownership.mts:15", "eventTypes": [ "abort" ], @@ -2248,7 +2248,7 @@ { "id": "handler:site:prepared-scene-ownership:createPreparedSceneOwnership:abort:2", "kind": "handler", - "source": "site/prepared-scene-ownership.mts:30", + "source": "site/navigation/prepared-scene-ownership.mts:30", "eventTypes": [ "abort" ], @@ -2276,7 +2276,7 @@ { "id": "handler:site:runtime-policy:bindResponsiveOrbitPolicy:change:1", "kind": "handler", - "source": "site/runtime-policy.mts:209", + "source": "site/browser/runtime-policy.mts:209", "eventTypes": [ "change" ], @@ -2584,7 +2584,7 @@ { "id": "handler:site:tab-panels:bindTabPanels:change:1", "kind": "handler", - "source": "site/tab-panels.mts:36", + "source": "site/shell/tab-panels.mts:36", "eventTypes": [ "change" ], @@ -2593,7 +2593,7 @@ { "id": "handler:site:tab-panels:bindTabPanels:change:2", "kind": "handler", - "source": "site/tab-panels.mts:37", + "source": "site/shell/tab-panels.mts:37", "eventTypes": [ "change" ], @@ -2629,7 +2629,7 @@ { "id": "handler:site:view-url-runtime:bindViewUrl:objectmotionchange:1", "kind": "handler", - "source": "site/view-url-runtime.mts:86", + "source": "site/navigation/view-url-runtime.mts:86", "eventTypes": [ "objectmotionchange" ], @@ -2638,7 +2638,7 @@ { "id": "handler:site:world-viewport:stageSized:abort:1", "kind": "handler", - "source": "site/world-viewport.mts:27", + "source": "site/world/world-viewport.mts:27", "eventTypes": [ "abort" ], diff --git a/site/journeys/seo-discovery.test.mts b/site/journeys/seo-discovery.test.mts index 22825a4023d..a0edc8a312c 100644 --- a/site/journeys/seo-discovery.test.mts +++ b/site/journeys/seo-discovery.test.mts @@ -1,7 +1,7 @@ import assert from "node:assert/strict"; import { sourceTest } from '@cssearth/objects/node/source-test'; const test = sourceTest(); -import { assertHomepageReachability } from "./seo-discovery.mts"; +import { assertHomepageReachability } from "./seo-discovery.test-support.mts"; const home = "http://127.0.0.1:4267/"; const page = (route: string, links: string[]) => ({ url: new URL(route, home).href, links }); diff --git a/site/journeys/unreachable.json b/site/journeys/unreachable.json index 4b1d76cebc9..b1393dac015 100644 --- a/site/journeys/unreachable.json +++ b/site/journeys/unreachable.json @@ -44,12 +44,12 @@ { "id": "handler:site:error-report:errorReportBootstrap:embedded:error:1", "reason": "Production-host guard returns before either listener is bound on authorized localhost; production traffic and hostname spoofing are outside this run.", - "evidence": "site/error-report.mts:8-9 allow only css.earth/www.css.earth and return before addEventListener at lines 18-20; all runner previews use loopback hostnames." + "evidence": "site/startup/error-report.mts:8-9 allow only css.earth/www.css.earth and return before addEventListener at lines 18-20; all runner previews use loopback hostnames." }, { "id": "handler:site:error-report:errorReportBootstrap:embedded:unhandledrejection:1", "reason": "Production-host guard returns before either listener is bound on authorized localhost; production traffic and hostname spoofing are outside this run.", - "evidence": "site/error-report.mts:8-9 allow only css.earth/www.css.earth and return before addEventListener at lines 18-20; all runner previews use loopback hostnames." + "evidence": "site/startup/error-report.mts:8-9 allow only css.earth/www.css.earth and return before addEventListener at lines 18-20; all runner previews use loopback hostnames." }, { "id": "handler:site:application-world-context:createApplicationWorldContext:abort:1", diff --git a/site/layouts/ObjectLayout.astro b/site/layouts/ObjectLayout.astro index 621c3fdb4c6..7b7477a6d5f 100644 --- a/site/layouts/ObjectLayout.astro +++ b/site/layouts/ObjectLayout.astro @@ -2,14 +2,14 @@ import { worldPlaceOf, worldStartupFiles } from '../world-places.mts'; import { informationTabStyles } from '../server/information-tab-styles.mts'; import ObjectSwatchStyles from "../components/ObjectSwatchStyles.astro"; -import { webAnalyticsBootstrap } from "../web-analytics.mts"; -import { errorReportBootstrap } from "../error-report.mts"; -import { initialShellContextBootstrap } from '../initial-shell-context.mts'; -import { startupRequestsBootstrap } from '../startup-requests.mts'; -import { defaultDatasetBank } from '../object-page-data.mts'; +import { webAnalyticsBootstrap } from "../startup/web-analytics.mts"; +import { errorReportBootstrap } from "../startup/error-report.mts"; +import { initialShellContextBootstrap } from '../startup/initial-shell-context.mts'; +import { startupRequestsBootstrap } from '../directory/startup-requests.mts'; +import { defaultDatasetBank } from '../server/object-page-data.mts'; import contextBankAssets from '../prepared-context-bank-assets.json'; import { SYSTEM_VIEW_HOSTS } from '../system-framing.mts'; -import { inlineSceneImage, resolveBuildSceneAddress } from '../asset-origin.mts'; +import { inlineSceneImage, resolveBuildSceneAddress } from '../server-assets/asset-origin.mts'; import { SCENE_OBJECTS, requireObject } from "../objects.mts"; import { breadcrumbJsonLd, homeSeo, objectSeo, websiteJsonLd } from "../seo.mts"; import { pageTrail } from "../seo-trail.mts"; @@ -18,22 +18,22 @@ import "./cubic-sky.css"; import "@cssearth/renderer/styles/volume.css"; import "@cssearth/renderer/styles/world-context.css"; import "@cssearth/renderer/styles/triangle-faces.css"; -import "../site.css"; +import "./site.css"; import "../shell/maps-shell.css"; import "../shell/settings-panel.css"; import "../shell/shell-layout.css"; import type { PreparedSceneMarkup } from '@cssearth/renderer'; import type { loadPreparedSceneMarkup } from '../server/load-prepared-scene.mts'; import type { ObjectDescriptor } from '@cssearth/objects'; -// The world camera a body mounts with (`site/world-camera.mts`): the summary's frame, focus and camera, so the first +// The world camera a body mounts with (`site/world/world-camera.mts`): the summary's frame, focus and camera, so the first // body mounts before the world summary itself downloads. import worldSummary from '../../src/objects/observable-universe/prepared/world.json'; // The same hashed file the client's `world-context-plan.mts` fetches, requested by the head (startup-requests.mts). import worldSummaryUrl from '../../src/objects/observable-universe/prepared/world.json?url'; import { worldCameraOf } from '@cssearth/objects'; -import { MOBILE_VIEWPORT_QUERY } from '../runtime-policy.mts'; -import { defaultWidthShare } from '../default-width-share.mts'; -import { nativeInputMarkup } from '../native-input.mts'; +import { MOBILE_VIEWPORT_QUERY } from '../browser/runtime-policy.mts'; +import { defaultWidthShare } from '../world/default-width-share.mts'; +import { nativeInputMarkup } from '../browser/native-input.mts'; import { billboardBodyRadiusPixels } from '@cssearth/renderer/navigation/prepared-body-billboards.ts'; const worldCamera = worldCameraOf(worldSummary); @@ -156,11 +156,11 @@ const structuredData = JSON.stringify(home ? websiteJsonLd() : breadcrumbJsonLd( {/* The arrival photograph takes its place from the HTML before the application's code and data (startup-cover.mts). It comes first: module scripts run in document order, and its few modules are a small part of the graph. */} {startupCover && } {/* In the head the application script downloads with the HTML; as a module it still runs after parsing. */} {!navigation &&