- `extension_manifest_validate` no longer tells a Firefox MV2 manifest to port `background.scripts` to `chromium:service_worker` when the manifest already declares one, nested under `background` or as a top-level `chromium:background`, and no longer asks for `chromium:action` when one is declared. A Firefox MV3 manifest whose only background is `background.scripts` now hears that Chromium MV3 runs only a service worker. The `newtab-react` template drew the port advice on every Firefox check.
- `extension_browsers` reports one version per browser, read from the binary itself: the bundle's `Info.plist` or `application.ini` first (the way the engine's `firefox-location2` reads it), then `--version`, keeping a prerelease suffix such as `a1`, `b3` or `esr`. `detect` used to cut Nightly's "159.0a1" to "159.0", and `list` reported no version at all, so an agent compared the cache folder `mac_arm-nightly_158.0a1` of a self-updated Nightly with "159.0" and called it a mismatch. `list` now carries `version` beside `binaryPath`, and the folder name stays only in the path.
- `extension_list_extensions` on Chromium lists every extension installed in the session profile, not only the ones with a live CDP target: an extension whose MV3 service worker has gone dormant is listed with `running: false` and no contexts, and live ones carry `running: true`. Component extensions (the PDF viewer) stay out.
- `extension_storage` says when the project's source manifest does not declare the `storage` permission: the answer carries `manifestDeclaresStorage: false` and a warning that the dev session's control channel answered anyway while the extension's own code gets no `chrome.storage` without it.
- The plugin's CLAUDE.md template table lists `ai-chatgpt` under Sidebar beside `ai-claude`; it sat under Action popup, and every AI template is a side panel.
- `extension_theme_verify` names steps a user can take for the two legs it cannot settle headless: open the theme in the editor at themes.extension.dev, and run it with `extension_dev` to look at the browser. It named two internal harnesses (`assert:theme`, `install-parity`) that exist only in the maintainers' repository, and agents read them out as next steps.
- `extension_analyze` lists every page the manifest declares as an entry point: `chrome_url_overrides` (new tab, history, bookmarks), `options_ui.page` and `options_page`, `side_panel.default_path`, `sidebar_action.default_panel` and `devtools_page`, beside the background and popup it already read.
- CI runs all three required engine cells (`verify (canary)`, `verify (stable)`, `verify (floor)`) on every run, even when two resolve to the same version. It de-duplicated them by version, so with all three at 4.1.33 only `verify (canary)` ran, the other two required checks never reported, and every pull request read BLOCKED.
- `extension_theme_verify` calls a manifest with no `manifest_version` (and no Extension.js `chromium:manifest_version`) invalid: Chrome refuses to load any extension without it, themes included. It answered headless-clean, and agents had to warn on its own that Chrome "may refuse" the theme.