<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>bugAgent Changelog</title>
    <link>https://www.bugagent.com/changelog</link>
    <description>Product updates, new features, and improvements to bugAgent.</description>
    <language>en-us</language>
    <atom:link href="https://www.bugagent.com/changelog.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Daily: chore(bugagent): update recording-may-27-10-46-am-from-copilot-v1-7-16.spec.ts</title>
      <description>15 commits — Bug fixes: - fix(test-cases): retry invalid requirement links (BA-176) - fix(comments): persist rich editor mentions (BA-154) </description>
      <guid isPermaLink="false">3c851c6a-94a9-4d90-b0c5-6c452a5588ef</guid>
      <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(test-cases): retry invalid requirement links (BA-176)
- fix(comments): persist rich editor mentions (BA-154)
- fix(test-cases): keep unchanged text clean (BA-191)

Improvements:
- chore(bugagent): update recording-may-27-10-46-am-from-copilot-v1-7-16.spec.ts
- chore(bugagent): update recording-may-27-10-46-am-from-copilot-v1-7-16.spec.ts
- test: keep mention fixture type-safe
- feat(mobile): add safe script history restore (BA-171)
- feat(automations): restore script history safely (BA-173)]]></content:encoded>
    </item>
    <item>
      <title>Daily: feat: add manual reports refresh control</title>
      <description>14 commits — Bug fixes: - fix: load correct italic weights for comments - fix: secure and edit exploratory AI configs </description>
      <guid isPermaLink="false">d8cb46f3-77cb-4305-8ba7-9273a82e9963</guid>
      <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix: load correct italic weights for comments
- fix: secure and edit exploratory AI configs
- fix: enrich the report detail page with Epic hierarchy server-side

Improvements:
- feat: add manual reports refresh control
- Ship to prod: v14.07 — transitive nanoid + dompurify advisories
- compliance: retag the typecheck gap CAPA-014 -> CAPA-015
- test: regression guard for the team-scoped report DELETE
- Ship to prod: v14.06 — fix DELETE /api/reports/[id] 500, add typecheck gate]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v14.05 — stamp the watcher-trigger actor on service-client writes</title>
      <description>27 commits — Bug fixes: - fix: preserve hydrated Epic parent selection  </description>
      <guid isPermaLink="false">7084e330-640a-4039-bf5d-6b61259d1fb3</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- fix: preserve hydrated Epic parent selection

Improvements:
- Ship to prod: v14.05 — stamp the watcher-trigger actor on service-client writes
- smoke gate: enforce on main-targeted merges only
- smoke: escape && in the generated plist, and refuse to install invalid XML
- smoke: install changed deps after the schedule's fast-forward]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v14.01 — transitive js-yaml security bump (CVE-2026-59870)</title>
      <description>33 commits — Improvements: - Ship to prod: v14.01 — transitive js-yaml security bump (CVE-2026-59870) - deps: bump transitive js-yaml to 4.3.1 / 3.15.1 (CVE-2026-59870) </description>
      <guid isPermaLink="false">32df2ed5-d139-41a0-8c1b-cfa68aa229ab</guid>
      <pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Improvements:
- Ship to prod: v14.01 — transitive js-yaml security bump (CVE-2026-59870)
- deps: bump transitive js-yaml to 4.3.1 / 3.15.1 (CVE-2026-59870)
- deps(runner): bump @supabase/supabase-js in /runner
- deps(mcp-server): bump @supabase/supabase-js in /mcp-server
- chore(runner): sync lockfile with the engines field added in v13.99]]></content:encoded>
    </item>
    <item>
      <title>Daily: Release v13.98</title>
      <description>21 commits — Bug fixes: - Fix rich comment retest regressions - Fix watcher field change notifications </description>
      <guid isPermaLink="false">f6928f21-dbc5-4cf4-b548-82335645fefc</guid>
      <pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix rich comment retest regressions
- Fix watcher field change notifications
- Fix BA-266 exploration recovery regressions
- Fix BA-236 watcher retest regressions
- Fix BA-229 and BA-278 comment editor regressions

Improvements:
- Release v13.98
- Ship to prod: v13.97 — comments, watchers, and exploration recovery
- Handle target 429s in exploration fallback
- Ship to prod: v13.96 — Playwright 1.62.1 across all five runner refs
- compliance: correct the 2026-08-05 alert cross-check line]]></content:encoded>
    </item>
    <item>
      <title>Daily: smoke digest: catch a missed run instead of reporting it green</title>
      <description>12 commits — Bug fixes: - Fix silent SIGPIPE abort in run-local-ui-smoke.sh ensure_smoke_tooling  </description>
      <guid isPermaLink="false">6dadb3fa-66cb-430d-bc0a-52586244a695</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>bug-reports</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix silent SIGPIPE abort in run-local-ui-smoke.sh ensure_smoke_tooling

