Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/nextjs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ jobs:
path: ./out

deploy:
if: github.ref == 'refs/heads/master'
permissions:
pages: write
id-token: write
Expand Down
2 changes: 1 addition & 1 deletion review-previews/site-pass-2026-10-23/assets-final.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"root": "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/out",
"root": "REDACTED_WORKSPACE_ROOT/out",
"pages": {
"404.html": {
"initialJavaScriptBytes": 260139,
Expand Down
2 changes: 1 addition & 1 deletion review-previews/site-pass-2026-10-23/browser-verified.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js && node scripts/generate-pip-qr.mjs

Generated sitemap with 2 URLs to /Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down
4 changes: 2 additions & 2 deletions review-previews/site-pass-2026-10-23/ci-readiness-red.log
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ test_exited_child_reports_its_owned_log_without_probing_http (tests.browser.brow
ERROR: test_colored_ready_log_still_checks_the_owned_server_over_http (tests.browser.browser_test.ServerStartupTests.test_colored_ready_log_still_checks_the_owned_server_over_http)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/tests/browser/browser_test.py", line 180, in test_colored_ready_log_still_checks_the_owned_server_over_http
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 180, in test_colored_ready_log_still_checks_the_owned_server_over_http
wait_for_owned_server(RunningServer(), server_log, "http://127.0.0.1:1")
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/tests/browser/browser_test.py", line 161, in wait_for_owned_server
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 161, in wait_for_owned_server
raise RuntimeError(
f"Test server did not become ready at {base_url}; see {server_log}"
)
Expand Down
6 changes: 3 additions & 3 deletions review-previews/site-pass-2026-10-23/design-review.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ Status: completed

**Choose three explicit client entries and HTML templates for this three-page site.** They give Vite ownership of production CSS links and avoid custom manifest traversal. Keep the existing route registry for server rendering, metadata, aliases, and output filenames.

Source review confirms the static page imports in [routes.tsx](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/app/routes.tsx:3) and the single-template export in [prerender.mjs](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/scripts/prerender.mjs:5).
Source review confirms the static page imports in [routes.tsx](REDACTED_WORKSPACE_ROOT/app/routes.tsx:3) and the single-template export in [prerender.mjs](REDACTED_WORKSPACE_ROOT/scripts/prerender.mjs:5).

1. **Styled HTML and hydration.** Both designs can work. Explicit entries let Vite attach styles from each entry’s static imports to its HTML. Each entry hydrates its known page through the same `App` and `RootLayout` used by SSR. Candidate2 must await the selected loader before both `renderToString` and `hydrateRoot`. Using `React.lazy` with the current synchronous rendering approach introduces fallback and hydration hazards.

2. **Route isolation and nested 404s.** Give home, Pip, and 404 separate entries. Keep runtime imports of the server route registry out of their client dependency graphs. Shared components and global styles remain shared. Unknown nested paths receive `404.html`, whose entry always hydrates `NotFound`. Use root-relative asset URLs. Candidate2 achieves comparable isolation only if its manifest traversal follows the selected page’s `imports`, collects CSS, and excludes `dynamicImports`. Missing manifest entries should fail the build.

3. **Maintainable diff.** Explicit entries add two small templates and entry files. They avoid async rendering changes, glob lookup validation, manifest-key coupling, and custom preload ordering. This is the Laziness Protocol choice. For three fixed routes, a few repeated template lines carry less maintenance risk than another asset-linking system.

4. **Lazy animation.** Preserve the existing dynamic imports in [PondEnvironment](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/components/concepts/signal-desk/pond-environment.tsx:45) and [PipWebSearchDemo](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/components/pip/pip-web-search-demo.tsx:292). Keep their fallback markup, cleanup, visibility, and reduced-motion behavior. Neither architecture should preload renderer chunks or Three.js through generated links.
4. **Lazy animation.** Preserve the existing dynamic imports in [PondEnvironment](REDACTED_WORKSPACE_ROOT/components/concepts/signal-desk/pond-environment.tsx:45) and [PipWebSearchDemo](REDACTED_WORKSPACE_ROOT/components/pip/pip-web-search-demo.tsx:292). Keep their fallback markup, cleanup, visibility, and reduced-motion behavior. Neither architecture should preload renderer chunks or Three.js through generated links.

5. **Development parity.** The [dev middleware](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/vite.config.ts:18) must select the matching template before calling `transformIndexHtml`. Both alternatives need deliberate CSS handling for styled development HTML without JavaScript. Client-side CSS imports alone are insufficient. Emit direct stylesheet links for global/font styles and the selected page’s transitive CSS modules, with matching SSR class names. Preserve clean URLs, `.html` aliases, and 404 status handling.
5. **Development parity.** The [dev middleware](REDACTED_WORKSPACE_ROOT/vite.config.ts:18) must select the matching template before calling `transformIndexHtml`. Both alternatives need deliberate CSS handling for styled development HTML without JavaScript. Client-side CSS imports alone are insufficient. Emit direct stylesheet links for global/font styles and the selected page’s transitive CSS modules, with matching SSR class names. Preserve clean URLs, `.html` aliases, and 404 status handling.

The compact architecture is three page-specific entries calling one shared `hydratePage(Page)` helper. Server rendering retains the existing route resolver and synchronous render function. Prerendering reads each route’s own Vite-built HTML before inserting metadata and content. No client router is needed.

Expand Down
4 changes: 2 additions & 2 deletions review-previews/site-pass-2026-10-23/diagnostics-red.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ test_pond_animates_without_test_diagnostics (tests.browser.browser_test.PondProd
FAIL: test_pond_animates_without_test_diagnostics (tests.browser.browser_test.PondProductionTests.test_pond_animates_without_test_diagnostics) (path='/', motion='no-preference')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/tests/browser/browser_test.py", line 1062, in test_pond_animates_without_test_diagnostics
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1062, in test_pond_animates_without_test_diagnostics
self.assertEqual(mutations, [])
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
AssertionError: Lists differ: ['data-wake-count', 'data-wake-count', 'da[12033 chars]unt'] != []
Expand All @@ -21,7 +21,7 @@ Diff is 13774 characters long. Set self.maxDiff to None to see it.
FAIL: test_pond_animates_without_test_diagnostics (tests.browser.browser_test.PondProductionTests.test_pond_animates_without_test_diagnostics) (path='/missing/nested/page', motion='reduce')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/tests/browser/browser_test.py", line 1062, in test_pond_animates_without_test_diagnostics
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1062, in test_pond_animates_without_test_diagnostics
self.assertEqual(mutations, [])
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
AssertionError: Lists differ: ['data-fish-positions', 'data-fish-world-p[8017 chars]set'] != []
Expand Down
2 changes: 1 addition & 1 deletion review-previews/site-pass-2026-10-23/review-a.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Status: completed

No actionable correctness or security findings in the requested diff and four untracked files.

- The `/missing.html` fix is sound by source inspection. [vite.config.ts](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/vite.config.ts:12) runs the route handler after static-file handling, while MPA mode preserves unknown paths for the 404 handler.
- The `/missing.html` fix is sound by source inspection. [vite.config.ts](REDACTED_WORKSPACE_ROOT/vite.config.ts:12) runs the route handler after static-file handling, while MPA mode preserves unknown paths for the 404 handler.
- Reviewed route-specific entries, hydration, local QR generation, CSP, realpath containment, seed bounds, text updates, build year, action permissions/pins, and CI regressions. Type System Discipline informed the SSR/client component-contract check.
- Supplied logs record passing security-boundary, koi-reference, and targeted pointer tests. These are parent-run results, not independent runtime verification.
- The full-suite log still records the earlier CSP polling failures. Current source uses `page.evaluate` polling without weakening CSP, but a final combined pass remains unproven.
Expand Down
2 changes: 1 addition & 1 deletion review-previews/site-pass-2026-10-23/review-b.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Model: gpt-6.1-sol
Status: completed

1. **[warning / P2] Unknown dotted routes render the homepage during development.**
**Location:** [app/entry-client.tsx:4](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/app/entry-client.tsx:4), interacting with [vite.config.ts:16](/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/vite.config.ts:16).
**Location:** [app/entry-client.tsx:4](REDACTED_WORKSPACE_ROOT/app/entry-client.tsx:4), interacting with [vite.config.ts:16](REDACTED_WORKSPACE_ROOT/vite.config.ts:16).
**Trigger:** Navigate to `/missing.html` under `npm run dev`.
**Evidence:** The prerender middleware skips unknown dotted paths. Vite retains its default `appType: "spa"` and rewrites the missing HTML request to `/index.html`. The new client entry unconditionally hydrates `Home`; previously it selected `NotFound` through `routeForPath(window.location.pathname)`. Production preview serves the authored 404 for this URL, so development now displays a different page. This follows the installed Vite middleware source; no server was started.
**Suggestion:** Route unmatched HTML navigations through the 404 template and entry after allowing actual asset requests through.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ test_initial_page_keeps_scripts_below_300_kb_and_requests_only_local_assets (bro
FAIL: test_initial_page_keeps_scripts_below_300_kb_and_requests_only_local_assets (browser_test.PipRouteTests.test_initial_page_keeps_scripts_below_300_kb_and_requests_only_local_assets)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/.t3/worktrees/luinbytes.dev/t3-c6a04f3b/tests/browser/browser_test.py", line 667, in test_initial_page_keeps_scripts_below_300_kb_and_requests_only_local_assets
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 667, in test_initial_page_keeps_scripts_below_300_kb_and_requests_only_local_assets
self.assertLess(sum(scripts), 300_000)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 433530 not less than 300000
Expand Down
2 changes: 1 addition & 1 deletion review-previews/ui-stack/checks/baseline-interrupted.log
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ test_homepage_preserves_layout_and_world_state_across_viewport_matrix (browser_t
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/usr/local/Cellar/python@3.14/3.14.7/Frameworks/Python.framework/Versions/3.14/lib/python3.14/unittest/case.py", line 615, in _callTestMethod
result = method()
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 936, in test_homepage_preserves_layout_and_world_state_across_viewport_matrix
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 936, in test_homepage_preserves_layout_and_world_state_across_viewport_matrix
page.wait_for_function(
~~~~~~~~~~~~~~~~~~~~~~^
"frame => document.querySelector('[data-pixi-state]')?.dataset.frame !== frame",
Expand Down
8 changes: 4 additions & 4 deletions review-previews/ui-stack/checks/first-browser-failures.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down Expand Up @@ -77,7 +77,7 @@ test_every_scoped_route_exports_a_production_large_image_card (browser_test.Shar
FAIL: test_loading_shows_only_the_pond_then_fades_in_the_live_ecosystem (browser_test.PortfolioTests.test_loading_shows_only_the_pond_then_fades_in_the_live_ecosystem)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 1014, in test_loading_shows_only_the_pond_then_fades_in_the_live_ecosystem
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1014, in test_loading_shows_only_the_pond_then_fades_in_the_live_ecosystem
self.assertEqual(host.evaluate("element => getComputedStyle(element).opacity"), "1")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: '0.998914' != '1'
Expand All @@ -89,7 +89,7 @@ AssertionError: '0.998914' != '1'
FAIL: test_mobile_navigation_hero_viewport_and_system_color_modes (browser_test.PortfolioTests.test_mobile_navigation_hero_viewport_and_system_color_modes) (viewport=390)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 696, in test_mobile_navigation_hero_viewport_and_system_color_modes
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 696, in test_mobile_navigation_hero_viewport_and_system_color_modes
self.assertGreaterEqual(contrast, 4.5)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
AssertionError: 4.08431551828909 not greater than or equal to 4.5
Expand All @@ -98,7 +98,7 @@ AssertionError: 4.08431551828909 not greater than or equal to 4.5
FAIL: test_navigation_and_bordered_controls_keep_their_visual_hierarchy (browser_test.PortfolioTests.test_navigation_and_bordered_controls_keep_their_visual_hierarchy)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 1104, in test_navigation_and_bordered_controls_keep_their_visual_hierarchy
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1104, in test_navigation_and_bordered_controls_keep_their_visual_hierarchy
self.assertTrue(
~~~~~~~~~~~~~~~^
proof_labels.evaluate_all(
Expand Down
2 changes: 1 addition & 1 deletion review-previews/ui-stack/checks/navbar-browser.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down
2 changes: 1 addition & 1 deletion review-previews/ui-stack/checks/pip-clean-browser.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down
2 changes: 1 addition & 1 deletion review-previews/ui-stack/checks/pip-demo-browser.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down Expand Up @@ -82,7 +82,7 @@ test_every_scoped_route_exports_a_production_large_image_card (browser_test.Shar
FAIL: test_browsing_demo_respects_reduced_motion (browser_test.PipRouteTests.test_browsing_demo_respects_reduced_motion)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 455, in test_browsing_demo_respects_reduced_motion
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 455, in test_browsing_demo_respects_reduced_motion
expect(demo).to_have_attribute("data-playback", "paused")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/tmp/lu-pip-validation-venv/lib/python3.14/site-packages/playwright/sync_api/_generated.py", line 21794, in to_have_attribute
Expand Down Expand Up @@ -130,7 +130,7 @@ Aria snapshot:
FAIL: test_mobile_touch_disturbs_the_shared_pond (browser_test.PortfolioTests.test_mobile_touch_disturbs_the_shared_pond)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 1761, in test_mobile_touch_disturbs_the_shared_pond
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1761, in test_mobile_touch_disturbs_the_shared_pond
page.wait_for_function(
~~~~~~~~~~~~~~~~~~~~~~^
"Number(document.querySelector('[data-pond-state]')?.dataset.foodDroppedCount) > 0"
Expand Down Expand Up @@ -168,7 +168,7 @@ playwright._impl._errors.TimeoutError: Page.wait_for_function: Timeout 30000ms e
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/Users/luinbytes/src/luinbytes.dev/tests/browser/browser_test.py", line 1771, in test_mobile_touch_disturbs_the_shared_pond
File "REDACTED_WORKSPACE_ROOT/tests/browser/browser_test.py", line 1771, in test_mobile_touch_disturbs_the_shared_pond
self.fail(f"Double-tap did not commit food: {detail}")
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Double-tap did not commit food: {'gesture': 'single-tap-impact', 'requested': None, 'frame': '720', 'state': 'running', 'touch_events': [{'type': 'pointerdown', 'time': 2257.2999999523163, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}, {'type': 'pointerup', 'time': 2257.5999999046326, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}, {'type': 'pointerdown', 'time': 3284.7999999523163, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}, {'type': 'pointerup', 'time': 3285, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}, {'type': 'pointerdown', 'time': 3731.5, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}, {'type': 'pointerup', 'time': 3731.7000000476837, 'x': 311.6000061035156, 'y': 208.60000610351562, 'target': 'DIV'}]}
Expand Down
2 changes: 1 addition & 1 deletion review-previews/ui-stack/checks/profile-browser.log
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
> luinbytes-site@0.1.0 prebuild
> node scripts/generate-sitemap.js

Generated sitemap with 2 URLs to /Users/luinbytes/src/luinbytes.dev/public/sitemap.xml
Generated sitemap with 2 URLs to REDACTED_WORKSPACE_ROOT/public/sitemap.xml

> luinbytes-site@0.1.0 build
> tsc --noEmit && vite build && vite build --ssr app/entry-server.tsx && node scripts/prerender.mjs
Expand Down
Loading
Loading