Releases
v1.1.0
Compare
Sorry, something went wrong.
No results found
Changelog
3c1dae2ecf010248f334bd14cb56a7e57e0d1e4c Fix self-test workflow install on private repo (#32)
75ce076a0d89979d1e2511b14316a7b45c6311e4 Fix share rail spacer width
0baf4724ecdf3d74bc46c3c5866943e6b6183c5e Reserve layout space for the fixed share-rail so it can't cover the report
6018e8ce91a63b8e063cd5daa30b065ea5e5d15f Route CLI billing through web app
48d10f51b26b9be2b1ec296a0a6d305115fb7692 Sitemap: add blog article URL (best-usability-testing-tools-2026)
fa184e547ee3637c2e284ed3e4587aead2f076ac agent growth hack: richer llms.txt + agent-only CTA (30 free credits)
44f7855d3df2ba09519aa243d09e1aa244e196e1 bd: init task tracking with bd CLI
05018a1bb584db5cdeb5d583bb20498c758a1739 billing: show beta-pricing strikethrough on credit packages (#29)
5e37d0c278567b37f1d7e7bcf467b66d2a26907b blog: add /blog route with first article (best usability testing tools 2026)
be7d957f1fd1848167412db694566d6b67ec958b blog: fix post routing + canonicals (chi.Mount prefix), app robots.txt AI-crawler allows, /blog redirects, homepage JSON-LD
97e84fd08077fda05ff2704521d5893bb3750958 blog: rewrite best-usability-testing-tools guide (14 tools, evidence model, decision framework); date 2026-08-20
a972da4ac3e83988a9fd1122ba20dd03cc8e4f8d blog: serve /blog on the apex via Pages Function instead of 301 to the app
6de057b2a428aab78981047714c449f3df978bc1 browserpool: raise Chrome container limits to 2GB / 2 CPU
2fb5849fc9724805ccd4a30efd80674922be18f0 chore(growth): remove superseded outreach intermediates, keep learnings (#46)
1e6d96b5a1f241c85fae9889f8872c344d6d8ec7 chrome pool: pin image default + correct docs (stop recommending :latest)
b5389c7e79a11aa5482882c84c2344cf2c0686c6 ci(api-types): compare DTO field names, not only type names
059a53bf7e6f4a4b4e1a678170fcee8ab284b648 ci(deploy): run the Postgres-backed tests on the merge commit
1f1f68698f9fd62051872c23d2328d02719de7d1 ci: automated, versioned deploy pipeline (replace manual on-box builds) (#25)
3e61069715e5c5ead7229c42b281e2c3a792c79e ci: drop the MinIO container from the smoke and deploy test jobs
ba198cada144d8eede1dc11d1192a7ab694edec4 ci: move self-test specimen off the Bot-Fight-Mode zone; name the block cause
e006442c68a7a7acfcc9b1b0346091ed5ffed8fe ci: point pnpm/action-setup at web/package.json for the pnpm pin (#26)
dc8575d3148bcd66e350ade743fba21385fcbd99 de-slop OG + meta descriptions: cut 43%, kill AI verb lists and persuasion
be8121c601f2bdaf07bdf682c80de8ecead6aa69 docs(cli): GHCR public image is optional, not a launch blocker (#27)
ff9d7762a9987553a4af187019d7fc3758bd3030 docs(cli): pin example templates to the init scaffold's compact --json --quick form
9301e05d43506c16cc1eb5140b065e829bad05b9 docs(cli): read entry_block where the CLI prints it; move cookbook recipes to --json
5c2508257e3ba92546a2a55eed25f7a0cc48ba93 docs(growth): add end-to-end runbook overview, reconcile share-link flow (#24)
d781fad2e3746e29fddfdceebf24a0ce82172860 docs(growth): add reply playbook from live LinkedIn outreach results (#57)
9b785de8decb9a1fe091c1f65db231a96dc78f1d docs(jobs): name every table retention cleanup deletes from
ea057068e3b63ebe11328fe44e3b141e1d41bc71 docs(llms): make the first call print JSON and name the real envelope fields
ce10ed109488e5b5ef0b8b3b687eb1d022b6df9a docs(llms): serve one canonical agent doc and parse its commands in CI
1ce5e8626043b21314538008a765352dcae781cc docs(retro): add QA-survey findings — assertion-free self-test, untested review pkg (#49)
cd86c846c61993641c2f818d1b957698cac6a295 feat(action): composite GitHub Action for UX checks in CI
652001aab9188d76b4ce0f0f7410324452647775 feat(activation): retryable failed runs + server-side founder alerts (#44)
df41fa0256f3c8d9e69999dfa22736cfb34f31f4 feat(agent): external-site links are out of scope; embed failures reported neutrally (#50)
ed6d79333c899eeccba316e36b66951cae758171 feat(analytics): PostHog event wiring + Telegram webhook bridge (Phase 1+2) (#38)
21eb474c3be5e0f7e02629f4f19133e8ad3a231a feat(analytics): first-party PostHog reverse proxy at /ingest (#37)
444c15e60be8459006c409a09e9335c8c392f80f feat(api): add apitypes.ExplorationSummary, the compact exploration view
d7e0b7e9135eda7d86e99f60ea370b4ca157e879 feat(api): agent-actionable 402 + url filter on run listing
047081977a89f66005edc3b078db30d5dd9929c8 feat(api): serve apitypes.ExplorationSummary as format=summary for exploration runs
ecdc1960ae719c4b4ca33c5775cff1f7a689cb93 feat(cli): --quick preset, CI assertions, run deltas, and MCP server
e39f54e7d1d37f2a4b36c0ded59b1472fd01246f feat(cli): AI agent ergonomics — tools schema, json error hints, stdin input, agent-setup
e463c55b204168490cbf4aca123b42ec80fbc848 feat(llm): count LLM tokens, calls and latency per attempt
47257582d4265def33dd55eccfb439cb6a4f5bbe feat(marketing): add Pricing nav links to topbar + footer
8605458c96d1dbf83842baeac8fdffb21320cd55 feat(marketing): reposition landing for agencies/CRO + founding Agency tier (#45)
0f6a4680a40d8a7ed5558a51bf172dd56b6b2040 feat(share): inject "Powered by Boidwatch" CTA at serve time on /r/:token (#28)
7fccd62a954e40f3bd92fcbc050fcec7d95b5105 feat(share): viral share surface — conversion rail, OG Augury Card, SPA share panel (#41)
14d10d6291d7d0bea1120fb94adb34459c24a2b0 feat(web): in-context checkout rail for blocked and low-balance users
9b26d47b77c87e8ea407094149bdb208beb5bd59 feat: AI agent adoption — boidwatch init, docs, CI, scaffold examples
424a46824080b2d15107f63ed0295de47186c1c8 feat: add /llms.txt endpoint for AI crawler discovery
e0baca516d5eaa4d0c51e2d472ffec06a2b9058e feat: add 5 missing stealth patches (webgl, vendor, codecs, chrome.app, outerdims)
23e38c215e26bf7f81f982cf976001b21f943898 feat: add CHROME_PROXY_URL support for residential proxy routing
968deaa6981353e5c54f6e9fecfbce9627c36102 feat: add Cloudflare anti-detection stealth layer for headless Chrome personas
2d6187f367a308fd5cb13eaf9d9925746c868276 feat: add llms.txt to marketing site
5fea8d5f7850faa376555f74c6010a067c35cc33 feat: beta analytics stack + 33% pricing strikethrough + doc alignment (#30)
ed7e0be1d87e9d061e88412b1867ef9dcc8b050e feat: direct Telegram alerts for runs, purchases, shares
75c82f63c2b9c863ee5204d321d5cd2eaa2ad9ea feat: instrument sample-report activation funnel
d67d448a689d5d5a3f364ce635318f0a21146c80 feat: pre-seed sample report on dashboard to fix 50% activation cliff
07c2a802ebc3b693feb6cfc9e12c51e4a271e787 feat: proxy auth via CDP Fetch.authRequired (Chrome can't inline HTTP proxy credentials)
f2a94046e4861d7cf9b56ce1ff10c6edcbfc7e94 feat: proxy relay for Webshare HTTP proxies (Chrome can't auth directly)
f12f7fd05aa2e3baa102d0acf70447cfec391556 feat: public run share links (GET /r/:token) for anonymous report sharing (#23)
9bc573df6a7de0023eb311f31d5936773b0a6d2f feat: resolve /terms and /privacy on the app origin; consent at signup
73aa413eaac2d73c87500e35c044ff3643dde213 feat: welcome email on signup (SendWelcome) for email-verify and OAuth paths
a43a91ace81672a9d365fe66f704b822dcec6db4 fix(action): download the GoReleaser archive and read the compact view
6e35e1c563c6385a11a41f3091d7f8f4b617b137 fix(action): fail a run no persona got past or whose gap analysis failed
8943b8c2d41d729b349759ef9fad1718e4c02295 fix(action): repair gate parsing and CI stubs
6baf77ac8f346479b05ee00795c1ddd4df65a5d2 fix(agent): normalize gap severity at the LLM boundary, failing closed
e42dc9550eb8f44c2ec8e2f92c4e8ed48ed23a20 fix(agent): skip DOM snapshots and network capture when nothing reads them
424b78709cb493543c18b38ca842176664612b16 fix(agent): stop misreporting new-tab links as broken (#48)
927f8fd71ca953e7c8dcbd00b4b727f9fcbfb7b7 fix(agent): wait for a navigation slot before starting the agent clock
ec008b971e6e23e7af48c0e13bd20632ae77c5a8 fix(analytics): capture initial $pageview + $pageleave in PostHog (#31)
75dad68bddaf450ab2593d3efced97a37ea4e2d8 fix(api): answer unknown /v1 routes with the error envelope
c703e86a595df94eb367f6268a56919eb06a5bb2 fix(api): bound the unknown-field warn log on run create
9f92d91a5d3a05d52b00074f05ca171b925c706b fix(api): estimate run time from the agent timeout; throttle last_used_at
361efc76fc01883e8560e3bcf18fab330a420681 fix(api): hide the synthesized sample run from API-key principals
d6a86031f0f63dc62cf294a6621efea535aab588 fix(api): make run cancel idempotent and never 500 on a terminal race
16cd81bf2cab9a46a46a200241da391abca82154 fix(api): make the run create boundary safe for raw-HTTP agents
6b21af573ea66004015e86793adb067af056edaa fix(api): never orphan an idempotency claim on panic or disconnect
ad5f82f57a8b5ffc7af9d4401f1891140199ba51 fix(api): write every error envelope through middleware.WriteError
9618fd09fb8d1f12473293a9fdcd3bf48d4ecaad fix(browserpool): scale idle Chrome instances down from a real idle-since time
f0b4c422aaff46b01f7aec4c49629a941181ce4a fix(cli): bound --wait, back off, and poll through transient errors
03c1c1d55cda5f869bac25ffea24178afdbc1adc fix(cli): exit 9 on an entry-blocked run with no --assert flag
e922097b3c9fb442774b7024c0dc2692300dea8b fix(cli): make boidwatch init scaffold a quick, bounded check that parses
8ea31493e76061a375e6a650ba55ac59f22ff2cc fix(cli): name the run and a resume command in every failure after create
a12f1164f2e8dd1c6d27b99aa0ddda8bf05b124a fix(cli): name the run in every failure after create; add run results --wait
47132f1aea02d733c1aca6cb5e4de1699e466265 fix(cli): one failure shape for every CLI error, found with errors.As
b75e5513f71f0ea54d01a46f531896342d8f4df5 fix(cli): point exit 7, 8 and 130 at the error's next command
946230c8854ce0208089eb141efc156d37479237 fix(cli): read run create target-site auth from a file or the environment
534969a8bf254f1c57a0d5265c823bf15cd7a592 fix(cli): read the server summary projection for checks in every mode
12d72ffd3fa9f5029d5e5ea221fd95c4901866bb fix(cli): reject --format table for run create and results before any POST
c1b8dcfc102b989f0f9c6b94c5cf1efd0baf4681 fix(cli): report retryable false when re-reading a failed run
d63e75eee976822e90fe4c5b90e5e88aae629b33 fix(cli): resume next with the caller's output mode, checks, wait budget and profile
6ecdd4cbbb3b5b020440a0fca5e023482cccdd01 fix(cli): return 429 at once and stop exit 6 advising a re-create
d0bd34e7d9d3922507579df003aa183cd15d6e15 fix(cli): take target-site auth only from --auth-json
15a2b04299d454d7f399ec6374b01c1ccae5a7c8 fix(cli): wait out a post-create 429 on the results fetch and resume
40d172654a6d54296a122f6857ce1e4d8c69b1ed fix(cliclient): parse Retry-After once and wait out IDEMPOTENT_REQUEST_PENDING
0d301b14d6dd969c9f2b9d4b33ec5d34a09e4148 fix(cliclient): reuse one Idempotency-Key across retries of a POST
8e5bed7a30daecb80d5d0016c8c1943e85e3b911 fix(cliformat): always emit retryable in the JSON error envelope
fe85510bba9e654419e453ad87d2253cf7f7a70f fix(comparison): label degenerate exploration reports degraded; skip empty sessions
84e567af34de4c950c57cf0e137d33d8ca989e2e fix(comparison): record gap_analysis_status where AnalyzeGap fails
0c29fb9a676ee8bf8329e0e72922d93fd75c7205 fix(csp): allow PostHog toolbar, brand fonts, and favicons (#36)
4060adc96080e15450ca51bf917398352081a322 fix(jobs): cancel the orchestrator job when its attempt failed the run
6e1e2e0b849a1fe205c0578fe3ad3f4134b1cd09 fix(jobs): delete expired rate-limit windows in retention cleanup
437b5a391cf1defc3fa1a172944c0594df3e7d5c fix(jobs): purge orphaned run screenshots on retention cleanup (#22)
cd0bf9b453d3ea5de2d89527aa9827bf7c072414 fix(llm): bound the model label on LLM metrics
21aefbb5aac287b3f4aa62ec9d2de1a2354f7016 fix(marketing): keep OG report claim exact
112080ec99ec3fbbf94400214c1408b47ac1d655 fix(marketing): keep topbar nav on one line
ef4f1be959d328a7d312b1add72e3edfcfcd2a75 fix(mcp): bound each tools/call with one deadline and name the run in every error
6152b0dac94004996ba360aea468d54810fa136a fix(mcp): return the error envelope before create and during an API outage
c9c47a858878d89a74bc9a047540bc35f9ae044a fix(mcp): return within a 45s budget and resume runs with get_results
4808cf76ab187c932b494774f5a4c6a4ba8f9810 fix(orchestrator): cancel the job when failRun finds the run already terminal
fec22c7de012545522527aa0a1f7af8214d1ddf2 fix(orchestrator): cap the collector's post-cancel wait on shutdown
4e541ff0e669ecad88668dd2c97370d85a451705 fix(orchestrator): cap the static collector's post-cancel wait on shutdown
8d314acaf0cd6746802f9c8be8145c2a53e1c5ee fix(orchestrator): decide exploration shutdown from the worker ctx, not the error
3b1478f24732855d98abfed1a7ebb4091275be76 fix(orchestrator): drain River on shutdown and resume interrupted runs
688f99b7abff656f90cb71eda9d8c8131d75687c fix(orchestrator): navigate only in the reachability check outside auto mode
3d53e4a524aa9c8e77cc781433b8d56d2653440a fix(orchestrator): persist each exploration session as it finishes; resume skips finished personas
d409a1863fd56a82555cf6f89100e0c609551b68 fix(orchestrator): reconcile refunds the terminal write missed
b13471c995bad080951553550e2ea76bbd727fd0 fix(orchestrator): route terminal failures through one writer that stores a typed code
9e23dc8af347ed22decd5f5cf9a3c8c0e0a3f137 fix(orchestrator): summarize sessions in parallel under a budget and resume without re-paying
47a1fcdd776ebf90db3e45c35d4b1ba82cc0fea6 fix(persona): deal stratified exploration personas one archetype at a time
b851176e9353b2fdc62121497851aedcd9698744 fix(proxyrelay): fall back to direct connection when all upstreams fail CONNECT (#39)
829cf78a5af343130ae67d70aa5f395f5555fc89 fix(server): enforce the idempotency TTL on claim and in retention
2756cbdf3954768f95b8c81b4b5e476100fbe688 fix(types): omit metadata.model_versions when empty
1fcd49531be7521792cc99d01f87cdd65d27bf78 fix(webhooks): emit run.failed from the terminal writer; reject events nothing emits
61d74a8be365337e9e0b8124b1bb5fd54363aba1 fix: add _redirects to serve llms.txt as static file (Cloudflare Pages SPA mode)
1343e18f416d83aab80f2aa69bc67e92ae3067c2 fix: align run and capture budgets with real work
730218994686a7e91987bba5e432237721b78b29 fix: close orchestrator resume gaps, guard empty dynamic reports, harden sweep
892bda7f8ddd9420a6cb69305523819f1a8846bf fix: keep browser context alive after acquire (first-Run ctx binding) (#52)
76cb058755d704648ed501aceb618891d521ea28 fix: make the deploy self-test actually test the deploy (#53)
a00d71ad8fb22d524c538093f0bf38479cc732bf fix: move user-agent from Chrome flags to CDP emulation API
870cdb579af775a3dc1454a6ebeaa069ef65c4c5 fix: redirect /llms.txt to app.boidwatch.com (Cloudflare Pages SPA catch-all)
dc693006316fb11b45050cc14a25a5554bba492d fix: screenshot capture defaults for server-CLI + ProtectSystem=strict deploys (#21)
724a7cc633e095eedb4d049b055aa98a752d0ca6 fix: split proxy URL into --proxy-server and --proxy-auth for HTTP proxies
d32c37a263aa9fdb7b39097a271615520d62ec21 fix: stop retry amplification on hung/failed runs (#35)
1fd574eef30da4b4ce1e78f8b294334d482db0c9 fix: support native DeepSeek LLM provider
ba78032fee84b041de7aef8611f5f92c5f4d818d fix: unhang wedged agent sessions, harden run concurrency, tolerate heavy pages
4a5fac444dcd7b663afe470d162043f7e3f7e109 fix: use Docker container env vars (HTTP_PROXY) instead of --proxy-server for proxy auth
d9060d1d3f3d146aec4785c914b53369936b305a fix: use inline auth in --proxy-server (strip trailing slash only)
17f0a709233a7245f43c9abda102c066ad234560 growth: add outreach-list pipeline + agency website research
38fe02043f09aba2483906e86afc798353c838ad growth: address PR #16 review — canonicalize entities, fix stale doc counts
8d80d4ab51ac0c7c0228151832832d0f08a70bf6 growth: address campaign runbook review comments
9f73c6ab7ae07b4f4c9e79281f26e181a8a4fd77 growth: archive pre-2026-08 scouting records per JC (2026-08-17)
fbedbcf7461b6b6a61a6dcf7855fe19941bc2de3 growth: document end-to-end outreach campaign runbook
d0d862e75b3602e7f152d77a2faa92f7f3589cfb marketing: add CLI "drive it from code" section + launch status
7840024b17197f8a15a7bd70e577a2f88acbc970 marketing: address PR #15 review (a11y + doc ref)
6d2ab482fb53fa1765839c5dd18b5c0f5ad70c1d marketing: kill beta gate, direct signup CTA
dd30ea9f63cb95053d596fb90c51a5674edd0b1b marketing: landing copy → studio workflow-incorporation angle
b42a4284c02507a7b92566acf74548e185ae6b89 ops(deploy): monthly Webshare proxy-list refresh script + systemd timer (#40)
77694e9783d808f21676d49d79528133221473f6 plan: public share links for run reports
029c5383a7e6a0979d43c6e0b8e3fde557774e12 refactor(api): delete the duplicate rate-limit tier table
501b12becb94ad62b045488ae2851ff17bf7eba0 refactor(cli): delete description-keyed gap diffing from compare
13364b140113be8b3b84965a193d8a7ebd6de87d refactor(cli): delete run create --stdin and the flat max_agents count
8ebdd60fc1b15da49ce9e28d7b60064f44eef3df refactor(cli): delete the never-released tools and agent-setup commands
aab1adb33ee312555c0f06cd138b5975927c2d69 refactor(cli): delete the preview 404 fallback and the url_a re-filter
e387274f6d97fb3706ef7a4350c9c299dac366d4 refactor(cli): print run results through one checked printer
a674a77df15de97f2c4df8f3cc0435c7172b4945 refactor(cli): read the one exploration view in CLI and MCP; delete the local mirrors
7ca3bad909286486d17edb23832b6611c7c2fa7e refactor(cliclient): return the wire RunPreviewResponse from PreviewRun
1dd068669ba79de3ae88f2064c661057bca08dd8 refactor(errors): project a stored run error through one function
b524a62429d0d5d03d2aa2d2a5dd18e451f7bc97 test(cli): add contract knobs, pending AR02-AR05 rows and pins for D1, D2 and gap-failed
43657cc6a3abac8d679ce9400f0639d6acd17950 test(cli): add the agent-contract lever against an httptest fake API
7ba0993a66ee644d3de5a7a2b99449cc4f9972ed test(cli): check exit-code table and FlagSets against the spec at runtime
6a49823596c4c06ed9e68f8edeec816b2b42d114 test(orchestrator): pin the RequestedAgents passed to CompareExploration
8ce591bd81410b7fd85caff34647ea83a1401335 test(persona): seed personas in the stratified sampling test so CI runs it
8c9fe9efedee52475524a39df259f95714b31477 test(testutil): run Postgres-backed tests locally and in CI
71615fffeba37523bd2f47afb5942bd32f1c328c web: add meta description, OG tags, Twitter card, canonical URL for directory scrapers
You can’t perform that action at this time.