From bcb1918d1066b978545e2cd8d276e7f78ac0793b Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 01:39:16 -0500 Subject: [PATCH 1/4] linux: work-562 (codex) Agent-Team: linux Worker: codex --- .github/workflows/ci.yml | 6 +++--- scripts/test-web-text-input.sh | 3 ++- web/tests/embed.test.mjs | 9 ++++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fbcfec97..21d9f9310 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -275,10 +275,10 @@ jobs: if: matrix.name != 'Windows' shell: bash run: | - bash scripts/ci-retry.sh zig build check-web - scripts/test-web-text-input.sh --embed-only + bash scripts/ci-retry.sh zig build web + scripts/test-web-text-input.sh - # `check-web` sets no `-Dapp-layout`, so the web build's layout wiring is a no-op there; this + # The build above sets no `-Dapp-layout`, so its layout wiring is a no-op there; this # builds wasm with an app-owned `.zon` and `.zig` layout, and fails if that wiring is gone. - name: Compile web (wasm) build with a custom layout if: matrix.name != 'Windows' diff --git a/scripts/test-web-text-input.sh b/scripts/test-web-text-input.sh index 5079e7b92..6ba3733ce 100755 --- a/scripts/test-web-text-input.sh +++ b/scripts/test-web-text-input.sh @@ -1,7 +1,8 @@ #!/bin/sh # The hidden input's tests (web/tests/text-input.test.js) against the web.js the web build # writes: `zig build web` first. Node also runs the two-copy embed check. -# Use --embed-only for the build-independent Node check; hidden-input tests also support jsc. +# CI builds the web assets and runs both suites. Use --embed-only for the build-independent +# Node check; hidden-input tests also support jsc. set -eu cd "$(dirname "$0")/.." if [ "${1:-}" = --embed-only ]; then diff --git a/web/tests/embed.test.mjs b/web/tests/embed.test.mjs index 5246d9663..d07ccc659 100644 --- a/web/tests/embed.test.mjs +++ b/web/tests/embed.test.mjs @@ -40,19 +40,20 @@ class Element extends Target { setAttribute() {} focus() {} getBoundingClientRect() { return { left: 0, top: 0, right: 100, bottom: 100 }; } - requestFullscreen() { document.fullscreenElement = this; this.fullscreen++; document.dispatch("fullscreenchange", {}); return Promise.resolve(); } + requestFullscreen() { fullscreenStack.push(this); document.fullscreenElement = this; this.fullscreen++; document.dispatch("fullscreenchange", {}); return Promise.resolve(); } } class Canvas extends Element { constructor() { super(); this.clientWidth = 100; this.clientHeight = 100; } getContext() { return {}; } } +const fullscreenStack = []; const document = Object.assign(new Target(), { fullscreenElement: null, baseURI: "http://localhost/", body: new Element(), documentElement: new Element(), createElement: (tag) => (tag === "canvas" ? new Canvas() : new Element()), - exitFullscreen() { document.fullscreenElement = null; document.dispatch("fullscreenchange", {}); return Promise.resolve(); }, + exitFullscreen() { fullscreenStack.pop(); document.fullscreenElement = fullscreenStack.at(-1) ?? null; document.dispatch("fullscreenchange", {}); return Promise.resolve(); }, }); const window = Object.assign(new Target(), { devicePixelRatio: 1, scrollX: 0, scrollY: 0, localStorage: new Map(), parent: null, @@ -132,5 +133,7 @@ assert.equal(document.documentElement.fullscreen, 0); toggles[1](); assert.equal(document.fullscreenElement, parentB, "the other copy takes full screen for itself"); toggles[1](); -assert.equal(document.fullscreenElement, null, "and a second toggle leaves it"); +assert.equal(document.fullscreenElement, parentA, "leaving the second embed reveals the first"); +toggles[0](); +assert.equal(document.fullscreenElement, null, "leaving the first embed exits full screen"); console.log("embed.test: ok"); From 7239c8eb12c0217f88df7144ff3a5492121e58dd Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 07:16:00 -0500 Subject: [PATCH 2/4] linux: work-562 (codex) Agent-Team: linux Worker: codex --- web/tests/embed.test.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web/tests/embed.test.mjs b/web/tests/embed.test.mjs index 6de090af0..faae67fe0 100644 --- a/web/tests/embed.test.mjs +++ b/web/tests/embed.test.mjs @@ -134,8 +134,11 @@ assert.equal(document.fullscreenElement, parentA, "full screen shows the embed, assert.equal(document.documentElement.fullscreen, 0); toggles[1](); assert.equal(document.fullscreenElement, parentB, "the other copy takes full screen for itself"); +assert.deepEqual(fullscreenStack, [parentA, parentB], "both embeds remain on the fullscreen stack"); toggles[1](); assert.equal(document.fullscreenElement, parentA, "leaving the second embed reveals the first"); +assert.deepEqual(fullscreenStack, [parentA]); toggles[0](); assert.equal(document.fullscreenElement, null, "leaving the first embed exits full screen"); +assert.deepEqual(fullscreenStack, []); console.log("embed.test: ok"); From faaaea23e3d5373a17f72c0c4c854e3b39021e50 Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:09:08 -0500 Subject: [PATCH 3/4] linux: work-562 (codex) Agent-Team: linux Worker: codex --- build/app.zig | 8 ++++---- src/editor/demos/tour.zig | 2 +- web/tests/embed.test.mjs | 2 -- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/build/app.zig b/build/app.zig index 87cbd8d30..2ccfcca13 100644 --- a/build/app.zig +++ b/build/app.zig @@ -1203,7 +1203,7 @@ fn addTests( tour_tests.root_module.addImport("tape", b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/tape/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("tape/root.zig"), })); try unit_test_artifacts.append(b.allocator, tour_tests); @@ -1262,7 +1262,7 @@ fn addTests( keymap_module.addImport("tape", b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/tape/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("tape/root.zig"), })); try unit_test_artifacts.append(b.allocator, b.addTest(.{ .name = "fizzy-keymap-tests", @@ -1469,7 +1469,7 @@ fn addTests( replay_only.addImport("tape", b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/tape/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("tape/root.zig"), })); const replay_tests = b.addTest(.{ .name = "fizzy-replay-tests", @@ -2055,7 +2055,7 @@ fn addTests( bench_module.addImport("tape", b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/tape/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("tape/root.zig"), })); const bench_tape = b.addTest(.{ .name = "fizzy-bench-tape", .root_module = bench_module }); diff --git a/src/editor/demos/tour.zig b/src/editor/demos/tour.zig index a6615a70c..daa93272b 100644 --- a/src/editor/demos/tour.zig +++ b/src/editor/demos/tour.zig @@ -7,6 +7,7 @@ //! fresh one. The explorer is pressed open only if it is not showing already. A snapshot holds the window's //! arrangement too (`Demo.Snapshot`), so a seek back across a split or a float puts the window //! back as it was then, rather than replaying from the keyframe. +const std = @import("std"); const Tape = @import("tape").Tape; const Script = @import("tape").Script; const catalog = @import("catalog.zig"); @@ -201,7 +202,6 @@ pub fn build(s: *Script) !void { } test "a frost-first tour names the frosted glass it shows" { - const std = @import("std"); var s: Script = .init(std.testing.allocator, "tour", "Tour"); s.lacks = &.{"liquid"}; try build(&s); diff --git a/web/tests/embed.test.mjs b/web/tests/embed.test.mjs index faae67fe0..677758edc 100644 --- a/web/tests/embed.test.mjs +++ b/web/tests/embed.test.mjs @@ -137,8 +137,6 @@ assert.equal(document.fullscreenElement, parentB, "the other copy takes full scr assert.deepEqual(fullscreenStack, [parentA, parentB], "both embeds remain on the fullscreen stack"); toggles[1](); assert.equal(document.fullscreenElement, parentA, "leaving the second embed reveals the first"); -assert.deepEqual(fullscreenStack, [parentA]); toggles[0](); assert.equal(document.fullscreenElement, null, "leaving the first embed exits full screen"); -assert.deepEqual(fullscreenStack, []); console.log("embed.test: ok"); From aeee954982c307748ec5f93bb6a37b5a661b3be9 Mon Sep 17 00:00:00 2001 From: "fizzy-linux[bot]" <346940526+fizzy-linux[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 09:01:50 -0500 Subject: [PATCH 4/4] linux: work-562 (codex) Agent-Team: linux Worker: codex --- build/app.zig | 6 +++--- web/tests/embed.test.mjs | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build/app.zig b/build/app.zig index 2ccfcca13..451871f67 100644 --- a/build/app.zig +++ b/build/app.zig @@ -1344,7 +1344,7 @@ fn addTests( .root_module = b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/remote/fake_fizzy.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("remote/fake_fizzy.zig"), }), }); const fake_options = b.addOptions(); @@ -1354,7 +1354,7 @@ fn addTests( .root_module = b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/remote/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("remote/root.zig"), .imports = &.{.{ .name = "fake_fizzy_options", .module = fake_options.createModule() }}, }), .filters = test_filters, @@ -1463,7 +1463,7 @@ fn addTests( const replay_only = b.createModule(.{ .target = target, .optimize = optimize, - .root_source_file = b.path("sdk/replay/root.zig"), + .root_source_file = b.dependency("fizzy_sdk", .{}).path("replay/root.zig"), }); replay_only.addImport("dvui", dvui_testing_dep.module("dvui_testing")); replay_only.addImport("tape", b.createModule(.{ diff --git a/web/tests/embed.test.mjs b/web/tests/embed.test.mjs index 677758edc..6de090af0 100644 --- a/web/tests/embed.test.mjs +++ b/web/tests/embed.test.mjs @@ -134,7 +134,6 @@ assert.equal(document.fullscreenElement, parentA, "full screen shows the embed, assert.equal(document.documentElement.fullscreen, 0); toggles[1](); assert.equal(document.fullscreenElement, parentB, "the other copy takes full screen for itself"); -assert.deepEqual(fullscreenStack, [parentA, parentB], "both embeds remain on the fullscreen stack"); toggles[1](); assert.equal(document.fullscreenElement, parentA, "leaving the second embed reveals the first"); toggles[0]();