Improvements:
- smoke digest: catch a missed run instead of reporting it green
- Ship to prod: v13.95 — hono 4.12.34 clears CORS ReDoS (GHSA-8j4g-w8fx-2239)
- Ship to prod: v13.94 — clear 13 HIGH transitive security advisories
- deps(dashboard): bump isomorphic-dompurify in /dashboard]]></content:encoded>
    </item>
    <item>
      <title>Daily: Harden rich comment critical-path selection</title>
      <description>25 commits — New features: - Add web automation run detail page - Add tenant-safe automation run detail API </description>
      <guid isPermaLink="false">2d4b42cf-1a97-4ee1-8393-d11b7c07a3f1</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>notes</category>
      <category>api</category>
      <content:encoded><![CDATA[New features:
- Add web automation run detail page
- Add tenant-safe automation run detail API

Bug fixes:
- Fix import-free Playwright scripts for BA-274
- Fix BA-229 rich comment toolbar selection
- Fix Session Notes list paste formatting
- Fix pass rate trend chart polish
- Fix exploration plan response recovery for BA-266

Improvements:
- Harden rich comment critical-path selection
- Ship to prod: v13.93 — fix BA-229 and BA-274 regressions
- Ship to prod: v13.92 — add durable web automation run details
- Harden web automation run history
- Show linked automation runs on reports]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.90 — bind the chat attachment MIME allowlist to its bucket</title>
      <description>2 commits — Improvements: - Ship to prod: v13.90 — bind the chat attachment MIME allowlist to its bucket </description>
      <guid isPermaLink="false">2a0b1ad6-acf0-4192-a6ee-8ea875938479</guid>
      <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <content:encoded><![CDATA[Improvements:
- Ship to prod: v13.90 — bind the chat attachment MIME allowlist to its bucket]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.89 — capture the reason behind handled 5xx responses</title>
      <description>11 commits — Improvements: - Ship to prod: v13.89 — capture the reason behind handled 5xx responses - Ship to prod: v13.88 — pass PUBLIC_SENTRY_DSN into the dashboard build (NC-030) </description>
      <guid isPermaLink="false">8886bd35-5948-4ec4-acc5-5c7a48a1de5a</guid>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Improvements:
- Ship to prod: v13.89 — capture the reason behind handled 5xx responses
- Ship to prod: v13.88 — pass PUBLIC_SENTRY_DSN into the dashboard build (NC-030)
- Bump version to v13.87]]></content:encoded>
    </item>
    <item>
      <title>Fewer dashboard errors, and better error monitoring behind the scenes</title>
      <description>Fixed a JavaScript error that could break menus and dropdowns on the dashboard, and restored browser-side error reporting so issues like it surface faster.</description>
      <guid isPermaLink="false">a3a43ec6-d017-441c-8061-53605313fd67</guid>
      <pubDate>Sat, 01 Aug 2026 15:11:29 GMT</pubDate>
      <category>fixes</category>
      <category>dashboard</category>
      <category>reliability</category>
      <category>monitoring</category>
      <content:encoded><![CDATA[## Fixed

- **Menus and dropdowns no longer break on certain clicks.** A delegated click handler assumed every click target was a regular HTML element. When it was not (for example a click landing on an SVG or text node), the handler threw and the surrounding script stopped running, which could leave the sidebar or header menus unresponsive until a page reload. The guard is now applied consistently across every delegated handler in the dashboard, with an automated check that fails the build if an unguarded one is ever reintroduced.

## Improved

- **Browser-side error reporting is working again.** Our client-side error monitoring was being built without its configuration, so browser errors were recorded internally but never reached our monitoring tooling. That is fixed, and the build now fails outright if the configuration is ever missing again — so this class of silent gap cannot recur.

## Maintenance

- Astro updated to 7.1.4 and the Playwright test toolchain updated to 1.62.0.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.86 — fix recon links and comments</title>
      <description>12 commits — Bug fixes: - Fix rich comment editing for BA-229 - Fix broken-link recon details for BA-273 </description>
      <guid isPermaLink="false">15751374-d43c-4c69-8f44-8286275a19f7</guid>
      <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix rich comment editing for BA-229
- Fix broken-link recon details for BA-273
- Fix mobile YAML diagnostics and exploration regressions (#1231)
- Fix mobile YAML diagnostics and exploration regressions

Improvements:
- Ship to prod: v13.86 — fix recon links and comments]]></content:encoded>
    </item>
    <item>
      <title>Daily: Bug fixes and improvements</title>
      <description>1 commits —  </description>
      <guid isPermaLink="false">f4757de0-68bd-46ea-9570-65751b8e9635</guid>
      <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.83 — refine credential and report UI</title>
      <description>28 commits — Bug fixes: - Fix recurring production error alerts (#1224) - Fix Chrome extension reporting regressions </description>
      <guid isPermaLink="false">be65e859-bd38-4833-b36a-5add5c21b4cb</guid>
      <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>bug-reports</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix recurring production error alerts (#1224)
- Fix Chrome extension reporting regressions
- fix(ci): count a single npm audit advisory in the daily compliance evidence
- Fix mobile credential and report UI regressions

Improvements:
- Ship to prod: v13.83 — refine credential and report UI]]></content:encoded>
    </item>
    <item>
      <title>Daily: Improve QA calculator results and sales follow-up (#1210)</title>
      <description>39 commits — Bug fixes: - Fix exploration progress and mobile activity regressions (#1211) - Fix exploration progress and mobile activity regressions </description>
      <guid isPermaLink="false">eae47dc3-f84a-4de5-a1b0-9c5cb15bcf29</guid>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix exploration progress and mobile activity regressions (#1211)
- Fix exploration progress and mobile activity regressions
- fix: recover rate-limited exploration callbacks

Improvements:
- Improve QA calculator results and sales follow-up (#1210)
- feat: improve calculator results and sales follow-up
- feat: show durable exploration progress
- feat: guide new users to API keys (#1207)
- feat: guide new users to API keys]]></content:encoded>
    </item>
    <item>
      <title>Daily: feat(marketing): add TestLauncher ecosystem</title>
      <description>8 commits — Bug fixes: - fix(ci): build nightly security Slack payload with jq (CAPA-009)  </description>
      <guid isPermaLink="false">80f16621-5efb-4ebd-9245-dfe9ed50c488</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>marketing</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(ci): build nightly security Slack payload with jq (CAPA-009)

Improvements:
- feat(marketing): add TestLauncher ecosystem
- feat(mobile): add reusable Maestro data profiles (#1192)
- deps(dashboard): bump @anthropic-ai/sdk in /dashboard]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.76 — restore Maestro results and expressions</title>
      <description>2 commits — Improvements: - Ship to prod: v13.76 — restore Maestro results and expressions </description>
      <guid isPermaLink="false">13b244e9-dc08-4e83-9505-341c4617b9be</guid>
      <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <content:encoded><![CDATA[Improvements:
- Ship to prod: v13.76 — restore Maestro results and expressions]]></content:encoded>
    </item>
    <item>
      <title>Daily: compliance: author API key revocation policy, close OBS-018</title>
      <description>9 commits — Improvements: - compliance: author API key revocation policy, close OBS-018 - compliance: revoke Playwright Report under explicit cross-tenant override </description>
      <guid isPermaLink="false">8fa83fc2-65a2-4185-a106-938d4e36d29e</guid>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[Improvements:
- compliance: author API key revocation policy, close OBS-018
- compliance: revoke Playwright Report under explicit cross-tenant override
- compliance: revoke 2 stale API keys (CTRL-ACC-003), raise OBS-018
- compliance: withdraw generate_access_review "auth-mode gap" as a finding
- compliance: daily security review 2026-07-25]]></content:encoded>
    </item>
    <item>
      <title>Daily: feat(pricing): consolidate paid plans into Enterprise</title>
      <description>47 commits — Bug fixes: - fix(explorations): backfill stale run totals - fix(explorations): count persisted runs </description>
      <guid isPermaLink="false">4840e8e7-a0d1-4de7-8277-ce6cac468eb8</guid>
      <pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>marketing</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(explorations): backfill stale run totals
- fix(explorations): count persisted runs
- Fix exploration modal drag dismissal
- Fix login profile delete authorization feedback

Improvements:
- feat(pricing): consolidate paid plans into Enterprise
- docs: align public catalog to free and enterprise
- feat(marketing): simplify public plans
- compliance: CAPA-008 brace-expansion + time-entries root cause (CTRL-MON-001)
- security: pin brace-expansion ^5.0.8 — clear 4 high DoS alerts]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.71 — launch QA cost calculator</title>
      <description>17 commits — Bug fixes: - fix: require explicit QA calculator inputs  </description>
      <guid isPermaLink="false">01b21fe3-b705-4683-b8c1-5a93e8f95905</guid>
      <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- fix: require explicit QA calculator inputs

Improvements:
- Ship to prod: v13.71 — launch QA cost calculator
- feat: add recurring maintenance and AI cost projection
- feat: add regional labor benchmarks to QA calculator
- feat: itemize QA cost calculator estimates
- feat: add local QA cost calculator prototype]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.69 — fix Maestro artifact origin</title>
      <description>22 commits — Bug fixes: - fix(mobile): use public origin for proof artifacts - fix(mobile): retain Maestro proof artifacts </description>
      <guid isPermaLink="false">46dec209-ec7b-43c4-b41d-592193f10c79</guid>
      <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(mobile): use public origin for proof artifacts
- fix(mobile): retain Maestro proof artifacts

Improvements:
- Ship to prod: v13.69 — fix Maestro artifact origin
- Ship to prod: v13.68 — retain Maestro proof artifacts
- deps(runner): bump @supabase/supabase-js in /runner
- deps(dashboard): bump @anthropic-ai/sdk in /dashboard
- deps(runner): bump browserstack-node-sdk in /runner]]></content:encoded>
    </item>
    <item>
      <title>More reliable mobile recording and Maestro runs</title>
      <description>Mobile recordings now avoid obfuscated Android locator placeholders, and BrowserStack Maestro runs accept legacy recorder output more reliably.</description>
      <guid isPermaLink="false">62ad3379-6eb3-467b-b7a1-53ec15f29fd7</guid>
      <pubDate>Wed, 22 Jul 2026 01:03:04 GMT</pubDate>
      <category>mobile-automation</category>
      <category>maestro</category>
      <category>browserstack</category>
      <content:encoded><![CDATA[## Mobile automation reliability

Recorder review now filters Android resource-name placeholders and guides testers toward stable IDs or accessibility labels. Maestro suites sent to BrowserStack also normalize legacy launch syntax and redundant initial portrait setup without changing the saved flow or meaningful orientation steps.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.66 — Maestro selector and BrowserStack fixes</title>
      <description>31 commits — Bug fixes: - fix(mobile): stabilize Maestro selectors and BrowserStack runs - fix(mobile): hide obfuscated tap labels </description>
      <guid isPermaLink="false">ff647982-0e00-48c3-b576-7827fd8a7dd1</guid>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(mobile): stabilize Maestro selectors and BrowserStack runs
- fix(mobile): hide obfuscated tap labels
- fix(exploration): replace retired Claude model
- fix(ci): ignore test fixtures in ownership scan
- Fix worktree-add.sh SIGPIPE abort with many worktrees

Improvements:
- Ship to prod: v13.66 — Maestro selector and BrowserStack fixes
- feat: add Anthropic model recovery watchdog
- Ship to prod: v13.64 — dependency security remediation (CAPA-005)
- Ship to prod: v13.63 — per-run mobile bug creation]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.43 — finish BrowserStack Maestro runs</title>
      <description>30 commits — Bug fixes: - fix(mobile): run Android recordings through Maestro - fix(mobile): improve recorder review choices </description>
      <guid isPermaLink="false">5a66f5c3-4265-4d51-ba52-aae28ff294a5</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(mobile): run Android recordings through Maestro
- fix(mobile): improve recorder review choices
- fix(reports): recover out-of-range pagination (TEST-938)

Improvements:
- Ship to prod: v13.43 — finish BrowserStack Maestro runs
- Bump to v13.42 (version collision with main's 13.41)
- Ship to prod: v13.41 — block synthesized credentials in certified refinements (BA-234)
- Ship to prod: v13.41 — run Android recordings through Maestro
- docs: two-machine dev setup — canonical host vs dev box]]></content:encoded>
    </item>
    <item>
      <title>Reliable Appetize mobile recordings</title>
      <description>Mobile recordings now validate tap targets against fresh UI evidence and require review before ambiguous actions can be saved or run.</description>
      <guid isPermaLink="false">567ca77d-956c-42d3-bc5e-d059ccf0303a</guid>
      <pubDate>Mon, 20 Jul 2026 11:20:34 GMT</pubDate>
      <category>mobile automation</category>
      <category>recording</category>
      <category>security</category>
      <content:encoded><![CDATA[## More reliable selectors

Physical taps are correlated with fresh Appetize UI-tree snapshots so recordings prefer stable resource IDs and accessibility labels. Duplicate, stale, conflicting, or coordinate-only targets are marked for review instead of being guessed.

## Safer recording boundaries

Credential input and UI snapshots are sanitized before persistence, recordings are capped at 500 events, and unresolved taps are rejected by script generation, automation saves, and the device runner.

## Faithful replay

Reviewed selector decisions are authoritative during BrowserStack execution. Explicitly confirmed coordinate taps and device-orientation changes now replay as recorded.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.27 - private Maestro evidence</title>
      <description>17 commits — New features: - Add Maestro YAML upload diagnostics  </description>
      <guid isPermaLink="false">fd8779d8-75f6-453e-9ce6-7de7d3938158</guid>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[New features:
- Add Maestro YAML upload diagnostics

Bug fixes:
- fix: preserve mobile recordings on save failures

Improvements:
- Ship to prod: v13.27 - private Maestro evidence
- feat: retain filtered credentialed Maestro diagnostics
- feat: retain private Maestro visual evidence for login profiles
- Ship to prod: v13.17 - resilient mobile recording saves
- Ship to prod: v13.16 - secure Maestro login profiles]]></content:encoded>
    </item>
    <item>
      <title>Secure login profiles for Maestro mobile runs</title>
      <description>Native Maestro YAML runs can now use a saved mobile login profile while keeping credential-bearing evidence out of bugAgent storage.</description>
      <guid isPermaLink="false">4b416de5-70be-4f69-abce-a1d1f0a4213d</guid>
      <pubDate>Sat, 18 Jul 2026 16:29:07 GMT</pubDate>
      <category>mobile automation</category>
      <category>maestro</category>
      <category>security</category>
      <content:encoded><![CDATA[## Secure Maestro login profiles

- Attach a saved mobile login profile to a native Maestro YAML automation.
- Credentials are resolved only for the BrowserStack execution and are not persisted in bugAgent run evidence.
- Tenant-scoped validation prevents profiles from being used across users, projects, or workspaces.
- User-level automatic mobile bug-report preferences also apply to these runs.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v13.14 - fix native Maestro flows</title>
      <description>47 commits — Bug fixes: - Fix native Maestro flow generation - Fix judge 400: structured-output schema rejected enum/minimum/maximum </description>
      <guid isPermaLink="false">88443de2-3376-4519-afdf-49a962bd5b64</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix native Maestro flow generation
- Fix judge 400: structured-output schema rejected enum/minimum/maximum

Improvements:
- Ship to prod: v13.14 - fix native Maestro flows
- Ship to prod: v13.13 — never send non-finite tap coordinates; retry only 5xx instability
- Ship to prod: v13.12 — add native BrowserStack Maestro runs
- Ship to prod: v13.11 — retry WebDriver commands on UiAutomator2 instability
- Ship to prod: v13.10 — align playback permission state with record-time state]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v12.97 — refinement judge rubric v2 + strict-intent grading fix (TEST-BA-131)</title>
      <description>31 commits — Bug fixes: - fix(automations): center detail rail and clarify AI action  </description>
      <guid isPermaLink="false">2af3e09e-060d-4d71-bce6-c6e6b83e9e1e</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(automations): center detail rail and clarify AI action

Improvements:
- Ship to prod: v12.97 — refinement judge rubric v2 + strict-intent grading fix (TEST-BA-131)
- BA-131: judge rubric v2 + strict-intent grading fix + judge-execution pair log
- deps(runner): bump @supabase/supabase-js in /runner
- deps(dashboard): bump stripe from 22.3.1 to 22.3.2 in /dashboard
- Ship to prod: v12.96 — automation detail UI fixes]]></content:encoded>
    </item>
    <item>
      <title>Refine with AI: stricter script judging and intent-aware certification</title>
      <description>The refinement judge now scores scripts per-criterion with a hard-fail taxonomy, and strict-intent mode is enforced at certification grading.</description>
      <guid isPermaLink="false">d533b939-5242-41ab-89de-5a7e45b1bd6c</guid>
      <pubDate>Thu, 16 Jul 2026 22:08:40 GMT</pubDate>
      <category>mobile</category>
      <category>ai</category>
      <category>improvement</category>
      <content:encoded><![CDATA[## Smarter judging inside Refine with AI

Three upgrades to how the mobile-refinement agent's work is evaluated:

- **Per-criterion script judging.** Before a draft script spends a real device run, the reviewing judge now scores it 0–2 on each quality dimension (locator uniqueness, robustness, waits, assertions, idempotent setup, interstitial handling, fidelity to your recorded intent) with quoted evidence — and a set of hard failures (placeholders, hallucinated elements, flow mismatch, destructive actions) that always block the run regardless of scores.
- **Strict intent is now enforced at certification.** If you marked your stated goal as strict, the certification grader now applies it as a hard gate — an automation that runs cleanly but misses your goal will not certify.
- **Judge accountability.** Every judged-then-executed script records the judge's verdict alongside the real device outcome, building the evidence base for measuring and tuning judge accuracy.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v12.95 — resolve MCP report user names</title>
      <description>3 commits — Bug fixes: - Fix MCP report user name resolution  </description>
      <guid isPermaLink="false">3a592f14-64f5-45ca-807e-5b2a7c6f316d</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix MCP report user name resolution

Improvements:
- Ship to prod: v12.95 — resolve MCP report user names]]></content:encoded>
    </item>
    <item>
      <title>Analytics: stat-card trends now compare against the previous period</title>
      <description>The Avg Quality Score, Open Bugs, and Automation Pass Rate cards showed a real change vs the previous period instead of a permanent &quot;0%&quot;.</description>
      <guid isPermaLink="false">ac8a425b-3334-461e-b7a6-b28719ff880e</guid>
      <pubDate>Wed, 15 Jul 2026 02:10:07 GMT</pubDate>
      <category>analytics</category>
      <category>improvement</category>
      <category>dashboard</category>
      <content:encoded><![CDATA[## Dashboard stat-card trends fixed

The analytics dashboard's **Avg Quality Score**, **Open Bugs**, and **Automation Pass Rate** cards used to always read "→ 0% vs prev period" no matter which time range you picked — only Total Reports showed a real trend.

Each card now computes a genuine comparison against the preceding period of the same length, so you can see at a glance whether quality, open bug count, and automation pass rate are trending up or down. Selecting "All Time" (which has no prior period) correctly shows a neutral trend.]]></content:encoded>
    </item>
    <item>
      <title>Mobile test recorder: automatic login capture</title>
      <description>Pick a login profile and just log in while recording — the username and password fields are now detected and protected automatically. No more Mark buttons.</description>
      <guid isPermaLink="false">8b6742b1-02cb-47ca-8a77-c3b2369418c6</guid>
      <pubDate>Tue, 14 Jul 2026 20:03:43 GMT</pubDate>
      <category>mobile</category>
      <category>improvement</category>
      <category>automation</category>
      <content:encoded><![CDATA[## Automatic login capture for mobile test recordings

Recording a login on a mobile automation used to mean arming a "Record Login" mode and clicking "Mark Username" / "Mark Password" on each field in exactly the right order — and it was easy to end up with the message *"You selected a login profile but didn't capture a login."* even after marking both fields.

Now it just works:

- **Select a login profile, then record and log in normally.** The username and password fields are detected automatically from the field's identity.
- **Your credentials are never stored in the recording.** Login fields are captured value-less and tagged, so replay fills them from your saved login profile — the typed values never land in the recording, the generated script, or logs.
- **The Mark buttons and Record Login step are gone.** Each login step is confirmed inline in the event list (e.g. "🔒 username — auto-detected, filled from login profile").

A password field is always protected even if no profile is selected, and non-login typing is captured normally.]]></content:encoded>
    </item>
    <item>
      <title>Mobile login capture: smarter, safer credential handling</title>
      <description>Login fields are detected automatically during mobile recording, and passwords are never stored in plaintext — even outside the guided login capture.</description>
      <guid isPermaLink="false">13a05bff-0aa7-4954-9284-cb3ae5c1c55d</guid>
      <pubDate>Tue, 14 Jul 2026 16:39:13 GMT</pubDate>
      <category>mobile</category>
      <category>automation</category>
      <category>security</category>
      <content:encoded><![CDATA[## Recording a login just works

When you record a mobile tour with a login profile selected, bugAgent now recognizes the username and password fields automatically from the field itself — you no longer have to mark them by hand in the right order (manual marking still works as an override). The field's identity, not the value you typed, decides the tag.

## Passwords never land in plaintext

A field the operating system flags as a password is always captured without its value — whether or not the guided login capture was active. The typed value is stripped everywhere it could otherwise persist: the saved recording, the generated script, and the AI script-generation request. A password can no longer end up in cleartext in a recording.

This pairs with the mobile self-healing locators shipped in the previous update, so a recorded login both finds its fields and fills them from your saved login profile.]]></content:encoded>
    </item>
    <item>
      <title>Mobile runs now self-heal broken locators</title>
      <description>When a recorded label can&apos;t be found on the device, the runner ties it to the live screen&apos;s stable id and retries — recordings survive the trip from recorder to real device.</description>
      <guid isPermaLink="false">3141b572-f4de-420b-9c13-e19bbfc622a1</guid>
      <pubDate>Tue, 14 Jul 2026 14:58:47 GMT</pubDate>
      <category>mobile</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[## Self-healing locators come to mobile

Recordings sometimes capture a field by its visible label ("Email") while the app identifies it internally by a stable id (`login_email_input`). Until now that mismatch could fail a run on a real device even though the element was right there.

Now, when a tap or input step fails to find its target, the runner re-reads the live screen hierarchy, ties the recorded label to the element that owns it, and retries once with the element's stable id. Every heal is logged in the run output — `[bugAgent] self-healed locator: "Email" → "login_email_input"` — and the step's locator in the run report is marked `healed`, so you can see exactly what happened.

Assertions are never healed: if a check fails, it fails — a real regression is never papered over. Password fields keep their secure-input safeguard on every healed retry.

This extends the self-healing already built into web runs to real-device mobile runs.]]></content:encoded>
    </item>
    <item>
      <title>Daily: deps(mcp-server): bump adm-zip from 0.5.18 to 0.6.0 in /mcp-server</title>
      <description>27 commits — Bug fixes: - fix: keep report details within responsive viewports  </description>
      <guid isPermaLink="false">3910fdc4-8e72-4b8c-a53b-a108de2f61cb</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix: keep report details within responsive viewports

