Release History
Current version: 3.0.176
FeatureFixPerformanceDocsRefactorTestsChoreOther
v19.24.0October 8, 2026
v19.23.0October 8, 2026
v19.22.0October 8, 2026
fix
a site audit refused by the agent cap is not recorded as its run -- style was pushed back a week (10-07T02:16Z)
f950f5b7v19.21.0October 8, 2026+6 internal
v19.20.0October 8, 2026
fix
an audit proposal files as a Planning ticket with an Approve/Decline question on the Overview, not a request nothing plans -- 41 sat unseen 10-02..10-07
24e97697v19.19.0October 8, 2026
fix
task store waits up to 5s for a lock instead of failing SQLITE_BUSY -- the watchdog's swallowed busy read became 'no report for 701m' and restarted a healthy runner (10:26Z 10-08)
96d50f57v19.18.0October 7, 2026
fix
watchdog idle clock runs from when work became ready, not the last start -- replanned tickets after a long idle got the runner restarted seconds later (18:52Z 10-07)
ae583e16v19.17.0October 7, 2026
fix
awaiting-production is announced once when a ticket starts waiting, not on every runner pass (was 187 of 434 run-watch.log lines in an hour)
3db94bc6v19.16.0October 7, 2026+2 internal
fix
harness self-test drives the real middleware with one failed owner check and asserts /dashboard/platform/config is served, not bounced to /dashboard -- red on trunk, green with the retry
89fdd3b7fix
the platform-owner check asks /api/auth/me once more before failing closed, so one blip no longer bounces the owner off /dashboard/platform/config to /dashboard
68cb5f79v19.15.0October 7, 2026+2 internal
fix
Team chat socket wait runs the frozen page clock a second at a time (up to 10s), so the relay's ws-ticket retry fires instead of the test timing out
4440cdd7v19.14.0October 7, 2026+4 internal
fix
astro build keeps its own Vite cache beside a running dev server, and blog-images-referenced no longer sets -<n>w variants aside now that none exist
fe94247cfeat
every blog hero, card and related thumbnail renders through Astro <Picture> from src/assets/blog; the hand-made srcset fallback, responsive-image.js, make-image-variants.mjs and the committed -448w/-896w/-1344w files are gone
e8914f34fix
the ticket-spec playwright project compares against the chromium baselines, so a screenshot spec System One chooses finds its baseline instead of failing 'no baseline'
cd5dad48fix
remove ai-lessons-hero.svg and ai-lessons-hero-placeholder.svg, which no page, layout or post names
05573994v19.13.0October 7, 2026+18 internal
fix
a critical-path fix pass re-runs a failed spec with the run's whole and own specs, so an untagged spec System One chose is found instead of 'No tests found'
8cacd32afix
a critical-path run that never started names playwright's error instead of sending the fix agent to check @critical tags
8d9400a7fix
POST /test/account answers a failing users insert, createUserToken or api_keys insert with a 500 naming that step and D1's reason, and deletes the user again if its key never landed
55e4f7eafix
shared kanban trusts X-Api-Mode: local only from a localhost dev server; a deployed site is seeded on apiOriginFor's host, as test-account.ts signs in
373c4970fix
add-a-worker check waits for the command or "Could not get a pairing code just now.", then reads the 403 refusal body as UNMEASURED and fails anything else naming the route and its answer
17c58f30fix
a ticket that retries mid-pass is ready again at once, instead of waiting out the other lane's whole run with its slot empty
d4159976fix
dashboard-live settles on page.clock (runFor 4000) after a networkidle wait capped at 3s, then waits for the page's own requests
24a2963ffix
signIn in fixtures/session.ts sets the sessionCookie session (machine key off localhost, placeholder on it) and skips UNMEASURED without a key
019b7ce0fix
consoleEntry checks URL.canParse on the URL a CORS line names before parsing it, so an unparseable one is kept rather than thrown
d6b2812fv19.12.0October 7, 2026+1 internal
fix
the phase reload test waits for the PATCH's 200 answer carrying phase share before reloading, then gives the reloaded selector the 20 s hydration allowance and checks it is in the viewport
1bb0de8fv19.11.0October 7, 2026
v19.10.0October 7, 2026+2 internal
v19.9.0October 7, 2026
fix
(board) blocked and failed tickets re-assert on the 6-hour settled sweep, not every 10 minutes
7408a30bv19.8.0October 7, 2026
fix
(runner) a ticket whose push failed is re-dispatched, not resumed into a phantom conflict
f5391d7bv19.7.0October 7, 2026+9 internal
fix
a shown API key is scrolled back into view whenever the account block resizes above it, not only once when it loads
a5547dedfix
a skipped ticket spec is reported as UNMEASURED, not 'ran and did not pass', and its give-up is revivable once
647d0ae7fix
seed-owner seeds the box key into the local database, so signed-in e2e specs run in worktrees instead of skipping as UNMEASURED
b24b1323fix
blog images are resized at build (cloudflare imageService 'compile') into a per-tree Astro cache, so a phone loads the 448w file, not the full original
d45a8628v19.6.0October 7, 2026
v19.5.0October 7, 2026+3 internal
fix
mockup-new-tab is one test on a placeholder session with bounded tab waits, so it runs locally (1.4s) instead of skipping, and a stall names its step
7757e1b7fix
new API key panel scrolls into view when shown and again once account and keys land; raised surface, role=status, Copy never shrinks
e197d1eav19.4.0October 7, 2026+2 internal
fix
blog-picture spec pins deviceScaleFactor 1 beside its 390x844 viewport so Pixel 5 and iPhone 12 measure a 1x phone
49d70b94v19.3.0October 7, 2026+8 internal
feat
blog hero and cards render Astro <Picture> from src/assets/blog, glob typed as ImageMetadata so astro check passes; token-economics hand-made variants removed
38412231refactor
dev-toolbar-foreman.spec opens the toolbar through helpers/dev-toolbar.ts, shared with the Pick spec
81d43ef1feat
Pick button in the dev-toolbar foreman chat outlines the hovered element and writes `selector` name into the box
6b955dbbfix
sitemap lastmod fetches history from origin once in a shallow checkout and drops dates on the shallow boundary
58494a12fix
a give-up is revived from failedReason, where the runner writes it; 4e1353c8 read heldReason and revived none
6769f76ev19.2.0October 7, 2026
fix
landed tickets awaiting a release are not ready; brief and the watchdog stop calling the release train idle work
133b9196v19.1.0October 7, 2026
fix
the watchdog does not call a draining runner idle; a pending self-restart no longer gets a release cut in half
fb5210f9v19.0.0October 7, 2026+20 internal
fix
currency drift is excused unless the change moved a package now behind; a script edit or a new dependency no longer discards a candidate
37c155f7docs
monitor ticks verify with the package suite at 4 workers, never the full gate beside live tickets
5da5486afeat
from 1024 to 1279px the board folds Planning and Deployed into summary buttons that open them; a lane fans its tickets to fit its height
5db14dbffix
re-take what-is-xswarm and freelancer chromium/firefox/Mobile Chrome linux baselines from this build; the old ones predate 11d07011's TutorialLayout header
490feb69feat
GET /api/decide/compare, behind adminMiddleware, groups the last day's Jev-answered shadow rows by node into Clef/Clef-flash agreement and nearest-rank median/p95 per provider
9387d4d1feat
an audit report compares against the last scored run -- score change in the header, fixed/new/still-open sections; the site-audit event carries score and findings
4ac57af5feat
/api/decide asks Clef and Clef-flash through the Workers AI binding beside Jev, each under the 1500 ms limit, and logs every provider's outcome and latency to decision_log.shadow
78f24820feat
the ticket sheet shows "Filed by the <audit> audit · <date>", linked to the audit's report
84f09037feat
an audit records which audit, date and report filed each ticket, and the board push carries it as test_results.filedBy
94e03d02feat
pickElement — capture-phase outline, swallowed click answers selector "text" svelte source file, Escape answers null
1e1c34befix
a ticket's name keeps its descenders under a 0.15em pad and ends in an ellipsis, not mid-letter
7d28e9f5fix
stacked board lanes take their tickets' height and the board scrolls, so a narrow lane no longer slices its cards
cddf60bbv18.1.0October 7, 2026+5 internal
v18.0.0October 6, 2026+19 internal
feat
every audit run publishes an "Audit quality" report tracing each auditor's 30-day tickets to landed, already done, duplicate or declined
20b2a4cffeat
box audit sweep reports audit-start/audit-finish via api-client, wired from the rollup shipper
a416ba8efeat
running_audits table, audit-start/audit-finish routes, running on GET /api/project-quality/:id
606ba4b0feat
throttle magic-link requests with the MAGIC_LINK_LIMITER rate-limiting binding instead of counting magic_link_tokens rows
402cf06bfeat
path-form /dev/<token>/ checks the owner's session on every request before asking the box
a8085f87feat
the audit report reads the agent's duration and tokens and the repo's HEAD under its score, unmeasured when absent
659c2bc9feat
seed-owner leaves the local sign-in as .xswarm/local/preview-cookie; the foreman adds it to preview requests with no session
f5ed0694v17.38.0October 6, 2026
v17.37.0October 6, 2026+15 internal
fix
a dead agent fails its own call instead of crashing the runner; a killed monitor tick stashes its edits
4f096dd3fix
task worktrees no longer inherit the integrator role; npm advisories hold a release only when the lockfile changed
c089a559fix
a provisioned dev server answers /test/* in-process and the kanban spec seeds the API its page reads
634c05cafeat
dev server seeds its local D1 with the owner and /dev-login signs in against its own API
387d6292feat
Audits lane after Deployed at >=1600px -- audit reports as Ticket thumbs stamped Audit (topic, score, finding, date), opening the report
451238fffeat
theme.css and global.css are dark-only -- every light-dark() keeps its dark half, [data-theme] rules gone, :root is color-scheme: dark; --cd-ink-faint lifted to #96a0ad to clear 4.5:1 on surface-hover
4b58af9efeat
production names DEV_PREVIEW_ZONE preview.xswarm.ai and routes *.preview.xswarm.ai to the worker
d6e62b49fix
runner survives reboots under pm2, watchdog restarts a stalled runner, lock reclaims across boots
8221ff15v17.36.0October 3, 2026+9 internal
fix
renders-clean check annotates the machine-key pairing-code 403 UNMEASURED instead of failing /dashboard/workers
fbb7e35cfix
astro isNode workerd guard moves from patch-package to a Vite plugin, dropping braces' patch-package chain
3fc6c577fix
release E2E restores @playwright/test before an engine whose install vanished, and re-runs once when it vanished mid-run
1ec8e1f3fix
vendored http-cache-semantics declares no mocha devDependency, so currency no longer counts it unresolvable
ab259be1v17.35.0October 2, 2026+4 internal
v17.34.0October 2, 2026+2 internal
v17.33.0October 2, 2026+6 internal
feat
gate denies npm/pnpm/yarn/playwright installs inside a task worktree, whose node_modules is the main checkout's
6ae5aa5cv17.32.0October 2, 2026+3 internal
feat
mint dev preview links on a per-project origin under DEV_PREVIEW_ZONE; refuse another project's token there
728c21c6v17.31.0October 2, 2026+10 internal
fix
record a GitHub installation only when its account id matches the caller's OAuth github_id, not the login
d0d9a5f7fix
/test/seed 404s before writing when a task or worker names a project the caller does not own
f55b8bf4fix
/health looks up the release by sha AND RELEASE_PROJECT_ID, so another project's row under the live sha is never trusted
b5110d6ffix
blockers check task ownership on create and join tickets only through the caller's projects
2d3826d5v17.30.0October 2, 2026+2 internal
v17.29.0October 2, 2026+4 internal
v17.28.0October 2, 2026+2 internal
fix
unsent ticket message shows "Couldn't send — try again" under the composer; draft kept, notice clears on typing or a good send
70eb6dfdv17.27.0October 2, 2026+4 internal
v17.26.0October 2, 2026+3 internal
fix
voice settings API key caption becomes a <label for> its input, drawn uppercase as before
955c13a7v17.25.0October 2, 2026+2 internal
fix
ticket shelf tracks its load phase -- Loading tickets… until the first answer, a warning-tint Couldn't load tickets — retrying note on a refused load above the tickets it kept, No tickets yet only on an empty answer
492f28e8v17.24.0October 2, 2026+2 internal
fix
Voice select gets a 2px cyan focus-visible ring and a name; panel follows its gear so Tab reaches it
47fca5bbv17.23.0October 2, 2026+4 internal
fix
/settings drops the Subscription section, Trial, Billing link and '/ 1' limit; Sessions moves under Usage so it sits above the fold
e2b23dffv17.22.0October 2, 2026+2 internal
v17.21.0October 2, 2026+2 internal
fix
live grid shows Loading until the page announces, and a failed fetch shows Couldn't load + Retry (the page's own loadProjects)
3d2e17cbv17.20.0October 2, 2026+2 internal
fix
blog body headings demoted to h2 in seven posts; welcome drops its body h1 that repeated the title
b954114cv17.19.0October 2, 2026+2 internal
fix
Recent Tasks spec compares the row's position across a held pairing-code load instead of sampling 2.5s with 200ms on every API
03db13b5fix
Recent Tasks row opens tickets in Firefox holds with trunk -- affordable-workers.test.js, critical-specs-url-waits.test.js
8f45f064fix
pairing panel keeps its ready layout while loading and Recent Tasks rows wait for the first-run panel, so the row holds still under the click
256c6752v17.18.0October 2, 2026+2 internal
v17.17.0October 2, 2026+2 internal
v17.16.0October 2, 2026+2 internal
v17.15.0October 2, 2026+2 internal
fix
waitlist spec waits 25 s for hydration and 20 s for the POST, past the 18.6 s staging step; the 429 alert must be visible
fd63fbd3v17.14.0October 2, 2026+2 internal
v17.13.0October 2, 2026+4 internal
v17.12.0October 2, 2026+2 internal
v17.11.0October 2, 2026+2 internal
v17.10.0October 2, 2026+55 internal
fix
a staging build that cannot deploy stops the release at once, named, and a failing streak shows in brief
82cba0b9fix
helpers/posthog visitHomepage opens / at domcontentloaded, waits for the h1, settles 1.5s, and reports PostHog requests and window.posthog
01292f49fix
the homepage injection reads the page through fetchDecoded, not a bare route.fetch().text() that a zstd-honouring staging would hand raw bytes
378e201bfix
homepage no-PostHog check opens / at domcontentloaded, waits for the h1, then settles 1.5s instead of waiting for 'load'
0e413bfefix
env-screenshot waits up to 45s for hydration (staging takes that long) and declares a 60s test limit
9ffe8c13feat
xswarm foreman dev toolbar app -- a Foreman dialog bottom-right that posts the question with the page path to the project's chat; the integration adds it under astro dev only
20c47a02feat
favicon bytes go to the ICONS R2 bucket (data null in project_icons), legacy base64 rows still serve; production web worker binds xswarm-icons
bd7cc987fix
proxied workspace specs call proxiedTimeout(), tickets-retry drops its 5s cap and checks two retries, and all sign in with sessionCookie (placeholder on localhost, machine key on staging)
7f75c27dfix
test-account fixture mints one account per worker and signs every test in (placeholder on localhost, UNMEASURED skip on production)
a626a040fix
Dev-server warm E2E signs in on staging holds with trunk -- e2e-route-fetch-guard.test.js
478c7612fix
dev-server warm stub takes its cookie from sessionCookie (machine key off localhost) and records where passThrough's redirects ended, so a staging bounce to /login is seen; self-tests prove both and the no-key UNMEASURED skip
10d9a0dbfix
dev-server warm spec signs in with the machine key from ~/.xswarm/config.json off localhost, placeholder only on it; no key skips UNMEASURED
cf3819fcfeat
deploy screenshot bytes go to the SCREENSHOTS R2 bucket, D1 row keeps metadata only; binding added for production and staging
432fa34efix
stubApiKeepSession in fixtures/session.ts stubs /api/* but keeps /api/auth/me real and asserts the session is real; the three report specs use it
acb3b7dafix
project-reports, document-front-matter and audit-report-outcomes sign in through the real authed fixture, not the e2e-placeholder cookie
573f60d4fix
a mouseleave the pointer did not make keeps the persona card, re-placed on the avatar; the next real move closes it
0fc11430fix
persona-card hovers Barry's avatar once the late panels have landed and it holds still, not while it is moving
2cb9f892fix
staging's 45s first-render budget lives in tests/e2e/fixtures/hydration.ts and panel-prose-readability imports it
6d107a1dfix
ticket button and panel hydration budget 20s -> 45s in panel-prose-readability, keeping the mocked API
69fea3cbfix
Team Chat launcher toPass budget 20s -> 40s in welcome, frame and auto-update specs, under the 60s staging test timeout
d081cb72feat
E2E preflight probes each address of a remote target on its port (3s), names the silent ones once as skipped and pins chromium to one that answers via XSWARM_E2E_HOST_RULES -> --host-resolver-rules; a localhost target (the push gate) does no lookup or probe
974c9dfbfix
only production drops a session /api/auth/me refuses; staging renders the placeholder session E2E specs enter with
865d6a8efeat
POST/GET /api/shots stores pasted screenshots in the SHOTS R2 bucket at tmp/<id>, owner-only via project_id in customMetadata; SHOTS bound for production and staging
4e2eb419feat
dev host carries the preview page's WebSockets to the dev server through the relay room (ws_open/ws_msg/ws_close)
147ad078feat
test-account fixture mints a staging user token via POST /test/account on apiOriginFor(host), skips UNMEASURED on 403
78326901fix
auto-update reads the page document through fetchDecoded (no zstd); route-fetch guard flags .text() too
06de65befix
release engines keep the 8-worker cap; staging chromium launches with --disable-dev-shm-usage (localhost critical path untouched)
0ca6f715feat
staging trigger uploads dist/server/wrangler.json; ci-build-web stops writing wrangler.xswarm-web-staging.json
fb4c9575feat
wrangler main = checked-in src/worker.ts re-exporting @astrojs/cloudflare/handler fetch, api scheduled, ProjectRoom; drop esbuild wrapper
1951c406v17.9.0October 1, 2026+31 internal
feat
GET /api/projects/:id advertises screenshot_url only for a screenshot uploaded within 7 days
04260835feat
unprovisioned web worker calls the API through the API service binding, public host only without one
01aafcecfeat
staging deploys the config CLOUDFLARE_ENV=staging resolved; emit-env-config.mjs deleted
7cf9f760fix
Team Chat popup specs sign in with the machine key on a deployed target, so staging shows the popup instead of sign-in
4b2ada09fix
Settings text on the type scale holds with trunk -- chat-mockups.spec.ts, sign-out-all.spec.ts
c993d282fix
each environment's config-report gives up after 8s and reads unmeasured — unreachable, so the page never sits on its loading line
2094faa0feat
each runner tick unsets a stray core.worktree and logs worktree-repaired; brief's repo line names it
9c67d6c6feat
PairingCode's Copy, single-use and retry buttons render through the shared deck Button (Copy as primary, like Studio ↗); Button padding .15rem so Firefox draws <a> and <button> alike
b4349e17feat
TutorialLayout owns the tutorial breadcrumb and header; what-is-xswarm and freelancer use it
11d07011feat
a pasted image in the team chat uploads to /api/shots and inserts [shot:<id>] at the cursor
45ca41e0fix
local dev /api proxy gives up on staging after 3s without headers -- a dead IPv6 route left the navbar's anonymous /api/auth/me probe pending, so Sign In never showed and auth, harness and visual critical specs timed out
d0a22c11fix
middleware's /api/auth/me check times out after 3s -- on a host whose IPv6 route is dead the SSR fetch to api-staging never returned, so every signed-in page (and every e2e spec on one) hung
1f98dac4feat
settings, billing and the voice SettingsPanel draw every font-size from --size-* (one-off .55-.9rem, 18/24/30/36px gone)
9b5f7b78v17.8.0September 30, 2026+12 internal
feat
blog purple drawn from --brand-secondary: rgba(139,92,246,a) -> rgb(var(--brand-secondary) / a), mermaid reads the token at runtime
16105c37fix
auto-update spec stamps each document with the sha being served, so the reloaded tab is the new build and does not reload again mid-teardown
c48cb3a1feat
an empty focused field no longer holds the auto-reload; unsent text shows a Reload bar from Navbar via onHeld
c2b77d83feat
the dev preview starts in .xswarm/session.json's worktree, and a request that finds the tree changed stops it and starts it there
04a59a0efeat
an ended UI session is filed as one UI ticket on its branch, its requests one per line; POST /api/tasks stores branch_name
eee0c96afeat
a chat message's session sends the foreman into that worktree with Edit/Write; an edit there files no ticket and says where it went
8922dadfv17.7.0September 30, 2026+10 internal
feat
foreman edits the open iteration session's worktree with Edit/Write, reads the main checkout otherwise
c7c7a488feat
phone menu bar pads --space-2/--space-4, its button --space-2/--space-3 with a --space-2 icon gap
6662c048feat
name the phone menu bar as a toolbar so it is reachable by role; padding still off-grid (10px)
8c715428feat
4px --space-* scale in theme.css; dashboard sidebar recent rows, divider, collapse and build stamp use it
0a1cc2a1feat
a page that throws renders src/pages/500.astro in the site layout instead of the middleware's bare string; /test/crash proves it
3a208d12fix
a local dev server renders the E2E placeholder session instead of bouncing it to /login on the staging API's 401
f09fc81bfeat
Staging cards use the thumb variant, and board-card-face checks its face in one page load, not four, to keep the critical path under 90s
7a5137d2v17.6.0September 30, 2026+2 internal
fix
a session /api/auth/me refuses with 401 is dropped and redirected to /login, instead of opening the dashboard shell
d4846873v17.5.0September 30, 2026
fix
the dev preview loads again -- the box's proxy stops passing the browser's Sec-Fetch headers to the dev server
b7534e9av17.4.0September 30, 2026+2 internal
v17.3.0September 30, 2026+2 internal
v17.2.0September 30, 2026+37 internal
fix
every per-engine release E2E report is git-ignored, so releases stop holding on an untracked report
bdcbd537fix
a board ticket whose criteria are written as Gherkin lines is imported, not declined for ever
bdba8d4cdocs
owner decision -- a UI change the owner asks for is filed in the same reply at owner priority
0cb82a46fix
a step-less timeout with no route quotes Playwright's message with its test count instead of naming routes nobody saw
64fed5eefeat
read each timed-out result's slowest top-level step and title the timeout by it — hooks as starved browsers, anything else as slow staging
2f9b0737fix
Workspace specs assert the Workspace View button visible, and dev-preview asserts its frame visible not merely attached
48fa3970fix
report-only CSP names https://static.cloudflareinsights.com in script-src, so the beacon Cloudflare injects no longer violates it (a Firefox console error on /dashboard/platform/config); the test stubs only its own bare beacon copy, since an empty answer to Cloudflare's SRI-pinned tag logged an integrity error
1096a3acfix
failed API calls read "status path", so this origin's config-report refusal is "401 /api/admin/config-report"
be04e18dfeat
deploy-prod runs each engine alone, workers from MemAvailable read as it starts, triage over every engine's report
88deab4bfix
recent-tasks spec waits for the tickets URL to commit (not load) within 10_000 and checks the 'Alpha' heading
b291a626fix
proxied specs take their 90s budget from helpers/route-json proxiedTimeout(), so on trunk the spec fails
3b3b4d67fix
PairingCode draws a "$" prompt before the command, outside the <code>, so the line reads "$ npx xswarm <code>" while Copy and a selection still carry the command alone
3fc07267fix
mark the three route.fetch-proxied workspace specs test.slow() so staging gets 90s+ instead of 30s
e0d8e53cfix
restore the ticket's spec over the trunk copy the pipeline put back, plus a session-free consoleEntry check — the other environment's config-report 401 is dropped, a 500 from either origin is kept and named — so it fails on trunk even where the server refuses the session
b9f8f282fix
consoleEntry excuses only the other environment's config-report refusal (401 or no status), not its 500, and names a cross-origin resource by origin; Scenario 1 stubs its own 200 and the nav project list so the self-test spec sums to ~10s locally (was 36s)
47690555fix
opening 'Add a new worker machine' below the worker cards scrolls the section into view, so the pairing command is on screen
21395177feat
the magic-link email carries a validated same-site ?redirect= and verify sends the user there, falling back to /dashboard
ee7d37b9fix
Overview's Next line drops the internal Work Harness link; Getting Started is the only onward step
d5864e17feat
an audit marked guide keeps its instrument's whole output and publishes it as the report's Style guide section; the prompt still gets the first 12,000 characters
a186d6d0feat
fleet-stamp-add writes scripts/build-stamp.mjs into a project and runs it first in prebuild
8edc7ec4fix
re-take tutorials-mobile and about-mobile firefox-linux baselines from this build; the 2026-09-15 ones predate the alpha-invite TL;DR and the Open Alpha eyebrow
03c7e359v17.1.0September 30, 2026+2 internal
v17.0.0September 30, 2026+10 internal
feat
cap a remote Playwright run at 8 workers, so memory taken mid-run no longer crashes Chromium
e2afcbeafix
team-chat-popup history/no-double/project-name/stream read projects through listProjects instead of a bare GET .json()
43093824fix
scope conflicts match only locks whose request is in the same project; claim uses its request's project, scope-check requires an owned ?project=
aa0d6577feat
POST /api/auth/logout-all sets users.sessions_valid_after (migration 0028); auth refuses sessions issued before it; caller gets a fresh session cookie
8e86fe09v16.12.0September 30, 2026+5 internal
feat
middleware and client bounce send signed-out visitors to /login?redirect=<path+query>; // targets dropped; login and DashboardLayout share the stash helpers
6863c6bbv16.11.0September 30, 2026+7 internal
feat
/docs/release-history redirects to /releases; the frozen doc, its generator and the pre-commit hook that rewrote it are removed
7fc16454feat
GET /api/projects waits up to 1s on a first icon lookup; a subdomain of the site (stage.xswarm.ai) reads its favicon through ASSETS
8f7fe52dfix
settings loads /api/billing/usage on its own, so the sign-out-all re-scroll fires once account and keys render instead of waiting on usage
50f08982v16.10.0September 30, 2026+4 internal
fix
the seven re-taken login/404/redirect baselines are compared against the build under test (@critical)
8b63b469fix
bareFetchJson(file, src) in helpers/route-json names each .json() on a bare route.fetch() by file:line; settings.spec openAsPlan pins subscription_plan and subscription_status through pinJson
9066e248v16.9.0September 30, 2026+4 internal
fix
baseline device pinning moves into helpers/snapshot.ts (deviceOf, photographedAs); the chromium check is proved from a Pixel 5 context, as the Mobile Chrome project runs it
ffeedb47fix
baseline checks pin the Desktop Chrome device whole and skip non-chromium engines, so Mobile Chrome's isMobile/2.75x DPR and firefox's Gecko no longer report seven false regressions per release
a46f7275fix
navbar wordmark drops the global .glitch-text cyan halo (text-shadow: none), which only the prod build painted once lightningcss compiled --glow-intense's light-dark()
a648f49ev16.8.0September 30, 2026+7 internal
fix
pinJson(page, url, patch) in helpers/route-json reads the real JSON once through fetchJson and reports reads/errors; both settings specs pin /api/auth/me with it and assert one read, no handler error
cb7e5fc5fix
openAsPlan reads the real /api/auth/me once through fetchJson(route) and answers every /me call from it, so the concurrent second route.fetch's ~5s stall no longer holds Subscription on "Loading…"
167888befix
blog tag filter is one scrolling row at <=480px so a post card is in view; blog-mobile linux baselines re-taken for that restyle and the RSS pill
b3766011fix
Settings Subscription link reads Billing on the free plan, Manage Subscription on paid plans
bba333bav16.7.0September 30, 2026+2 internal
fix
--rebaseline checks staging's build-info sha against HEAD before any re-take, and records both in rebaseline.json
3d0a2ab5v16.6.0September 30, 2026+4 internal
v16.5.0September 30, 2026+2 internal
v16.4.0September 30, 2026+6 internal
feat
writeVerify verdict "E of E pairs match — 0 changed pixels" or "FAIL — expected E pairs, compared C; N pair(s) changed"; reads "N pixels are different" with or without the ratio
2cca56effix
waitlist spec waits for the hero island to hydrate; Vite serves the symlinked node_modules so islands hydrate in a worktree; chat specs name what was missing
6ec00298v16.3.0September 30, 2026+5 internal
fix
settings-billing-link free-plan phone spec expects Manage Subscription, per this ticket's Scenario 1 which supersedes the earlier Billing label
8e1a671bfix
Subscription link reads Manage Subscription for every plan and the plan name is rendered capitalised (Free), not only styled so
3c5c619efeat
verify.md verdict reads "E of E pairs: 0 changed pixels", "N of E pairs changed (P changed pixels)" or "expected E pairs, compared C"
a1199356v16.2.0September 30, 2026+18 internal
fix
refuseBaselineWrite in helpers/snapshot.ts throws naming the baseline path when a must-mismatch capture would write or overwrite it; snapshot-mask spec calls it
f470d92afeat
--verify verdict reads "N of E pairs match (P changed pixels)" or "UNMEASURED: C of E expected pairs compared"
e5aac8f3fix
changed-fixture snapshot test throws naming the baseline path when it is missing or --update-snapshots would overwrite it, before toHaveScreenshot can write it
23abb44afeat
page-aborted cause names the route from the ERR_ABORTED URL path instead of truncating before it
7529c5dbfeat
writeVerify headline "E of E pairs: 0 changed pixels", "N of E pairs changed: P changed pixels", or "C pairs compared where E were expected"
ebb10f1cfix
re-take app-strategy and tutorial-first-time-setup Mobile Chrome baselines at Pixel 5 from this build
954c4ff7fix
capture() photographs at CSS scale like toHaveScreenshot; on Pixel 5 it took 1081x1999 against 393x727 baselines
38fa567dfeat
writeVerify headline "N of E pairs match — P changed pixels" or "C of E expected pairs compared"
875dd86dfeat
serve dev previews from xswarm-api.chadananda.workers.dev (DEV_PROXY_HOST + client origin), off xswarm.ai
ac5d5b63feat
verify.md's first line is the verdict -- "N of E pairs match: P changed pixels" or "N pairs were compared but E were expected"
3ce3889cfix
recapture tutorials-mobile, about-mobile, homepage-tablet chromium linux baselines from this build; the 2026-09-14 ones predate the alpha-invite copy, the Open Alpha eyebrow and the waitlist footnote rewording
3f824efbv16.1.0September 30, 2026+10 internal
fix
/api/release/current reads only RELEASE_PROJECT_ID's production rows; production sets it to xswarm's project
4757fb94fix
scope the task-lock gate and its conflicts to the claiming ticket's project; territory dry run to the asker's own ticket or account
35c522cffeat
writeVerify verdict PASS/FAIL: N of E pairs match or UNMEASURED: C of E pairs compared; rows 'N changed pixels'; --expect alias
294bd523fix
one settle step before every capture -- fonts in use loaded, viewport images complete, auth slot resolved
16c26b90v16.0.0September 29, 2026+12 internal
feat
writeVerify + planless --verify: every snapshot pair vs the target as verify.md with both shas, UNMEASURED below the expected count
4e6ccaa8feat
logout deny-lists the presented session (revoked_sessions, migration 0027); auth refuses a revoked token, /auth/me fully checks any token it is given
120fe786fix
TOKEN_SECRET and MASTER_ENCRYPTION_KEY require the environment prefix; missing secrets abort before any PUT
fe0115e9feat
verifyReport writes DIR/verify.md from a Playwright run, per re-taken pair; --report or a fresh --verify run, skipped = UNMEASURED
4d724f43feat
Content-Security-Policy-Report-Only on every page, reported to anonymous /api/csp-report
3609ab36v15.12.0September 29, 2026+12 internal
fix
REST auth refuses any signed token carrying a purpose, so a leaked ws ticket cannot mint an xsk_ key
8d1a2d2bfeat
perf audit prints a ROUTES section (LCP, CLS, KB, requests, landing URL) and keeps unmeasured routes with their error
824ab4b9feat
logo as relative integer path data (37 KB -> 7.8 KB), week-cached; logoOpsFromSvg reads relative m/c/z
9eb0eac1feat
GET /workers(/:id) adds sessions_setting default 2, live capacity and effective_sessions; PATCH rejects a setting above capacity
d270ce3bfeat
--verify --from DIR reads rebaseline.json and checks a capture: re-taken pairs pass, ticketed and owned failures listed, anything else unexpected
b835b301fix
every committed snapshot-mask baseline is checked from any browser for the '-- changed' heading, so a wrong firefox baseline fails a chromium-only run
cba0dc33fix
firefox snapshot-mask baseline shows 'Snapshot Mask Fixture', not the '-- changed' heading the parallel changed-test wrote
35c4909bv15.11.0September 29, 2026+14 internal
fix
recapture tutorials-index chromium/firefox/Mobile Chrome linux baselines from this build; the old ones predate the 1f4a1d4b alpha-invite copy (40781px off)
ffd60c34feat
--rebaseline accepts each stale route/browser pair and runs one single-project --update-snapshots per engine
b4f6187afix
settings re-scrolls the sign-out-all result into view once the account and API keys finish loading above it
94e68351fix
chat-state baselines are chromium's alone; the critical-path copies (byte-identical to chromium's) are removed
167b47a4fix
recapture kanban-error chromium/firefox linux baselines from this build after the page fix; the old ones predate the terminal-window restyle (2488/5284 px off)
5099e936fix
kanban error window is a section named by its Error title, so it is findable as a region
3a6f0289fix
settings-billing-link spec expects Billing on free and Manage Subscription on pro, per this ticket's criteria
d2d7d967feat
WorkspaceView loads DevPreview, TerminalView and ChatWindow with import(), so tiles draw before the pane modules arrive
821fb352v15.10.0September 29, 2026+4 internal
fix
Workspace View takes the page's announced project list; live page shares the nav menu's in-flight /api/projects request instead of making a second one
5549aa94v15.9.0September 29, 2026+9 internal
feat
Settings Subscription link reads "Manage subscription" on every plan; settings.spec free-plan case follows the new name
f03cc8d0fix
each chat line is an article named for who said it, so its not-delivered marker and Retry are found by role
ca52d01efeat
free-plan Subscription link reads "Billing" (same outline link as pro), section labelled by its heading; test scrolls to the heading as a phone user does
c6c2747dfix
blog.css and the standups post use the declared --color-text-* tokens; spec waits out the theme transition
43ae2794v15.8.0September 29, 2026+4 internal
fix
style ratchet baseline recorded from the current tree (login.astro's 4 font sizes landed after attempt 3 recorded 797), so the real tree holds at 0 rises
7128e13efix
test account suffix gains a random tail so same-millisecond requests never collide; kanban beforeAll throws the status and body of a refused account
936dc282v15.7.0September 29, 2026+2 internal
v15.6.0September 29, 2026+3 internal
fix
console handling moves into an exported consoleEntry, proven without a session: console.error("boom") located at "debugger eval code" is "console.error: boom", not a thrown listener
fe4da02afix
early-click's hold rule is a shared helper, and a built-page reproduction proves it lets goto return while the island module waits
ef4d9b2dfix
workspace-early-click holds back only the WorkspaceView module, not the built page's head stylesheet that blocked DOMContentLoaded
0f66b910fix
Workspace specs forward staging modules through passThrough, so Firefox's xswarm.ai Host and Chromium's zstd no longer stall every chunk
622704e0fix
the session harness reads a console location only when it is a URL, so a Firefox "debugger eval code" error is recorded instead of throwing in the listener
c7e73175v15.5.0September 29, 2026+5 internal
fix
the session harness also excuses a CORS block on the other environment's config-report, read from the message text where Chromium and Firefox name the blocked URL
6bed4f19fix
the session harness appends the failing resource's path to a "Failed to load resource" console error, so a 401 names its request
0f567ceev15.4.0September 29, 2026+5 internal
fix
expectFetch401Logged in the session harness asserts the console on Chromium and annotates UNMEASURED elsewhere
77a89839v15.3.0September 29, 2026+2 internal
v15.2.0September 29, 2026+4 internal
fix
console collector skips another origin's config-report refusal; this origin's still counts
1e4bddb9fix
listProjects parses first and reads status/type/body only when the answer is not JSON, so a response without headers() still works
0ba5f958fix
listProjects retries only thrown GETs and names route, status, type and body on a non-JSON answer; three specs use it
44ade359v15.1.0September 29, 2026+34 internal
feat
sidebars mark the current page with aria-current, name each nav landmark, and category labels are no longer headings
1e92285afix
the renders-clean recorder lives in the session harness (fixtures/session.ts), so the spec run on trunk fails -- trunk's harness has no same-origin 'STATUS METHOD path' recorder
6756de99fix
authenticated.spec.ts waits on a controlled clock and on in-flight /api/ calls instead of real time -- its @critical tests sum ~12s, was 26s
f3207626fix
renders-clean recorder lists same-origin /api/ failures as 'STATUS METHOD path' and drops other origins
ccfb103efix
"Check your email" panel enters the DOM only after a sent link, so a refused request never carries it
f46eb29bfix
the BA closes a waiting ticket it finds already delivered instead of asking to delete it
8b2f8c13feat
email sign-in form on /login posts to /api/auth/magic-link with the redirect, shows sent or retry-later
b452b6b1fix
blog meta line and skill-bar labels use --color-text-secondary instead of undefined --text-secondary
967afc07fix
/app-strategy, /about and getting-started name one stage, Open Alpha, with no price, free-for-now or discount copy
5d79dcbcfix
visual triage lists routes with missing screenshots under missing instead of throwing ENOENT
a9ac60e2fix
API keys render as a labelled list with wrapping rows and a tokenized Revoke with focus and disabled states
17001350feat
heartbeat reads running tickets from the task store each beat -- busy with active_tasks, idle at 0; xswarm run passes its store path
6e4d67a3fix
the daemon starts again -- its fetch dispatcher keeps HTTP/1.1, where response headers survive
5bfbaaf0fix
shared board reads the API's /k/:token (in-process or apiOriginFor) and renders token-styled columns and cards
82dbc7a8feat
report card share shows the link in a read-only field and says Could not create a share link on failure
40cf6c18feat
the runner's cap follows the worker's sessions setting, read at every board pull and bounded by the machine's room; a raised cap opens lanes mid-pass
bc98f66dfeat
CI tab token-only and wrapping at 320: quiet sans hints, named panel regions, inset cards, reported audits shown
7b1d3bc8v15.0.0September 29, 2026+21 internal
feat
inline project chat is a named 'Team chat' region; message times and wait counter are snapshot-masked; empty/sending/streaming baselines at 390
1a4a096efeat
Revoke link on a shared report card sends DELETE and shows Link revoked; list reports shared
2d79b1e4feat
style guide generated from theme.css (Tokens table: value, var() uses) and xswarm audit style runs it as evidence
47d925c8fix
owner bubble tinted by its own --color-chat-own-* tokens instead of an inline var chain; list and bubbles named for role-based checks
3ef1560ffeat
Share button on report cards mints the /r link with Copy; shared page shows the report date
daf84844v14.10.0September 29, 2026+4 internal
v14.9.0September 29, 2026+13 internal
feat
pause and drain confirm, naming the in-flight tickets they stop; resume goes straight through
22a82651fix
Staging toHaveValue E2E failure fixed holds with trunk -- connect-pair-integration.test.js, entry.test.js, visual-audit-budget.test.js
bcf61811fix
login specs follow the Sign in with GitHub button; the cancel spec marks the callback redirect UNMEASURED on localhost when /api is staging's older API, as the feature commit said it would
1b9b1901feat
sign-in errors name the fix -- callback forwards GitHub's error (access_denied) after the state check; login maps no_email/access_denied/bad_verification_code to what-to-do messages on a tinted danger alert; button reads Sign in with GitHub
0c91166dfix
the project-filter reload test lives in authenticated.spec.ts and finds the box by its label -- red on trunk, where the filter has no accessible name
4a1f9364fix
calculator canonical names its production URL on every host -- Layout takes an opt-in canonical prop, the page passes /tools/token-cost-calculator on Astro.site
54dee3e4fix
room-summon answers the project read from the row it already holds -- route.fetch to staging hung after reload, so the phase selector never learned 'share'
8eb2a537feat
/tools/token-cost-calculator -- prerendered page with Claude model picker (per-1M input/output prices), live Estimated cost on a raised card; token-economics post links to it; canonical asserted by path
72a97245v14.8.0September 29, 2026+6 internal
fix
both coding slots stay busy while the BA plans -- the cap counts coding agents only, and a refused ticket no longer hides the next one
c443b48dfeat
About creator card opens with a Chad Jones byline linked to GitHub, role line in text-secondary, border rule below; section labelled by its heading
9d7bbec5feat
blog posts pass their image and article meta to Layout -- own og/twitter image, og:type article, article:published_time, BlogPosting ld+json in place of WebPage
e8e38265feat
homepage title names what xSwarm does -- Run Parallel Claude Code Agents From One Dashboard (59 chars)
56f873a8v14.7.0September 29, 2026+4 internal
v14.6.0September 29, 2026+2 internal
fix
workspace header reads Relay unreachable when the ticket is refused or the relay socket closes, instead of Connecting... forever
06265f59v14.5.0September 29, 2026+5 internal
fix
/dashboard/live keeps its header and toggle outside the grid view, so Grid View stays visible over the open workspace
80dd63d4fix
/dashboard/live stores the workspace toggle state and WorkspaceView reads it on mount, so an early click is not lost
88e0c270feat
--rebaseline drafts one standard ticket per regression route and files it via xswarm task file, printing id and route
ff0e98ffv14.4.0September 29, 2026+3 internal
fix
Dev-server-warm E2E fits staging latency holds with trunk -- e2e-route-fetch-guard.test.js
b100b463fix
passThrough asks the origin for gzip/br, not zstd Playwright cannot decode, and drops Firefox's page Host
6fdf6d48fix
dev-server-warm pass-through asks staging for gzip/br, not the zstd Firefox advertises and Playwright cannot decode
0d130a19v14.3.0September 29, 2026+2 internal
v14.2.0September 29, 2026+5 internal
fix
firstProject resolves the account's first project, or skips as UNMEASURED; the hub specs open it
66a2dd1bfix
the hub specs open the account's first project from listProjects, not the hard-coded a53dd66f
1c11f844feat
boxOf waits for visibility and names an element with no box; chat specs measure through it
5f8355fev14.1.0September 29, 2026+3 internal
v14.0.0September 29, 2026+4 internal
v13.37.0September 29, 2026+2 internal
v13.36.0September 29, 2026+4 internal
v13.35.0September 29, 2026+4 internal
fix
hero fallbacks tuned to rendered widths, unhinted tagline, metric-matched Share Tech Mono for the waitlist button
3b069ca0v13.34.0September 29, 2026+30 internal
fix
wrap staging pass-through in try/catch in three e2e specs so a closed page cannot throw 'response disposed'
62d19727feat
the BA answers what it can of a waiting ticket -- partly done, merged into a feature, or planned
db552973feat
development audit asks for proposals replacing hand-rolled code with native Astro/Cloudflare mechanisms
a069b278feat
dashboard-live, chat-history, board-card-face and board-card-delete list projects via retrying listProjects
1a5f34a5feat
the team-chat popup splits voiced replies and publishes its speakers, so the roster marks who spoke there
88bd06b7feat
site pages are gated by signed-in areas (lib/auth-areas.js), not a bare startsWith prefix list
2939962efeat
Plan's meeting moves into the team-chat popup; a roster summons opens it and asks there
6a049de7fix
the entry-point gate accepts a test that spawns the script by a path built from its own directory
855cebb1fix
board-card-face finds the serial stub by its title, not by ref text the unnamed name slot now also prints
75136681v13.33.0September 29, 2026+10 internal
v13.32.0September 29, 2026+7 internal
v13.31.0September 29, 2026+23 internal
feat
/connect/pair emails the owner naming the machine; a mail failure is audited, not fatal
02c762effeat
install clones to prove git access and exits 1 when it cannot, or when credentials fail
9a37d1fefeat
a landed ticket touching packages/web/ skips the release window and critical-path deferral, as an urgent fix does
d4bf97e4feat
foreman DECISION lines are appended to decisions.md, hidden from the owner and confirmed in the reply
6fdabb0cfix
thread-delivery setup lists projects via listProjects, which retries a dropped socket up to 3 GETs
2444a0effeat
with nothing to plan, the BA triages one owner-waiting ticket: consolidates a duplicate, proposes deleting delivered work, keeps the rest; withdraw wired through ownerQuestions
57ed325cv13.30.0September 29, 2026+4 internal
v13.29.0September 29, 2026
v13.28.0September 29, 2026+8 internal
v13.27.0September 29, 2026+6 internal
v13.26.0September 29, 2026+2 internal
v13.25.0September 29, 2026
v13.24.0September 29, 2026
v13.23.0September 29, 2026+2 internal
v13.22.0September 29, 2026
feat
each ticket records, in shadow, the critical specs System One would choose and what it would miss
2fcead0cv13.21.0September 29, 2026
feat
each release records, in shadow, the test set a batch-scoped run would choose and what it would miss
d2ee30d8v13.20.0September 29, 2026
v13.19.0September 28, 2026
v13.18.0September 28, 2026+2 internal
v13.17.0September 28, 2026
v13.16.0September 28, 2026+6 internal
feat
POST /api/tickets asks System One to score title, why, scenarios, test and touches, beside the twin check; review returned and stored in test_results with the defects list
b3455f87feat
POST /api/tickets asks Jev for an open Planning twin and merges the new scenarios into it, else files marked unjudged
0d8a751bfeat
failuresIn names vitest's × lines under a ❯ file and runAll's SUITE FAILED lines; the gate's note comes from failureNotes
70babd0bv13.15.0September 28, 2026
v13.14.0September 28, 2026+4 internal
fix
a real ticket filed without a project is created on the board under the runner's project
c771aa0efix
xswarm task file submits through the ticket API, and the API keeps a ticket's type and priority
6828a0e3feat
a spec green without its change goes back to the agent once; still green on trunk, the push is refused (e2eRedFix added to both step maps)
52c3cbc2feat
planOne sums each plan's seconds and tokens into evidence and puts this run's cost on the planned event
1d5d7938v13.13.0September 28, 2026
v13.12.0September 28, 2026+6 internal
v13.11.0September 28, 2026
perf
the idle runner re-asserts settled tickets to the board every 6 hours, not every 10 minutes
143bd919v13.10.0September 28, 2026
feat
each ticket records, in shadow, the critical specs a surface-scoped run would choose and what it would miss
96797f2cv13.9.0September 28, 2026+7 internal
fix
a ticket records why System One judged nothing, and which specs the fail-twice rule found flaky
46dc8f15feat
Team chat popup renders a > note as a blockquote with a 3px border-hover left rule, indented, in secondary text
ec4daf91fix
thinking dots keep their animation name under reduced motion -- global.css already stills them, the popup's own animation:none unnamed them
c4259eaffeat
Team chat popup replaces the static waiting line with Barry's thinking row -- dots, a m:ss counter, and the room's chat:status step
51834e5bfeat
Barry's replies drop the tinted bordered bubble for zinc-100 reading ink on the panel; owner line loses its avatar to hug the right edge
0949a63ev13.8.0September 28, 2026
v13.7.0September 28, 2026+1 internal
v13.6.0September 28, 2026
perf
the visual-audit hang test waits a 4s grace, not 60s -- the gate drops from 123s to 69s
da94c741v13.5.0September 28, 2026
feat
System One judges the refactor on the standard's judgement rules, and the popup shows it
320a2eaav13.4.0September 28, 2026+10 internal
fix
a skipped spec file is recorded as not failed, so re-runs and fix prompts name only files that failed
a7635e25feat
foreman 'Name [Tag]:' lines split into that member's own chat message; Dee [Design] joins the cast and solve roster
c9165b4dfeat
agent replies fill the chat width -- non-user .msg-body flexes to the list edge, 90% cap kept for the owner's lines
af694ff4feat
board reporting leaves run.mjs -- pull, gates, mid-pass report, interval and end-of-pass sweep move to task/board-reporting.mjs
994d6f1dfeat
Overview Send button sits inside a rounded message well -- grey when empty, Barry's colour with text
f833ce94feat
foreman tickets carry a category -- asked for in the TICKET line, filed when the API stores it, else null
75b0aa89v13.3.0September 28, 2026+10 internal
perf
a red critical path is fixed in place by the coding session instead of throwing the attempt away
e79937c9fix
a critical-path spec must fail twice to count -- failed spec files are re-run once, alone
6ead572cfeat
consecutive messages from one speaker form one turn — name and avatar on the first, time under the last, 0.25rem apart
f84d3be2feat
each ticket category prints on its own paper; teal, tangerine, lime, ivory, slate stocks added
d41c532dfix
message time is 12px in --color-text-tertiary with no half opacity, so it reads at 4.5:1 against the chat panel
e1677828v13.2.0September 28, 2026+8 internal
feat
chat header shows Barry's avatar, a calm reply-font name and Foreman · presence beneath
d5917bb9v13.1.0September 28, 2026+7 internal
feat
'>' lines in a chat reply render as a blockquote: left rule in --color-border-hover, indented, secondary text, marker dropped
874e1e43perf
a merge candidate whose tree the ticket already proved green skips its second critical path
bcfaed17feat
the refactor is scored against the refactor standard, per rule and in total, and the popup shows it
7d7ddcd5fix
(quality) function spans start at the body brace, so a destructured parameter no longer hides a long function
f026ba7ffeat
the fresh refactor session is handed the full diff of the ticket, under its changed-code brief
883b8f98fix
the Team chat names the project as soon as the header loads it, not only when the relay is down
5a68e884feat
the refactor runs in a fresh session, handed the lines the ticket changed and the functions they sit in
08d5e6a6feat
empty Team Chat popup greets as Barry with three raised starter-question buttons that fill the composer
6cd31ffcv13.0.0September 28, 2026+4 internal
v12.30.0September 28, 2026+6 internal
feat
each tool the foreman's agent calls is sent as chat:status for the reply's chat_id; the room relays it to every dashboard without storing it
b0a9a6d6feat
chat panel framed by surface and a neutral --color-border hairline, no cyan rules or black header/composer bars
f4576888feat
reports open at /dashboard/projects/<id>/reports/<slug> under the project header; the global URL of a project report forwards there
dac8052ev12.29.0September 28, 2026+6 internal
feat
the thinking row shows the room's chat:status step in place of 'is thinking', each replacing the last
8846be29feat
Overview panel lists unplanned audit proposals under the blockers; Approve plans each as one ticket
42536f08fix
refactor, design, foreman, planner, audit and stop-hook prompts give the why for each rule
9ec89957fix
agent prompts give the why for each rule, and stop contradicting the coding prompt on committing
5aa24b2bfix
every board report carries the live feed, so a running card stays in Refactoring instead of falling back to its evidence column
5c73d625feat
the ticket popup says why a refactor changed nothing, from the agent's Applied/Not applied lines
3e70e328feat
DocumentReader matches an audit's Work items to the project's tasks and requests and shows Fixed / In progress / awaiting approval per finding
65635114v12.28.0September 28, 2026+4 internal
v12.27.0September 28, 2026
v12.26.0September 28, 2026+2 internal
v12.25.0September 28, 2026+7 internal
feat
card status line prints step minutes, refactor delta, and a shipped ticket's release and size
48ab9f11feat
the ticket popup has a Code section -- feature size and what its refactor improved, from test_results.code
f351a342feat
chat replies render ``` fenced code as a monospace block that keeps its lines, fences hidden
e1d3030cv12.24.0September 28, 2026+4 internal
v12.23.0September 28, 2026
v12.22.0September 28, 2026
v12.21.0September 28, 2026+4 internal
v12.20.0September 28, 2026
v12.19.0September 28, 2026+4 internal
v12.18.0September 28, 2026
v12.17.0September 27, 2026+6 internal
feat
a report card's PDF button downloads a designed PDF built in the browser instead of printing the dashboard
99f7809dv12.16.0September 27, 2026+4 internal
v12.15.0September 27, 2026+4 internal
v12.14.0September 27, 2026+7 internal
v12.13.0September 27, 2026+4 internal
feat
the room hands the foreman the recent conversation with each chat:message; Barry's prompt shows it above the owner's message
a4e73d0cv12.12.0September 27, 2026+5 internal
fix
threadpool test parks pool threads on FIFOs instead of timing CPU work, so load cannot flip it
1663f054v12.11.0September 27, 2026
v12.10.0September 27, 2026
v12.9.0September 27, 2026+1 internal
v12.8.0September 27, 2026
v12.7.0September 27, 2026+2 internal
v12.6.0September 27, 2026
v12.5.0September 27, 2026
v12.4.0September 27, 2026
v12.3.0September 27, 2026
v12.2.0September 27, 2026
v12.1.0September 27, 2026
v12.0.0September 27, 2026+4 internal
v11.6.0September 27, 2026
v11.5.0September 27, 2026
v11.4.0September 27, 2026
v11.3.0September 26, 2026
v11.2.0September 26, 2026
v11.1.0September 26, 2026
v11.0.0September 26, 2026+6 internal
feat
web deploys PUT a 1280x800 JPEG of staging/production; a failed capture is a screenshot-failed event
68e6d0c7refactor
move deploy screenshot routes out of projects.js to keep it under the 500-line limit
f13fbcfdfeat
deploys store a site screenshot per environment -- PUT/GET /api/projects/:id/screenshot/:env (migration 0022), advertised as screenshot_url on deploy_targets
88499ad7v10.3.0September 26, 2026+1 internal
v10.2.0September 26, 2026+4 internal
v10.1.0September 26, 2026
v10.0.0September 26, 2026+5 internal
refactor
svelte-check regression was missing generated Astro types in a fresh worktree, not code
83139ab3refactor
svelte-check regression was missing generated Astro types in a fresh worktree, not code
0d177dd2feat
board tasks store the agreed mockup (migration 0021, POST/PATCH accept it); category test no longer breaks on later columns
cb99baa5feat
POST /api/tickets files a full ticket into planning, 422 with named defects below the standard
d1654072v9.13.0September 26, 2026+4 internal
v9.12.0September 26, 2026+4 internal
feat
SEO audit maps internal links -- depth, inbound count and anchors per sitemap page, orphans as issues
89889a61feat
a board row with cancel_requested kills the running agent, removes its worktree and branch, and the runner merges nothing when its spawn returns
b3e842cdfix
(overview) the status strip keeps its size while it loads -- a layout shift made the 390px chat spec flaky
70a25c52feat
(board) a large readable ticket sheet, brief tickets in Planning, a GitHub link, and a countdown on the current cadence
6eb459a8fix
(api) xswarm.ai's own icon is read through the asset binding -- it lost its icon to a self-fetch
b532c78cv9.11.0September 26, 2026+2 internal
feat
(ui) generated reports render as document cards -- page thumbnail, title, date, one-line summary, details and PDF
8fead110v9.10.0September 26, 2026+6 internal
feat
(chat) hovering or focusing a speaker avatar shows a persona card -- sketch, name, role, expertise -- clamped inside the viewport
82090d3afix
(ui) no project Workers tab (workers are account-wide), a "Plans" tab, and a Tickets page stacked as work flows
998b30ddfix
(plan) reader text scales with the screen in an 80-character column -- no third of the page left empty
98e7172arefactor
workers page loads its header with the short plan-page idiom, ending the duplicated script block
24d7f029feat
(ui) a Workers tab in the project -- one card per machine with cores, RAM, CPU and memory meters and its running ticket
66f219ecv9.9.0September 26, 2026
feat
(plan) the Plan page is a reader -- sticky index, the document at full height, no leaked front matter
a27574a1v9.8.0September 26, 2026+2 internal
fix
(ship) staging reports what it serves -- the Staging tab showed a build from September 12
64034e7brefactor
(ui) the embossed label plate is theme tokens, not colour literals copied into three components
6a11c22efeat
(publish) a stage-audit finding that holds the release files one urgent fix ticket per file:line
b519b966fix
(sync) a ticket not yet on the board is not "deleted on the board" -- only a ticket the board has shown us
e6aad690v9.7.0September 26, 2026
feat
(ticket) xswarm task file -- a ticket filed to the standard, refused below it; the skill's submit path
7d852e32v9.6.0September 26, 2026
feat
(overview) a compact status strip above a BA-led meeting, and a Tickets box the discussion fills
7359a370v9.5.0September 26, 2026
fix
(ship) the stage audit retries its network calls and holds with a reason -- a blip crashed the 20:40 ship
6a733509v9.4.0September 26, 2026
feat
(tickets) the Tickets page is three vertical sections of ticket objects -- planning, in development, deployed
0811b82cv9.3.0September 26, 2026
v9.2.0September 26, 2026
feat
(release) the CI page's cadence governs the runner, and continuous is one of its choices
6a1fe65ev9.1.0September 26, 2026+2 internal
v9.0.0September 26, 2026+6 internal
fix
(ship) ignore the stores' SQLite journal -- a mid-transaction journal held the 18:59 release
d6b20d98feat
(ship) a partial audit on staging before production -- a release is held on a finding in what it changed
21ab0131feat
(publish) a 10-minute release window from the first landing -- later landings wait for the next
89a032e7feat
(tickets) the Tickets page is a ledger of ticket strips -- coloured stock, perforated dividers, the name on the stub
7c1ceb4efeat
(board) tickets are real roll tickets -- torn stock by kind, a name in worn ink, stub punches, click for the sheet
13db373cfix
CI explanation and ticket title cells set font-sans, overriding the panel's Share Tech Mono
5657dc87refactor
svelte-check regression was a missing generated .astro/types.d.ts -- astro sync restores 5 warnings, 0 errors
f6193e28feat
tasks carry a category -- column, migration 0020, POST validates it against the schema enum
1247cb1fv8.3.0September 26, 2026+2 internal
fix
(merge-queue) a red trunk is not the ticket's fault -- re-run the named test at trunk before recoding
6078bef6fix
(board) restore the #ref serial and pin ticket stock in the unit test -- 86b01d44 left trunk red
131fb165fix
(tabs) six project tabs -- no Studio or Planning; the Overview opens Studio in its own browser tab
934996a9feat
(board) cards are printed ticket stock -- cream paper, letterpress ink, perforated stub with the serial
86b01d44v8.2.0September 26, 2026
v8.1.0September 26, 2026+6 internal
fix
Reports KPI labels, meta line, buttons, delta and trend tags use --cd-size-caption (12px)
9e2e83cffeat
board columns sit on --color-surface and cards on --color-surface-hover, with neutral edges and a secondary-ink count
320f31b3feat
(release) a release cadence per project, an urgent fix ushered through, and a hold while one is in flight
9ef32526feat
panels sit on --color-surface with a neutral --color-border edge; footer box keeps its green
efacc7e4v8.0.0September 26, 2026+7 internal
feat
drop PostHog script and env; platform analytics page points to Cloudflare Web Analytics
df87a5afv7.0.0September 26, 2026+2 internal
v6.9.0September 26, 2026+1 internal
v6.8.0September 26, 2026
v6.7.0September 26, 2026
v6.6.0September 26, 2026
v6.5.0September 26, 2026
v6.4.0September 26, 2026
v6.3.0September 26, 2026+2 internal
v6.2.0September 25, 2026+2 internal
v6.1.0September 25, 2026+7 internal
v6.0.0September 25, 2026+8 internal
fix
tickets-retry spec advances page.clock past the 5 s retry instead of waiting 20 s of wall time
6e64dae1refactor
give github_installations a write path -- POST /api/github/installations records an installation only when GitHub reports it on the caller's own GitHub login
7c37befdfix
mint GitHub tokens and write workflows only for installations the caller set up -- new github_installations table, checked before any GitHub mint
221d392ev5.59.0September 25, 2026+2 internal
fix
relay keys each room by the caller's own resolved project id, so a slug equal to another tenant's UUID no longer joins their room
6161e2afv5.58.0September 25, 2026+6 internal
fix
project overview and planning chat take the viewport below 1024px instead of sharing one with the header
88165958fix
(theme) faint dashboard text clears 4.5:1 -- retune --color-text-muted, move --cd-ink-faint and --cd-pending into theme.css
e159d2bffix
(e2e) workspace-status, project-single-socket and kanban-thread-delivery advance page.clock past their page timers instead of waiting for them
c04c206cv5.57.0September 25, 2026+5 internal
v5.56.0September 25, 2026
v5.55.0September 25, 2026+1 internal
v5.54.0September 25, 2026+2 internal
v5.53.0September 25, 2026+8 internal
v5.52.0September 25, 2026+2 internal
v5.51.0September 25, 2026+3 internal
v5.50.0September 25, 2026+2 internal
v5.49.0September 25, 2026+4 internal
v5.48.0September 25, 2026
v5.47.0September 25, 2026+6 internal
v5.46.0September 25, 2026
feat
(tickets) one ticket standard -- the ticket skill, and a reviewer every writer passes through
ff91d0aev5.45.0September 25, 2026+4 internal
v5.44.0September 25, 2026+2 internal
v5.43.0September 25, 2026+4 internal
v5.42.0September 25, 2026+5 internal
feat
TerminalView shows No session attached until terminal output arrives, drops [connected], sends no input before then
027e84abv5.41.0September 25, 2026+7 internal
feat
DocumentReader strips leading YAML front matter; description is the fallback summary; empty body shows a note
b0ab3e65refactor
svelte-check regression was a missing astro sync in the fresh worktree, not this change
f60cfe09fix
(e2e) workspace-status gives island hydration 20s on a cold tree; the 5s claim still starts when the header renders
4908e7c6feat
last_activity_at is the newest of session last_seen, max(tasks.completed_at) and deploy deployed_at
b99c4c0ev5.40.0September 25, 2026+4 internal
feat
Live Activity falls back to recent ticket moves from /api/tasks when the event backlog is empty
b563a3b0v5.39.0September 25, 2026+23 internal
feat
Settings renders /api/keys with created/last-used dates and a confirm-then-DELETE Revoke
585f67dcfix
(platform) config report asks the web hosts so each session cookie goes, and never reads clear unmeasured
cfb1af3bfeat
platform analytics shows a PostHog not connected notice in place of the '--' mockup and dead Refresh/Export buttons
978a1ba9feat
billing buttons POST checkout/portal and follow the Stripe URL; hidden when Stripe is not configured
5cd566cdfix
(worktree) --no-track, so two slots opening worktrees at once do not fight over .git/config
61ea4f25feat
visual-repro --rebaseline re-takes only the triage's rebaseline routes via an anchored --grep, records rebaseline.json
7d207947perf
(pipeline) a freed slot takes the next ticket at once instead of waiting for the slowest
97f28ef0v5.38.0September 25, 2026+2 internal
v5.37.0September 25, 2026+2 internal
v5.36.0September 25, 2026+2 internal
v5.35.0September 25, 2026+2 internal
v5.34.0September 25, 2026+2 internal
v5.33.0September 25, 2026+2 internal
v5.32.0September 25, 2026+3 internal
v5.31.0September 25, 2026+2 internal
v5.30.0September 25, 2026+2 internal
fix
Reports colours a crashed check's row and trend with var(--color-error) instead of the healthy green
4262a7b5v5.29.0September 25, 2026+2 internal
v5.28.0September 25, 2026+2 internal
v5.27.0September 25, 2026+2 internal
feat
planOne reads the ticket's thread (GET /tasks/:id/messages) into the re-plan prompt and records the message ids as evidence.threadRead; the run loop wires it
52d6b6bdv5.26.0September 25, 2026+2 internal
fix
dev-preview-project-token waits for the WorkspaceView island to mount before clicking the toggle, whose one-shot event a late island never hears
72cf2d0afeat
the relay room remembers each delivered question and the foreman's complete reply in Durable Object storage and answers chat:history with them, oldest first
3385414av5.25.0September 25, 2026+2 internal
feat
the runner's foreman stores its answer to a queued chat message and marks it delivered; the API forwards it to the room's /foreman path instead of a 404ing /noop
4c4b7105v5.24.0September 25, 2026+2 internal
v5.23.0September 25, 2026+2 internal
v5.22.0September 25, 2026+2 internal
feat
Worker Status shows each offline machine's last-seen time and a copyable npx xswarm run when none is online
db5be709v5.21.0September 25, 2026+3 internal
fix
Workspace view mounts a DevPreview only for the selected tile, so the dev-token and frame are that project's
7ab0b75fv5.20.0September 25, 2026+2 internal
v5.19.0September 25, 2026+2 internal
feat
thread messages show author, time and 'waiting for foreman'/'read by foreman'; open waiting thread re-read every 3s so the reply lands
e4d0f0e4v5.18.0September 25, 2026+2 internal
fix
Workspace 'Open →' and 'Full View →' link to /dashboard/projects/:id/workspace, the page that exists
7ff3cda7v5.17.0September 24, 2026+2 internal
feat
foreman answers ticket threads -- API forwards thread:message to the room, /tasks/unanswered backlog answered on connect, replies posted as author foreman
cb331c56v5.16.0September 24, 2026+2 internal
feat
room replays worker:status online to joining dashboards and broadcasts offline when the last foreman drops
186ee696v5.15.0September 24, 2026+2 internal
feat
chat header dot follows foreman:presence -- grey 'foreman offline' until the room says the foreman joined
c3394427v5.14.0September 24, 2026+2 internal
v5.13.0September 24, 2026+2 internal
v5.12.0September 24, 2026+2 internal
feat
project page shows the foreman online with its machine, or a Foreman offline banner with npx xswarm run and Copy
f2847572v5.11.0September 24, 2026+3 internal
v5.10.0September 24, 2026+6 internal
fix
(foreman) a reserved agent slot, so the owner is answered while every ticket slot is busy
4b3a8c55fix
(studio) resume dev-preview polling when a reload finds 'starting'; error state offers Try again
9c8b973afix
(board) a running ticket sits in its live step's column; cards say what the agent is doing
5c71df6efix
(workspace) dial the dashboard relay route and show foreman presence, not Connecting... forever
34a1becffeat
(foreman) the runner is the foreman -- it answers the dashboard chat and files tickets; worktrees stay out of scans
53fd0160v5.9.0September 24, 2026
v5.8.0September 24, 2026+2 internal
feat
poll /build-info.json each minute and on tab-visible, reload on a new gitSha once no text field is focused or holding text
665a5e00v5.7.0September 24, 2026+2 internal
v5.6.0September 24, 2026+2 internal
fix
abort() kills the agent's whole process group, sharing one killGroup with the budget timer
662b00aev5.5.0September 24, 2026+2 internal
v5.4.0September 24, 2026+2 internal
v5.3.0September 24, 2026
fix
(pipeline) stopped tickets become actionable -- gate-format failures recode, the planner defaults decisions to the owner
bc40b816v5.2.0September 24, 2026+1 internal
v5.1.0September 24, 2026+4 internal
v5.0.0September 24, 2026+2 internal
v4.27.0September 24, 2026
v4.26.0September 24, 2026
v4.25.0September 24, 2026+2 internal
feat
pushProgress creates a never-seen local ticket under its own id; POST /tasks accepts an id
b2104b8dv4.24.0September 24, 2026+2 internal
v4.23.0September 24, 2026+2 internal
v4.22.0September 24, 2026+2 internal
feat
machineVitals rows CORES/RAM/DISK/LOAD drive the worker monitor; absent reads 'not collected'
284a5570v4.21.0September 24, 2026+2 internal
v4.20.0September 24, 2026+2 internal
v4.19.0September 23, 2026+2 internal
v4.18.0September 23, 2026+2 internal
v4.17.0September 23, 2026+2 internal
feat
worktreePreviewState reads a worktree's preview from the registry, reporting 'stopped' when its pid is dead
25c6b0e9v4.16.0September 23, 2026+2 internal
v4.15.0September 23, 2026+2 internal
v4.14.0September 23, 2026+2 internal
feat
recordEvidence attributes every proof key; dispatch names observeRedGreen, attempt and branch tip for red/green
5db1e639v4.13.0September 23, 2026+4 internal
v4.12.0September 23, 2026
fix
(board,release) only running tickets occupy working columns; production never shows 'unreleased'
8542a1afv4.11.0September 23, 2026
v4.10.0September 23, 2026+2 internal
v4.9.0September 23, 2026+2 internal
v4.8.0September 23, 2026+4 internal
v4.7.0September 23, 2026+2 internal
v4.6.0September 23, 2026+2 internal
v4.5.0September 23, 2026+2 internal
v4.4.0September 23, 2026+2 internal
v4.3.0September 23, 2026+2 internal
feat
brittleSelectors -- class-chain locator/$/waitForSelector strings reported by file:line
7d6e0c97v4.2.0September 23, 2026
v4.1.0September 23, 2026
fix
(stop-hook) worker instructions go only to sessions the pipeline marked, never by location
ea2f3ba5v4.0.0September 23, 2026+48 internal
fix
(deploy) a staging build already serving the sha counts -- no 7.5 min wait for a rebuild that never comes
1480e6f6fix
(publish) a sync-job state commit can never hold the release again, and a held release shows on the board
280cd078feat
unscoped GET /tasks filters to owned projects in SQL and reports X-Total-Count, X-Withheld-Count, X-Limit-Applied (clamped ?limit=)
f0ae6793feat
deploy event reason keeps each line's final \r frame and drops repeated spinner lines, rendered before the tail slice so the cause survives
29d7f19afeat
print-only xSwarm header with live URL; print tables fixed-layout with wrapping cells, no overflow-x auto
9a3580bcfeat
(triage) baseline option splits known causes out of tickets, tickets carry their signature
abde2801feat
refactor prompt demands Applied:/Not applied: lines; refactorPass refuses a blank standard
db490439feat
meshNote explains a missing console link; workers card renders it as .worker-mesh-absent
6a83c156feat
platform audit names hono/cookie getCookie and c.json(); git ls-files runs as a literal command, not an interpolated template
2012390efeat
openingMessage (Barry asks the phase question) and spokenFrom (speakers from chat messages)
e459d5defeat
GET /tasks derives board_column from the evidence in test_results, never from the stored row
4f602d9afeat
xswarm task purge --synthetic deletes non-UUID rows from the local store and prints the count
ccd52315feat
xswarm clean --global lists leftovers outside the repo with sizes and removes them on --yes
0d26a092feat
open task worktrees under <repo>/.xswarm/local/worktrees; gate, reaper and live feed recognise the new layout
a9d4ee07feat
delete coordinator loop, prompt and runtime (and their tests) and unwire them from daemon-entry
1a991eacfeat
publish reads production's sha before the ship and records deployPromotion {from, to, promotedAt} via markPublished
92808e8ffeat
chat history jumps to newest message; architect speaker labelled; unkeyed list tolerates shared ts
7a9124f2v3.60.0September 23, 2026
feat
(pipeline) tickets run concurrently up to the cap, merges one at a time; live feed per ticket
b790504fv3.59.0September 23, 2026+2 internal
feat
standingOf reports queue position from selectNext's order, or implemented-awaiting-deploy
9e600260v3.58.0September 23, 2026
v3.57.0September 23, 2026+2 internal
v3.56.0September 23, 2026
v3.55.0September 23, 2026
v3.54.1September 23, 2026+2 internal
v3.54.0September 23, 2026+2 internal
v3.53.0September 23, 2026+2 internal
v3.52.0September 23, 2026+2 internal
v3.51.0September 23, 2026+2 internal
v3.50.0September 23, 2026+2 internal
v3.49.0September 23, 2026+2 internal
v3.48.0September 23, 2026+2 internal
v3.47.0September 23, 2026+2 internal
v3.46.0September 23, 2026+2 internal
feat
(lighthouse-audit) runRecord/notRunRecord carry timestamp, commit and scores, or not_run with a reason
ccebb75bv3.45.3September 23, 2026
fix
(commit) a failed pipeline commit still names work the branch already holds; its reason is kept
48ab6ba7v3.45.2September 23, 2026
fix
(dispatch) restore the ticket's test only when test cases were deleted, not when lines were edited
0e8022f6v3.45.1September 23, 2026
fix
(merge-queue) the candidate suite waits for an in-flight ship instead of timing out beside it
77b01447v3.45.0September 23, 2026+2 internal
v3.44.1September 23, 2026
v3.44.0September 23, 2026+4 internal
fix
(run) wait for the in-flight publish before closing the store, so shipped tickets get their deploy proof
feab2a4bv3.43.0September 23, 2026+2 internal
v3.42.1September 23, 2026
v3.42.0September 23, 2026+2 internal
v3.41.2September 22, 2026
v3.41.1September 22, 2026
v3.41.0September 22, 2026+2 internal
v3.40.0September 22, 2026
v3.39.1September 22, 2026
fix
(pipeline) unplanned tickets are left out of the CLI queue, not refused one pass at a time
79b14216v3.39.0September 22, 2026
v3.38.0September 22, 2026+2 internal
v3.37.1September 22, 2026
v3.37.0September 22, 2026
v3.36.1September 22, 2026
v3.36.0September 22, 2026+1 internal
v3.35.3September 22, 2026
v3.35.2September 22, 2026+2 internal
v3.35.1September 22, 2026
v3.35.0September 22, 2026+11 internal
refactor
(machine-identity) the OS tests say the whole string, and one of them could not pass
0abf3225v3.34.0September 21, 2026+4 internal
feat
(pipeline) an agent can refuse an impossible ticket, and the store can be asked instead of guessed at
b8bd9bafv3.33.0September 21, 2026
v3.32.1September 21, 2026+1 internal
v3.32.0September 21, 2026+1 internal
v3.31.2September 21, 2026+1 internal
v3.31.1September 21, 2026+2 internal
fix
(tmp) our own tests leaked a million inodes, and a full disk became a verdict on a ticket
ddb0f223v3.31.0September 21, 2026+3 internal
fix
(api) the second stage model gave a different answer to the first, and nobody had asked it yet
fe6f4a08feat
(probe) cover the changed-paths class, and stop paying for the proof when nothing is dispatched
8fd2fdebfix
(dispatch) a ticket could be stripped of all twelve stage proofs and still hold the red/green pair
82d452bdfix
(deployed) 80 tickets are "verified live in production" and nothing can see that they are not
dec80e68v3.30.0September 20, 2026
fix
(pipeline) a commit that never happened was recorded as a commit, and 26 tickets shipped nothing
47a8ae86v3.29.0September 20, 2026+1 internal
v3.28.1September 20, 2026
v3.28.0September 20, 2026
v3.27.1September 20, 2026+1 internal
v3.27.0September 20, 2026+1 internal
v3.26.5September 20, 2026+2 internal
v3.26.4September 20, 2026
v3.26.3September 20, 2026+1 internal
v3.26.2September 20, 2026
v3.26.1September 20, 2026
v3.26.0September 20, 2026+1 internal
v3.25.1September 20, 2026
v3.25.0September 20, 2026
v3.24.0September 20, 2026
v3.23.0September 20, 2026+1 internal
v3.22.3September 20, 2026
v3.22.2September 20, 2026
v3.22.1September 20, 2026
v3.22.0September 20, 2026+11 internal
v3.21.1September 19, 2026+3 internal
v3.21.0September 19, 2026+1 internal
v3.20.1September 19, 2026
v3.20.0September 19, 2026
v3.19.0September 19, 2026+3 internal
v3.18.0September 19, 2026+1 internal
v3.17.0September 19, 2026+1 internal
v3.16.0September 19, 2026+1 internal
v3.15.0September 19, 2026+1 internal
v3.14.2September 19, 2026
v3.14.1September 19, 2026+2 internal
v3.14.0September 19, 2026+1 internal
v3.13.0September 19, 2026+1 internal
v3.12.0September 19, 2026+3 internal
fix
(deploy-sweep) "why isn't my ticket live?" was the one question the board could not answer
e817ac03v3.11.0September 18, 2026+1 internal
feat
(chat) a highlighted element now rides along on the message — and a ReferenceError I shipped
ab3f757fv3.10.1September 18, 2026
v3.10.0September 18, 2026
v3.9.0September 18, 2026+79 internal
v3.8.0September 15, 2026+1 internal
docs
the pipeline repair plan — work on the box, fix the first failing step, never work around it
5f9dee87v3.7.2September 14, 2026
v3.7.1September 14, 2026
v3.7.0September 14, 2026
v3.6.3September 14, 2026
v3.6.2September 14, 2026
v3.6.1September 14, 2026
v3.6.0September 14, 2026
v3.5.2September 14, 2026
v3.5.1September 14, 2026
v3.5.0September 14, 2026
v3.4.0September 14, 2026
v3.3.1September 14, 2026
v3.3.0September 14, 2026
v3.2.4September 14, 2026+1 internal
v3.2.3September 14, 2026
v3.2.2September 14, 2026
v3.2.1September 14, 2026
v3.2.0September 14, 2026+1 internal
v3.1.0September 14, 2026+76 internal
v3.0.136September 12, 2026+1 internal
v3.0.135September 12, 2026+1 internal
v3.0.134September 12, 2026+1 internal
v3.0.133September 12, 2026+2 internal
v3.0.132September 12, 2026+1 internal
v3.0.131September 12, 2026+1 internal
v3.0.130September 12, 2026+1 internal
v3.0.129September 12, 2026+4 internal
v3.0.128September 12, 2026+4 internal
v3.0.127September 12, 2026+5 internal
v3.0.126September 12, 2026+1 internal
v3.0.125September 12, 2026+1 internal
v3.0.124September 12, 2026+1 internal
v3.0.123September 12, 2026+61 internal
v3.0.115September 11, 2026+2 internal
fix
(dashboard) the context gives way when the viewport cannot afford both it and the chat (#144)
21beae63v3.0.114September 11, 2026+3 internal
v3.0.113September 11, 2026+1 internal
v3.0.112September 11, 2026+3 internal
v3.0.111September 11, 2026+1 internal
v3.0.110September 11, 2026+1 internal
fix
(rollup) sessions were written by slug and read by id, so Health said Unknown 42 times (#147)
e047f499v3.0.109September 11, 2026+2 internal
v3.0.108September 11, 2026+2 internal
v3.0.107September 11, 2026+1 internal
v3.0.106September 11, 2026+4 internal
v3.0.105September 11, 2026+2 internal
v3.0.104September 11, 2026+4 internal
v3.0.103September 11, 2026+2 internal
perf
(projects) render the table from cache, and show the signal that was already there (#140)
22a3c2fav3.0.102September 11, 2026+1 internal
v3.0.101September 11, 2026+1 internal
fix
(dashboard) the hard-coded viewport offset caused the overflow it was meant to prevent (#139)
23dc1ea5v3.0.100September 11, 2026+1 internal
v3.0.99September 11, 2026+1 internal
v3.0.98September 11, 2026+2 internal
v3.0.97September 11, 2026+1 internal
v3.0.96September 11, 2026+1 internal
v3.0.95September 11, 2026+1 internal
v3.0.94September 11, 2026+1 internal
v3.0.93September 11, 2026+2 internal
v3.0.92September 11, 2026+1 internal
v3.0.91September 11, 2026+1 internal
fix
content-hash discriminator + repair tool for the stale-shared-checkout class of bugs (#135)
e5a6f59bv3.0.90September 11, 2026+1 internal
v3.0.89September 11, 2026+1 internal
v3.0.88September 10, 2026+1 internal
v3.0.87September 10, 2026+1 internal
v3.0.86September 10, 2026+1 internal
v3.0.85September 10, 2026+1 internal
v3.0.84September 10, 2026+1 internal
v3.0.83September 10, 2026+1 internal
v3.0.82September 10, 2026+1 internal
v3.0.81September 10, 2026+1 internal
v3.0.80September 10, 2026+1 internal
v3.0.79September 10, 2026+2 internal
fix
(security) clear all 5 high advisories -- wrangler was pinned four times at three versions
07d1ed15v3.0.78September 10, 2026+1 internal
v3.0.77September 10, 2026+1 internal
v3.0.76September 10, 2026+1 internal
v3.0.75September 10, 2026+4 internal
v3.0.74September 10, 2026+1 internal
v3.0.73September 10, 2026+1 internal
v3.0.72September 10, 2026+1 internal
v3.0.71September 10, 2026+5 internal
v3.0.70September 10, 2026+1 internal
v3.0.69September 10, 2026+1 internal
v3.0.68September 10, 2026+2 internal
v3.0.67September 10, 2026+3 internal
v3.0.66September 10, 2026+1 internal
v3.0.65September 10, 2026+1 internal
v3.0.64September 10, 2026+1 internal
v3.0.63September 10, 2026+4 internal
v3.0.62September 10, 2026+1 internal
v3.0.61September 10, 2026+4 internal
v3.0.60September 10, 2026+1 internal
v3.0.59September 10, 2026+2 internal
v3.0.58September 10, 2026+3 internal
v3.0.57September 10, 2026+1 internal
v3.0.56September 10, 2026+2 internal
v3.0.55September 10, 2026+2 internal
v3.0.54September 10, 2026+3 internal
v3.0.53September 10, 2026+2 internal
v3.0.52September 10, 2026+1 internal
v3.0.51September 10, 2026+1 internal
v3.0.50September 10, 2026+1 internal
v3.0.49September 10, 2026+2 internal
v3.0.48September 10, 2026+1 internal
v3.0.47September 10, 2026+1 internal
v3.0.46September 10, 2026+1 internal
v3.0.45September 10, 2026+2 internal
v3.0.44September 10, 2026+1 internal
v3.0.43September 10, 2026+1 internal
v3.0.42September 10, 2026+1 internal
v3.0.41September 10, 2026+4 internal
v3.0.40September 10, 2026+1 internal
v3.0.39September 10, 2026+2 internal
v3.0.38September 10, 2026+13 internal
v3.0.37September 10, 2026+1 internal
v3.0.36September 10, 2026+1 internal
v3.0.35September 10, 2026+5 internal
fix
Lighthouse — contrast, dead sitemap path, unused analytics bundle, and a gate that could not tighten
ab95a1b8v3.0.34September 10, 2026+4 internal
v3.0.33September 10, 2026+1 internal
v3.0.32September 10, 2026+5 internal
v3.0.31September 10, 2026+5 internal
v3.0.30September 10, 2026+10 internal
v3.0.29September 10, 2026+2 internal
v3.0.28September 10, 2026+5 internal
v3.0.27September 10, 2026+6 internal
v3.0.26September 10, 2026+214 internal
docs
five product docs Chad asked for -- coordination, guardrails, setup, daily workflow, integrations
379e2a4fv0.29.3July 7, 2025+2 internal
fix
Replace double quotes with single quotes in data attributes to prevent HTML parsing errors
a3dce25b