home / skills / lerianstudio / ring / dev-refactor-frontend
This skill analyzes a frontend codebase against Ring standards and generates refactoring tasks for the ring:dev-cycle-frontend.
npx playbooks add skill lerianstudio/ring --skill dev-refactor-frontendReview the files below or copy the command above to add this skill to your agents.
---
name: ring:dev-refactor-frontend
description: |
Analyzes frontend codebase against Ring standards and generates refactoring tasks
for ring:dev-cycle-frontend. Dispatches frontend-specific agents in ANALYSIS mode.
trigger: |
- User wants to refactor existing frontend project to follow standards
- Legacy React/Next.js codebase needs modernization
- Frontend project audit requested
skip_when: |
- Greenfield project -> Use /ring:pre-dev-* instead
- Single file fix -> Use ring:dev-cycle-frontend directly
- Backend-only project -> Use ring:dev-refactor instead
sequence:
before: [ring:dev-cycle-frontend]
related:
complementary: [ring:dev-refactor, ring:dev-cycle-frontend, ring:using-dev-team]
input_schema:
required: []
optional:
- name: project_path
type: string
description: "Path to frontend project root (default: current directory)"
- name: prompt
type: string
description: "Direct instruction for refactoring focus"
- name: standards_path
type: string
description: "Custom standards file path (default: Ring standards via WebFetch)"
- name: analyze_only
type: boolean
description: "Generate report without executing ring:dev-cycle-frontend"
- name: critical_only
type: boolean
description: "Limit execution to Critical and High severity (analysis still tracks all)"
- name: dry_run
type: boolean
description: "Show what would be analyzed without executing"
output_schema:
format: markdown
artifacts:
- name: "codebase-report.md"
description: "Codebase analysis from ring:codebase-explorer"
- name: "reports/{agent-name}-report.md"
description: "Individual agent analysis reports"
- name: "findings.md"
description: "All findings mapped from agent reports"
- name: "tasks.md"
description: "1:1 mapped REFACTOR-XXX tasks from findings"
traceability: "Ring Standard -> Agent Report -> FINDING-XXX -> REFACTOR-XXX -> Implementation"
---
# Dev Refactor Frontend Skill
Analyzes existing frontend codebase against Ring/Lerian standards and generates refactoring tasks compatible with ring:dev-cycle-frontend.
---
## Standards Loading (MANDATORY)
**Before any step execution, you MUST load Ring standards.**
### Standards Source Resolution
```text
if standards_path is provided:
→ Read tool: {standards_path}
→ If file not found or empty: STOP and report blocker
→ Use loaded content as frontend standards
else:
→ WebFetch the default Ring standards (see URLs below)
```
**Default URLs (used when `standards_path` is not provided):**
<fetch_required>
https://raw.githubusercontent.com/LerianStudio/ring/main/CLAUDE.md
https://raw.githubusercontent.com/LerianStudio/ring/main/dev-team/docs/standards/frontend.md
</fetch_required>
Fetch URLs above and extract: Agent Modification Verification requirements, Anti-Rationalization Tables requirements, Critical Rules, and Frontend Standards.
<block_condition>
- standards_path provided but file not found or empty
- standards_path not provided AND WebFetch fails or returns empty
- CLAUDE.md not accessible
</block_condition>
If any condition is true, STOP and report blocker. Cannot proceed without Ring standards.
---
## MANDATORY GAP PRINCIPLE (NON-NEGOTIABLE)
**any divergence from Ring standards = MANDATORY gap to implement.**
<cannot_skip>
- All divergences are gaps - Every difference MUST be tracked as FINDING-XXX
- Severity affects PRIORITY, not TRACKING - Low severity = lower priority, not "optional"
- No filtering allowed - You CANNOT decide which divergences "matter"
- No alternative patterns accepted - Different approach = STILL A GAP
- No cosmetic exceptions - Naming, formatting, structure differences = GAPS
</cannot_skip>
Non-negotiable, not open to interpretation - a HARD RULE.
### Anti-Rationalization: Mandatory Gap Principle
See [shared-patterns/shared-anti-rationalization.md](../shared-patterns/shared-anti-rationalization.md) for:
- **Refactor Gap Tracking** section (mandatory gap principle rationalizations)
- **Gate Execution** section (workflow skip rationalizations)
- **TDD** section (test-first rationalizations)
- **Universal** section (general anti-patterns)
### Verification Rule
```
COUNT(non-checkmark items in all Standards Coverage Tables) == COUNT(FINDING-XXX entries)
If counts don't match -> SKILL FAILURE. Go back and add missing findings.
```
---
## Architecture Pattern Applicability
**Not all architecture patterns apply to all frontend projects.** Before flagging gaps, verify the pattern is applicable.
| Service Type | Component Architecture | Directory Structure |
|--------------|------------------------|---------------------|
| Full React/Next.js App | APPLY (App Router, Server/Client components) | APPLY (frontend.md section 11) |
| Design System Library | APPLY | APPLY |
| Landing Page / Static | PARTIAL | APPLY |
| Utility / Config Package | NOT APPLICABLE | NOT APPLICABLE |
### Detection Criteria
**Full React/Next.js App (Frontend Standards APPLICABLE):**
- Project uses React/Next.js as framework
- Contains components, pages, and state management
- Uses App Router or Pages Router
- Has frontend routing and navigation
- -> **MUST follow frontend.md standards**
**Simple Frontend (Partial applicability):**
- Landing pages with minimal interactivity
- Static site generators (no dynamic data)
- -> Apply directory structure and styling; skip state management, BFF patterns
### Agent Instruction
When dispatching specialist agents, include:
```
ARCHITECTURE APPLICABILITY CHECK:
1. If project is a full React/Next.js app -> APPLY all frontend.md sections
2. If project is a static/landing page -> APPLY directory structure and styling only
3. If project is a utility package -> Do not flag frontend-specific gaps
```
---
## MANDATORY: Initialize Todo List FIRST
**Before any other action, create the todo list with all steps:**
```yaml
TodoWrite:
todos:
- content: "Validate PROJECT_RULES.md exists"
status: "pending"
activeForm: "Validating PROJECT_RULES.md exists"
- content: "Detect frontend stack and UI library mode"
status: "pending"
activeForm: "Detecting frontend stack"
- content: "Read PROJECT_RULES.md for context"
status: "pending"
activeForm: "Reading PROJECT_RULES.md"
- content: "Generate codebase report via ring:codebase-explorer"
status: "pending"
activeForm: "Generating codebase report"
- content: "Dispatch frontend specialist agents in parallel"
status: "pending"
activeForm: "Dispatching frontend specialist agents"
- content: "Save individual agent reports"
status: "pending"
activeForm: "Saving agent reports"
- content: "Map agent findings to FINDING-XXX entries"
status: "pending"
activeForm: "Mapping agent findings"
- content: "Generate findings.md"
status: "pending"
activeForm: "Generating findings.md"
- content: "Map findings 1:1 to REFACTOR-XXX tasks"
status: "pending"
activeForm: "Mapping findings to tasks (1:1)"
- content: "Generate tasks.md"
status: "pending"
activeForm: "Generating tasks.md"
- content: "Get user approval"
status: "pending"
activeForm: "Getting user approval"
- content: "Save all artifacts"
status: "pending"
activeForm: "Saving artifacts"
- content: "Handoff to ring:dev-cycle-frontend"
status: "pending"
activeForm: "Handing off to ring:dev-cycle-frontend"
```
**This is NON-NEGOTIABLE. Do not skip creating the todo list.**
---
## Input Flags: Early Exit Check
```text
if dry_run == true:
→ Execute Step 1 (Validate PROJECT_RULES.md) and Step 1b (Detect Frontend Stack)
→ Output dry-run summary:
- Project path: {project_path or current directory}
- Standards source: {standards_path or "Ring defaults via WebFetch"}
- Frontend stack detected: {React/Next.js version}
- UI library mode: {sindarian-ui / fallback-only}
- Agents that would be dispatched: {list of 5-7 agents}
- Conditional agents: {BFF if detected, UI Engineer if ux-criteria.md exists}
- Artifact path: docs/ring:dev-refactor-frontend/{timestamp}/
→ Mark all remaining todos as `completed` (skipped - dry run)
→ TERMINATE with "Dry run complete. Re-run without --dry-run to execute."
```
**If `dry_run` is not true, continue to next section.**
---
## CRITICAL: Specialized Agents Perform All Tasks
See [shared-patterns/shared-orchestrator-principle.md](../shared-patterns/shared-orchestrator-principle.md) for full ORCHESTRATOR principle, role separation, forbidden/required actions, step-to-agent mapping, and anti-rationalization table.
**Summary:** You orchestrate. Agents execute. If using Bash/Grep/Read to analyze code, STOP. Dispatch agent.
---
## Step 1: Validate PROJECT_RULES.md
**TodoWrite:** Mark "Validate PROJECT_RULES.md exists" as `in_progress`
<block_condition>
- docs/PROJECT_RULES.md does not exist
</block_condition>
If condition is true, output blocker and TERMINATE. Otherwise continue to Step 1b.
**Check:** Does `docs/PROJECT_RULES.md` exist?
- **YES** -> Mark todo as `completed`, continue to Step 1b
- **NO** -> Output blocker and TERMINATE:
```markdown
## BLOCKED: PROJECT_RULES.md Not Found
Cannot proceed without project standards baseline.
**Required Action:** Create `docs/PROJECT_RULES.md` with:
- Architecture patterns
- Code conventions
- Testing requirements
- Technology stack decisions
Re-run after file exists.
```
---
## Step 1b: Detect Frontend Stack
**TodoWrite:** Mark "Detect frontend stack and UI library mode" as `in_progress`
**MANDATORY: Verify this is a frontend project. If not, redirect.**
Check for frontend indicators:
| Check | Detection | Result |
|-------|-----------|--------|
| `package.json` exists | Glob for `package.json` | Required |
| React/Next.js in deps | `react`, `next` in dependencies | Required for frontend |
| `@lerianstudio/sindarian-ui` in deps | Check dependencies/devDependencies | Store `ui_library_mode` |
| BFF layer detected | `/api/` routes, Express/Fastify in deps | Add `ring:frontend-bff-engineer-typescript` |
| `ux-criteria.md` exists | `docs/pre-dev/*/ux-criteria.md` | Add `ring:ui-engineer` |
**Detection Logic:**
```text
1. package.json exists?
NO -> STOP: "Not a Node.js project. Use ring:dev-refactor instead."
YES -> Continue
2. React or Next.js in dependencies?
NO -> STOP: "Not a frontend project. Use ring:dev-refactor instead."
YES -> Continue
3. @lerianstudio/sindarian-ui in dependencies?
YES -> ui_library_mode = "sindarian-ui"
NO -> ui_library_mode = "fallback-only"
4. BFF layer detected? (/api/ routes, Express/Fastify in deps)
YES -> dispatch_bff = true
NO -> dispatch_bff = false
5. ux-criteria.md exists?
YES -> dispatch_ui_engineer = true
NO -> dispatch_ui_engineer = false
```
**TodoWrite:** Mark "Detect frontend stack and UI library mode" as `completed`
---
## Step 2: Read PROJECT_RULES.md
**TodoWrite:** Mark "Read PROJECT_RULES.md for context" as `in_progress`
```
Read tool: docs/PROJECT_RULES.md
```
Extract project-specific conventions for agent context.
**TodoWrite:** Mark "Read PROJECT_RULES.md for context" as `completed`
---
## Step 3: Generate Codebase Report
**TodoWrite:** Mark "Generate codebase report via ring:codebase-explorer" as `in_progress`
### MANDATORY: Use Task Tool with ring:codebase-explorer
<dispatch_required agent="ring:codebase-explorer">
Generate a comprehensive frontend codebase report describing WHAT EXISTS.
Include:
- Project structure and directory layout
- React/Next.js architecture (App Router vs Pages Router, Server vs Client components)
- UI library usage (sindarian-ui, shadcn/ui, custom components)
- State management patterns (TanStack Query, Zustand, Context)
- Form handling patterns (React Hook Form, Zod)
- Styling approach (TailwindCSS, CSS Modules, styled-components)
- Testing setup (Vitest, Playwright, Testing Library)
- Performance configuration (next.config, image optimization)
- Key files inventory with file:line references
- Code snippets showing current implementation patterns
</dispatch_required>
<output_required>
## EXPLORATION SUMMARY
[Your summary here]
## KEY FINDINGS
[Your findings here]
## ARCHITECTURE INSIGHTS
[Your insights here]
## RELEVANT FILES
[Your file inventory here]
## RECOMMENDATIONS
[Your recommendations here]
</output_required>
Do not complete without outputting full report in the format above.
### Anti-Rationalization Table for Step 3
See [shared-patterns/anti-rationalization-codebase-explorer.md](../shared-patterns/anti-rationalization-codebase-explorer.md) for the ring:codebase-explorer dispatch anti-rationalization table.
### FORBIDDEN Actions for Step 3
<forbidden>
- Bash(command="find ... -name '*.tsx'") -> SKILL FAILURE
- Bash(command="ls -la ...") -> SKILL FAILURE
- Bash(command="tree ...") -> SKILL FAILURE
- Task(subagent_type="Explore", ...) -> SKILL FAILURE
- Task(subagent_type="general-purpose", ...) -> SKILL FAILURE
- Task(subagent_type="Plan", ...) -> SKILL FAILURE
</forbidden>
Any of these = IMMEDIATE SKILL FAILURE.
### REQUIRED Action for Step 3
```
Task(subagent_type="ring:codebase-explorer", ...)
```
**Timestamp format:** `{timestamp}` = `YYYY-MM-DDTHH:MM:SS` (e.g., `2026-02-10T15:30:00`). Generate once at start, reuse for all artifacts.
**After Task completes, save with Write tool:**
```
Write tool:
file_path: "docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md"
content: [Task output]
```
**TodoWrite:** Mark "Generate codebase report via ring:codebase-explorer" as `completed`
---
## Step 4: Dispatch Frontend Specialist Agents
**TodoWrite:** Mark "Dispatch frontend specialist agents in parallel" as `in_progress`
### HARD GATE: Verify codebase-report.md Exists
**BEFORE dispatching any specialist agent, verify:**
```
Check 1: Does docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md exist?
- YES -> Continue to dispatch agents
- NO -> STOP. Go back to Step 3.
Check 2: Was codebase-report.md created by ring:codebase-explorer?
- YES -> Continue
- NO (created by Bash output) -> DELETE IT. Go back to Step 3. Use correct agent.
```
**If you skipped Step 3 or used Bash instead of Task tool, you MUST go back and redo Step 3 correctly.**
### MANDATORY: Reference Standards Coverage Table
**All agents MUST follow [shared-patterns/standards-coverage-table.md](../shared-patterns/standards-coverage-table.md) which defines:**
- All sections to check per agent
- Required output format (Standards Coverage Table)
- Anti-rationalization rules
- Completeness verification
**Section indexes are pre-defined in shared-patterns. Agents MUST check all sections listed.**
---
### Always Dispatched (5 agents in parallel)
**Dispatch all 5 agents in ONE message (parallel):**
```yaml
Task tool 1:
subagent_type: "ring:frontend-engineer"
description: "Frontend standards analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
MANDATORY: Check all 19 sections in frontend.md per shared-patterns/standards-coverage-table.md
FRAMEWORKS & LIBRARIES DETECTION (MANDATORY):
1. Read package.json to extract all dependencies used in codebase
2. Load frontend.md standards via WebFetch -> extract all listed frameworks/libraries
3. For each category in standards (Framework, State, Forms, UI, Styling, Testing, etc.):
- Compare codebase dependency vs standards requirement
- If codebase uses DIFFERENT library than standards -> ISSUE-XXX
- If codebase is MISSING required library -> ISSUE-XXX
4. any library not in standards that serves same purpose = ISSUE-XXX
UI Library Mode: {ui_library_mode}
Input:
- Ring Standards: Load via WebFetch (frontend.md)
- Section Index: See shared-patterns/standards-coverage-table.md -> "ring:frontend-engineer"
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output:
1. Standards Coverage Table (per shared-patterns format)
2. ISSUE-XXX for each non-compliant finding with: Pattern name, Severity, file:line, Current Code, Expected Code
Task tool 2:
subagent_type: "ring:qa-analyst-frontend"
description: "Frontend testing analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
MANDATORY: Check all 19 testing sections per shared-patterns/standards-coverage-table.md -> "ring:qa-analyst-frontend"
Analyze ALL testing dimensions:
- Accessibility (ACC-1 to ACC-5): axe-core, semantic HTML, keyboard nav, focus, color contrast
- Visual (VIS-1 to VIS-4): snapshots, state coverage, responsive, component duplication
- E2E (E2E-1 to E2E-5): user flows, error paths, cross-browser, responsive, selectors
- Performance (PERF-1 to PERF-5): Core Web Vitals, Lighthouse, bundle, server components, anti-patterns
UI Library Mode: {ui_library_mode}
Input:
- Ring Standards: Load via WebFetch (frontend/testing-accessibility.md, testing-visual.md, testing-e2e.md, testing-performance.md)
- Section Index: See shared-patterns/standards-coverage-table.md -> "ring:qa-analyst-frontend"
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output:
1. Standards Coverage Table (per shared-patterns format) for ALL 19 sections
2. ISSUE-XXX for each non-compliant finding
Task tool 3:
subagent_type: "ring:frontend-designer"
description: "Frontend design analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
MANDATORY: Check all 19 sections in frontend.md per shared-patterns/standards-coverage-table.md -> "ring:frontend-designer"
Focus on design perspective:
- Typography standards (font selection, pairing, hierarchy)
- Styling standards (TailwindCSS, CSS variables, design tokens)
- Animation standards (transitions, Framer Motion usage)
- Component patterns (compound components, design system compliance)
- Accessibility UX (color contrast, focus indicators, motion preferences)
UI Library Mode: {ui_library_mode}
Input:
- Ring Standards: Load via WebFetch (frontend.md)
- Section Index: See shared-patterns/standards-coverage-table.md -> "ring:frontend-designer"
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output:
1. Standards Coverage Table (per shared-patterns format)
2. ISSUE-XXX for each non-compliant finding
Task tool 4:
subagent_type: "ring:devops-engineer"
description: "DevOps analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
Check all 8 sections per shared-patterns/standards-coverage-table.md -> "ring:devops-engineer"
Frontend-specific DevOps focus:
- Dockerfile for SSR/SSG Next.js app
- Docker Compose for local development
- Nginx configuration for static assets/reverse proxy
- .env management for frontend environment variables
- Makefile with frontend commands (dev, build, lint, test, e2e)
- CI/CD pipeline for frontend build/test/deploy
"Containers" means BOTH Dockerfile and Docker Compose
"Makefile Standards" means all required commands
Input:
- Ring Standards: Load via WebFetch (devops.md)
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output: Standards Coverage Table + ISSUE-XXX for gaps
Task tool 5:
subagent_type: "ring:sre"
description: "Observability analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
Check all 6 sections per shared-patterns/standards-coverage-table.md -> "ring:sre"
Frontend-specific observability focus:
- Error tracking (error boundaries, global error handlers)
- Health check endpoints (if SSR)
- Real User Monitoring (RUM) / Core Web Vitals reporting
- Structured client-side logging
- Distributed tracing for BFF/API calls
Input:
- Ring Standards: Load via WebFetch (sre.md)
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output: Standards Coverage Table + ISSUE-XXX for gaps
```
### Conditionally Dispatched
**Add to the parallel dispatch if conditions from Step 1b are met:**
```yaml
Task tool 6 (if dispatch_bff == true):
subagent_type: "ring:frontend-bff-engineer-typescript"
description: "BFF TypeScript standards analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
MANDATORY: Check all 20 sections in typescript.md per shared-patterns/standards-coverage-table.md -> "frontend-bff-engineer-typescript"
FRAMEWORKS & LIBRARIES DETECTION (MANDATORY):
1. Read package.json to extract all dependencies used in codebase
2. Load typescript.md standards via WebFetch -> extract all listed frameworks/libraries
3. For each category in standards (Backend Framework, ORM, Validation, Testing, etc.):
- Compare codebase dependency vs standards requirement
- If codebase uses DIFFERENT library than standards -> ISSUE-XXX
- If codebase is MISSING required library -> ISSUE-XXX
4. any library not in standards that serves same purpose = ISSUE-XXX
UI Library Mode: {ui_library_mode}
Input:
- Ring Standards: Load via WebFetch (typescript.md)
- Section Index: See shared-patterns/standards-coverage-table.md -> "frontend-bff-engineer-typescript"
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output:
1. Standards Coverage Table (per shared-patterns format)
2. ISSUE-XXX for each non-compliant finding
Task tool 7 (if dispatch_ui_engineer == true):
subagent_type: "ring:ui-engineer"
description: "UI engineer standards analysis"
model: "opus"
prompt: |
**MODE: ANALYSIS only**
MANDATORY: Check all 19 sections in frontend.md per shared-patterns/standards-coverage-table.md -> "ring:ui-engineer"
Additionally verify against product-designer outputs:
- UX criteria compliance (ux-criteria.md)
- User flow implementation (user-flows.md)
- Wireframe adherence (wireframes/*.yaml)
- UI states coverage (loading, error, empty, success)
UI Library Mode: {ui_library_mode}
Input:
- Ring Standards: Load via WebFetch (frontend.md)
- Section Index: See shared-patterns/standards-coverage-table.md -> "ring:ui-engineer"
- UX Criteria: docs/pre-dev/{feature}/ux-criteria.md
- Codebase Report: docs/ring:dev-refactor-frontend/{timestamp}/codebase-report.md
- Project Rules: docs/PROJECT_RULES.md
Output:
1. Standards Coverage Table (per shared-patterns format)
2. UX Criteria Compliance table
3. ISSUE-XXX for each non-compliant finding
```
### Agent Dispatch Summary
| Condition | Agents to Dispatch |
|-----------|-------------------|
| Always | Tasks 1-5 (Frontend Engineer + QA Frontend + Designer + DevOps + SRE) |
| BFF layer detected | + Task 6 (BFF Engineer) |
| ux-criteria.md exists | + Task 7 (UI Engineer) |
**TodoWrite:** Mark "Dispatch frontend specialist agents in parallel" as `completed`
---
## Step 4.5: Agent Report -> Findings Mapping (HARD GATE)
**TodoWrite:** Mark "Map agent findings to FINDING-XXX entries" as `in_progress`
**MANDATORY: all agent-reported issues MUST become findings.**
| Agent Report | Action |
|--------------|--------|
| Any difference between current code and Ring standard | -> Create FINDING-XXX |
| Any missing pattern from Ring standards | -> Create FINDING-XXX |
| Any deprecated pattern usage | -> Create FINDING-XXX |
| Any accessibility gap | -> Create FINDING-XXX |
| Any testing gap | -> Create FINDING-XXX |
| Any performance issue | -> Create FINDING-XXX |
### FORBIDDEN Actions for Step 4.5
```
Ignoring agent-reported issues because they seem "minor" -> SKILL FAILURE
Filtering out issues based on personal judgment -> SKILL FAILURE
Summarizing multiple issues into one finding -> SKILL FAILURE
Skipping issues without ISSUE-XXX format from agent -> SKILL FAILURE
Creating findings only for "interesting" gaps -> SKILL FAILURE
```
### REQUIRED Actions for Step 4.5
```
Every line item from agent reports becomes a FINDING-XXX entry
Preserve agent's severity assessment exactly as reported
Include exact file:line references from agent report
Every non-compliant item in Standards Coverage Table = one FINDING-XXX
Count findings in Step 5 MUST equal total issues from all agent reports
```
---
### Anti-Rationalization Table for Step 4.5
**See also: "Anti-Rationalization: Mandatory Gap Principle" at top of this skill.**
| Rationalization | Why It's WRONG | Required Action |
|-----------------|----------------|-----------------|
| "Multiple similar issues can be one finding" | Distinct file:line = distinct finding. Merging loses traceability. | **One issue = One FINDING-XXX** |
| "Agent report didn't use ISSUE-XXX format" | Format varies; presence matters. Every gap = one finding. | **Extract all gaps into findings** |
| "I'll consolidate to reduce noise" | Consolidation = data loss. Noise is signal. | **Preserve all individual issues** |
| "Some findings are duplicates across agents" | Different agents = different perspectives. Keep both. | **Create separate findings per agent** |
| "Team has approved this deviation" | Team approval is not standards compliance. Document the gap. | **Create FINDING-XXX, note team decision** |
| "Fixing this would break existing code" | Breaking risk = implementation concern, not tracking concern. | **Create FINDING-XXX, note risk in description** |
### MANDATORY GAP RULE FOR STEP 4.5
**Per the Mandatory Gap Principle (see top of skill): any divergence from Ring standards = FINDING-XXX.**
This means:
- Compliant items in Standards Coverage Table = No finding needed
- Partial items = MUST create FINDING-XXX (partial compliance is a gap)
- Non-compliant items = MUST create FINDING-XXX (non-compliance is a gap)
- Different pattern = MUST create FINDING-XXX (alternative is still a gap)
**Verification:** Use formula from "Mandatory Gap Principle -> Verification Rule" section.
### Gate Escape Detection (Frontend 9-Gate Cycle)
**When mapping findings, identify which gate SHOULD have caught the issue:**
| Finding Category | Should Be Caught In | Flag |
|------------------|---------------------|------|
| Implementation pattern gaps | Gate 0 (Implementation) | Normal finding |
| React/Next.js architectural issues | Gate 0 (Implementation) | Normal finding |
| Docker/DevOps gaps | Gate 1 (DevOps) | GATE 1 ESCAPE |
| WCAG violations, keyboard nav, ARIA | Gate 2 (Accessibility) | GATE 2 ESCAPE |
| Semantic HTML, focus management | Gate 2 (Accessibility) | GATE 2 ESCAPE |
| Unit test gaps, coverage <85% | Gate 3 (Unit Testing) | GATE 3 ESCAPE |
| Test isolation issues | Gate 3 (Unit Testing) | GATE 3 ESCAPE |
| Missing snapshot tests | Gate 4 (Visual) | GATE 4 ESCAPE |
| Missing state/responsive coverage | Gate 4 (Visual) | GATE 4 ESCAPE |
| sindarian-ui component duplication | Gate 4 (Visual) | GATE 4 ESCAPE |
| Untested user flows | Gate 5 (E2E) | GATE 5 ESCAPE |
| Cross-browser issues | Gate 5 (E2E) | GATE 5 ESCAPE |
| Flaky tests | Gate 5 (E2E) | GATE 5 ESCAPE |
| CWV violations (LCP > 2.5s, CLS > 0.1, INP > 200ms) | Gate 6 (Performance) | GATE 6 ESCAPE |
| Lighthouse < 90 | Gate 6 (Performance) | GATE 6 ESCAPE |
| Bundle size bloat | Gate 6 (Performance) | GATE 6 ESCAPE |
| Bare `<img>` tags (not next/image) | Gate 6 (Performance) | GATE 6 ESCAPE |
| Code quality (reviewer-catchable) | Gate 7 (Review) | GATE 7 ESCAPE |
**Gate Escape Output Format:**
```markdown
### FINDING-XXX: [Issue Title] GATE N ESCAPE
**Escaped From:** Gate N ({Gate Name})
**Why It Escaped:** [Quality Gate check that should have caught this]
**Prevention:** [Specific check to add to Gate N exit criteria]
[Rest of finding format...]
```
**Purpose:** Track which issues escape which gates. If many escapes occur at a gate, that gate's exit criteria need strengthening.
---
**Summary Table (MANDATORY at end of findings.md):**
```markdown
## Gate Escape Summary
| Gate | Escaped Issues | Most Common Type |
|------|----------------|------------------|
| Gate 0 (Implementation) | N | [type] |
| Gate 1 (DevOps) | N | [type] |
| Gate 2 (Accessibility) | N | [type] |
| Gate 3 (Unit Testing) | N | [type] |
| Gate 4 (Visual) | N | [type] |
| Gate 5 (E2E) | N | [type] |
| Gate 6 (Performance) | N | [type] |
| Gate 7 (Review) | N | [type] |
**Action Required:** If any gate has >2 escapes, review that gate's exit criteria.
```
**TodoWrite:** Mark "Map agent findings to FINDING-XXX entries" as `completed`
---
## Step 4.6: Save Individual Agent Reports
**TodoWrite:** Mark "Save individual agent reports" as `in_progress`
**MANDATORY: Each agent's output MUST be saved as an individual report file.**
After all parallel agent tasks complete, save each agent's output to a separate file:
```
docs/ring:dev-refactor-frontend/{timestamp}/reports/
+-- ring:frontend-engineer-report.md (always)
+-- ring:qa-analyst-frontend-report.md (always)
+-- ring:frontend-designer-report.md (always)
+-- ring:devops-engineer-report.md (always)
+-- ring:sre-report.md (always)
+-- ring:frontend-bff-engineer-typescript-report.md (if BFF detected)
+-- ring:ui-engineer-report.md (if ux-criteria.md exists)
```
### Report File Format
**Use Write tool for each agent report:**
```markdown
# {Agent Name} Analysis Report
**Generated:** {timestamp}
**Agent:** {agent-name}
**Mode:** ANALYSIS only
## Standards Coverage Table
{Copy agent's Standards Coverage Table output here}
## Issues Found
{Copy all ISSUE-XXX entries from agent output}
## Summary
- **Total Issues:** {count}
- **Critical:** {count}
- **High:** {count}
- **Medium:** {count}
- **Low:** {count}
---
*Report generated by ring:dev-refactor-frontend skill*
```
### Anti-Rationalization Table for Step 4.6
| Rationalization | Why It's WRONG | Required Action |
|-----------------|----------------|-----------------|
| "I'll combine all reports into one file" | Individual reports enable targeted re-runs and tracking | **Save each agent to SEPARATE file** |
| "Agent output is already visible in chat" | Chat history is ephemeral; files are artifacts | **MUST persist as files** |
| "Only saving reports with issues" | Empty reports prove compliance was checked | **Save all dispatched agent reports** |
| "findings.md already captures everything" | findings.md is processed; reports are raw agent output | **Save BOTH raw reports and findings.md** |
### REQUIRED Action for Step 4.6
```
Write tool:
file_path: "docs/ring:dev-refactor-frontend/{timestamp}/reports/{agent-name}-report.md"
content: [Agent Task output formatted per template above]
```
**Repeat for each agent dispatched in Step 4.**
**TodoWrite:** Mark "Save individual agent reports" as `completed`
---
## Step 5: Generate findings.md
**TodoWrite:** Mark "Generate findings.md" as `in_progress`
### HARD GATE: Verify All Issues Are Mapped
**BEFORE creating findings.md, apply the Verification Rule from "Mandatory Gap Principle" section.**
If counts don't match, STOP. Go back to Step 4.5. Map missing issues.
### FORBIDDEN Actions for Step 5
```
Creating findings.md with fewer entries than agent issues -> SKILL FAILURE
Omitting file:line references from findings -> SKILL FAILURE
Using vague descriptions instead of specific code excerpts -> SKILL FAILURE
Skipping "Why This Matters" section for any finding -> SKILL FAILURE
Generating findings.md without reading all agent reports -> SKILL FAILURE
```
### REQUIRED Actions for Step 5
```
Every FINDING-XXX includes: Severity, Category, Agent, Standard reference
Every FINDING-XXX includes: Current Code with exact file:line
Every FINDING-XXX includes: Ring Standard Reference with URL
Every FINDING-XXX includes: Required Changes as numbered actions
Every FINDING-XXX includes: Why This Matters with Problem/Standard/Impact
Total finding count MUST match total issues from Step 4.5
```
### Anti-Rationalization Table for Step 5
| Rationalization | Why It's WRONG | Required Action |
|-----------------|----------------|-----------------|
| "I'll add details later during implementation" | findings.md is the source of truth. Incomplete = useless. | **Complete all sections for every finding** |
| "Code snippet is too long to include" | Truncate to relevant lines, but never omit. Context is required. | **Include code with file:line reference** |
| "Standard URL is obvious, skip it" | Agents and humans need direct links. Nothing is obvious. | **Include full URL for every standard** |
| "Why This Matters is redundant" | It explains business impact. Standards alone don't convey urgency. | **Write Problem/Standard/Impact for all** |
| "Some findings are self-explanatory" | Self-explanatory to you is not clear to implementer. | **Complete all sections without exception** |
| "I'll group small findings together" | Each finding = one task in Step 6. findings.md = atomic issues. | **One finding = one FINDING-XXX entry** |
**Use Write tool to create findings.md:**
**CRITICAL: Every issue reported by agents in Step 4 MUST appear here as a FINDING-XXX entry.**
```markdown
# Findings: {project-name}
**Generated:** {timestamp}
**Total Findings:** {count}
**UI Library Mode:** {ui_library_mode}
## Mandatory Gap Principle Applied
**all divergences from Ring standards are tracked below. No filtering applied.**
| Metric | Count |
|--------|-------|
| Total non-compliant items from agent reports | {X} |
| Total FINDING-XXX entries below | {X} |
| **Counts match?** | YES (REQUIRED) |
**Severity does not affect tracking - all gaps are mandatory:**
| Severity | Count | Priority | Tracking |
|----------|-------|----------|----------|
| Critical | {N} | Execute first | **MANDATORY** |
| High | {N} | Execute in current sprint | **MANDATORY** |
| Medium | {N} | Execute in next sprint | **MANDATORY** |
| Low | {N} | Execute when capacity | **MANDATORY** |
---
## FINDING-001: {Pattern Name}
**Severity:** Critical | High | Medium | Low (all MANDATORY)
**Category:** {component-architecture | ui-library | styling | accessibility | testing | performance | devops}
**Agent:** {agent-name}
**Standard:** {file}.md:{section}
### Current Code
```{lang}
// file: {path}:{lines}
{actual code}
```
### Ring Standard Reference
**Standard:** {standards-file}.md -> Section: {section-name}
**Pattern:** {pattern-name}
**URL:** https://raw.githubusercontent.com/LerianStudio/ring/main/dev-team/docs/standards/{file}.md
### Required Changes
1. {action item 1 - what to change}
2. {action item 2 - what to add/remove}
3. {action item 3 - pattern to follow}
### Why This Matters
- **Problem:** {what is wrong with current code}
- **Standard Violated:** {specific section from Ring standards}
- **Impact:** {business/technical impact if not fixed}
---
## FINDING-002: ...
```
**TodoWrite:** Mark "Generate findings.md" as `completed`
---
## Step 6: Map Findings to Tasks (1:1)
**TodoWrite:** Mark "Map findings 1:1 to REFACTOR-XXX tasks" as `in_progress`
**HARD GATE: One FINDING-XXX = One REFACTOR-XXX task. No grouping.**
Each finding becomes its own task. This prevents findings from being lost inside grouped tasks.
**1:1 Mapping Rule:**
- FINDING-001 -> REFACTOR-001
- FINDING-002 -> REFACTOR-002
- FINDING-NNN -> REFACTOR-NNN
**Ordering:** Sort tasks by severity (Critical first), then by dependency order.
**Mapping Verification:**
```
Before proceeding to Step 7, verify:
- Total FINDING-XXX in findings.md: X
- Total REFACTOR-XXX in tasks.md: X (MUST MATCH exactly)
- Orphan findings (not mapped): 0 (MUST BE ZERO)
- Grouped tasks (multiple findings): 0 (MUST BE ZERO)
```
**If counts don't match, STOP. Every finding MUST have its own task.**
### Anti-Rationalization Table for Step 6
| Rationalization | Why It's WRONG | Required Action |
|-----------------|----------------|-----------------|
| "These findings are in the same file, I'll group them" | Grouping hides findings. One fix may be done, others forgotten. | **One finding = One task. No exceptions.** |
| "Grouping reduces task count and is easier to manage" | Fewer tasks = less visibility. Each finding needs independent tracking. | **Create one REFACTOR-XXX per FINDING-XXX** |
| "These are related and should be fixed together" | Related is not same task. ring:dev-cycle-frontend can execute them sequentially. | **Separate tasks, use Dependencies field to link** |
| "Too many tasks will overwhelm the developer" | Missing fixes overwhelms production. Completeness > convenience. | **Create all tasks. Priority handles ordering.** |
**TodoWrite:** Mark "Map findings 1:1 to REFACTOR-XXX tasks" as `completed`
---
## Step 7: Generate tasks.md
**TodoWrite:** Mark "Generate tasks.md" as `in_progress`
**Use Write tool to create tasks.md:**
```markdown
# Refactoring Tasks: {project-name}
**Source:** findings.md
**Total Tasks:** {count}
**UI Library Mode:** {ui_library_mode}
## Mandatory 1:1 Mapping Verification
**Every FINDING-XXX has exactly one REFACTOR-XXX. No grouping.**
| Metric | Count |
|--------|-------|
| Total FINDING-XXX in findings.md | {X} |
| Total REFACTOR-XXX in tasks.md | {X} |
| **Counts match exactly?** | YES (REQUIRED) |
| Grouped tasks (multiple findings) | 0 (REQUIRED) |
**Priority affects execution order, not whether to include:**
- Critical/High tasks: Execute first
- Medium tasks: Execute in current cycle
- Low tasks: Execute when capacity - STILL MANDATORY TO COMPLETE
---
## REFACTOR-001: {Finding Pattern Name}
**Finding:** FINDING-001
**Severity:** Critical | High | Medium | Low (all ARE MANDATORY)
**Category:** {component-architecture | ui-library | styling | accessibility | testing | performance | devops}
**Agent:** {agent-name}
**Effort:** {hours}h
**Dependencies:** {other REFACTOR-XXX tasks or none}
### Current Code
```{lang}
// file: {path}:{lines}
{actual code from FINDING-001}
```
### Ring Standard Reference
| Standard File | Section | URL |
|---------------|---------|-----|
| {file}.md | {section} | [Link](https://raw.githubusercontent.com/LerianStudio/ring/main/dev-team/docs/standards/{file}.md) |
### Required Actions
1. [ ] {action 1 - specific change to make}
2. [ ] {action 2 - pattern to implement}
### Acceptance Criteria
- [ ] Code follows {standard}.md -> {section} pattern
- [ ] No {anti-pattern} usage remains
- [ ] Tests pass after refactoring
```
**TodoWrite:** Mark "Generate tasks.md" as `completed`
---
## Step 8: User Approval
**TodoWrite:** Mark "Get user approval" as `in_progress`
### Auto-Resolution via Input Flags
```text
if analyze_only == true:
→ Auto-select "Cancel" (analysis complete, skip execution)
→ Output: "analyze_only=true — analysis artifacts saved, skipping ring:dev-cycle-frontend."
→ Skip to Step 9 (Save Artifacts), then TERMINATE after Step 9.
if critical_only == true:
→ Auto-select "Critical only" (no user prompt needed)
→ Output: "critical_only=true — auto-selecting Critical/High tasks only."
→ Continue to Step 9, then Step 10 with Critical/High tasks.
```
### Interactive Approval (when no auto-resolution flags are set)
<user_decision>
MUST wait for explicit user response before proceeding.
Options: Approve all | Critical only | Cancel
</user_decision>
```yaml
AskUserQuestion:
questions:
- question: "Review frontend refactoring plan. How to proceed?"
header: "Approval"
options:
- label: "Approve all"
description: "Proceed to ring:dev-cycle-frontend execution"
- label: "Critical only"
description: "Execute only Critical/High tasks"
- label: "Cancel"
description: "Keep analysis, skip execution"
```
CANNOT proceed without explicit user selection (or an auto-resolution flag).
**TodoWrite:** Mark "Get user approval" as `completed`
---
## Step 9: Save Artifacts
**TodoWrite:** Mark "Save all artifacts" as `in_progress`
```
docs/ring:dev-refactor-frontend/{timestamp}/
+-- codebase-report.md (Step 3)
+-- reports/ (Step 4.6)
| +-- ring:frontend-engineer-report.md
| +-- ring:qa-analyst-frontend-report.md
| +-- ring:frontend-designer-report.md
| +-- ring:devops-engineer-report.md
| +-- ring:sre-report.md
| +-- ring:frontend-bff-engineer-typescript-report.md (conditional)
| +-- ring:ui-engineer-report.md (conditional)
+-- findings.md (Step 5)
+-- tasks.md (Step 7)
```
**TodoWrite:** Mark "Save all artifacts" as `completed`
---
## Step 10: Handoff to ring:dev-cycle-frontend
**TodoWrite:** Mark "Handoff to ring:dev-cycle-frontend" as `in_progress`
### Skip Conditions
```text
if analyze_only == true:
→ Output: "analyze_only=true — skipping handoff. Artifacts saved at docs/ring:dev-refactor-frontend/{timestamp}/."
→ Mark todo as `completed`
→ TERMINATE.
if dry_run == true:
→ This step is unreachable (dry_run exits after Step 1b).
if user selected "Cancel" in Step 8:
→ Output: "User cancelled execution. Artifacts saved at docs/ring:dev-refactor-frontend/{timestamp}/."
→ Mark todo as `completed`
→ TERMINATE.
```
### Execution (when user approved or critical_only resolved)
**Use Skill tool to invoke ring:dev-cycle-frontend directly:**
```yaml
Skill tool:
skill: "ring:dev-cycle-frontend"
```
**CRITICAL: Pass tasks file path in context:**
After invoking the skill, provide:
- Tasks file: `docs/ring:dev-refactor-frontend/{timestamp}/tasks.md`
```yaml
Context for ring:dev-cycle-frontend:
tasks-file: "docs/ring:dev-refactor-frontend/{timestamp}/tasks.md"
```
Where `{timestamp}` format is `YYYY-MM-DDTHH:MM:SS`. Use the same timestamp across all artifacts in a single run.
### Anti-Rationalization: Skill Invocation
| Rationalization | Why It's WRONG | Required Action |
|-----------------|----------------|-----------------|
| "SlashCommand is equivalent to Skill tool" | SlashCommand is a hint; Skill tool guarantees skill loading | **Use Skill tool, not SlashCommand** |
| "User can run /ring:dev-cycle-frontend manually" | Manual run risks skill not being loaded | **Invoke Skill tool directly** |
| "ring:dev-cycle-frontend will auto-discover tasks" | Explicit path ensures correct file is used | **Pass explicit tasks path** |
| "User approved, I can skip ring:dev-cycle-frontend" | Approval = permission to proceed, not skip execution | **Invoke Skill tool** |
| "Tasks are saved, job is done" | Saved tasks without execution = incomplete workflow | **Invoke Skill tool** |
| "analyze_only was not set but I'll skip anyway" | Only analyze_only, dry_run, or user "Cancel" can skip this step | **Invoke Skill tool** |
**HARD GATE: When execution is approved (user selected "Approve all" or "Critical only", or critical_only auto-resolved), you CANNOT complete ring:dev-refactor-frontend without invoking `Skill tool: ring:dev-cycle-frontend`.**
If execution is approved, you MUST:
1. Invoke `Skill tool: ring:dev-cycle-frontend`
2. Pass tasks file path: `docs/ring:dev-refactor-frontend/{timestamp}/tasks.md`
3. Wait for ring:dev-cycle-frontend to complete all 9 gates
**Skipping this step when execution is approved = SKILL FAILURE.**
ring:dev-cycle-frontend executes each REFACTOR-XXX task through the 9-gate frontend process.
**TodoWrite:** Mark "Handoff to ring:dev-cycle-frontend" as `completed`
---
## Execution Report
Base metrics per [shared-patterns/output-execution-report.md](../shared-patterns/output-execution-report.md).
| Metric | Value |
|--------|-------|
| Duration | Xm Ys |
| Iterations | N |
| Result | PASS/FAIL/PARTIAL |
### Refactor-Frontend-Specific Metrics
| Metric | Value |
|--------|-------|
| Agents Dispatched | N (5-7) |
| UI Library Mode | sindarian-ui / fallback-only |
| Findings Generated | N |
| Tasks Created | N |
| Gate Escapes Detected | N |
| Artifacts Location | docs/ring:dev-refactor-frontend/{timestamp}/ |
## Output Schema
```yaml
artifacts:
- codebase-report.md (Step 3)
- reports/{agent-name}-report.md (Step 4.6)
- findings.md (Step 5)
- tasks.md (Step 7)
traceability:
Ring Standard -> Agent Report -> FINDING-XXX -> REFACTOR-XXX -> Implementation
```
This skill analyzes a frontend codebase against Ring frontend standards and produces a one-to-one set of refactor tasks for ring:dev-cycle-frontend. It enforces mandatory rules (load Ring standards first, record every divergence as a FINDING-XXX) and initializes a structured todo list before any analysis. The skill dispatches specialized frontend agents in ANALYSIS mode and compiles their reports into findings.md and tasks.md for handoff.
Before any action the skill loads the Ring frontend standards (from a provided path or default URLs) and stops if standards are missing. It creates a required todo list, detects the frontend stack and UI library mode, generates a detailed codebase report via ring:codebase-explorer, then dispatches five frontend specialist agents in parallel to run section-by-section standards coverage checks. All divergences are mapped 1:1 to FINDING-XXX entries and converted into REFACTOR-XXX tasks, saved with timestamped artifacts and handed off to ring:dev-cycle-frontend.
What happens if Ring standards cannot be loaded?
The skill halts and reports a blocker; it cannot proceed without the standards.
Can findings be filtered or deprioritized?
No. Every divergence is recorded as a FINDING-XXX; severity affects priority but not tracking.