Improvements:
- deps(mcp-server): bump adm-zip from 0.5.18 to 0.6.0 in /mcp-server
- test: provision paid smoke accounts for test cases
- Ship to prod: v12.69 — responsive bug report details
- deps(mcp-server): bump tsx from 4.23.0 to 4.23.1 in /mcp-server
- deps(runner): bump browserstack-node-sdk in /runner]]></content:encoded>
    </item>
    <item>
      <title>Self-healing tests, front and center</title>
      <description>Your web and mobile automations self-heal broken locators — now documented across the site, API reference, and MCP tools.</description>
      <guid isPermaLink="false">943954da-3da8-4322-a890-a742d6c08beb</guid>
      <pubDate>Mon, 13 Jul 2026 02:07:31 GMT</pubDate>
      <category>automation</category>
      <category>mobile</category>
      <category>ai</category>
      <category>docs</category>
      <content:encoded><![CDATA[## Tests that fix themselves

When a selector changes or a button moves, your suite normally goes red and someone spends the afternoon chasing it. bugAgent heals the locator and keeps going.

**Web** — on every Node Playwright run, a timed-out locator is repaired automatically: the runner captures the live DOM, asks Claude for a working selector, and retries the step once. Assertions are never healed, so a real regression still fails — and every heal is logged so you can see exactly what changed.

**Mobile** — Refine with AI takes a tour you record once and hardens it into a self-healing, device-certified script: it layers in resilient locators (accessibility id, resource id, semantic labels) and certifies it with repeated green runs on a real device. The script is yours — export it and run it anywhere.

The capability is now surfaced on the homepage and fully documented in the feature docs, REST API reference (`POST /api/mobile/refinements`), and the `run_automation` MCP tool.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v12.66 — market self-healing across homepage, docs, API &amp; MCP</title>
      <description>23 commits — New features: - Add Gherkin .feature export for mobile automations (QMS/compliance)  </description>
      <guid isPermaLink="false">90d4e226-b814-494e-a5f7-1857bd99c734</guid>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>marketing</category>
      <category>api</category>
      <content:encoded><![CDATA[New features:
- Add Gherkin .feature export for mobile automations (QMS/compliance)

Bug fixes:
- fix MCP mobile parity and compliance auth

Improvements:
- Ship to prod: v12.66 — market self-healing across homepage, docs, API & MCP
- docs: turnkey BA-134 golden-corpus recording runbook
- Re-bump to v12.65 — parallel ship claimed 12.64
- Ship to prod: v12.64 — Gherkin .feature export (QMS/compliance)
- docs: hard-code agentic test design plan]]></content:encoded>
    </item>
    <item>
      <title>Export mobile tests as Gherkin .feature files</title>
      <description>On a mobile automation, download its steps as a human-readable Gherkin (.feature) BDD spec — handy for compliance and QMS documentation.</description>
      <guid isPermaLink="false">21b05c50-2b1b-4684-a574-cee4bb738577</guid>
      <pubDate>Sun, 12 Jul 2026 23:33:24 GMT</pubDate>
      <category>mobile</category>
      <category>feature</category>
      <content:encoded><![CDATA[## Mobile testing

Each mobile automation now has a **Download .feature** button that renders its recorded steps as a Gherkin `.feature` file — a plain, human-readable Given/When/Then spec of what the test does. It's handy for compliance and QMS documentation, or for sharing what a test covers with people who don't read the raw action JSON.

Typed-in values are described by their field (never the literal text), so credentials never appear in the exported spec.]]></content:encoded>
    </item>
    <item>
      <title>Tighter privacy for AI mobile test refinement</title>
      <description>Values typed on the test device during an AI refinement are now redacted from the cloud device provider&apos;s session logs, and the refinement chat is rate-limited to keep runs bounded.</description>
      <guid isPermaLink="false">374bdc47-023f-4283-aed1-115f4aba7ef0</guid>
      <pubDate>Sun, 12 Jul 2026 02:59:06 GMT</pubDate>
      <category>mobile</category>
      <category>privacy</category>
      <category>security</category>
      <content:encoded><![CDATA[## Privacy & reliability

When the AI refines a mobile test on a real device, any value typed on-screen is now redacted from the cloud device provider's session text logs on **every** run — so sensitive input isn't retained there. (The session video still shows the screen, as before.)

The refinement chat is also now rate-limited per refinement, keeping each run's work bounded.]]></content:encoded>
    </item>
    <item>
      <title>Refine with AI: pin per-step checks when you start a refinement</title>
      <description>When you refine a mobile test with AI, you can now attach an expected result to any recorded step — the agent verifies each one while certifying the script.</description>
      <guid isPermaLink="false">ebffc6b6-6cfc-4e2c-9c06-4242bf061fcf</guid>
      <pubDate>Sun, 12 Jul 2026 02:04:03 GMT</pubDate>
      <category>mobile</category>
      <category>feature</category>
      <content:encoded><![CDATA[## Refine with AI

Starting an AI refinement now lets you add **per-step checks** alongside your goal and key steps. For any step in your recorded tour, pin what should be true after it (for example, "the cart shows 2 items"), and the agent verifies that expectation as part of certifying the script.

This completes the intent capture flow: state your goal, list the key steps it must pass through, and — new — assert what each step should produce. The agent certifies against what you actually want, not just that the flow runs without errors.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v12.63 — GuardKit closure (maskCommands always + atomic message cap, BA-133)</title>
      <description>33 commits — New features: - Add per-step expectation capture to the Refine entry modal (TEST-BA-140)  </description>
      <guid isPermaLink="false">723d8581-c55b-4ad4-911d-f26a629273e6</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>bug-reports</category>
      <category>api</category>
      <content:encoded><![CDATA[New features:
- Add per-step expectation capture to the Refine entry modal (TEST-BA-140)

Bug fixes:
- Fix cancel-during-open device-session leak (TEST-BA-149)

Improvements:
- Ship to prod: v12.63 — GuardKit closure (maskCommands always + atomic message cap, BA-133)
- Close BA-133 GuardKit: always-mask setValues + atomic per-refinement message cap
- Ship to prod: v12.62 — per-step expectation capture in Refine modal (BA-140)
- Ship to prod: v12.61 — close cancel-during-open device-session leak (BA-149)
- Ship to prod: v12.60 — script importer dashboard UI + API]]></content:encoded>
    </item>
    <item>
      <title>More reliable device cleanup when cancelling AI mobile-test refinement</title>
      <description>Cancelling a refinement while its test device is still starting up now releases the device immediately, instead of leaving it briefly reserved until an idle timeout.</description>
      <guid isPermaLink="false">3d884250-d5f3-4b82-be46-defa5d3e3d19</guid>
      <pubDate>Sat, 11 Jul 2026 18:08:23 GMT</pubDate>
      <category>reliability</category>
      <category>mobile</category>
      <content:encoded><![CDATA[## Reliability

When you cancel an AI mobile-test refinement, we now release its cloud test device the moment the cancel is received — even if the device was still in the middle of starting up.

Previously, a cancel that landed during the brief device-startup window could leave the device reserved until it timed out on its own. Cancels during a running refinement were always handled immediately; this closes the remaining startup-window case so every cancel frees capacity right away.]]></content:encoded>
    </item>
    <item>
      <title>Login Profiles for mobile testing</title>
      <description>Save reusable login credentials once, then run your mobile tests as any role — no re-recording.</description>
      <guid isPermaLink="false">fbf03e37-f443-47c7-8b4d-768f094f0de7</guid>
      <pubDate>Sat, 11 Jul 2026 01:20:10 GMT</pubDate>
      <category>mobile</category>
      <category>feature</category>
      <content:encoded><![CDATA[Create named login profiles (e.g. "Admin", "Contributor") for a project, then pick one when you record a login or start a run. Usernames and passwords are encrypted at rest, never shown again, and injected only into secure fields at run time.

Manage them from **Automate Mobile → Login Profiles**. *(Enterprise)*]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v11.98 — fix generateAccessReview wrong columns (team_members.created_at, api_keys.prefix)</title>
      <description>49 commits — Bug fixes: - fix(compliance): service-auth path for headless access-review (OFI-022)  </description>
      <guid isPermaLink="false">b9bc1ad0-cba5-41e2-9fe7-8a420baaec60</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <category>api</category>
      <content:encoded><![CDATA[Bug fixes:
- fix(compliance): service-auth path for headless access-review (OFI-022)

Improvements:
- Ship to prod: v11.98 — fix generateAccessReview wrong columns (team_members.created_at, api_keys.prefix)
- Ship to prod: v11.97 — deterministic getUserTeamId team resolution (OBS-011)
- Ship to prod: v11.96 — fix generate_access_review outputSchema (team_members not members)
- Ship to prod: v11.95 — headless service-auth for compliance access-review (OFI-022)
- Ship to prod: v12.03 — mobile credential-vault management UI]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v11.83 — mobile credential vault P2 (playback injection)</title>
      <description>25 commits — Bug fixes: - Fix BA-147 linked ticket row highlighting - Fix BA-135 web automation back link layout </description>
      <guid isPermaLink="false">143e9f9e-367f-4182-af5d-0257a247bd41</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix BA-147 linked ticket row highlighting
- Fix BA-135 web automation back link layout
- Fix BA-186 chat unread badge refresh

Improvements:
- Ship to prod: v11.83 — mobile credential vault P2 (playback injection)
- compliance: link OBS-005 residual to tracked ticket TEST-BA-187
- compliance: daily security review 2026-07-09 (ship follow-up — do 1,2,3)
- Ship to prod: v11.73 — harden security-scan completion callback retry (OBS-005)
- Ship to prod: v11.72 — Astro 7.0.6→7.0.7 (dashboard SSR + website static)]]></content:encoded>
    </item>
    <item>
      <title>Secure login profiles for mobile automation (foundation)</title>
      <description>You can now store named username/password login profiles per project — encrypted and write-only — as the foundation for using real credentials in mobile tests.</description>
      <guid isPermaLink="false">9fb54d61-525d-4a8b-952c-5498640bd64b</guid>
      <pubDate>Thu, 09 Jul 2026 11:37:03 GMT</pubDate>
      <category>mobile</category>
      <category>security</category>
      <category>refine-with-ai</category>
      <content:encoded><![CDATA[## Named login profiles for mobile automation

The first piece of a project credential vault: create named login profiles (e.g. "Admin", "Contributor") for a project. Each stores a username and password that are **encrypted at rest and write-only** — no screen, API, or teammate ever sees the values again; only the name is shown. Profiles are shared across the project so a whole team can reuse them.

Coming next: selecting a profile per run (like choosing a device) to log in as different roles, automated login during recording, and injection during BrowserStack playback.]]></content:encoded>
    </item>
    <item>
      <title>Daily: Ship to prod: v11.60 — Maestro + Playwright importer dialects</title>
      <description>52 commits — Bug fixes: - Fix chat notifications and extension capture regressions - Fix BA-116 orphan sweep pagination </description>
      <guid isPermaLink="false">ce7db9ca-108f-4cbb-a7a5-b1a29c72d49b</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
      <category>daily</category>
      <category>automation</category>
      <category>ai</category>
      <content:encoded><![CDATA[Bug fixes:
- Fix chat notifications and extension capture regressions
- Fix BA-116 orphan sweep pagination

Improvements:
- Ship to prod: v11.60 — Maestro + Playwright importer dialects
- Script importer: add Maestro + Playwright (mobile-web) dialects
- Ship to prod: v11.59 — semantic label fallback for id-less mobile input fields
- Semantic label fallback for id-less input fields (locator ladder)
- docs(CLAUDE.md): add glm-5.2:cloud challenger for complex design decisions]]></content:encoded>
    </item>
    <item>
      <title>Import Maestro and Playwright test scripts</title>
      <description>The mobile script importer now understands Maestro YAML flows and Playwright (mobile-web) scripts, on top of Appium-Python and WebdriverIO.</description>
      <guid isPermaLink="false">8b3b1d5b-180c-4b39-a6d0-c6dc27af5e71</guid>
      <pubDate>Wed, 08 Jul 2026 21:52:11 GMT</pubDate>
      <category>mobile</category>
      <category>import</category>
      <category>refine-with-ai</category>
      <content:encoded><![CDATA[## More ways to import an existing mobile test

`import_mobile_script` turns a test script you already have into a runnable bugAgent automation that keeps your own locators — no label guessing. It now accepts two more formats:

- **Maestro** — YAML flows (`tapOn`, `inputText`, `assertVisible`, `swipe`, `back`, …), mapping your `id`/`text` selectors directly.
- **Playwright** (mobile-web) — `getByTestId` maps to the resource id, `getByRole`/`getByLabel` to the accessibility id, and `getByText` to on-screen text; selectors that can't map to a native element are reported as warnings rather than guessed.

Already supported: Appium-Python and WebdriverIO. Android apps.]]></content:encoded>
    </item>
    <item>
      <title>More reliable field resolution in mobile refinement</title>
      <description>Input fields that have no stable ID now resolve by their own on-screen label instead of falling back to a positional guess.</description>
      <guid isPermaLink="false">aa3f8c4d-ac0d-43fd-96bd-0c43be124f11</guid>
      <pubDate>Wed, 08 Jul 2026 19:42:41 GMT</pubDate>
      <category>mobile</category>
      <category>refine-with-ai</category>
      <category>reliability</category>
      <content:encoded><![CDATA[## Semantic locator fallback for label-only input fields

When a refined mobile script types into a field that has **no stable resource ID** (for example, Jetpack Compose fields without test tags), the refinement now locates that field by its own recorded label rather than falling back to a positional/focus guess that could land on the wrong field.

- Fields that already have a stable ID are unaffected — the ID stays the primary locator.
- If two label-only fields share the exact same label (which can't be told apart), the label rung is skipped so nothing regresses.]]></content:encoded>
    </item>
    <item>
      <title>Mobile refinement now checks your per-step expectations</title>
      <description>Refine-with-AI certification verifies each step_expectation against a screenshot taken at that step, and can block certification under strict intent.</description>
      <guid isPermaLink="false">4542548e-8b58-4aee-a7f8-7d808d371df7</guid>
      <pubDate>Wed, 08 Jul 2026 17:04:08 GMT</pubDate>
      <category>mobile</category>
      <category>refine-with-ai</category>
      <category>certification</category>
      <content:encoded><![CDATA[## Per-step intent checks in mobile refinement

When you refine a mobile automation with a stated intent, you can attach per-step expectations (what should be true at a given step). During certification, the refinement now captures a screenshot at each of those steps and checks it against your expectation.

- Results are always recorded on the refinement's activity log.
- With **strict** intent, a confident mismatch blocks the script from certifying and asks the agent to revise — so a run that passes every tap but lands on the wrong screen no longer certifies.
- Non-strict (advisory) intent still certifies; the checks are surfaced as guidance.]]></content:encoded>
    </item>
  </channel>
</rss>