About qa-automation
qa-automation is a skill for creating or updating automation scripts, with automation_change_set.json tracking scope, changes, validation, and review status. It follows existing test conventions and approval gates, and restricts unapproved remote actions and other QA work.
Key features
- 01Track planned and applied changes in a change set
- 02Accept planner, executor, Notion, and Plane inputs
- 03Follow existing repository frameworks and conventions
- 04Create or update scripts under defined rules
- 05Run available light validation and record results
- 06Gate script review and promotion
Use cases
- 01Create automation scripts from approved test cases
- 02Fix automation failures with a clear root cause
- 03Track script changes, validation, and review status
- 04Sync Notion and Plane status under policy
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ fikyanggra/ skills --skill qa-automationAfter installing, type/qa-automationin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlexamples/automation-change-set.example.jsonexecutor-automation-signal.jsonnotion-automation-source.example.jsonnotion-plane-bridge.example.jsonnotion-status-update.example.jsonoutput-automation-review.example.mdplane-automation-comment.example.mdplane-automation-work-item.example.jsonplanner-automation-contract.jsonreferences/branch-policy.mdlocator-policy.mdnotion-mcp.mdnotion-plane-bridge.mdplane-mcp.mdplaywright-typescript.mdschemas/automation-change-set.schema.jsonautomation-review.schema.jsonautomation-status-update.schema.jsonnotion-sync-record.schema.jsonplane-sync-record.schema.jsonvalidation-result.schema.jsontemplates/automation-change-set.jsonautomation-review.mdnotion-automation-comment.mdnotion-automation-page.mdnotion-plane-bridge.jsonnotion-sync-record.jsonpatch-summary.mdplane-automation-comment.mdDetails
From the project READMEQA Automation
Use this skill to create or update automation scripts through a governed change-set workflow. Treat automation_change_set.json as the source of truth for scope, mappings, planned changes, applied changes, validation, review gates, promotion readiness, Notion sync, Plane sync, bridge sync, gaps, and downstream status updates.
Core Rule
Do automation work only. Do not create test cases from raw requirements, run manual QA as executor, write final QA reports, submit issues, invent selectors/endpoints/credentials/test data, automatically create follow-up items for gaps, or push/merge remote branches without explicit user request and approval.
Create/update Notion or Plane objects only when the request and write policy are clear. Delete/archive Notion or Plane objects only after explicit user approval given after reading the target and summarizing impact.
Inputs
Accept six input paths.
Planner contract:
- Load
create_scripts,update_scripts,manual_only, automation statuses, priority filters, automation gaps, approved test cases, and expected results. - Map
To Be Automateto script creation. - Map
Already Automateto script update or validation. - Skip
Manual Onlyunless a human explicitly changes the status.
Executor signal:
- Load failed automation-related cases, flaky technical failures, selector gaps, API gaps, data gaps, and update candidates.
- Improve waits, assertions, isolation, or locators only when root cause is clear.
- Do not weaken assertions or change tests to pass a business failure.
Manual request:
- Accept test case text/table, script update request, repo path, existing script path, framework note, branch policy, or validation command.
- If repo exists, follow repo framework, style, package manager, folder naming, fixture, and helper patterns.
- If repo/framework is absent, use Playwright TypeScript fallback.
- If essential information is missing, ask for it or record a gap in
automation_change_set.json.
Notion input:
- Accept Notion page URLs, database/data source URLs, page ids, database ids, data source ids, comments, or MCP payloads.
- Treat Notion as a source and synced status surface, not source of truth.
- If Notion signals are present, read
references/notion-mcp.mdbefore continuing. - Preserve source locators for every Notion-sourced test case.
- Update
Automation StatustoAutomation Implementedafter script create/update. - Update
Automation StatustoAlready Automateonly after script reviewOKand relevant validationpassed.
Plane input:
- Accept Plane readable ids such as
DKI-179, Plane URLs, UUIDs, work items/cards/sub-work-items, comments, pages/wiki, or MCP payloads. - Treat Plane as workflow surface and synced summary surface, not source of truth.
- If Plane signals are present, read
references/plane-mcp.mdbefore continuing. - Read available project states before state movement. Use dynamic user/package mapping only; do not invent states.
Notion + Plane bridge:
- Activate when both systems are provided or Plane content contains Notion links.
- If bridge signals are present, read
references/notion-plane-bridge.mdbefore continuing. - Use Notion for test case/status source and Plane for workflow summary unless the user says otherwise.
Workflow
- Inspect inputs and repository context.
- Create or update
automation_change_set.jsonusingschemas/automation-change-set.schema.jsonwhen validation tooling exists. - Resolve Notion and Plane source refs when active, then record read gaps if tools are missing or fail.
- Resolve Notion and Plane write policies before any write.
- Detect framework, package manager, test commands, test id convention, branch policy, and existing script style.
- Plan every file change before editing and map each change to a TC ID or approved manual request.
- Generate or update scripts, Page Objects, fixtures, helpers, config, or test data only when required.
- Run available light validation: format check, lint, typecheck, config validation.
- Run targeted automation only when environment, credentials source, and data are ready.
- Run full automation suite only when user explicitly asks or release policy requires it.
- Sync Notion status to
Automation Implementedafter script create/update when policy allows. - Produce script review package and wait for human OK/NOK when required.
- Sync Notion status to
Already Automateonly after script reviewOKand validationpassed. - Sync Plane terminal comment, description summary, links, worklog, page/wiki, or state only when policy allows.
- Produce promotion checklist and require explicit approval before any remote push, deploy, or merge.
Change Set
Use automation_change_set.json as canonical state. Include:
repo_context: repo path, package manager, test commands, branch info, detected conventions.framework: detected framework or Playwright TypeScript fallback.branch_policy: repo policy or fallbackdevelop -> master.automation_scope: create, update, manual-only, skipped, or validation-only work.test_case_mappings: TC ID to script path, spec title, assertions, selectors, and status.planned_changes: intended file actions before edits.applied_changes: actual file actions after edits.validation_results: lint, typecheck, format check, config validation, targeted run, full run.review_gates: script review and promotion review with OK/NOK state.promotion_status: readiness for push, deploy, or merge.notion_context,notion_write_policy,notion_sync: Notion source refs, write rules, and sync records.plane_context,plane_write_policy,plane_state_mapping,plane_sync: Plane source refs, dynamic state handling, write rules, and sync records.notion_plane_bridge: discovered refs, cross-links, idempotency key, and partial sync status.crud_operations: read/create/update/delete/archive/comment/link/state-change audit for Notion and Plane.gaps: selector, data, environment, fixture, API, repo, or framework gaps.changelog: dated change set events.
Allowed actions are create_script, update_script, skip_manual_only, mark_gap, refactor_approved, validation_only, sync_notion, sync_plane, and bridge_notion_plane.
Script Rules
- Follow existing framework before fallback.
- Use Playwright TypeScript fallback only for new/no-framework automation.
- Put TC ID in spec title, annotation, comment, or metadata.
- Derive assertions from expected results.
- Never write real secrets, tokens, passwords, cookies, or PII.
- Use fixtures/config for test data and
.env.examplefor environment names. - Use Page Object Model for repeated UI flows.
- Prefer shared auth/session fixtures when repo already uses them.
- Validate API status, payload, headers, and error bodies when relevant.
- Use DB verification only when connection and query are safe and provided.
- Avoid
waitForTimeout()unless unavoidable; document reason in the change set. - Keep tests deterministic, isolated, and cleanup-aware.
- Refactor minimally unless refactor is required or explicitly approved.
Locator Policy
Default priority:
getByRole()with accessible name.getByLabel()for form inputs.getByPlaceholder()only when label is absent and placeholder is stable.getByText()only when unique and stable.getByTestId()following repo test id config.- Stable CSS id/class only when semantic locator is unavailable.
- XPath only as last resort with reason.
Do not use generated class hashes, deep CSS chains, unstable ids, volatile text, or blind .nth() selectors. Record selector_gap when a stable selector is missing and suggest a testability improvement.
Review Gates
Script review:
- Human reviews scripts, patch summary, fixtures, locators, assertions, and validation.
- Status is
OKorNOK. - On
NOK, revise change set and scripts before promotion.
Promotion review:
- Requires script review OK, validation status known, gaps documented, branch policy known, and remote action approval state captured.
- Remote push, deploy, or merge needs explicit user approval even when readiness is
ready_to_push,ready_to_deploy, orready_to_merge.
Promotion states: draft, script_review_required, revision_required, validation_required, promotion_review_required, ready_to_push, ready_to_deploy, ready_to_merge, promoted, blocked.
Notion Managed Sync
Use Notion only when Notion input/output is active. Read references/notion-mcp.md first.
Default write policy:
- source status update enabled when a writable test case source is identified
- concise comment sync enabled when supported or requested
- automation page and result database sync disabled unless requested
- schema update disabled unless requested or enabled by policy
- delete/archive always requires explicit approval
Status rules:
Manual Only: unchanged unless a human changes itTo Be Automate: source case needs automationAutomation Implemented: script exists or was updated, but script review OK plus validation passed are not both completeAlready Automate: script review isOKand relevant validation haspassed
If Notion properties are missing and schema update is disabled/unavailable, record notion_schema_gap and use a comment or Notes fallback when possible. Use sync records and managed markers to avoid duplicate comments/pages/rows.
Plane Managed Sync
Use Plane only when Plane input/output is active. Read references/plane-mcp.md first.
Default write policy:
- terminal comment sync enabled when Plane context is active
- description sync enabled when requested or an existing managed block is found
- state sync disabled unless a dynamic mapping is provided or requested
- worklog and page/wiki sync disabled unless requested
- link sync enabled for script, change set, validation, review, and Notion refs when tools allow
- follow-up item creation disabled
- delete/archive always requires explicit approval
State policy:
- read project states before any state movement
- use explicit user/package/work-item mapping only
- skip state movement and record
plane_state_mapping_gapwhen mapping is absent - skip missing target states and record a transition gap
Plane comments and description summaries should be concise. When Notion has detailed output, Plane should carry summary and links only.
Notion + Plane Bridge
Read references/notion-plane-bridge.md when both systems are active or Plane content contains Notion links.
Rules:
automation_change_set.jsonremains canonical- Notion is the test case/status source when a high-confidence source exists
- Plane is the workflow surface
- ask the user when multiple Notion refs exist or the role is unclear
- cross-link Notion and Plane when policy allows
- record bridge status as
synced,partial,failed, orskipped - partial remote sync does not invalidate local automation output
Outputs
Canonical output:
automation_change_set.json
Human outputs:
automation-review.mdvalidation-report.mdpatch-summary.mdpromotion-checklist.md
Downstream outputs:
automation_status_updateqa_executor_validation_requestqa_reporter_automation_summary
Status update rules:
- script created/updated -> candidate for
Automation Implemented - script review OK and validation passed -> candidate for
Already Automate - script created but validation not run -> keep or set
Automation Implemented, markscript_created_unvalidated - blocked by gap -> keep
To Be Automate, record gap Manual Onlyremains unchanged unless human changes automation status
Quality Gates
Before presenting review-ready output:
- every planned/applied change maps to a TC ID or approved manual request
- every assertion maps to expected result
- selectors follow locator policy or a gap is recorded
- no secrets or PII are written
- Notion/Plane write policy is resolved before writes
- Notion status uses
Manual Only,To Be Automate,Automation Implemented, orAlready Automate Already Automateis used only after script reviewOKand validationpassed- Plane states are read before movement, and state movement is skipped when mapping is absent
- delete/archive approval is explicit before destructive Notion/Plane operations
- sync records exist for attempted Notion/Plane writes
- partial/failed sync is recorded as a gap
- gaps do not automatically create follow-up items
Resources
Read only when needed:
schemas/automation-change-set.schema.json: canonical change set schema.schemas/automation-review.schema.json: script and promotion review feedback schema.schemas/validation-result.schema.json: validation command result schema.schemas/automation-status-update.schema.json: downstream automation status schema.schemas/notion-sync-record.schema.json: Notion write idempotency and sync result schema.schemas/plane-sync-record.schema.json: Plane write idempotency and sync result schema.templates/: reusable review, validation, patch, promotion, and change-set templates.references/playwright-typescript.md: fallback project structure and command patterns.references/locator-policy.md: selector priority and anti-fragile rules.references/branch-policy.md: branch and remote action policy.references/notion-mcp.md: Notion MCP read/write/delete policy, status updates, idempotency, fallback, and redaction.references/plane-mcp.md: Plane MCP read/write/delete policy, dynamic state mapping, managed comments, description, links, worklogs, pages/wiki, fallback, and redaction.references/notion-plane-bridge.md: discovery, classification, cross-linking, duplication policy, partial sync, and safety.examples/: planner contract, executor signal, change set, and review examples.