Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Scaffolds unit tests and screenshot tests to establish visual and functional rendering baselines for views before refactoring.
.claude/skills/chromedevtools-ui-eng-vision-test-scaffolder/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -16% | 0% |
This subskill establishes the safety net of existing and new visual/functional tests before any codebase modifications occur, ensuring that no rendering or logical regressions are introduced during modernization.
IndexedDBViews.test.tsfor IndexedDBViews.ts) under the target folder or test/unittests/.
test/interactions/ ortest/goldens/) matching the visual component to verify layout and styling.
file while missing another class being migrated (e.g., tests exist for IDBDatabaseView but are scarce/missing for IDBDataView).
migrated, draft a basic Mocha/Chai rendering test.
synthetic DOM helper or unit-test container.
CategorizedBreakpointsSidebarPane.test.ts:renderElementIntoDOM with {includeCommonStyles: true} to ensure styles are applied.{includeCommonStyles: true} to see if class isadding the styles itself. If the test pass, keep the version without {includeCommonStyles: true}. Otherwise, bring it back.
DEFAULT_VIEW) directly by passing mock state and callbacks.assertScreenshot to capture and verify the visual output.typescript it('renders the view', async () => { const target = document.createElement('div'); renderElementIntoDOM(target, {includeCommonStyles: true}); MyComponent.DEFAULT_VIEW(mockViewInput, undefined, target); await assertScreenshot('my_component/base.png'); });
Always detect the execution environment first to run tests successfully:
/google/cog/ or/google/src/.
npm run test or autoninja failbecause they lack Google cloudtop/virtualization wrapper configurations.
npm run test or standard autoninja directly.tests in the cloud workspace:
bash python3 internal/infra/scripts/cider/init_workspace.py test /google/cog/cloud/username/workspace_name --test_filter=front_end/panels/application/IndexedDBViews.test.ts
checkout without Cog paths.
vpython3: command not found orpython3_bin_reldir.txt not found.
depot_tools path:bash export PATH=$PATH:/path/to/depot_tools
once from the checkout root:
bash update_depot_tools
bash npm run test -- front_end/panels/application/IndexedDBViews.test.ts
ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for scripts/eslint_rules/...
parse the rules:
bash npm run build
div -> span).{includeCommonStyles: true}.Before reporting back or committing, re-read the instructions and verify:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,986 | 11,485 | -32% | 1 | 1 | 0% | 3,540 | 3,833 | +8% | 0 | 0 | — |
case-02 | fail→pass | 23,267 | 11,957 | -49% | 1 | 1 | 0% | 4,841 | 3,867 | -20% | 0 | 0 | — |
case-03 | fail→fail | 19,608 | 8,507 | -57% | 1 | 1 | 0% | 3,974 | 3,096 | -22% | 0 | 0 | — |
case-04 | fail→pass | 10,039 | 2,445 | -76% | 1 | 1 | 0% | 1,980 | 1,945 | -2% | 0 | 0 | — |
case-05 | fail→pass | 8,846 | 3,390 | -62% | 1 | 1 | 0% | 1,734 | 2,192 | +26% | 0 | 0 | — |
case-06 | pass→pass | 8,740 | 2,337 | -73% | 1 | 1 | 0% | 1,634 | 1,813 | +11% | 0 | 0 | — |
case-07 | fail→pass | 13,086 | 2,753 | -79% | 1 | 1 | 0% | 2,302 | 1,945 | -16% | 0 | 0 | — |
case-08 | fail→pass | 11,286 | 3,280 | -71% | 1 | 1 | 0% | 1,825 | 2,088 | +14% | 0 | 0 | — |
case-09 | pass→pass | 10,506 | 6,369 | -39% | 1 | 1 | 0% | 1,848 | 2,700 | +46% | 0 | 0 | — |
case-10 | pass→pass | 7,791 | 3,038 | -61% | 1 | 1 | 0% | 1,362 | 2,056 | +51% | 0 | 0 | — |
case-11 | fail→pass | 5,854 | 2,642 | -55% | 1 | 1 | 0% | 937 | 1,861 | +99% | 0 | 0 | — |
case-12 | fail→pass | 7,032 | 1,896 | -73% | 1 | 1 | 0% | 1,278 | 1,786 | +40% | 0 | 0 | — |
case-13 | fail→pass | 7,808 | 2,568 | -67% | 1 | 1 | 0% | 1,388 | 1,797 | +29% | 0 | 0 | — |
case-14 | fail→pass | 8,011 | 1,923 | -76% | 1 | 1 | 0% | 1,557 | 1,830 | +18% | 0 | 0 | — |
case-15 | pass→pass | 9,700 | 5,002 | -48% | 1 | 1 | 0% | 1,777 | 2,369 | +33% | 0 | 0 | — |
case-16 | pass→pass | 11,308 | 5,765 | -49% | 1 | 1 | 0% | 2,161 | 2,588 | +20% | 0 | 0 | — |
case-17 | pass→pass | 12,818 | 7,446 | -42% | 1 | 1 | 0% | 2,338 | 2,828 | +21% | 0 | 0 | — |
case-18 | fail→pass | 14,276 | 4,685 | -67% | 1 | 1 | 0% | 2,703 | 2,418 | -11% | 0 | 0 | — |
case-19 | fail→fail | 17,953 | 18,669 | +4% | 1 | 1 | 0% | 4,272 | 5,137 | +20% | 0 | 0 | — |
case-20 | fail→fail | 12,157 | 5,843 | -52% | 1 | 1 | 0% | 2,756 | 1,869 | -32% | 0 | 0 | — |
case-21 | fail→fail | 21,547 | 5,580 | -74% | 1 | 1 | 0% | 4,576 | 1,859 | -59% | 0 | 0 | — |
case-22 | fail→fail | 10,013 | 13,455 | +34% | 1 | 1 | 0% | 2,200 | 4,483 | +104% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.