<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tim Stacey — Field notes</title><description>Field notes on testing and quality engineering by Tim Stacey.</description><link>https://tim.sillysamoyed.com/</link><item><title>The Internet Runs on Remote Work. Your CEO Says It Doesn&apos;t Work</title><link>https://tim.sillysamoyed.com/blog/internet-runs-on-remote-work</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/internet-runs-on-remote-work</guid><description>The largest engineering projects in history are distributed by design, yet executives keep insisting distributed work fails. What the RTO research, the real estate money trail, and one Australian policy contradiction actually show.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><category>RemoteWork</category><category>RegionalAustralia</category><category>OpenSource</category><category>TestAutomation</category><category>FutureOfWork</category></item><item><title>Where Slack Put AI Agents in Its E2E Testing Stack</title><link>https://tim.sillysamoyed.com/blog/slack-agentic-e2e-testing-stack</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/slack-agentic-e2e-testing-stack</guid><description>Slack ran more than 200 end-to-end workflows through AI agents to map where intent-driven tests beat brittle scripts and where the price per run keeps scripts in charge.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>TestAutomation</category><category>Playwright</category><category>AgenticTesting</category><category>E2ETesting</category><category>AI</category></item><item><title>Your Cucumber Suite Is a Test Script in a Plain-English Costume</title><link>https://tim.sillysamoyed.com/blog/cucumber-test-script-costume</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/cucumber-test-script-costume</guid><description>The value in BDD lives in the conversation before the code, not the .feature file; a Cucumber suite that skips that conversation becomes a brittle test script wearing plain English.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><category>TestAutomation</category><category>BDD</category><category>Cucumber</category><category>SDET</category><category>QualityEngineering</category></item><item><title>Two k6 Load Models Measure Two Different Systems</title><link>https://tim.sillysamoyed.com/blog/k6-closed-vs-open-load-models</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/k6-closed-vs-open-load-models</guid><description>A closed-model k6 test eases off the moment the server slows; an open-model test holds the request rate and shows you the tail your users will hit.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><category>k6</category><category>PerformanceTesting</category><category>LoadTesting</category><category>Grafana</category><category>CoordinatedOmission</category></item><item><title>Your CI&apos;s AI agent was running on a standing credential</title><link>https://tim.sillysamoyed.com/blog/ci-ai-agent-standing-credential</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/ci-ai-agent-standing-credential</guid><description>Running Copilot CLI in GitHub Actions used to need a stored personal access token; the CLI now reads the run built-in GITHUB_TOKEN, a credential that expires with the job.</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>DevSecOps</category><category>CICD</category><category>Copilot</category><category>DevOps</category></item><item><title>Let a flake-rate metric build your quarantine list</title><link>https://tim.sillysamoyed.com/blog/flake-rate-metric-quarantine-list</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/flake-rate-metric-quarantine-list</guid><description>A hand-kept flaky-test list goes stale the day you save it. Score each test flake rate in Prometheus and a query keeps the quarantine list current for you.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><category>FlakyTests</category><category>TestAutomation</category><category>CICD</category><category>Prometheus</category><category>TestObservability</category></item><item><title>k6 2.1 Ships a Feature-Flag System for Experimental Behavior</title><link>https://tim.sillysamoyed.com/blog/k6-2-1-feature-flags</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/k6-2-1-feature-flags</guid><description>k6 2.1 adds a feature-flag system: opt into experimental behavior with --features, list what exists with k6 features, and switch trend metrics to native Prometheus histograms.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><category>k6</category><category>PerformanceTesting</category><category>LoadTesting</category><category>Grafana</category><category>Observability</category></item><item><title>Playwright 1.61 Tests Passkey Logins Without a Hardware Key</title><link>https://tim.sillysamoyed.com/blog/playwright-1-61-passkey-testing</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/playwright-1-61-passkey-testing</guid><description>Playwright 1.61 ships a virtual authenticator that registers passkeys in-test, so the passkey login button gets E2E coverage without a security key.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><category>Playwright</category><category>TestAutomation</category><category>WebAuthn</category><category>Passkeys</category><category>QA</category></item><item><title>Checkout v7 refuses the pwn request by default</title><link>https://tim.sillysamoyed.com/blog/checkout-v7-refuses-pwn-request</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/checkout-v7-refuses-pwn-request</guid><description>actions/checkout v7 refuses to fetch fork pull request code under pull_request_target, closing the most copied half of the pwn request attack.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>DevSecOps</category><category>SupplyChainSecurity</category><category>DevOps</category></item><item><title>A pull request title ran shell commands in Nx&apos;s pipeline</title><link>https://tim.sillysamoyed.com/blog/pr-title-ran-shell-commands</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/pr-title-ran-shell-commands</guid><description>A PR title carried shell commands, a run step echoed it, and the runner obeyed. Bind untrusted input to an env var and quote it.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>DevSecOps</category><category>SupplyChainSecurity</category><category>DevOps</category></item><item><title>Your API requests belong in Git, not Postman&apos;s cloud</title><link>https://tim.sillysamoyed.com/blog/drop-postman-http-files</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/drop-postman-http-files</guid><description>A private Postman collection does two jobs badly. Send the quick check to cURL and a .http file, the endpoint tests to Playwright, and let git hold both.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><category>APITesting</category><category>Playwright</category><category>DeveloperExperience</category><category>cURL</category><category>SoftwareDevelopment</category></item><item><title>Stop seeding your Playwright suite from the login form</title><link>https://tim.sillysamoyed.com/blog/stop-seeding-from-the-login-form</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/stop-seeding-from-the-login-form</guid><description>Drive the login form to seed every test and one selector change reddens the whole suite. Authenticate through the API and keep one test on the form.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>Playwright</category><category>TestAutomation</category><category>APITesting</category><category>CICD</category><category>QA</category></item><item><title>Your coverage gate rewards tests that assert nothing</title><link>https://tim.sillysamoyed.com/blog/coverage-gate-rewards-empty-tests</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/coverage-gate-rewards-empty-tests</guid><description>Line coverage counts execution, not checking. A test that runs your code and asserts nothing still passes an 85 percent gate.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><category>TestAutomation</category><category>CodeCoverage</category><category>MutationTesting</category><category>SoftwareTesting</category><category>CICD</category></item><item><title>Five steps to a GitHub merge queue that does not stall</title><link>https://tim.sillysamoyed.com/blog/github-merge-queue-five-steps</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/github-merge-queue-five-steps</guid><description>A merge queue tests each PR against the ones ahead of it before it lands. Five setup steps keep it moving instead of stalling the day you turn it on.</description><pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>MergeQueue</category><category>DevOps</category><category>DeveloperExperience</category></item><item><title>GitLab 19.0 moves the secrets manager into the pipeline</title><link>https://tim.sillysamoyed.com/blog/gitlab-native-secrets-manager</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/gitlab-native-secrets-manager</guid><description>GitLab 19.0 bundles OpenBao as a native secrets store, so you stop running a standalone Vault just to feed your pipelines.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><category>GitLab</category><category>CICD</category><category>DevSecOps</category><category>SecretsManagement</category><category>DevOps</category></item><item><title>Where Test Health Belongs: CI Logs or an Observability Backend</title><link>https://tim.sillysamoyed.com/blog/test-health-ci-logs-vs-observability</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/test-health-ci-logs-vs-observability</guid><description>Your suite emits pass rate and flake count every run, then buries them in a CI log nobody scrolls; export them over OTLP and a dashboard catches the rot.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>TestAutomation</category><category>OpenTelemetry</category><category>TestObservability</category><category>CICD</category><category>DevOps</category></item><item><title>Retrying a flaky test deletes the evidence of a real bug</title><link>https://tim.sillysamoyed.com/blog/retries-hide-real-bugs</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/retries-hide-real-bugs</guid><description>A bug that fails one run in four passes CI 99.6 percent of the time under three retries. Quarantine the test instead and keep the signal.</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>TestAutomation</category><category>FlakyTests</category><category>CICD</category><category>SoftwareTesting</category><category>DevOps</category></item><item><title>Three caching changes that take 80% off a GitHub Actions build</title><link>https://tim.sillysamoyed.com/blog/github-actions-cache-strategy</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/github-actions-cache-strategy</guid><description>A cached ~/.npm drops a cold Node install from four minutes to thirty seconds, and two more cache changes take the rest of the pipeline down with it.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>DevOps</category><category>SoftwareDevelopment</category><category>TestAutomation</category></item><item><title>My resume site ships behind 460 tests</title><link>https://tim.sillysamoyed.com/blog/resume-site-behind-460-tests</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/resume-site-behind-460-tests</guid><description>I set the direction and Claude Code wrote the code and the tests; 247 unit tests and 213 browser tests are how I trust a site I never hand-wrote.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><category>Astro</category><category>StaticSite</category><category>Playwright</category><category>ContinuousIntegration</category><category>TestAutomation</category></item><item><title>GitHub Actions parallel steps and the matrix jobs you can retire</title><link>https://tim.sillysamoyed.com/blog/github-actions-parallel-steps</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/github-actions-parallel-steps</guid><description>Three matrix jobs for lint, type-check, and unit tests pay three runner boots and an artifact handoff for concurrency that parallel steps fold back into one job.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>DevOps</category><category>TestAutomation</category><category>SoftwareDevelopment</category></item><item><title>Contract Testing vs End-to-End: Where Integration Bugs Belong</title><link>https://tim.sillysamoyed.com/blog/contract-testing-vs-e2e</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/contract-testing-vs-e2e</guid><description>A contract test catches a renamed field in seconds; a 20-minute E2E suite catches it after booting six services. Put each test where it earns its minutes.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>ContractTesting</category><category>Microservices</category><category>APITesting</category><category>TestAutomation</category><category>CICD</category></item><item><title>k6 Script Authoring calibrates load tests to live traffic</title><link>https://tim.sillysamoyed.com/blog/k6-script-authoring-live-telemetry</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/k6-script-authoring-live-telemetry</guid><description>Grafana Assistant reads your telemetry, finds endpoints by real RPS and p95, and generates a k6 script that inherits that profile.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>PerformanceTesting</category><category>k6</category><category>Grafana</category><category>TestAutomation</category><category>DevOps</category></item><item><title>When AI can write every test, what ships to CI is the job</title><link>https://tim.sillysamoyed.com/blog/playwright-ai-test-explosion</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/playwright-ai-test-explosion</guid><description>AI-generated Playwright tests flake under 1.5%. The new problem is test explosion, and coverage intent is still yours to define.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>Playwright</category><category>TestAutomation</category><category>SoftwareTesting</category><category>AI</category><category>CICD</category></item><item><title>One click to fix a failing GitHub Actions run</title><link>https://tim.sillysamoyed.com/blog/github-copilot-fixes-failing-ci</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/github-copilot-fixes-failing-ci</guid><description>Fix with Copilot puts a cloud agent on the failure: it investigates, pushes a fix, reruns CI, and tags you for review.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>GitHubActions</category><category>CICD</category><category>TestAutomation</category><category>DevOps</category><category>SoftwareDevelopment</category><category>Playwright</category></item><item><title>90% use AI in the IDE; the pipeline is another story</title><link>https://tim.sillysamoyed.com/blog/ai-cicd-adoption-gap</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/ai-cicd-adoption-gap</guid><description>JetBrains data: daily AI in the editor, almost none in CI/CD. The trust gap closes when AI reduces noise instead of adding it.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><category>CICD</category><category>DevOps</category><category>TestAutomation</category><category>SoftwareDevelopment</category><category>AITesting</category></item><item><title>Bitbucket Agentic Pipelines automates the chores</title><link>https://tim.sillysamoyed.com/blog/bitbucket-agentic-pipelines</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/bitbucket-agentic-pipelines</guid><description>Define an agent block in bitbucket-pipelines.yml, scope it, tie it to an event. It drafts the docs and the coverage gaps; you review.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><category>Bitbucket</category><category>DevOps</category><category>CICD</category><category>TestAutomation</category><category>SoftwareDevelopment</category><category>Playwright</category></item><item><title>Playwright 1.59 turns failures into reviewable evidence</title><link>https://tim.sillysamoyed.com/blog/playwright-1-59-healer-agent-ci</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/playwright-1-59-healer-agent-ci</guid><description>The 1.59 agents plus screencast and browser.bind shift your job from chasing selectors to reviewing what the Healer did.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><category>Playwright</category><category>TestAutomation</category><category>AITesting</category><category>QA</category><category>CI</category></item><item><title>k6 2.0 moves load-test authoring into the CLI</title><link>https://tim.sillysamoyed.com/blog/k6-2-ai-performance-testing</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/k6-2-ai-performance-testing</guid><description>Grafana previewed k6 2.0 at GrafanaCON 2026: AI authoring in the CLI, an MCP server, and a Playwright-to-k6 converter.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>PerformanceTesting</category><category>TestAutomation</category><category>k6</category><category>Grafana</category><category>AI</category></item><item><title>The locator tax nobody puts in the budget</title><link>https://tim.sillysamoyed.com/blog/playwright-mcp-locator-tax</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/playwright-mcp-locator-tax</guid><description>Broken-test triage is a staffing decision disguised as a process one. Here is the cost, and where AI self-healing pays it back.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>EngineeringLeadership</category><category>SoftwareEngineering</category><category>TestAutomation</category><category>DevProductivity</category><category>QualityAssurance</category></item><item><title>Playwright agents and the new QA skills gap</title><link>https://tim.sillysamoyed.com/blog/playwright-ai-agents</link><guid isPermaLink="true">https://tim.sillysamoyed.com/blog/playwright-ai-agents</guid><description>Playwright v1.56 put a Planner, Generator, and Healer in the test runner. The interesting part is what it asks of the engineers who own the suite.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>Playwright</category><category>SoftwareTesting</category><category>AI</category><category>TestAutomation</category><category>QualityAssurance</category></item></channel></rss>