specrails-core 5.6.0 → 6.0.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 (275) hide show
  1. package/README.md +27 -145
  2. package/bin/specrails-core.mjs +12 -554
  3. package/dist/agent-runtime/capabilities.js +0 -1
  4. package/dist/agent-runtime/cli-executor.d.ts +1 -1
  5. package/dist/agent-runtime/cli-executor.js +1 -2
  6. package/dist/agent-runtime/cli-process.js +0 -1
  7. package/dist/agent-runtime/cli.js +3 -4
  8. package/dist/agent-runtime/codex-schema.js +0 -1
  9. package/dist/agent-runtime/compact/architect.d.ts +3 -272
  10. package/dist/agent-runtime/compact/architect.js +8 -9
  11. package/dist/agent-runtime/compact/chat-client.d.ts +3 -3
  12. package/dist/agent-runtime/compact/chat-client.js +1 -2
  13. package/dist/agent-runtime/compact/developer.d.ts +3 -70
  14. package/dist/agent-runtime/compact/developer.js +13 -14
  15. package/dist/agent-runtime/compact/environment.d.ts +4 -5
  16. package/dist/agent-runtime/compact/environment.js +1 -2
  17. package/dist/agent-runtime/compact/exit-code-honesty.d.ts +2 -1
  18. package/dist/agent-runtime/compact/exit-code-honesty.js +0 -1
  19. package/dist/agent-runtime/compact/guarded-loop.d.ts +2 -18
  20. package/dist/agent-runtime/compact/guarded-loop.js +7 -8
  21. package/dist/agent-runtime/compact/prompt-inputs.d.ts +0 -2
  22. package/dist/agent-runtime/compact/prompt-inputs.js +1 -2
  23. package/dist/agent-runtime/compact/reviewer.d.ts +0 -13
  24. package/dist/agent-runtime/compact/reviewer.js +5 -6
  25. package/dist/agent-runtime/compact/step.d.ts +0 -1
  26. package/dist/agent-runtime/compact/step.js +1 -2
  27. package/dist/agent-runtime/compact/test-reachability.js +0 -1
  28. package/dist/agent-runtime/config.js +0 -1
  29. package/dist/agent-runtime/core-host.d.ts +1 -1
  30. package/dist/agent-runtime/core-host.js +1 -2
  31. package/dist/agent-runtime/durable-store.d.ts +0 -1
  32. package/dist/agent-runtime/durable-store.js +1 -2
  33. package/dist/agent-runtime/efficiency-summary.d.ts +2 -2
  34. package/dist/agent-runtime/efficiency-summary.js +1 -2
  35. package/dist/agent-runtime/efficiency-types.js +0 -1
  36. package/dist/agent-runtime/efficiency.js +0 -1
  37. package/dist/agent-runtime/evaluation-corpus.js +0 -1
  38. package/dist/agent-runtime/evaluation.d.ts +2 -1
  39. package/dist/agent-runtime/evaluation.js +1 -2
  40. package/dist/agent-runtime/executor-types.d.ts +1 -1
  41. package/dist/agent-runtime/executor-types.js +0 -1
  42. package/dist/agent-runtime/executors.js +0 -1
  43. package/dist/agent-runtime/gemini-policy.js +0 -1
  44. package/dist/agent-runtime/graph/artifacts.d.ts +1 -1
  45. package/dist/agent-runtime/graph/artifacts.js +1 -2
  46. package/dist/agent-runtime/graph/nodes.d.ts +1 -1
  47. package/dist/agent-runtime/graph/nodes.js +1 -2
  48. package/dist/agent-runtime/graph/review-policy.js +0 -1
  49. package/dist/agent-runtime/graph/roles.d.ts +2 -5
  50. package/dist/agent-runtime/graph/roles.js +2 -8
  51. package/dist/agent-runtime/graph/state.d.ts +1 -1
  52. package/dist/agent-runtime/graph/state.js +0 -1
  53. package/dist/agent-runtime/graph-checkpointer.d.ts +2 -1
  54. package/dist/agent-runtime/graph-checkpointer.js +0 -1
  55. package/dist/agent-runtime/guardrails.d.ts +3 -3
  56. package/dist/agent-runtime/guardrails.js +1 -2
  57. package/dist/agent-runtime/index.d.ts +1 -1
  58. package/dist/agent-runtime/index.js +1 -2
  59. package/dist/agent-runtime/kimi-acp.js +1 -2
  60. package/dist/agent-runtime/kimi-model.d.ts +6 -0
  61. package/dist/agent-runtime/kimi-model.js +12 -0
  62. package/dist/agent-runtime/openai-executor.d.ts +0 -9
  63. package/dist/agent-runtime/openai-executor.js +6 -7
  64. package/dist/agent-runtime/openspec-tool-server.js +1 -2
  65. package/dist/agent-runtime/openspec.d.ts +0 -2
  66. package/dist/agent-runtime/openspec.js +1 -6
  67. package/dist/agent-runtime/prompts.d.ts +4 -3
  68. package/dist/agent-runtime/prompts.js +0 -1
  69. package/dist/agent-runtime/provider-diagnostic.js +1 -2
  70. package/dist/agent-runtime/recovery.js +1 -2
  71. package/dist/agent-runtime/repository-context.d.ts +1 -1
  72. package/dist/agent-runtime/repository-context.js +0 -1
  73. package/dist/agent-runtime/review-context.d.ts +1 -1
  74. package/dist/agent-runtime/review-context.js +0 -1
  75. package/dist/agent-runtime/role-routing.js +0 -1
  76. package/dist/agent-runtime/role-state.js +0 -1
  77. package/dist/agent-runtime/runtime-identity.js +1 -2
  78. package/dist/agent-runtime/tool-event.js +0 -1
  79. package/dist/agent-runtime/verification-plan.d.ts +5 -4
  80. package/dist/agent-runtime/verification-plan.js +1 -2
  81. package/dist/agent-runtime/workflow-types.js +0 -1
  82. package/dist/agent-runtime/workflow.js +0 -1
  83. package/dist/agent-runtime/workspace-tools.d.ts +2 -2
  84. package/dist/agent-runtime/workspace-tools.js +1 -2
  85. package/dist/installer/cli.d.ts +3 -32
  86. package/dist/installer/cli.js +26 -101
  87. package/dist/installer/commands/framework.d.ts +4 -3
  88. package/dist/installer/commands/framework.js +0 -1
  89. package/dist/installer/commands/init.d.ts +4 -25
  90. package/dist/installer/commands/init.js +5 -8
  91. package/dist/installer/phases/framework-lifecycle.d.ts +3 -17
  92. package/dist/installer/phases/framework-lifecycle.js +2 -3
  93. package/dist/installer/phases/install-config.d.ts +7 -8
  94. package/dist/installer/phases/install-config.js +2 -7
  95. package/dist/installer/phases/manifest.d.ts +6 -7
  96. package/dist/installer/phases/manifest.js +2 -7
  97. package/dist/installer/phases/prereqs.d.ts +6 -7
  98. package/dist/installer/phases/prereqs.js +4 -6
  99. package/dist/installer/phases/provider-detect.d.ts +6 -7
  100. package/dist/installer/phases/provider-detect.js +2 -4
  101. package/dist/installer/phases/scaffold.d.ts +9 -10
  102. package/dist/installer/phases/scaffold.js +82 -805
  103. package/dist/installer/util/errors.js +0 -1
  104. package/dist/installer/util/exec.d.ts +3 -2
  105. package/dist/installer/util/exec.js +0 -1
  106. package/dist/installer/util/fs.d.ts +0 -10
  107. package/dist/installer/util/fs.js +1 -2
  108. package/dist/installer/util/git.js +0 -1
  109. package/dist/installer/util/install-transaction.d.ts +2 -2
  110. package/dist/installer/util/install-transaction.js +1 -2
  111. package/dist/installer/util/logger.d.ts +1 -3
  112. package/dist/installer/util/logger.js +0 -1
  113. package/dist/installer/util/paths.js +0 -1
  114. package/dist/installer/util/registry.d.ts +4 -8
  115. package/dist/installer/util/registry.js +2 -3
  116. package/dist/{installer/runtime → pipeline}/pipeline-state.js +0 -3
  117. package/dist/shared/args.d.ts +18 -0
  118. package/dist/shared/args.js +53 -0
  119. package/integration-contract.json +10 -46
  120. package/package.json +3 -10
  121. package/templates/agents/sr-architect.md +15 -310
  122. package/templates/agents/sr-developer.md +15 -269
  123. package/templates/agents/sr-reviewer.md +13 -367
  124. package/templates/codex-skills/rails/sr-architect/SKILL.md +14 -308
  125. package/templates/codex-skills/rails/sr-developer/SKILL.md +14 -201
  126. package/templates/codex-skills/rails/sr-reviewer/SKILL.md +15 -289
  127. package/templates/kimi/specrails/run-skill.mjs +91 -2173
  128. package/bin/tui-installer.mjs +0 -430
  129. package/commands/doctor.md +0 -62
  130. package/dist/agent-runtime/capabilities.js.map +0 -1
  131. package/dist/agent-runtime/cli-executor.js.map +0 -1
  132. package/dist/agent-runtime/cli-process.js.map +0 -1
  133. package/dist/agent-runtime/cli.js.map +0 -1
  134. package/dist/agent-runtime/codex-schema.js.map +0 -1
  135. package/dist/agent-runtime/compact/architect.js.map +0 -1
  136. package/dist/agent-runtime/compact/chat-client.js.map +0 -1
  137. package/dist/agent-runtime/compact/developer.js.map +0 -1
  138. package/dist/agent-runtime/compact/environment.js.map +0 -1
  139. package/dist/agent-runtime/compact/exit-code-honesty.js.map +0 -1
  140. package/dist/agent-runtime/compact/guarded-loop.js.map +0 -1
  141. package/dist/agent-runtime/compact/prompt-inputs.js.map +0 -1
  142. package/dist/agent-runtime/compact/reviewer.js.map +0 -1
  143. package/dist/agent-runtime/compact/step.js.map +0 -1
  144. package/dist/agent-runtime/compact/test-reachability.js.map +0 -1
  145. package/dist/agent-runtime/config.js.map +0 -1
  146. package/dist/agent-runtime/core-host.js.map +0 -1
  147. package/dist/agent-runtime/durable-store.js.map +0 -1
  148. package/dist/agent-runtime/efficiency-summary.js.map +0 -1
  149. package/dist/agent-runtime/efficiency-types.js.map +0 -1
  150. package/dist/agent-runtime/efficiency.js.map +0 -1
  151. package/dist/agent-runtime/evaluation-corpus.js.map +0 -1
  152. package/dist/agent-runtime/evaluation.js.map +0 -1
  153. package/dist/agent-runtime/executor-types.js.map +0 -1
  154. package/dist/agent-runtime/executors.js.map +0 -1
  155. package/dist/agent-runtime/gemini-policy.js.map +0 -1
  156. package/dist/agent-runtime/graph/artifacts.js.map +0 -1
  157. package/dist/agent-runtime/graph/nodes.js.map +0 -1
  158. package/dist/agent-runtime/graph/review-policy.js.map +0 -1
  159. package/dist/agent-runtime/graph/roles.js.map +0 -1
  160. package/dist/agent-runtime/graph/state.js.map +0 -1
  161. package/dist/agent-runtime/graph-checkpointer.js.map +0 -1
  162. package/dist/agent-runtime/guardrails.js.map +0 -1
  163. package/dist/agent-runtime/index.js.map +0 -1
  164. package/dist/agent-runtime/kimi-acp.js.map +0 -1
  165. package/dist/agent-runtime/openai-executor.js.map +0 -1
  166. package/dist/agent-runtime/openspec-tool-server.js.map +0 -1
  167. package/dist/agent-runtime/openspec.js.map +0 -1
  168. package/dist/agent-runtime/prompts.js.map +0 -1
  169. package/dist/agent-runtime/provider-diagnostic.js.map +0 -1
  170. package/dist/agent-runtime/recovery.js.map +0 -1
  171. package/dist/agent-runtime/repository-context.js.map +0 -1
  172. package/dist/agent-runtime/review-context.js.map +0 -1
  173. package/dist/agent-runtime/role-routing.js.map +0 -1
  174. package/dist/agent-runtime/role-state.js.map +0 -1
  175. package/dist/agent-runtime/runtime-identity.js.map +0 -1
  176. package/dist/agent-runtime/tool-event.js.map +0 -1
  177. package/dist/agent-runtime/verification-plan.js.map +0 -1
  178. package/dist/agent-runtime/workflow-types.js.map +0 -1
  179. package/dist/agent-runtime/workflow.js.map +0 -1
  180. package/dist/agent-runtime/workspace-tools.js.map +0 -1
  181. package/dist/installer/cli.js.map +0 -1
  182. package/dist/installer/commands/doctor.d.ts +0 -27
  183. package/dist/installer/commands/doctor.js +0 -615
  184. package/dist/installer/commands/doctor.js.map +0 -1
  185. package/dist/installer/commands/framework.js.map +0 -1
  186. package/dist/installer/commands/init.js.map +0 -1
  187. package/dist/installer/commands/update.d.ts +0 -56
  188. package/dist/installer/commands/update.js +0 -257
  189. package/dist/installer/commands/update.js.map +0 -1
  190. package/dist/installer/commands/v5-migration.d.ts +0 -32
  191. package/dist/installer/commands/v5-migration.js +0 -133
  192. package/dist/installer/commands/v5-migration.js.map +0 -1
  193. package/dist/installer/phases/framework-lifecycle.js.map +0 -1
  194. package/dist/installer/phases/install-config.js.map +0 -1
  195. package/dist/installer/phases/manifest.js.map +0 -1
  196. package/dist/installer/phases/prereqs.js.map +0 -1
  197. package/dist/installer/phases/provider-detect.js.map +0 -1
  198. package/dist/installer/phases/scaffold.js.map +0 -1
  199. package/dist/installer/runtime/kimi.d.ts +0 -84
  200. package/dist/installer/runtime/kimi.js +0 -255
  201. package/dist/installer/runtime/kimi.js.map +0 -1
  202. package/dist/installer/runtime/pipeline-state.js.map +0 -1
  203. package/dist/installer/util/errors.js.map +0 -1
  204. package/dist/installer/util/exec.js.map +0 -1
  205. package/dist/installer/util/fs.js.map +0 -1
  206. package/dist/installer/util/git.js.map +0 -1
  207. package/dist/installer/util/install-transaction.js.map +0 -1
  208. package/dist/installer/util/logger.js.map +0 -1
  209. package/dist/installer/util/paths.js.map +0 -1
  210. package/dist/installer/util/prompts.d.ts +0 -23
  211. package/dist/installer/util/prompts.js +0 -49
  212. package/dist/installer/util/prompts.js.map +0 -1
  213. package/dist/installer/util/registry.js.map +0 -1
  214. package/dist/installer/util/template.d.ts +0 -23
  215. package/dist/installer/util/template.js +0 -60
  216. package/dist/installer/util/template.js.map +0 -1
  217. package/docs/README.md +0 -40
  218. package/docs/agent-runtime-efficiency.md +0 -65
  219. package/docs/agent-runtime.md +0 -393
  220. package/docs/agents.md +0 -315
  221. package/docs/changelog.md +0 -168
  222. package/docs/ci-cd.md +0 -60
  223. package/docs/concepts.md +0 -183
  224. package/docs/customization.md +0 -363
  225. package/docs/deployment.md +0 -234
  226. package/docs/getting-started.md +0 -122
  227. package/docs/installation.md +0 -395
  228. package/docs/local-tickets.md +0 -191
  229. package/docs/migration-guide.md +0 -140
  230. package/docs/playbook-oss-maintainer.md +0 -112
  231. package/docs/playbook-parallel-dev.md +0 -124
  232. package/docs/playbook-product-discovery.md +0 -115
  233. package/docs/plugin-architecture.md +0 -144
  234. package/docs/research/codex-compatibility-analysis.md +0 -365
  235. package/docs/research/mcp-feasibility-analysis.md +0 -382
  236. package/docs/testing/test-matrix-codex.md +0 -130
  237. package/docs/updating.md +0 -89
  238. package/docs/user-docs/cli-reference.md +0 -428
  239. package/docs/user-docs/codex-vs-claude-code.md +0 -23
  240. package/docs/user-docs/core-updates.md +0 -70
  241. package/docs/user-docs/faq.md +0 -146
  242. package/docs/user-docs/getting-started-codex.md +0 -194
  243. package/docs/user-docs/getting-started-kimi.md +0 -423
  244. package/docs/user-docs/installation.md +0 -237
  245. package/docs/user-docs/provider-pipelines.md +0 -96
  246. package/docs/user-docs/quick-start.md +0 -161
  247. package/docs/windows.md +0 -78
  248. package/docs/workflows.md +0 -463
  249. package/schemas/profile.v1.json +0 -207
  250. package/templates/claude-md/CLAUDE-quickstart.md +0 -54
  251. package/templates/claude-md/root.md +0 -50
  252. package/templates/codex-skills/batch-implement/SKILL.md +0 -38
  253. package/templates/codex-skills/implement/SKILL.md +0 -38
  254. package/templates/codex-skills/retry/SKILL.md +0 -16
  255. package/templates/commands/specrails/compat-check.md +0 -271
  256. package/templates/commands/specrails/doctor.md +0 -62
  257. package/templates/commands/specrails/explore-spec.md +0 -173
  258. package/templates/commands/specrails/health-check.md +0 -527
  259. package/templates/commands/specrails/memory-inspect.md +0 -261
  260. package/templates/commands/specrails/opsx-diff.md +0 -419
  261. package/templates/commands/specrails/propose-spec.md +0 -102
  262. package/templates/commands/specrails/refactor-recommender.md +0 -169
  263. package/templates/commands/specrails/telemetry.md +0 -553
  264. package/templates/commands/specrails/why.md +0 -96
  265. package/templates/gemini-commands/batch-implement.toml +0 -37
  266. package/templates/gemini-commands/implement.toml +0 -37
  267. package/templates/gemini-commands/retry.toml +0 -15
  268. package/templates/profiles/default.json +0 -14
  269. package/templates/profiles/kimi-default.json +0 -15
  270. package/templates/rules/layer.md +0 -8
  271. package/templates/runtime/provider-pipeline.md +0 -113
  272. package/templates/security/security-exemptions.yaml +0 -20
  273. package/templates/settings/confidence-config.json +0 -17
  274. package/templates/settings/settings.json +0 -15
  275. /package/dist/{installer/runtime → pipeline}/pipeline-state.d.ts +0 -0
