@printpractical/cruze 0.0.13 → 0.0.14

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 (298) hide show
  1. package/README.md +61 -118
  2. package/dist/adapters/inbound/cli/cli_context.js +0 -27
  3. package/dist/adapters/inbound/cli/commands/code.js +5 -18
  4. package/dist/adapters/inbound/cli/commands/documents.js +11 -37
  5. package/dist/adapters/inbound/cli/commands/init.js +1 -1
  6. package/dist/adapters/inbound/cli/commands/review.js +2 -9
  7. package/dist/adapters/inbound/cli/commands/status.js +16 -63
  8. package/dist/adapters/inbound/cli/commands.js +10 -37
  9. package/dist/adapters/inbound/cli/parse_command.js +0 -54
  10. package/dist/adapters/outbound/git_repository.js +2 -71
  11. package/dist/app/ports/repository.js +0 -12
  12. package/dist/app/project_context.js +15 -25
  13. package/dist/app/use_cases/approve_document.js +29 -0
  14. package/dist/app/use_cases/check_code.js +21 -56
  15. package/dist/app/use_cases/new_document.js +25 -0
  16. package/dist/app/use_cases/project_status.js +43 -67
  17. package/dist/app/use_cases/run_review.js +11 -30
  18. package/dist/app/use_cases/validate_project.js +4 -4
  19. package/dist/domain/approvals.js +51 -0
  20. package/dist/domain/check/check_source.js +2 -31
  21. package/dist/domain/config.js +8 -84
  22. package/dist/domain/hashing.js +16 -30
  23. package/dist/domain/ids.js +13 -27
  24. package/dist/domain/next_step.js +41 -0
  25. package/dist/domain/project/features.js +71 -0
  26. package/dist/domain/project/layout.js +11 -27
  27. package/dist/domain/project/project_docs.js +48 -0
  28. package/dist/domain/project/release.js +30 -0
  29. package/dist/domain/scaffold.js +0 -1
  30. package/dist/domain/skill_budget.js +4 -4
  31. package/dist/domain/trace.js +8 -25
  32. package/dist/domain/validation/document_rules.js +70 -0
  33. package/dist/domain/validation/release_rules.js +45 -0
  34. package/dist/domain/validation/validate_project.js +20 -27
  35. package/dist/domain/versions/cruze_version.js +3 -9
  36. package/dist/main.js +1 -1
  37. package/package.json +1 -1
  38. package/skills/asking/SKILL.md +51 -0
  39. package/skills/behavioural-testing/SKILL.md +14 -16
  40. package/skills/behavioural-testing/examples.md +1 -2
  41. package/skills/behavioural-testing/fakes.md +2 -2
  42. package/skills/build/SKILL.md +34 -38
  43. package/skills/dependency-approval/SKILL.md +34 -31
  44. package/skills/envision/SKILL.md +23 -18
  45. package/skills/envision/architecture.md +16 -0
  46. package/skills/envision/breakdown.md +14 -0
  47. package/skills/envision/possibilities.md +6 -7
  48. package/skills/fix/SKILL.md +34 -0
  49. package/skills/formats/SKILL.md +39 -87
  50. package/skills/formats/config.md +47 -0
  51. package/skills/formats/templates/architecture.md +18 -74
  52. package/skills/formats/templates/feature.md +18 -34
  53. package/skills/formats/templates/vision.md +15 -27
  54. package/skills/hexagonal-design/SKILL.md +11 -11
  55. package/skills/hexagonal-design/contracts.md +3 -3
  56. package/skills/hexagonal-design/fundamentals.md +1 -1
  57. package/skills/hexagonal-design/languages/cpp.md +1 -1
  58. package/skills/hexagonal-design/languages/rust.md +1 -1
  59. package/skills/hexagonal-design/languages/swift.md +2 -2
  60. package/skills/hexagonal-design/runtime.md +2 -2
  61. package/skills/research/SKILL.md +4 -4
  62. package/skills/research/evaluation.md +1 -1
  63. package/skills/review/SKILL.md +27 -0
  64. package/skills/roles/SKILL.md +8 -59
  65. package/skills/roles/code-reviewer.md +21 -32
  66. package/skills/roles/researcher.md +3 -3
  67. package/skills/shape/SKILL.md +37 -0
  68. package/skills/shape/self-check.md +12 -0
  69. package/src/adapters/inbound/cli/cli_context.ts +0 -27
  70. package/src/adapters/inbound/cli/commands/code.ts +5 -18
  71. package/src/adapters/inbound/cli/commands/documents.ts +11 -37
  72. package/src/adapters/inbound/cli/commands/init.ts +1 -1
  73. package/src/adapters/inbound/cli/commands/review.ts +2 -9
  74. package/src/adapters/inbound/cli/commands/status.ts +16 -63
  75. package/src/adapters/inbound/cli/commands.ts +10 -37
  76. package/src/adapters/inbound/cli/parse_command.ts +0 -54
  77. package/src/adapters/outbound/git_repository.ts +2 -71
  78. package/src/app/ports/repository.ts +0 -12
  79. package/src/app/project_context.ts +15 -25
  80. package/src/app/use_cases/approve_document.ts +29 -0
  81. package/src/app/use_cases/check_code.ts +21 -56
  82. package/src/app/use_cases/new_document.ts +25 -0
  83. package/src/app/use_cases/project_status.ts +49 -73
  84. package/src/app/use_cases/run_review.ts +11 -30
  85. package/src/app/use_cases/validate_project.ts +4 -4
  86. package/src/domain/approvals.ts +51 -0
  87. package/src/domain/check/check_source.ts +2 -31
  88. package/src/domain/config.ts +9 -85
  89. package/src/domain/hashing.ts +16 -30
  90. package/src/domain/ids.ts +13 -27
  91. package/src/domain/next_step.ts +41 -0
  92. package/src/domain/project/features.ts +71 -0
  93. package/src/domain/project/layout.ts +11 -27
  94. package/src/domain/project/project_docs.ts +48 -0
  95. package/src/domain/project/release.ts +30 -0
  96. package/src/domain/scaffold.ts +0 -1
  97. package/src/domain/skill_budget.ts +4 -4
  98. package/src/domain/trace.ts +8 -25
  99. package/src/domain/validation/document_rules.ts +70 -0
  100. package/src/domain/validation/release_rules.ts +45 -0
  101. package/src/domain/validation/validate_project.ts +21 -28
  102. package/src/domain/versions/cruze_version.ts +3 -9
  103. package/src/main.ts +1 -1
  104. package/templates/init/AGENTS.md +4 -12
  105. package/templates/init/ci.yml +3 -3
  106. package/templates/init/config.yaml +8 -17
  107. package/templates/init/review/claude.yaml +2 -2
  108. package/dist/adapters/inbound/cli/argument_files.js +0 -29
  109. package/dist/adapters/inbound/cli/commands/diff.js +0 -23
  110. package/dist/adapters/inbound/cli/commands/journal.js +0 -32
  111. package/dist/adapters/inbound/cli/commands/progress.js +0 -55
  112. package/dist/adapters/inbound/cli/commands/realign.js +0 -28
  113. package/dist/adapters/inbound/cli/commands/show.js +0 -96
  114. package/dist/app/use_cases/abandon_work.js +0 -42
  115. package/dist/app/use_cases/approve_artifact.js +0 -197
  116. package/dist/app/use_cases/journal_events.js +0 -64
  117. package/dist/app/use_cases/land_change.js +0 -134
  118. package/dist/app/use_cases/new_project_doc.js +0 -48
  119. package/dist/app/use_cases/new_work_item.js +0 -75
  120. package/dist/app/use_cases/realign_done.js +0 -45
  121. package/dist/app/use_cases/realign_status.js +0 -106
  122. package/dist/app/use_cases/record_progress.js +0 -118
  123. package/dist/app/use_cases/show_elements.js +0 -18
  124. package/dist/app/use_cases/show_notes.js +0 -11
  125. package/dist/app/use_cases/show_scope.js +0 -51
  126. package/dist/app/use_cases/upstream_diff.js +0 -55
  127. package/dist/domain/approvals/agent_approval.js +0 -68
  128. package/dist/domain/approvals/evaluate.js +0 -36
  129. package/dist/domain/approvals/fingerprint.js +0 -52
  130. package/dist/domain/approvals/rebase.js +0 -39
  131. package/dist/domain/approvals/records.js +0 -50
  132. package/dist/domain/approvals/upstream_text.js +0 -36
  133. package/dist/domain/architecture_sections.js +0 -23
  134. package/dist/domain/check/decision_comments.js +0 -38
  135. package/dist/domain/decision_citations.js +0 -62
  136. package/dist/domain/edits/agents_file.js +0 -58
  137. package/dist/domain/edits/managed_tables.js +0 -60
  138. package/dist/domain/edits/progress_block.js +0 -33
  139. package/dist/domain/edits/status_lines.js +0 -52
  140. package/dist/domain/elements.js +0 -126
  141. package/dist/domain/journal.js +0 -109
  142. package/dist/domain/land/bookkeeping.js +0 -54
  143. package/dist/domain/land/merge_plan.js +0 -137
  144. package/dist/domain/land/text_ops.js +0 -66
  145. package/dist/domain/line_diff.js +0 -56
  146. package/dist/domain/project/artifact_ref.js +0 -42
  147. package/dist/domain/project/deltas.js +0 -49
  148. package/dist/domain/project/element_lookup.js +0 -124
  149. package/dist/domain/project/living_model.js +0 -55
  150. package/dist/domain/project/new_items.js +0 -48
  151. package/dist/domain/project/notes.js +0 -74
  152. package/dist/domain/project/plan_parts.js +0 -111
  153. package/dist/domain/project/progress.js +0 -43
  154. package/dist/domain/project/project_view.js +0 -72
  155. package/dist/domain/project/roadmap.js +0 -43
  156. package/dist/domain/project/scope_view.js +0 -134
  157. package/dist/domain/project/work_items.js +0 -68
  158. package/dist/domain/status/next_step.js +0 -181
  159. package/dist/domain/status/pending_rethink.js +0 -22
  160. package/dist/domain/status/verification.js +0 -29
  161. package/dist/domain/status/work_status.js +0 -125
  162. package/dist/domain/validation/decision_rules.js +0 -76
  163. package/dist/domain/validation/delta_rules.js +0 -81
  164. package/dist/domain/validation/element_rules.js +0 -104
  165. package/dist/domain/validation/future_rules.js +0 -40
  166. package/dist/domain/validation/living_rules.js +0 -99
  167. package/dist/domain/validation/plan_rules.js +0 -124
  168. package/dist/domain/validation/project_rules.js +0 -115
  169. package/dist/domain/validation/size_rules.js +0 -45
  170. package/dist/domain/validation/vision_rules.js +0 -41
  171. package/dist/domain/validation/work_item_rules.js +0 -175
  172. package/dist/domain/versions/realign_notes.js +0 -72
  173. package/dist/domain/versions/rule_versions.js +0 -29
  174. package/dist/domain/versions/scheduled_exceptions.js +0 -41
  175. package/skills/about/SKILL.md +0 -21
  176. package/skills/architect/SKILL.md +0 -49
  177. package/skills/architect/feature.md +0 -40
  178. package/skills/architect/project.md +0 -71
  179. package/skills/architect/tweak.md +0 -22
  180. package/skills/architect/walkthrough.md +0 -35
  181. package/skills/domain-language/SKILL.md +0 -37
  182. package/skills/envision/feature.md +0 -25
  183. package/skills/envision/intake.md +0 -28
  184. package/skills/envision/project.md +0 -24
  185. package/skills/explore/SKILL.md +0 -39
  186. package/skills/formats/reference/architecture.md +0 -84
  187. package/skills/formats/reference/config.md +0 -80
  188. package/skills/formats/reference/durable-docs.md +0 -74
  189. package/skills/formats/reference/specs.md +0 -65
  190. package/skills/formats/reference/work-items.md +0 -100
  191. package/skills/formats/templates/adr.md +0 -7
  192. package/skills/formats/templates/change.md +0 -29
  193. package/skills/formats/templates/glossary.md +0 -8
  194. package/skills/formats/templates/roadmap.md +0 -32
  195. package/skills/formats/templates/spec.md +0 -11
  196. package/skills/formats/templates/standalone-change.md +0 -46
  197. package/skills/grilling/SKILL.md +0 -90
  198. package/skills/grilling/illustrating.md +0 -38
  199. package/skills/improve/SKILL.md +0 -51
  200. package/skills/land/SKILL.md +0 -48
  201. package/skills/next/SKILL.md +0 -31
  202. package/skills/plan/SKILL.md +0 -62
  203. package/skills/plan/tasks.md +0 -35
  204. package/skills/plan/test-plan.md +0 -14
  205. package/skills/realign/SKILL.md +0 -37
  206. package/skills/realign/notes/0.0.10.md +0 -131
  207. package/skills/realign/notes/0.0.11.md +0 -15
  208. package/skills/realign/notes/0.0.12.md +0 -31
  209. package/skills/realign/notes/0.0.13.md +0 -11
  210. package/skills/realign/notes/0.0.2.md +0 -69
  211. package/skills/realign/notes/0.0.3.md +0 -11
  212. package/skills/realign/notes/0.0.4.md +0 -27
  213. package/skills/realign/notes/0.0.5.md +0 -38
  214. package/skills/realign/notes/0.0.6.md +0 -44
  215. package/skills/realign/notes/0.0.7.md +0 -11
  216. package/skills/realign/notes/0.0.8.md +0 -97
  217. package/skills/realign/notes/0.0.9.md +0 -59
  218. package/skills/realign/notes.md +0 -40
  219. package/skills/rethink/SKILL.md +0 -62
  220. package/skills/rethink/levels.md +0 -54
  221. package/skills/roadmap/SKILL.md +0 -54
  222. package/skills/roles/auditor.md +0 -35
  223. package/skills/roles/design-reviewer.md +0 -43
  224. package/skills/roles/design-rubric.md +0 -41
  225. package/skills/roles/plan-rubric.md +0 -11
  226. package/skills/roles/surveyor.md +0 -41
  227. package/skills/roles/verifier.md +0 -42
  228. package/skills/triage/SKILL.md +0 -37
  229. package/skills/verify/SKILL.md +0 -45
  230. package/skills/verify/manual-test.md +0 -23
  231. package/src/adapters/inbound/cli/argument_files.ts +0 -29
  232. package/src/adapters/inbound/cli/commands/diff.ts +0 -23
  233. package/src/adapters/inbound/cli/commands/journal.ts +0 -32
  234. package/src/adapters/inbound/cli/commands/progress.ts +0 -55
  235. package/src/adapters/inbound/cli/commands/realign.ts +0 -28
  236. package/src/adapters/inbound/cli/commands/show.ts +0 -96
  237. package/src/app/use_cases/abandon_work.ts +0 -42
  238. package/src/app/use_cases/approve_artifact.ts +0 -197
  239. package/src/app/use_cases/journal_events.ts +0 -64
  240. package/src/app/use_cases/land_change.ts +0 -134
  241. package/src/app/use_cases/new_project_doc.ts +0 -48
  242. package/src/app/use_cases/new_work_item.ts +0 -75
  243. package/src/app/use_cases/realign_done.ts +0 -45
  244. package/src/app/use_cases/realign_status.ts +0 -106
  245. package/src/app/use_cases/record_progress.ts +0 -118
  246. package/src/app/use_cases/show_elements.ts +0 -18
  247. package/src/app/use_cases/show_notes.ts +0 -11
  248. package/src/app/use_cases/show_scope.ts +0 -51
  249. package/src/app/use_cases/upstream_diff.ts +0 -55
  250. package/src/domain/approvals/agent_approval.ts +0 -68
  251. package/src/domain/approvals/evaluate.ts +0 -36
  252. package/src/domain/approvals/fingerprint.ts +0 -52
  253. package/src/domain/approvals/rebase.ts +0 -39
  254. package/src/domain/approvals/records.ts +0 -50
  255. package/src/domain/approvals/upstream_text.ts +0 -36
  256. package/src/domain/architecture_sections.ts +0 -23
  257. package/src/domain/check/decision_comments.ts +0 -38
  258. package/src/domain/decision_citations.ts +0 -62
  259. package/src/domain/edits/agents_file.ts +0 -58
  260. package/src/domain/edits/managed_tables.ts +0 -60
  261. package/src/domain/edits/progress_block.ts +0 -33
  262. package/src/domain/edits/status_lines.ts +0 -52
  263. package/src/domain/elements.ts +0 -126
  264. package/src/domain/journal.ts +0 -109
  265. package/src/domain/land/bookkeeping.ts +0 -54
  266. package/src/domain/land/merge_plan.ts +0 -137
  267. package/src/domain/land/text_ops.ts +0 -66
  268. package/src/domain/line_diff.ts +0 -56
  269. package/src/domain/project/artifact_ref.ts +0 -42
  270. package/src/domain/project/deltas.ts +0 -49
  271. package/src/domain/project/element_lookup.ts +0 -124
  272. package/src/domain/project/living_model.ts +0 -55
  273. package/src/domain/project/new_items.ts +0 -48
  274. package/src/domain/project/notes.ts +0 -74
  275. package/src/domain/project/plan_parts.ts +0 -111
  276. package/src/domain/project/progress.ts +0 -43
  277. package/src/domain/project/project_view.ts +0 -72
  278. package/src/domain/project/roadmap.ts +0 -43
  279. package/src/domain/project/scope_view.ts +0 -134
  280. package/src/domain/project/work_items.ts +0 -68
  281. package/src/domain/status/next_step.ts +0 -181
  282. package/src/domain/status/pending_rethink.ts +0 -22
  283. package/src/domain/status/verification.ts +0 -29
  284. package/src/domain/status/work_status.ts +0 -125
  285. package/src/domain/validation/decision_rules.ts +0 -76
  286. package/src/domain/validation/delta_rules.ts +0 -81
  287. package/src/domain/validation/element_rules.ts +0 -104
  288. package/src/domain/validation/future_rules.ts +0 -40
  289. package/src/domain/validation/living_rules.ts +0 -99
  290. package/src/domain/validation/plan_rules.ts +0 -124
  291. package/src/domain/validation/project_rules.ts +0 -115
  292. package/src/domain/validation/size_rules.ts +0 -45
  293. package/src/domain/validation/vision_rules.ts +0 -41
  294. package/src/domain/validation/work_item_rules.ts +0 -175
  295. package/src/domain/versions/realign_notes.ts +0 -72
  296. package/src/domain/versions/rule_versions.ts +0 -29
  297. package/src/domain/versions/scheduled_exceptions.ts +0 -41
  298. package/templates/init/gitattributes +0 -2
