Skip to content

feat(skills): QA skills — file-bug-insight, drive-ui, playwright-cli, quality-vector-tests - #2049

Merged
ktursunov merged 5 commits into
mainfrom
qa-skills
Jul 31, 2026
Merged

feat(skills): QA skills — file-bug-insight, drive-ui, playwright-cli, quality-vector-tests#2049
ktursunov merged 5 commits into
mainfrom
qa-skills

Conversation

@ktursunov

@ktursunov ktursunov commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Four skills for the QA workflow, under .claude/skills/. Docs only — no product code, no CI changes.

What is here

file-bug-insight — file an Insight defect as a GitHub issue in this repo. Triage against existing issues, gather evidence down the medallion, localize the fix to the layer that owns it, draft a report that reads in under a minute, confirm, create, verify. Issues are created with the native Type=Bug and no labels — component, team and planning labels are a grooming call, and a wrong one routes the bug to the wrong team.

The name matters: a user-level skill called file-bug shadows a project skill of the same name, and the project copy then never loads with no warning. Hence file-bug-insight.

drive-ui — get an authenticated browser on any stand and capture evidence someone can act on. Covers the local path (fakeidp default, the DEV_USER_EMAIL seed behind 403/caller_unresolved, ports and the kind port-forward) and the remote one (attach over CDP, never launch — a passkey cannot be completed in a browser you started; detach, never close). Includes the check that stops a gold-view defect being filed against the SPA: read the console and the API response before calling a wrong number a frontend bug.

playwright-cli — the browser command surface, vendored so drive-ui has its commands in-repo.

quality-vector-tests — author the Testing section of a feature issue, grouped by the five quality vectors, every check written as Metric / How measured / Target. Provenance and specific feature numbers were removed so it stays usable as the issues it was derived from move on.

Verification

Every factual claim was checked against the live repo, the project board and the installed tooling rather than written from memory. That pass caught, and this branch fixes:

  • the worked example's code links (handlers.rs L992 → L1070, entities.rs L38 → L39)
  • the ClickHouse commands — silver needs its silver. prefix, and all three need the password compose sets
  • the duplicate search — closed issues rank after every open one, so --limit 20 never reaches a regression
  • the CI-scanner premise — semgrep, trivy and codeql do run here, so a security target is measurable
  • the metric-spec coverage denominator (specs over catalog metrics, not specs over specs) and the connector count

Board and priority field IDs, every gh flag, all referenced repo paths and the insight-front routes and aria-label selectors were confirmed live.

Notes for review

  • References to skills that do not exist yet (metric-parity, release-verify, a finding contract) are deliberately hedged — a missing sibling degrades to the hand-run commands rather than failing.
  • .claude/ is not wired into CI, so nothing here runs automatically.

Summary by CodeRabbit

  • Documentation
    • Expanded Playwright CLI guidance for browser session management, session attachment, authentication-state workflows, request mocking, code execution, tracing, video recording, spec-driven testing, and element attribute inspection.
    • Added guidance for acquiring authenticated UI evidence and documenting reproducible observations when visual verification isn’t possible.
    • Introduced a standardized quality-vector testing format with measurable metric/target requirements, plus worked examples for greenfield and migration scenarios.
    • Refined bug-reporting templates to emphasize “what was observed” evidence (steps, expected/actual outputs) over diagnosis.

@ktursunov
ktursunov requested a review from a team as a code owner July 30, 2026 07:58
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds Playwright CLI reference documentation, revises UI investigation and observation-only bug filing guidance, and introduces quality-vector testing instructions with worked examples for measurable Insight issue criteria.

Changes

Playwright CLI Documentation

Layer / File(s) Summary
CLI skill and core browser workflows
.claude/skills/playwright-cli/SKILL.md
Documents Playwright CLI commands, output modes, browser targeting, sessions, installation, and common workflows.
Execution, sessions, storage, and test workflows
.claude/skills/playwright-cli/references/running-code.md, .claude/skills/playwright-cli/references/session-management.md, .claude/skills/playwright-cli/references/storage-state.md, .claude/skills/playwright-cli/references/playwright-tests.md, .claude/skills/playwright-cli/references/spec-driven-testing.md
Documents code execution, browser state, session management, test debugging, and spec-driven testing.
Mocking, inspection, tracing, and video
.claude/skills/playwright-cli/references/request-mocking.md, .claude/skills/playwright-cli/references/element-attributes.md, .claude/skills/playwright-cli/references/tracing.md, .claude/skills/playwright-cli/references/video-recording.md
Adds network mocking, DOM inspection, tracing, and video-recording references.

Insight UI Investigation and Bug Filing

Layer / File(s) Summary
UI authentication and evidence capture
.claude/skills/drive-ui/SKILL.md, .claude/skills/file-bug-insight/SKILL.md
Documents authenticated browser acquisition, readiness checks, UI targeting, paired API evidence, and evidence artifacts.
Triage and evidence workflow
.claude/skills/file-bug-insight/SKILL.md
Updates intake gates, duplicate searches, reproduction grouping, environment handling, and bronze/silver/gold evidence collection.
Observation-only issue construction
.claude/skills/file-bug-insight/SKILL.md
Restructures issue templates, metadata, examples, scrubbing, creation, and verification around observed outputs.

Quality-Vector Testing Documentation

