hatch3r 1.8.0 → 1.9.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 (276) hide show
  1. package/README.md +36 -55
  2. package/dist/cli/index.js +13073 -14671
  3. package/dist/cli/index.js.map +1 -1
  4. package/{agents → dist/content/agents}/hatch3r-a11y-auditor.md +2 -2
  5. package/{agents → dist/content/agents}/hatch3r-ci-watcher.md +2 -2
  6. package/{agents → dist/content/agents}/hatch3r-context-rules.md +5 -5
  7. package/{agents → dist/content/agents}/hatch3r-creator.md +15 -15
  8. package/{agents → dist/content/agents}/hatch3r-dependency-auditor.md +1 -1
  9. package/{agents → dist/content/agents}/hatch3r-devops.md +3 -3
  10. package/{agents → dist/content/agents}/hatch3r-fixer.md +2 -2
  11. package/{agents → dist/content/agents}/hatch3r-handoff-loader.md +11 -11
  12. package/{agents → dist/content/agents}/hatch3r-handoff-preparer.md +7 -7
  13. package/{agents → dist/content/agents}/hatch3r-implementer.md +2 -2
  14. package/{agents → dist/content/agents}/hatch3r-learnings-loader.md +11 -11
  15. package/{agents → dist/content/agents}/hatch3r-lint-fixer.md +2 -2
  16. package/{agents → dist/content/agents}/hatch3r-researcher.md +3 -3
  17. package/{agents → dist/content/agents}/hatch3r-reviewer.md +4 -4
  18. package/{agents → dist/content/agents}/hatch3r-security-auditor.md +2 -2
  19. package/{agents → dist/content/agents}/hatch3r-test-writer.md +2 -2
  20. package/{agents → dist/content/agents}/shared/external-knowledge.md +1 -1
  21. package/{agents → dist/content/agents}/shared/injection-patterns.md +1 -1
  22. package/{agents → dist/content/agents}/shared/quality-charter.md +31 -3
  23. package/{agents → dist/content/agents}/shared/user-content-templates.md +10 -10
  24. package/{agents → dist/content/agents}/shared/user-question-protocol.md +2 -0
  25. package/{commands → dist/content/commands}/board/pickup-azure-devops.md +1 -1
  26. package/{commands → dist/content/commands}/board/pickup-delegation-multi.md +4 -4
  27. package/{commands → dist/content/commands}/board/pickup-delegation.md +3 -3
  28. package/{commands → dist/content/commands}/board/pickup-github.md +1 -1
  29. package/{commands → dist/content/commands}/board/pickup-gitlab.md +1 -1
  30. package/{commands → dist/content/commands}/board/pickup-post-impl.md +2 -2
  31. package/{commands → dist/content/commands}/board/shared-azure-devops.md +1 -1
  32. package/{commands → dist/content/commands}/board/shared-github.md +2 -2
  33. package/{commands → dist/content/commands}/board/shared-gitlab.md +1 -1
  34. package/{commands → dist/content/commands}/hatch3r-api-spec.md +1 -1
  35. package/{commands → dist/content/commands}/hatch3r-benchmark.md +1 -1
  36. package/{commands → dist/content/commands}/hatch3r-board-fill.md +7 -7
  37. package/{commands → dist/content/commands}/hatch3r-board-pickup.md +6 -6
  38. package/{commands → dist/content/commands}/hatch3r-bug-plan.md +5 -5
  39. package/{commands → dist/content/commands}/hatch3r-codebase-map.md +2 -2
  40. package/{commands → dist/content/commands}/hatch3r-create.md +11 -11
  41. package/{commands → dist/content/commands}/hatch3r-debug.md +11 -11
  42. package/{commands → dist/content/commands}/hatch3r-feature-plan.md +5 -5
  43. package/{commands → dist/content/commands}/hatch3r-handoff.md +9 -9
  44. package/{commands → dist/content/commands}/hatch3r-healthcheck.md +1 -1
  45. package/{commands → dist/content/commands}/hatch3r-hooks.md +12 -12
  46. package/{commands → dist/content/commands}/hatch3r-learn.md +11 -11
  47. package/{commands → dist/content/commands}/hatch3r-migration-plan.md +2 -2
  48. package/{commands → dist/content/commands}/hatch3r-onboard.md +7 -7
  49. package/{commands → dist/content/commands}/hatch3r-pr-resolve.md +8 -8
  50. package/{commands → dist/content/commands}/hatch3r-project-spec.md +3 -3
  51. package/{commands → dist/content/commands}/hatch3r-quick-change.md +7 -7
  52. package/{commands → dist/content/commands}/hatch3r-refactor-plan.md +4 -4
  53. package/{commands → dist/content/commands}/hatch3r-report.md +1 -1
  54. package/{commands → dist/content/commands}/hatch3r-revision.md +7 -7
  55. package/{commands → dist/content/commands}/hatch3r-roadmap.md +2 -2
  56. package/{commands → dist/content/commands}/hatch3r-security-audit.md +2 -2
  57. package/{commands → dist/content/commands}/hatch3r-test-plan.md +5 -5
  58. package/{commands → dist/content/commands}/hatch3r-workflow.md +9 -9
  59. package/{commands → dist/content/commands}/revision/revision-delegation.md +2 -2
  60. package/{commands → dist/content/commands}/revision/revision-quality.md +2 -2
  61. package/{github-agents → dist/content/github-agents}/hatch3r-docs-agent.md +1 -1
  62. package/{github-agents → dist/content/github-agents}/hatch3r-lint-agent.md +1 -1
  63. package/{github-agents → dist/content/github-agents}/hatch3r-security-agent.md +1 -1
  64. package/{github-agents → dist/content/github-agents}/hatch3r-test-agent.md +1 -1
  65. package/{hooks → dist/content/hooks}/hatch3r-ci-failure.md +3 -3
  66. package/{hooks → dist/content/hooks}/hatch3r-file-save.md +3 -3
  67. package/{hooks → dist/content/hooks}/hatch3r-post-merge.md +1 -1
  68. package/{hooks → dist/content/hooks}/hatch3r-pre-commit.md +1 -1
  69. package/{hooks → dist/content/hooks}/hatch3r-pre-push.md +3 -3
  70. package/{hooks → dist/content/hooks}/hatch3r-session-start.md +3 -3
  71. package/{rules → dist/content/rules}/hatch3r-accessibility-standards.md +2 -1
  72. package/{rules → dist/content/rules}/hatch3r-accessibility-standards.mdc +1 -0
  73. package/{rules → dist/content/rules}/hatch3r-agent-orchestration-detail.md +2 -2
  74. package/{rules → dist/content/rules}/hatch3r-agent-orchestration-detail.mdc +1 -1
  75. package/{rules → dist/content/rules}/hatch3r-agent-orchestration.md +2 -2
  76. package/{rules → dist/content/rules}/hatch3r-agent-orchestration.mdc +1 -1
  77. package/{rules → dist/content/rules}/hatch3r-ai-evals.md +2 -1
  78. package/{rules → dist/content/rules}/hatch3r-ai-evals.mdc +2 -1
  79. package/{rules → dist/content/rules}/hatch3r-ai-ux-patterns.md +1 -1
  80. package/{rules → dist/content/rules}/hatch3r-api-versioning.md +1 -0
  81. package/{rules → dist/content/rules}/hatch3r-api-versioning.mdc +1 -0
  82. package/{rules → dist/content/rules}/hatch3r-auth-patterns.md +2 -1
  83. package/{rules → dist/content/rules}/hatch3r-auth-patterns.mdc +1 -0
  84. package/{rules → dist/content/rules}/hatch3r-browser-verification.md +6 -10
  85. package/{rules → dist/content/rules}/hatch3r-browser-verification.mdc +6 -10
  86. package/{rules → dist/content/rules}/hatch3r-ci-cd.md +1 -0
  87. package/{rules → dist/content/rules}/hatch3r-ci-cd.mdc +1 -0
  88. package/{rules → dist/content/rules}/hatch3r-code-standards.md +1 -1
  89. package/{rules → dist/content/rules}/hatch3r-component-conventions.md +1 -1
  90. package/{rules → dist/content/rules}/hatch3r-container-hardening.md +2 -1
  91. package/{rules → dist/content/rules}/hatch3r-container-hardening.mdc +1 -0
  92. package/{rules → dist/content/rules}/hatch3r-contract-testing.md +1 -0
  93. package/{rules → dist/content/rules}/hatch3r-contract-testing.mdc +1 -0
  94. package/{rules → dist/content/rules}/hatch3r-data-classification.md +2 -1
  95. package/{rules → dist/content/rules}/hatch3r-data-classification.mdc +1 -0
  96. package/{rules → dist/content/rules}/hatch3r-deep-context.md +1 -1
  97. package/{rules → dist/content/rules}/hatch3r-dependency-management.md +2 -1
  98. package/{rules → dist/content/rules}/hatch3r-dependency-management.mdc +1 -0
  99. package/{rules → dist/content/rules}/hatch3r-design-system-detection.md +2 -1
  100. package/{rules → dist/content/rules}/hatch3r-design-system-detection.mdc +1 -0
  101. package/{rules → dist/content/rules}/hatch3r-event-schema-evolution.md +1 -0
  102. package/{rules → dist/content/rules}/hatch3r-event-schema-evolution.mdc +1 -0
  103. package/{rules → dist/content/rules}/hatch3r-git-conventions.md +1 -1
  104. package/{rules → dist/content/rules}/hatch3r-handoff-readiness.md +4 -4
  105. package/{rules → dist/content/rules}/hatch3r-handoff-readiness.mdc +3 -3
  106. package/{rules → dist/content/rules}/hatch3r-i18n.md +1 -1
  107. package/{rules → dist/content/rules}/hatch3r-iteration-summary.md +1 -1
  108. package/{rules → dist/content/rules}/hatch3r-learning-consult.md +7 -7
  109. package/{rules → dist/content/rules}/hatch3r-learning-consult.mdc +6 -6
  110. package/{rules → dist/content/rules}/hatch3r-migrations.md +2 -1
  111. package/{rules → dist/content/rules}/hatch3r-migrations.mdc +1 -0
  112. package/{rules → dist/content/rules}/hatch3r-observability-logging.md +1 -0
  113. package/{rules → dist/content/rules}/hatch3r-observability-logging.mdc +1 -0
  114. package/{rules → dist/content/rules}/hatch3r-observability-metrics.md +1 -0
  115. package/{rules → dist/content/rules}/hatch3r-observability-metrics.mdc +1 -0
  116. package/{rules → dist/content/rules}/hatch3r-observability-tracing.md +1 -0
  117. package/{rules → dist/content/rules}/hatch3r-observability-tracing.mdc +1 -0
  118. package/{rules → dist/content/rules}/hatch3r-operability.md +1 -0
  119. package/{rules → dist/content/rules}/hatch3r-operability.mdc +1 -0
  120. package/{rules → dist/content/rules}/hatch3r-passkey-server.md +2 -1
  121. package/{rules → dist/content/rules}/hatch3r-passkey-server.mdc +1 -0
  122. package/{rules → dist/content/rules}/hatch3r-performance-budgets.md +1 -1
  123. package/{rules → dist/content/rules}/hatch3r-performance-budgets.mdc +1 -1
  124. package/{rules → dist/content/rules}/hatch3r-resilience-patterns.md +1 -0
  125. package/{rules → dist/content/rules}/hatch3r-resilience-patterns.mdc +1 -0
  126. package/{rules → dist/content/rules}/hatch3r-secrets-management.md +2 -1
  127. package/{rules → dist/content/rules}/hatch3r-secrets-management.mdc +1 -0
  128. package/{rules → dist/content/rules}/hatch3r-security-patterns.md +2 -1
  129. package/{rules → dist/content/rules}/hatch3r-security-patterns.mdc +1 -0
  130. package/{rules → dist/content/rules}/hatch3r-testing.md +2 -1
  131. package/{rules → dist/content/rules}/hatch3r-testing.mdc +1 -0
  132. package/{rules → dist/content/rules}/hatch3r-theming.md +1 -1
  133. package/{rules → dist/content/rules}/hatch3r-tooling-hierarchy.md +4 -4
  134. package/{rules → dist/content/rules}/hatch3r-tooling-hierarchy.mdc +3 -3
  135. package/{rules → dist/content/rules}/hatch3r-ux-states-and-flows.md +2 -1
  136. package/{rules → dist/content/rules}/hatch3r-ux-states-and-flows.mdc +1 -0
  137. package/{skills → dist/content/skills}/hatch3r-a11y-audit/SKILL.md +1 -1
  138. package/{skills → dist/content/skills}/hatch3r-architecture-review/SKILL.md +1 -1
  139. package/{commands/hatch3r-board-groom.md → dist/content/skills/hatch3r-board-groom/SKILL.md} +5 -18
  140. package/{commands/hatch3r-board-init.md → dist/content/skills/hatch3r-board-init/SKILL.md} +17 -30
  141. package/{commands/hatch3r-board-refresh.md → dist/content/skills/hatch3r-board-refresh/SKILL.md} +5 -18
  142. package/{commands/hatch3r-board-shared.md → dist/content/skills/hatch3r-board-shared/SKILL.md} +7 -14
  143. package/{skills → dist/content/skills}/hatch3r-bug-fix/SKILL.md +1 -1
  144. package/{skills → dist/content/skills}/hatch3r-cli-fd/SKILL.md +1 -1
  145. package/{skills → dist/content/skills}/hatch3r-cli-fzf/SKILL.md +1 -1
  146. package/{skills → dist/content/skills}/hatch3r-cli-gh/SKILL.md +4 -4
  147. package/{skills → dist/content/skills}/hatch3r-cli-jq/SKILL.md +3 -3
  148. package/{skills → dist/content/skills}/hatch3r-cli-ripgrep/SKILL.md +3 -3
  149. package/dist/content/skills/hatch3r-cli-toolbox/SKILL.md +269 -0
  150. package/{skills → dist/content/skills}/hatch3r-context-health/SKILL.md +18 -2
  151. package/{skills → dist/content/skills}/hatch3r-cost-tracking/SKILL.md +59 -7
  152. package/{skills → dist/content/skills}/hatch3r-customize/SKILL.md +5 -6
  153. package/{skills → dist/content/skills}/hatch3r-dep-audit/SKILL.md +6 -2
  154. package/{skills → dist/content/skills}/hatch3r-design-system-detect/SKILL.md +1 -1
  155. package/{skills → dist/content/skills}/hatch3r-feature/SKILL.md +1 -1
  156. package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/SKILL.md +4 -4
  157. package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/references/azure-devops.md +2 -2
  158. package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/references/gitlab-ci.md +1 -1
  159. package/{skills → dist/content/skills}/hatch3r-handoff-prepare/SKILL.md +9 -9
  160. package/{skills → dist/content/skills}/hatch3r-handoff-resume/SKILL.md +2 -2
  161. package/{skills → dist/content/skills}/hatch3r-incident-response/SKILL.md +2 -2
  162. package/{skills → dist/content/skills}/hatch3r-issue-workflow/SKILL.md +4 -4
  163. package/{skills → dist/content/skills}/hatch3r-migration/SKILL.md +1 -1
  164. package/{skills → dist/content/skills}/hatch3r-observability-verify/SKILL.md +0 -1
  165. package/{skills → dist/content/skills}/hatch3r-perf-audit/SKILL.md +1 -1
  166. package/{skills → dist/content/skills}/hatch3r-pr-creation/SKILL.md +4 -4
  167. package/{skills → dist/content/skills}/hatch3r-qa-validation/SKILL.md +2 -2
  168. package/{skills → dist/content/skills}/hatch3r-recipe/SKILL.md +82 -2
  169. package/{skills → dist/content/skills}/hatch3r-refactor/SKILL.md +1 -1
  170. package/{skills → dist/content/skills}/hatch3r-release/SKILL.md +35 -2
  171. package/{skills → dist/content/skills}/hatch3r-ui-ux-verify/SKILL.md +1 -1
  172. package/{skills → dist/content/skills}/hatch3r-visual-refactor/SKILL.md +1 -1
  173. package/package.json +6 -18
  174. package/commands/hatch3r-agent-customize.md +0 -201
  175. package/commands/hatch3r-command-customize.md +0 -113
  176. package/commands/hatch3r-context-health.md +0 -147
  177. package/commands/hatch3r-cost-tracking.md +0 -163
  178. package/commands/hatch3r-dep-audit.md +0 -188
  179. package/commands/hatch3r-recipe.md +0 -194
  180. package/commands/hatch3r-release.md +0 -350
  181. package/commands/hatch3r-rule-customize.md +0 -133
  182. package/commands/hatch3r-skill-customize.md +0 -112
  183. package/prompts/hatch3r-bug-triage.md +0 -158
  184. package/prompts/hatch3r-code-review.md +0 -134
  185. package/prompts/hatch3r-pr-description.md +0 -176
  186. package/rules/hatch3r-observability-tracing-detail.md +0 -20
  187. package/rules/hatch3r-observability-tracing-detail.mdc +0 -14
  188. package/rules/hatch3r-observability.md +0 -20
  189. package/rules/hatch3r-observability.mdc +0 -14
  190. package/skills/hatch3r-agent-customize/SKILL.md +0 -23
  191. package/skills/hatch3r-cli-aichat/SKILL.md +0 -84
  192. package/skills/hatch3r-cli-ast-grep/SKILL.md +0 -85
  193. package/skills/hatch3r-cli-az-devops/SKILL.md +0 -89
  194. package/skills/hatch3r-cli-bat/SKILL.md +0 -85
  195. package/skills/hatch3r-cli-comby/SKILL.md +0 -85
  196. package/skills/hatch3r-cli-csvkit/SKILL.md +0 -84
  197. package/skills/hatch3r-cli-delta/SKILL.md +0 -86
  198. package/skills/hatch3r-cli-difftastic/SKILL.md +0 -84
  199. package/skills/hatch3r-cli-docker/SKILL.md +0 -89
  200. package/skills/hatch3r-cli-duckdb/SKILL.md +0 -84
  201. package/skills/hatch3r-cli-glab/SKILL.md +0 -89
  202. package/skills/hatch3r-cli-lazygit/SKILL.md +0 -78
  203. package/skills/hatch3r-cli-llm/SKILL.md +0 -84
  204. package/skills/hatch3r-cli-miller/SKILL.md +0 -84
  205. package/skills/hatch3r-cli-mods/SKILL.md +0 -84
  206. package/skills/hatch3r-cli-overview/SKILL.md +0 -60
  207. package/skills/hatch3r-cli-playwright/SKILL.md +0 -89
  208. package/skills/hatch3r-cli-podman/SKILL.md +0 -84
  209. package/skills/hatch3r-cli-qsv/SKILL.md +0 -91
  210. package/skills/hatch3r-cli-rtk/SKILL.md +0 -91
  211. package/skills/hatch3r-cli-sd/SKILL.md +0 -85
  212. package/skills/hatch3r-cli-stagehand/SKILL.md +0 -111
  213. package/skills/hatch3r-cli-taplo/SKILL.md +0 -84
  214. package/skills/hatch3r-cli-yq/SKILL.md +0 -85
  215. package/skills/hatch3r-cli-zstd/SKILL.md +0 -85
  216. package/skills/hatch3r-command-customize/SKILL.md +0 -23
  217. package/skills/hatch3r-rule-customize/SKILL.md +0 -23
  218. package/skills/hatch3r-skill-customize/SKILL.md +0 -23
  219. /package/{agents → dist/content/agents}/hatch3r-architect.md +0 -0
  220. /package/{agents → dist/content/agents}/hatch3r-docs-writer.md +0 -0
  221. /package/{agents → dist/content/agents}/hatch3r-perf-profiler.md +0 -0
  222. /package/{agents → dist/content/agents}/modes/architecture.md +0 -0
  223. /package/{agents → dist/content/agents}/modes/boundary-analysis.md +0 -0
  224. /package/{agents → dist/content/agents}/modes/codebase-impact.md +0 -0
  225. /package/{agents → dist/content/agents}/modes/complexity-risk.md +0 -0
  226. /package/{agents → dist/content/agents}/modes/coverage-analysis.md +0 -0
  227. /package/{agents → dist/content/agents}/modes/current-state.md +0 -0
  228. /package/{agents → dist/content/agents}/modes/feature-design.md +0 -0
  229. /package/{agents → dist/content/agents}/modes/impact-analysis.md +0 -0
  230. /package/{agents → dist/content/agents}/modes/library-docs.md +0 -0
  231. /package/{agents → dist/content/agents}/modes/migration-path.md +0 -0
  232. /package/{agents → dist/content/agents}/modes/prior-art.md +0 -0
  233. /package/{agents → dist/content/agents}/modes/refactoring-strategy.md +0 -0
  234. /package/{agents → dist/content/agents}/modes/regression.md +0 -0
  235. /package/{agents → dist/content/agents}/modes/requirements-elicitation.md +0 -0
  236. /package/{agents → dist/content/agents}/modes/risk-assessment.md +0 -0
  237. /package/{agents → dist/content/agents}/modes/risk-prioritization.md +0 -0
  238. /package/{agents → dist/content/agents}/modes/root-cause.md +0 -0
  239. /package/{agents → dist/content/agents}/modes/similar-implementation.md +0 -0
  240. /package/{agents → dist/content/agents}/modes/symptom-trace.md +0 -0
  241. /package/{agents → dist/content/agents}/modes/test-pattern.md +0 -0
  242. /package/{agents → dist/content/agents}/modes/user-flows.md +0 -0
  243. /package/{agents → dist/content/agents}/shared/efficiency-patterns.md +0 -0
  244. /package/{agents → dist/content/agents}/shared/prompt-structure.md +0 -0
  245. /package/{checks → dist/content/checks}/README.md +0 -0
  246. /package/{checks → dist/content/checks}/accessibility.md +0 -0
  247. /package/{checks → dist/content/checks}/code-quality.md +0 -0
  248. /package/{checks → dist/content/checks}/performance.md +0 -0
  249. /package/{checks → dist/content/checks}/security.md +0 -0
  250. /package/{checks → dist/content/checks}/testing.md +0 -0
  251. /package/{commands → dist/content/commands}/board/pickup-modes.md +0 -0
  252. /package/{commands → dist/content/commands}/board/shared-board-overview.md +0 -0
  253. /package/{commands → dist/content/commands}/revision/revision-board-integration.md +0 -0
  254. /package/{commands → dist/content/commands}/revision/revision-modes.md +0 -0
  255. /package/{mcp → dist/content/mcp}/mcp.json +0 -0
  256. /package/{rules → dist/content/rules}/hatch3r-ai-ux-patterns.mdc +0 -0
  257. /package/{rules → dist/content/rules}/hatch3r-api-design.md +0 -0
  258. /package/{rules → dist/content/rules}/hatch3r-api-design.mdc +0 -0
  259. /package/{rules → dist/content/rules}/hatch3r-code-standards.mdc +0 -0
  260. /package/{rules → dist/content/rules}/hatch3r-component-conventions.mdc +0 -0
  261. /package/{rules → dist/content/rules}/hatch3r-deep-context.mdc +0 -0
  262. /package/{rules → dist/content/rules}/hatch3r-feature-flags.md +0 -0
  263. /package/{rules → dist/content/rules}/hatch3r-feature-flags.mdc +0 -0
  264. /package/{rules → dist/content/rules}/hatch3r-git-conventions.mdc +0 -0
  265. /package/{rules → dist/content/rules}/hatch3r-i18n.mdc +0 -0
  266. /package/{rules → dist/content/rules}/hatch3r-iteration-summary.mdc +0 -0
  267. /package/{rules → dist/content/rules}/hatch3r-progressive-delivery.md +0 -0
  268. /package/{rules → dist/content/rules}/hatch3r-progressive-delivery.mdc +0 -0
  269. /package/{rules → dist/content/rules}/hatch3r-theming.mdc +0 -0
  270. /package/{skills → dist/content/skills}/hatch3r-a11y-audit/references/manual-audit-checklist.md +0 -0
  271. /package/{skills → dist/content/skills}/hatch3r-ai-feature/SKILL.md +0 -0
  272. /package/{skills → dist/content/skills}/hatch3r-api-spec/SKILL.md +0 -0
  273. /package/{skills → dist/content/skills}/hatch3r-ci-pipeline/SKILL.md +0 -0
  274. /package/{skills → dist/content/skills}/hatch3r-issue-workflow/references/delegation-patterns.md +0 -0
  275. /package/{skills → dist/content/skills}/hatch3r-logical-refactor/SKILL.md +0 -0
  276. /package/{skills → dist/content/skills}/hatch3r-reliability-verify/SKILL.md +0 -0
