@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.
Files changed (130) hide show
  1. package/.claude-plugin/plugin.json +9 -0
  2. package/.opencode/plugins/arn-spark.js +272 -0
  3. package/package.json +17 -0
  4. package/plugins/arn-spark/.claude-plugin/plugin.json +9 -0
  5. package/plugins/arn-spark/LICENSE +21 -0
  6. package/plugins/arn-spark/README.md +25 -0
  7. package/plugins/arn-spark/agents/arn-spark-brand-strategist.md +299 -0
  8. package/plugins/arn-spark/agents/arn-spark-dev-env-builder.md +228 -0
  9. package/plugins/arn-spark/agents/arn-spark-doctor.md +92 -0
  10. package/plugins/arn-spark/agents/arn-spark-forensic-investigator.md +181 -0
  11. package/plugins/arn-spark/agents/arn-spark-market-researcher.md +232 -0
  12. package/plugins/arn-spark/agents/arn-spark-marketing-pm.md +225 -0
  13. package/plugins/arn-spark/agents/arn-spark-persona-architect.md +259 -0
  14. package/plugins/arn-spark/agents/arn-spark-persona-impersonator.md +183 -0
  15. package/plugins/arn-spark/agents/arn-spark-product-strategist.md +191 -0
  16. package/plugins/arn-spark/agents/arn-spark-prototype-builder.md +497 -0
  17. package/plugins/arn-spark/agents/arn-spark-scaffolder.md +228 -0
  18. package/plugins/arn-spark/agents/arn-spark-spike-runner.md +209 -0
  19. package/plugins/arn-spark/agents/arn-spark-style-capture.md +196 -0
  20. package/plugins/arn-spark/agents/arn-spark-tech-evaluator.md +229 -0
  21. package/plugins/arn-spark/agents/arn-spark-ui-interactor.md +235 -0
  22. package/plugins/arn-spark/agents/arn-spark-use-case-writer.md +280 -0
  23. package/plugins/arn-spark/agents/arn-spark-ux-judge.md +215 -0
  24. package/plugins/arn-spark/agents/arn-spark-ux-specialist.md +200 -0
  25. package/plugins/arn-spark/agents/arn-spark-visual-sketcher.md +285 -0
  26. package/plugins/arn-spark/agents/arn-spark-visual-test-engineer.md +224 -0
  27. package/plugins/arn-spark/references/copilot-tools.md +62 -0
  28. package/plugins/arn-spark/skills/arn-brainstorming/SKILL.md +520 -0
  29. package/plugins/arn-spark/skills/arn-brainstorming/references/add-feature-flow.md +155 -0
  30. package/plugins/arn-spark/skills/arn-spark-arch-vision/SKILL.md +226 -0
  31. package/plugins/arn-spark/skills/arn-spark-arch-vision/references/architecture-vision-template.md +153 -0
  32. package/plugins/arn-spark/skills/arn-spark-arch-vision/references/technology-evaluation-guide.md +86 -0
  33. package/plugins/arn-spark/skills/arn-spark-clickable-prototype/SKILL.md +471 -0
  34. package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/clickable-prototype-criteria.md +65 -0
  35. package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/journey-template.md +62 -0
  36. package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/review-report-template.md +75 -0
  37. package/plugins/arn-spark/skills/arn-spark-clickable-prototype/references/showcase-capture-guide.md +213 -0
  38. package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/SKILL.md +642 -0
  39. package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/debate-protocol.md +242 -0
  40. package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/debate-review-report-template.md +161 -0
  41. package/plugins/arn-spark/skills/arn-spark-clickable-prototype-teams/references/expert-interaction-review-template.md +152 -0
  42. package/plugins/arn-spark/skills/arn-spark-concept-review/SKILL.md +350 -0
  43. package/plugins/arn-spark/skills/arn-spark-concept-review/references/conflict-resolution-protocol.md +145 -0
  44. package/plugins/arn-spark/skills/arn-spark-concept-review/references/review-report-template.md +185 -0
  45. package/plugins/arn-spark/skills/arn-spark-dev-setup/SKILL.md +366 -0
  46. package/plugins/arn-spark/skills/arn-spark-dev-setup/references/dev-setup-checklist.md +84 -0
  47. package/plugins/arn-spark/skills/arn-spark-dev-setup/references/dev-setup-template.md +205 -0
  48. package/plugins/arn-spark/skills/arn-spark-discover/SKILL.md +303 -0
  49. package/plugins/arn-spark/skills/arn-spark-discover/references/competitive-landscape-template.md +87 -0
  50. package/plugins/arn-spark/skills/arn-spark-discover/references/discovery-questions.md +120 -0
  51. package/plugins/arn-spark/skills/arn-spark-discover/references/persona-profile-template.md +97 -0
  52. package/plugins/arn-spark/skills/arn-spark-discover/references/product-concept-template.md +253 -0
  53. package/plugins/arn-spark/skills/arn-spark-ensure-config/SKILL.md +23 -0
  54. package/plugins/arn-spark/skills/arn-spark-ensure-config/references/ensure-config.md +388 -0
  55. package/plugins/arn-spark/skills/arn-spark-ensure-config/references/step-0-fast-path.md +25 -0
  56. package/plugins/arn-spark/skills/arn-spark-ensure-config/scripts/cache-check.sh +127 -0
  57. package/plugins/arn-spark/skills/arn-spark-feature-extract/SKILL.md +483 -0
  58. package/plugins/arn-spark/skills/arn-spark-feature-extract/references/feature-backlog-template.md +176 -0
  59. package/plugins/arn-spark/skills/arn-spark-feature-extract/references/feature-entry-template.md +209 -0
  60. package/plugins/arn-spark/skills/arn-spark-help/SKILL.md +149 -0
  61. package/plugins/arn-spark/skills/arn-spark-help/references/pipeline-map.md +211 -0
  62. package/plugins/arn-spark/skills/arn-spark-init/SKILL.md +312 -0
  63. package/plugins/arn-spark/skills/arn-spark-init/references/agent-models-presets/all-opus.md +23 -0
  64. package/plugins/arn-spark/skills/arn-spark-init/references/agent-models-presets/balanced.md +23 -0
  65. package/plugins/arn-spark/skills/arn-spark-init/references/bkt-setup.md +55 -0
  66. package/plugins/arn-spark/skills/arn-spark-init/references/jira-mcp-setup.md +61 -0
  67. package/plugins/arn-spark/skills/arn-spark-init/references/platform-labels.md +97 -0
  68. package/plugins/arn-spark/skills/arn-spark-naming/SKILL.md +275 -0
  69. package/plugins/arn-spark/skills/arn-spark-naming/references/creative-brief-template.md +146 -0
  70. package/plugins/arn-spark/skills/arn-spark-naming/references/naming-methodology.md +237 -0
  71. package/plugins/arn-spark/skills/arn-spark-naming/references/naming-report-template.md +122 -0
  72. package/plugins/arn-spark/skills/arn-spark-naming/references/trademark-databases.md +88 -0
  73. package/plugins/arn-spark/skills/arn-spark-naming/references/whois-server-map.md +164 -0
  74. package/plugins/arn-spark/skills/arn-spark-naming/scripts/whois-check.js +502 -0
  75. package/plugins/arn-spark/skills/arn-spark-naming/scripts/whois-check.py +533 -0
  76. package/plugins/arn-spark/skills/arn-spark-prototype-lock/SKILL.md +260 -0
  77. package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/lock-report-template.md +68 -0
  78. package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/pretooluse-hook-template.json +35 -0
  79. package/plugins/arn-spark/skills/arn-spark-prototype-lock/references/prototype-guardrail-rules.md +38 -0
  80. package/plugins/arn-spark/skills/arn-spark-report/SKILL.md +144 -0
  81. package/plugins/arn-spark/skills/arn-spark-report/references/issue-template.md +81 -0
  82. package/plugins/arn-spark/skills/arn-spark-report/references/spark-knowledge-base.md +293 -0
  83. package/plugins/arn-spark/skills/arn-spark-scaffold/SKILL.md +239 -0
  84. package/plugins/arn-spark/skills/arn-spark-scaffold/references/scaffold-checklist.md +79 -0
  85. package/plugins/arn-spark/skills/arn-spark-scaffold/references/scaffold-summary-template.md +74 -0
  86. package/plugins/arn-spark/skills/arn-spark-spike/SKILL.md +209 -0
  87. package/plugins/arn-spark/skills/arn-spark-spike/references/spike-report-template.md +123 -0
  88. package/plugins/arn-spark/skills/arn-spark-static-prototype/SKILL.md +362 -0
  89. package/plugins/arn-spark/skills/arn-spark-static-prototype/references/review-report-template.md +65 -0
  90. package/plugins/arn-spark/skills/arn-spark-static-prototype/references/showcase-capture-guide.md +153 -0
  91. package/plugins/arn-spark/skills/arn-spark-static-prototype/references/static-prototype-criteria.md +54 -0
  92. package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/SKILL.md +518 -0
  93. package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/debate-protocol.md +230 -0
  94. package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/debate-review-report-template.md +148 -0
  95. package/plugins/arn-spark/skills/arn-spark-static-prototype-teams/references/expert-visual-review-template.md +130 -0
  96. package/plugins/arn-spark/skills/arn-spark-stress-competitive/SKILL.md +166 -0
  97. package/plugins/arn-spark/skills/arn-spark-stress-competitive/references/competitive-report-template.md +139 -0
  98. package/plugins/arn-spark/skills/arn-spark-stress-competitive/references/gap-analysis-framework.md +111 -0
  99. package/plugins/arn-spark/skills/arn-spark-stress-interview/SKILL.md +257 -0
  100. package/plugins/arn-spark/skills/arn-spark-stress-interview/references/interview-protocol.md +140 -0
  101. package/plugins/arn-spark/skills/arn-spark-stress-interview/references/interview-report-template.md +165 -0
  102. package/plugins/arn-spark/skills/arn-spark-stress-interview/references/persona-casting-spec.md +138 -0
  103. package/plugins/arn-spark/skills/arn-spark-stress-premortem/SKILL.md +181 -0
  104. package/plugins/arn-spark/skills/arn-spark-stress-premortem/references/premortem-protocol.md +112 -0
  105. package/plugins/arn-spark/skills/arn-spark-stress-premortem/references/premortem-report-template.md +158 -0
  106. package/plugins/arn-spark/skills/arn-spark-stress-prfaq/SKILL.md +206 -0
  107. package/plugins/arn-spark/skills/arn-spark-stress-prfaq/references/prfaq-report-template.md +139 -0
  108. package/plugins/arn-spark/skills/arn-spark-stress-prfaq/references/prfaq-workflow.md +118 -0
  109. package/plugins/arn-spark/skills/arn-spark-style-explore/SKILL.md +281 -0
  110. package/plugins/arn-spark/skills/arn-spark-style-explore/references/style-brief-template.md +198 -0
  111. package/plugins/arn-spark/skills/arn-spark-use-cases/SKILL.md +359 -0
  112. package/plugins/arn-spark/skills/arn-spark-use-cases/references/expert-review-template.md +94 -0
  113. package/plugins/arn-spark/skills/arn-spark-use-cases/references/review-protocol.md +150 -0
  114. package/plugins/arn-spark/skills/arn-spark-use-cases/references/use-case-index-template.md +108 -0
  115. package/plugins/arn-spark/skills/arn-spark-use-cases/references/use-case-template.md +125 -0
  116. package/plugins/arn-spark/skills/arn-spark-use-cases-teams/SKILL.md +306 -0
  117. package/plugins/arn-spark/skills/arn-spark-use-cases-teams/references/debate-protocol.md +272 -0
  118. package/plugins/arn-spark/skills/arn-spark-use-cases-teams/references/review-report-template.md +112 -0
  119. package/plugins/arn-spark/skills/arn-spark-visual-readiness/SKILL.md +293 -0
  120. package/plugins/arn-spark/skills/arn-spark-visual-readiness/references/readiness-checklist.md +196 -0
  121. package/plugins/arn-spark/skills/arn-spark-visual-sketch/SKILL.md +376 -0
  122. package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/aesthetic-philosophy.md +210 -0
  123. package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/sketch-gallery-guide.md +282 -0
  124. package/plugins/arn-spark/skills/arn-spark-visual-sketch/references/visual-direction-template.md +174 -0
  125. package/plugins/arn-spark/skills/arn-spark-visual-strategy/SKILL.md +447 -0
  126. package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/baseline-capture-script-template.js +89 -0
  127. package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/journey-schema.md +375 -0
  128. package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/spike-checklist.md +122 -0
  129. package/plugins/arn-spark/skills/arn-spark-visual-strategy/references/strategy-layers-guide.md +132 -0
  130. 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