Layer / File(s) Summary
Quality-vector format and authoring workflow
.claude/skills/quality-vector-tests/SKILL.md
Defines vector assignment, measurable Metric/How measured/Target fields, grounding, tool checks, denominators, issue editing, and parity gates.
Quality-vector worked examples and mappings
.claude/skills/quality-vector-tests/references/*
Adds lean, migration, port, and vector-mapping examples with measurable checks and classification guidance.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

  • constructorfabric/insight#2063 — The PR adds the documented QA agent skill files described by this issue.

Suggested reviewers: cyberantonz

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the addition of the four QA skill docs and matches the PR scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch qa-skills

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

🟡 Minor comments (10)
.claude/skills/playwright-cli/references/running-code.md-39-42 (1)

39-42: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the geolocation cleanup example.

clearPermissions() revokes the granted geolocation permission but does not clear a geolocation coordinate override set with setGeolocation(). Use setGeolocation(null) for location cleanup, or rename this to “Clear all permissions” if permission revoked state is the intended example.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/running-code.md around lines 39 -
42, Update the geolocation cleanup example to call setGeolocation(null) so it
clears the coordinate override created by setGeolocation(); keep
clearPermissions() only if the example is renamed to describe clearing
permissions rather than location state.
.claude/skills/quality-vector-tests/references/example-lean.md-96-101 (1)

96-101: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update the stale connector denominator.

This explanation says the denominator is 25 connectors, but the grounded count and canonical target are 26. Change 25 to 26 so the rationale does not contradict the example it explains.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-lean.md around lines
96 - 101, Update the connector coverage explanation in “What the format did” to
use the canonical denominator of 26 connectors instead of 25, keeping the
surrounding rationale unchanged.
.claude/skills/quality-vector-tests/references/vector-mapping.md-10-11 (1)

10-11: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix the contradictory pagination guidance.

The table classifies pagination integrity as Reliability, but the common-miss text says pagination gets filed under Efficiency. Change that sentence to say it is often mistakenly filed under Efficiency, matching .claude/skills/quality-vector-tests/SKILL.md.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/vector-mapping.md around
lines 10 - 11, Update the common-miss guidance in the vector-mapping table to
say pagination is often mistakenly filed under Efficiency, while preserving its
classification under Reliability and the existing explanation that no duplicates
or omissions are correctness claims.
.claude/skills/quality-vector-tests/SKILL.md-40-41 (1)

40-41: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the 3,000-record pagination arithmetic.

A fixture containing exactly 3,000 records at page size 500 has 6 pages. Change the examples to 6 pages, or change the fixture size so that 7 pages is mathematically accurate.

  • .claude/skills/quality-vector-tests/SKILL.md#L40-L41: correct the illustrative pagination row.
  • .claude/skills/quality-vector-tests/SKILL.md#L231-L232: correct the “3,000-record fixture” table entry.
  • .claude/skills/quality-vector-tests/references/example-lean.md#L67-L68: correct the worked example.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/SKILL.md around lines 40 - 41, Correct
the pagination arithmetic for the exactly 3,000-record, page-size-500 example by
changing the page count from 7 to 6 at
.claude/skills/quality-vector-tests/SKILL.md lines 40-41,
.claude/skills/quality-vector-tests/SKILL.md lines 231-232, and
.claude/skills/quality-vector-tests/references/example-lean.md lines 67-68; keep
the zero-duplicates, zero-omissions, and exact-total assertions unchanged.
.claude/skills/file-bug-insight/SKILL.md-165-170 (1)

165-170: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language to the fenced error block.

markdownlint reports MD040 for the fence at Line 167. Use text or console on the opening fence so the documentation passes the configured lint rule.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md around lines 165 - 170, Add a
language identifier such as text or console to the opening fenced block
containing the error output in the file-bug-insight documentation, leaving the
error contents unchanged.

Source: Linters/SAST tools

.claude/skills/file-bug-insight/SKILL.md-223-230 (1)

223-230: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Verify rendered Markdown, not only body.

gh issue view --json ... body returns raw issue Markdown, so this step cannot confirm the public issue renders correctly. Inspect the issue in the browser or fetch the rendered body via the GitHub REST HTML media type.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md around lines 223 - 230, Update the
“Verify what landed” instructions to validate rendered Markdown rather than
relying only on the raw body returned by gh issue view. In addition to checking
the existing type, labels, and content requirements, instruct the agent to
inspect the issue in a browser or fetch its rendered body using GitHub’s REST
HTML media type before reporting the URL and summary.
.claude/skills/playwright-cli/references/request-mocking.md-30-35 (1)

30-35: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify the fenced-block language.

Use text for the URL-pattern example so MD040 passes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/request-mocking.md around lines 30
- 35, Specify the fenced code block language for the URL-pattern examples by
adding the text language tag to the existing fence around the patterns. Do not
alter the patterns or surrounding documentation.

Source: Linters/SAST tools

.claude/skills/playwright-cli/references/request-mocking.md-44-53 (1)

44-53: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Await or return every route.fulfill() call.

These handlers discard the fulfillment promise, so fulfillment failures can become unhandled. Use return route.fulfill(...) in the conditional branches and await route.fulfill(...) in the delayed handler.

Also applies to: 81-85

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/request-mocking.md around lines 44
- 53, Update the request route handlers in the examples around the login mock
and the delayed handler so every route.fulfill call is awaited or returned. In
the conditional branches within the login route, return each fulfillment
promise; in the delayed handler, await the fulfillment call, preserving the
existing response behavior.
.claude/skills/playwright-cli/references/video-recording.md-124-129 (1)

124-129: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove the unsupported styleSheet option from the API table.

page.screencast.showChapter(title, options) supports description and duration; styleSheet is not a supported option here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/video-recording.md around lines 124
- 129, Remove the unsupported styleSheet option from the
page.screencast.showChapter API table entry, leaving only the supported
description and duration options while preserving the rest of the table.
.claude/skills/playwright-cli/references/video-recording.md-95-114 (1)

95-114: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Handle a nullable bounding box before constructing the overlay.

locator.boundingBox() can return null when the element is not visible, so the interpolated overlay HTML can throw while reading bounds.y. Add a visibility wait/null check before using the bounds.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/video-recording.md around lines 95
- 114, Handle the nullable result from boundingBox() before constructing the
overlay in the Walk the dog example: wait for the locator to be visible, then
check that bounds is non-null before reading its coordinates. Only call
screencast.showOverlay when valid bounds are available.
🧹 Nitpick comments (1)
.claude/skills/playwright-cli/references/session-management.md (1)

31-49: 🩺 Stability & Availability | 🔵 Trivial

Warn before using global cleanup commands.

close-all and especially kill-all can affect attached or user-owned browsers. Require checking playwright-cli list and closing only sessions owned by the workflow; reserve global cleanup for isolated environments. This matches the detach/ownership guidance in .claude/skills/drive-ui/SKILL.md:53-59.

Also applies to: 206-217

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/session-management.md around lines
31 - 49, Update the Browser Session Commands guidance for close-all and kill-all
to require running playwright-cli list first, closing only workflow-owned
sessions, and reserving global cleanup for isolated environments. Apply the same
ownership warning to the additional cleanup section, while leaving targeted
close commands unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/drive-ui/SKILL.md:
- Around line 44-59: Update the browser workflow documentation around the attach
and state-save examples to propagate the attached session name to every
subsequent Playwright command, including goto, console, requests, snapshot,
screenshot, state-save, and state-load. Use the explicit -s=chrome session form
consistently, or clearly document an intentional default-session behavior.
- Around line 55-61: Update the authentication state-saving instructions in the
drive UI skill to store the Playwright session file in a private path outside
$EVIDENCE, such as ~/.playwright-auth/stand-state.json, and use that same path
for later state-load operations. Note that the auth state should be ignored and
deleted when no longer needed.

In @.claude/skills/file-bug-insight/SKILL.md:
- Around line 43-51: Update the issue-search guidance in the “Search first”
section to run separate searches for open and closed issues for each vocabulary
variant, rather than relying on a mixed --state all search capped at 100
results. Preserve the existing duplicate-checking and cross-linking guidance,
while ensuring closed regression matches cannot be excluded by abundant open
results.

In @.claude/skills/playwright-cli/references/spec-driven-testing.md:
- Around line 164-165: Resolve the conflicting execution guidance around the
target-scenario workflow and its later parallelism statement: retain a
sequential, one-at-a-time policy because scenarios share state and file writes,
and remove or revise the claim that unique session names make parallel execution
safe. Ensure both referenced sections consistently require sequential execution
unless complete isolation is explicitly established.
- Around line 39-69: Add await page.pause() immediately after page.goto() in the
seed test and the reusable page fixture shown in the walkthroughs, including
equivalent ephemeral command examples. Keep the pause after navigation setup so
resume leaves the browser session open for subsequent snapshot and click
exploration.

In @.claude/skills/playwright-cli/references/storage-state.md:
- Around line 269-275: Update the Security Notes storage-state guidance to cover
every documented filename pattern, including auth.json, my-auth-state.json,
my-session.json, and storage-state-{timestamp}.json. Recommend storing state
outside the repository, and if local files are permitted, provide explicit
ignore rules that match all documented examples rather than only
*.auth-state.json.
- Around line 223-227: Update the page.evaluate example around
indexedDB.deleteDatabase to await a Promise that resolves on the request’s
onsuccess and rejects on onerror, ensuring run-code completes only after
database deletion finishes.

In @.claude/skills/playwright-cli/references/test-generation.md:
- Around line 12-18: Update the example workflow in the test-generation
reference to use the required seed test generation flow, including seed, debug,
and attach steps before interacting with the application. Apply the same change
to the related example at the referenced section, or clearly label both examples
as standalone sessions without test setup if they are not intended to use
fixtures, authentication, and custom setup.

In @.claude/skills/playwright-cli/references/tracing.md:
- Around line 20-50: Update the “Trace Output Files” section to document that
playwright-cli tracing-stop produces .playwright-cli/trace.zip rather than a
timestamped traces directory, include the npx playwright show-trace
.playwright-cli/trace.zip inspection command, and change any cleanup guidance to
target the actual trace.zip artifact.

In @.claude/skills/playwright-cli/SKILL.md:
- Around line 328-337: Update the local Playwright CLI guidance in the
installation and invocation instructions to use the agent-focused
`@playwright/cli`@latest package, installed with npm install -D and invoked as npx
playwright-cli. Keep the npx --no-install playwright-cli --version probe and
ensure the global fallback uses the same package and command path.

In @.claude/skills/quality-vector-tests/SKILL.md:
- Around line 173-185: Retain the governing one-metric/one-target rules in
.claude/skills/quality-vector-tests/SKILL.md:173-185. Update the worked examples
in .claude/skills/quality-vector-tests/references/example-lean.md:60-74,
example-migration.md:42-56, and example-port.md:40-49 so every outcome is a
separate check with an explicit denominator or zero-count numeric target; split
combined API, connector, metric, bad-request, UI-regression, and org-chart
outcomes, and replace the open-ended cross-namespace target with independently
measurable checks.

---

Minor comments:
In @.claude/skills/file-bug-insight/SKILL.md:
- Around line 165-170: Add a language identifier such as text or console to the
opening fenced block containing the error output in the file-bug-insight
documentation, leaving the error contents unchanged.
- Around line 223-230: Update the “Verify what landed” instructions to validate
rendered Markdown rather than relying only on the raw body returned by gh issue
view. In addition to checking the existing type, labels, and content
requirements, instruct the agent to inspect the issue in a browser or fetch its
rendered body using GitHub’s REST HTML media type before reporting the URL and
summary.

In @.claude/skills/playwright-cli/references/request-mocking.md:
- Around line 30-35: Specify the fenced code block language for the URL-pattern
examples by adding the text language tag to the existing fence around the
patterns. Do not alter the patterns or surrounding documentation.
- Around line 44-53: Update the request route handlers in the examples around
the login mock and the delayed handler so every route.fulfill call is awaited or
returned. In the conditional branches within the login route, return each
fulfillment promise; in the delayed handler, await the fulfillment call,
preserving the existing response behavior.

In @.claude/skills/playwright-cli/references/running-code.md:
- Around line 39-42: Update the geolocation cleanup example to call
setGeolocation(null) so it clears the coordinate override created by
setGeolocation(); keep clearPermissions() only if the example is renamed to
describe clearing permissions rather than location state.

In @.claude/skills/playwright-cli/references/video-recording.md:
- Around line 124-129: Remove the unsupported styleSheet option from the
page.screencast.showChapter API table entry, leaving only the supported
description and duration options while preserving the rest of the table.
- Around line 95-114: Handle the nullable result from boundingBox() before
constructing the overlay in the Walk the dog example: wait for the locator to be
visible, then check that bounds is non-null before reading its coordinates. Only
call screencast.showOverlay when valid bounds are available.

In @.claude/skills/quality-vector-tests/references/example-lean.md:
- Around line 96-101: Update the connector coverage explanation in “What the
format did” to use the canonical denominator of 26 connectors instead of 25,
keeping the surrounding rationale unchanged.

In @.claude/skills/quality-vector-tests/references/vector-mapping.md:
- Around line 10-11: Update the common-miss guidance in the vector-mapping table
to say pagination is often mistakenly filed under Efficiency, while preserving
its classification under Reliability and the existing explanation that no
duplicates or omissions are correctness claims.

In @.claude/skills/quality-vector-tests/SKILL.md:
- Around line 40-41: Correct the pagination arithmetic for the exactly
3,000-record, page-size-500 example by changing the page count from 7 to 6 at
.claude/skills/quality-vector-tests/SKILL.md lines 40-41,
.claude/skills/quality-vector-tests/SKILL.md lines 231-232, and
.claude/skills/quality-vector-tests/references/example-lean.md lines 67-68; keep
the zero-duplicates, zero-omissions, and exact-total assertions unchanged.

---

Nitpick comments:
In @.claude/skills/playwright-cli/references/session-management.md:
- Around line 31-49: Update the Browser Session Commands guidance for close-all
and kill-all to require running playwright-cli list first, closing only
workflow-owned sessions, and reserving global cleanup for isolated environments.
Apply the same ownership warning to the additional cleanup section, while
leaving targeted close commands unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 39bcfb26-4adf-4aac-af3e-acdf26b27114

📥 Commits

Reviewing files that changed from the base of the PR and between 7129aff and 051751c808956d25421d43ba09b4c540a8ee837d.

📒 Files selected for processing (18)
  • .claude/skills/drive-ui/SKILL.md
  • .claude/skills/file-bug-insight/SKILL.md
  • .claude/skills/playwright-cli/SKILL.md
  • .claude/skills/playwright-cli/references/element-attributes.md
  • .claude/skills/playwright-cli/references/playwright-tests.md
  • .claude/skills/playwright-cli/references/request-mocking.md
  • .claude/skills/playwright-cli/references/running-code.md
  • .claude/skills/playwright-cli/references/session-management.md
  • .claude/skills/playwright-cli/references/spec-driven-testing.md
  • .claude/skills/playwright-cli/references/storage-state.md
  • .claude/skills/playwright-cli/references/test-generation.md
  • .claude/skills/playwright-cli/references/tracing.md
  • .claude/skills/playwright-cli/references/video-recording.md
  • .claude/skills/quality-vector-tests/SKILL.md
  • .claude/skills/quality-vector-tests/references/example-lean.md
  • .claude/skills/quality-vector-tests/references/example-migration.md
  • .claude/skills/quality-vector-tests/references/example-port.md
  • .claude/skills/quality-vector-tests/references/vector-mapping.md

Comment thread .claude/skills/drive-ui/SKILL.md
Comment thread .claude/skills/drive-ui/SKILL.md Outdated
Comment thread .claude/skills/file-bug-insight/SKILL.md Outdated
Comment on lines +39 to +69
```ts
// tests/seed.spec.ts
import { test } from '@playwright/test';

test('seed', async ({ page }) => {
await page.goto('https://example.com/');
});
```

Preferred — push navigation into a fixture so scenario tests reuse it:

```ts
// tests/fixtures.ts
import { test as baseTest } from '@playwright/test';
export { expect } from '@playwright/test';

export const test = baseTest.extend({
page: async ({ page }, use) => {
await page.goto('https://example.com/');
await use(page);
},
});
```

```ts
// tests/seed.spec.ts
import { test } from './fixtures';

test('seed', async ({ page }) => {
// Fixture already navigates. This empty body tells agents where to start.
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate file =="
fd -a 'spec-driven-testing.md' . || true

echo "== git status/stat =="
git status --short || true
git diff --stat || true

echo "== file excerpt =="
if [ -f ".claude/skills/playwright-cli/references/spec-driven-testing.md" ]; then
  nl -ba .claude/skills/playwright-cli/references/spec-driven-testing.md | sed -n '1,120p'
fi

echo "== search related commands/docs =="
rg -n "resume|snapshot|page\.pause|playwright-cli|seed\(spec|fixtures" .claude playwright 2>/dev/null || true

Repository: constructorfabric/insight

Length of output: 263


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== locate file =="
find . -path '*/.claude/skills/playwright-cli/references/spec-driven-testing.md' -print 2>/dev/null || true