@@ -1,21 +0,0 @@
1
- ---
2
- name: cruze-about
3
- description: Explains what Cruze is and what it can do in this repository. Use when the user asks about Cruze, its commands, or how to start working with it.
4
- ---
5
-
6
- # About Cruze
7
-
8
- Cruze is a spec-driven development framework. It keeps one living model of the system (vision, glossary, architecture and behaviour specs in `docs/`) and delivers work as small changes against that model, each merged back into it when it lands.
9
-
10
- This installation is an early preview. It has:
11
-
12
- - The `cruze` CLI: `cruze init` sets up a repository, `cruze install` updates the skills after an upgrade, and `cruze help` lists the commands that validate, approve, check, trace and land work. Each prints its result on stdout, as JSON when stdout isn't a terminal, or as text with `--text`. A command refuses an option it doesn't take, so check `cruze help` when one is refused.
13
- - `cruze-formats`, the format of every Cruze document.
14
- - Knowledge skills holding the standards to design and code to: `cruze-hexagonal-design`, `cruze-behavioural-testing`, `cruze-grilling`, `cruze-domain-language`, `cruze-dependency-approval` and `cruze-research`.
15
- - The workflow: `explore` (optional), `envision` for the what, `architect` for the how, `roadmap` for the order of work, then `plan`, `build`, `verify` and `land` for each change. `triage` handles bugs, `rethink` steps back from anywhere, and `next` says what to do now.
16
-
17
- When the user asks what Cruze can do:
18
-
19
- 1. Read `.cruze/config.yaml` and report the project name and Cruze version.
20
- 2. Run `cruze --version`, and say whether it differs from the version in `.cruze/config.yaml`. When `cruze` isn't found, tell the user to install it globally as https://github.com/PrintPractical/cruze#quick-start describes; every Cruze skill needs it.
21
- 3. Run `cruze next` and explain the step it names, in the context of the whole workflow.
@@ -1,49 +0,0 @@
1
- ---
2
- name: cruze-architect
3
- description: Decides how to build and how big, at project scope (domain model, contexts, ports, adapters, module map, layer rules, ADRs and the roadmap with its foundation, the first change, which the user chooses), feature scope (the architecture delta and its split into changes) or tweak scope (a standalone change), ending with a design review and a walkthrough for your approval.
4
- ---
5
-
6
- # Architect
7
-
8
- Architect decides the how and the how big. It designs the domain, the ports and adapters, and where every element lives in the source tree, before any code exists. It ends with the one heavy human gate, the design walkthrough: a short overview in plain terms, after which the user reads the design documents in full and approves or comments.
9
-
10
- ## Steps
11
-
12
- 1. **Pick the scope.**
13
- - **Project scope:** `docs/architecture.md` doesn't exist yet. Reworking an approved architecture goes through `rethink` instead.
14
- - **Feature scope:** the user names a feature, or a feature folder exists without changes.
15
- - **Tweak scope:** the user asks for a small change to existing behaviour. When the design shows it needs any architecture change, it becomes a feature: say so and continue at feature scope.
16
- - Done when you can say which, and why.
17
- 2. **Check what it builds on.** Run `cruze status`. `docs/vision.md` must be approved and current. At feature and tweak scope, `docs/architecture.md` must be approved and current as well. When a document isn't, stop and name the step that fixes it: `envision` for the vision, and `rethink` for an architecture that changed since its approval.
18
- 3. **Read the living model.** Read `docs/vision.md`, `docs/glossary.md`, `docs/architecture.md` as "Reading it" in `.agents/skills/cruze-formats/reference/architecture.md` says, the ADRs in `docs/adr/`, `docs/roadmap.md`, `.cruze/config.yaml`, and the specs and code the work touches. Take up the notes and the parts of the user's input handed to this work, as "Taking up a hand-off later" in `.agents/skills/cruze-envision/intake.md` describes: at project scope, `cruze show --notes architect`, `cruze show --notes roadmap` and `cruze show --notes project`; at feature or tweak scope, the Notes section of `cruze show <feature>`. Read any other note the user points to.
19
- 4. **Load the standards.** Read these, and follow them for the rest of this step:
20
- - `.agents/skills/cruze-hexagonal-design/SKILL.md`
21
- - `.agents/skills/cruze-grilling/SKILL.md`
22
- - `.agents/skills/cruze-domain-language/SKILL.md`
23
- - `.agents/skills/cruze-research/SKILL.md`
24
- - `.agents/skills/cruze-dependency-approval/SKILL.md`
25
- - `.agents/skills/cruze-formats/reference/architecture.md`
26
- 5. **Design.** Follow the scope's procedure: [project.md](project.md), [feature.md](feature.md) or [tweak.md](tweak.md). Tweak scope ends there and hands off to `plan`.
27
- 6. **Review the design.** Run the design review in `.agents/skills/cruze-roles/SKILL.md`, with the design reviewer role. Done when every finding has a journaled disposition and no blocker is open without the user's decision.
28
- 7. **Hand the design to the user.** Follow [walkthrough.md](walkthrough.md): one overview message, then the documents to read in full. Apply what the user changes, run `cruze validate` again, and say what changed.
29
- 8. **Record the approval.** Only after the user says they approve, run the scope's `cruze approve` command and quote its result, then commit. At project scope, the roadmap follows as its own approval, described in [project.md](project.md).
30
-
31
- ## Rules
32
-
33
- - **Design for the roadmap, build for the phase.** Read the whole feature map and roadmap. When a later feature will need a seam, name it now in a `Future` fact, such as "transport will gain MQTT in phase 3, so inbound adapters stay behind `CommandSource`". Build only what the current work needs.
34
- - **Answer to the vision's long-term intent.** Read `## Principles` and `## Must stay possible` in `docs/vision.md`. Every design follows each principle. Check the design against every `LATER` row, not only those in its area: nothing in it may rule one out. Where the design touches a capability's area, leave the room its row names, in a `Future` fact that cites its ID, and build nothing for it. A design that would depart from a principle or close off a capability goes to the user first, as "Long-term intent" in `.agents/skills/cruze-grilling/SKILL.md` describes.
35
- - **Adopt before you build.** Before designing any component that isn't domain logic, run the researcher role from `.agents/skills/cruze-roles/SKILL.md` on it. Record every decision in `## Adopt or build`, or at project scope in the adapter's `Adopts` fact. Every new dependency goes to the user through the dependency-approval skill.
36
- - **Every element with code has a home.** Each `ENT`, `UC`, `PORT`, `ADP` and `FLOW` names its `Module` and `File`. Each file has one responsibility. Never split an owner across files to keep them short.
37
- - **Comply with the references.** When the project must follow an external document, such as a protocol specification, it is listed under `references:` in `.cruze/config.yaml`; at project scope, ask the user whether there is one, and list it with what it governs. Read the parts each element relies on, and cite the section in the element's body, such as `RFC 4254 §5.2`, so plan, build and the reviewers can check it.
38
- - **Ask, challenge and defer** as the grilling skill describes. Contexts, ports, public contracts, dependency direction and dependencies are always the user's decisions.
39
- - **Stepping back is normal.** When the design shows that the vision or an earlier decision is wrong, stop and say so. The vision changes through `envision`, and an approved architecture through `rethink`.
40
-
41
- ## Next step
42
-
43
- - Project scope: `plan` for the foundation change.
44
- - Feature scope: `plan` for the feature's first change.
45
- - Tweak scope: `plan` for the standalone change.
46
-
47
- Plan branches from main, so get the approved design onto main first, as a pull request or a merge, together with the vision or feature map it builds on. A plan branched from an unmerged design branch carries the design into the change's pull request.
48
-
49
- Start it in a new session, so its context starts empty.
@@ -1,40 +0,0 @@
1
- # Architect at feature scope
2
-
3
- The result is a `feature.md` with a complete architecture delta and an ordered list of changes, approved at the walkthrough. Formats: `.agents/skills/cruze-formats/reference/work-items.md` and `.agents/skills/cruze-formats/reference/architecture.md`.
4
-
5
- ## Settle what it does
6
-
7
- 1. **Find the feature folder.** When `envision "<feature>"` created one, read its intent, settled decisions and spec delta.
8
- 2. **Or settle it now.** When there is no folder, follow `.agents/skills/cruze-envision/feature.md` from its step 2 up to, but not including, its step 8. That puts the feature on the roadmap, checks its blockers, creates the folder and settles the intent and spec delta.
9
-
10
- ## Design the delta
11
-
12
- 3. **Trace each scenario through the model.** Find the elements with `cruze show --index`, and read each one the path crosses with `cruze show <ID>`. For every scenario in the spec delta, name the inbound adapter it enters through, the use case that runs it, the domain elements that decide it, and the ports it crosses. Done when every scenario has a path, and each missing piece is a named gap.
13
- 4. **Place each gap,** following "Placing an owner" in the hexagonal-design skill. Prefer extending an existing element when it is the right owner. Each change to the living model becomes an operation under `## Architecture delta`:
14
- - `ADDED` for a new element, with its full body.
15
- - `MODIFIED` for an existing element, with its full new body. Copy the current body from `cruze show <ID>` and edit it, so nothing is lost by accident.
16
- - `REMOVED` with a `Reason`, for an element the feature retires.
17
- - When the delta changes or retires a rule, find every element, ADR, decision and sentence in the living docs and this feature that states the old rule, and modify or reword each.
18
- - A new use of an existing port operation, such as the clock stamping a new kind of time, is a `MODIFIED` port whose `Operations` name the use, and each use case lists every port it calls under `Uses`.
19
- 5. **Link behaviour to design.** Each use case that runs a requirement lists it under `Serves`. Add or modify a `FLOW` for each key scenario, with `Serves` naming its scenarios and the failure paths they need.
20
- 6. **Research and decide.** For each new component that isn't domain logic, run the researcher role and record a row in `## Adopt or build`. Take every new dependency to the user. Then verify every claim the design relies on, following step 7 of adopt or build in `.agents/skills/cruze-research/SKILL.md`. Done when no claim in the design is unverified.
21
- 7. **Keep later seams open.** Check the design against every row of the vision's `## Must stay possible`: nothing in it may rule one out. When the feature map shows a later feature that will extend this area, or a capability needs room in it, record the seam in a `Future` fact on the element that keeps it, citing the `LATER` ID or the feature's slug, and don't build it.
22
- 8. Done when `cruze validate` reports no errors and no `decision-citation` warning in the delta itself, and every cited ID exists in the living docs or this delta.
23
-
24
- ## Split it into changes
25
-
26
- 9. **Slice vertically.** Each change delivers scenarios end to end, through every layer they need, and can land on its own. Every change pays for its own plan review, code review, verifier run and land, so slice by what is worth that cost, not by the smallest piece that could land. The feature's first change proves the design end to end; later changes widen it in steps of real work.
27
- 10. **Fill the Changes table.** Give each row a number and a slug, such as `01-local-serial`. List the scenario and requirement IDs it `Delivers`, the architecture IDs it `Builds`, any IDs it `Removes`, and the changes it `Depends on`.
28
- - A change builds an element only when its scenarios prove the whole element. Each delta element is built by exactly one change, so when an element's duties arrive in different changes, split it into elements that each arrive whole, such as frame limits split out of a concurrency rule.
29
- - `Depends on` names every earlier change that builds something this change's scenarios need.
30
- 11. **Cover everything exactly once.** Every delta ID appears in exactly one change. A module the delta adds, or one still `planned` in the living docs, is built by the first change that writes a file in it. A module already `built` isn't listed. Done when `cruze validate` reports no errors for the feature, and no `not-designed` warning.
31
- 12. **Size each change, and the feature.** Aim for changes of about 8 to 25 tasks, each one a sitting's worth of review and verify:
32
- - **Merge** a change that builds fewer than 3 elements into the change it continues, when they share adapters or screens, or form a chain where each depends on the one before. Several small changes to the same screens are one change. `cruze validate` warns `change-too-small`.
33
- - **Split** a change that delivers more than 30 scenarios, or would need more than 25 tasks, or touches more than one context's domain. One verifier run and one code review can't hold more. `cruze validate` warns `change-too-large`, and `plan-too-large` once a plan passes 25 tasks.
34
- - A feature of more than 6 changes is more than one design review can hold: split it into features that each serve part of its goals, and run `cruze features add` for the later ones. `cruze validate` warns `feature-size` until it is split.
35
-
36
- The thresholds are the defaults under `changes:` in `.cruze/config.yaml`; a project can tune them.
37
-
38
- Done when `cruze validate` reports no `change-too-small`, `change-too-large` or `feature-size` warning. When the user accepts one, record it twice: a `D<n>` line under the feature's `## Settled decisions` saying why, and the item under `changes.exceptions` in `.cruze/config.yaml` with the same reason, which is what stops the warning. `cruze approve` refuses an item with a warning still standing (`size-unaccepted`). After approval, only a rethink can split a change.
39
-
40
- Then continue with the review and walkthrough steps of the skill. When the user approves, run `cruze approve <feature>` and quote its result. The command takes the feature's full ID, such as `2026-09-25-open-console`, or its slug when no other active item shares it.
@@ -1,71 +0,0 @@
1
- # Architect at project scope
2
-
3
- The result has four parts, reviewed together and shown at one walkthrough:
4
-
5
- - `docs/architecture.md`, the living model of the whole system, which the user approves.
6
- - The `layers:` rules in `.cruze/config.yaml`.
7
- - `docs/roadmap.md` for the first release, which the user approves as its own step.
8
- - The foundation change, the first one the project builds, designed and ready for `plan`. It is approved later, once `plan` has filled its test plan and tasks.
9
-
10
- ## Design the architecture
11
-
12
- 1. **Create it.** Run `cruze new architecture`. Follow its sections in order, one at a time, and grill the user on each section's material decisions before writing it.
13
- 2. **Bounded contexts (`CTX`).** Group the vision's capabilities into contexts by which language and rules belong together. Most small systems have one to three. Each context has a `Purpose`, and a `Depends on` naming what it uses from other contexts. Regroup the glossary's terms under one `##` heading per context.
14
- 3. **The foundation.** Settle with the user what the first change builds, as "Choosing the foundation" says. Then design the whole release end to end, so the foundation is shaped by everything that will use it, at two depths:
15
- - **In full** for what the foundation builds: every fact steps 4 to 8 ask for.
16
- - **At the boundaries** for the rest: each part's use cases, the operations and data that pass between parts, and the flows that cross them, with their main results and errors. The specifics inside, such as limits, edge cases, messages and adapter technology, stay open, each named in a `Future` fact, for the feature that builds the part.
17
- 4. **Domain model (`ENT`).** For each context, model the concepts the vision and glossary name, including invariants, relationships with cardinality, and `States` for anything whose valid operations depend on its state. Add the `VIEW-domain-model` class diagram.
18
- 5. **Use cases (`UC`).** Write one per operation a caller can ask for in this release, each with its input, output, errors and the ports it uses.
19
- 6. **Ports (`PORT`).** Define every capability the use cases need from outside, named by capability. Write each operation's contract, following `.agents/skills/cruze-hexagonal-design/contracts.md`. Add driving ports only where the hexagonal-design skill calls for them.
20
- 7. **Adapters (`ADP`).** Name the technology behind each driven port and each inbound adapter that drives use cases. Run the researcher role on every adapter's technology first, and record the result in the adapter's `Adopts` fact. Take every new dependency to the user.
21
- 8. **Flows (`FLOW`).** Write a `sequenceDiagram` for each of the 2 to 5 most important interactions, including their failure paths. Leave out `Serves` until scenarios exist.
22
- 9. **Modules (`MOD`).** Name the kind of system in the Overview, and choose the layout that is normal for that kind and the language, following `.agents/skills/cruze-hexagonal-design/shapes.md` and the language file. Give each context the fewest modules that keep its layer rules, usually one `core` module and its adapters, and give the shared CLI shell and the composition root the `system` scope. Add a `system` module in the `composition` layer for the build and CI files, such as the package manifest and `.github/workflows/`, so the tasks that write them have an owner. Every source file must fall inside some module's `Path`, including namespace files that join a context's modules, such as `src/inventory/mod.rs` or `index.ts`; list them in a `composition` module's `Path` when no other module fits. Every module gets a `Path` and a `Layer`, and every element above gets its `Module` and `File`.
23
- 10. **Dependency rules (`RULE`).** State what may import what, in one or two sentences each.
24
- 11. **Cross-cutting concerns (`XC`).** Cover errors, configuration, logging, concurrency and security, plus build and delivery (CI, formatting, linting). Read `.agents/skills/cruze-hexagonal-design/runtime.md` for concurrency.
25
- 12. **Decisions.** Write an ADR, with `cruze new adr <slug> --title "<title>"`, for each decision that passes the ADR test. Record the other project decisions as `D<n>` lines under `## Decisions`, including each design choice handed to `architect` that the user keeps.
26
- 13. **Overview (`VIEW-context`).** Draw the context diagram last, once the adapters and external systems are known.
27
-
28
- Done when `cruze validate` reports no errors in `docs/architecture.md`. At this stage it warns that elements have no status yet; approval adds the statuses.
29
-
30
- ## Write the layer rules
31
-
32
- Fill `source`, `tests` and `layers:` in `.cruze/config.yaml` from the module map, following `.agents/skills/cruze-formats/reference/config.md`. Give each module's `Path` exactly one layer, and make each layer's `may_import` match the `RULE` elements. Done when `cruze validate` reports no config errors and no `module-layer` warnings.
33
-
34
- ## Ignore build output
35
-
36
- Add the language's build output and tool caches to `.gitignore` now, such as `/target` for Rust or `node_modules/` for Node, so no later commit sweeps them in.
37
-
38
- ## Plan the release
39
-
40
- 1. **Create the roadmap.** Run `cruze new roadmap`. Agree the first release with the user: its name, and which features from the vision's feature map it delivers. Take up the delivery order handed to `roadmap`, as for any hand-off.
41
- 2. **Order the work.** Phase 1 holds only the `foundation` change. Later phases hold the release's features. Done when the roadmap passes the rules in step 5 of `.agents/skills/cruze-roadmap/SKILL.md`.
42
- 3. **Design the foundation.** Run `cruze new change foundation --title "<what it builds>"`. Then:
43
- - Size the elements it builds for the foundation. Anything it lists under `Builds` is marked built when it lands, so write those elements, such as the CLI adapter or the first entity, at the size the foundation needs. Record their planned growth in `Future` facts; later features grow them through `MODIFIED` operations.
44
- - Build the kind the user chose, nothing more. It also makes CI real: `cruze init` already runs `cruze validate`, `cruze check --ci` and `cruze trace --all` there, and the foundation adds the language's format, lint, build and test steps. `plan` fills `commands:` in `.cruze/config.yaml` for it.
45
- - Write its `## Intent`.
46
- - In `## Adopt or build`, add a row for each tool it adds that no adapter owns, such as the test framework, linter or CI runner.
47
- - Write the `## Spec delta` for the one capability it delivers, with scenarios.
48
- - In `## Architecture delta`, link the new behaviour to the design: a `MODIFIED` operation for each use case that serves its requirements, adding them to `Serves`, and for each flow that runs its scenarios, adding them to its `Serves`. Each body is the element's full text from `docs/architecture.md` with that fact added.
49
- - Fill `## Scope`. `Delivers` lists its scenarios. `Builds` lists the elements it modifies, the other architecture elements it builds, and every module whose first files it writes.
50
- - Leave the test plan and tasks to `plan`.
51
- - Done when `cruze validate` reports only the change's `not-planned` warning.
52
-
53
- ## Choosing the foundation
54
-
55
- The foundation is the first change, which everything else builds on and the user tries first. Which kind fits is the user's decision. Ask it as a grilling question, sketching each option in this project's terms, with your recommendation:
56
-
57
- - **Product shell:** every screen, page or command the release offers, wired together, showing sample data, with no logic behind it yet. It suits settling look and flows before logic.
58
- - **Core component:** the component the others depend on, working for real through its own interface, such as a server with its command-line client. Later phases add one component at a time, and shared machinery, such as a framework, after two of its users. It suits a system of several components.
59
- - **Walking skeleton:** one use case through every layer: an inbound adapter, its domain, a driven adapter and the composition root. It suits a small system.
60
-
61
- It must fit the change size limits in `.cruze/config.yaml`; when it doesn't, settle with the user what moves to Phase 2. Record the choice as a `D<n>` line in the architecture's `## Decisions`.
62
-
63
- ## Review, walk through and approve
64
-
65
- 1. Run the design review and the walkthrough from the skill's steps 6 and 7, over the architecture, the config, the roadmap and the foundation together.
66
- 2. When the user approves the design, run `cruze approve architecture`. It marks every element `planned`.
67
- 3. Confirm the release ordering with the user, then run `cruze approve roadmap`.
68
- 4. Add an `## Architecture` section to `README.md`: one sentence on the system's shape, the `VIEW-context` diagram, and a link to `docs/architecture.md`.
69
- 5. Commit, with a message such as `docs: approve the architecture and roadmap`.
70
-
71
- Done when `cruze status` shows the vision, the architecture and the roadmap approved.
@@ -1,22 +0,0 @@
1
- # Architect at tweak scope
2
-
3
- A tweak changes existing behaviour without changing the architecture. The result is a standalone change with its intent, spec delta and scope, ready for `plan`. It has no design review and no walkthrough, because nothing structural changes; the plan review in `plan` covers it.
4
-
5
- 1. **Name the behaviour.** Find the requirements and scenarios in `docs/specs/` that the tweak changes, and the use cases that `Serve` them. Done when you can name every one.
6
- 2. **Check that it is a tweak.** Trace the new behaviour through `docs/architecture.md`. It is not a tweak when it needs a new requirement, which a use case would have to serve, or any new or changed element (an entity invariant, a use case's input or errors, a port operation, an adapter or a module). Tell the user, and continue at feature scope with [feature.md](feature.md), which puts the feature on the roadmap and creates its folder.
7
- 3. **Create the change.** Run `cruze new change <slug> --title "<title>"`, adding `--roadmap <slug>` when the tweak is a roadmap item.
8
- 4. **Settle the behaviour.** Grill the user on anything open: the exact new behaviour, its edge cases, and what a user now observes. Record decisions under the change's `## Settled decisions` as they settle.
9
- 5. **Write the design sections,** and remove every template guide, including any unused `D1` line.
10
- - `## Intent`: why, in the user's words, and what is out of scope.
11
- - `## Adopt or build`: the table header only, since a tweak adds no components.
12
- - `## Spec delta`: `MODIFIED` requirements with their full new bodies, including every scenario each one keeps.
13
- - `## Architecture delta`: `None.`
14
- - `## Scope`: `Delivers` lists every new or changed scenario. `Builds` stays empty unless the tweak builds `planned` elements.
15
- - Leave the test plan and tasks to `plan`.
16
- 6. **Confirm.** Summarize the new behaviour and ask the user to confirm it.
17
-
18
- ## A prefactor
19
-
20
- A prefactor comes from an architecture-level rethink: the architecture already says what the code must become, and one or more built elements went back to `planned`. It changes structure, not behaviour. Create it as in step 3, then write its intent, set `## Spec delta` and `## Architecture delta` to `None.`, and list the replanned elements under `Builds`. The existing behaviour tests are its safety net: they must pass unchanged.
21
-
22
- Done when the user has confirmed, `cruze validate` reports only the change's `not-planned` warning, and the change is committed.
@@ -1,35 +0,0 @@
1
- # The design walkthrough
2
-
3
- The walkthrough hands the design to the user in one message: a short overview in plain terms, then the documents to review in full. The documents are the design, and the user reads them faster than you can retell them, so present the whole design at once and wait for one answer: approval, or comments.
4
-
5
- At feature scope, cover only what the feature adds, changes or removes. At project scope, cover the whole architecture, the layer rules, the roadmap and the foundation.
6
-
7
- ## The overview
8
-
9
- Write it in the glossary's terms, as what callers can do and what happens when they do, not as a list of elements. Keep the prose to what the user can read in a minute, and open it with the line that says where things stand, from `.agents/skills/cruze-grilling/illustrating.md`.
10
-
11
- 1. **What it does.** The intent in two sentences. Then one line per use case, or at feature scope per requirement: who asks for what, what they get, and the main way it fails.
12
- 2. **What it touches.** Each new external system, and each new dependency named with its purpose and the approval behind it. Also each component you chose to build yourself, with the reason.
13
- 3. **What it looks like.** Illustrated as `.agents/skills/cruze-grilling/illustrating.md` says:
14
- - A plain-text diagram of the main scenario crossing the design: the inbound adapter, the use case, the domain elements and the ports, marking what is new.
15
- - A code sketch, in the project's language, of what the new and changed elements look like: the port operations and use case signatures with their errors, the main entity, and the call each kind of caller makes, a component in the same process included, with the types it passes as they will be declared. One project approved orchestrators that passed JSON values inside the daemon, which no sketch showed, and rejected it at build a day later.
16
- 4. **The slices.** The changes in order, one line each, saying what each delivers and why the first is first. At project scope, the roadmap's phases and the foundation instead, with the kind the user chose.
17
- 5. **What is yours to decide.** The review findings the roles skill brings to the user, any `cruze validate` warning still standing, such as a change over its size limit, any point where a fresh implementer could still build something different, and any rule you challenged that the user overrode. Then, one line each, every decision the design takes that no answer of the user's settled, carried-over ones included, and every value the system's own components pass each other untyped or encoded, such as a JSON value. Approval rests on this overview: one feature's documents ran to 25,000 words.
18
-
19
- ## The documents
20
-
21
- List each file the user should read in full, with the sections that changed:
22
-
23
- - Feature scope: the feature's `feature.md`, and the ADRs it adds.
24
- - Project scope: `docs/architecture.md`, the `layers:` in `.cruze/config.yaml`, `docs/roadmap.md`, the foundation's `change.md`, and the ADRs in `docs/adr/`.
25
-
26
- The documents' diagrams are Mermaid. Say where the user can render them, such as an editor preview or GitHub, rather than pasting them; the overview's plain-text sketches are for reading in the conversation.
27
-
28
- End the message with: "Read these in full, then tell me what to change, or approve. Do you approve this design?"
29
-
30
- ## Ending
31
-
32
- 1. Answer a question from the documents, pointing to the file and section, and answer only what was asked.
33
- 2. A request for changes is not an approval. Apply the changes and run `cruze validate`. When the user edited the documents themselves, read their diff and run `cruze validate` on it. When the changes touch placement, dependency direction, adopt-or-build decisions, port contracts or flows, run a new design review on the diff alone. Then say in a few lines what changed and where, and ask again.
34
- 3. When the user rejects the design outright, don't approve anything. Ask what is wrong. When the problem is what to build, go back to `envision`; when it is the whole approach, restart this step's design; when the user wants to stop, leave the work unapproved and say how to resume.
35
- 4. Done when the user says they approve.
@@ -1,37 +0,0 @@
1
- ---
2
- name: cruze-domain-language
3
- description: How to build the project's shared language in docs/glossary.md and use it the same way in conversation, documents, IDs and code. Use when a new domain term comes up, when the user or a document uses a vague, overloaded or conflicting word, when naming an element, ID, type, module, function or test, or when writing or reviewing the glossary.
4
- ---
5
-
6
- # Domain language
7
-
8
- Use one word per concept, everywhere: in conversation, specs, the architecture, IDs and code. `docs/glossary.md` holds those words, in the format given in `.agents/skills/cruze-formats/reference/durable-docs.md`.
9
-
10
- ## While designing
11
-
12
- 1. Read the glossary before the conversation starts, and use its words in your own questions and documents.
13
- 2. When the user uses a term differently from the glossary, say so immediately: "The glossary defines a hop as one link in a console path, but you seem to mean the jump host itself. Which is it?"
14
- 3. When a word is vague or overloaded, such as account, item, session, handle or data, propose one precise term and say what it excludes.
15
- 4. Test a boundary between two concepts with a concrete edge case: "A device reachable over two console paths: is that one device or two?"
16
- 5. When the user says how something works, check the living docs and the code. Point out any contradiction instead of choosing a side.
17
- 6. Write a term into the glossary the moment it settles. The glossary isn't approval-gated, so adding a term never makes a design stale.
18
-
19
- Done when every domain noun in the documents this step writes is in the glossary or is a general programming term.
20
-
21
- ## What belongs
22
-
23
- - Terms specific to this domain. General programming concepts, such as timeout, retry or cache, stay out unless the domain gives them a special meaning.
24
- - A definition says what the thing is, in one or two sentences a domain expert would accept. It never mentions types, files, tables or other implementation.
25
- - Pick one word per concept and list its synonyms under `_Avoid_`.
26
- - Group terms under their bounded context. A word that means different things in two contexts gets an entry in each, and the translation happens where the contexts meet.
27
-
28
- ## Using the language
29
-
30
- - Element titles and ID names use glossary terms: `ENT-inventory.console-path`, not `ENT-inventory.route`.
31
- - Types, modules, functions and tests in code use the same words, in the language's naming style: `ConsolePath` in `console_path.rs`.
32
- - A word listed under `_Avoid_` in a new title, ID, type or test name is a review finding. Rename it, or settle the term with the user.
33
- - When a term is renamed, update the glossary and rename element titles freely. IDs keep their old wording, because an ID never changes. Code follows through a change like any other.
34
-
35
- ## Terms and decisions
36
-
37
- The glossary holds language, not decisions. Record decisions as `.agents/skills/cruze-grilling/SKILL.md` describes.
@@ -1,25 +0,0 @@
1
- # Envision at feature scope
2
-
3
- The result is a feature folder whose `feature.md` holds the intent, the settled decisions and the spec delta, ready for `architect`. Formats: `.agents/skills/cruze-formats/reference/work-items.md` and `.agents/skills/cruze-formats/reference/specs.md`.
4
-
5
- 1. **Check the project.** `cruze status` must show `docs/vision.md` approved. If it isn't, stop and run envision at project scope first.
6
- 2. **Find the feature.** Look for it in the roadmap's phases and on the feature map's future list.
7
- - When it isn't in the roadmap's phases, ask the user whether it belongs in this release. If it does, add it by following "Adding an item" in `.agents/skills/cruze-roadmap/SKILL.md`, and re-approve the roadmap. If it doesn't, put it on the future list with `cruze features add` and stop here.
8
- - When its `Blocked by` items haven't landed (see the roadmap's `## Status`), tell the user. Continue only if they want to design ahead, and record that as a settled decision.
9
- 3. **Create the folder.** When the feature has no folder yet, run `cruze new feature <slug> --title "<title>" --roadmap <slug>`, using its roadmap slug. When a folder exists, edit its `feature.md`.
10
- 4. **Read the behaviour it touches.** Read the specs in `docs/specs/` for every capability the feature changes, so you know each requirement and scenario it builds on. Run `cruze show --notes <slug>`, and take up the notes about this feature and the parts of the user's input handed to it, open questions included, as "Taking up a hand-off later" in [intake.md](intake.md) describes.
11
- 5. **List the open decisions:**
12
- - **Intent:** the problem and outcome in the user's words, who it is for, the constraints, and what is out of scope.
13
- - **Requirements:** each behaviour the feature adds, changes or removes, and the capability it belongs to. It goes in an existing capability when the behaviour fits one; otherwise it starts a new capability.
14
- - **Scenarios:** for each requirement, the main case, each edge and failure case a user will meet, and what they observe in each. Invent concrete edge cases to test the boundaries.
15
- - **Later:** the vision's `PRINCIPLE` and `LATER` rows this feature touches, and the capabilities it may grow into, asked about as [possibilities.md](possibilities.md) describes. A feature that adds sign-in asks about single sign-on and multi-factor authentication, for example.
16
- 6. **Grill in rounds** until every open decision is settled. Record decisions under `## Settled decisions` and terms in the glossary as they settle.
17
- - When a decision changes something the feature's summary on the feature map promises, such as a policy it names, correct the summary with `cruze features update <slug> --summary <text>`.
18
- - When an answer names something the product may need later, or a decision departs from a principle, the vision changes, as "Long-term intent" in the grilling skill describes. A settled decision of this feature is archived when it lands, so it can't hold either.
19
- 7. **Write the spec delta.** Use `ADDED` for new requirements, `MODIFIED` for a requirement whose text or scenarios change (writing its full new body with every scenario it keeps), `REMOVED` with a `Reason` and `Migration` for retired behaviour, and `ADDED CAPABILITY` for a new capability.
20
- - Name every ID with glossary terms. An ID is never reused.
21
- - Done when every requirement has a scenario for its main case and one for each failure a user can meet.
22
- 8. **Leave the design to architect.** Set `## Architecture delta` to `None.` and leave the Changes table with its header row only. Remove the remaining template guides.
23
- 9. **Confirm.** Summarize the intent and each requirement with its scenarios, in plain words, showing each requirement's main scenario as the user would see it, and ask the user to confirm them. Apply any corrections.
24
-
25
- Done when the user has confirmed, `cruze validate` reports no errors for the feature, only its `not-designed` warning, and the feature is committed.
@@ -1,28 +0,0 @@
1
- # Taking in the user's input
2
-
3
- The user may bring anything: a seed, a PRD, a TRD, a design write-up, an old project's notes, a pasted paragraph or a link. Everything in it is open for discussion, and every part of it reaches the step that takes it up. One project's 9,500-word seed held design that no step was told to read, and intent the vision had no room for.
4
-
5
- 1. **Gather it.** Read every source the user names or pastes, and each note `cruze show --notes` lists with kind `input`. Run `cruze new note intake --title "Intake: <what the input is>" --kind intake --about project`. Under `## Sources`, cite each file in the repository by path, and copy in, verbatim, what would otherwise be lost: pasted text, and a document outside the repository, such as a link or a PDF.
6
- 2. **Sort every part** by the step that takes it up. Name each part by its heading, or by a short quote where the input has none:
7
- - `vision`: the problem, users, goals, non-goals, constraints, principles, and what must stay possible.
8
- - `architect`: design choices, such as structure, protocols, technologies and data formats.
9
- - `roadmap`: delivery order and phases.
10
- - a feature's slug: one feature's behaviour, rules, limits and examples. Use the slug the feature map gives it.
11
- - `user`: preferences about the process itself, which the user may add to `AGENTS.md`.
12
-
13
- An open question goes to the step that settles it. Done when every part of every source has a place.
14
- 3. **Read its stance.** Note how settled the input says each part is, from its own legend when it has one, or from its wording: "we decided" and "must" are firmer than "maybe", "TBD" or a question. Nothing is settled by being written down. The stance sets only your recommendation: keep what the input settled, with its reason; ask about what it proposed; research what it guesses; settle what it leaves open.
15
- 4. **Write the hand-off** in the intake note, under `## Hand-off`, one row per part:
16
-
17
- ```markdown
18
- | Part | Source | Goes to | Status |
19
- | --- | --- | --- | --- |
20
- | Transport | `.cruze/notes/2026-10-12-seed.md`, "The protocol" | architect | open |
21
- ```
22
-
23
- A one-paragraph idea is all `vision`, so its hand-off is a row or two.
24
- 5. **Take up the vision's parts now,** one section at a time. Each section is one question, keep or change, with the input's position as your recommendation. Set each row's status to `settled` or `dropped` as the user decides.
25
-
26
- ## Taking up a hand-off later
27
-
28
- Architect, the roadmap and feature-scope envision take up their own rows. `cruze show --notes <step or feature slug>` lists them, and `cruze show <ref>` lists them for a feature or change. Read each part at its source, ask the user about it as in step 5, record what they keep where the step records decisions, and set the row's status. A row still `open` when the step ends goes to the user: keep it open for a later step, or drop it.
@@ -1,24 +0,0 @@
1
- # Envision at project scope
2
-
3
- The result is an approved `docs/vision.md` and a `docs/glossary.md` holding the terms that settled. Formats: `.agents/skills/cruze-formats/reference/durable-docs.md`.
4
-
5
- 1. **Create the documents.** Run `cruze new vision` and `cruze new glossary` for whichever doesn't exist yet. When the vision exists and you are reworking it, edit it in place. Bounded contexts don't exist yet, so group the glossary's terms under one `##` heading naming the product's domain, such as `## Console access`. `architect` regroups them by context.
6
- 2. **Take in the input** as [intake.md](intake.md) describes, then draft every section you can from the parts handed to `vision`, marking each as a question for step 3. Done when every part of the input has a hand-off row.
7
- 3. **List the open decisions,** section by section:
8
- - **Problem:** the problem in the user's words, and who feels it.
9
- - **Users:** each kind of user and the situation they are in.
10
- - **Goals:** each goal as a `GOAL-<name>` row, with a measure that says how you would know it's met. A goal without a measure is still open.
11
- - **Non-goals:** what the product deliberately doesn't do, and why. Ask about the tempting neighbours of each goal.
12
- - **Constraints:** platforms, the implementation language, dependency policy, performance, security, privacy, licensing and legal limits.
13
- - **Principles:** each rule every design must follow, as a `PRINCIPLE-<name>` row with why it holds. Ask about the rules behind the user's choices, such as what state and events are each for.
14
- - **Must stay possible:** each capability the product may need after this release, as a `LATER-<name>` row, explored as [possibilities.md](possibilities.md) describes.
15
- - **Feature map:** the capabilities that deliver the goals, each a slug with a one-line summary and the goals it serves. They are what later `envision "<feature>"` runs pick up.
16
- 4. **Grill in rounds** until every open decision is settled, following the grilling skill. As each domain term settles, add it to the glossary. Once the goals and feature map have settled, ask about what may come later, as [possibilities.md](possibilities.md) describes.
17
- 5. **Write the vision.** Fill each section, and remove every template guide.
18
- 6. **Fill the feature map.** For each capability, run `cruze features add <slug> --summary "<summary>" --goals <GOAL IDs>`. Put command syntax in backticks, such as `` `consolectl console <device>` ``, so it isn't read as a template guide. Running `add` again for the same slug replaces its entry in place. Done when every goal is served by at least one feature on the map.
19
- 7. **Confirm.** Walk the user through the vision in one short summary: the problem, the goals with their measures, the non-goals, the constraints, the principles, what must stay possible, and the feature map. Name what the hand-off gives each later step, and anything dropped, and why. Ask whether it matches their understanding, and apply any corrections.
20
- 8. **Approve.** When the user approves, run `cruze approve vision` and quote its result.
21
- 9. **Introduce the project in the README.** Under the title of `README.md`, write one paragraph drawn from the vision's Problem, Users and Goals: what the product is, who it is for, and why it exists, ending with a link to `docs/vision.md`. Keep anything already there that is still true. Done when `cruze validate` reports no `readme-overview` warning.
22
- 10. **Commit,** with a message such as `docs: envision the project`.
23
-
24
- Done when `cruze status` shows `docs/vision.md` approved, the README says what the project is, and the glossary holds every domain term the vision uses.
@@ -1,39 +0,0 @@
1
- ---
2
- name: cruze-explore
3
- description: Thinks an idea through with the user before any design, comparing options and sketching flows, and writes nothing until the user asks to capture it.
4
- ---
5
-
6
- # Explore
7
-
8
- Explore is the optional thinking partner that can come before any other Cruze step. It turns a loose idea into clear options and, when the user wants, a captured note that the next step takes as input. It never writes a design, creates work or records an approval.
9
-
10
- ## Steps
11
-
12
- 1. **Frame the problem.** Ask what prompted the idea, who it affects, and what outcome would make it worthwhile. If the user starts from a solution, restate the problem underneath it and confirm it. Done when you can state the problem in one sentence the user agrees with.
13
- 2. **Read what exists.** Read whichever of these exist: `docs/vision.md`, `docs/glossary.md`, `docs/architecture.md` as "Reading it" in `.agents/skills/cruze-formats/reference/architecture.md` says, `docs/roadmap.md`, and the code the idea touches. Run `cruze status` to see work in flight. Use the glossary's words from here on, following `.agents/skills/cruze-domain-language/SKILL.md`.
14
- 3. **Separate facts from guesses.** List what is known evidence, what is a hypothesis, and what is a preference. Look up any fact you can rather than asking the user for it.
15
- 4. **Diverge.** Lay out two to four genuinely different approaches, including leaving things as they are when that is credible. For each, give what it changes, what it leaves alone, its benefits, its costs and failure modes, the assumptions it rests on, and what evidence would tell it apart from the others. Show what each approach looks like, following `.agents/skills/cruze-grilling/illustrating.md`.
16
- 5. **Converge.** Compare the strongest options against the user's outcome, the vision's goals and constraints, and the architecture. Challenge assumptions and accidental scope growth, following the challenge rules in `.agents/skills/cruze-grilling/SKILL.md`. Recommend one option only when its trade-offs are understood. Otherwise recommend the smallest step that would settle the question, such as a spike, a measurement or a research question.
17
- 6. **Offer to capture.** Summarize the problem, the options, the trade-offs, your recommendation and the open questions, then ask whether to capture them. When the user declines, stop here: the discussion itself was the result.
18
-
19
- ## Capturing
20
-
21
- Only when the user says to capture:
22
-
23
- 1. Run `cruze new note <slug> --title "<title>" --kind explore --about <subjects>`, naming the feature slugs or contexts the idea concerns, or `project`, and write the note at the path it returns.
24
- 2. Give the note these sections: `## Problem`, `## Options`, `## Recommendation` and `## Open questions`. Mark each statement as fact, hypothesis, preference or recommendation.
25
- 3. Done when the note stands on its own for a reader who wasn't in the conversation.
26
-
27
- ## Handing off
28
-
29
- Name the next step, and pass the note's path to it when there is one:
30
-
31
- | The idea is | Next step |
32
- | --- | --- |
33
- | A new project, or the project's first vision | `envision`, at project scope |
34
- | A new capability whose requirements aren't settled | `envision "<feature>"` |
35
- | A capability whose requirements are settled | `architect "<feature>"` |
36
- | A small change to existing behaviour | `architect "<tweak>"` |
37
- | A defect in built behaviour | `triage "<symptom>"` |
38
- | A decision already made that now looks wrong | `rethink` |
39
- | Not worth doing now | `cruze features add <slug> --summary <text> --goals <ids>`, with the user's agreement, to keep it on the future list |
@@ -1,84 +0,0 @@
1
- # Architecture format
2
-
3
- `docs/architecture.md` is the living model of how the system is built. Every step reads it, including build and review. It describes the designed system for the current and upcoming releases. Each element's managed `Status` says whether it is still `planned` or already `built`.
4
-
5
- Template: [../templates/architecture.md](../templates/architecture.md).
6
-
7
- ## Reading it
8
-
9
- Read the prose sections whole: the Overview, Bounded contexts, Dependency rules, Cross-cutting concerns and Decisions. Reach elements through the CLI. `cruze show --index` lists every element of the architecture and specs on one line, with its status, its module and the work in flight that changes it, and `cruze show --index <context>` lists one context or capability with its scenarios. `cruze show <ID>...` prints the chosen elements' bodies, with each in-flight delta's version beside the living one. The index also gives the architecture's size: under 6,000 words, read it whole instead. One project's architecture held 52k words, and an architect run read all of it to find the few elements it would extend.
10
-
11
- ## Sections
12
-
13
- The document has these `##` sections, in this order. Each holds elements of one kind as `###` heading elements, plus any `VIEW` diagrams that summarize them. A section with no elements yet keeps its heading and a one-line note.
14
-
15
- | Section | Kind | Holds |
16
- | --- | --- | --- |
17
- | Overview | `VIEW` | One paragraph on the system, then a context diagram |
18
- | Bounded contexts | `CTX` | Each context's purpose and what it depends on |
19
- | Domain model | `ENT` | Entities, aggregates, value objects, domain services, policies and domain events, with invariants and relationships |
20
- | Use cases | `UC` | The application API: what callers can ask the system to do |
21
- | Ports | `PORT` | Capabilities the application needs (driven) or offers (driving) |
22
- | Adapters | `ADP` | Technology behind ports, and inbound adapters that drive use cases |
23
- | Flows | `FLOW` | How elements interact for key scenarios, as sequence diagrams |
24
- | Modules | `MOD` | Where each element lives in the source tree |
25
- | Dependency rules | `RULE` | What may import what |
26
- | Cross-cutting concerns | `XC` | Errors, configuration, logging, concurrency, security |
27
- | Decisions | none | Links to ADRs, one line each, then project-level settled decisions as `D<n>: <decision> (<reason>)`, including overrides of Cruze's advice |
28
-
29
- ## Element facts
30
-
31
- Facts are `- Key: value` items. Keys marked required must be present; the others appear when they apply. Multi-valued facts use sub-items.
32
-
33
- | Kind | Required facts | Optional facts |
34
- | --- | --- | --- |
35
- | `VIEW` | a Mermaid block | |
36
- | `CTX` | `Purpose` | `Depends on` (context IDs, with what is used) |
37
- | `ENT` | `Kind` (`aggregate`, `entity`, `value`, `service`, `policy` or `event`), `Module`, `File` | `Invariants`, `Relationships`, `States` (for state machines) |
38
- | `UC` | `Input`, `Output`, `Errors`, `Uses`, `Module`, `File` | `Serves` (REQ IDs) |
39
- | `PORT` | `Direction` (`driven` or `driving`), `Operations`, `Module`, `File` | `Implemented by` |
40
- | `ADP` | `Implements` (a driven port) or `Drives` (use cases), `Technology`, `Module`, `File` | `Adopts` (library and adopt-or-build reason), `Format` (the stored or wire format it owns, or where its schema lives) |
41
- | `FLOW` | `Elements`, a Mermaid `sequenceDiagram` | `Serves` (SCN IDs, once they exist), `Failure paths` |
42
- | `MOD` | `Path` (a directory ending in `/`, or one file; list several in backticks, never a glob, including every file the module owns outside its directory, such as a build script), `Layer` (`core`, `domain`, `application`, `adapter` or `composition`) | |
43
- | `RULE` | one or two sentences of rule | `Enforced by` (config layer names) |
44
- | `XC` | prose | |
45
-
46
- Rules for facts:
47
-
48
- - Membership is never listed twice. An element's scope names its context, and its `Module` fact names its module; contexts and modules don't list their members, so adding an element never changes them.
49
- - `File` names the real source path, one per element, with sub-items when an element spans files. Every element with code has one: an element without a file cannot be built, checked or reviewed.
50
- - `Operations` lists each operation as a sub-item with its signature in the project's language, then its contract: what it guarantees, its failure cases and who owns cleanup.
51
- - `Relationships` sub-items read `<verb> <ID> (<cardinality>)`, for example `- has one ENT-inventory.console-path (1)`.
52
- - `Future`, on any element, records a seam kept open for later and what it will need, so later features extend the design rather than rework it. It names the need it serves: the vision's `LATER` capability, by ID, so a change to that capability makes the design stale, or the feature on the map or the roadmap, by slug. `cruze validate` warns `future-unanchored` when it names neither.
53
- - Add another fact when it helps a reader, such as `Failure attribution` on an adapter. The CLI checks the listed facts and ignores the others.
54
- - An element that grows over several features, such as the CLI adapter gaining a command per feature, gets a `MODIFIED` operation in each feature that extends it. Its status goes back to `planned` when that feature's first change lands, and to `built` when the change that builds the new text lands.
55
- - The CLI adds `- Status: planned` to a new element and flips it to `built` when a landed change builds it. Leave it out of what you write.
56
-
57
- ## Diagrams
58
-
59
- - Every `FLOW` has one `sequenceDiagram`. Participants are element titles, and every participant's ID appears in the flow's `Elements`.
60
- - The Overview `VIEW` shows contexts, the inbound adapters that drive them and the external systems adapters reach.
61
- - A `VIEW-domain-model` class diagram in the Domain model section shows every `ENT` and its relationships.
62
- - Keep a diagram to at most 15 nodes. Split a bigger picture into two views.
63
-
64
- ## Architecture delta
65
-
66
- A feature, or a standalone change, proposes architecture edits in its `## Architecture delta` section. Each operation is a `###` heading:
67
-
68
- ```markdown
69
- ### ADDED PORT-access.hop-connector: HopConnector
70
- - Direction: driven
71
- - ...the full element body, as it will read in architecture.md
72
-
73
- ### MODIFIED UC-access.open-console: Open a console
74
- - ...the full new body, replacing the old one
75
-
76
- ### REMOVED ADP-access.telnet-connector: Telnet connector
77
- - Reason: telnet support was dropped from the release scope
78
- ```
79
-
80
- - `ADDED` introduces an ID that doesn't exist yet. `MODIFIED` replaces an existing element's whole body. `REMOVED` retires an ID and needs a `Reason`. Once it merges, no living doc may cite the ID, so modify each element that cites it to describe it in words.
81
- - The element kind decides its section. `land` appends an added element to the end of its section.
82
- - A delta never touches `Status`. A change's `Builds` scope decides what becomes built.
83
- - A delta with no operations says `None.` under its heading.
84
- - Direct edits to `docs/architecture.md` happen only at project scope and through `rethink`. Every other design change arrives as a delta.
@@ -1,80 +0,0 @@
1
- # Configuration format
2
-
3
- `.cruze/config.yaml` configures the CLI for one project. `cruze init` creates it. Project-scope architect fills in `source`, `tests` and `layers` from the module map.
4
-
5
- ```yaml
6
- version: 1
7
- cruze: "0.0.2"
8
- standards: "0.0.2"
9
- project: "Console Access"
10
- tracker: markdown
11
-
12
- source: ["src/**/*.rs"]
13
- tests: ["src/**/*.rs", "tests/**/*.rs"]
14
-
15
- check:
16
- max_lines: 600
17
- max_types: 12
18
- exceptions:
19
- - path: src/cli/args.rs
20
- reason: the clap derive struct lists every flag in one place
21
-
22
- commands:
23
- format: cargo fmt --check
24
- lint: cargo clippy -- -D warnings
25
- test: cargo test
26
- run: cargo run -- list
27
-
28
- review:
29
- command: ["claude", "-p", "--allowedTools", "Read Grep Glob Bash(git diff:*) Bash(git log:*) Bash(git show:*) Bash(cruze:*) Bash(cargo:*)"]
30
- decide: exceptions
31
-
32
- changes:
33
- min_builds: 3
34
- max_scenarios: 30
35
- max_tasks: 25
36
- exceptions:
37
- - item: 2026-09-25-open-console/02-ssh-hops
38
- reason: every scenario runs through one reconcile, which can't be split without building it twice
39
-
40
- references:
41
- - path: third_party/rfc4254.txt
42
- use: the SSH connection protocol every hop speaks; channels and their failures must follow it
43
-
44
- layers:
45
- - name: inventory-domain
46
- paths: ["src/inventory/domain/**"]
47
- may_import: []
48
- - name: inventory-app
49
- paths: ["src/inventory/app/**"]
50
- may_import: [inventory-domain]
51
- ```
52
-
53
- | Key | Meaning |
54
- | --- | --- |
55
- | `version` | Format version. Always `1` for now. |
56
- | `cruze` | The Cruze version whose skills the project installed. `cruze install` writes it; don't edit it, except to go back to an older version on purpose. |
57
- | `standards` | The Cruze version whose expectations the code meets. `cruze realign done` moves it up. A rule a later release added reports but fails no CI until then. Without it, a project meets `0.0.1`. |
58
- | `project` | The project name, quoted. |
59
- | `tracker` | Where work items live. `markdown` is the only value in V1. |
60
- | `source` | Globs of the source files `cruze check` inspects. |
61
- | `tests` | Globs of the files `cruze trace` searches for scenario IDs. |
62
- | `check.max_lines` | Line budget per source file, a backstop against a file that has outgrown one responsibility. `cruze init` sets `600`. Test files outside `source` have no budget, and a Rust file's `#[cfg(test)]` modules don't count. |
63
- | `check.max_types` | Budget of top-level types per source file. `cruze init` sets `12`. |
64
- | `check.exceptions` | Files allowed past a budget, or Rust test files allowed under `src/` (`test-placement`), each with a `path` and a `reason`. `realign` adds entries whose reason ends `scheduled in <ref>`, and landing that change removes them. |
65
- | `references` | External documents the design must comply with, such as a protocol specification or a standard, each with its `path` in the repository and its `use`: what it governs. Optional. `cruze show` lists them, and architect, plan, build and the reviewers read the parts their scope relies on and cite them, such as `RFC 4254 §5.2`, in the design. |
66
- | `layers` | Each layer has a `name`, the `paths` it covers, and `may_import`, the layers it may depend on. |
67
- | `commands` | The project's commands by name, such as `test` or `run`. The foundation change fills them in, and `cruze land` copies them into the Commands section of `AGENTS.md`. When the suite has a slow tier, such as UI, device or end-to-end tests, `test` runs only the fast tier and `test_full` runs everything. The full suite is `test_full` when it is set, and `test` otherwise. |
68
- | `review.command` | The program and arguments `cruze review` runs to start an agent in a fresh context, with the prompt on standard input. Optional. `cruze init` sets it for Claude Code to run in print mode, allowed to read the project and run `git diff`, `git log`, `git show` and `cruze`. The verifier runs the system, so add the project's build and run commands. When it is unset, or its program isn't installed, `cruze review` hands the role's prompt back to the calling agent to run in a helper. |
69
- | `review.decide` | Which review findings the user decides. `exceptions`, the default: only findings whose fix changes behaviour, a designed port or contract, or another decision the user owns, and any the agent wouldn't simply fix as proposed. The agent fixes the rest and lists them. `all`: the user decides every finding. |
70
- | `changes.min_builds` | A feature's change that builds fewer elements than this gets a `change-too-small` warning: merge it into the change it continues. Default `3`. |
71
- | `changes.max_scenarios` | A change that delivers more scenarios than this gets a `change-too-large` warning: split it. Default `30`. |
72
- | `changes.max_tasks` | A plan with more tasks than this gets a `plan-too-large` warning. Default `25`. |
73
- | `changes.exceptions` | Features and changes the user accepted outside the band, each with the `item` (a feature's ID, `<feature>/<change>`, or a standalone change's ID) and the `reason`. The item's size warning stops. `cruze approve` refuses an item whose size warning still stands (`size-unaccepted`) until it is listed here or split. |
74
-
75
- Rules for layers:
76
-
77
- - A source file belongs to the first layer whose paths match it. A file in no layer may import anything, so every source file should be in a layer.
78
- - Imports of code outside the project, such as the standard library and dependencies, are always allowed. Adapter layers are where they belong, and review checks that.
79
- - A layer may import itself. Every other dependency is listed in `may_import`, and together they follow the `RULE` elements in the architecture.
80
- - Each `MOD` element's `Path` falls in exactly one layer, and the layer's `may_import` fits the module's `Layer`. A domain layer imports only domain layers, and nothing outside composition imports adapter layers.