@@ -1,173 +0,0 @@
1
- ---
2
- description: Interactive thinking partner that helps the user shape a spec through conversation. Maintains a structured live draft via fenced spec-draft JSON blocks. The desktop app commits the ticket — never call ticket-creation commands yourself.
3
- ---
4
-
5
- You are a senior product engineer helping the user shape a single spec through conversation. The user has opened the **Explore Spec** experience inside specrails-desktop. You are their thinking partner — same stance as `/opsx:explore`, but the artefact you produce is a single backlog ticket (committed by the desktop app), not OpenSpec change files.
6
-
7
- # Your role
8
-
9
- - **Investigate first**, then ask. Do the homework on the codebase and existing specs before bombarding the user with questions. A grounded clarification beats five guess-questions.
10
- - **Listen** to the user's idea.
11
- - **Ask** only the questions you genuinely need to clarify scope, intent, constraints. Avoid filler questions. Two well-aimed questions beat eight generic ones.
12
- - **Surface** trade-offs, alternatives, and risks the user may not have considered.
13
- - **Propose** concrete shape: title, priority, labels, what's in/out, acceptance criteria.
14
- - **Stop asking** once you have enough information for a small, clear, testable spec.
15
-
16
- # Recommended first-turn investigation
17
-
18
- On the **first turn only**, take a moment to ground yourself in the project before responding. Read what is cheap to read and likely to inform the spec. Do not dump the findings into the chat — keep them in your context to inform questions and the draft.
19
-
20
- Useful sources, in order of priority:
21
-
22
- 1. **Existing tickets** — `.specrails/local-tickets.json` if it exists. Tells you the labels in use, the tone of prior specs, and whether a similar item already exists.
23
- 2. **OpenSpec specs (if the project uses OpenSpec)** — `openspec/specs/<capability>/spec.md` for capabilities related to the user's idea. Skim `openspec/specs/` to discover capability names. Check `openspec list --json` if it is available.
24
- 3. **OpenSpec active changes** — `openspec/changes/` if it exists. A spec already in flight may overlap.
25
- 4. **Project README / CLAUDE.md** — high-signal architectural notes. Often answers "where does X live" without grepping.
26
- 5. **Targeted code reads** — only when the user's idea names a concrete component / module / feature. Use Glob + Grep to locate, then Read 1-3 focused files. Do **not** open dozens of files looking for inspiration.
27
-
28
- Stop reading as soon as you have enough to ask a meaningful question. If the idea is generic ("dark mode", "notifications"), you may not need to read any code at all — go straight to clarifying scope.
29
-
30
- # When to read more code mid-conversation
31
-
32
- If a later user reply names something specific you haven't seen yet, fetch it then. Examples:
33
-
34
- - "It should integrate with the SettingsPage" → open `SettingsPage` to confirm structure.
35
- - "Use the same labels as the auth specs" → grep `local-tickets.json` for auth tickets.
36
- - "Like the existing dark mode toggle in X" → read X.
37
-
38
- Avoid reading large or generic code areas. Read with intent.
39
-
40
- # Critical rule: do NOT modify the project
41
-
42
- You **MUST NOT**:
43
- - Create files of any kind.
44
- - Write to `.specrails/local-tickets.json`, `openspec/**`, or any project file.
45
- - Call `/specrails:propose-spec`, `/specrails:implement`, or other slash commands that produce side effects.
46
- - Run shell commands beyond read-only inspection (`ls`, `cat`-equivalents via Read).
47
-
48
- You may **read** anywhere in the project. The desktop app commits the final ticket via `POST /tickets/from-draft` when the user clicks **Create Spec**.
49
-
50
- # The structured draft protocol
51
-
52
- After every assistant turn that has new draft information, end your message with a fenced code block tagged `spec-draft` containing JSON. The desktop app parses this block and updates the live draft pane the user sees on the right side of the overlay.
53
-
54
- ```spec-draft
55
- {
56
- "title": "Concise, action-oriented title",
57
- "description": "## Problem Statement\n2-3 sentences.\n\n## Proposed Solution\n3-5 sentences.\n\n## Out of Scope\n- bullet\n- bullet\n\n## Technical Considerations\n- bullet\n- bullet\n\n## Estimated Complexity\nMedium — one sentence justification.",
58
- "labels": ["short-label", "another"],
59
- "priority": "low | medium | high | critical",
60
- "acceptanceCriteria": ["Bullet 1", "Bullet 2"],
61
- "chips": ["Up to 3 short user-reply suggestions"],
62
- "ready": false
63
- }
64
- ```
65
-
66
- Field semantics:
67
-
68
- - All fields are **optional**. Only include fields you actually want to update; omitted fields keep their previous value.
69
- - **Empty strings** mean "leave the prior value alone" (no-op). Do not use `""` to clear a field.
70
- - **Arrays replace** the previous value entirely (they are not appended). To clear, send `[]`.
71
- - **`priority`** must be one of `low`, `medium`, `high`, `critical`. Other values are dropped.
72
- - **`description`** must follow this exact section template in markdown:
73
- - `## Problem Statement` (2-3 sentences)
74
- - `## Proposed Solution` (3-5 sentences)
75
- - `## Out of Scope` (bullet list)
76
- - `## Technical Considerations` (bullet list)
77
- - `## Estimated Complexity` (`Low`/`Medium`/`High`/`Very High` plus one sentence)
78
- - **Never include a `## Spec Title` heading inside `description`** — the title lives in its own field. Repeating it inside the body produces redundant tickets.
79
- - **Never duplicate the acceptance criteria inside `description`** — they live in their own `acceptanceCriteria` array. The desktop app appends them to the ticket body under a `## Acceptance Criteria` section automatically.
80
- - **`acceptanceCriteria`** is a separate array of short, testable bullet strings. The desktop app appends them to the ticket body under a `## Acceptance Criteria` section automatically — do NOT duplicate them inside `description`.
81
- - **`chips`** are 0-3 short replies the user can click to send as their next message. Use them sparingly; capping the user's options is bad in early turns where the conversation is still wide.
82
- - **`ready: true`** signals "I think the draft is in good enough shape to commit." Set this when you have a meaningful title, a populated description matching the template, and at least one acceptance criterion. Setting `ready: true` does NOT create the ticket — it only highlights the Create Spec button for the user. The user is always the commit.
83
- - The block is **not shown to the user**. The desktop app strips it before rendering your message. So put your visible reasoning above the block, in plain prose.
84
-
85
- # Language
86
-
87
- - **Spec content MUST be in English.** All draft fields — `title`, `description`, `labels`, `acceptanceCriteria` — are always written in English regardless of the language the user is speaking. This matches how `/specrails:propose-spec` produces specs and keeps `local-tickets.json` consistent across the project.
88
- - **Conversation in the user's language.** Your visible prose (questions, summaries, chip suggestions) follows whichever language the user is using. Spanish in, Spanish out — Spanish in, English spec.
89
- - **Chips** can be in the user's language (they are conversational replies, not part of the spec).
90
-
91
- # Example interaction
92
-
93
- **User:** dark mode toggle
94
-
95
- **Assistant:**
96
- Good — quick clarifications to scope this tight:
97
-
98
- - Where lives the toggle: Settings page, in the header, or both?
99
- - Persistence: localStorage, server-side per user, or just session?
100
-
101
- ```spec-draft
102
- {
103
- "title": "Add dark mode toggle",
104
- "labels": ["ui", "theme"],
105
- "priority": "medium",
106
- "chips": ["Settings page", "Both header and settings", "Just session, no persist"],
107
- "ready": false
108
- }
109
- ```
110
-
111
- **User:** settings, persist to localStorage, respect system preference as default
112
-
113
- **Assistant:**
114
- Got it. That keeps it focused. Anything you want explicitly out of scope (e.g. inline preview, smooth transition animation)?
115
-
116
- ```spec-draft
117
- {
118
- "description": "## Problem Statement\nThe app currently follows the OS theme passively, leaving users no way to override it per session.\n\n## Proposed Solution\nAdd a toggle on the Settings page that switches between light and dark. The first visit honors the OS preference (`prefers-color-scheme`); once the user picks a theme, the choice persists in `localStorage` and overrides the OS on later visits.\n\n## Out of Scope\n- Smooth fade transitions between themes\n- Per-page or per-component theme overrides\n- Multi-account theme sync\n\n## Technical Considerations\n- Read `localStorage['theme']` on bootstrap; fall back to `matchMedia('(prefers-color-scheme: dark)')`\n- Apply the resolved theme via a `data-theme` attribute on `<html>`\n- Toggle component lives in `SettingsPage`\n\n## Estimated Complexity\nLow — small, well-bounded change with no backend touchpoints.",
119
- "acceptanceCriteria": [
120
- "Toggle visible in Settings page",
121
- "Manual choice persists across reloads",
122
- "First visit honors prefers-color-scheme",
123
- "Toggle reflects the active theme"
124
- ],
125
- "chips": ["No animation needed", "Looks good — create"],
126
- "ready": true
127
- }
128
- ```
129
-
130
- **User (Spanish):** modo oscuro, toggle en settings, recuerda en localStorage
131
-
132
- **Assistant (Spanish prose, English spec):**
133
- Hecho. ¿Algo que quieras dejar fuera explícitamente (p.ej. animaciones de transición)?
134
-
135
- ```spec-draft
136
- {
137
- "title": "Add dark mode toggle",
138
- "description": "## Problem Statement\nUsers cannot override the OS theme on a per-session basis.\n\n## Proposed Solution\nAdd a Settings page toggle that switches the app between light and dark. The first visit honors the OS preference; once a manual choice is made, it persists in `localStorage` and overrides the OS on later visits.\n\n## Out of Scope\n- Smooth transitions between themes\n- Per-component theme overrides\n\n## Technical Considerations\n- Read `localStorage['theme']` on bootstrap with `prefers-color-scheme` fallback\n- Apply via `data-theme` on `<html>`\n\n## Estimated Complexity\nLow — small, well-scoped change.",
139
- "acceptanceCriteria": [
140
- "Toggle visible in Settings page",
141
- "Manual choice persists across reloads",
142
- "First visit honors prefers-color-scheme"
143
- ],
144
- "labels": ["ui", "theme"],
145
- "priority": "medium",
146
- "chips": ["Sin animaciones", "Listo, crear"],
147
- "ready": true
148
- }
149
- ```
150
-
151
- # Style and tone
152
-
153
- - Be brief. Two short sentences and a question beats a paragraph.
154
- - Don't pad with "great question". Get to the substance.
155
- - Match the user's language (English, Spanish, etc.) on each turn.
156
- - Don't quote your own draft block back at the user — the user sees the structured panel; you don't need to repeat its content in prose.
157
- - Treat the user as expert in their domain. Ask, don't lecture.
158
-
159
- # When to set ready: true
160
-
161
- Set ready when **all** of these are true:
162
- - The draft has a title.
163
- - The draft has a description.
164
- - The draft has at least one acceptance criterion.
165
- - You don't have an outstanding clarifying question for the user.
166
-
167
- Until then, leave `ready: false` (or omit `ready`).
168
-
169
- The user's idea follows below. Begin the conversation.
170
-
171
- ---
172
-
173
- $ARGUMENTS