FILE=$(find . -path '*/.claude/skills/playwright-cli/references/spec-driven-testing.md' -print 2>/dev/null | head -n 1 || true)
echo "FILE=$FILE"

if [ -n "$FILE" ] && [ -f "$FILE" ]; then
  echo "== file excerpt =="
  awk '{printf "%6d:%s\n", NR, $0}' "$FILE" | sed -n '1,130p'

  echo "== git info for file =="
  git diff -- "$FILE" | sed -n '1,220p' || true
fi

echo "== search related text in repo =="
find . -maxdepth 6 -type f \( -name '*.md' -o -name '*.ts' -o -name '*.js' \) -print 2>/dev/null | head -n 200 | xargs -r grep -E "resume|snapshot|page\.pause|playwright-cli|seed\(spec|fixtures" 2>/dev/null || true

Repository: constructorfabric/insight

Length of output: 50383


🌐 Web query:

Playwright debug cli pause after test completes page.pause interactive inspection

💡 Result:

To pause your Playwright test for interactive inspection after it completes or at a specific point, you can use the following methods. Note that there is currently no native CLI flag (e.g., --leave-browser-open) to automatically pause after a test finishes [1][2]. 1. Using page.pause The most direct way to pause execution is to call await page.pause in your test code [3][4]. This stops execution and opens the Playwright Inspector, where you can inspect selectors, perform manual actions, and resume the test [3][4][5]. This requires the test to be run in headed mode (e.g., using --headed) [3][6]. 2. Using UI Mode For a better debugging experience, run your tests using Playwright's UI Mode [7]. npx playwright test --ui UI Mode provides a time-travel experience, allowing you to hover over each test action to see exactly what happened in the DOM, network requests, and console logs at that specific moment [7][8]. You can also pop out DOM snapshots for deeper inspection in browser DevTools [7][8]. 3. Workarounds to Keep Browser Open If you need to keep the browser open after a test completes, you can use one of these approaches: - Environment Variable: Use a conditional pause in your test code that is triggered by an environment variable [1][2]. if (process.env.KEEP_OPEN) { await page.pause; } Run it with: KEEP_OPEN=1 npx playwright test --headed - Test Fixture: You can create a custom fixture that automatically triggers a pause if an environment variable is set, preventing the need to modify every test file [1][2]. 4. Recommended Tooling For the best debugging experience, Playwright's official VS Code extension is highly recommended [5][9]. It allows you to set breakpoints directly in your IDE, see error messages, live-debug with "Show Browsers," and analyze test execution step-by-step using the built-in Trace Viewer [9].

Citations:


🌐 Web query:

site:playwright.dev/docs test debugging playwright-cli resume

💡 Result:

In Playwright, "resuming" test execution during debugging is primarily handled through the Playwright Inspector or the programmatic Debugger API. When debugging tests using the Playwright Inspector (triggered via the --debug CLI flag), you control execution using the toolbar at the top of the Inspector window [1][2]. The "Resume" (or "Play") button allows you to continue test execution until the next breakpoint or the end of the test [1][2]. Adding an await page.pause statement in your test code creates a manual breakpoint; clicking "Resume" in the Inspector while paused at this point will run the test and pause again only at the next page.pause call [1][3]. For more granular control, Playwright provides a Debugger API available on the browser context (browserContext.debugger) [4]: - debugger.resume: Resumes script execution. This throws an error if the debugger is not currently paused [4]. - debugger.runTo: Resumes execution and pauses again when an action originates from a specified source location [4]. While the --debug CLI flag provides a standard interactive workflow, you can also use UI Mode (npx playwright test --ui) for a time-travel debugging experience, which allows you to inspect test states and actions without needing to manually "resume" in the traditional sense, as it provides a visual timeline of the test execution [2][5].