@@ -6,6 +6,8 @@ efficiency_patterns: agents/shared/efficiency-patterns.md
6
6
  cache_friendly: true
7
7
  ---
8
8
 
9
+ > Last updated: 2026-05-26
10
+
9
11
  ## Agent Quality Charter
10
12
 
11
13
  All agents operating under hatch3r should embody these behavioral standards. This charter is the single source of truth for agent conduct — referenced by content artifacts and verified by the weekly audit cycle.
@@ -60,6 +62,8 @@ Every recommendation should account for its impact on:
60
62
 
61
63
  When stakeholder interests conflict, note the tradeoff explicitly and recommend based on the project's stated priorities.
62
64
 
65
+ Apply the subset of stakeholders relevant to the project's declared maturity tier (solo / team / scaleup / enterprise per `hatch3r config maturity`). **Solo:** end user + maintaining developer (you). **Team:** + team lead. **Scaleup:** + ops team. **Enterprise:** + compliance + security review. When the tier is unknown, default to solo and ask via `agents/shared/user-question-protocol.md`.
66
+
63
67
  ### 6. Fail Gracefully
64
68
 
65
69
  When prerequisites are missing, inputs are invalid, or unexpected conditions arise:
@@ -98,7 +102,11 @@ When modifying code that is consumed by other modules, agents, or external syste
98
102
  - If a contract change is necessary, document it explicitly in the structured output and flag for reviewer attention.
