Compare commits

..

4 Commits

Author SHA1 Message Date
codex
1281de2a04 test: scope homepage registration link 2026-08-11 06:45:38 -03:00
codex
affb6f3da8 test: cover desktop GPU reservation 2026-08-11 06:24:45 -03:00
codex
a722ca2b3b ci: retry transient Playwright failures 2026-08-11 06:22:36 -03:00
codex
9c33cedf3f gpu: add desktop checkout to 3080 controls 2026-08-11 05:52:49 -03:00
6 changed files with 15 additions and 7 deletions

View File

@ -5,7 +5,7 @@ from __future__ import annotations
import sys import sys
from .access_request_onboarding import register_access_request_onboarding from .access_request_onboarding import register_access_request_onboarding
from . import access_request_state from .access_request_state import * # noqa: F403 - facade preserves existing patch surface
from .access_request_status import register_access_request_status from .access_request_status import register_access_request_status
from .access_request_submission import register_access_request_submission from .access_request_submission import register_access_request_submission

View File

@ -107,7 +107,7 @@
<div v-if="wolf.canControlGpu" class="secret-box"> <div v-if="wolf.canControlGpu" class="secret-box">
<div class="secret-head"> <div class="secret-head">
<div class="pill mono">Admin</div> <div class="pill mono">Admin</div>
<span class="hint mono">GPU priority</span> <span class="hint mono">RTX 3080 checkout</span>
</div> </div>
<div class="wolf-controls"> <div class="wolf-controls">
<select v-model="wolf.selectedGame" class="input mono"> <select v-model="wolf.selectedGame" class="input mono">
@ -115,15 +115,19 @@
<option value="arc-raiders">Arc Raiders</option> <option value="arc-raiders">Arc Raiders</option>
<option value="satisfactory">Satisfactory</option> <option value="satisfactory">Satisfactory</option>
<option value="wolf">Wolf</option> <option value="wolf">Wolf</option>
<option value="desktop">Desktop + Wolf</option>
</select> </select>
<input v-model="wolf.note" class="input mono" type="text" placeholder="note" /> <input v-model="wolf.note" class="input mono" type="text" placeholder="note" />
<button class="primary" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'start')"> <button class="primary" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'start')">
{{ wolf.actioning === "start" ? "Starting..." : "Prioritize Wolf" }} {{ wolf.actioning === "start" ? "Reserving..." : "Reserve RTX 3080" }}
</button> </button>
<button class="copy mono" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'stop')"> <button class="copy mono" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'stop')">
{{ wolf.actioning === "stop" ? "Stopping..." : "Restore AI" }} {{ wolf.actioning === "stop" ? "Releasing..." : "Release for images" }}
</button> </button>
</div> </div>
<div class="hint mono">
Desktop and Wolf may share this reservation. Local image generation waits until it is released.
</div>
<div class="wolf-controls manual-unlock"> <div class="wolf-controls manual-unlock">
<input v-model="wolf.manualIp" class="input mono" type="text" placeholder="IP address" /> <input v-model="wolf.manualIp" class="input mono" type="text" placeholder="IP address" />
<input v-model="wolf.manualUser" class="input mono" type="text" placeholder="user" /> <input v-model="wolf.manualUser" class="input mono" type="text" placeholder="user" />

View File

@ -82,7 +82,9 @@ test("shows Brad's professional homepage and opens the platform diagram overlay"
await expect(page.getByRole("link", { name: "View Résumé" })).toBeVisible(); await expect(page.getByRole("link", { name: "View Résumé" })).toBeVisible();
await expect(page.getByRole("link", { name: "Explore the Live Platform" })).toBeVisible(); await expect(page.getByRole("link", { name: "Explore the Live Platform" })).toBeVisible();
await expect(page.getByRole("button", { name: "Login" })).toBeVisible(); await expect(page.getByRole("button", { name: "Login" })).toBeVisible();
await expect(page.getByRole("link", { name: "Register" })).toBeVisible(); await expect(
page.getByLabel("Primary navigation").getByRole("link", { name: "Register" }),
).toBeVisible();
await expect(page.getByRole("heading", { name: "Quality Systems I Can Take From Zero to Reliable" })).toBeVisible(); await expect(page.getByRole("heading", { name: "Quality Systems I Can Take From Zero to Reliable" })).toBeVisible();
await expect(page.getByRole("link", { name: "Nextcloud", exact: true })).toBeVisible(); await expect(page.getByRole("link", { name: "Nextcloud", exact: true })).toBeVisible();
await expect(page.getByText("2 of 2 online")).toBeVisible(); await expect(page.getByText("2 of 2 online")).toBeVisible();

View File

@ -6,6 +6,7 @@ const testingDir = path.dirname(fileURLToPath(import.meta.url));
export default defineConfig({ export default defineConfig({
testDir: path.resolve(testingDir, "component"), testDir: path.resolve(testingDir, "component"),
retries: process.env.CI ? 1 : 0,
use: { use: {
ctPort: 3100, ctPort: 3100,
ctTemplateDir: "../../frontend/playwright", ctTemplateDir: "../../frontend/playwright",

View File

@ -9,6 +9,7 @@ const webServerCommand = process.env.PLAYWRIGHT_REUSE_DIST === "1" ? previewComm
export default defineConfig({ export default defineConfig({
testDir: path.resolve(testingDir, "e2e"), testDir: path.resolve(testingDir, "e2e"),
retries: process.env.CI ? 1 : 0,
workers: 1, workers: 1,
timeout: 60000, timeout: 60000,
expect: { expect: {

View File

@ -258,7 +258,7 @@ describe("account dashboard", () => {
await dashboard.unlockWolf(); await dashboard.unlockWolf();
dashboard.wolf.pinInputs["secret-1"] = "1234"; dashboard.wolf.pinInputs["secret-1"] = "1234";
await dashboard.pairWolf("secret-1"); await dashboard.pairWolf("secret-1");
dashboard.wolf.selectedGame = "arc-raiders"; dashboard.wolf.selectedGame = "desktop";
dashboard.wolf.note = "now"; dashboard.wolf.note = "now";
await dashboard.setWolfGameMode("start"); await dashboard.setWolfGameMode("start");
await dashboard.setWolfGameMode("stop"); await dashboard.setWolfGameMode("stop");
@ -276,7 +276,7 @@ describe("account dashboard", () => {
source_ip: "181.1.87.186", source_ip: "181.1.87.186",
}); });
expect(JSON.parse(seen.find((item) => item.url.includes("/game-mode/start")).body)).toEqual({ expect(JSON.parse(seen.find((item) => item.url.includes("/game-mode/start")).body)).toEqual({
game: "arc-raiders", game: "desktop",
note: "now", note: "now",
}); });
expect(JSON.parse(seen.find((item) => item.url.includes("/admin/firewall/unlock")).body)).toEqual({ expect(JSON.parse(seen.find((item) => item.url.includes("/admin/firewall/unlock")).body)).toEqual({