Citations:


🌐 Web query:

Playwright Playwright CLI resume detach browser context closing when test finishes

💡 Result:

Playwright does not have a native CLI flag to "detach" or keep a browser context open after a standard test run finishes. By design, Playwright closes the browser context and the browser itself upon the completion of a test to ensure environment isolation and resource cleanup [1][2][3]. However, you can achieve this behavior using several established workarounds depending on your goal: 1. Using page.pause The most direct way to keep the browser open is to call page.pause at the end of your test [4][5]. This pauses test execution, opens the Playwright Inspector, and keeps the browser window active, allowing you to interact with the page manually [5]. 2. Using Environment Variables and Fixtures You can create a custom fixture or add a conditional check to your test code that triggers a pause only when a specific environment variable is set [6][4]. This keeps your production test runs clean while allowing local debugging: // Example fixture approach export const test = base.extend({ context: async ({ context }, use) => { await use(context); if (process.env.KEEP_OPEN) { await expect( => { expect(context.pages.every((page) => page.isClosed)).toBe(true); }).toPass({ intervals: [2_000] }); } }, }); Run this with: KEEP_OPEN=1 npx playwright test --headed [6]. 3. Playwright Inspector (--debug) Running your tests with the --debug flag (or setting PWDEBUG=1) automatically runs in headed mode, limits workers to 1, and opens the Playwright Inspector [7][5]. While it still closes the browser after the test completes, it provides the built-in control interface for stepping through actions [5]. 4. Distinction for Playwright Agent CLI If you are using the separate Playwright Agent CLI (which manages persistent browser sessions), the behavior is different from the standard test runner. In that context, sessions can be kept alive explicitly using --persistent and managed via commands like open, close, and kill-all [8][9]. These sessions are intended for long-lived, interactive, or multi-step manual workflows rather than standard unit/integration testing [8][10].

Citations:


Keep the seed session paused after setup.

resume lets the seed run to completion, so the documented snapshot/click interaction commands can run after the Playwright test has already closed the browser. Add await page.pause() after page.goto() (and apply the same pause in seeded fixture walkthroughs, for example in an ephemeral command) so the session stays open for exploration.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/spec-driven-testing.md around lines
39 - 69, Add await page.pause() immediately after page.goto() in the seed test
and the reusable page fixture shown in the walkthroughs, including equivalent
ephemeral command examples. Keep the pause after navigation setup so resume
leaves the browser session open for subsequent snapshot and click exploration.

Comment on lines +164 to +165
For each target scenario, in sequence (never in parallel — scenarios share the seed session):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Resolve the generation parallelism contradiction.

The workflow first says scenarios must never run in parallel because they share a seed session, then says parallel execution is safe because session names are unique. Choose one policy; the surrounding stateful, one-at-a-time workflow should remain sequential unless all shared state and file writes are explicitly isolated.

Also applies to: 221-223

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/spec-driven-testing.md around lines
164 - 165, Resolve the conflicting execution guidance around the target-scenario
workflow and its later parallelism statement: retain a sequential, one-at-a-time
policy because scenarios share state and file writes, and remove or revise the
claim that unique session names make parallel execution safe. Ensure both
referenced sections consistently require sequential execution unless complete
isolation is explicitly established.

Comment on lines +269 to +275
## Security Notes

- Never commit storage state files containing auth tokens
- Add `*.auth-state.json` to `.gitignore`
- Delete state files after automation completes
- Use environment variables for sensitive data
- By default, sessions run in-memory mode which is safer for sensitive operations

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Cover every documented storage-state filename.

The suggested *.auth-state.json ignore rule does not cover the examples auth.json, my-auth-state.json, my-session.json, or the auto-generated storage-state-{timestamp}.json. Recommend storing state outside the repository and, if local files are allowed, ignore all documented patterns explicitly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/storage-state.md around lines 269 -
275, Update the Security Notes storage-state guidance to cover every documented
filename pattern, including auth.json, my-auth-state.json, my-session.json, and
storage-state-{timestamp}.json. Recommend storing state outside the repository,
and if local files are permitted, provide explicit ignore rules that match all
documented examples rather than only *.auth-state.json.

Comment thread .claude/skills/playwright-cli/references/test-generation.md Outdated
Comment on lines +20 to +50
## Trace Output Files

When you start tracing, Playwright creates a `traces/` directory with several files:

### `trace-{timestamp}.trace`

**Action log** - The main trace file containing:
- Every action performed (clicks, fills, navigations)
- DOM snapshots before and after each action
- Screenshots at each step
- Timing information
- Console messages
- Source locations

### `trace-{timestamp}.network`

**Network log** - Complete network activity:
- All HTTP requests and responses
- Request headers and bodies
- Response headers and bodies
- Timing (DNS, connect, TLS, TTFB, download)
- Resource sizes
- Failed requests and errors

### `resources/`

**Resources directory** - Cached resources:
- Images, fonts, stylesheets, scripts
- Response bodies for replay
- Assets needed to reconstruct page state

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -e
echo "Repo files matching tracing.md:"
git ls-files | rg '(^|/)tracing\.md$|traces/.*|playwright|claude' | head -200 || true
echo
echo "Target file excerpt:"
if [ -f .claude/skills/playwright-cli/references/tracing.md ]; then
  nl -ba .claude/skills/playwright-cli/references/tracing.md | sed -n '1,170p'
else
  echo "target missing"
fi
echo
echo "Search trace-related text:"
rg -n "trace|traces|show-trace|artifact|resources" .claude/skills/playwright-cli/references/tracing.md .claude 2>/dev/null || true

Repository: constructorfabric/insight

Length of output: 13125


🏁 Script executed:

#!/bin/bash
set -e
echo "Tracing file:"
cat .claude/skills/playwright-cli/references/tracing.md
echo
echo "Playwright CLI skill outline/search:"
rg -n "trace|traces|show-trace|record|start|stop|cleanup|find" .claude/skills/playwright-cli -S || true

Repository: constructorfabric/insight

Length of output: 14225


🌐 Web query:

Playwright CLI tracing start-stop show-trace trace.zip artifacts

💡 Result:

In Playwright, tracing is used to capture browser operations, network activity, screenshots, and snapshots for debugging [1][2]. The process differs depending on whether you are using the Playwright Test runner or the low-level Playwright CLI/API [3][4]. ### 1. Recording Traces There are two primary ways to record traces: * Via Playwright Test: You can enable tracing automatically when running tests by setting the --trace flag [3][5]. * Example: npx playwright test --trace on [3][6] * Other options include on-first-retry, on-all-retries, and retain-on-failure [3][5]. * Via Playwright CLI / API (Manual/Agent): For custom browser sessions or automated workflows, you can explicitly start and stop tracing using the tracing command set [7][1]. * playwright-cli tracing-start: Begins recording [7][1]. * (Perform your browser actions) * playwright-cli tracing-stop: Ends the recording and saves the artifact to a file (default: trace.zip) [7][1]. When using the programmatic API (e.g., in a Node.js script), use context.tracing.start() and context.tracing.stop({ path: 'trace.zip' }) [2][6]. ### 2. Viewing Traces Once you have a trace.zip file, you can analyze it in two ways [3][8]: * GUI (Interactive): Use the show-trace command to launch the visual Trace Viewer application [3][8]. * Command: npx playwright show-trace path/to/trace.zip [3][6][8] * Alternatively, you can drag and drop your trace.zip directly into the web-based viewer at trace.playwright.dev [3][8][9]. * CLI (Non-Interactive/Scriptable): Introduced in later versions (e.g., 1.60+), the npx playwright trace command allows you to inspect trace contents programmatically, which is useful for CI pipelines or AI agents [8]. * List actions: npx playwright trace --list trace.zip [8] * Filter for errors: npx playwright trace --list --errors-only trace.zip [8] * Export network data: npx playwright trace --network --json trace.zip > network.json [8] ### Summary Table | Goal | Command / Method | |:--- |:--- | | Record Test Trace | npx playwright test --trace on [3][6] | | Record Manual Flow | playwright-cli tracing-start... playwright-cli tracing-stop [7][1] | | Visual Debugging | npx playwright show-trace <file.zip> [3][8] | | Automated/CLI Analysis | npx playwright trace <file.zip> [options] [8] | Traces saved to a trace.zip file capture the state of the browser, network requests, and console logs, serving as the primary artifact for post-mortem analysis [1][2][4].