99
103
  - Prefer additive changes (new optional fields, overloaded signatures) over breaking changes.
100
104
 
101
- ### 10. Standardized Iteration Summary
105
+ ### 10. Consult Prior Learnings
106
+
107
+ Before answering project-specific questions about prior work, decisions, or resolved issues, read `.hatch3r/learnings/INDEX.md` (when present) and any topic-applies index entries matched against the current task. Cite the consulted entry IDs in the structured output. Implementer + Reviewer + Researcher agents are bound; other roles consult when context applies.
108
+
109
+ ### 11. Standardized Iteration Summary
102
110
 
103
111
  Every user-facing iteration ends with the canonical Iteration Summary block defined in `rules/hatch3r-iteration-summary.md`.
104
112
 
@@ -106,6 +114,26 @@ Required fields: Status (closed enum: SUCCESS | PARTIAL | FAILED | BLOCKED), Out
106
114
 
107
115
  Never substitute a prose paragraph for the block. Never silently skip Not Done — if scope was fully completed, write `None — full scope completed`. Never inflate confidence — if you did not verify, say medium and name the unknown.
108
116
 
117
+ ### 12. Anti-Duplication Procedure
118
+
119
+ Before writing implementation code: run a codebase pattern search (grep for similar function names, similar type shapes, similar comment headers); report findings in the structured output. After writing: run a duplication scan (jscpd or equivalent) against the affected directories; flag any block matching ≥30 lines or ≥80% similarity with existing code. Refactor or justify before merge; silent duplication is a P4 violation.
120
+
121
+ ### 13. Adversarial Thinking
122
+
123
+ For any non-trivial design choice, hold an internal adversarial review: what is the strongest case AGAINST this approach? What edge case breaks it? What stakeholder loses under this choice? Surface the counter-argument in the structured output alongside the chosen approach.
124
+
125
+ ### 14. Severity Discipline
126
+
127
+ When classifying issues (bugs, code smells, design concerns), apply the severity taxonomy from `governance/AUDIT.md` §Severity Taxonomy (Critical / High / Medium / Low / Info). Calibrate against blast radius + reversibility + user impact. Critical reserved for production-blocking; Low/Info for cosmetic-only.
128
+
129
+ ### 15. Currency Verification
130
+
131
+ Every external claim (library version, API behavior, platform feature) is verified against current official documentation (≤180 days). When sources conflict, prefer the publication with the most recent access date. CLI tools (`gh`, `curl`, `jq`) preferred over training-data recall.
132
+
133
+ ### 16. Senior-Engineer Outside-In Posture
134
+
135
+ Approach every task from the perspective of a senior engineer with an outside-in user-facing perspective: the user judges by user-visible quality (UI/UX, performance, error recovery), not internal cleverness. Solve for user-visible quality first; refactor for maintainability second. When trade-offs surface between internal elegance and user-facing correctness, choose user-facing correctness.
136
+
109
137
  ### UI/UX quality (for agent-produced output in end-user projects)
