Frontend/full-stack business validation gate. Executes each Validation Metier item against a real browser environment (dev server, staging, production) using automated test execution (Playwright, Cypress, Testing Library) and user screenshots. Binary verdict: ALL pass = Done, ANY fail = stays in current status. Use when 'validation frontend', 'validate frontend ticket', 'valider le ticket front', 'frontend VM', 'validate UI', 'validation full-stack' is mentioned.
Installs into .claude/skills of the current project.
Are you the author of Bmad Validation Frontend?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aibot88-bmad-validation-frontend)
---
name: bmad-validation-frontend
description: "Frontend/full-stack business validation gate. Executes each Validation Metier item against a real browser environment (dev server, staging, production) using automated test execution (Playwright, Cypress, Testing Library) and user screenshots. Binary verdict: ALL pass = Done, ANY fail = stays in current status. Use when 'validation frontend', 'validate frontend ticket', 'valider le ticket front', 'frontend VM', 'validate UI', 'validation full-stack' is mentioned."
disable-model-invocation: true
---
# Validation Frontend
## Overview
Frontend/full-stack business validation gate.
## Conventions
- Bare paths (e.g. `steps/step-01-init.md`) resolve from the skill root.
- `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).
- `{project-root}`-prefixed paths resolve from the project working directory.
- `{skill-name}` resolves to the skill directory's basename.
## On Activation
### Step 1: Resolve the Workflow Block
Run: `python3 ~/.claude/skills/bmad-shared/scripts/resolve_customization.py --skill {skill-root} --key workflow`
**If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
1. `{skill-root}/customize.toml` — defaults
2. `{project-root}/_bmad/custom/{skill-name}.toml` — team overrides
3. `{project-root}/_bmad/custom/{skill-name}.user.toml` — personal overrides
Any missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.
### Step 2: Execute Prepend Steps
Execute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.
### Step 3: Load Persistent Facts
Treat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
### Step 4: Load Project Workflow Context
Resolve the main project root (worktree-aware): run `MAIN_PROJECT_ROOT=$(dirname "$(git rev-parse --git-common-dir)")`.
Load `{MAIN_PROJECT_ROOT}/.claude/workflow-context.md` and resolve from its YAML frontmatter:
- Use `{user_name}` for greeting
- Use `{communication_language}` for all communications
- Use `{document_output_language}` for output documents
- Use `{planning_artifacts}` for output location and artifact scanning
- Use `{project_knowledge}` for additional context scanning
If `workflow-context.md` is missing, ask the user for their name and preferred language, then continue.
### Step 5: Greet the User
Greet `{user_name}`, speaking in `{communication_language}`. Be warm but efficient.
### Step 6: Execute Append Steps
Execute each entry in `{workflow.activation_steps_append}` in order.
---
**Activation complete.** Read FULLY and follow `./workflow.md` — load the file with the Read tool, do not summarise from memory, do not skip sections.