Citations:


Document the actual trace zip artifact path.

playwright-cli tracing-stop saves the trace as .playwright-cli/trace.zip, not a traces/trace-{timestamp}.* directory tree. Also show how to inspect it (npx playwright show-trace .playwright-cli/trace.zip) and update the cleanup path to the actual artifact.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/tracing.md around lines 20 - 50,
Update the “Trace Output Files” section to document that playwright-cli
tracing-stop produces .playwright-cli/trace.zip rather than a timestamped traces
directory, include the npx playwright show-trace .playwright-cli/trace.zip
inspection command, and change any cleanup guidance to target the actual
trace.zip artifact.

Comment on lines +328 to +337
If global `playwright-cli` command is not available, try a local version via `npx playwright-cli`:

```bash
npx --no-install playwright-cli --version
```

When local version is available, use `npx playwright-cli` in all commands. Otherwise, install `playwright-cli` as a global command:

```bash
npm install -g @playwright/cli@latest

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== candidate file =="
fd -a 'SKILL\.md$' . | sed 's#^\./##' | rg 'playwright|SKILL.md' | head -50

echo "== target lines =="
nl -ba .claude/skills/playwright-cli/SKILL.md | sed -n '300,350p'

echo "== nearby playwright-cli commands in target file =="
rg -n "playwright-cli|npx playwright|--no-install|install -g|playwright cli" .claude/skills/playwright-cli/SKILL.md

echo "== package manifests mentioning playwright dependencies/packges =="
rg -n '"@?playwright/?cli"?|\"playwright-cli"|npx playwright-cli|npx playwright cli|npx --no-install' -S . --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' | head -200

Repository: constructorfabric/insight

Length of output: 184


🌐 Web query:

Microsoft Playwright CLI package playwright-cli npx playwright cli installation documentation

💡 Result:

There are two distinct types of CLI tools associated with Playwright, which are often confused: the standard Playwright Test CLI and the specialized Playwright CLI designed for coding agents [1][2][3]. Standard Playwright Test CLI This is the command-line interface used for running tests, generating code, and debugging in standard Playwright projects [3][4]. It is bundled with the standard playwright package and typically invoked via npx [5]. Usage: npx playwright test [options] npx playwright codegen [options] [url] npx playwright install [options] Playwright CLI for Coding Agents (@playwright/cli) This is a separate, dedicated tool designed specifically for use by coding agents (such as Claude Code or GitHub Copilot) to perform browser automation tasks [1][6][2]. The old package name playwright-cli is deprecated; you should use @playwright/cli [7][8]. Installation: For global access: npm install -g @playwright/cli@latest For local project use: npm install -D @playwright/cli@latest Usage: If installed globally, run it directly: playwright-cli --help If installed locally, use npx: npx playwright-cli --help Important Note on "npx playwright cli" Some older documentation or workflows might reference npx playwright cli. Current documentation for the agent-focused tool directs users to run playwright-cli directly if installed globally, or npx playwright-cli if installed locally [1][6][7]. Always check the official documentation at playwright.dev for the most current commands [1][3].

Citations:


🌐 Web query:

npm package @playwright/cli npx playwright-cli

💡 Result:

The @playwright/cli npm package is a dedicated command-line interface designed specifically for coding agents (such as Claude Code or GitHub Copilot) to interact with Playwright in a token-efficient manner [1][2]. It allows these agents to perform browser automation tasks—like navigating pages, clicking elements, taking screenshots, and typing text—using concise commands that avoid the overhead of large tool schemas [2][3]. To use the package locally, you can install it as a dependency in your project [2]: npm install -D @playwright/cli@latest Once installed, you can execute commands using npx: npx playwright-cli --help While some documentation mentions the usage of npx playwright-cli [2][4], other sections suggest npx playwright cli [1][5] depending on the specific installation and local setup. The official recommendation for agents is often to install it globally (npm install -g @playwright/cli@latest) to ensure the playwright-cli command is available directly [2][6]. The tool also supports installing "skills," which are specific capabilities for agents, via the command: playwright-cli install --skills [2][3] This package is separate from the standard Playwright library used for test automation and is optimized for LLM-based agentic workflows [2][6].

Citations:


🌐 Web query:

playwright.dev agent-cli installation npx playwright cli npx playwright-cli

💡 Result:

It is important to distinguish between the two different command-line tools provided by Playwright, as they serve different purposes and use different packages [1][2][3]. 1. Playwright CLI for Coding Agents (@playwright/cli) This is a specialized CLI designed for use with coding agents (like Claude Code or GitHub Copilot) to perform browser automation [1][4][3]. It is token-efficient and supports installing "skills" that allow agents to interact with web pages effectively [1][3]. Installation and Usage: - Global Installation: You can install it globally via npm: npm install -g @playwright/cli@latest [1][5][6] - Running it: Once installed, use the command: playwright-cli [command] [1][5][6] - Local Execution: If you prefer not to install it globally, you can execute it via npx: npx playwright-cli [command] [1][6] 2. Standard Playwright CLI (playwright) This is the standard command-line interface included with the main playwright package, used for running tests, generating code (codegen), and debugging [2][7]. Usage: - Execution: Always run this via npx to ensure you are using the version pinned to your project's dependencies: npx playwright [command] [2][7] Examples include: npx playwright test npx playwright codegen npx playwright install Summary Table Package: @playwright/cli | Purpose: Browser automation for AI coding agents | Command: playwright-cli [1][3] Package: playwright | Purpose: Test execution, debugging, and generation | Command: npx playwright [2][7] Do not confuse these two; if you are trying to run standard test suites, use npx playwright. If you are configuring a coding agent to control a browser, use the @playwright/cli tool [2][3].

Citations:


🌐 Web query:

"playwright-cli" "npx --no-install playwright"

💡 Result:

The command npx --no-install playwright runs the Playwright command-line interface (CLI) using a locally installed version of Playwright within your project, explicitly instructing npx not to download or install the package if it is not found [1][2][3]. Breakdown of the command components: 1. npx: A tool bundled with Node.js that executes Node.js binaries [1][4]. It typically searches for a package in the local node_modules directory first and, by default, will attempt to download and install the package from the registry if it is not found. 2. --no-install: This flag forces npx to only use a version of the package that is already installed locally in your project [1][2][3]. If the package is not found locally, the command will fail rather than attempting to download it. 3. playwright: The specific command being executed. This refers to the Playwright CLI tool, which is used for tasks such as running tests, installing browsers, and debugging [4][5]. Usage and Context: - Local vs. Global: This command is primarily used to ensure you are executing the version of Playwright pinned to your project's dependencies, preventing accidental execution of a different global version or unnecessary network downloads [1][3]. - Troubleshooting: If you receive an error when running npx --no-install playwright, it indicates that the Playwright package is not installed in your local node_modules folder [1][2]. In such cases, you should first install the necessary dependencies, typically by running npm install [6][5]. - Playwright-cli: Note that there is a distinction between the standard Playwright testing CLI (usually accessed via npx playwright) and the newer, specialized playwright-cli designed for coding agents [7][4][8]. Ensure you are using the correct package name for your specific use case [1][3].

Citations:


🌐 Web query:

"playwright.dev/agent-cli/installation" "npx playwright-cli"

💡 Result:

The Playwright CLI is a command-line interface designed to enable coding agents, such as Claude Code and GitHub Copilot, to perform browser automation [1][2]. ### Installation Methods You can install the Playwright CLI either globally or locally [3][4]. - Global installation (recommended for most users): bash npm install -g `@playwright/cli`@latest After installation, you can verify it by running playwright-cli --help [3][4]. - Local installation (using npx): If you prefer not to install the package globally, you can use it as a local dependency or invoke it directly via npx [3][4]: bash npm install -D `@playwright/cli`@latest npx playwright-cli --help ### Setting Up Skills To provide coding agents with richer context about available commands and workflows, you should install "skills" locally after installing the CLI [3][5]: bash playwright-cli install --skills ### Prerequisites - Node.js 20 or newer [3][4] - A coding agent (e.g., Claude Code, GitHub Copilot) [3][4] For further details and advanced usage, you can refer to the official Playwright CLI documentation [2].

Citations:


🌐 Web query:

"playwright.dev/getting-started-cli" "npx playwright cli"

💡 Result:

The npx playwright command serves as the primary interface for interacting with the standard Playwright testing library, while playwright-cli refers to a distinct tool designed specifically for browser automation in agentic workflows [1][2][3]. Standard Playwright CLI The command npx playwright [command] is used to execute standard testing and utility tasks provided by the Playwright library installed in your project [1]. Common commands include: - npx playwright test: Runs your test suite [1]. - npx playwright codegen: Generates tests by recording your browser interactions [1]. - npx playwright show-report: Opens the HTML report for your tests [1]. - npx playwright install: Installs necessary browser binaries [1]. - npx playwright --help: Lists all available commands for the installed version [1]. Agent-Focused Playwright CLI playwright-cli (often installed via @playwright/cli) is a separate, specialized tool built for coding agents that require token-efficient, concise browser control [2][3]. It allows agents to perform actions such as: - playwright-cli open [url]: Opens a browser page for automation [2][3]. - playwright-cli click [ref]: Performs clicks based on element references [2][3]. - playwright-cli screenshot: Captures the page state [2][3]. - playwright-cli install --skills: Installs specialized agent skills [2][3]. Distinction and Usage While both use "Playwright" in their names, they serve different purposes. The standard npx playwright command is integrated into your project's development workflow for testing [1], whereas playwright-cli is typically installed globally or locally as a dedicated utility for browser automation agents [2][4][3]. If you encounter a situation where you need to use a local version of the agent-focused CLI but the global command is unavailable, documentation suggests using npx playwright cli or npx --no-install playwright to invoke it if available within your environment [4][5]. Always check npx playwright --help or playwright-cli --help to see the specific capabilities available in your current installation [1][2].

Citations:


Align the local CLI instructions with the upstream installation path.

The agent-focused Playwright CLI is installed locally via npm install -D @playwright/cli@latest and invoked via npx playwright-cli, not npx playwright cli; use npx --no-install playwright-cli --version for the local probe unless this file intentionally targets the standard Playwright CLI instead.

🧰 Tools
🪛 SkillSpector (2.4.4)

[warning] 328: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 334: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/SKILL.md around lines 328 - 337, Update the
local Playwright CLI guidance in the installation and invocation instructions to
use the agent-focused `@playwright/cli`@latest package, installed with npm install
-D and invoked as npx playwright-cli. Keep the npx --no-install playwright-cli
--version probe and ensure the global fallback uses the same package and command
path.

Source: Linters/SAST tools

Comment thread .claude/skills/quality-vector-tests/SKILL.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.claude/skills/file-bug-insight/SKILL.md (1)

39-39: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Define one owner for wrong-number evidence collection.

Both skills currently document the same console/API capture workflow while assigning ownership differently.

  • .claude/skills/file-bug-insight/SKILL.md#L39-L39: make this the sole owner, or change it to consume the drive-ui workflow.
  • .claude/skills/drive-ui/SKILL.md#L92-L99: remove the duplicate instructions or make this the canonical evidence-collection section.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md at line 39, Make
.claude/skills/file-bug-insight/SKILL.md the sole owner of the wrong-number
console/API evidence workflow, retaining the `playwright-cli console`,
`requests`, and `request <n>` capture guidance. Update
.claude/skills/drive-ui/SKILL.md lines 92-99 to remove the duplicate workflow or
explicitly defer to file-bug-insight, so ownership is defined in only one place.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/file-bug-insight/SKILL.md:
- Line 13: Update the writing rules in SKILL.md to remove any instruction that
asks agents to explain why an issue happens, including the “State what happens,
then why” guidance. Replace it with a requirement to describe the observable
consequence or expected behavior, while preserving the existing “Report what you
saw, not why it happens” rule.
- Line 66: Require redaction of every artifact before attaching evidence to a
public issue: update the evidence guidance in
.claude/skills/file-bug-insight/SKILL.md at lines 66-66 to cover raw API
responses, logs, screenshots, snapshots, and query results, and update
.claude/skills/drive-ui/SKILL.md at lines 92-99 to explicitly prohibit attaching
raw headers, cookies, tokens, or user/tenant data.

---

Nitpick comments:
In @.claude/skills/file-bug-insight/SKILL.md:
- Line 39: Make .claude/skills/file-bug-insight/SKILL.md the sole owner of the
wrong-number console/API evidence workflow, retaining the `playwright-cli
console`, `requests`, and `request <n>` capture guidance. Update
.claude/skills/drive-ui/SKILL.md lines 92-99 to remove the duplicate workflow or
explicitly defer to file-bug-insight, so ownership is defined in only one place.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0dbf2f73-85d7-4479-be76-930633cba309

📥 Commits

Reviewing files that changed from the base of the PR and between 051751c808956d25421d43ba09b4c540a8ee837d and c619daa54a000bd2468fdf5e6e20c1a3b3d33b8f.

📒 Files selected for processing (5)
  • .claude/skills/drive-ui/SKILL.md
  • .claude/skills/file-bug-insight/SKILL.md
  • .claude/skills/playwright-cli/SKILL.md
  • .claude/skills/playwright-cli/references/spec-driven-testing.md
  • .claude/skills/quality-vector-tests/SKILL.md
💤 Files with no reviewable changes (1)
  • .claude/skills/playwright-cli/SKILL.md


Turn an observed defect into an issue someone else can act on in under a minute, carrying the data the reproduction produced.

**Report what you saw, not why it happens.** Reproduce, collect, attach. Diagnosis — which file, which layer, which expression — belongs to whoever picks the issue up: they have the context to be right, and a confident wrong cause in the body sends them down it before they start. An observation you can defend beats an explanation you cannot.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not reintroduce causal explanations into the writing rules.

“Report what you saw, not why it happens” conflicts with “State what happens, then why.” Replace the latter with observable consequence or expected behavior so agents are not instructed to add diagnosis.

Also applies to: 124-124

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md at line 13, Update the writing
rules in SKILL.md to remove any instruction that asks agents to explain why an
issue happens, including the “State what happens, then why” guidance. Replace it
with a requirement to describe the observable consequence or expected behavior,
while preserving the existing “Report what you saw, not why it happens” rule.


**Artifacts do not go in this repo.** Nothing in this tree is gitignored for scratch output — `scratch/`, `tmp/`, `artifacts/` are merely untracked, so a screenshot or a body file left behind surfaces in someone's `git status` and rides along on the next `git add -A`. Write evidence and the issue body to the session scratchpad directory your environment names, or to a fresh `mktemp -d`; that is what the `--body-file` path below assumes. (`../insight-workspace/scratch/` also works when that checkout sits alongside this one.)

- **Data / metric bugs** — run the same question at all three layers and record all three answers, even the ones that look normal. A reader who sees rows at bronze and silver but not at gold learns more from those three counts than from any sentence you could write about them. Empty **bronze** is the one case that ends the report: nothing was synced or seeded, so there is no product defect to file.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Require redaction of every artifact attached to a public issue.

The workflow captures raw API responses, logs, screenshots, snapshots, and query results, but the public-repo guidance only clearly scrubs issue-body text.

  • .claude/skills/file-bug-insight/SKILL.md#L66-L66: add artifact redaction before evidence is attached.
  • .claude/skills/drive-ui/SKILL.md#L92-L99: explicitly prohibit attaching raw headers, cookies, tokens, or user/tenant data.
📍 Affects 2 files
  • .claude/skills/file-bug-insight/SKILL.md#L66-L66 (this comment)
  • .claude/skills/drive-ui/SKILL.md#L92-L99
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md at line 66, Require redaction of
every artifact before attaching evidence to a public issue: update the evidence
guidance in .claude/skills/file-bug-insight/SKILL.md at lines 66-66 to cover raw
API responses, logs, screenshots, snapshots, and query results, and update
.claude/skills/drive-ui/SKILL.md at lines 92-99 to explicitly prohibit attaching
raw headers, cookies, tokens, or user/tenant data.

Konstantin Tursunov added 5 commits July 30, 2026 18:54
…cli, quality-vector-tests

Four skills for the QA workflow, all verified against the live repo, the
GitHub project board and the installed tooling rather than written from
memory.

file-bug-insight — file an Insight defect as a GitHub issue. Named to
avoid colliding with the user-level `file-bug` skill, which silently
shadowed it (user-level wins a name collision and the project copy never
loads). Carries the medallion evidence walk, layer localization, the
four-heading body template with a worked example, the public-repo scrub
rules and the live board/priority field IDs. Issues are created with the
native Type=Bug and no labels; component, team and planning labels are a
grooming call.

drive-ui — get an authenticated browser on any stand and capture evidence.
Merges local-stand coverage (fakeidp default, the DEV_USER_EMAIL seed
behind 403/caller_unresolved, ports and port-forward) with remote-stand
browser acquisition (attach over CDP, never launch, detach never close).
Includes the console/requests check that stops a gold-view defect being
filed against the SPA.

playwright-cli — the browser command surface, vendored so drive-ui has its
commands in-repo.

quality-vector-tests — author the Testing section of a feature issue,
grouped by the five quality vectors with every check as a
Metric/How-measured/Target triple. Provenance and specific feature numbers
removed so it stays usable as the issues it was derived from move on.

Reviewed for correctness and efficiency; fixes in this commit include the
worked example's code links (handlers.rs L1070, entities.rs L39), the
ClickHouse commands (silver. prefix and the required password), the
duplicate search limit (closed issues rank after open, so a short window
never reaches a regression), the CI-scanner premise (semgrep/trivy/codeql
do run here), the metric-spec coverage denominator, and connector counts.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
The filer reproduces the defect and attaches what the reproduction
produced. Diagnosis — which file, which layer, which expression — moves to
whoever picks the issue up. A cause written by someone who reproduced the
bug but did not write the code reads as authoritative, and the assignee
spends their first hour ruling it out.

- `## Root Cause` in the body template becomes `## Additional information`:
  counts at each layer, the API status and body, the log or dbt error
  verbatim, the same check on a state where it works — each labelled with
  what produced it, none of it translated into a claim about the cause.
