From arn-spark
This skill should be used when the user says "visual readiness", "check visual layers", "activate visual layer", "visual checkpoint", "promote visual testing", "enable layer 2", "visual test health", "check deferred layers", "activate deferred layers", "layer promotion", or wants to validate and activate deferred visual testing layers after project milestones.
npx claudepluginhub appsvortex/arness --plugin arn-sparkThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Delivers DB-free sandbox API regression tests for Next.js/Vitest to catch AI blind spots in self-reviewed code changes like API routes and backend logic.
Validate and activate deferred visual testing layers after project milestones. When arn-spark-visual-strategy sets up a multi-layer testing strategy, Layer 1 (typically browser-based capture) is validated and activated immediately. Additional layers (e.g., native window capture) are marked as deferred because the project may not yet have the build pipeline, platform access, or tooling required to validate them. This skill is the checkpoint that evaluates whether deferred layers are now ready, validates them with a spike, and promotes them to active.
This is a conversational skill that runs in normal conversation (NOT plan mode). It uses the arn-spark-visual-test-engineer agent for layer validation spikes.
The primary artifacts are:
The core problem this solves: deferred visual testing layers sit dormant after arn-spark-visual-strategy because nothing re-evaluates whether the project has reached the point where those layers can be activated. This skill closes that gap by checking activation criteria, running validation spikes, and promoting layers that pass.
Read the project's CLAUDE.md for a ## Arness section. If no ## Arness section exists or Arness Spark fields are missing, inform the user: "Arness Spark is not configured for this project yet. Run /arn-brainstorming to get started — it will set everything up automatically." Do not proceed without it.
Extract:
.arness/vision).arness/spikes) -- for validation spike workspacesCheck for ### Visual Testing subsection:
/arn-spark-visual-strategy first to set up your visual testing strategy." Exit.Read CLAUDE.md ### Visual Testing section.
Parse top-level fields as Layer 1 config (always active):
Scan for #### Layer N: subsections. For each subsection, extract per-layer fields:
Build a layer list with all extracted data. Layer 1 is always the top-level config (implicit, always active). Additional layers come from #### Layer N: subsections.
If no ### Visual Testing found: suggest /arn-spark-visual-strategy and exit.
If no deferred layers: "All visual testing layers are active. No deferred layers to promote." Present a summary table of active layers and suggest /arn-code-review-implementation for a full multi-layer quality check. Exit.
For each active layer, verify the existing pipeline still works:
baseline-manifest.json exists)Present results per active layer:
"Layer [N] ([Name]) -- Active:
If an active layer's pipeline fails: report it as a WARNING but continue. Do not block deferred layer evaluation because an active layer has a transient issue.
Read the readiness checklist:
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-readiness/references/readiness-checklist.md
For each deferred layer:
**Activation criteria:** field from CLAUDE.mdwhich [tool], [tool] --version)**Interaction:** static or no **Interaction:** field:
Run the UIA Availability readiness pattern (Pattern 6 from readiness-checklist.md)
Run the Journey Runner readiness pattern (Pattern 7 from readiness-checklist.md) — skip if no runner exists yet
On macOS: run the Accessibility Permissions pattern (Pattern 8 from readiness-checklist.md)
If UIA Availability passes (automation framework available, accessibility tree inspectable):
Inform the user: "This Layer 2 is currently configured for static screenshot capture. The platform's UI automation framework is available, which means journey-based interaction testing is possible. Journey mode walks through the app like a user — clicking buttons, filling forms, navigating screens — and captures screenshots at each step."
Ask (using AskUserQuestion):
"Would you like to upgrade to journey interaction mode?"
Options:
Record the user's choice. If yes, mark the layer for journey upgrade in Step 5.
If UIA Availability fails, do not suggest the upgrade — static mode remains appropriate.
Present status per layer:
"Layer [N] ([Name]): Criteria '[activation criteria text]'
If ambiguous (e.g., a tool is installed but version is uncertain, or platform access is partial): ask the user for explicit confirmation rather than assuming.
For each deferred layer whose activation criteria are met:
IMPORTANT: Run validation spikes sequentially, one at a time. Do NOT launch multiple arn-spark-visual-test-engineer agents in parallel or in the background. The agent needs Bash and Write tool access, which requires user permission approval. Parallel or background agents cannot surface permission prompts to the user, causing all tool calls to be denied.
For each qualifying layer:
Read the spike checklist:
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-strategy/references/spike-checklist.md
Determine the spike workspace: [spikes-dir]/visual-readiness-spike-layer-[N]/
Invoke the arn-spark-visual-test-engineer agent (foreground, not background) with:
arn-spark-visual-strategy)Wait for the agent to complete fully before proceeding to the next layer.
Present results using the same classification as arn-spark-visual-strategy:
Proceed to the next layer only after presenting results.
For each deferred layer that was partially validated, ask before promoting:
Ask (using AskUserQuestion):
Layer [N] ([Name]) validated with caveats: [caveats]. Promote to active?
- Yes — Promote to active with caveats noted
- No — Leave as deferred
For each deferred layer that was validated (Validated or user-approved Partially validated):
Update CLAUDE.md #### Layer N: subsection:
**Status:** deferred to **Status:** active**Validated:** [YYYY-MM-DD] with today's date**Spike result:** with the validation evidence summaryFor layers that failed validation: leave as **Status:** deferred, report the reason.
Journey upgrade — If the user accepted the journey upgrade suggestion in Step 3:
a. Update the layer's **Interaction:** field from static to journey in CLAUDE.md
b. Add **Journey manifest:** field with path <baselines-dir>/layer-2/journey-manifest.json
c. Add **Journey runner:** field with path scripts/journey-runner.<ext> (.ps1 for Windows, .swift or .applescript for macOS)
d. Invoke arn-spark-visual-test-engineer agent with:
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-strategy/references/journey-schema.md**Environment:** field**Spike result:** to include journey validation evidenceFor layers that remained deferred (criteria not met): leave unchanged, report which criteria were not met.
Present the changes:
"CLAUDE.md updated:
Read the strategy document path from the **Strategy doc:** field in ### Visual Testing.
### Layer N: section in the strategy document#### Readiness Check ([date]) subsection documenting:
If the strategy document is not found at the configured path: warn and skip this step. Proceed with remaining steps.
Check if Git is configured (from ## Arness config or by checking for .git/). If not configured, skip this step silently.
If Git is configured and newly activated layers produce output directories:
.gitignore and check which paths are already covered"The newly activated layer(s) reference these paths:
| Path | Type | Recommendation | Currently in .gitignore |
|---|---|---|---|
| [path] | [ephemeral / shared] | [ignore / track] | [yes / no] |
| ... | ... | ... | ... |
Ask (using AskUserQuestion):
Proceed with these .gitignore recommendations?
- Yes — Apply the recommendations
- Adjust — Let me specify which paths to change"
.gitignore under a # Visual testing -- Layer [N] comment blockPresent the readiness report:
"Visual Readiness Report
Layer Status:
| Layer | Name | Previous Status | Current Status | Evidence |
|---|---|---|---|---|
| 1 | [Name] | active | active | [capture/compare health] |
| 2 | [Name] | deferred | [active/deferred] | [validation result or criteria status] |
| ... | ... | ... | ... | ... |
Screen Coverage:
Recommendations:
Run /arn-code-review-implementation to execute a full multi-layer quality check with all active layers."
| Situation | Action |
|---|---|
| Validate a deferred layer (Step 4) | Invoke arn-spark-visual-test-engineer sequentially (foreground, not background) with layer spec, environment, workspace, spike checklist. Wait for completion before the next layer. |
| Agent permission denied | Re-run arn-spark-visual-test-engineer in foreground. If still denied, execute validation directly in conversation (write POC files and run capture commands yourself). |
| User asks about initial visual setup | Defer: "Initial visual testing setup is handled by /arn-spark-visual-strategy." |
| User asks about quality gate | Defer: "The multi-layer quality gate runs during /arn-code-review-implementation." |
| User asks about specific layer tooling | Discuss and invoke arn-spark-tech-evaluator if a deep comparison is needed. |
| Cross-environment validation deferred | Record the deferral with instructions. Leave layer as deferred with updated evidence. |
### Visual Testing in CLAUDE.md -- suggest running /arn-spark-visual-strategy first to set up visual testing. Exit without further action./arn-code-review-implementation for a full multi-layer quality check. Exit.arn-spark-visual-test-engineer in foreground. If still denied, execute validation directly in conversation (write POC files and run capture commands).