agent-skill-kit 3.9.135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,882 @@
|
|
|
1
|
+
# e2e-automation
|
|
2
|
+
|
|
3
|
+
**Version 1.0.0**
|
|
4
|
+
Engineering
|
|
5
|
+
March 2026
|
|
6
|
+
|
|
7
|
+
> **Note:**
|
|
8
|
+
> This document is for agents and LLMs to follow when working on e2e-automation domain.
|
|
9
|
+
> Optimized for automation and consistency by AI-assisted workflows.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# E2E Automation — Playwright Testing
|
|
14
|
+
|
|
15
|
+
> Behavior-driven E2E tests. `data-testid` selectors. Auto-wait, never sleep. Zero flake tolerance.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
**Required:** Playwright installed with Chromium browser.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install playwright && npx playwright install chromium
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
| Situation | Action |
|
|
32
|
+
|-----------|--------|
|
|
33
|
+
| Critical user flows | E2E with Playwright runner |
|
|
34
|
+
| Visual regression | Screenshot comparison (`--screenshot`) |
|
|
35
|
+
| Accessibility audit | A11y check (`--a11y`) |
|
|
36
|
+
| Component/unit testing | Use `test-architect` instead |
|
|
37
|
+
| API testing only | Use `test-architect` instead |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## System Boundaries
|
|
42
|
+
|
|
43
|
+
| Owned by This Skill | NOT Owned |
|
|
44
|
+
|---------------------|-----------|
|
|
45
|
+
| Playwright test runner (`scripts/playwright_runner.ts`) | Unit/integration patterns (→ test-architect) |
|
|
46
|
+
| Screenshot capture (on-failure + on-demand) | Performance benchmarking (→ perf-optimizer) |
|
|
47
|
+
| Accessibility audit (axe-core via `--a11y`) | CI/CD pipeline config (→ cicd-pipeline) |
|
|
48
|
+
| ARIA snapshot testing reference | Browser scraping (→ agent-browser) |
|
|
49
|
+
| Test organization structure | Test content authoring |
|
|
50
|
+
|
|
51
|
+
**Automation skill:** Launches browser, navigates pages, captures screenshots. Session-based with side effects.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Quick Reference
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Run Playwright tests
|
|
59
|
+
node .agent/skills/e2e-automation/scripts/playwright_runner.ts https://example.com
|
|
60
|
+
|
|
61
|
+
# With screenshot
|
|
62
|
+
node .agent/skills/e2e-automation/scripts/playwright_runner.ts <url> --screenshot
|
|
63
|
+
|
|
64
|
+
# Accessibility check
|
|
65
|
+
node .agent/skills/e2e-automation/scripts/playwright_runner.ts <url> --a11y
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Playwright Config (Fixed Recommendations)
|
|
71
|
+
|
|
72
|
+
| Setting | Value | Rationale |
|
|
73
|
+
|---------|-------|-----------|
|
|
74
|
+
| Retries (CI) | 2 | Flake mitigation |
|
|
75
|
+
| Retries (local) | 0 | Development speed |
|
|
76
|
+
| Trace | on-first-retry | Disk space control |
|
|
77
|
+
| Screenshots | on-failure | Failure diagnosis |
|
|
78
|
+
| Video | retain-on-failure | Complex failure analysis |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## E2E Best Practices
|
|
83
|
+
|
|
84
|
+
| Rule | Enforcement |
|
|
85
|
+
|------|------------|
|
|
86
|
+
| Use `data-testid` selectors | CSS/XPath selectors forbidden |
|
|
87
|
+
| Auto-wait for elements | No `sleep()` or `setTimeout()` |
|
|
88
|
+
| Clean state per test | Fresh browser context each test |
|
|
89
|
+
| Test user behavior | Assert visible outcomes, not DOM structure |
|
|
90
|
+
| Isolate test data | No shared data between tests |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Test Organization
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
tests/
|
|
98
|
+
├── e2e/ # Full user flows
|
|
99
|
+
├── integration/ # API, data
|
|
100
|
+
├── component/ # UI units
|
|
101
|
+
└── fixtures/ # Shared test data
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Session Lifecycle
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
IDLE → LAUNCHING [run-tests invoked]
|
|
110
|
+
LAUNCHING → NAVIGATING [browser started]
|
|
111
|
+
NAVIGATING → EXECUTING [target loaded]
|
|
112
|
+
EXECUTING → CAPTURING [screenshot/trace needed]
|
|
113
|
+
CAPTURING → REPORTING [artifacts saved]
|
|
114
|
+
REPORTING → COMPLETED [results output] // terminal
|
|
115
|
+
LAUNCHING → ERROR [browser launch failed] // terminal
|
|
116
|
+
NAVIGATING → ERROR [target unreachable] // terminal
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Invariant:** Browser process ALWAYS terminated in Report phase. No orphaned processes.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Error Taxonomy
|
|
124
|
+
|
|
125
|
+
| Code | Recoverable | Trigger |
|
|
126
|
+
|------|-------------|---------|
|
|
127
|
+
| `ERR_PLAYWRIGHT_MISSING` | Yes | Playwright not installed |
|
|
128
|
+
| `ERR_BROWSER_LAUNCH` | Yes | Browser failed to start |
|
|
129
|
+
| `ERR_TARGET_UNREACHABLE` | Yes | Target URL not reachable |
|
|
130
|
+
| `ERR_TIMEOUT` | Yes | Test exceeded timeout |
|
|
131
|
+
| `ERR_SELECTOR_NOT_FOUND` | Yes | Element not found on page |
|
|
132
|
+
| `ERR_ASSERTION_FAILED` | No | Test assertion did not pass |
|
|
133
|
+
| `ERR_A11Y_VIOLATION` | Yes | WCAG violation detected |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Anti-Patterns
|
|
138
|
+
|
|
139
|
+
| ❌ Don't | ✅ Do |
|
|
140
|
+
|---------|-------|
|
|
141
|
+
| Test implementation details | Test user-visible behavior |
|
|
142
|
+
| Hardcode waits (`sleep`) | Use Playwright auto-wait |
|
|
143
|
+
| Skip test cleanup | Isolate with fresh context |
|
|
144
|
+
| Ignore flaky tests | Fix root cause; track flake rate |
|
|
145
|
+
| Use CSS/XPath selectors | Use `data-testid` attributes |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 📑 Content Map
|
|
150
|
+
|
|
151
|
+
| File | Description | When to Read |
|
|
152
|
+
|------|-------------|--------------|
|
|
153
|
+
| [aria-snapshot.md](rules/aria-snapshot.md) | ARIA snapshot testing pattern | ARIA-based tests |
|
|
154
|
+
| [engineering-spec.md](rules/engineering-spec.md) | Full engineering spec | Architecture review |
|
|
155
|
+
|
|
156
|
+
| Script | Purpose |
|
|
157
|
+
|--------|---------|
|
|
158
|
+
| `scripts/playwright_runner.ts` | Test execution runner |
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 🔗 Related
|
|
163
|
+
|
|
164
|
+
| Item | Type | Purpose |
|
|
165
|
+
|------|------|---------|
|
|
166
|
+
| `/validate` | Workflow | Run all tests |
|
|
167
|
+
| `test-architect` | Skill | Unit/integration patterns |
|
|
168
|
+
| `cicd-pipeline` | Skill | CI integration |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Detailed Rules
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### Rule: aria-snapshot
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
title: ARIA Snapshot Pattern
|
|
185
|
+
impact: MEDIUM
|
|
186
|
+
tags: e2e-automation
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
# ARIA Snapshot Pattern
|
|
190
|
+
|
|
191
|
+
> Element Discovery via Accessibility Tree instead of CSS Selectors.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Why Use ARIA Snapshot?
|
|
196
|
+
|
|
197
|
+
| CSS Selectors | ARIA Snapshot |
|
|
198
|
+
|---------------|---------------|
|
|
199
|
+
| Easily breaks when markup changes | Resilient based on semantics |
|
|
200
|
+
| Depends on class names | Based on accessibility roles |
|
|
201
|
+
| AI has a hard time inferring correct selector | AI can read page structure |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## ARIA Snapshot Format
|
|
206
|
+
|
|
207
|
+
```yaml
|
|
208
|
+
- banner:
|
|
209
|
+
- link "Hacker News" [ref=e1]
|
|
210
|
+
- main:
|
|
211
|
+
- list:
|
|
212
|
+
- listitem:
|
|
213
|
+
- link "Show HN: Project" [ref=e8]
|
|
214
|
+
- text "123 points"
|
|
215
|
+
- footer:
|
|
216
|
+
- link "Guidelines" [ref=e12]
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Key features:**
|
|
220
|
+
- `[ref=e1]` - ID to interact with
|
|
221
|
+
- Semantic roles: `banner`, `main`, `footer`
|
|
222
|
+
- Nested structure easy to read
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Interact By Ref
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Get ARIA snapshot first
|
|
230
|
+
node aria-snapshot.ts --url https://example.com
|
|
231
|
+
|
|
232
|
+
# Then interact by ref
|
|
233
|
+
node select-ref.ts --ref e5 --action click
|
|
234
|
+
node select-ref.ts --ref e10 --action fill --value "text"
|
|
235
|
+
node select-ref.ts --ref e3 --action hover
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Supported Actions
|
|
241
|
+
|
|
242
|
+
| Action | Description |
|
|
243
|
+
|--------|-------------|
|
|
244
|
+
| click | Click element |
|
|
245
|
+
| fill | Type text into input |
|
|
246
|
+
| hover | Hover over element |
|
|
247
|
+
| select | Select dropdown option |
|
|
248
|
+
| check | Check checkbox |
|
|
249
|
+
| press | Press keyboard key |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Sample ARIA Snapshot Script
|
|
254
|
+
|
|
255
|
+
```javascript
|
|
256
|
+
// aria-snapshot.ts
|
|
257
|
+
import { chromium } from 'playwright';
|
|
258
|
+
|
|
259
|
+
async function getAriaSnapshot(url) {
|
|
260
|
+
const browser = await chromium.launch();
|
|
261
|
+
const page = await browser.newPage();
|
|
262
|
+
await page.goto(url);
|
|
263
|
+
|
|
264
|
+
// Get accessibility tree
|
|
265
|
+
const snapshot = await page.accessibility.snapshot();
|
|
266
|
+
|
|
267
|
+
let refId = 1;
|
|
268
|
+
const formatNode = (node, indent = 0) => {
|
|
269
|
+
const spaces = ' '.repeat(indent);
|
|
270
|
+
let result = '';
|
|
271
|
+
|
|
272
|
+
if (node.role !== 'none' && node.role !== 'generic') {
|
|
273
|
+
const ref = node.focused || node.name ? ` [ref=e${refId++}]` : '';
|
|
274
|
+
const name = node.name ? ` "${node.name}"` : '';
|
|
275
|
+
result += `${spaces}- ${node.role}${name}${ref}\n`;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (node.children) {
|
|
279
|
+
for (const child of node.children) {
|
|
280
|
+
result += formatNode(child, indent + 1);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return result;
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
console.log(formatNode(snapshot));
|
|
287
|
+
await browser.close();
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
getAriaSnapshot(process.argv[2] || 'https://example.com');
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Select By Ref Script
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
// select-ref.ts
|
|
299
|
+
import { chromium } from 'playwright';
|
|
300
|
+
|
|
301
|
+
async function selectByRef(url, ref, action, value) {
|
|
302
|
+
const browser = await chromium.launch();
|
|
303
|
+
const page = await browser.newPage();
|
|
304
|
+
await page.goto(url);
|
|
305
|
+
|
|
306
|
+
// Build ref selector (simplified)
|
|
307
|
+
const snapshot = await page.accessibility.snapshot();
|
|
308
|
+
const element = findByRef(snapshot, ref);
|
|
309
|
+
|
|
310
|
+
if (!element) {
|
|
311
|
+
console.error(`Ref ${ref} not found`);
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Get locator by role + name
|
|
316
|
+
const locator = page.getByRole(element.role, { name: element.name });
|
|
317
|
+
|
|
318
|
+
switch (action) {
|
|
319
|
+
case 'click':
|
|
320
|
+
await locator.click();
|
|
321
|
+
break;
|
|
322
|
+
case 'fill':
|
|
323
|
+
await locator.fill(value);
|
|
324
|
+
break;
|
|
325
|
+
case 'hover':
|
|
326
|
+
await locator.hover();
|
|
327
|
+
break;
|
|
328
|
+
default:
|
|
329
|
+
console.error(`Unknown action: ${action}`);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
await browser.close();
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Best Practices
|
|
339
|
+
|
|
340
|
+
1. **Always get fresh snapshot** before interacting
|
|
341
|
+
2. **Use semantic roles** not class-based selectors
|
|
342
|
+
3. **Ref IDs are session-specific** - don't hardcode
|
|
343
|
+
4. **Prefer getByRole()** over CSS selectors
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Integration with Playwright
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
// In your test
|
|
351
|
+
test('user can submit form', async ({ page }) => {
|
|
352
|
+
// Prefer role-based selectors
|
|
353
|
+
await page.getByRole('textbox', { name: 'Email' }).fill('test@example.com');
|
|
354
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
355
|
+
|
|
356
|
+
// Over CSS selectors
|
|
357
|
+
// await page.locator('#email').fill('test@example.com');
|
|
358
|
+
});
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
> **Rule:** ARIA Snapshot + Role Selectors = AI-friendly, resilient tests.
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
### Rule: engineering-spec
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
title: E2E Automation — Engineering Specification
|
|
371
|
+
impact: MEDIUM
|
|
372
|
+
tags: e2e-automation
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
# E2E Automation — Engineering Specification
|
|
376
|
+
|
|
377
|
+
> Production-grade specification for web application E2E testing with Playwright at FAANG scale.
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## 1. Overview
|
|
382
|
+
|
|
383
|
+
E2E Automation provides Playwright-based end-to-end testing for web applications: test execution via runner script, screenshot capture, accessibility audits, visual regression detection, and ARIA snapshot testing. The skill operates as a session-based **Automation (scripted)** skill — it launches browser instances, navigates pages, captures screenshots, and produces test reports. Side effects include browser process creation, file I/O (screenshots, traces), and network requests to test targets.
|
|
384
|
+
|
|
385
|
+
**Contract Version:** 2.0.0
|
|
386
|
+
**Backward Compatibility:** breaking (first hardened version)
|
|
387
|
+
**Breaking Changes:** None — new spec for first hardening
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 2. Problem Statement
|
|
392
|
+
|
|
393
|
+
E2E testing at scale faces four quantified problems:
|
|
394
|
+
|
|
395
|
+
| Problem | Measurement | Impact |
|
|
396
|
+
|---------|-------------|--------|
|
|
397
|
+
| Flaky tests | 25% of E2E suites have > 10% flake rate | False failures block CI/CD pipelines |
|
|
398
|
+
| Implementation-coupled tests | 40% of E2E tests test DOM structure, not behavior | Tests break on every refactor |
|
|
399
|
+
| Missing critical paths | 30% of production incidents involve untested user flows | Bugs in core functionality |
|
|
400
|
+
| No accessibility verification | 55% of web apps have zero automated a11y checks | WCAG non-compliance |
|
|
401
|
+
|
|
402
|
+
E2E Automation eliminates these with behavior-driven tests, stable selectors (`data-testid`), auto-wait (no hardcoded waits), and integrated a11y auditing.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 3. Design Goals
|
|
407
|
+
|
|
408
|
+
| ID | Goal | Measurable Constraint |
|
|
409
|
+
|----|------|-----------------------|
|
|
410
|
+
| G1 | Zero flaky tests | Flake rate < 1% with auto-wait + 2 retries on CI |
|
|
411
|
+
| G2 | Behavior-driven tests | Tests assert user-visible behavior, not DOM structure |
|
|
412
|
+
| G3 | Stable selectors | `data-testid` attributes; no CSS/XPath selectors |
|
|
413
|
+
| G4 | Accessibility coverage | a11y audit on every test run with `--a11y` flag |
|
|
414
|
+
| G5 | Test isolation | Each test starts with clean state; no shared data |
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## 4. Non-Goals
|
|
419
|
+
|
|
420
|
+
| ID | Excluded | Rationale |
|
|
421
|
+
|----|----------|-----------|
|
|
422
|
+
| NG1 | Unit/integration test patterns | Owned by `test-architect` skill |
|
|
423
|
+
| NG2 | Performance benchmarking | Owned by `perf-optimizer` skill |
|
|
424
|
+
| NG3 | CI/CD pipeline configuration | Owned by `cicd-pipeline` skill |
|
|
425
|
+
| NG4 | Browser automation for scraping | Owned by `agent-browser` skill |
|
|
426
|
+
| NG5 | API-only testing | Owned by `test-architect` skill |
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## 5. System Boundaries
|
|
431
|
+
|
|
432
|
+
| Boundary | Owned | Not Owned |
|
|
433
|
+
|----------|-------|-----------|
|
|
434
|
+
| Playwright test execution (runner script) | Script invocation and output | Playwright installation |
|
|
435
|
+
| Screenshot capture (on-failure + on-demand) | Capture commands | Image comparison tooling |
|
|
436
|
+
| Accessibility auditing (`--a11y` flag) | Audit execution | WCAG remediation |
|
|
437
|
+
| ARIA snapshot testing | Pattern reference | Snapshot library |
|
|
438
|
+
| Test organization (e2e/integration/component/fixtures) | Directory structure | Test content creation |
|
|
439
|
+
| Playwright config recommendations | Config guidance | Framework config files |
|
|
440
|
+
|
|
441
|
+
**Side-effect boundary:** E2E Automation launches browser processes, makes network requests to test targets, creates screenshot/trace files, and produces stdout reports.
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## 6. Integration Model
|
|
446
|
+
|
|
447
|
+
### 6.1 Agent Contract
|
|
448
|
+
|
|
449
|
+
#### Input Schema
|
|
450
|
+
|
|
451
|
+
```
|
|
452
|
+
Request_Type: string # "run-tests" | "screenshot" | "a11y-audit" |
|
|
453
|
+
# "config-guide" | "test-structure" | "selector-guide"
|
|
454
|
+
Context: {
|
|
455
|
+
target_url: string # URL to test
|
|
456
|
+
test_files: Array<string> | null # Specific test files to run
|
|
457
|
+
flags: Array<string> | null # "--screenshot" | "--a11y" | "--trace"
|
|
458
|
+
browser: string # "chromium" | "firefox" | "webkit"
|
|
459
|
+
retries: number # Number of retries (default: 2 on CI, 0 local)
|
|
460
|
+
headless: boolean # Run headless (default: true)
|
|
461
|
+
}
|
|
462
|
+
contract_version: string # "2.0.0"
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
#### Output Schema
|
|
466
|
+
|
|
467
|
+
```
|
|
468
|
+
Status: "passed" | "failed" | "error"
|
|
469
|
+
Data: {
|
|
470
|
+
results: {
|
|
471
|
+
total: number
|
|
472
|
+
passed: number
|
|
473
|
+
failed: number
|
|
474
|
+
skipped: number
|
|
475
|
+
flaky: number # Tests that passed on retry
|
|
476
|
+
duration_ms: number
|
|
477
|
+
} | null
|
|
478
|
+
screenshots: Array<{
|
|
479
|
+
path: string # File path to screenshot
|
|
480
|
+
test_name: string
|
|
481
|
+
type: string # "failure" | "manual"
|
|
482
|
+
}> | null
|
|
483
|
+
a11y: {
|
|
484
|
+
violations: Array<{
|
|
485
|
+
rule: string # WCAG rule ID
|
|
486
|
+
impact: string # "critical" | "serious" | "moderate" | "minor"
|
|
487
|
+
element: string # CSS selector of violating element
|
|
488
|
+
fix: string
|
|
489
|
+
}>
|
|
490
|
+
passes: number
|
|
491
|
+
violations_count: number
|
|
492
|
+
} | null
|
|
493
|
+
traces: Array<{
|
|
494
|
+
path: string # File path to trace
|
|
495
|
+
test_name: string
|
|
496
|
+
}> | null
|
|
497
|
+
metadata: {
|
|
498
|
+
contract_version: string
|
|
499
|
+
backward_compatibility: string
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
Error: ErrorSchema | null
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
#### Error Schema
|
|
506
|
+
|
|
507
|
+
```
|
|
508
|
+
Code: string # From Error Taxonomy (Section 11)
|
|
509
|
+
Message: string
|
|
510
|
+
Request_Type: string
|
|
511
|
+
Recoverable: boolean
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
#### Deterministic Guarantees
|
|
515
|
+
|
|
516
|
+
- Same test files + same target state = same test results (excluding network timing).
|
|
517
|
+
- Playwright config recommendations are fixed (retries: 2, trace: on-first-retry, screenshots: on-failure, video: retain-on-failure).
|
|
518
|
+
- Selector guidance is fixed: `data-testid` preferred, CSS/XPath forbidden.
|
|
519
|
+
- Test organization structure is fixed: `e2e/`, `integration/`, `component/`, `fixtures/`.
|
|
520
|
+
- Config guide and selector guide are stateless expert operations.
|
|
521
|
+
|
|
522
|
+
#### What Agents May Assume
|
|
523
|
+
|
|
524
|
+
- Runner script creates browser instance and tears it down after execution.
|
|
525
|
+
- Screenshots are saved to disk on failure or when `--screenshot` is passed.
|
|
526
|
+
- Accessibility audit uses axe-core rules when `--a11y` is passed.
|
|
527
|
+
- Test results include pass/fail counts and duration.
|
|
528
|
+
|
|
529
|
+
#### What Agents Must NOT Assume
|
|
530
|
+
|
|
531
|
+
- Playwright is installed (caller must install first).
|
|
532
|
+
- Target URL is accessible (network errors are reported).
|
|
533
|
+
- Tests are deterministic if target state changes between runs.
|
|
534
|
+
- Screenshots persist beyond the current session.
|
|
535
|
+
|
|
536
|
+
#### Side-Effect Boundaries
|
|
537
|
+
|
|
538
|
+
| Operation | Side Effects |
|
|
539
|
+
|-----------|-------------|
|
|
540
|
+
| Run tests | Browser process, network requests, stdout output |
|
|
541
|
+
| Screenshot | Browser process, file write (PNG) |
|
|
542
|
+
| A11y audit | Browser process, network requests, stdout output |
|
|
543
|
+
| Config guide | None; guidance output |
|
|
544
|
+
| Test structure | None; directory recommendation |
|
|
545
|
+
| Selector guide | None; guidance output |
|
|
546
|
+
|
|
547
|
+
### 6.2 Workflow Contract
|
|
548
|
+
|
|
549
|
+
#### Invocation Pattern
|
|
550
|
+
|
|
551
|
+
```
|
|
552
|
+
1. Install Playwright: npm install playwright && npx playwright install chromium
|
|
553
|
+
2. Write E2E tests using data-testid selectors (caller's responsibility)
|
|
554
|
+
3. Invoke run-tests with target URL and test files
|
|
555
|
+
4. Review results; fix failures (caller's responsibility)
|
|
556
|
+
5. Invoke a11y-audit for accessibility check
|
|
557
|
+
6. Fix a11y violations (caller's responsibility)
|
|
558
|
+
7. Integrate into CI (caller's responsibility, see cicd-pipeline)
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
#### State Transitions
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
IDLE → LAUNCHING [run-tests invoked]
|
|
565
|
+
LAUNCHING → NAVIGATING [browser process started]
|
|
566
|
+
NAVIGATING → EXECUTING [target URL loaded]
|
|
567
|
+
EXECUTING → CAPTURING [test completed, screenshot/trace needed]
|
|
568
|
+
CAPTURING → REPORTING [artifacts saved to disk]
|
|
569
|
+
REPORTING → COMPLETED [results written to stdout] // terminal state
|
|
570
|
+
EXECUTING → FAILED [test assertion failed]
|
|
571
|
+
FAILED → CAPTURING [failure screenshot captured]
|
|
572
|
+
LAUNCHING → ERROR [browser launch failed] // terminal state
|
|
573
|
+
NAVIGATING → ERROR [target unreachable] // terminal state
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
#### Execution Guarantees
|
|
577
|
+
|
|
578
|
+
- Browser process is always terminated after test run (success or failure).
|
|
579
|
+
- Screenshots are captured before browser teardown.
|
|
580
|
+
- Traces are only saved on first retry (to limit disk usage).
|
|
581
|
+
|
|
582
|
+
#### Failure Propagation Model
|
|
583
|
+
|
|
584
|
+
| Failure Severity | Propagation | Workflow Action |
|
|
585
|
+
|-----------------|-------------|-----------------|
|
|
586
|
+
| Browser launch failed | Return `ERR_BROWSER_LAUNCH` | Install Playwright |
|
|
587
|
+
| Target unreachable | Return `ERR_TARGET_UNREACHABLE` | Check URL/network |
|
|
588
|
+
| Test assertion failed | Return failed results | Fix test or application |
|
|
589
|
+
| A11y violation found | Return a11y violations | Fix accessibility |
|
|
590
|
+
| Timeout exceeded | Return `ERR_TIMEOUT` | Increase timeout or fix test |
|
|
591
|
+
|
|
592
|
+
#### Retry Boundaries
|
|
593
|
+
|
|
594
|
+
- Test-level retries: 2 on CI, 0 locally (configurable).
|
|
595
|
+
- No script-level retries (agent re-invokes if needed).
|
|
596
|
+
- Retried tests that pass are marked as "flaky" in results.
|
|
597
|
+
|
|
598
|
+
#### Isolation Model
|
|
599
|
+
|
|
600
|
+
- Each test run creates a fresh browser context.
|
|
601
|
+
- No shared state between test runs.
|
|
602
|
+
- Each test within a run should use isolated data.
|
|
603
|
+
|
|
604
|
+
#### Idempotency Expectations
|
|
605
|
+
|
|
606
|
+
| Operation | Idempotent | Notes |
|
|
607
|
+
|-----------|-----------|-------|
|
|
608
|
+
| Run tests | No | Results depend on target application state |
|
|
609
|
+
| Screenshot | No | Content depends on page state at capture time |
|
|
610
|
+
| A11y audit | No | Results depend on current page DOM |
|
|
611
|
+
| Config guide | Yes | Fixed recommendations |
|
|
612
|
+
| Test structure | Yes | Fixed directory layout |
|
|
613
|
+
| Selector guide | Yes | Fixed guidance |
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## 7. Execution Model
|
|
618
|
+
|
|
619
|
+
### 4-Phase Lifecycle
|
|
620
|
+
|
|
621
|
+
| Phase | Action | Output |
|
|
622
|
+
|-------|--------|--------|
|
|
623
|
+
| **Launch** | Start browser process, create context | Browser instance |
|
|
624
|
+
| **Navigate** | Load target URL, wait for network idle | Page ready state |
|
|
625
|
+
| **Execute** | Run test assertions, capture artifacts | Test results + artifacts |
|
|
626
|
+
| **Report** | Aggregate results, teardown browser | Structured output |
|
|
627
|
+
|
|
628
|
+
Phases are sequential per test run. Browser lifecycle is managed by the runner script.
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## 8. Deterministic Design Principles
|
|
633
|
+
|
|
634
|
+
| Principle | Enforcement |
|
|
635
|
+
|-----------|-------------|
|
|
636
|
+
| Fixed Playwright config | retries: 2, trace: on-first-retry, screenshots: on-failure, video: retain-on-failure |
|
|
637
|
+
| Fixed selector strategy | `data-testid` only; CSS/XPath forbidden |
|
|
638
|
+
| Fixed test organization | 4 directories: e2e/, integration/, component/, fixtures/ |
|
|
639
|
+
| Auto-wait over hardcoded waits | Playwright auto-wait is default; no `sleep()` or `setTimeout()` |
|
|
640
|
+
| Behavior-driven assertions | Assert user-visible outcomes, not DOM structure |
|
|
641
|
+
| Clean state per test | Fresh browser context; no cross-test contamination |
|
|
642
|
+
|
|
643
|
+
---
|
|
644
|
+
|
|
645
|
+
## 9. State & Idempotency Model
|
|
646
|
+
|
|
647
|
+
Session-based. Not idempotent. Browser state exists for the duration of a test run.
|
|
648
|
+
|
|
649
|
+
| State | Persistent | Scope |
|
|
650
|
+
|-------|-----------|-------|
|
|
651
|
+
| Browser process | No | Single test run |
|
|
652
|
+
| Page DOM | No | Single navigation |
|
|
653
|
+
| Screenshots/traces | Yes | Until cleanup |
|
|
654
|
+
| Test results | No | Single run output |
|
|
655
|
+
|
|
656
|
+
Browser state is created at launch and destroyed at report phase. No cross-session state.
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## 10. Failure Handling Strategy
|
|
661
|
+
|
|
662
|
+
| Failure Class | Behavior | Caller Recovery |
|
|
663
|
+
|---------------|----------|-----------------|
|
|
664
|
+
| Playwright not installed | Return `ERR_PLAYWRIGHT_MISSING` | Run install command |
|
|
665
|
+
| Browser launch failure | Return `ERR_BROWSER_LAUNCH` | Check environment |
|
|
666
|
+
| Target URL unreachable | Return `ERR_TARGET_UNREACHABLE` | Fix URL or network |
|
|
667
|
+
| Test timeout | Return `ERR_TIMEOUT` | Increase timeout or fix test |
|
|
668
|
+
| Test assertion failure | Return failed results with screenshots | Fix application code |
|
|
669
|
+
| A11y violation | Return violations list | Fix accessibility issues |
|
|
670
|
+
|
|
671
|
+
**Invariant:** Browser process is always terminated, even on failure. No orphaned processes.
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
## 11. Error Taxonomy
|
|
676
|
+
|
|
677
|
+
| Code | Category | Recoverable | Description |
|
|
678
|
+
|------|----------|-------------|-------------|
|
|
679
|
+
| `ERR_PLAYWRIGHT_MISSING` | Infrastructure | Yes | Playwright not installed |
|
|
680
|
+
| `ERR_BROWSER_LAUNCH` | Infrastructure | Yes | Browser process failed to start |
|
|
681
|
+
| `ERR_TARGET_UNREACHABLE` | Network | Yes | Target URL not reachable |
|
|
682
|
+
| `ERR_TIMEOUT` | Execution | Yes | Test exceeded timeout |
|
|
683
|
+
| `ERR_SELECTOR_NOT_FOUND` | Test | Yes | Element selector not found on page |
|
|
684
|
+
| `ERR_ASSERTION_FAILED` | Test | No | Test assertion did not pass |
|
|
685
|
+
| `ERR_A11Y_VIOLATION` | Accessibility | Yes | WCAG violation detected |
|
|
686
|
+
|
|
687
|
+
---
|
|
688
|
+
|
|
689
|
+
## 12. Timeout & Retry Policy
|
|
690
|
+
|
|
691
|
+
| Parameter | Default | Maximum | Rationale |
|
|
692
|
+
|-----------|---------|---------|-----------|
|
|
693
|
+
| Test timeout | 30,000 ms | 120,000 ms | Single test execution |
|
|
694
|
+
| Navigation timeout | 10,000 ms | 30,000 ms | Page load |
|
|
695
|
+
| Action timeout | 5,000 ms | 15,000 ms | Click, type, etc. |
|
|
696
|
+
| Test retries (CI) | 2 | 3 | Flake mitigation |
|
|
697
|
+
| Test retries (local) | 0 | 1 | Development speed |
|
|
698
|
+
| Script-level retries | Zero | Zero | Agent re-invokes |
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
## 13. Observability & Logging Schema
|
|
703
|
+
|
|
704
|
+
### Log Entry Format
|
|
705
|
+
|
|
706
|
+
```json
|
|
707
|
+
{
|
|
708
|
+
"trace_id": "uuid",
|
|
709
|
+
"skill_name": "e2e-automation",
|
|
710
|
+
"contract_version": "2.0.0",
|
|
711
|
+
"execution_id": "uuid",
|
|
712
|
+
"timestamp": "ISO-8601",
|
|
713
|
+
"request_type": "string",
|
|
714
|
+
"target_url": "string",
|
|
715
|
+
"browser": "string",
|
|
716
|
+
"tests_total": "number",
|
|
717
|
+
"tests_passed": "number",
|
|
718
|
+
"tests_failed": "number",
|
|
719
|
+
"tests_flaky": "number",
|
|
720
|
+
"a11y_violations": "number|null",
|
|
721
|
+
"screenshots_count": "number",
|
|
722
|
+
"duration_ms": "number",
|
|
723
|
+
"status": "passed|failed|error",
|
|
724
|
+
"error_code": "string|null"
|
|
725
|
+
}
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### Required Log Points
|
|
729
|
+
|
|
730
|
+
| Event | Log Level | Fields |
|
|
731
|
+
|-------|-----------|--------|
|
|
732
|
+
| Test run started | INFO | target_url, browser, tests_total |
|
|
733
|
+
| Test run completed | INFO | All fields |
|
|
734
|
+
| Test failed | WARN | test name, assertion, screenshot path |
|
|
735
|
+
| Flaky test detected | WARN | test name, retry count |
|
|
736
|
+
| A11y violation found | WARN | rule, impact, element |
|
|
737
|
+
| Browser launch failed | ERROR | error_code, message |
|
|
738
|
+
| Target unreachable | ERROR | target_url, error_code |
|
|
739
|
+
|
|
740
|
+
### Metrics
|
|
741
|
+
|
|
742
|
+
| Metric | Type | Unit |
|
|
743
|
+
|--------|------|------|
|
|
744
|
+
| `e2e.run.duration` | Histogram | ms |
|
|
745
|
+
| `e2e.tests.pass_rate` | Gauge | 0.0–1.0 |
|
|
746
|
+
| `e2e.tests.flake_rate` | Gauge | 0.0–1.0 |
|
|
747
|
+
| `e2e.a11y.violations` | Counter | per rule |
|
|
748
|
+
| `e2e.screenshots.count` | Counter | per run |
|
|
749
|
+
| `e2e.browser.launch_failures` | Counter | per run |
|
|
750
|
+
|
|
751
|
+
---
|
|
752
|
+
|
|
753
|
+
## 14. Security & Trust Model
|
|
754
|
+
|
|
755
|
+
### Test Target Access
|
|
756
|
+
|
|
757
|
+
- E2E Automation connects only to caller-specified URLs.
|
|
758
|
+
- No credential storage; auth tokens are passed per-test.
|
|
759
|
+
- Browser context is isolated; no cross-origin leakage.
|
|
760
|
+
|
|
761
|
+
### Artifact Safety
|
|
762
|
+
|
|
763
|
+
- Screenshots and traces may contain sensitive page content.
|
|
764
|
+
- Artifacts are written to local disk only; no remote upload.
|
|
765
|
+
- Cleanup of artifacts is caller's responsibility.
|
|
766
|
+
|
|
767
|
+
### Process Isolation
|
|
768
|
+
|
|
769
|
+
- Browser runs in sandboxed mode (Chromium sandbox).
|
|
770
|
+
- No access to host filesystem beyond artifact output directory.
|
|
771
|
+
|
|
772
|
+
---
|
|
773
|
+
|
|
774
|
+
## 15. Scalability Model
|
|
775
|
+
|
|
776
|
+
| Dimension | Constraint | Mitigation |
|
|
777
|
+
|-----------|-----------|------------|
|
|
778
|
+
| Throughput | 1 browser per runner instance | Parallel runners via CI sharding |
|
|
779
|
+
| Concurrency | Single-threaded runner script | Multiple runner processes |
|
|
780
|
+
| Memory per run | ~200 MB (Chromium) | Fixed per browser instance |
|
|
781
|
+
| Disk per run | ~10 MB (screenshots + traces) | Cleanup after CI |
|
|
782
|
+
| Network | Dependent on target latency | Timeout configuration |
|
|
783
|
+
|
|
784
|
+
---
|
|
785
|
+
|
|
786
|
+
## 16. Concurrency Model
|
|
787
|
+
|
|
788
|
+
Single browser instance per runner invocation. No shared state between concurrent runners.
|
|
789
|
+
|
|
790
|
+
For parallel execution: use CI sharding to distribute test files across multiple runner processes. Each shard operates independently.
|
|
791
|
+
|
|
792
|
+
| Dimension | Boundary |
|
|
793
|
+
|-----------|----------|
|
|
794
|
+
| Browser instances per runner | 1 |
|
|
795
|
+
| Concurrent runners | Limited by CI resources |
|
|
796
|
+
| Shared state between runners | None |
|
|
797
|
+
| Lock requirements | None |
|
|
798
|
+
|
|
799
|
+
---
|
|
800
|
+
|
|
801
|
+
## 17. Resource Lifecycle Management
|
|
802
|
+
|
|
803
|
+
| Resource | Created By | Destroyed By | Max Lifetime |
|
|
804
|
+
|----------|-----------|-------------|--------------|
|
|
805
|
+
| Browser process | Launch phase | Report phase (always) | Test run duration |
|
|
806
|
+
| Browser context | Launch phase | After each test | Single test |
|
|
807
|
+
| Page instance | Navigate phase | After each test | Single test |
|
|
808
|
+
| Screenshots | Execute phase | Caller cleanup | Until deletion |
|
|
809
|
+
| Traces | Execute phase (first retry) | Caller cleanup | Until deletion |
|
|
810
|
+
|
|
811
|
+
**Critical invariant:** Browser process MUST be destroyed in Report phase, including on error paths. No orphaned browser processes.
|
|
812
|
+
|
|
813
|
+
---
|
|
814
|
+
|
|
815
|
+
## 18. Performance Constraints
|
|
816
|
+
|
|
817
|
+
| Operation | P50 Target | P99 Target | Hard Limit |
|
|
818
|
+
|-----------|-----------|-----------|------------|
|
|
819
|
+
| Browser launch | < 2,000 ms | < 5,000 ms | 10,000 ms |
|
|
820
|
+
| Page navigation | < 3,000 ms | < 10,000 ms | 30,000 ms |
|
|
821
|
+
| Single test execution | < 5,000 ms | < 20,000 ms | 120,000 ms |
|
|
822
|
+
| Screenshot capture | < 500 ms | < 2,000 ms | 5,000 ms |
|
|
823
|
+
| Full suite (10 tests) | < 30,000 ms | < 90,000 ms | 300,000 ms |
|
|
824
|
+
|
|
825
|
+
---
|
|
826
|
+
|
|
827
|
+
## 19. Operational Risks
|
|
828
|
+
|
|
829
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
830
|
+
|------|-----------|--------|------------|
|
|
831
|
+
| Flaky tests from network timing | High | False CI failures | Auto-wait + 2 retries; flaky counter in results |
|
|
832
|
+
| Orphaned browser processes | Medium | Memory leak on CI | Browser always terminated in Report phase |
|
|
833
|
+
| Large screenshot/trace files | Medium | Disk space on CI | Traces only on first retry; cleanup policy |
|
|
834
|
+
| Target app down during tests | Medium | All tests fail | `ERR_TARGET_UNREACHABLE` with clear message |
|
|
835
|
+
| Playwright version mismatch | Low | Tests won't run | Version pinned in package.json |
|
|
836
|
+
|
|
837
|
+
---
|
|
838
|
+
|
|
839
|
+
## 20. Compliance with skill-design-guide.md
|
|
840
|
+
|
|
841
|
+
| Requirement | Status | Evidence |
|
|
842
|
+
|-------------|--------|----------|
|
|
843
|
+
| YAML frontmatter complete | ✅ | name, description, metadata with category, version, triggers, coordinates_with, success_metrics |
|
|
844
|
+
| SKILL.md < 200 lines | ✅ | Entry point under 200 lines |
|
|
845
|
+
| Prerequisites documented | ✅ | Playwright installation command |
|
|
846
|
+
| When to Use section | ✅ | Situation-based routing table |
|
|
847
|
+
| Core content matches skill type | ✅ | Automation type: session-based, browser side effects |
|
|
848
|
+
| Troubleshooting section | ✅ | Anti-patterns table |
|
|
849
|
+
| Related section | ✅ | Cross-links to test-architect, cicd-pipeline, /validate |
|
|
850
|
+
| Content Map for multi-file | ✅ | Links to aria-snapshot.md, scripts, engineering-spec.md |
|
|
851
|
+
| Contract versioning | ✅ | contract_version, backward_compatibility, breaking_changes |
|
|
852
|
+
| Compliance matrix structured | ✅ | This table with ✅/❌ + evidence |
|
|
853
|
+
|
|
854
|
+
---
|
|
855
|
+
|
|
856
|
+
## 21. Production Readiness Checklist
|
|
857
|
+
|
|
858
|
+
| Category | Check | Status |
|
|
859
|
+
|----------|-------|--------|
|
|
860
|
+
| **Functionality** | Playwright test runner script | ✅ |
|
|
861
|
+
| **Functionality** | Screenshot capture (on-failure + on-demand) | ✅ |
|
|
862
|
+
| **Functionality** | Accessibility audit (axe-core via --a11y) | ✅ |
|
|
863
|
+
| **Functionality** | ARIA snapshot testing reference | ✅ |
|
|
864
|
+
| **Functionality** | Testing pyramid structure (e2e/integration/component/fixtures) | ✅ |
|
|
865
|
+
| **Contracts** | Input/output/error schemas in pseudo-schema format | ✅ |
|
|
866
|
+
| **Contracts** | Contract versioning with semver | ✅ |
|
|
867
|
+
| **Contracts** | Session state transitions with arrow notation | ✅ |
|
|
868
|
+
| **Failure** | Error taxonomy with 7 categorized codes | ✅ |
|
|
869
|
+
| **Failure** | Browser process always terminated (no orphans) | ✅ |
|
|
870
|
+
| **Failure** | Retry policy with defaults and maximums | ✅ |
|
|
871
|
+
| **State** | Session-based; browser state per run | ✅ |
|
|
872
|
+
| **State** | Resource lifecycle with creation/destruction | ✅ |
|
|
873
|
+
| **Security** | Sandboxed browser; no credential storage | ✅ |
|
|
874
|
+
| **Observability** | Structured log schema with 5 mandatory fields + 7 log points | ✅ |
|
|
875
|
+
| **Observability** | 6 metrics defined | ✅ |
|
|
876
|
+
| **Performance** | P50/P99/hard limits for all operations | ✅ |
|
|
877
|
+
| **Scalability** | CI sharding for parallel execution | ✅ |
|
|
878
|
+
| **Compliance** | All skill-design-guide.md sections mapped with evidence | ✅ |
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
|
+
⚡ PikaKit v3.9.134
|