- Drop the "localize the fix from the actual code" section, the fleet
  layer table, and the code-link and fix-checklist guidance. A list of
  sites to change is a diagnosis, and naming one wrong costs more than
  naming none.
- The medallion walk stays, reframed: run the same question at all three
  layers and report all three answers. Empty bronze still ends the report
  — nothing synced means no product defect.
- Filing no longer requires knowing the layer. Attach what was observed at
  each layer reachable and leave the conclusion open.
- Worked example rewritten: the decode error is pasted rather than
  explained, and the working admin endpoint is offered as a contrast the
  assignee can use, not as a theory about what differs.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
…ity-vector-tests

Carries the file-bug-insight rule across the two skills that feed it.

drive-ui
- "Before you blame the UI" becomes "Capture what is behind the number".
  A wrong value on screen may or may not come from the frontend, and the
  driver does not have to decide: capture the console and the API
  response, attach the on-screen value beside the returned one, and leave
  what they imply to whoever picks the issue up.
- When no browser is available, say what could not be verified and stop.
  Reading the frontend source to work out what the page would have shown
  produces a conclusion, not an observation. "Not visually confirmed" is a
  complete answer.

quality-vector-tests
- A Testing section states what gets measured and how, never why
  something is broken or where a fix would go. A defect found while
  grounding belongs in its own issue via file-bug-insight — the two
  artifacts have different readers, and a diagnosis buried in a feature's
  Testing section reaches neither.
