Skip to content
This repository was archived by the owner on Oct 28, 2026. It is now read-only.
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
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ All notable changes to Allthing are recorded here. The format follows [Keep a Ch

### Development

- Pause the search fixture's clock before navigation so an old real-time timer cannot move it backward; preserve the exact timer-cancellation and 250 ms debounce checks.
- Keep the live front-page check's exact navigation contract in step with the Home and Library links; first-paint, layout and interaction limits remain unchanged.
- Library Back checks compare with the card position at the actual click, after browser actionability scrolling, while retaining the two-pixel restoration limit and exact cached-page checks.

- Move build orchestration, Brotli compression, repository validation, asset-credit checks, deployment waiting, isolated database-module checks, audit handling and browser fixture orchestration into native Rust `xtask` commands. Retain official Playwright tests and independent cryptography, SQL and SDK codec checks.
Expand Down
4 changes: 2 additions & 2 deletions e2e/allthing.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,10 @@ test.describe("front page", () => {
await expect(page.locator(".cast-card .origin").first()).toContainText("via ");
await expect(page.locator(".score")).toHaveCount(0);

// 0.3: no backend badges, intro, ranking or keyboard boxes; a Home button,
// No backend badges, intro, ranking or keyboard boxes; Home and Library links,
// and a one-line footer with the version.
await expect(page.locator(".backend")).toHaveCount(0);
await expect(page.locator(".main-nav a")).toHaveText(["Home"]);
await expect(page.locator(".main-nav a")).toHaveText(["Home", "Library"]);
// No sidebar: the feed is one centered column.
await expect(page.locator(".side")).toHaveCount(0);
const feed = await page.locator(".columns .content").boundingBox();
Expand Down
7 changes: 5 additions & 2 deletions e2e/search-typeahead.fixture.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ async function serve(page: Page) {

/** Playwright's 1e12 timer IDs must survive the browser's WebIDL i32 ABI. */
async function browserClock(page: Page) {
await page.clock.install({ time: Date.now() });
const at = Date.now();
await page.clock.install({ time: at });
// Pause before navigation: an in-flight real-time clock callback from the
// mounted app can otherwise finish after pauseAt and move ticks backward.
await page.clock.pauseAt(at + 1000);
await page.addInitScript(() => {
// Native browser handles fit i32. Without aliases, web-sys truncates the
// clock's 1e12 handles and cancellation silently leaves old timers live.
Expand Down Expand Up @@ -70,7 +74,6 @@ test("suggestions appear as you type: people, channels and posts", async ({ page
const box = page.getByRole("combobox", { name: "Search casts, people and channels", exact: true });
// Keep real keyboard/input events, but control the gaps: a busy host can
// otherwise turn a requested 40 ms gap into a genuine 250 ms pause.
await page.clock.pauseAt(await page.evaluate(() => Date.now() + 1000));
const handles = await page.evaluate(() => {
(window as any).__clockProbe = [];
const note = (...args: unknown[]) => (window as any).__clockProbe.push(args);
Expand Down
Loading