@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,260 @@
1
+ ---
2
+ name: arn-spark-prototype-lock
3
+ description: >-
4
+ This skill should be used when the user says "prototype lock", "lock prototype",
5
+ "arn prototype lock", "freeze prototype", "preserve prototype",
6
+ "snapshot prototype", "protect prototype", "archive prototype",
7
+ "save the prototype", "don't overwrite the prototype",
8
+ "lock the design", "freeze the design",
9
+ or wants to create a frozen snapshot of the validated prototype before
10
+ development begins, preventing production code from overwriting the
11
+ validated reference artifact.
12
+ version: 1.0.0
13
+ ---
14
+
15
+ # Arness Prototype Lock
16
+
17
+ Create a frozen, independently servable snapshot of the validated prototype before development code begins to modify shared source files. The primary artifacts are a **frozen prototype copy**, **arness.md guardrail rules** that prevent agents from modifying prototype files, an optional **PreToolUse hook** for enforcement, and a **git tag** marking the prototype completion point.
18
+
19
+ This skill addresses the problem: once development starts, production code overwrites prototype components because they share the same source files. The locked copy preserves the validated design reference for visual comparison and rollback.
20
+
21
+ ## Prerequisites
22
+
23
+ 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.
24
+
25
+ Extract:
26
+ - **Prototypes directory** (default: `.arness/prototypes`)
27
+ - **Vision directory** (default: `.arness/vision`)
28
+ - **Git** (yes/no)
29
+ - **Platform** (github/bitbucket/none)
30
+
31
+ Check for prototype validation evidence:
32
+ 1. Check for `[prototypes-dir]/clickable/final-report.md` -- if found, read it. Extract the latest version number and judge verdict.
33
+ 2. Check for `[prototypes-dir]/static/final-report.md` -- same.
34
+ 3. Check for `[prototypes-dir]/criteria.md`
35
+
36
+ **If no prototype validation evidence found:** Inform the user: "No prototype validation results found. This skill works best after `/arn-spark-clickable-prototype` or `/arn-spark-static-prototype` has validated a prototype. You can still lock any existing prototype files. What prototype source should I preserve?"
37
+
38
+ **If validation found but judge verdict was FAIL:** Warn the user: "The latest prototype version (v[N]) received a FAIL verdict from the judge. Are you sure you want to lock this version, or would you prefer to run more validation cycles first?"
39
+
40
+ Check for architecture vision to detect the stack:
41
+ 1. Read `architecture-vision.md` from the Vision directory
42
+ 2. Extract: UI framework (Svelte/SvelteKit, React/Next.js, Vue/Nuxt, etc.), application framework (Tauri, Electron, plain web), package manager
43
+
44
+ ## Workflow
45
+
46
+ ### Step 1: Inventory Prototype Artifacts
47
+
48
+ Scan the prototypes directory structure. Build an inventory:
49
+
50
+ "I found the following prototype artifacts:
51
+
52
+ **Clickable prototype:**
53
+ - Latest version: v[N] (Judge: [PASS/FAIL])
54
+ - App source: [prototypes-dir]/clickable/v[N]/app/ ([X] files, [Y] KB)
55
+ - Journey screenshots: [prototypes-dir]/clickable/v[N]/journeys/ ([Z] files)
56
+ - Showcase: [prototypes-dir]/clickable/v[N]/showcase/ ([W] files)
57
+ - Review/judge reports: [list]
58
+
59
+ **Static prototype:**
60
+ - Latest version: v[M] (Judge: [PASS/FAIL])
61
+ - Showcase: [prototypes-dir]/static/v[M]/showcase/ ([A] files)
62
+ - Review/judge reports: [list]
63
+
64
+ **Shared:**
65
+ - Criteria: [prototypes-dir]/criteria.md
66
+
67
+ **Total size:** [calculated total]
68
+
69
+ Which version should I lock? (Default: latest passing version)"
70
+
71
+ Wait for user to confirm or specify a different version before proceeding. Do not continue until the user responds.
72
+
73
+ ### Step 2: Detect Stack and Plan Copy Strategy
74
+
75
+ Read the prototype app directory and detect the framework:
76
+ - Check for `package.json` -- read for framework indicators (svelte, react, vue, next, nuxt, sveltekit)
77
+ - Check for `Cargo.toml` if Tauri
78
+ - Check for build configuration files (vite.config, next.config, svelte.config, etc.)
79
+
80
+ Determine copy strategy based on stack:
81
+
82
+ | Framework | Copy Strategy | Validation |
83
+ |-----------|--------------|------------|
84
+ | SvelteKit | Copy full app directory, exclude node_modules. Include package.json, lockfile, svelte.config, vite.config, tailwind.config, src/, static/ | `cd [dest] && [pm] install && [pm] run build` |
85
+ | Next.js | Copy full app directory, exclude node_modules and .next/. Include package.json, lockfile, next.config, tsconfig, src/, public/ | `cd [dest] && [pm] install && [pm] run build` |
86
+ | Vue/Nuxt | Copy full app directory, exclude node_modules and .nuxt/. Include package.json, lockfile, nuxt.config, src/ | `cd [dest] && [pm] install && [pm] run build` |
87
+ | Plain HTML/CSS/JS | Copy all files directly | Open index.html in browser or serve with `npx serve` |
88
+ | Tauri | Copy the webview source (follows its own framework row above). Copy src-tauri/ config only if relevant to the UI snapshot | Framework-specific build (webview only) |
89
+
90
+ Present the plan:
91
+
92
+ "**Stack detected:** [framework]
93
+
94
+ **Copy plan:**
95
+ - Source: [prototypes-dir]/clickable/v[N]/app/
96
+ - Destination: [prototypes-dir]/locked/clickable-v[N]/
97
+ - Strategy: [framework-specific description]
98
+ - Excludes: node_modules/, build output dirs (.svelte-kit/, .next/, dist/)
99
+ - Includes: lockfile (package-lock.json/pnpm-lock.yaml/yarn.lock/bun.lockb), all config, all source
100
+
101
+ Also copying:
102
+ - Validation evidence (review reports, judge reports, screenshots, showcase)
103
+ - Criteria document
104
+
105
+ Proceed?"
106
+
107
+ Wait for user confirmation.
108
+
109
+ ### Step 3: Execute Copy
110
+
111
+ 1. Create destination directory: `[prototypes-dir]/locked/clickable-v[N]/`
112
+ 2. Copy the prototype app source using `cp -r` with exclusion of `node_modules/` and framework build output directories
113
+ 3. Copy validation evidence:
114
+ - Journey screenshots from the locked version
115
+ - Showcase screenshots
116
+ - Review and judge reports for the locked version
117
+ - The `final-report.md` for each prototype type
118
+ 4. Copy `criteria.md`
119
+ 5. Read the lock report template:
120
+ > Read `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-prototype-lock/references/lock-report-template.md`
121
+ 6. Write a `LOCKED.md` manifest file at `[prototypes-dir]/locked/LOCKED.md` using the template. Populate all fields with the actual values from the copy operation.
122
+
123
+ If a static prototype exists and is validated, repeat the copy for the static prototype to `[prototypes-dir]/locked/static-v[M]/`.
124
+
125
+ ### Step 4: Validate the Snapshot
126
+
127
+ 1. `cd` into the locked copy
128
+ 2. Run dependency install using the detected package manager (npm/pnpm/yarn/bun)
129
+ 3. Run build using the framework's build command
130
+ 4. If the project has a dev server command, start it briefly and verify it responds:
131
+ - Start the dev server in the background
132
+ - Poll for readiness (check HTTP response on the expected port)
133
+ - Kill the dev server after confirming it responds
134
+ 5. Report validation result
135
+
136
+ **If validation fails:**
137
+ - Report the error
138
+ - Ask: "The locked copy does not build independently. Common causes: hard-coded paths, missing shared dependencies, monorepo imports. Should I investigate and fix, or skip validation?"
139
+ - If fixing: diagnose and fix path issues, missing deps, etc. Re-validate.
140
+ - After 3 failures: "Cannot make the locked copy build independently. The files are preserved as a reference but cannot be served standalone. Proceeding with guardrails."
141
+
142
+ Update the LOCKED.md manifest with the validation results.
143
+
144
+ ### Step 5: Ask User to Confirm Access
145
+
146
+ "The prototype snapshot is at `[path]`. Can you confirm you can access it?
147
+
148
+ If this is a web-based prototype, you can verify by running:
149
+ ```
150
+ cd [path]
151
+ [install command]
152
+ [dev server command]
153
+ ```
154
+
155
+ Then open [URL] in your browser.
156
+
157
+ Is the snapshot accessible and working?"
158
+
159
+ Wait for user confirmation. If the user reports issues, investigate.
160
+
161
+ ### Step 6: Git Tag
162
+
163
+ If Git is configured (`Git: yes`):
164
+
165
+ 1. Check for uncommitted changes: `git status --short`
166
+ 2. If uncommitted changes exist: "There are uncommitted changes. The git tag should mark a clean state. Should I commit current changes first, or tag despite uncommitted changes?"
167
+ 3. If the tag name already exists, append a sequence number: `prototype-lock-[date]-2`
168
+ 4. Create the tag: `git tag -a prototype-lock-[date] -m "Prototype locked after validation. Clickable v[N] (Judge: [verdict]). See [prototypes-dir]/locked/LOCKED.md"`
169
+ 5. Report: "Git tag `prototype-lock-[date]` created. You can return to this exact state with `git checkout prototype-lock-[date]`."
170
+
171
+ If Git is not configured: skip, note that no tag was created.
172
+
173
+ ### Step 7: Write arness.md Guardrail Rules
174
+
175
+ Read the guardrail rules template:
176
+ > Read `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-prototype-lock/references/prototype-guardrail-rules.md`
177
+
178
+ Substitute the placeholders with project-specific paths:
179
+ - `__LOCK_DATE__` -- today's date
180
+ - `__LOCK_TAG__` -- the git tag name from Step 6, or "none" if git is not configured
181
+ - `__LOCKED_DIR__` -- the locked directory path
182
+ - `__CLICKABLE_VERSION__` -- e.g., `clickable/v3/`
183
+ - `__STATIC_VERSION__` -- e.g., `static/v4/`
184
+ - `__PROTOTYPES_DIR__` -- base prototypes directory
185
+
186
+ Add the populated `### Prototype Lock` subsection to the `## Arness` section in the project's `arness.md`.
187
+
188
+ ### Step 8: Optional PreToolUse Hook
189
+
190
+ Ask the user:
191
+
192
+ Ask the user:
193
+
194
+ **"The arness.md rules instruct agents not to modify prototype files. Do you want additional enforcement?"**
195
+
196
+ Options:
197
+ 1. **Rules only** (default) — arness.md instructions are usually sufficient
198
+ 2. **Rules + hook** — Adds a PreToolUse guard script for stricter enforcement
199
+
200
+ **If the user chooses hook:**
201
+
202
+ Read the hook template:
203
+ > Read `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-prototype-lock/references/pretooluse-hook-template.json`
204
+
205
+ The hook is installed in the **target project** (not in the arn-spark plugin):
206
+
207
+ **Other AI assistants:** The guard is installed as a PreToolUse hook.
208
+ 1. Read or create `[PLATFORM_CONFIG_DIR]/settings.json` in the target project
209
+ 2. If `[PLATFORM_CONFIG_DIR]/settings.json` already exists and has PreToolUse hooks, append the prototype guard to the existing hook list. Otherwise, create the hooks configuration using the template's `hooks_config`.
210
+ 3. Adapt the guard script from the template:
211
+ - Replace `__PROTECTED_PATH_1__`, `__PROTECTED_PATH_2__`, etc. with the **relative paths** of the protected directories (relative to the project root, e.g., `.arness/prototypes/locked/`). The guard script resolves them at runtime using the `cwd` field from the hook input, so no user-specific absolute paths are committed.
212
+ 4. Write the guard script to `[PLATFORM_CONFIG_DIR]/hooks/prototype-lock-guard.sh` in the target project
213
+ 5. Make the script executable: `chmod +x [PLATFORM_CONFIG_DIR]/hooks/prototype-lock-guard.sh`
214
+
215
+ **OpenCode.ai:** Protection is automatic — the `arn-spark.js` plugin includes a `tool.execute.before` handler that reads the `#### Protected Paths` from `arness.md` at runtime and blocks Write/Edit calls targeting those paths. No additional configuration is needed.
216
+
217
+ **Note:** The hook guards Write and Edit tool calls only. Bash commands that modify the filesystem are not intercepted -- the arness.md rules (Step 7) are the primary defense for all operations including Bash.
218
+
219
+ ### Step 9: Present Summary
220
+
221
+ "Prototype locked.
222
+
223
+ **Snapshot:** [prototypes-dir]/locked/clickable-v[N]/
224
+ **Manifest:** [prototypes-dir]/locked/LOCKED.md
225
+ **Independent build:** [PASS/FAIL/SKIPPED]
226
+ **Git tag:** prototype-lock-[date] [or 'none']
227
+ **Guardrails:** arness.md rules [+ PreToolUse hook]
228
+
229
+ **Protected paths** (agents will not modify):
230
+ - [list from guardrail rules]
231
+
232
+ **arness.md updated** with `### Prototype Lock` configuration.
233
+
234
+ Recommended next steps:
235
+ 1. **Set up dev environment:** Run `/arn-spark-dev-setup` to configure the development environment
236
+ 2. **Define visual testing:** Run `/arn-spark-visual-strategy` to set up visual regression testing against the prototype
237
+ 3. **Extract features:** Run `/arn-spark-feature-extract` to build the backlog
238
+ 4. **Start developing:** If you have the Arness Code plugin installed, run `/arn-planning` to begin the development pipeline. Arness auto-configures on first use."
239
+
240
+ ## Agent Invocation Guide
241
+
242
+ | Situation | Action |
243
+ |-----------|--------|
244
+ | Copy and validate snapshot (Steps 3-4) | Execute directly in conversation via Bash and Write. No agent needed -- operations are deterministic. |
245
+ | Build validation fails with path issues | Diagnose directly. If the issue requires framework-specific knowledge, invoke `arn-spark-dev-env-builder` (foreground) for diagnosis assistance. |
246
+ | User asks about prototype quality | Reference the judge report and review reports. Do not re-run validation. |
247
+ | User wants to re-lock after more cycles | Re-run the skill. It detects the existing lock in Step 1 and offers to replace it. |
248
+ | User asks about visual testing | Defer: "Visual regression testing against the prototype is set up by `/arn-spark-visual-strategy`." |
249
+ | User asks about features | Defer: "Feature extraction is done by `/arn-spark-feature-extract`." |
250
+
251
+ ## Error Handling
252
+
253
+ - **No prototype found:** Ask user to point to the prototype source directory. Proceed without validation evidence if necessary.
254
+ - **Prototype fails to build independently:** Preserve the files as reference. Note limitation in LOCKED.md. Guardrails still protect the files.
255
+ - **Lock already exists:** "A prototype lock already exists from [date]. Replace it, or keep both? (Keeping both creates `locked/clickable-v[N]-[date2]/`)"
256
+ - **Git tag already exists:** Append a sequence number: `prototype-lock-[date]-2`
257
+ - **arness.md write fails:** Print the guardrail block for manual insertion.
258
+ - **Hook installation fails:** Proceed with arness.md rules only. Explain that rules are usually sufficient.
259
+ - **Large prototype (>100MB):** Warn the user about disk usage. Suggest adding the locked directory to `.gitignore` if it should not be committed.
260
+ - **Monorepo prototype (shares dependencies with main project):** The locked copy may need its own dependency install. Note this in the LOCKED.md manifest.
@@ -0,0 +1,68 @@
1
+ # Lock Report Template
2
+
3
+ This template defines the structure for the `LOCKED.md` manifest file written by the `arn-spark-prototype-lock` skill. The manifest is saved to `[prototypes-dir]/locked/LOCKED.md` and documents the frozen prototype snapshot.
4
+
5
+ ## Template
6
+
7
+ ```markdown
8
+ # Prototype Lock Manifest
9
+
10
+ Locked by `/arn-spark-prototype-lock` on [date].
11
+
12
+ ## Locked Versions
13
+
14
+ | Type | Version | Judge Verdict | Source | Locked Copy |
15
+ |------|---------|--------------|--------|-------------|
16
+ | [Clickable / Static] | v[N] | [PASS / FAIL / N/A] | [relative path to original] | [relative path to locked copy] |
17
+
18
+ ## Git Tag
19
+
20
+ Tag: `[tag-name]` (or "None -- Git not configured")
21
+
22
+ To return to this exact state: `git checkout [tag-name]`
23
+
24
+ ## Independent Build Validation
25
+
26
+ | Check | Result |
27
+ |-------|--------|
28
+ | Dependency install | [PASS / FAIL / SKIPPED] |
29
+ | Build | [PASS / FAIL / SKIPPED] |
30
+ | Dev server | [PASS / FAIL / SKIPPED] |
31
+
32
+ [If any checks failed: description of why and whether the snapshot is still usable as a reference]
33
+
34
+ ## Stack
35
+
36
+ - **UI framework:** [detected framework]
37
+ - **Package manager:** [npm / pnpm / yarn / bun]
38
+ - **Build tool:** [vite / webpack / turbopack / etc.]
39
+
40
+ ## How to View
41
+
42
+ ```bash
43
+ cd [locked-copy-path]
44
+ [package-manager] install
45
+ [package-manager] run dev
46
+ ```
47
+
48
+ Then open [URL, e.g., http://localhost:5173] in your browser.
49
+
50
+ ## What is Locked
51
+
52
+ The locked directory contains:
53
+ - **Prototype source code** -- all components, routes, styles, and configuration
54
+ - **Lockfile** -- exact dependency versions for reproducible builds
55
+ - **Validation evidence** -- review reports, judge reports, journey screenshots, showcase
56
+ - **Criteria document** -- agreed validation criteria
57
+
58
+ ## What is NOT Locked
59
+
60
+ - `node_modules/` -- excluded from the copy (reinstall via lockfile)
61
+ - Framework build output (`.svelte-kit/`, `.next/`, `dist/`) -- excluded (rebuild from source)
62
+ - Runtime state, caches, and temporary files
63
+
64
+ ## Protected by
65
+
66
+ - **arness.md rules:** `### Prototype Lock > #### Protected Paths` in the project's arness.md
67
+ - **PreToolUse hook:** [yes / no] -- blocks Write/Edit operations targeting locked directories
68
+ ```
@@ -0,0 +1,35 @@
1
+ {
2
+ "description": "PreToolUse hook template for prototype lock guard. The skill reads this template, substitutes project-specific protected paths, and writes the hook configuration to the target project's [PLATFORM_CONFIG_DIR]/settings.json and the guard script to [PLATFORM_CONFIG_DIR]/hooks/prototype-lock-guard.sh.",
3
+
4
+ "hooks_config": {
5
+ "hooks": {
6
+ "PreToolUse": [
7
+ {
8
+ "matcher": "Write|Edit",
9
+ "hooks": [
10
+ {
11
+ "type": "command",
12
+ "command": "bash [PLATFORM_CONFIG_DIR]/hooks/prototype-lock-guard.sh"
13
+ }
14
+ ]
15
+ }
16
+ ]
17
+ }
18
+ },
19
+
20
+ "guard_script": "#!/usr/bin/env bash\n# prototype-lock-guard.sh\n# Blocks Write/Edit operations targeting locked prototype directories.\n# Reads tool invocation JSON from stdin; outputs decision JSON to stdout.\n# Always exits 0 (hooks must not crash).\n#\n# Installed by /arn-spark-prototype-lock. See ### Prototype Lock in arness.md.\n#\n# Protected paths are RELATIVE to the project root. The script resolves\n# them at runtime using the cwd field from the hook input, so no\n# user-specific absolute paths are committed.\n#\n# JSON parsing: tries jq -> python3 -> node (first available wins).\n# If none are found, allows the operation (fail-open -- arness.md rules\n# remain the primary defense).\n\nPROTECTED_PATHS=(\n \"__PROTECTED_PATH_1__\"\n \"__PROTECTED_PATH_2__\"\n \"__PROTECTED_PATH_3__\"\n)\n\ninput=$(cat)\n\nparse_json() {\n if command -v jq >/dev/null 2>&1; then\n file_path=$(echo \"$input\" | jq -r '.tool_input.file_path // .tool_input.filePath // \"\"')\n cwd=$(echo \"$input\" | jq -r '.cwd // \"\"')\n elif command -v python3 >/dev/null 2>&1; then\n eval \"$(echo \"$input\" | python3 -c \"\nimport sys, json\ntry:\n d = json.load(sys.stdin)\n ti = d.get('tool_input', {})\n fp = ti.get('file_path', '') or ti.get('filePath', '')\n cwd = d.get('cwd', '')\n print(f'file_path={chr(34)}{fp}{chr(34)}')\n print(f'cwd={chr(34)}{cwd}{chr(34)}')\nexcept:\n print('file_path={0}{0}'.format(chr(34)))\n print('cwd={0}{0}'.format(chr(34)))\n\" 2>/dev/null)\"\n elif command -v node >/dev/null 2>&1; then\n eval \"$(echo \"$input\" | node -e \"\nlet d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{\ntry{const j=JSON.parse(d);const ti=j.tool_input||{};\nconsole.log('file_path=\\\"'+(ti.file_path||ti.filePath||'')+'\\\"');\nconsole.log('cwd=\\\"'+(j.cwd||'')+'\\\"');\n}catch(e){console.log('file_path=\\\"\\\"');console.log('cwd=\\\"\\\"');}\n});\" 2>/dev/null)\"\n else\n file_path=\"\"\n cwd=\"\"\n fi\n}\n\nparse_json\n\nif [ -z \"$file_path\" ]; then\n echo '{}'\n exit 0\nfi\n\nfor protected in \"${PROTECTED_PATHS[@]}\"; do\n resolved=\"${cwd}/${protected}\"\n if [[ \"$file_path\" == \"$resolved\"* ]]; then\n echo '{\"decision\":\"block\",\"reason\":\"This file is in the locked prototype directory. Prototype files are read-only reference artifacts. See ### Prototype Lock in arness.md.\"}'\n exit 0\n fi\ndone\n\necho '{}'\nexit 0",
21
+
22
+ "installation_notes": [
23
+ "The guard script and hook config are written to the TARGET PROJECT, not the arn-spark plugin.",
24
+ "Protected paths are RELATIVE to the project root (e.g., '.arness/prototypes/locked/'). The script resolves them at runtime using the cwd field from the hook input JSON, so no user-specific absolute paths are committed.",
25
+ "JSON parsing uses a fallback chain: jq (preferred, used in AI assistant documentation) -> python3 -> node. If none are available, the hook allows the operation (fail-open) and arness.md rules serve as the primary defense.",
26
+ "The script reads JSON from stdin (tool invocation), extracts file_path and cwd, resolves relative protected paths against cwd, and checks for matches.",
27
+ "If protected: outputs block decision with reason. If not: outputs empty JSON (allow).",
28
+ "Always exits 0 -- hooks must never crash or the tool call will fail.",
29
+ "The skill merges the hooks_config into the existing [PLATFORM_CONFIG_DIR]/settings.json (preserving other settings).",
30
+ "If [PLATFORM_CONFIG_DIR]/settings.json already has PreToolUse hooks, the prototype guard is appended to the existing list.",
31
+ "The hook guards Write and Edit tool calls only. Bash commands that modify the filesystem are not intercepted -- the arness.md rules are the primary defense for those operations.",
32
+ "OpenCode.ai uses a built-in `tool.execute.before` handler in the arn-spark.js plugin instead of this hook. The handler reads protected paths from arness.md's `#### Protected Paths` section at runtime, so this hook template is only relevant for hook-based AI assistants.",
33
+ "The `tool.execute.before` handler in arn-spark.js covers both hook-based assistants and OpenCode -- if the user runs on OpenCode, the handler activates automatically. No manual hook installation needed."
34
+ ]
35
+ }
@@ -0,0 +1,38 @@
1
+ # Prototype Guardrail Rules Template
2
+
3
+ This template defines the `### Prototype Lock` subsection written to the target project's `arness.md` by the `arn-spark-prototype-lock` skill. The skill substitutes project-specific paths into the placeholders before writing.
4
+
5
+ ## Placeholders
6
+
7
+ - `__LOCK_DATE__` -- date the lock was created
8
+ - `__LOCK_TAG__` -- git tag name (or "none")
9
+ - `__LOCKED_DIR__` -- path to the locked directory (e.g., `.arness/prototypes/locked/`)
10
+ - `__CLICKABLE_VERSION__` -- e.g., `clickable/v3/`
11
+ - `__STATIC_VERSION__` -- e.g., `static/v4/`
12
+ - `__PROTOTYPES_DIR__` -- base prototypes directory (e.g., `.arness/prototypes`)
13
+
14
+ ## Template
15
+
16
+ ```markdown
17
+ ### Prototype Lock
18
+ - **Locked:** yes
19
+ - **Lock date:** __LOCK_DATE__
20
+ - **Lock tag:** __LOCK_TAG__
21
+ - **Locked directory:** __LOCKED_DIR__
22
+
23
+ #### Protected Paths
24
+ DO NOT modify, delete, or overwrite any files under these paths. They contain the validated prototype reference artifact:
25
+ - `__LOCKED_DIR__` -- frozen prototype snapshots (independently buildable)
26
+ - `__PROTOTYPES_DIR__/__CLICKABLE_VERSION__` -- original validated clickable prototype
27
+ - `__PROTOTYPES_DIR__/__STATIC_VERSION__` -- original validated static prototype
28
+ - `__PROTOTYPES_DIR__/criteria.md` -- agreed validation criteria
29
+ - `__PROTOTYPES_DIR__/*/final-report.md` -- complete validation history
30
+ - `__PROTOTYPES_DIR__/*/v*/review-report.md` -- version review reports
31
+ - `__PROTOTYPES_DIR__/*/v*/judge-report.md` -- judge verdicts
32
+ - `__PROTOTYPES_DIR__/*/v*/showcase/` -- visual showcase assets
33
+ - `__PROTOTYPES_DIR__/*/v*/journeys/` -- journey test screenshots
34
+
35
+ Any agent or skill that attempts to modify these files is operating incorrectly. The prototype is a reference artifact, not a working codebase. When implementing features, build in the project's source directories -- never in the prototype directories.
36
+
37
+ To view the locked prototype: see `__LOCKED_DIR__/LOCKED.md` for build and serve instructions.
38
+ ```
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: arn-spark-report
3
+ description: >-
4
+ This skill should be used when the user says "spark report", "report spark issue",
5
+ "spark broke", "arn-spark-report", "greenfield issue", "report greenfield problem",
6
+ "report spark problem", "diagnose spark", "spark doctor",
7
+ "spark bug", "spark not working",
8
+ or wants to report a problem with an Arness Spark workflow skill.
9
+ Invokes the arn-spark-doctor agent to diagnose the issue, then files a GitHub
10
+ issue on the Arness plugin repository. Do NOT use this for filing issues on the
11
+ user's own project — use /arn-code-create-issue for that.
12
+ version: 1.0.0
13
+ ---
14
+
15
+ # Arness Spark Report
16
+
17
+ Report an Arness Spark workflow issue by running a diagnostic and filing a GitHub issue on the Arness plugin repository. The arn-spark-doctor agent analyzes Spark configuration and behavior — it never reads project source code or business logic.
18
+
19
+ ## Workflow
20
+
21
+ ### Step 0: Smart Routing
22
+
23
+ Before proceeding, check whether the user's issue actually belongs to a different Arness plugin:
24
+
25
+ 1. Read the `## Arness` section from the project's arness.md (if it exists).
26
+ 2. Check the user's description for keyword signals:
27
+ - **Code keywords:** "plan", "spec", "execute", "taskify", "swift", "standard", "batch", "ship", "PR", "review-pr", "assess", "catch-up", "document-project", "save-plan"
28
+ - **Infra keywords:** "deploy", "Dockerfile", "container", "IaC", "terraform", "pipeline", "CI/CD", "environment", "secrets", "monitor", "infrastructure"
29
+ 3. If Code signals detected: "This sounds like an Arness Code issue. Run `/arn-code-report` instead."
30
+ 4. If Infra signals detected: "This sounds like an Arness Infra issue. Run `/arn-infra-report` instead."
31
+ 5. If the user confirms it is actually a Spark issue, proceed.
32
+
33
+ ---
34
+
35
+ ### Step 1: Explain the Process
36
+
37
+ Inform the user:
38
+
39
+ "I'll help you report an Arness Spark workflow issue. Here's how this works:
40
+ 1. You describe what happened — which skill you used and what went wrong
41
+ 2. I'll run a diagnostic that checks Spark's configuration and expected behavior (I won't read your project code)
42
+ 3. You'll review the issue report before it's submitted
43
+ 4. The issue gets filed on the Arness plugin repository for the maintainers
44
+
45
+ Your project code and business logic are never included in the report."
46
+
47
+ ---
48
+
49
+ ### Step 2: Gather User Description
50
+
51
+ Ask the user to describe the issue (free-form text, not a multi-choice question — this is open-ended):
52
+
53
+ "What happened? Which Arness Spark skill were you using and what went wrong?"
54
+
55
+ Let the user type a free-form description. This becomes the `user_description` for the diagnostic.
56
+
57
+ ---
58
+
59
+ ### Step 3: Check Prerequisites
60
+
61
+ 1. Detect the plugin's GitHub repository:
62
+ - Read the `repository` field from [PLATFORM_PLUGIN_METADATA]. Parse `owner/repo` from the URL.
63
+ - Fallback: `git -C ${CLAUDE_PLUGIN_ROOT} remote get-url origin`. Extract `owner/repo` from the URL (strip `.git` suffix and `https://github.com/` or `git@github.com:` prefix).
64
+
65
+ 2. Check `gh auth status` — user must be authenticated to file issues.
66
+
67
+ 3. Read plugin version — use [PLATFORM_PLUGIN_METADATA] to read plugin version.
68
+
69
+ 4. Read `## Arness` config from the project's arness.md (if it exists).
70
+
71
+ If GitHub access is not available, offer an alternative: generate the diagnostic report as a local file (`arness-spark-report-<YYYY-MM-DD>.md` in the project root) the user can manually submit.
72
+
73
+ ---
74
+
75
+ ### Step 4: Invoke arn-spark-doctor
76
+
77
+ Spawn the `arn-spark-doctor` 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:
78
+ - The user's description of the issue
79
+ - Project root path
80
+ - `## Arness` config content (or "not configured")
81
+ - Plugin version
82
+ - Instruction to read the knowledge base at `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-report/references/spark-knowledge-base.md`
83
+
84
+ Wait for the agent to complete and collect the diagnostic report.
85
+
86
+ ---
87
+
88
+ ### Step 5: Compose and Review Issue
89
+
90
+ Assemble the GitHub issue using the template from `${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-report/references/issue-template.md`:
91
+ - Include the user's original description in the "User Report" section
92
+ - Include the doctor's diagnostic findings (ISSUE items only, not OK items)
93
+ - Include the doctor's assessment
94
+ - Include plugin version and relevant config state
95
+ - Include environment info (OS, Git, GitHub, gh CLI, Node.js, Playwright status)
96
+ - Exclude any project code or business logic
97
+
98
+ Present the complete draft to the user, then request explicit consent.
99
+
100
+ Ask the user:
101
+
102
+ > **This report will be filed as a public GitHub issue on the Arness repository.** It contains only Arness configuration state and diagnostic findings — no project source code or business logic. Please review the report above carefully.
103
+ >
104
+ > 1. Submit — I've reviewed it and consent to filing this publicly
105
+ > 2. Save locally — save as a file instead of submitting
106
+ > 3. Edit first — let me modify the report before deciding
107
+
108
+ - If **Submit**: proceed to Step 6.
109
+ - If **Save locally**: save as `arness-spark-report-<YYYY-MM-DD>.md` in the project root. Inform the user. Do not submit.
110
+ - If **Edit first**: let the user modify the draft, then ask again.
111
+
112
+ ---
113
+
114
+ ### Step 6: Submit Issue
115
+
116
+ The `arn-spark-report` label must already exist on the plugin repository (maintained by the plugin maintainers, not created by this skill).
117
+
118
+ 1. Create the issue with the `arn-spark-report` label:
119
+ ```bash
120
+ gh issue create --repo <owner/repo> --title "<title>" --body "<body>" --label "arn-spark-report"
121
+ ```
122
+
123
+ 2. If the command fails because the label does not exist, retry without `--label` and inform the user that the issue was filed without a label.
124
+
125
+ 3. Report the issue URL to the user.
126
+
127
+ If submission fails for other reasons (permissions, network), save the report as `arness-spark-report-<YYYY-MM-DD>.md` in the project root and inform the user with instructions to submit manually.
128
+
129
+ ## Error Handling
130
+
131
+ - **Plugin not installed from GitHub** — no git remote found in plugin root and no `repository` field in plugin.json. Generate report as `arness-spark-report-<YYYY-MM-DD>.md` in the project root instead.
132
+ - **`gh` not authenticated** — suggest `gh auth login`, offer local file fallback (`arness-spark-report-<YYYY-MM-DD>.md`).
133
+ - **User lacks permission to file issues on plugin repo** — save report as `arness-spark-report-<YYYY-MM-DD>.md` in the project root, suggest opening manually.
134
+ - **arn-spark-doctor agent fails** — report the failure, offer to file a minimal issue with just the user's description.
135
+ - **`## Arness` config missing** — proceed anyway, note "not configured" in the report.
136
+ - **`arn-spark-report` label missing from plugin repo** — retry without `--label`, note this in the output.
137
+
138
+ ## Constraints
139
+
140
+ - **Allowed tools:** Read, Glob, Grep, Bash, Agent (for arn-spark-doctor)
141
+ - **NEVER** include project source code, business logic, or sensitive data in the report
142
+ - **NEVER** file issues on the user's own project repository — this skill only files on the Arness plugin repository
143
+ - **ALWAYS** present the full report draft and obtain explicit user consent before submitting
144
+ - **ALWAYS** offer a local-file alternative — the user must never be forced to submit publicly
@@ -0,0 +1,81 @@
1
+ # Issue Report Template
2
+
3
+ Template for GitHub issues created by `/arn-spark-report`. The skill assembles this template with data from the user's description and the arn-spark-doctor agent's diagnostic findings.
4
+
5
+ ## Template Format
6
+
7
+ The issue body follows this structure:
8
+
9
+ ```markdown
10
+ ## Arness Spark Report
11
+
12
+ **Plugin version:** <version from plugin.json>
13
+ **Skill(s) involved:** <skill names identified by the arn-spark-doctor diagnostic>
14
+
15
+ ### User Report
16
+
17
+ > <user's original description of the issue, quoted verbatim>
18
+
19
+ ### Diagnostic Findings
20
+
21
+ <arn-spark-doctor's findings — only ISSUE items, not OK items>
22
+
23
+ ### Assessment
24
+
25
+ <arn-spark-doctor's root cause assessment — 1-3 sentences>
26
+
27
+ ### Config State
28
+
29
+ \```
30
+ <relevant ## Arness Spark fields from the project's arness.md, or "Arness Spark not configured">
31
+ \```
32
+
33
+ ### Environment
34
+
35
+ - **OS:** <detected via uname or "unknown">
36
+ - **Git:** <yes/no>
37
+ - **GitHub:** <yes/no>
38
+ - **gh CLI:** <authenticated/not authenticated/not installed>
39
+ - **Node.js:** <version or not installed>
40
+ - **Playwright:** <available/not available>
41
+
42
+ ---
43
+ *Filed via `/arn-spark-report` — Arness Spark v<version>*
44
+ ```
45
+
46
+ ## Issue Title Format
47
+
48
+ Use a concise title derived from the doctor's assessment:
49
+
50
+ `[arn-spark-report] <skill name>: <brief issue summary>`
51
+
52
+ Examples:
53
+ - `[arn-spark-report] arn-spark-discover: product concept not saved after discovery`
54
+ - `[arn-spark-report] arn-spark-naming: WHOIS check fails with timeout`
55
+ - `[arn-spark-report] arn-spark-clickable-prototype: Playwright journey test crashes`
56
+
57
+ ## Privacy Guidelines
58
+
59
+ The issue MUST NOT include:
60
+ - Project source code or file contents
61
+ - Business logic or domain-specific data
62
+ - File paths outside of Arness configuration directories
63
+ - User credentials, tokens, or authentication details
64
+ - Any information that could identify the user's project
65
+
66
+ The issue SHOULD include:
67
+ - Arness Spark configuration state (## Arness fields)
68
+ - Directory existence checks (exists/missing, not contents)
69
+ - Skill names and pipeline stage where the issue occurred
70
+ - Error messages related to Arness Spark workflow behavior
71
+ - Plugin version and environment information
72
+
73
+ ## Labels
74
+
75
+ The `arn-spark-report` label is applied automatically. This label must be pre-created on the plugin repository by maintainers — the skill does not create it.
76
+
77
+ ## Notes
78
+
79
+ - The user ALWAYS reviews and approves the issue before submission
80
+ - If the user edits the draft, use their edited version
81
+ - If submission fails, save the report as a local markdown file