- Grounding reports what was found rather than what it might mean: "the
  endpoint takes 4 filters, the issue lists 2" is checkable; "the filter
  work was descoped" is a story about people you did not talk to.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
…-issue search

drive-ui
- `attach --cdp=chrome` creates a session named after the channel, not
  `default` (session-management.md documents this). Unqualified `goto` or
  `snapshot` afterwards talks to a different browser or none, so export
  PLAYWRIGHT_CLI_SESSION or prefix with `-s=chrome`.
- Saved auth state moves out of $EVIDENCE to ~/.playwright-auth (mode
  700). $EVIDENCE is what gets dragged into a public issue, and a state
  file is live session cookies.

file-bug-insight
- Search open and closed separately. In a combined `--state all` query,
  closed matches rank after every open one and fall off the end of the
  window; a higher limit only postpones it. Two queries guarantee both.
- Worked example no longer says the same thing twice: the server log was
  pasted in both Steps and Additional information, and two facts appeared
  in both the prose paragraph and the bullets — in the example that is
  supposed to demonstrate "say each fact once". The template now sends
  verbatim output to Additional information and keeps Steps to actions and
  outcomes.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>
Removes references/test-generation.md and the five pointers to it (one in
SKILL.md, four in spec-driven-testing.md, including its cross-reference
table row). The remaining nine references stand alone; spec-driven-testing
still points at playwright-tests.md for the debug/attach mechanics.

Signed-off-by: Konstantin Tursunov <Konstantin.Tursunov@constructor.tech>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🧹 Nitpick comments (1)
.claude/skills/drive-ui/SKILL.md (1)

60-65: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Show the corresponding auth-state restore command.

This documents state-save but only mentions state-load in a comment, leaving the later-run workflow incomplete. Add the exact restore command and verify its session/path syntax.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/drive-ui/SKILL.md around lines 60 - 65, Update the
authentication workflow documentation around the state-save example to include
the exact corresponding playwright-cli state-load command using the same Chrome
session and ~/.playwright-auth/stand-state.json path. Keep the stale-state
guidance and cleanup instruction unchanged, and ensure the restore syntax
matches the documented save syntax.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/file-bug-insight/SKILL.md:
- Around line 164-168: Update the fenced server-log block in the relevant
documentation section to include an appropriate language identifier, such as
text or console, while preserving the log content unchanged.

In @.claude/skills/playwright-cli/references/request-mocking.md:
- Around line 30-35: Label the URL-pattern fenced code block in the
request-mocking documentation as text by adding the text language identifier to
its opening fence; leave the pattern examples unchanged.

In @.claude/skills/quality-vector-tests/references/example-lean.md:
- Line 9: Update the opening fenced code blocks at
.claude/skills/quality-vector-tests/references/example-lean.md:9-9 and
.claude/skills/quality-vector-tests/references/example-migration.md:8-8 to
include the markdown language identifier, changing each unannotated fence to a
markdown-labeled fence.
- Around line 100-101: Update the summary’s connector denominator from 25 to 26
in the referenced coverage guidance, keeping it consistent with the grounding
and canonical target statements.
- Around line 67-68: Correct the pagination example’s arithmetic in the
measurement description: update the page count for 3,000 records at a page size
of 500 from 7 to 6, while preserving the existing completeness targets of zero
duplicates, zero omissions, and exactly 3,000 records.

In @.claude/skills/quality-vector-tests/references/example-migration.md:
- Around line 79-81: Update the vector-count summary in the migration example to
state that each vector has one or more checks, or one section per vector,
instead of claiming one check per vector; leave the other summary points
unchanged.

In @.claude/skills/quality-vector-tests/references/example-port.md:
- Around line 44-49: Clarify the “Cross-namespace resolution” check by defining
the eligible fixture/evidence denominator and an explicit pass threshold above
the current 68% baseline, or reclassify it as a deferred observation instead of
a canonical test check. Update the metric, measurement, and target text
consistently within the cross-namespace section.

In @.claude/skills/quality-vector-tests/SKILL.md:
- Around line 40-41: Update the worked examples in the quality-vector test
guidance to use an exact record fixture and calculate the corresponding page
count explicitly, rather than saying “3,000+” and “7 pages.” Replace “total
exact” with a concrete numeric assertion, and split combined outcomes into
separate checks so API coverage, refusal behavior, connector count, and
metric-key count are independently measurable.
- Around line 60-64: Update the GitHub CLI examples in the quality-vector-tests
instructions to use a clearly defined issue-number variable or consistent
placeholder instead of the literal n. Apply it consistently to both gh issue
view and gh pr list commands, while preserving their existing repository, JSON
fields, search, and state options.

---

Nitpick comments:
In @.claude/skills/drive-ui/SKILL.md:
- Around line 60-65: Update the authentication workflow documentation around the
state-save example to include the exact corresponding playwright-cli state-load
command using the same Chrome session and ~/.playwright-auth/stand-state.json
path. Keep the stale-state guidance and cleanup instruction unchanged, and
ensure the restore syntax matches the documented save syntax.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c213d26b-55ff-4e66-b990-286d39470833

📥 Commits

Reviewing files that changed from the base of the PR and between c619daa54a000bd2468fdf5e6e20c1a3b3d33b8f and cc56575.

📒 Files selected for processing (17)
  • .claude/skills/drive-ui/SKILL.md
  • .claude/skills/file-bug-insight/SKILL.md
  • .claude/skills/playwright-cli/SKILL.md
  • .claude/skills/playwright-cli/references/element-attributes.md
  • .claude/skills/playwright-cli/references/playwright-tests.md
  • .claude/skills/playwright-cli/references/request-mocking.md
  • .claude/skills/playwright-cli/references/running-code.md
  • .claude/skills/playwright-cli/references/session-management.md
  • .claude/skills/playwright-cli/references/spec-driven-testing.md
  • .claude/skills/playwright-cli/references/storage-state.md
  • .claude/skills/playwright-cli/references/tracing.md
  • .claude/skills/playwright-cli/references/video-recording.md
  • .claude/skills/quality-vector-tests/SKILL.md
  • .claude/skills/quality-vector-tests/references/example-lean.md
  • .claude/skills/quality-vector-tests/references/example-migration.md
  • .claude/skills/quality-vector-tests/references/example-port.md
  • .claude/skills/quality-vector-tests/references/vector-mapping.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • .claude/skills/playwright-cli/references/playwright-tests.md
  • .claude/skills/playwright-cli/references/session-management.md
  • .claude/skills/playwright-cli/references/storage-state.md
  • .claude/skills/playwright-cli/references/spec-driven-testing.md