110
138
 
111
139
  When an agent produces UI for an end-user project, the charter binds it to these criteria. Each is measurable; each is a regression if missed.
@@ -123,8 +151,8 @@ Cross-reference: this section is audited under D10 SA10.9 (`governance/audit/dom
123
151
 
124
152
  When an agent produces a service that handles a request, the charter binds it to these criteria. Each is measurable.
125
153
 
126
- - **OpenTelemetry spans on request path:** every inbound request and every outbound call (DB, HTTP, queue, RPC) emits an OTel span with `trace_id` and `span_id` propagated end-to-end; instrumented-route ratio = 100% (no silent paths). Reference `rules/hatch3r-observability.md`.
127
- - **Structured logs with trace correlation:** every log line is JSON, carries `trace_id`, includes service name + version + environment, and uses log levels mapped to severity. Stack traces emitted on `error`. Reference `rules/hatch3r-observability.md`.
154
+ - **OpenTelemetry spans on request path:** every inbound request and every outbound call (DB, HTTP, queue, RPC) emits an OTel span with `trace_id` and `span_id` propagated end-to-end; instrumented-route ratio = 100% (no silent paths). Reference `rules/hatch3r-observability-tracing.md` and `rules/hatch3r-observability-logging.md`.
155
+ - **Structured logs with trace correlation:** every log line is JSON, carries `trace_id`, includes service name + version + environment, and uses log levels mapped to severity. Stack traces emitted on `error`. Reference `rules/hatch3r-observability-tracing.md` and `rules/hatch3r-observability-logging.md`.
128
156
  - **RED + USE metrics on user-facing services:** Rate, Errors, Duration per route plus Utilization, Saturation, Errors per resource. Histograms over averages on latency.
129
157
  - **SLO with multi-window multi-burn-rate alerts:** every user-facing service declares an availability + latency SLO; alerts use the 2%/5%/10% multi-window multi-burn-rate pattern (Google SRE workbook), not raw threshold alerts.
130
158
  - **Error tracker with PII scrubbing:** Sentry-class tooling with source-map upload, release tag, environment tag, and an allowlist scrubber for known PII fields before egress.
@@ -12,7 +12,7 @@ Canonical reference for the body and frontmatter shapes `hatch3r-creator` produc
12
12
 
13
13
  ### 1. Agent Skeleton
14
14
 
15
- **Path:** `.agents/user/agents/<NAME>.md`. **Required:** `id`, `description`, `model`, `tags`. **Optional:** `protected` (always `false` for user agents), `quality_charter` (auto-injected), `adapters` (restricts adapter propagation when present).
15
+ **Path:** `.hatch3r/overrides/agents/<NAME>.md`. **Required:** `id`, `description`, `model`, `tags`. **Optional:** `protected` (always `false` for user agents), `quality_charter` (auto-injected), `adapters` (restricts adapter propagation when present).
16
16
 
17
17
  ```yaml
18
18
  ---
@@ -84,7 +84,7 @@ The three sections above (Confidence Expression, Failure Modes, Quality Charter)
84
84
 
85
85
  ### 2. Skill Skeleton
86
86
 
87
- **Path:** `.agents/user/skills/<NAME>/SKILL.md` inside a new directory created via `mkdir -p`. The layout matches the canonical pattern at `skills/hatch3r-<name>/SKILL.md`. **Required:** `id`, `description`, `tags`. **Optional:** `quality_charter` (auto-injected).
87
+ **Path:** `.hatch3r/overrides/skills/<NAME>/SKILL.md` inside a new directory created via `mkdir -p`. The layout matches the canonical pattern at `skills/hatch3r-<name>/SKILL.md`. **Required:** `id`, `description`, `tags`. **Optional:** `quality_charter` (auto-injected).
88
88
 
89
89
  ```yaml
90
90
  ---
@@ -125,7 +125,7 @@ Recommended step count: 3-7. Skills with more than 7 steps trigger a gentle warn
125
125
 
126
126
  ### 3. Rule Skeleton
127
127
 
128
- **Path:** `.agents/user/rules/<NAME>.md` plus the auto-generated companion `.agents/user/rules/<NAME>.mdc`. The `.md` is canonical; `.mdc` is generated by `saveUserContent` using the `.md → .mdc` scope transform from `rules/hatch3r-content-authoring.md`. **Required:** `id`, `type`, `description`, `scope`, `tags`. **Required when scope=conditional:** `globs`. **Optional:** `precedence` (default `normal`), `quality_charter` (auto-injected).
128
+ **Path:** `.hatch3r/overrides/rules/<NAME>.md` plus the auto-generated companion `.hatch3r/overrides/rules/<NAME>.mdc`. The `.md` is canonical; `.mdc` is generated by `saveUserContent` using the `.md → .mdc` scope transform from `rules/hatch3r-content-authoring.md`. **Required:** `id`, `type`, `description`, `scope`, `tags`. **Required when scope=conditional:** `globs`. **Optional:** `precedence` (default `normal`), `quality_charter` (auto-injected).
129
129
 
130
130
  Three scope shapes (pick one):
131
131
 
@@ -168,10 +168,10 @@ The body bytes of `.md` and `.mdc` must match exactly (paired-file parity is a s
168
168
 
169
169
  ### 4. Command Skeleton
170
170
 
171
- **Path:** `.agents/user/commands/<NAME>.md`. **Required:** `id`, `type`, `description`, `orchestrator`, `tags`. **Required when orchestrator=true:** `agentPipeline` (non-empty array). **Optional:** `quality_charter` (auto-injected). Two variants follow; pick by the `orchestrator` value.
171
+ **Path:** `.hatch3r/overrides/commands/<NAME>.md`. **Required:** `id`, `type`, `description`, `orchestrator`, `tags`. **Required when orchestrator=true:** `agentPipeline` (non-empty array). **Optional:** `quality_charter` (auto-injected). Two variants follow; pick by the `orchestrator` value.
172
172
 
173
173
  ```yaml
174
- # 4a. Inline command — orchestrator: false. Modeled after commands/hatch3r-recipe.md.
174
+ # 4a. Inline command — orchestrator: false. Modeled after commands/hatch3r-debug.md.
175
175
  ---
176
176
  id: <NAME>
177
177
  type: command
@@ -183,7 +183,7 @@ quality_charter: agents/shared/quality-charter.md
183
183
  ```
184
184
 
185
185
  ```yaml
186
- # 4b. Orchestrator command — orchestrator: true. Modeled after commands/hatch3r-board-init.md.
186
+ # 4b. Orchestrator command — orchestrator: true. Modeled after commands/hatch3r-board-fill.md.
187
187
  ---
188
188
  id: <NAME>
189
189
  type: command
@@ -245,7 +245,7 @@ The strict gate `validateCommandOrchestratorFrontmatter` (`src/cli/commands/vali
245
245
 
246
246
  ### 5. Hook Skeleton
247
247
 
248
- **Path:** `.agents/user/hooks/<NAME>.md`. **Required:** `id`, `type`, `event`, `agent`, `description`, `tags`. **Optional:** `globs` (file-save filtering), `condition`, `quality_charter` (auto-injected). **Event enum:** `pre-commit | post-merge | ci-failure | file-save | session-start | pre-push`, enforced by `isValidHookEvent` (`src/hooks/types.ts:30`).
248
+ **Path:** `.hatch3r/overrides/hooks/<NAME>.md`. **Required:** `id`, `type`, `event`, `agent`, `description`, `tags`. **Optional:** `globs` (file-save filtering), `condition`, `quality_charter` (auto-injected). **Event enum:** `pre-commit | post-merge | ci-failure | file-save | session-start | pre-push`, enforced by `isValidHookEvent` (`src/hooks/types.ts:30`).
249
249
 
250
250
  ```yaml
251
251
  ---
@@ -274,14 +274,14 @@ When this hook fires, the assigned agent should:
274
274
  <DESCRIBES-WHAT-THE-AGENT-RETURNS-OR-WRITES>
275
275
  ```
276
276
 
277
- The `agent` field must reference an existing agent — canonical (e.g., `lint-fixer` resolves to `agents/hatch3r-lint-fixer.md`) or under `.agents/user/agents/`. Missing references are rejected at strict-gate time.
277
+ The `agent` field must reference an existing agent — canonical (e.g., `lint-fixer` resolves to `agents/hatch3r-lint-fixer.md`) or under `.hatch3r/overrides/agents/`. Missing references are rejected at strict-gate time.
278
278
 
279
279
  ## Reference Implementations
280
280
 
281
- For each user type, mirror the canonical shape below — minus the `hatch3r-` filename prefix; the user-tier path is always under `.agents/user/{type}/`:
281
+ For each user type, mirror the canonical shape below — minus the `hatch3r-` filename prefix; the user-tier path is always under `.hatch3r/overrides/{type}/`:
282
282
 
283
283
  - **Agent:** `agents/hatch3r-implementer.md` (full body) or `agents/hatch3r-fixer.md` (compact body).
284
284
  - **Skill:** `skills/hatch3r-bug-fix/SKILL.md` or `skills/hatch3r-feature/SKILL.md`.
285
285
  - **Rule:** `rules/hatch3r-deep-context.md` (`scope: always`) or `rules/hatch3r-component-conventions.md` (`scope: conditional`).
286
- - **Command:** `commands/hatch3r-recipe.md` (inline) or `commands/hatch3r-board-init.md` (orchestrator).
286
+ - **Command:** `commands/hatch3r-debug.md` (inline) or `commands/hatch3r-board-fill.md` (orchestrator).
287
287
  - **Hook:** `hooks/hatch3r-pre-commit.md` (with globs) or `hooks/hatch3r-session-start.md` (always-fire).
@@ -6,6 +6,8 @@ tags: [shared, ux, p1, p4]
6
6
  cache_friendly: true
7
7
  ---
8
8
 
9
+ > Last updated: 2026-05-26
10
+
9
11
  ## Purpose
10
12
 
11
13
  This protocol defines how hatch3r agents and commands surface clarifying or triage questions to the user across the 15 supported AI coding platforms. It is the single source of truth for the *how* of asking; the *whether* is governed by [quality-charter §3 "Question Unclear Requirements"](./quality-charter.md) and §8 "Escalate Ambiguity Early". Files that reference this protocol: the requirements-elicitation mode (`agents/modes/requirements-elicitation.md`), the five ASK-checkpoint commands, and the four ask-prone agents — researcher, fixer, architect, implementer.
@@ -56,7 +56,7 @@ Follow the **Azure Boards Work Item State Sync** from `commands/board/shared-azu
56
56
  **Create PR:**
57
57
  `az repos pr create --org https://dev.azure.com/{namespace} --project {project} --source-branch {branch} --target-branch {base} --title "..." --description "..."` (fall back to `create_pull_request` MCP).
58
58
 
59
- `{base}` = `board.defaultBranch` from `.agents/hatch.json` (fallback: `"main"`).
59
+ `{base}` = `board.defaultBranch` from `.hatch3r/hatch.json` (fallback: `"main"`).
60
60
 
61
61
  **Link PR to epic:**
62
62
  `az boards work-item relation add --id {epic_id} --relation-type "ArtifactLink" --target-id {pr_id}` or link via PR description.
@@ -78,8 +78,8 @@ For each dependency level, starting at Level 1:
78
78
  - **Blast radius data** from enhanced `codebase-impact` (Tier 3) — transitive dependency trace and API consumer map.
79
79
  - Documentation references relevant to this sub-issue.
80
80
  - Instruction to follow the hatch3r-implementer agent protocol.
81
- - All `scope: always` rule directives from `.agents/rules/` — subagents do not inherit rules automatically.
82
- - Relevant learnings from `.agents/learnings/` (from Step 6.pre).
81
+ - All `scope: always` rule directives from `rules/` — subagents do not inherit rules automatically.
82
+ - Relevant learnings from `.hatch3r/learnings/` (from Step 6.pre).
83
83
  - Instruction to use GitHub MCP for issue reads, and follow the project's tooling hierarchy for external knowledge augmentation.
84
84
  - Explicit instruction: do NOT create branches, commits, or PRs.
85
85
  - Confidence expression requirement: rate every recommendation and finding as high/medium/low confidence per the quality charter (`agents/shared/quality-charter.md`). High = verified against current code. Medium = pattern-based, not fully verified. Low = best judgment, recommend human review.
@@ -147,8 +147,8 @@ For each dependency level, starting at Level 1:
147
147
  - **Blast radius data** from enhanced `codebase-impact` (Tier 3).
148
148
  - Documentation references relevant to this issue.
149
149
  - Instruction to follow the **hatch3r-implementer agent protocol**.
150
- - All `scope: always` rule directives from `.agents/rules/` — subagents do not inherit rules automatically.
151
- - Relevant learnings from `.agents/learnings/` (from Step 6.pre).
150
+ - All `scope: always` rule directives from `rules/` — subagents do not inherit rules automatically.
151
+ - Relevant learnings from `.hatch3r/learnings/` (from Step 6.pre).
152
152
  - Explicit instruction: do NOT create branches, commits, or PRs.
153
153
  - Confidence expression requirement: rate every recommendation and finding as high/medium/low confidence per the quality charter (`agents/shared/quality-charter.md`). High = verified against current code. Medium = pattern-based, not fully verified. Low = best judgment, recommend human review.
154
154
 
@@ -57,8 +57,8 @@ The implementer sub-agent prompt MUST include:
57
57
  - **Blast radius data** from enhanced `codebase-impact` (Tier 3) — transitive dependency trace and API consumer map.
58
58
  - Documentation references relevant to this issue.
59
59
  - Instruction to follow the **hatch3r-implementer agent protocol**.
60
- - All `scope: always` rule directives from `.agents/rules/` — subagents do not inherit rules automatically.
61
- - Relevant learnings from `.agents/learnings/` (from Step 6.pre).
60
+ - All `scope: always` rule directives from `rules/` — subagents do not inherit rules automatically.
61
+ - Relevant learnings from `.hatch3r/learnings/` (from Step 6.pre).
62
62
  - Explicit instruction: do NOT create branches, commits, or PRs.
63
63
  - Confidence expression requirement: rate every recommendation and finding as high/medium/low confidence per the quality charter (`agents/shared/quality-charter.md`). High = verified against current code. Medium = pattern-based, not fully verified. Low = best judgment, recommend human review.
64
64
 
@@ -97,7 +97,7 @@ Launch as many independent sub-agents in parallel as the platform supports.
97
97
 
98
98
  Each specialist sub-agent prompt MUST include:
99
99
  - The agent protocol to follow (e.g., "Follow the hatch3r-reviewer agent protocol").
100
- - All `scope: always` rule directives from `.agents/rules/` (subagents do not inherit rules automatically).
100
+ - All `scope: always` rule directives from `rules/` (subagents do not inherit rules automatically).
101
101
  - The diff or file changes to review.
102
102
  - The issue's acceptance criteria.
103
103
  - Confidence expression requirement: rate every recommendation and finding as high/medium/low confidence per the quality charter (`agents/shared/quality-charter.md`). High = verified against current code. Medium = pattern-based, not fully verified. Low = best judgment, recommend human review.
@@ -56,7 +56,7 @@ Follow the **GitHub Projects V2 Sync** from `commands/board/shared-github.md` fo
56
56
  **Create PR:**
57
57
  `gh pr create -R {owner}/{repo} --head {branch} --base {base} --title "..." --body "..."` (fall back to `create_pull_request` MCP).
58
58
 
59
- `{base}` = `board.defaultBranch` from `.agents/hatch.json` (fallback: `"main"`).
59
+ `{base}` = `board.defaultBranch` from `.hatch3r/hatch.json` (fallback: `"main"`).
60
60
 
61
61
  **Link PR to epic:**
62
62
  `gh issue comment {epic} -R {owner}/{repo} --body "PR: #{pr_number}"` (fall back to `add_issue_comment` MCP).
@@ -56,7 +56,7 @@ Follow the **GitLab Board Label-Based Sync** from `commands/board/shared-gitlab.
56
56
  **Create MR:**
57
57
  `glab mr create -R {namespace}/{project} --source-branch {branch} --target-branch {base} --title "..." --description "..."`. Use `Closes #N` syntax in the description for auto-close on merge.
58
58
 
59
- `{base}` = `board.defaultBranch` from `.agents/hatch.json` (fallback: `"main"`).
59
+ `{base}` = `board.defaultBranch` from `.hatch3r/hatch.json` (fallback: `"main"`).
60
60
 
61
61
  **Link MR to epic:**
62
62
  Reference the epic issue number in the MR description. GitLab auto-links MRs to issues mentioned with `Closes #N`.
@@ -118,7 +118,7 @@ After the PR merges and `Closes #N` auto-closes the referenced issue(s), confirm
118
118
  ```
119
119
  Record the mutation in the run cache under `updated_issues`.
120
120
 
121
- 2. **Board state check.** Read `board.workflows.itemClosedEnabled` from `.agents/hatch.json`:
121
+ 2. **Board state check.** Read `board.workflows.itemClosedEnabled` from `.hatch3r/hatch.json`:
122
122
  - **If true:** The V2 built-in "Item closed" workflow has already set the board status to Done. Skip to step 3.
123
123
  - **If false or absent:** The workflow is not enabled (board-init should have halted, but this is a defensive fallback). Apply the full **Board Sync Procedure** from `hatch3r-board-shared` for each issue, target status = Done.
124
124
 
@@ -142,7 +142,7 @@ After PR creation, capture learnings from this development session.
142
142
  - Were any pitfalls discovered that should be avoided next time?
143
143
 
144
144
  2. If learnings are identified:
145
- - Create learning files in `.agents/learnings/` following the learning file format (see `hatch3r-learn` command).
145
+ - Create learning files in `.hatch3r/learnings/` following the learning file format (see `hatch3r-learn` command).
146
146
  - Include the issue number as `source-issue`.
147
147
  - Tag with relevant area labels from the issue.
148
148
  - **ASK:** "Learnings captured: {list}. Anything else to note? (add more / done)"
@@ -56,7 +56,7 @@ Use `az devops` / `az boards` / `az repos` CLI. Issues = Work Items. PRs = Pull
56
56
 
57
57
  ## Azure DevOps Context
58
58
 
59
- Derived from `.agents/hatch.json` board config:
59
+ Derived from `.hatch3r/hatch.json` board config:
60
60
 
61
61
  - **Organization:** top-level `owner` (maps to Azure DevOps organization name)
62
62
  - **Project:** top-level `repo` (maps to Azure DevOps project name)
@@ -56,7 +56,7 @@ Use `gh` CLI and GitHub MCP tools. Issues = GitHub Issues. PRs = Pull Requests.
56
56
 
57
57
  ## GitHub Context
58
58
 
59
- Derived from `.agents/hatch.json` board config:
59
+ Derived from `.hatch3r/hatch.json` board config:
60
60
 
61
61
  - **Owner:** top-level `owner` (fallback: `board.owner`)
62
62
  - **Repository:** top-level `repo` (fallback: `board.repo`)
@@ -89,7 +89,7 @@ If `board.projectNumber` is not null, verify via `gh project view {board.project
89
89
 
90
90
  **Status label → Projects v2 option mapping:**
91
91
 
92
- Read the mapping from `board.statusOptions` in `.agents/hatch.json`:
92
+ Read the mapping from `board.statusOptions` in `.hatch3r/hatch.json`:
93
93
 
94
94
  | Label | Option ID from hatch.json |
95
95
  | -------------------- | ---------------------------------- |
@@ -49,7 +49,7 @@ GitLab MCP tools are not currently available. All operations use the `glab` CLI.
49
49
 
50
50
  ## GitLab Context
51
51
 
52
- Derived from `.agents/hatch.json` board config:
52
+ Derived from `.hatch3r/hatch.json` board config:
53
53
 
54
54
  - **Namespace:** top-level `owner` (GitLab group or user namespace)
55
55
  - **Project:** top-level `repo` (GitLab project name)
@@ -36,7 +36,7 @@ Take a codebase with HTTP or RPC endpoints and produce a complete OpenAPI 3.1 sp
36
36
 
37
37
  ## Shared Context
38
38
 
39
- **Read the `hatch3r-board-shared` command at the start of the run** if it exists. Cache any values found (GitHub owner/repo, tooling directives).
39
+ **Read the `hatch3r-board-shared` skill at the start of the run** if it exists. Cache any values found (GitHub owner/repo, tooling directives).
40
40
 
41
41
  **Read the `hatch3r-api-design` rule** if it exists. This rule contains the project's API design conventions (naming, versioning, error shapes, pagination patterns) that the generated spec must conform to.
42
42
 
@@ -36,7 +36,7 @@ Run performance benchmarks against a target (file, function, endpoint, or full s
36
36
 
37
37
  ## Shared Context
38
38
 
39
- **Read the `hatch3r-board-shared` command at the start of the run** if it exists. While this command does not perform board operations directly, it establishes patterns and context (GitHub owner/repo, tooling directives) that may be useful for regression issue creation. Cache any values found.
39
+ **Read the `hatch3r-board-shared` skill at the start of the run** if it exists. While this command does not perform board operations directly, it establishes patterns and context (GitHub owner/repo, tooling directives) that may be useful for regression issue creation. Cache any values found.
40
40
 
41
41
  ## Token-Saving Directives
42
42
 
@@ -4,7 +4,7 @@ type: command
4
4
  orchestrator: true
5
5
  agentPipeline: [hatch3r-reviewer, hatch3r-fixer]
6
6
  description: Create epics and issues/work items from todo.md, reorganize the board with dependency analysis, readiness assessment, and implementation ordering. Supports GitHub, Azure DevOps, and GitLab.
7
- tags: [board, team]
7
+ tags: [board, ctx:team-only]
8
8
  quality_charter: agents/shared/quality-charter.md
9
9
  efficiency_patterns: agents/shared/efficiency-patterns.md
10
10
  cache_friendly: true
@@ -31,7 +31,7 @@ All issue operations MUST follow the Board Sync Enforcement rules defined in `ha
31
31
 
32
32
  # Board Fill -- Create Epics & Issues from todo.md + Board Reorganization
33
33
 
34
- Create epics (with sub-issues) or standalone issues/work items from items in `todo.md`, using the platform's CLI and MCP tools against **{owner}/{repo}** (read from `.agents/hatch.json` board config). The `platform` field determines whether to use GitHub Issues, Azure DevOps Work Items, or GitLab Issues. Before creating anything, board-fill **triages each item through interactive questioning** to extract scope, intent, unknowns, and acceptance criteria from the user -- ensuring issues are genuinely ready for implementation, not just structurally complete. On every run, board-fill also performs a **full board reorganization**: grouping standalone issues into epics, decomposing oversized items, analyzing dependencies, setting implementation order, identifying parallel work, and marking issues as `status:ready` when all readiness criteria (structural + substantive) are met. AI proposes groupings, dependencies, and ordering; user confirms before anything is created or updated. Duplicate topics are detected and skipped.
34
+ Create epics (with sub-issues) or standalone issues/work items from items in `todo.md`, using the platform's CLI and MCP tools against **{owner}/{repo}** (read from `.hatch3r/hatch.json` board config). The `platform` field determines whether to use GitHub Issues, Azure DevOps Work Items, or GitLab Issues. Before creating anything, board-fill **triages each item through interactive questioning** to extract scope, intent, unknowns, and acceptance criteria from the user -- ensuring issues are genuinely ready for implementation, not just structurally complete. On every run, board-fill also performs a **full board reorganization**: grouping standalone issues into epics, decomposing oversized items, analyzing dependencies, setting implementation order, identifying parallel work, and marking issues as `status:ready` when all readiness criteria (structural + substantive) are met. AI proposes groupings, dependencies, and ordering; user confirms before anything is created or updated. Duplicate topics are detected and skipped.
35
35
 
36
36
  ---
37
37
 
@@ -52,7 +52,7 @@ GitHub Agentic Workflows and hatch3r are complementary: use agentic workflows fo
52
52
 
53
53
  ## Shared Context
54
54
 
55
- **Read the `hatch3r-board-shared` command at the start of the run.** It contains Board Configuration, Platform Detection, Platform Context, Board Sync Procedure, and tooling directives. Cache all values for the duration of this run.
55
+ **Read the `hatch3r-board-shared` skill at the start of the run.** It contains Board Configuration, Platform Detection, Platform Context, Board Sync Procedure, and tooling directives. Cache all values for the duration of this run.
56
56
 
57
57
  ## Token-Saving Directives
58
58
 
@@ -86,7 +86,7 @@ If Tier 1, run only Steps 1–3, 5–6, and 7 (skip the heavy production-readine
86
86
 
87
87
  #### 1a. Product Vision Input (Optional)
88
88
 
89
- 1. Check if a product vision document exists at `.agents/product-vision.md`.
89
+ 1. Check if a product vision document exists at `.hatch3r/product-vision.md`.
90
90
  2. If found, read and cache the vision document for use in Steps 2.5 and 4.
91
91
  3. If not found, check whether the user provided a vision statement inline with the board-fill invocation (e.g., as a quoted string or file path argument).
92
92
  4. If a vision is available from either source, note: "Product vision loaded — will use for triage context and issue scoping."
@@ -276,7 +276,7 @@ If the user flagged unresolved unknowns or research needs in triage, consider wh
276
276
 
277
277
  **Priority:** `priority:p0` (critical/security) / `priority:p1` (broken, no workaround) / `priority:p2` (degraded, default) / `priority:p3` (cosmetic, nice-to-have). Use the user's stated urgency and impact from triage (Value/Why answers) to override keyword defaults. Default `p2` only when both the todo text AND triage answers are ambiguous; security defaults to `p1`+.
278
278
 
279
- **Area:** Read area labels from `board.areas` in `.agents/hatch.json`. If the list is empty, infer areas from the repository's directory structure. Assign all relevant area labels.
279
+ **Area:** Read area labels from `board.areas` in `.hatch3r/hatch.json`. If the list is empty, infer areas from the repository's directory structure. Assign all relevant area labels.
280
280
 
281
281
  **Risk:** `risk:low` (isolated, easy rollback) / `risk:med` (shared modules, moderate scope) / `risk:high` (architectural, security-critical). Incorporate triage context: if the user surfaced unknowns, external dependencies, or broad blast radius, escalate risk accordingly. Items with unresolved spikes default to `risk:med`+.
282
282
 
@@ -300,7 +300,7 @@ Use explore subagents or direct file reads to understand the current state of so
300
300
 
301
301
  #### 4b.5. Consult Project Learnings
302
302
 
303
- 1. If `.agents/learnings/` exists, scan for learnings relevant to the areas touched by the todo items.
303
+ 1. If `.hatch3r/learnings/` exists, scan for learnings relevant to the areas touched by the todo items.
304
304
  2. Match by `area` and `tags` in learning frontmatter against the area labels assigned in Step 3.
305
305
  3. Surface relevant learnings in the Context Summary output:
306
306
  - **Pitfalls** for areas being touched (highest priority -- include specific warnings)
@@ -785,7 +785,7 @@ If yes, edit `todo.md` to remove lines for created issues. Preserve skipped/excl
785
785
 
786
786
  - **Never create issues for topics already covered** without explicit user approval.
787
787
  - **Never skip ASK checkpoints.**
788
- - **Use correct labels** from the label taxonomy defined in `.agents/hatch.json` (type, priority, area, risk, executor, status, has-dependencies, meta labels).
788
+ - **Use correct labels** from the label taxonomy defined in `.hatch3r/hatch.json` (type, priority, area, risk, executor, status, has-dependencies, meta labels).
789
789
  - **Keep issue bodies concise.** Acceptance criteria must be grounded in user-stated requirements from triage, not fabricated from the todo text alone.
790
790
  - **No dependency cycles.** Flag and resolve before proceeding.
791
791
  - **Never downgrade issue status.** Only upgrade `status:triage` → `status:ready`.
@@ -4,7 +4,7 @@ type: command
4
4
  orchestrator: true
5
5
  agentPipeline: [hatch3r-researcher, hatch3r-implementer, hatch3r-reviewer, hatch3r-fixer, hatch3r-test-writer, hatch3r-security-auditor, hatch3r-docs-writer, hatch3r-lint-fixer, hatch3r-a11y-auditor, hatch3r-perf-profiler]
6
6
  description: Pick up one or more epics/issues from the project board for development. Handles dependency-aware selection, collision detection, branching, parallel sub-agent delegation, and batch execution. Supports GitHub, Azure DevOps, and GitLab. Platform-specific details are in commands/board/pickup-{platform}.md.
7
- tags: [board, team]
7
+ tags: [board, ctx:team-only]
8
8
  quality_charter: agents/shared/quality-charter.md
9
9
  efficiency_patterns: agents/shared/efficiency-patterns.md
10
10
  cache_friendly: true
@@ -21,7 +21,7 @@ Before any action, scan the user's request and provided context for unresolved q
21
21
 
22
22
  # Board Pickup -- Develop Issues from the Project Board
23
23
 
24
- Pick up an epic (with all sub-issues), a single sub-issue, a standalone issue, or **a batch of independent issues** from **{owner}/{repo}** (read from `.agents/hatch.json` board config) for development. The `platform` field determines whether to interact with GitHub Issues, Azure DevOps Work Items, or GitLab Issues. Supports single-issue and multi-issue batch modes. When no specific issue is referenced, auto-picks the next best candidate(s). Respects dependency order and readiness status. Performs collision detection, creates a branch, then delegates implementation via one sub-agent per issue running in parallel.
24
+ Pick up an epic (with all sub-issues), a single sub-issue, a standalone issue, or **a batch of independent issues** from **{owner}/{repo}** (read from `.hatch3r/hatch.json` board config) for development. The `platform` field determines whether to interact with GitHub Issues, Azure DevOps Work Items, or GitLab Issues. Supports single-issue and multi-issue batch modes. When no specific issue is referenced, auto-picks the next best candidate(s). Respects dependency order and readiness status. Performs collision detection, creates a branch, then delegates implementation via one sub-agent per issue running in parallel.
25
25
 
26
26
  ---
27
27
 
@@ -57,7 +57,7 @@ hatch3r board commands orchestrate the **implementation delivery pipeline** (ini
57
57
 
58
58
  ## Shared Context
59
59
 
60
- **Read the `hatch3r-board-shared` command at the start of the run.** It contains Board Configuration, Platform Detection, Platform Context, Board Sync Procedure, and tooling directives. Cache all values for the duration of this run.
60
+ **Read the `hatch3r-board-shared` skill at the start of the run.** It contains Board Configuration, Platform Detection, Platform Context, Board Sync Procedure, and tooling directives. Cache all values for the duration of this run.
61
61
 
62
62
  All issue operations in this command MUST follow the Board Sync Enforcement rules defined in `hatch3r-board-shared`. Every status change, issue creation, and update must be synced to the board immediately.
63
63
 
@@ -267,7 +267,7 @@ Follow the **Board Sync Procedure** from `hatch3r-board-shared` for each issue m
267
267
 
268
268
  **If branch exists:** **ASK** reuse / delete+recreate / rename with `-v2`.
269
269
 
270
- **Normal path:** Use `{base}` = `board.defaultBranch` from `.agents/hatch.json` (fallback: `"main"`).
270
+ **Normal path:** Use `{base}` = `board.defaultBranch` from `.hatch3r/hatch.json` (fallback: `"main"`).
271
271
 
272
272
  ```bash
273
273
  git checkout {base} && git pull origin {base} && git checkout -b {branch-name}
@@ -293,7 +293,7 @@ Use the issue type to select the appropriate hatch3r skill: `type:bug` → the h
293
293
 
294
294
  #### 6.pre: Consult Learnings
295
295
 
296
- Before delegating: scan `.agents/learnings/` for matching `area`/`tags`, include relevant learnings (especially `pitfall` category) in sub-agent context. Skip silently if no learnings directory exists.
296
+ Before delegating: scan `.hatch3r/learnings/` for matching `area`/`tags`, include relevant learnings (especially `pitfall` category) in sub-agent context. Skip silently if no learnings directory exists.
297
297
 
298
298
  > **Audit epics:** Audit epics produce findings (issues) rather than code changes — adjust delegation and skip Steps 7-8a if no code changes.
299
299
 
@@ -318,7 +318,7 @@ Execute Steps 7-10 in order after all implementation completes:
318
318
  - **Step 8:** Create PR/MR with proper `Closes #N` references. See platform sub-files for CLI commands.
319
319
  - **Step 8a:** Transition labels to `status:in-review` and sync board. See platform sub-files.
320
320
  - **Step 9:** Post-PR housekeeping: epic link verification, board dashboard refresh (9a, mandatory), end-of-run reconciliation (9b, mandatory).
321
- - **Step 10:** Capture learnings in `.agents/learnings/` if any were identified.
321
+ - **Step 10:** Capture learnings in `.hatch3r/learnings/` if any were identified.
322
322
 
323
323
  ---
324
324
 
@@ -4,7 +4,7 @@ type: command
4
4
  orchestrator: true
5
5
  agentPipeline: [hatch3r-researcher, hatch3r-docs-writer]
6
6
  description: Diagnose a complex incident -- reproduce the symptom, rank root-cause hypotheses, design the fix path, and emit regression coverage items as a board-ready investigation
7
- tags: [core, planning]
7
+ tags: [planning, orchestration]
8
8
  quality_charter: agents/shared/quality-charter.md
9
9
  efficiency_patterns: agents/shared/efficiency-patterns.md
10
10
  cache_friendly: true
@@ -40,7 +40,7 @@ Take a complex or ambiguous bug report and produce a structured investigation re
40
40
 
41
41
  ## Shared Context
42
42
 
43
- **Read the `hatch3r-board-shared` command at the start of the run** if it exists. While this command does not perform board operations directly, it establishes patterns and context (GitHub owner/repo, tooling directives) that downstream commands like `hatch3r-board-fill` rely on. Cache any values found.
43
+ **Read the `hatch3r-board-shared` skill at the start of the run** if it exists. While this command does not perform board operations directly, it establishes patterns and context (GitHub owner/repo, tooling directives) that downstream commands like `hatch3r-board-fill` rely on. Cache any values found.
44
44
 
45
45
  ## Token-Saving Directives
46
46
 
@@ -102,10 +102,10 @@ Bug Brief:
102
102
  - `docs/adr/` — architectural decision records (scan for decisions relevant to the affected area)
103
103
  - `docs/investigations/` — prior investigation reports (check for related or recurring bugs)
104
104
  - `README.md` — project overview
105
- - `.agents/hatch.json` — board configuration
105
+ - `.hatch3r/hatch.json` — board configuration
106
106
  - Existing `todo.md` — current backlog (check for overlap or related items)
107
107
  2. Scan GitHub issues via `search_issues` for existing work related to the bug. Note duplicates, related bugs, or prior investigations.
108
- 3. If `.agents/learnings/` exists, scan for learnings relevant to the affected area. Match by area and tags against the bug brief.
108
+ 3. If `.hatch3r/learnings/` exists, scan for learnings relevant to the affected area. Match by area and tags against the bug brief.
109
109
  4. Present a context summary:
110
110
 
111
111
  ```
@@ -428,7 +428,7 @@ If yes, instruct the user to invoke the `hatch3r-board-fill` command. Note that
428
428
  - **Sub-agent failure:** Retry the failed sub-agent once. If it fails again, present partial results from the remaining sub-agents and ask the user how to proceed (continue without that researcher's input / provide the missing information manually / abort).
429
429
  - **Conflicting researcher outputs:** Present both options side by side with trade-offs. Ask the user to decide. Do not silently pick one.
430
430
  - **File write failure:** Report the error and provide the full file content so the user can create the file manually.
431
- - **Missing project context:** If no `hatch3r-board-shared` or `.agents/hatch.json` exists, proceed without board context — this command does not require board configuration.
431
+ - **Missing project context:** If no `hatch3r-board-shared` or `.hatch3r/hatch.json` exists, proceed without board context — this command does not require board configuration.
432
432
  - **No existing specs or docs:** Proceed without spec references. Warn that the investigation will be less contextualized without existing project documentation. Recommend running `hatch3r-project-spec` or `hatch3r-codebase-map` first for best results.
433
433
  - **Duplicate detection:** If the bug overlaps significantly with existing todo.md items, GitHub issues, or prior investigation reports found in Step 2, present the overlap and ASK whether to proceed (augment existing / replace / abort).
434
434
  - **No clear root cause:** If all hypotheses are low-confidence, state this clearly. Recommend a focused debugging session (using `hatch3r-bug-fix` skill with the top hypothesis) rather than generating speculative fix items. ASK the user how to proceed.
@@ -4,7 +4,7 @@ type: command
4
4
  orchestrator: true
5
5
  agentPipeline: [hatch3r-researcher, hatch3r-docs-writer]
6
6
  description: Reverse-engineer a brownfield codebase into current-state module boundaries, integration-point inventory, tech-debt register, and dependency graph via static analysis
7
- tags: [planning, brownfield]
7
+ tags: [planning, ctx:brownfield-only]
8
8
  quality_charter: agents/shared/quality-charter.md
9
9
  efficiency_patterns: agents/shared/efficiency-patterns.md
10
10
  cache_friendly: true
@@ -105,7 +105,7 @@ From config files and top-level imports, identify:
105
105
  - Check for `docs/specs/` — if exists, note contents (including `business/` and `technical/` subdirectories)
106
106
  - Check for `docs/adr/` — if exists, note contents
107
107
  - Check for `README.md`, `CONTRIBUTING.md`, `ARCHITECTURE.md`, or similar
108
- - Check for `.agents/hatch.json` — if exists, this project already has hatch3r configuration
108
+ - Check for `.hatch3r/hatch.json` — if exists, this project already has hatch3r configuration
109
109
  - Check for root `AGENTS.md` — if exists, note its contents
110
110
 
111
111
  If `docs/specs/` or `docs/adr/` already exist:
@@ -3,8 +3,8 @@ id: hatch3r-create
3
3
  type: command
4
4
  orchestrator: true
5
5
  agentPipeline: [hatch3r-creator]
6
- description: Author a custom user-tier artifact (agent, skill, rule, command, or hook) for this project. Generates frontmatter and body skeleton, applies strict + gentle quality gates, writes to .agents/user/{type}/, and offers to sync to all enabled adapters.
7
- tags: [core, customize]
6
+ description: Author a custom user-tier artifact (agent, skill, rule, command, or hook) for this project. Generates frontmatter and body skeleton, applies strict + gentle quality gates, writes to .hatch3r/overrides/{type}/, and offers to sync to all enabled adapters.
7
+ tags: [customize]
8
8
  quality_charter: agents/shared/quality-charter.md
9
9
  efficiency_patterns: agents/shared/efficiency-patterns.md
10
10
  cache_friendly: true
@@ -25,7 +25,7 @@ This command runs as an orchestrator. After collecting inputs in Phase 1, it del
25
25
 
26
26
  # `/hatch3r-create` — Author a User-Tier Artifact
27
27
 
28
- Use this command when you need a project-specific agent, skill, rule, command, or hook that does not exist in the canonical hatch3r corpus. The command writes one new artifact under `.agents/user/{type}/` per invocation, runs the same frontmatter/security/structural gates the framework uses on canonical content (strict — block on failure), and runs style/lean checks as warnings (gentle — save proceeds, warnings reported).
28
+ Use this command when you need a project-specific agent, skill, rule, command, or hook that does not exist in the canonical hatch3r corpus. The command writes one new artifact under `.hatch3r/overrides/{type}/` per invocation, runs the same frontmatter/security/structural gates the framework uses on canonical content (strict — block on failure), and runs style/lean checks as warnings (gentle — save proceeds, warnings reported).
29
29
 
30
30
  The 5 supported types: **agent** (sub-agent invokable from orchestrators), **skill** (workflow recipe), **rule** (always or glob-scoped guidance), **command** (slash command, inline or orchestrator), **hook** (event-triggered agent invocation).
31
31
 
@@ -75,7 +75,7 @@ Cache the selection as `type`.
75
75
  Validate the name against the regex `^[a-z][a-z0-9-]*$`. Reject and re-ask if:
76
76
 
77
77
  - The name fails the regex (uppercase, underscores, leading digit, etc.).
78
- - The name starts with `hatch3r-` — this prefix is reserved for canonical framework content. Show: "Names starting with `hatch3r-` are reserved for canonical framework artifacts. Choose a different prefix or omit the prefix entirely. The framework will namespace the file path under `.agents/user/{type}/` automatically."
78
+ - The name starts with `hatch3r-` — this prefix is reserved for canonical framework content. Show: "Names starting with `hatch3r-` are reserved for canonical framework artifacts. Choose a different prefix or omit the prefix entirely. The framework will namespace the file path under `.hatch3r/overrides/{type}/` automatically."
79
79
 
80
80
  Cache the validated name as `name`.
81
81
 
@@ -124,9 +124,9 @@ Cache as `adapters` (array, or `null` for full parity).
124
124
  Branch on the cached `type`:
125
125
 
126
126
  - **agent:** Ask for `model` preference (default: `standard`; options: `fast | standard | reasoning`). Ask for an optional tool-allowlist hint (free-text). Cache as `model` and `toolHint`. Then ask for a structured `tools` declaration (see §1.6a below) and cache as `tools`.
127
- - **skill:** Confirm the subdirectory layout. Show: "Skill files are stored as `.agents/user/skills/{name}/SKILL.md` (a new directory will be created). Continue?" — ASK Y/n.
127
+ - **skill:** Confirm the subdirectory layout. Show: "Skill files are stored as `.hatch3r/overrides/skills/{name}/SKILL.md` (a new directory will be created). Continue?" — ASK Y/n.
128
128
  - **rule:** Ask for scope: `always` (loaded every session) or `conditional` (loaded by glob match). If `conditional`, ASK for a comma-separated glob list (e.g., `src/**/*.ts, src/**/*.tsx`). Then ASK for `precedence` (one of `critical | high | normal | low`, default `normal`). Cache as `ruleScope`, `ruleGlobs`, `rulePrecedence`.
129
- - **command:** ASK whether this is an orchestrator command. If yes, ASK for the agent pipeline as a comma-separated list of agent IDs (each ID must reference an existing agent — canonical or under `.agents/user/agents/`). Cache as `isOrchestrator` and `agentPipeline`.
129
+ - **command:** ASK whether this is an orchestrator command. If yes, ASK for the agent pipeline as a comma-separated list of agent IDs (each ID must reference an existing agent — canonical or under `.hatch3r/overrides/agents/`). Cache as `isOrchestrator` and `agentPipeline`.
130
130
  - **hook:** ASK for the hook event from the enum: `pre-commit | post-merge | ci-failure | file-save | session-start | pre-push`. Reject any value outside this enum and re-ask. Cache as `hookEvent`.
131
131
 
132
132
  #### 1.6a: Structured Tool Declaration (C9-H81, D20-F20.1.3)
@@ -222,14 +222,14 @@ Print the absolute path(s) and the next-step pointer:
222
222
 
223
223
  ```
224
224
  Created:
225
- /abs/path/.agents/user/{type}/{name}.md
226
- /abs/path/.agents/user/rules/{name}.mdc (rule only — paired companion)
225
+ /abs/path/.hatch3r/overrides/{type}/{name}.md
226
+ /abs/path/.hatch3r/overrides/rules/{name}.mdc (rule only — paired companion)
227
227
 
228
228
  Next step:
229
229
  Run `hatch3r sync` to propagate this artifact to all enabled adapter outputs
230
230
  (.cursor/, .claude/, .github/copilot-instructions.md, etc.).
231
231
 
232
- Edit your artifact directly anytime — `.agents/user/` is preserved across
232
+ Edit your artifact directly anytime — `.hatch3r/overrides/` is preserved across
233
233
  `hatch3r update` and `hatch3r clean`.
234
234
  ```
235
235
 
@@ -237,8 +237,8 @@ Edit your artifact directly anytime — `.agents/user/` is preserved across
237
237
 
238
238
  ## Constraints / Anti-Patterns
239
239
 
240
- - **Never overwrite an existing user file.** Collision with an existing path under `.agents/user/{type}/` is a strict-gate failure raised by `hatch3r-creator` (status `BLOCKED` with the conflicting path).
241
- - **Never write to canonical content directories.** All output goes under `.agents/user/`. Writes to `agents/`, `skills/`, `rules/`, `commands/`, or `hooks/` are rejected.
240
+ - **Never overwrite an existing user file.** Collision with an existing path under `.hatch3r/overrides/{type}/` is a strict-gate failure raised by `hatch3r-creator` (status `BLOCKED` with the conflicting path).
241
+ - **Never write to canonical content directories.** All output goes under `.hatch3r/overrides/`. Writes to `agents/`, `skills/`, `rules/`, `commands/`, or `hooks/` are rejected.
242
242
  - **Never bypass strict gates.** Strict failures (frontmatter, ID collision, deny patterns, paired-file parity, orchestrator contract, hook event enum, ≤10KB size, quality_charter reference, pillar declaration, structured `tools` field shape + category membership) block the save.
243
243
  - **Structured tool allowlist required (strict shape).** When `tools` is supplied for an `agent` artifact, every entry in `tools.allowed` and `tools.denied` must resolve to a canonical category from `ALL_TOOL_CATEGORIES` in `src/pipeline/agentToolAllowlist.ts` (`read | search | write | execute | web | mcp | git | board`). Overlap between the two lists is rejected. Strict-gate enforced at `saveUserContent` (C9-H81, D20-F20.1.3; depends on C9-H49 Hybrid allowlist).
244
244
  - **Pillar coverage required (strict).** Every user artifact must declare at least one of P1–P8 — via `pillars: [...]` in frontmatter (collected at Step 1.4a) or a `**Pillars:** ...` line in the body. The strict gate at `saveUserContent` blocks the save when neither is present (C9-H80, D20-F20.1.2).