wasm-bindgen glue, ts-rs bindings and lockfiles are build output; reviewing
them spends tokens on code nobody wrote. Same list vite.config.ts excludes
from lint.
CI runs `cargo test --all`, which compiled yaak-web for the host and failed
in sqlite-wasm-rs's C shim. The crate is now `#![cfg(target_arch = "wasm32")]`
with its browser-only dependencies target-scoped, so it is empty natively.
Review caught a race in the worker fallback: a shared worker that starts
after the tab has given up on it and taken a dedicated worker would open the
database with no lock. The Web Lock now guards every worker, shared or not —
requested with a short timeout so a reloading tab's dying predecessor is
waited out, then reported. The tab also closes the port it abandoned. Verified
in production builds: 8/8 shared and 3/3 dedicated reloads render, and a
second tab in dedicated mode is told the database is in use.
The browser host now stores data through yaak-models compiled to wasm — the
same queries, migrations, cascade rules, duplicate naming and first-run
bootstrap the desktop and CLI use — instead of a TypeScript port of them.
- crates/yaak-web: the wasm crate. boot() registers an IndexedDB-backed VFS
and calls init_standalone; rpc(cmd, payload, label) answers the models_*
commands via ClientDb and returns the model_writes it caused; blob get/put
through blob_manager. Built like yaak-templates (pkg/ committed); the
build script keeps pkg/ and says so when no wasm-capable clang is present,
so a desktop bootstrap never depends on one.
- models_ops moves from crates/yaak into yaak-models so the wasm crate can
use it without the send engine.
- The database lives in a SharedWorker (packages/platform/src/web/worker.ts):
one process holds the data and pushes writes to every tab, as on the
desktop. Where SharedWorker is missing or its script cannot be fetched, a
dedicated worker guarded by a Web Lock takes over and a second tab is told
so. The worker imports the wasm lazily so a tab's connect is answered
instantly; the tab reconnects if it isn't.
- packages/platform/src/web loses models.ts, schema.ts, db.ts and the
BroadcastChannel; commands.ts forwards model commands to the worker and
keeps the fixed answers and refusals.
Verified in Chrome, dev and production builds: bootstrap, CRUD across every
model type, serde defaults, engine-format ids, Rust copy naming, folder
cascade with per-descendant events, single-event workspace delete, reload
persistence, two tabs coherent, Send declined with a toast, 8/8 reloads
rendering in ~100 ms.
Test runs from the repo root were picking up every git worktree under .claude,
running 648 tests across 102 files instead of 322 across 34. That made results
misleading rather than just noisy: a failure in an unrelated worktree showed up
as a failure here.
Ignores the directory too. Only settings.local.json was listed, while rules.md
stays tracked.
Tag text was black in light themes and correctly tinted in dark. Both came from
liftMax(), which pushes lightness to an extreme, and the two extremes are not
symmetric: lightening past the sRGB gamut clips to a still-tinted color, so dark
kept its hue by accident, while darkening to zero lightness collapses every hue
to black.
Stopping short of the extreme keeps the hue in both appearances with no branch
on appearance, and still clears 6:1 against the tag's own surface across every
accent. Dark shifts from washed out toward the accent, so a purple tag now reads
purple rather than near-white pink.
The "when reasonable" checkboxes read as optional, but the contribution
policy workflow requires all boxes checked. Reword them as either/or
statements and accept the legacy wording in the policy script so
existing PRs keep validating.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The yaak.app MCP server carries the release workflow in its tool
descriptions and instructions; notes are generated from changelog
items on ship.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The release command no longer teaches hand-writing GitHub notes: they
are generated from the yaak.app changelog items by release_ship_beta
and release_publish. AGENTS.md tag rule updated for the CLI being
version-locked to app tags.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The CLI is now version-locked to app releases, so the devDependency
follows the latest stable instead of a range that would strand on the
old 0.x line.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The CLI now publishes to npm on every v* tag at the app's version,
instead of its own yaak-cli-* tag namespace. Stables go to the latest
dist-tag, prereleases to beta/alpha. workflow_dispatch remains for
manual publishes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>