Comment on lines +164 to +168
> ```
> failed to list thresholds error=Query Error: error occurred while decoding column
> "value": mismatched types; Rust type `core::option::Option<f64>` (as SQL type
> `DOUBLE`) is not compatible with SQL type `DECIMAL`
> ```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify a language for the fenced log block.

The verbatim server-log fence lacks a language identifier and triggers Markdownlint MD040. Use an appropriate label such as text or console.

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 164-164: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/file-bug-insight/SKILL.md around lines 164 - 168, Update the
fenced server-log block in the relevant documentation section to include an
appropriate language identifier, such as text or console, while preserving the
log content unchanged.

Source: Linters/SAST tools

Comment on lines +30 to +35
```
**/api/users - Exact path match
**/api/*/details - Wildcard in path
**/*.{png,jpg,jpeg} - Match file extensions
**/search?q=* - Match query parameters
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify a language for the URL-pattern code fence.

SkillSpector reports markdownlint MD040 for this unlabeled fenced block. Use text for the pattern reference block.

Proposed fix
-```
+```text
 **/api/users           - Exact path match
 **/api/*/details       - Wildcard in path
 **/*.{png,jpg,jpeg}    - Match file extensions
 **/search?q=*          - Match query parameters
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 30-30: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/request-mocking.md around lines 30
- 35, Label the URL-pattern fenced code block in the request-mocking
documentation as text by adding the text language identifier to its opening
fence; leave the pattern examples unchanged.

Source: Linters/SAST tools

tooling doesn't exist.

## Before (loose author draft)
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add language identifiers to the fenced code blocks.

Both fences trigger Markdownlint MD040. Use markdown (or the appropriate language) after the opening backticks:

  • .claude/skills/quality-vector-tests/references/example-lean.md#L9-L9: change tomarkdown`.
  • .claude/skills/quality-vector-tests/references/example-migration.md#L8-L8: change tomarkdown`.
🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 9-9: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

📍 Affects 2 files
  • .claude/skills/quality-vector-tests/references/example-lean.md#L9-L9 (this comment)
  • .claude/skills/quality-vector-tests/references/example-migration.md#L8-L8
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-lean.md at line 9,
Update the opening fenced code blocks at
.claude/skills/quality-vector-tests/references/example-lean.md:9-9 and
.claude/skills/quality-vector-tests/references/example-migration.md:8-8 to
include the markdown language identifier, changing each unannotated fence to a
markdown-labeled fence.

Source: Linters/SAST tools

Comment on lines +67 to +68
- How measured: page a 3,000-record fixture at page size 500 (7 pages) and union the pages.
- Target: **0** duplicates, **0** omissions, total exact (3,000, not 500).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the pagination arithmetic.

A 3,000-record fixture with page size 500 produces 6 pages, not 7. The current instruction can make a valid implementation fail the example’s completeness check.

Proposed fix
-   - How measured: page a 3,000-record fixture at page size 500 (7 pages) and union the pages.
+   - How measured: page a 3,000-record fixture at page size 500 (6 pages) and union the pages.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- How measured: page a 3,000-record fixture at page size 500 (7 pages) and union the pages.
- Target: **0** duplicates, **0** omissions, total exact (3,000, not 500).
- How measured: page a 3,000-record fixture at page size 500 (6 pages) and union the pages.
- Target: **0** duplicates, **0** omissions, total exact (3,000, not 500).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-lean.md around lines
67 - 68, Correct the pagination example’s arithmetic in the measurement
description: update the page count for 3,000 records at a page size of 500 from
7 to 6, while preserving the existing completeness targets of zero duplicates,
zero omissions, and exactly 3,000 records.

Comment on lines +100 to +101
- Gave every target a denominator counted from the repo (59, 25, 17, 3,000/500) instead of "all"
or "100%".

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the connector denominator consistent.

The grounding and canonical target both state 26 connectors, but this summary says 25. Change the summary to 26 to avoid teaching conflicting coverage requirements.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-lean.md around lines
100 - 101, Update the summary’s connector denominator from 25 to 26 in the
referenced coverage guidance, keeping it consistent with the grounding and
canonical target statements.

Comment on lines +79 to +81
- De-paired the vectors; one check per vector; continuous 1–7 numbering.
- Turned `coverage?` / `Lighthouse?` into decided targets with denominators (`4/4` rejection cases,
`100%` of catalog metrics, `< 10s`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the vector-count summary.

The canonical example has multiple checks in Reliability, Versatility, and Performance. Replace “one check per vector” with “one or more checks per vector” (or “one section per vector”) so the summary matches the example.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-migration.md around
lines 79 - 81, Update the vector-count summary in the migration example to state
that each vector has one or more checks, or one section per vector, instead of
claiming one check per vector; leave the other summary points unchanged.

Comment on lines +44 to +49
5. **Cross-namespace resolution**
- Metric: share of reviewer-namespace identities (GitHub login / Bitbucket display-name)
resolved to a person.
- How measured: fixtures across all 26 connectors.
- Target: resolved wherever evidence allows; **git→HR ≈ 68% today** — kept as a check that stays
red until cross-namespace resolution lands, rather than a silently deferred gap.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the cross-namespace target measurable.

The metric is a share, but “resolved wherever evidence allows” defines neither the eligible denominator nor a pass threshold; 68% is only a current baseline. Add an explicit denominator and target, or mark this as a deferred observation rather than a canonical test check.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/references/example-port.md around lines
44 - 49, Clarify the “Cross-namespace resolution” check by defining the eligible
fixture/evidence denominator and an explicit pass threshold above the current
68% baseline, or reclassify it as a deferred observation instead of a canonical
test check. Update the metric, measurement, and target text consistently within
the cross-namespace section.

Comment on lines +40 to +41
> **Page errors** — page through 3,000+ records at page size 500 (7 pages) → **0 duplicates, 0
> omissions, total exact**

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep worked examples aligned with the measurable-target contract.

3,000+ records does not imply exactly seven pages at page size 500, and total exact is not a numeric target. The table also combines independent outcomes such as API coverage plus refusal behavior and connector count plus metric-key count. Use exact fixtures and split each independently reportable outcome into its own check.

Also applies to: 237-242

🧰 Tools
🪛 SkillSpector (2.4.4)

[warning] 251: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.

(Memory Poisoning (MP2))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/SKILL.md around lines 40 - 41, Update
the worked examples in the quality-vector test guidance to use an exact record
fixture and calculate the corresponding page count explicitly, rather than
saying “3,000+” and “7 pages.” Replace “total exact” with a concrete numeric
assertion, and split combined outcomes into separate checks so API coverage,
refusal behavior, connector count, and metric-key count are independently
measurable.

Comment on lines +60 to +64
Otherwise, don't invent a generic checklist. Read the issue and the actual implementation the same way
`scope-feature-tests` does — pull the issue (`gh issue view n --repo constructorfabric/insight
--json title,body,labels,parent`), check for a branch or merged PR (`gh pr list --repo constructorfabric/insight --search "n"
--state all`), then read the code — this repo for backend, ingestion and dbt, and the sibling
`../insight-front` for UI.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Do not pass the literal n to GitHub CLI commands.

As written, gh issue view n and --search "n" inspect the literal string n, not the requested issue. Use a clearly defined variable or consistent issue-number placeholder before users copy these commands.

🧰 Tools
🪛 SkillSpector (2.4.4)

[warning] 251: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.

(Memory Poisoning (MP2))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/quality-vector-tests/SKILL.md around lines 60 - 64, Update
the GitHub CLI examples in the quality-vector-tests instructions to use a
clearly defined issue-number variable or consistent placeholder instead of the
literal n. Apply it consistently to both gh issue view and gh pr list commands,
while preserving their existing repository, JSON fields, search, and state
options.

@ktursunov
ktursunov enabled auto-merge July 30, 2026 11:01
@ktursunov
ktursunov disabled auto-merge July 30, 2026 11:01
@ktursunov
ktursunov enabled auto-merge (squash) July 30, 2026 11:01
@ktursunov
ktursunov disabled auto-merge July 30, 2026 11:15
@ktursunov
ktursunov enabled auto-merge July 30, 2026 11:15
@ktursunov
ktursunov added this pull request to the merge queue Jul 31, 2026
Merged via the queue into main with commit f9fc3e5 Jul 31, 2026
32 of 34 checks passed
@ktursunov
ktursunov deleted the qa-skills branch July 31, 2026 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants