@fredcallagan/arn-spark 5.1.0
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/.claude-plugin/plugin.json +9 -0
- package/.opencode/plugins/arn-spark.js +272 -0
- package/package.json +17 -0
- package/plugins/arn-spark/.claude-plugin/plugin.json +9 -0
- package/plugins/arn-spark/LICENSE +21 -0
- package/plugins/arn-spark/README.md +25 -0
- package/plugins/arn-spark/agents/arn-spark-brand-strategist.md +299 -0
- package/plugins/arn-spark/agents/arn-spark-dev-env-builder.md +228 -0
- package/plugins/arn-spark/agents/arn-spark-doctor.md +92 -0
- package/plugins/arn-spark/agents/arn-spark-forensic-investigator.md +181 -0
- package/plugins/arn-spark/agents/arn-spark-market-researcher.md +232 -0
- package/plugins/arn-spark/agents/arn-spark-marketing-pm.md +225 -0
- package/plugins/arn-spark/agents/arn-spark-persona-architect.md +259 -0
- package/plugins/arn-spark/agents/arn-spark-persona-impersonator.md +183 -0
- package/plugins/arn-spark/agents/arn-spark-product-strategist.md +191 -0
- package/plugins/arn-spark/agents/arn-spark-prototype-builder.md +497 -0
- package/plugins/arn-spark/agents/arn-spark-scaffolder.md +228 -0
- package/plugins/arn-spark/agents/arn-spark-spike-runner.md +209 -0
- package/plugins/arn-spark/agents/arn-spark-style-capture.md +196 -0
- package/plugins/arn-spark/agents/arn-spark-tech-evaluator.md +229 -0
- package/plugins/arn-spark/agents/arn-spark-ui-interactor.md +235 -0
- package/plugins/arn-spark/agents/arn-spark-use-case-writer.md +280 -0
- package/plugins/arn-spark/agents/arn-spark-ux-judge.md +215 -0
- package/plugins/arn-spark/agents/arn-spark-ux-specialist.md +200 -0
- package/plugins/arn-spark/agents/arn-spark-visual-sketcher.md +285 -0
- package/plugins/arn-spark/agents/arn-spark-visual-test-engineer.md +224 -0
- package/plugins/arn-spark/references/copilot-tools.md +62 -0
- package/plugins/arn-spark/skills/arn-brainstorming/SKILL.md +520 -0
- package/plugins/arn-spark/skills/arn-brainstorming/references/add-feature-flow.md +155 -0
- package/plugins/arn-spark/skills/arn-spark-arch-vision/SKILL.md +226 -0
- package/plugins/arn-spark/skills/arn-spark-arch-vision/references/architecture-vision-template.md +153 -0
- package/plugins/arn-spark/skills/arn-spark-arch-vision/references/technology-evaluation-guide.md +86 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype/SKILL.md +471 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/clickable-prototype-criteria.md +65 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/journey-template.md +62 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/review-report-template.md +75 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/showcase-capture-guide.md +213 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/SKILL.md +642 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/debate-protocol.md +242 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/debate-review-report-template.md +161 -0
- package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/expert-interaction-review-template.md +152 -0
- package/plugins/arn-spark/skills/arn-spark-concept-review/SKILL.md +350 -0
- package/plugins/arn-spark/skills/arn-spark-concept-review/references/conflict-resolution-protocol.md +145 -0
- package/plugins/arn-spark/skills/arn-spark-concept-review/references/review-report-template.md +185 -0
- package/plugins/arn-spark/skills/arn-spark-dev-setup/SKILL.md +366 -0
- package/plugins/arn-spark/skills/arn-spark-dev-setup/references/dev-setup-checklist.md +84 -0
- package/plugins/arn-spark/skills/arn-spark-dev-setup/references/dev-setup-template.md +205 -0
- package/plugins/arn-spark/skills/arn-spark-discover/SKILL.md +303 -0
- package/plugins/arn-spark/skills/arn-spark-discover/references/competitive-landscape-template.md +87 -0
- package/plugins/arn-spark/skills/arn-spark-discover/references/discovery-questions.md +120 -0
- package/plugins/arn-spark/skills/arn-spark-discover/references/persona-profile-template.md +97 -0
- package/plugins/arn-spark/skills/arn-spark-discover/references/product-concept-template.md +253 -0
- package/plugins/arn-spark/skills/arn-spark-ensure-config/SKILL.md +23 -0
- package/plugins/arn-spark/skills/arn-spark-ensure-config/references/ensure-config.md +388 -0
- package/plugins/arn-spark/skills/arn-spark-ensure-config/references/step-0-fast-path.md +25 -0
- package/plugins/arn-spark/skills/arn-spark-ensure-config/scripts/cache-check.sh +127 -0
- package/plugins/arn-spark/skills/arn-spark-feature-extract/SKILL.md +483 -0
- package/plugins/arn-spark/skills/arn-spark-feature-extract/references/feature-backlog-template.md +176 -0
- package/plugins/arn-spark/skills/arn-spark-feature-extract/references/feature-entry-template.md +209 -0
- package/plugins/arn-spark/skills/arn-spark-help/SKILL.md +149 -0
- package/plugins/arn-spark/skills/arn-spark-help/references/pipeline-map.md +211 -0
- package/plugins/arn-spark/skills/arn-spark-init/SKILL.md +312 -0
- package/plugins/arn-spark/skills/arn-spark-init/references/agent-models-presets/all-opus.md +23 -0
- package/plugins/arn-spark/skills/arn-spark-init/references/agent-models-presets/balanced.md +23 -0
- package/plugins/arn-spark/skills/arn-spark-init/references/bkt-setup.md +55 -0
- package/plugins/arn-spark/skills/arn-spark-init/references/jira-mcp-setup.md +61 -0
- package/plugins/arn-spark/skills/arn-spark-init/references/platform-labels.md +97 -0
- package/plugins/arn-spark/skills/arn-spark-naming/SKILL.md +275 -0
- package/plugins/arn-spark/skills/arn-spark-naming/references/creative-brief-template.md +146 -0
- package/plugins/arn-spark/skills/arn-spark-naming/references/naming-methodology.md +237 -0
- package/plugins/arn-spark/skills/arn-spark-naming/references/naming-report-template.md +122 -0
- package/plugins/arn-spark/skills/arn-spark-naming/references/trademark-databases.md +88 -0
- package/plugins/arn-spark/skills/arn-spark-naming/references/whois-server-map.md +164 -0
- package/plugins/arn-spark/skills/arn-spark-naming/scripts/whois-check.js +502 -0
- package/plugins/arn-spark/skills/arn-spark-naming/scripts/whois-check.py +533 -0
- package/plugins/arn-spark/skills/arn-spark-prototype-lock/SKILL.md +260 -0
- package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/lock-report-template.md +68 -0
- package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/pretooluse-hook-template.json +35 -0
- package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/prototype-guardrail-rules.md +38 -0
- package/plugins/arn-spark/skills/arn-spark-report/SKILL.md +144 -0
- package/plugins/arn-spark/skills/arn-spark-report/references/issue-template.md +81 -0
- package/plugins/arn-spark/skills/arn-spark-report/references/spark-knowledge-base.md +293 -0
- package/plugins/arn-spark/skills/arn-spark-scaffold/SKILL.md +239 -0
- package/plugins/arn-spark/skills/arn-spark-scaffold/references/scaffold-checklist.md +79 -0
- package/plugins/arn-spark/skills/arn-spark-scaffold/references/scaffold-summary-template.md +74 -0
- package/plugins/arn-spark/skills/arn-spark-spike/SKILL.md +209 -0
- package/plugins/arn-spark/skills/arn-spark-spike/references/spike-report-template.md +123 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype/SKILL.md +362 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype/references/review-report-template.md +65 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype/references/showcase-capture-guide.md +153 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype/references/static-prototype-criteria.md +54 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/SKILL.md +518 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/debate-protocol.md +230 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/debate-review-report-template.md +148 -0
- package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/expert-visual-review-template.md +130 -0
- package/plugins/arn-spark/skills/arn-spark-stress-competitive/SKILL.md +166 -0
- package/plugins/arn-spark/skills/arn-spark-stress-competitive/references/competitive-report-template.md +139 -0
- package/plugins/arn-spark/skills/arn-spark-stress-competitive/references/gap-analysis-framework.md +111 -0
- package/plugins/arn-spark/skills/arn-spark-stress-interview/SKILL.md +257 -0
- package/plugins/arn-spark/skills/arn-spark-stress-interview/references/interview-protocol.md +140 -0
- package/plugins/arn-spark/skills/arn-spark-stress-interview/references/interview-report-template.md +165 -0
- package/plugins/arn-spark/skills/arn-spark-stress-interview/references/persona-casting-spec.md +138 -0
- package/plugins/arn-spark/skills/arn-spark-stress-premortem/SKILL.md +181 -0
- package/plugins/arn-spark/skills/arn-spark-stress-premortem/references/premortem-protocol.md +112 -0
- package/plugins/arn-spark/skills/arn-spark-stress-premortem/references/premortem-report-template.md +158 -0
- package/plugins/arn-spark/skills/arn-spark-stress-prfaq/SKILL.md +206 -0
- package/plugins/arn-spark/skills/arn-spark-stress-prfaq/references/prfaq-report-template.md +139 -0
- package/plugins/arn-spark/skills/arn-spark-stress-prfaq/references/prfaq-workflow.md +118 -0
- package/plugins/arn-spark/skills/arn-spark-style-explore/SKILL.md +281 -0
- package/plugins/arn-spark/skills/arn-spark-style-explore/references/style-brief-template.md +198 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases/SKILL.md +359 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases/references/expert-review-template.md +94 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases/references/review-protocol.md +150 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases/references/use-case-index-template.md +108 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases/references/use-case-template.md +125 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases-teams/SKILL.md +306 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases-teams/references/debate-protocol.md +272 -0
- package/plugins/arn-spark/skills/arn-spark-use-cases-teams/references/review-report-template.md +112 -0
- package/plugins/arn-spark/skills/arn-spark-visual-readiness/SKILL.md +293 -0
- package/plugins/arn-spark/skills/arn-spark-visual-readiness/references/readiness-checklist.md +196 -0
- package/plugins/arn-spark/skills/arn-spark-visual-sketch/SKILL.md +376 -0
- package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/aesthetic-philosophy.md +210 -0
- package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/sketch-gallery-guide.md +282 -0
- package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/visual-direction-template.md +174 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/SKILL.md +447 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/baseline-capture-script-template.js +89 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/journey-schema.md +375 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/spike-checklist.md +122 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/strategy-layers-guide.md +132 -0
- package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/visual-strategy-template.md +141 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arn-spark-visual-readiness
|
|
3
|
+
description: >-
|
|
4
|
+
This skill should be used when the user says "visual readiness",
|
|
5
|
+
"check visual layers", "activate visual layer", "visual checkpoint",
|
|
6
|
+
"promote visual testing", "enable layer 2", "visual test health",
|
|
7
|
+
"check deferred layers", "activate deferred layers", "layer promotion",
|
|
8
|
+
or wants to validate and activate deferred visual testing layers
|
|
9
|
+
after project milestones.
|
|
10
|
+
version: 1.0.0
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Arness Visual Readiness
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
17
|
+
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.
|
|
18
|
+
|
|
19
|
+
The primary artifacts are:
|
|
20
|
+
- **Updated arness.md** -- deferred layers promoted to active with validation evidence
|
|
21
|
+
- **Updated strategy document** -- validation results appended per layer
|
|
22
|
+
- **Readiness report** -- layer status table with evidence and recommendations
|
|
23
|
+
|
|
24
|
+
**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.
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
Read the project's `arness.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.
|
|
29
|
+
|
|
30
|
+
Extract:
|
|
31
|
+
- **Plans directory**
|
|
32
|
+
- **Vision directory** (default: `.arness/vision`)
|
|
33
|
+
- **Spikes directory** (default: `.arness/spikes`) -- for validation spike workspaces
|
|
34
|
+
- **Git** / **Platform**
|
|
35
|
+
|
|
36
|
+
Check for `### Visual Testing` subsection:
|
|
37
|
+
1. If found: parse all fields (see Step 1 for details)
|
|
38
|
+
2. If NOT found: "No visual testing configuration found in arness.md. Run `/arn-spark-visual-strategy` first to set up your visual testing strategy." Exit.
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
### Step 1: Load Visual Testing Config
|
|
43
|
+
|
|
44
|
+
Read arness.md `### Visual Testing` section.
|
|
45
|
+
|
|
46
|
+
**Parse top-level fields as Layer 1 config (always active):**
|
|
47
|
+
- **Strategy doc:** path to the visual strategy document
|
|
48
|
+
- **Baseline directory:** path to baseline images
|
|
49
|
+
- **Capture script:** path to the capture script
|
|
50
|
+
- **Compare script:** path to the comparison script
|
|
51
|
+
- **Layers:** comma-separated list of layer names
|
|
52
|
+
- **Diff threshold:** pixel difference tolerance percentage
|
|
53
|
+
- **Integration:** manual / npm-script / ci / arness-pipeline
|
|
54
|
+
|
|
55
|
+
**Scan for `#### Layer N:` subsections.** For each subsection, extract per-layer fields:
|
|
56
|
+
- **Status:** active / deferred
|
|
57
|
+
- **Capture script:** path to the layer's capture script
|
|
58
|
+
- **Compare script:** path to the layer's comparison script
|
|
59
|
+
- **Baseline directory:** path to the layer's baselines
|
|
60
|
+
- **Diff threshold:** layer-specific threshold (or inherit top-level)
|
|
61
|
+
- **Requires dev server:** yes / no
|
|
62
|
+
- **Activation criteria:** free-text description of what must be true to activate
|
|
63
|
+
- **Environment:** target platform/OS for this layer
|
|
64
|
+
- **Spike result:** previous spike outcome (Validated / Partially validated / Failed / Deferred)
|
|
65
|
+
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
**If no `### Visual Testing` found:** suggest `/arn-spark-visual-strategy` and exit.
|
|
69
|
+
|
|
70
|
+
**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.
|
|
71
|
+
|
|
72
|
+
### Step 2: Validate Active Layers
|
|
73
|
+
|
|
74
|
+
For each active layer, verify the existing pipeline still works:
|
|
75
|
+
|
|
76
|
+
1. Run the layer's capture script against the development build (or prototype if dev build unavailable)
|
|
77
|
+
2. Run the layer's compare script against the baselines
|
|
78
|
+
3. Check baseline counts against the screen manifest (if `baseline-manifest.json` exists)
|
|
79
|
+
4. Report newly capturable screens that lack baselines (screens added since last baseline update)
|
|
80
|
+
|
|
81
|
+
Present results per active layer:
|
|
82
|
+
|
|
83
|
+
"**Layer [N] ([Name]) -- Active:**
|
|
84
|
+
- Capture: [PASS / FAIL] -- [N] screens captured
|
|
85
|
+
- Compare: [PASS / FAIL] -- [N] screens compared, [M] within threshold
|
|
86
|
+
- Baselines: [N] baselines / [M] screens in manifest ([coverage]%)
|
|
87
|
+
- New screens without baselines: [list or 'none']"
|
|
88
|
+
|
|
89
|
+
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.
|
|
90
|
+
|
|
91
|
+
### Step 3: Check Activation Criteria
|
|
92
|
+
|
|
93
|
+
Read the readiness checklist:
|
|
94
|
+
> Read `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-readiness/references/readiness-checklist.md`
|
|
95
|
+
|
|
96
|
+
For each deferred layer:
|
|
97
|
+
|
|
98
|
+
1. Read the layer's `**Activation criteria:**` field from arness.md
|
|
99
|
+
2. Match the criteria text against the common patterns in the readiness checklist (Build Success, Platform Access, Tool Availability, CI Configuration)
|
|
100
|
+
3. Execute the concrete checks for each matching pattern:
|
|
101
|
+
- Run commands to verify tool availability (`which [tool]`, `[tool] --version`)
|
|
102
|
+
- Check for build artifacts at expected paths
|
|
103
|
+
- Test file transfer mechanisms for cross-environment layers
|
|
104
|
+
- Verify CI workflow configuration if relevant
|
|
105
|
+
4. Collect evidence for each check
|
|
106
|
+
5. **Journey upgrade check** — If the layer has `**Interaction:** static` or no `**Interaction:**` field:
|
|
107
|
+
- Run the UIA Availability readiness pattern (Pattern 6 from readiness-checklist.md)
|
|
108
|
+
- Run the Journey Runner readiness pattern (Pattern 7 from readiness-checklist.md) — skip if no runner exists yet
|
|
109
|
+
- On macOS: run the Accessibility Permissions pattern (Pattern 8 from readiness-checklist.md)
|
|
110
|
+
- If UIA Availability passes (automation framework available, accessibility tree inspectable):
|
|
111
|
+
|
|
112
|
+
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."
|
|
113
|
+
|
|
114
|
+
Ask the user:
|
|
115
|
+
|
|
116
|
+
**"Would you like to upgrade to journey interaction mode?"**
|
|
117
|
+
|
|
118
|
+
Options:
|
|
119
|
+
1. **Yes** — Upgrade to journey-based interaction testing
|
|
120
|
+
2. **No** — Keep static screenshot capture
|
|
121
|
+
|
|
122
|
+
- Record the user's choice. If yes, mark the layer for journey upgrade in Step 5.
|
|
123
|
+
- If UIA Availability fails, do not suggest the upgrade — static mode remains appropriate.
|
|
124
|
+
|
|
125
|
+
Present status per layer:
|
|
126
|
+
|
|
127
|
+
"**Layer [N] ([Name]):** Criteria '[activation criteria text]'
|
|
128
|
+
- [Check 1]: [PASS / FAIL] -- [evidence]
|
|
129
|
+
- [Check 2]: [PASS / FAIL] -- [evidence]
|
|
130
|
+
- **Overall: [MET / NOT MET]**"
|
|
131
|
+
|
|
132
|
+
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.
|
|
133
|
+
|
|
134
|
+
### Step 4: Validate Deferred Layers
|
|
135
|
+
|
|
136
|
+
For each deferred layer whose activation criteria are met:
|
|
137
|
+
|
|
138
|
+
**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.
|
|
139
|
+
|
|
140
|
+
For each qualifying layer:
|
|
141
|
+
|
|
142
|
+
1. Read the spike checklist:
|
|
143
|
+
> Read `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-strategy/references/spike-checklist.md`
|
|
144
|
+
|
|
145
|
+
2. Determine the spike workspace: `[spikes-dir]/visual-readiness-spike-layer-[N]/`
|
|
146
|
+
|
|
147
|
+
3. Invoke the `arn-spark-visual-test-engineer` agent via the Task tool (foreground, not background), passing the model from `.arness/agent-models/spark.md` as the `model` parameter (see `plugins/arn-spark/skills/arn-spark-ensure-config/references/ensure-config.md` "Dispatch convention" for fallback). Context:
|
|
148
|
+
- Layer specification (name, capture approach, environment, scripts)
|
|
149
|
+
- Stack details from the strategy document
|
|
150
|
+
- Environment constraints
|
|
151
|
+
- Dev server URL or build path
|
|
152
|
+
- Spike workspace path
|
|
153
|
+
- Baseline screenshots for comparison (if available)
|
|
154
|
+
- Spike checklist criteria for the specific layer
|
|
155
|
+
- Existing scripts from the deferred layer config (if any were pre-created during `arn-spark-visual-strategy`)
|
|
156
|
+
|
|
157
|
+
4. Wait for the agent to complete fully before proceeding to the next layer.
|
|
158
|
+
|
|
159
|
+
5. Present results using the same classification as `arn-spark-visual-strategy`:
|
|
160
|
+
- **Validated:** "Layer [N] works. [Evidence: captured screenshots match baselines within threshold.]"
|
|
161
|
+
- **Partially validated:** "Layer [N] works with caveats. [Evidence + caveats, e.g., anti-aliasing noise above expected threshold.]"
|
|
162
|
+
- **Failed:** "Layer [N] does not work in this environment. [Evidence + reason.] Should I investigate an alternative approach?"
|
|
163
|
+
- **Deferred:** "Layer [N] still cannot be tested here. [Required environment + instructions.] Leaving as deferred."
|
|
164
|
+
|
|
165
|
+
6. Proceed to the next layer only after presenting results.
|
|
166
|
+
|
|
167
|
+
### Step 5: Promote Layers
|
|
168
|
+
|
|
169
|
+
For each deferred layer that was partially validated, ask before promoting:
|
|
170
|
+
|
|
171
|
+
Ask the user:
|
|
172
|
+
|
|
173
|
+
> **Layer [N] ([Name]) validated with caveats: [caveats]. Promote to active?**
|
|
174
|
+
> 1. **Yes** — Promote to active with caveats noted
|
|
175
|
+
> 2. **No** — Leave as deferred
|
|
176
|
+
|
|
177
|
+
For each deferred layer that was validated (Validated or user-approved Partially validated):
|
|
178
|
+
|
|
179
|
+
1. Update arness.md `#### Layer N:` subsection:
|
|
180
|
+
- Change `**Status:** deferred` to `**Status:** active`
|
|
181
|
+
- Add `**Validated:** [YYYY-MM-DD]` with today's date
|
|
182
|
+
- Update `**Spike result:**` with the validation evidence summary
|
|
183
|
+
|
|
184
|
+
2. For layers that failed validation: leave as `**Status:** deferred`, report the reason.
|
|
185
|
+
|
|
186
|
+
3. **Journey upgrade** — If the user accepted the journey upgrade suggestion in Step 3:
|
|
187
|
+
a. Update the layer's `**Interaction:**` field from `static` to `journey` in arness.md
|
|
188
|
+
b. Add `**Journey manifest:**` field with path `<baselines-dir>/layer-2/journey-manifest.json`
|
|
189
|
+
c. Add `**Journey runner:**` field with path `scripts/journey-runner.<ext>` (`.ps1` for Windows, `.swift` or `.applescript` for macOS)
|
|
190
|
+
d. Invoke the `arn-spark-visual-test-engineer` agent via the Task tool, passing the model from `.arness/agent-models/spark.md` as the `model` parameter (see `plugins/arn-spark/skills/arn-spark-ensure-config/references/ensure-config.md` "Dispatch convention" for fallback). Context:
|
|
191
|
+
- Journey schema reference: `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-strategy/references/journey-schema.md`
|
|
192
|
+
- Journey manifest output path: the path from step (b)
|
|
193
|
+
- Target platform: detected from the layer's `**Environment:**` field
|
|
194
|
+
- Accessibility tree hints: any automation IDs discovered during the UIA Availability check
|
|
195
|
+
e. Wait for the agent to generate the journey manifest and runner script
|
|
196
|
+
f. Run the Journey Runner readiness pattern to validate the generated artifacts
|
|
197
|
+
g. Update `**Spike result:**` to include journey validation evidence
|
|
198
|
+
|
|
199
|
+
4. For layers that remained deferred (criteria not met): leave unchanged, report which criteria were not met.
|
|
200
|
+
|
|
201
|
+
Present the changes:
|
|
202
|
+
|
|
203
|
+
"**arness.md updated:**
|
|
204
|
+
- Layer [N] ([Name]): deferred -> **active** (validated [date])
|
|
205
|
+
- Layer [M] ([Name]): remains **deferred** (reason: [criteria not met / validation failed])"
|
|
206
|
+
|
|
207
|
+
### Step 6: Update Strategy Document
|
|
208
|
+
|
|
209
|
+
Read the strategy document path from the `**Strategy doc:**` field in `### Visual Testing`.
|
|
210
|
+
|
|
211
|
+
1. Read the strategy document
|
|
212
|
+
2. For each layer that was validated in this session:
|
|
213
|
+
- Find the `### Layer N:` section in the strategy document
|
|
214
|
+
- Update the spike result with new validation evidence
|
|
215
|
+
- Add a `#### Readiness Check ([date])` subsection documenting:
|
|
216
|
+
- Activation criteria evaluation results
|
|
217
|
+
- Spike validation results
|
|
218
|
+
- Status change (deferred -> active, or still deferred with reason)
|
|
219
|
+
3. Write the updated strategy document
|
|
220
|
+
|
|
221
|
+
If the strategy document is not found at the configured path: warn and skip this step. Proceed with remaining steps.
|
|
222
|
+
|
|
223
|
+
### Step 7: Update .gitignore
|
|
224
|
+
|
|
225
|
+
Check if Git is configured (from `## Arness` config or by checking for `.git/`). If not configured, skip this step silently.
|
|
226
|
+
|
|
227
|
+
If Git is configured and newly activated layers produce output directories:
|
|
228
|
+
|
|
229
|
+
1. Inventory directories referenced by the newly activated layers (captures, diffs, spike workspaces)
|
|
230
|
+
2. Classify each path as **ephemeral** (regenerated on every run, machine-specific) or **shared** (baselines, scripts, manifests)
|
|
231
|
+
3. Read the project's `.gitignore` and check which paths are already covered
|
|
232
|
+
4. Present the classification to the user:
|
|
233
|
+
|
|
234
|
+
"The newly activated layer(s) reference these paths:
|
|
235
|
+
|
|
236
|
+
| Path | Type | Recommendation | Currently in .gitignore |
|
|
237
|
+
|------|------|----------------|------------------------|
|
|
238
|
+
| [path] | [ephemeral / shared] | [ignore / track] | [yes / no] |
|
|
239
|
+
| ... | ... | ... | ... |
|
|
240
|
+
|
|
241
|
+
Ask the user:
|
|
242
|
+
|
|
243
|
+
> **Proceed with these .gitignore recommendations?**
|
|
244
|
+
> 1. **Yes** — Apply the recommendations
|
|
245
|
+
> 2. **Adjust** — Let me specify which paths to change"
|
|
246
|
+
|
|
247
|
+
5. Wait for user confirmation or adjustments. If **Adjust**, collect changes as free-form text.
|
|
248
|
+
6. Add confirmed paths to `.gitignore` under a `# Visual testing -- Layer [N]` comment block
|
|
249
|
+
|
|
250
|
+
### Step 8: Summary
|
|
251
|
+
|
|
252
|
+
Present the readiness report:
|
|
253
|
+
|
|
254
|
+
"**Visual Readiness Report**
|
|
255
|
+
|
|
256
|
+
**Layer Status:**
|
|
257
|
+
|
|
258
|
+
| Layer | Name | Previous Status | Current Status | Evidence |
|
|
259
|
+
|-------|------|----------------|----------------|----------|
|
|
260
|
+
| 1 | [Name] | active | active | [capture/compare health] |
|
|
261
|
+
| 2 | [Name] | deferred | [active/deferred] | [validation result or criteria status] |
|
|
262
|
+
| ... | ... | ... | ... | ... |
|
|
263
|
+
|
|
264
|
+
**Screen Coverage:**
|
|
265
|
+
- Screen manifest: [N] screens
|
|
266
|
+
- Layer 1: [N] capturable / [M] baselined
|
|
267
|
+
- Layer 2: [N] capturable / [M] baselined (if newly active)
|
|
268
|
+
|
|
269
|
+
**Recommendations:**
|
|
270
|
+
- [Action items based on results, e.g., 'Update Layer 1 baselines for 3 new screens', 'Re-evaluate Layer 2 after Windows CI runner is configured']
|
|
271
|
+
|
|
272
|
+
Run `/arn-code-review-implementation` to execute a full multi-layer quality check with all active layers."
|
|
273
|
+
|
|
274
|
+
## Agent Invocation Guide
|
|
275
|
+
|
|
276
|
+
| Situation | Action |
|
|
277
|
+
|-----------|--------|
|
|
278
|
+
| 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. |
|
|
279
|
+
| 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). |
|
|
280
|
+
| User asks about initial visual setup | Defer: "Initial visual testing setup is handled by `/arn-spark-visual-strategy`." |
|
|
281
|
+
| User asks about quality gate | Defer: "The multi-layer quality gate runs during `/arn-code-review-implementation`." |
|
|
282
|
+
| User asks about specific layer tooling | Discuss and invoke `arn-spark-tech-evaluator` if a deep comparison is needed. |
|
|
283
|
+
| Cross-environment validation deferred | Record the deferral with instructions. Leave layer as deferred with updated evidence. |
|
|
284
|
+
|
|
285
|
+
## Error Handling
|
|
286
|
+
|
|
287
|
+
- **No `### Visual Testing` in arness.md** -- suggest running `/arn-spark-visual-strategy` first to set up visual testing. Exit without further action.
|
|
288
|
+
- **No deferred layers** -- report all layers active, present a summary table, suggest `/arn-code-review-implementation` for a full multi-layer quality check. Exit.
|
|
289
|
+
- **Spike validation fails** -- leave the layer as deferred, record the failure reason and evidence. Suggest manual investigation or alternative approaches.
|
|
290
|
+
- **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).
|
|
291
|
+
- **Criteria ambiguous** -- ask the user for explicit confirmation rather than assuming. Present the evidence collected and let the user decide.
|
|
292
|
+
- **Strategy document not found at configured path** -- warn and skip Step 6. Proceed with remaining steps (arness.md update, gitignore, summary).
|
|
293
|
+
- **Build command fails during validation** -- record the failure evidence (exit code, error output). Leave the layer as deferred. Report the build error and suggest investigating the build pipeline.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# Visual Readiness Checklist
|
|
2
|
+
|
|
3
|
+
Evaluation guide used by `arn-spark-visual-readiness` during Step 3 (Check Activation Criteria). The skill reads this checklist and matches each deferred layer's activation criteria text against the common patterns below, then executes the concrete checks to collect evidence for promotion decisions.
|
|
4
|
+
|
|
5
|
+
## Common Activation Criteria Patterns
|
|
6
|
+
|
|
7
|
+
### Build Success
|
|
8
|
+
|
|
9
|
+
Use when the activation criteria mention building, compiling, packaging, or producing an executable.
|
|
10
|
+
|
|
11
|
+
- [ ] Build command completes without errors (exit code 0)
|
|
12
|
+
- [ ] Build output exists at the expected path
|
|
13
|
+
- [ ] Build output is executable or launchable
|
|
14
|
+
- [ ] Build output version matches the current project version (if applicable)
|
|
15
|
+
|
|
16
|
+
**How to check:**
|
|
17
|
+
1. Run the project's build command from the project root (e.g., `npm run build`, `cargo build --release`, `npm run tauri build`)
|
|
18
|
+
2. Verify exit code is 0
|
|
19
|
+
3. Check for build output at the expected path (e.g., `ls -la dist/`, `ls -la target/release/`)
|
|
20
|
+
4. Attempt to launch the built artifact briefly to confirm it starts (if safe to do so)
|
|
21
|
+
|
|
22
|
+
**Evidence to collect:** Build command output (last 20 lines), build output file path and size, launch confirmation (if tested).
|
|
23
|
+
|
|
24
|
+
### Platform Access
|
|
25
|
+
|
|
26
|
+
Use when the activation criteria mention a specific OS, cross-platform file access, WSL2-to-Windows, or running on a target machine.
|
|
27
|
+
|
|
28
|
+
- [ ] Target OS is accessible from the development environment
|
|
29
|
+
- [ ] File transfer mechanism works (e.g., WSL2 <-> Windows via `/mnt/c/`, SSH/SCP to remote machine)
|
|
30
|
+
- [ ] Required tools are installed on the target platform
|
|
31
|
+
- [ ] Network connectivity exists between environments (if needed for dev server access)
|
|
32
|
+
|
|
33
|
+
**How to check:**
|
|
34
|
+
1. Test file write to the cross-platform path (e.g., `touch /mnt/c/temp/visual-test-probe && rm /mnt/c/temp/visual-test-probe`)
|
|
35
|
+
2. Verify target platform tool availability (e.g., run `powershell.exe -Command "Get-Command nircmd"` from WSL2)
|
|
36
|
+
3. If remote: test SSH connection and file transfer round-trip
|
|
37
|
+
4. If network: test connectivity to dev server from the target environment
|
|
38
|
+
|
|
39
|
+
**Evidence to collect:** File transfer test output, tool version output from target platform, connectivity test results.
|
|
40
|
+
|
|
41
|
+
### Tool Availability
|
|
42
|
+
|
|
43
|
+
Use when the activation criteria mention specific screenshot tools, image comparison libraries, browsers, or runtimes.
|
|
44
|
+
|
|
45
|
+
- [ ] Screenshot capture tool is installed and accessible
|
|
46
|
+
- [ ] Image comparison library is installed
|
|
47
|
+
- [ ] Required browser or runtime is available
|
|
48
|
+
- [ ] Tool version meets minimum requirements (if specified)
|
|
49
|
+
|
|
50
|
+
**How to check:**
|
|
51
|
+
1. Run `which [tool]` or `[tool] --version` for each required tool
|
|
52
|
+
2. For Node.js tools: check `npx [tool] --version` or verify in `node_modules/`
|
|
53
|
+
3. For system tools: check the system package manager or standard install paths
|
|
54
|
+
4. For browsers: verify Playwright browsers are installed (`npx playwright install --dry-run`)
|
|
55
|
+
|
|
56
|
+
**Evidence to collect:** Version output from each tool, install path, any version warnings.
|
|
57
|
+
|
|
58
|
+
### CI Configuration
|
|
59
|
+
|
|
60
|
+
Use when the activation criteria mention CI pipelines, GitHub Actions runners, or automated visual test execution.
|
|
61
|
+
|
|
62
|
+
- [ ] CI workflow file exists at the expected path (e.g., `.github/workflows/visual-tests.yml`)
|
|
63
|
+
- [ ] OS matrix includes the required platform for this layer
|
|
64
|
+
- [ ] Visual test step is defined in the workflow
|
|
65
|
+
- [ ] Required secrets or environment variables are configured (if applicable)
|
|
66
|
+
|
|
67
|
+
**How to check:**
|
|
68
|
+
1. Read the CI workflow file and verify it contains the visual test job
|
|
69
|
+
2. Check the `runs-on` field for the required OS (e.g., `windows-latest` for native Windows capture)
|
|
70
|
+
3. Verify the visual test step references the correct scripts
|
|
71
|
+
4. Check for required environment variables in the workflow
|
|
72
|
+
|
|
73
|
+
**Evidence to collect:** Workflow file path, relevant job/step configuration, OS matrix values.
|
|
74
|
+
|
|
75
|
+
### Dev Server Availability
|
|
76
|
+
|
|
77
|
+
Use when the activation criteria mention a running development server, hot-reload, or local URL access from the capture environment.
|
|
78
|
+
|
|
79
|
+
- [ ] Dev server starts successfully
|
|
80
|
+
- [ ] Dev server is accessible from the capture environment
|
|
81
|
+
- [ ] Dev server serves the expected content (not an error page)
|
|
82
|
+
- [ ] Dev server port is not conflicting with other services
|
|
83
|
+
|
|
84
|
+
**How to check:**
|
|
85
|
+
1. Start the dev server (e.g., `npm run dev`)
|
|
86
|
+
2. Verify it responds at the expected URL (e.g., `curl -s -o /dev/null -w "%{http_code}" http://localhost:5173`)
|
|
87
|
+
3. If cross-environment: verify the URL is accessible from the target platform
|
|
88
|
+
4. Check for port conflicts before starting
|
|
89
|
+
|
|
90
|
+
**Evidence to collect:** Dev server start output, HTTP response code, content verification.
|
|
91
|
+
|
|
92
|
+
### UIA Availability
|
|
93
|
+
|
|
94
|
+
Use when the activation criteria mention UI automation, accessibility APIs, UIA, NSAccessibility, interaction testing, or native element inspection.
|
|
95
|
+
|
|
96
|
+
- [ ] Platform automation framework loads (Windows: `Add-Type -AssemblyName UIAutomationClient` succeeds in PowerShell; macOS: `osascript -e 'tell application "System Events" to get name of first process'` succeeds)
|
|
97
|
+
- [ ] Accessibility tree is inspectable -- can enumerate top-level UI elements of a running application
|
|
98
|
+
- [ ] Target application exposes automation IDs on key interactive elements (buttons, inputs, menus, navigation)
|
|
99
|
+
|
|
100
|
+
**How to check:**
|
|
101
|
+
1. Windows: run `powershell.exe -Command "Add-Type -AssemblyName UIAutomationClient; [System.Windows.Automation.AutomationElement]::RootElement.GetRuntimeId()"` and verify it succeeds
|
|
102
|
+
2. macOS: run `osascript -e 'tell application "System Events" to get name of first process'` and verify it returns a process name
|
|
103
|
+
3. Launch the target application and inspect its accessibility tree (Windows: `Inspect.exe` or `FlaUI`; macOS: Accessibility Inspector in Xcode)
|
|
104
|
+
4. Verify that key interactive elements have non-empty automation IDs or accessibility identifiers
|
|
105
|
+
|
|
106
|
+
**Evidence to collect:** Automation framework load output, list of discovered automation IDs for the target application, accessibility tree depth (number of levels inspected).
|
|
107
|
+
|
|
108
|
+
### Journey Runner
|
|
109
|
+
|
|
110
|
+
Use when the activation criteria mention journey execution, journey runner, journey manifest, interaction test runner, or step-based capture.
|
|
111
|
+
|
|
112
|
+
- [ ] Runner script exists at the path specified in the `**Journey runner:**` arness.md field
|
|
113
|
+
- [ ] Runner script is executable (`test -x <path>` or file extension matches expected type: `.ps1` for Windows, `.swift` or `.applescript` for macOS)
|
|
114
|
+
- [ ] `journey-manifest.json` exists at the path specified in the `**Journey manifest:**` arness.md field
|
|
115
|
+
- [ ] Manifest is valid JSON (`cat <path> | python -m json.tool` or equivalent)
|
|
116
|
+
- [ ] Manifest contains at least one journey in the `journeys` array
|
|
117
|
+
- [ ] Runner can parse the manifest in dry-run mode (runner loads manifest, resolves selectors, does not execute actions)
|
|
118
|
+
|
|
119
|
+
**How to check:**
|
|
120
|
+
1. Check runner script existence: `test -f <journey-runner-path> && echo "EXISTS" || echo "MISSING"`
|
|
121
|
+
2. Check runner script is executable: `test -x <journey-runner-path> && echo "EXECUTABLE" || echo "NOT EXECUTABLE"`
|
|
122
|
+
3. Validate manifest JSON: `cat <journey-manifest-path> | python -m json.tool > /dev/null 2>&1 && echo "VALID" || echo "INVALID"`
|
|
123
|
+
4. Count journeys in manifest: `python -c "import json; m=json.load(open('<path>')); print(len(m.get('journeys', [])))"`
|
|
124
|
+
5. Run the runner in dry-run mode: `<runner-command> --dry-run <manifest-path>` and check for errors
|
|
125
|
+
6. Verify that the dry-run output reports resolved selectors for all journey steps
|
|
126
|
+
|
|
127
|
+
**Evidence to collect:** File existence checks, JSON validation output, journey count, dry-run output showing resolved vs unresolved selectors.
|
|
128
|
+
|
|
129
|
+
### Accessibility Permissions (macOS)
|
|
130
|
+
|
|
131
|
+
Use when the activation criteria mention macOS Accessibility permissions, System Events authorization, or terminal accessibility access. This pattern applies only on macOS.
|
|
132
|
+
|
|
133
|
+
- [ ] Terminal/IDE has been granted Accessibility permission in System Preferences
|
|
134
|
+
- [ ] `osascript` accessibility queries succeed without authorization errors
|
|
135
|
+
|
|
136
|
+
**How to check:**
|
|
137
|
+
1. Run: `osascript -e 'tell application "System Events" to get properties of first UI element of first process'`
|
|
138
|
+
2. If the command fails with an authorization error (e.g., "Not authorized to send Apple events"), permissions are not granted
|
|
139
|
+
3. If the command succeeds and returns UI element properties, permissions are granted
|
|
140
|
+
|
|
141
|
+
**Evidence to collect:** osascript output (success) or error message (failure).
|
|
142
|
+
|
|
143
|
+
**User instructions for granting permission:** To grant Accessibility permission: System Preferences > Privacy & Security > Privacy > Accessibility > Add your terminal application (Terminal, iTerm2, VS Code, etc.) and enable the checkbox. You may need to restart the terminal after granting permission.
|
|
144
|
+
|
|
145
|
+
## Evidence Collection Guidelines
|
|
146
|
+
|
|
147
|
+
Evidence must be concrete and verifiable. Each check should produce one or more of:
|
|
148
|
+
|
|
149
|
+
- **Command output:** The stdout/stderr from running a verification command (truncate to relevant lines)
|
|
150
|
+
- **File existence:** Path and size of an expected artifact (`ls -la [path]`)
|
|
151
|
+
- **Version string:** Output from `[tool] --version` confirming availability
|
|
152
|
+
- **Test result:** Pass/fail from a probe command (e.g., file write round-trip, HTTP response code)
|
|
153
|
+
|
|
154
|
+
Avoid subjective evidence like "it seems to work" or "probably available." Each piece of evidence should be reproducible by running the same command again.
|
|
155
|
+
|
|
156
|
+
## Promotion Decision Tree
|
|
157
|
+
|
|
158
|
+
Follow this decision tree for each deferred layer:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
1. Are ALL activation criteria checklist items passing?
|
|
162
|
+
|
|
|
163
|
+
+-- NO --> Leave layer as DEFERRED
|
|
164
|
+
| Report which criteria failed with evidence
|
|
165
|
+
| Suggest remediation steps
|
|
166
|
+
|
|
|
167
|
+
+-- YES --> Proceed to spike validation (Step 4)
|
|
168
|
+
|
|
|
169
|
+
2. Does the spike validation pass?
|
|
170
|
+
|
|
|
171
|
+
+-- VALIDATED --> Promote to ACTIVE
|
|
172
|
+
| Update arness.md Status: active
|
|
173
|
+
| Record validation date and evidence
|
|
174
|
+
|
|
|
175
|
+
+-- PARTIALLY VALIDATED --> Present caveats to user
|
|
176
|
+
| Ask: "Promote with caveats, or leave deferred?"
|
|
177
|
+
| If user approves: Promote to ACTIVE with caveats noted
|
|
178
|
+
| If user declines: Leave as DEFERRED
|
|
179
|
+
|
|
|
180
|
+
+-- FAILED --> Leave as DEFERRED
|
|
181
|
+
| Record failure evidence
|
|
182
|
+
| Suggest investigation or alternative approach
|
|
183
|
+
|
|
|
184
|
+
+-- DEFERRED --> Leave as DEFERRED
|
|
185
|
+
Cannot validate in current environment
|
|
186
|
+
Record what is needed to validate
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Custom Criteria
|
|
190
|
+
|
|
191
|
+
If a layer's activation criteria text does not match any common pattern above, evaluate it as a custom criterion:
|
|
192
|
+
|
|
193
|
+
1. Break the criteria text into individual checkable assertions
|
|
194
|
+
2. For each assertion, determine the most direct verification method (command, file check, or user confirmation)
|
|
195
|
+
3. Execute the checks and collect evidence
|
|
196
|
+
4. If any assertion cannot be verified programmatically, ask the user for confirmation with the context of what was checked and what remains uncertain
|