@erclx/canon 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/claude/.claude-plugin/plugin.json +19 -0
  4. package/claude/skills/bash-cli-script/REQUIREMENT.md +42 -0
  5. package/claude/skills/bash-cli-script/SKILL.md +48 -0
  6. package/claude/skills/bash-cli-script/references/template.md +43 -0
  7. package/claude/skills/bash-script/REQUIREMENT.md +36 -0
  8. package/claude/skills/bash-script/SKILL.md +100 -0
  9. package/claude/skills/bash-script/references/patterns.md +349 -0
  10. package/claude/skills/canon-cli/REQUIREMENT.md +41 -0
  11. package/claude/skills/canon-cli/SKILL.md +103 -0
  12. package/claude/skills/canon-feedback-file/REQUIREMENT.md +40 -0
  13. package/claude/skills/canon-feedback-file/SKILL.md +80 -0
  14. package/claude/skills/canon-feedback-triage/REQUIREMENT.md +40 -0
  15. package/claude/skills/canon-feedback-triage/SKILL.md +63 -0
  16. package/claude/skills/canon-operator/REQUIREMENT.md +61 -0
  17. package/claude/skills/canon-operator/SKILL.md +108 -0
  18. package/claude/skills/canon-rollout/REQUIREMENT.md +59 -0
  19. package/claude/skills/canon-rollout/SKILL.md +147 -0
  20. package/claude/skills/canon-screencast/REQUIREMENT.md +39 -0
  21. package/claude/skills/canon-screencast/SKILL.md +167 -0
  22. package/claude/skills/canon-slides-draft/REQUIREMENT.md +39 -0
  23. package/claude/skills/canon-slides-draft/SKILL.md +62 -0
  24. package/claude/skills/ci-workflow/REQUIREMENT.md +40 -0
  25. package/claude/skills/ci-workflow/SKILL.md +65 -0
  26. package/claude/skills/ci-workflow/references/workflows.md +98 -0
  27. package/claude/skills/claude-address-review/REQUIREMENT.md +57 -0
  28. package/claude/skills/claude-address-review/SKILL.md +212 -0
  29. package/claude/skills/claude-address-review/references/rebase-conflicts.md +39 -0
  30. package/claude/skills/claude-autoship/REQUIREMENT.md +50 -0
  31. package/claude/skills/claude-autoship/SKILL.md +207 -0
  32. package/claude/skills/claude-design-extract/REQUIREMENT.md +42 -0
  33. package/claude/skills/claude-design-extract/SKILL.md +102 -0
  34. package/claude/skills/claude-diagram/REQUIREMENT.md +45 -0
  35. package/claude/skills/claude-diagram/SKILL.md +177 -0
  36. package/claude/skills/claude-docs/REQUIREMENT.md +60 -0
  37. package/claude/skills/claude-docs/SKILL.md +287 -0
  38. package/claude/skills/claude-docs/references/anchor-sweep.md +58 -0
  39. package/claude/skills/claude-docs/references/wireframe-sweep.md +45 -0
  40. package/claude/skills/claude-feature/REQUIREMENT.md +36 -0
  41. package/claude/skills/claude-feature/SKILL.md +115 -0
  42. package/claude/skills/claude-groundwork/REQUIREMENT.md +48 -0
  43. package/claude/skills/claude-groundwork/SKILL.md +142 -0
  44. package/claude/skills/claude-intake/REQUIREMENT.md +49 -0
  45. package/claude/skills/claude-intake/SKILL.md +114 -0
  46. package/claude/skills/claude-intake-answer/REQUIREMENT.md +48 -0
  47. package/claude/skills/claude-intake-answer/SKILL.md +90 -0
  48. package/claude/skills/claude-markdown-propose/REQUIREMENT.md +48 -0
  49. package/claude/skills/claude-markdown-propose/SKILL.md +118 -0
  50. package/claude/skills/claude-markdown-propose/references/format.md +107 -0
  51. package/claude/skills/claude-memory-capture/REQUIREMENT.md +50 -0
  52. package/claude/skills/claude-memory-capture/SKILL.md +101 -0
  53. package/claude/skills/claude-memory-review/REQUIREMENT.md +50 -0
  54. package/claude/skills/claude-memory-review/SKILL.md +210 -0
  55. package/claude/skills/claude-memory-review/references/receipt-format.md +48 -0
  56. package/claude/skills/claude-orchestrate/REQUIREMENT.md +121 -0
  57. package/claude/skills/claude-orchestrate/SKILL.md +241 -0
  58. package/claude/skills/claude-orchestrate/references/orchestrator-dispatch.md +132 -0
  59. package/claude/skills/claude-orchestrate/references/orchestrator-handoff.md +32 -0
  60. package/claude/skills/claude-orchestrate/references/orchestrator-parked.md +72 -0
  61. package/claude/skills/claude-orchestrate/references/orchestrator-poll.md +87 -0
  62. package/claude/skills/claude-orchestrate/references/orchestrator-resume.md +30 -0
  63. package/claude/skills/claude-orchestrate/references/orchestrator-sweep.md +21 -0
  64. package/claude/skills/claude-orchestrate/scripts/poll.sh +373 -0
  65. package/claude/skills/claude-orchestrate/scripts/watch.sh +181 -0
  66. package/claude/skills/claude-pr-review/REQUIREMENT.md +47 -0
  67. package/claude/skills/claude-pr-review/SKILL.md +295 -0
  68. package/claude/skills/claude-review/REQUIREMENT.md +39 -0
  69. package/claude/skills/claude-review/SKILL.md +142 -0
  70. package/claude/skills/claude-seed-sync/REQUIREMENT.md +45 -0
  71. package/claude/skills/claude-seed-sync/SKILL.md +156 -0
  72. package/claude/skills/claude-standards-audit/REQUIREMENT.md +33 -0
  73. package/claude/skills/claude-standards-audit/SKILL.md +99 -0
  74. package/claude/skills/claude-tasks/REQUIREMENT.md +43 -0
  75. package/claude/skills/claude-tasks/SKILL.md +161 -0
  76. package/claude/skills/claude-teach/REQUIREMENT.md +56 -0
  77. package/claude/skills/claude-teach/SKILL.md +196 -0
  78. package/claude/skills/claude-teach/references/lesson-craft.md +59 -0
  79. package/claude/skills/claude-teach/references/pedagogy.md +67 -0
  80. package/claude/skills/claude-teach/references/promotion.md +54 -0
  81. package/claude/skills/claude-ui-test/REQUIREMENT.md +40 -0
  82. package/claude/skills/claude-ui-test/SKILL.md +77 -0
  83. package/claude/skills/claude-ux-audit/REQUIREMENT.md +40 -0
  84. package/claude/skills/claude-ux-audit/SKILL.md +79 -0
  85. package/claude/skills/claude-ux-measure/REQUIREMENT.md +48 -0
  86. package/claude/skills/claude-ux-measure/SKILL.md +122 -0
  87. package/claude/skills/claude-worker/REQUIREMENT.md +54 -0
  88. package/claude/skills/claude-worker/SKILL.md +96 -0
  89. package/claude/skills/claude-worktree/REQUIREMENT.md +58 -0
  90. package/claude/skills/claude-worktree/SKILL.md +136 -0
  91. package/claude/skills/create-rule/REQUIREMENT.md +45 -0
  92. package/claude/skills/create-rule/SKILL.md +68 -0
  93. package/claude/skills/create-skill/REQUIREMENT.md +38 -0
  94. package/claude/skills/create-skill/SKILL.md +32 -0
  95. package/claude/skills/create-snippet/REQUIREMENT.md +39 -0
  96. package/claude/skills/create-snippet/SKILL.md +30 -0
  97. package/claude/skills/create-standard/REQUIREMENT.md +35 -0
  98. package/claude/skills/create-standard/SKILL.md +29 -0
  99. package/claude/skills/decision-escalate/REQUIREMENT.md +45 -0
  100. package/claude/skills/decision-escalate/SKILL.md +79 -0
  101. package/claude/skills/docs-sync/REQUIREMENT.md +41 -0
  102. package/claude/skills/docs-sync/SKILL.md +95 -0
  103. package/claude/skills/git-branch/REQUIREMENT.md +38 -0
  104. package/claude/skills/git-branch/SKILL.md +60 -0
  105. package/claude/skills/git-commit/REQUIREMENT.md +36 -0
  106. package/claude/skills/git-commit/SKILL.md +49 -0
  107. package/claude/skills/git-followup/REQUIREMENT.md +43 -0
  108. package/claude/skills/git-followup/SKILL.md +48 -0
  109. package/claude/skills/git-issue/REQUIREMENT.md +38 -0
  110. package/claude/skills/git-issue/SKILL.md +65 -0
  111. package/claude/skills/git-pr/REQUIREMENT.md +50 -0
  112. package/claude/skills/git-pr/SKILL.md +164 -0
  113. package/claude/skills/git-pr/references/labels.md +95 -0
  114. package/claude/skills/git-ship/REQUIREMENT.md +42 -0
  115. package/claude/skills/git-ship/SKILL.md +55 -0
  116. package/claude/skills/git-split/REQUIREMENT.md +39 -0
  117. package/claude/skills/git-split/SKILL.md +162 -0
  118. package/claude/skills/git-stage/REQUIREMENT.md +39 -0
  119. package/claude/skills/git-stage/SKILL.md +73 -0
  120. package/claude/skills/git-worktree/REQUIREMENT.md +38 -0
  121. package/claude/skills/git-worktree/SKILL.md +130 -0
  122. package/claude/skills/migration-claude-md/REQUIREMENT.md +40 -0
  123. package/claude/skills/migration-claude-md/SKILL.md +76 -0
  124. package/claude/skills/migration-context/REQUIREMENT.md +36 -0
  125. package/claude/skills/migration-context/SKILL.md +95 -0
  126. package/claude/skills/migration-standards-drop/REQUIREMENT.md +55 -0
  127. package/claude/skills/migration-standards-drop/SKILL.md +113 -0
  128. package/claude/skills/migration-superseded/REQUIREMENT.md +44 -0
  129. package/claude/skills/migration-superseded/SKILL.md +115 -0
  130. package/claude/skills/project-commands/REQUIREMENT.md +42 -0
  131. package/claude/skills/project-commands/SKILL.md +85 -0
  132. package/claude/skills/restate-plainly/REQUIREMENT.md +41 -0
  133. package/claude/skills/restate-plainly/SKILL.md +39 -0
  134. package/claude/skills/session-map/REQUIREMENT.md +57 -0
  135. package/claude/skills/session-map/SKILL.md +70 -0
  136. package/claude/skills/session-resume/REQUIREMENT.md +49 -0
  137. package/claude/skills/session-resume/SKILL.md +51 -0
  138. package/claude/skills/setup-gov/REQUIREMENT.md +37 -0
  139. package/claude/skills/setup-gov/SKILL.md +77 -0
  140. package/claude/skills/setup-indexes/REQUIREMENT.md +45 -0
  141. package/claude/skills/setup-indexes/SKILL.md +153 -0
  142. package/claude/skills/setup-init/REQUIREMENT.md +45 -0
  143. package/claude/skills/setup-init/SKILL.md +127 -0
  144. package/claude/skills/setup-plugins/REQUIREMENT.md +42 -0
  145. package/claude/skills/setup-plugins/SKILL.md +81 -0
  146. package/claude/skills/setup-plugins/references/plugin-catalog.md +53 -0
  147. package/claude/skills/setup-verify/REQUIREMENT.md +39 -0
  148. package/claude/skills/setup-verify/SKILL.md +51 -0
  149. package/claude/skills/systematic-debugging/REQUIREMENT.md +41 -0
  150. package/claude/skills/systematic-debugging/SKILL.md +70 -0
  151. package/claude/skills/write-human/REQUIREMENT.md +46 -0
  152. package/claude/skills/write-human/SKILL.md +68 -0
  153. package/claude/skills/write-human/references/density.md +38 -0
  154. package/claude/skills/write-human/references/machine-tells.md +107 -0
  155. package/claude/skills/write-human/references/source-material.md +37 -0
  156. package/claude/skills/youtube-transcripts/REQUIREMENT.md +38 -0
  157. package/claude/skills/youtube-transcripts/SKILL.md +34 -0
  158. package/docs/agents/audits.md +98 -0
  159. package/docs/agents/capture.md +37 -0
  160. package/docs/agents/census.md +23 -0
  161. package/docs/agents/commands.md +146 -0
  162. package/docs/agents/comments.md +34 -0
  163. package/docs/agents/context-audit-checks.md +120 -0
  164. package/docs/agents/context-audit.md +83 -0
  165. package/docs/agents/counts.md +76 -0
  166. package/docs/agents/demo.md +86 -0
  167. package/docs/agents/docs.md +17 -0
  168. package/docs/agents/gate.md +84 -0
  169. package/docs/agents/index.md +47 -0
  170. package/docs/agents/indexes.md +35 -0
  171. package/docs/agents/install-and-sync.md +385 -0
  172. package/docs/agents/intake.md +81 -0
  173. package/docs/agents/key-changes.md +103 -0
  174. package/docs/agents/label-coverage.md +73 -0
  175. package/docs/agents/markdown-audit.md +197 -0
  176. package/docs/agents/output-shape.md +70 -0
  177. package/docs/agents/overview.md +26 -0
  178. package/docs/agents/records.md +170 -0
  179. package/docs/agents/restated.md +81 -0
  180. package/docs/agents/review-classification.md +77 -0
  181. package/docs/agents/routing.md +61 -0
  182. package/docs/agents/rule-citations.md +98 -0
  183. package/docs/agents/sandbox.md +71 -0
  184. package/docs/agents/scripting.md +149 -0
  185. package/docs/agents/sessions.md +120 -0
  186. package/docs/agents/skills-audit.md +94 -0
  187. package/docs/agents/skills-reach.md +64 -0
  188. package/docs/agents/standards-audit.md +38 -0
  189. package/docs/agents/state-scoped-risk.md +105 -0
  190. package/docs/agents/superseded.md +85 -0
  191. package/docs/agents/targets.md +83 -0
  192. package/docs/agents/tasks.md +200 -0
  193. package/docs/agents/teach.md +158 -0
  194. package/docs/agents/test-order.md +56 -0
  195. package/docs/agents/worktrees.md +62 -0
  196. package/docs/ai-workflow.md +317 -0
  197. package/docs/index.md +23 -0
  198. package/docs/operating-model.md +223 -0
  199. package/docs/target-projects.md +258 -0
  200. package/docs/visual-design-workflow.md +151 -0
  201. package/docs/zshrc-aliases.md +65 -0
  202. package/governance/rules/ci/700-ci-workflow.md +44 -0
  203. package/governance/rules/claude/500-prose.md +15 -0
  204. package/governance/rules/claude/501-markdown.md +14 -0
  205. package/governance/rules/claude/510-context.md +28 -0
  206. package/governance/rules/claude/511-indexes.md +14 -0
  207. package/governance/rules/claude/520-wireframes.md +12 -0
  208. package/governance/rules/claude/530-requirements.md +11 -0
  209. package/governance/rules/claude/540-architecture.md +11 -0
  210. package/governance/rules/claude/550-design.md +11 -0
  211. package/governance/rules/claude/555-tasks.md +12 -0
  212. package/governance/rules/claude/556-groundwork.md +11 -0
  213. package/governance/rules/claude/557-intake.md +11 -0
  214. package/governance/rules/claude/558-plan.md +22 -0
  215. package/governance/rules/claude/559-memory.md +11 -0
  216. package/governance/rules/claude/560-diagrams.md +18 -0
  217. package/governance/rules/claude/561-teach.md +13 -0
  218. package/governance/rules/claude/562-session.md +15 -0
  219. package/governance/rules/claude/570-skill.md +24 -0
  220. package/governance/rules/claude/575-hooks.md +17 -0
  221. package/governance/rules/claude/576-settings.md +14 -0
  222. package/governance/rules/claude/580-readme.md +11 -0
  223. package/governance/rules/claude/590-rule-authoring.md +12 -0
  224. package/governance/rules/claude/591-standard-authoring.md +12 -0
  225. package/governance/rules/claude/592-claude-md.md +19 -0
  226. package/governance/rules/core/000-constitution.md +30 -0
  227. package/governance/rules/core/005-behavior.md +27 -0
  228. package/governance/rules/core/010-testing.md +35 -0
  229. package/governance/rules/core/015-output.md +20 -0
  230. package/governance/rules/core/020-concurrency.md +22 -0
  231. package/governance/rules/core/025-indexes.md +9 -0
  232. package/governance/rules/core/030-error-handling.md +31 -0
  233. package/governance/rules/core/035-tasks.md +13 -0
  234. package/governance/rules/core/040-performance.md +20 -0
  235. package/governance/rules/core/045-memory.md +12 -0
  236. package/governance/rules/core/050-logging.md +20 -0
  237. package/governance/rules/core/055-scratch.md +9 -0
  238. package/governance/rules/core/060-naming.md +19 -0
  239. package/governance/rules/core/065-spelling.md +19 -0
  240. package/governance/rules/core/070-planning.md +18 -0
  241. package/governance/rules/core/075-dependencies.md +25 -0
  242. package/governance/rules/core/080-config-comments.md +22 -0
  243. package/governance/rules/core/085-worktrees.md +17 -0
  244. package/governance/rules/core/087-git.md +11 -0
  245. package/governance/rules/core/090-code-comments.md +39 -0
  246. package/governance/rules/framework/200-react.md +51 -0
  247. package/governance/rules/framework/210-astro.md +41 -0
  248. package/governance/rules/framework/220-fastapi.md +43 -0
  249. package/governance/rules/framework/230-nextjs.md +48 -0
  250. package/governance/rules/framework/250-tailwind.md +32 -0
  251. package/governance/rules/framework/260-shadcn.md +34 -0
  252. package/governance/rules/lang/100-typescript.md +40 -0
  253. package/governance/rules/lang/110-python.md +42 -0
  254. package/governance/rules/lang/120-bash.md +19 -0
  255. package/governance/rules/lib/300-testing-ts.md +39 -0
  256. package/governance/rules/lib/305-e2e-reliability.md +34 -0
  257. package/governance/rules/lib/306-test-scope.md +25 -0
  258. package/governance/rules/lib/310-zod.md +25 -0
  259. package/governance/rules/lib/320-tanstack-query.md +32 -0
  260. package/governance/rules/lib/330-testing-py.md +44 -0
  261. package/governance/rules/lib/340-pydantic.md +38 -0
  262. package/governance/rules/lib/350-security-web.md +32 -0
  263. package/governance/rules/lib/360-security-server.md +39 -0
  264. package/governance/rules/lib/370-database.md +35 -0
  265. package/governance/rules/snippets/505-at-references.md +9 -0
  266. package/governance/rules/ui/400-ui.md +36 -0
  267. package/governance/rules/ui/410-a11y.md +48 -0
  268. package/governance/rules/ui/420-forms.md +36 -0
  269. package/governance/rules/ui/430-ux-completeness.md +65 -0
  270. package/governance/rules/ui/440-surface-capture.md +34 -0
  271. package/governance/rules/ui/450-link-behavior.md +19 -0
  272. package/governance/stacks/astro.toml +2 -0
  273. package/governance/stacks/base.toml +8 -0
  274. package/governance/stacks/node-server.toml +2 -0
  275. package/governance/stacks/node.toml +2 -0
  276. package/governance/stacks/python-fastapi.toml +2 -0
  277. package/governance/stacks/python.toml +2 -0
  278. package/governance/stacks/react.toml +2 -0
  279. package/package.json +69 -0
  280. package/scripts/config.sh +11 -0
  281. package/scripts/core/bootstrap.sh +81 -0
  282. package/scripts/core/check-color-source.sh +41 -0
  283. package/scripts/core/check-ignore-parity.sh +162 -0
  284. package/scripts/core/check-plugin-boundary.sh +45 -0
  285. package/scripts/core/check-seed-independence.sh +59 -0
  286. package/scripts/core/check-skill-paths.sh +24 -0
  287. package/scripts/core/clean.sh +36 -0
  288. package/scripts/core/install-check.sh +101 -0
  289. package/scripts/core/list-seed-roots.sh +18 -0
  290. package/scripts/core/regen-claude-copies.sh +10 -0
  291. package/scripts/core/regen-hero.sh +217 -0
  292. package/scripts/core/regen-indexes.sh +10 -0
  293. package/scripts/core/regen-tooling-paths.sh +61 -0
  294. package/scripts/core/repair-bare-flag.sh +19 -0
  295. package/scripts/core/snapshot.sh +134 -0
  296. package/scripts/core/update.sh +35 -0
  297. package/scripts/docs/list.sh +165 -0
  298. package/scripts/lib/frontmatter.sh +30 -0
  299. package/scripts/lib/gov.sh +14 -0
  300. package/scripts/lib/sandbox-fixtures.sh +191 -0
  301. package/scripts/lib/sandbox-git.sh +125 -0
  302. package/scripts/lib/sandbox-path.sh +206 -0
  303. package/scripts/lib/tooling.sh +35 -0
  304. package/scripts/lib/ui.sh +266 -0
  305. package/scripts/lib/worktree.sh +20 -0
  306. package/scripts/manage-sandbox.sh +466 -0
  307. package/scripts/snippets/create.sh +156 -0
  308. package/scripts/standards/list.sh +115 -0
  309. package/scripts/tooling/create.sh +109 -0
  310. package/scripts/tooling/verify.sh +179 -0
  311. package/snippets/align.md +12 -0
  312. package/snippets/claude/decision-memo.md +39 -0
  313. package/snippets/claude/feature-recap.md +19 -0
  314. package/snippets/claude/figma-steps.md +24 -0
  315. package/snippets/compact-summary.md +5 -0
  316. package/snippets/decision-help.md +6 -0
  317. package/snippets/meta-prompt.md +14 -0
  318. package/snippets/research-prompt.md +7 -0
  319. package/snippets/session-notes.md +11 -0
  320. package/snippets/snippets.toml +5 -0
  321. package/snippets/step-by-step.md +10 -0
  322. package/snippets/web-research.md +21 -0
  323. package/src/audits/baseline.ts +201 -0
  324. package/src/audits/catalog.ts +876 -0
  325. package/src/audits/run.ts +204 -0
  326. package/src/autoship/classify.ts +75 -0
  327. package/src/autoship/paths.ts +51 -0
  328. package/src/binary.ts +16 -0
  329. package/src/browser/engine.ts +40 -0
  330. package/src/census/count.ts +113 -0
  331. package/src/claude/cases/all.ts +24 -0
  332. package/src/claude/cases/authoring.ts +53 -0
  333. package/src/claude/cases/claude-workflow.ts +158 -0
  334. package/src/claude/cases/git.ts +44 -0
  335. package/src/claude/cases/misc.ts +27 -0
  336. package/src/claude/cases/setup.ts +94 -0
  337. package/src/claude/gitignore.ts +51 -0
  338. package/src/claude/routing.ts +283 -0
  339. package/src/claude/seeds-list.ts +47 -0
  340. package/src/claude/seeds.ts +150 -0
  341. package/src/claude/settings.ts +151 -0
  342. package/src/claude/skills-audit.ts +228 -0
  343. package/src/claude/skills-drift.ts +156 -0
  344. package/src/claude/skills-list.ts +99 -0
  345. package/src/claude/skills-rank.ts +320 -0
  346. package/src/claude/skills-reach.ts +227 -0
  347. package/src/cli-run.ts +43 -0
  348. package/src/cli.ts +200 -0
  349. package/src/commands/audits.ts +350 -0
  350. package/src/commands/autoship.ts +129 -0
  351. package/src/commands/capture.ts +133 -0
  352. package/src/commands/census.ts +105 -0
  353. package/src/commands/claude.ts +1286 -0
  354. package/src/commands/comments.ts +240 -0
  355. package/src/commands/context.ts +857 -0
  356. package/src/commands/demo.ts +389 -0
  357. package/src/commands/deps.ts +173 -0
  358. package/src/commands/design.ts +36 -0
  359. package/src/commands/docs.ts +60 -0
  360. package/src/commands/feedback-format.ts +23 -0
  361. package/src/commands/feedback.ts +112 -0
  362. package/src/commands/gate.ts +189 -0
  363. package/src/commands/gov.ts +1265 -0
  364. package/src/commands/indexes.ts +184 -0
  365. package/src/commands/init.ts +113 -0
  366. package/src/commands/intake.ts +406 -0
  367. package/src/commands/inventory.ts +256 -0
  368. package/src/commands/labels.ts +361 -0
  369. package/src/commands/markdown.ts +544 -0
  370. package/src/commands/migrate.ts +175 -0
  371. package/src/commands/pass-through.ts +39 -0
  372. package/src/commands/pr.ts +411 -0
  373. package/src/commands/records.ts +728 -0
  374. package/src/commands/sandbox.ts +468 -0
  375. package/src/commands/secrets.ts +132 -0
  376. package/src/commands/serve.ts +159 -0
  377. package/src/commands/sessions.ts +408 -0
  378. package/src/commands/slides.ts +126 -0
  379. package/src/commands/snippets.ts +84 -0
  380. package/src/commands/standards.ts +247 -0
  381. package/src/commands/sync.ts +428 -0
  382. package/src/commands/targets.ts +319 -0
  383. package/src/commands/tasks.ts +743 -0
  384. package/src/commands/teach.ts +786 -0
  385. package/src/commands/tooling.ts +573 -0
  386. package/src/commands/transcripts.ts +44 -0
  387. package/src/commands/upgrade.ts +231 -0
  388. package/src/commands/wiki.ts +100 -0
  389. package/src/commands/worktrees.ts +191 -0
  390. package/src/comments/scan.ts +338 -0
  391. package/src/comments/trend.ts +207 -0
  392. package/src/comments/vocabulary.ts +85 -0
  393. package/src/context/architecture.ts +364 -0
  394. package/src/context/audit.ts +790 -0
  395. package/src/context/citations.ts +196 -0
  396. package/src/context/folders.ts +186 -0
  397. package/src/context/gate.ts +57 -0
  398. package/src/context/index-drift.ts +64 -0
  399. package/src/context/narration.ts +99 -0
  400. package/src/copy.ts +30 -0
  401. package/src/counts/catalogs.ts +96 -0
  402. package/src/counts/numbers.ts +79 -0
  403. package/src/counts/scan.ts +314 -0
  404. package/src/demo/beats.ts +135 -0
  405. package/src/demo/compile.ts +326 -0
  406. package/src/demo/container.ts +63 -0
  407. package/src/demo/cursors.ts +55 -0
  408. package/src/demo/drive.ts +357 -0
  409. package/src/demo/pointer.ts +178 -0
  410. package/src/demo/theme.ts +112 -0
  411. package/src/deps/audit.ts +153 -0
  412. package/src/design/parse.ts +116 -0
  413. package/src/design/render.ts +249 -0
  414. package/src/docs/read.ts +77 -0
  415. package/src/exec.ts +16 -0
  416. package/src/exempt-marker.ts +43 -0
  417. package/src/frontmatter.ts +13 -0
  418. package/src/gate/measures.ts +682 -0
  419. package/src/gate/sequencer.ts +386 -0
  420. package/src/gate/stages.ts +412 -0
  421. package/src/git-env.ts +36 -0
  422. package/src/git-files.ts +105 -0
  423. package/src/git-ignore.ts +46 -0
  424. package/src/github-format.ts +13 -0
  425. package/src/github.ts +24 -0
  426. package/src/gov/adapter.ts +103 -0
  427. package/src/gov/citations.ts +514 -0
  428. package/src/gov/consumed.ts +129 -0
  429. package/src/gov/install.ts +132 -0
  430. package/src/gov/list.ts +106 -0
  431. package/src/gov/payload.ts +39 -0
  432. package/src/gov/restated.ts +814 -0
  433. package/src/gov/stacks.ts +205 -0
  434. package/src/gov/superseded.ts +415 -0
  435. package/src/gov/test-order.ts +407 -0
  436. package/src/indexes/frontmatter.ts +46 -0
  437. package/src/indexes/regen.ts +84 -0
  438. package/src/indexes/render.ts +201 -0
  439. package/src/indexes/walk.ts +83 -0
  440. package/src/init/flags.ts +60 -0
  441. package/src/init/plan.ts +114 -0
  442. package/src/init/run.ts +46 -0
  443. package/src/init/steps.ts +77 -0
  444. package/src/intake/folder.ts +320 -0
  445. package/src/intake/items.ts +174 -0
  446. package/src/inventory/config.ts +117 -0
  447. package/src/inventory/group.ts +76 -0
  448. package/src/inventory/subjects.ts +114 -0
  449. package/src/inventory/walk.ts +129 -0
  450. package/src/labels/audit.ts +82 -0
  451. package/src/labels/coverage.ts +79 -0
  452. package/src/labels/map.ts +101 -0
  453. package/src/labels/phase.ts +95 -0
  454. package/src/markdown/bans.ts +94 -0
  455. package/src/markdown/files.ts +102 -0
  456. package/src/markdown/gate.ts +28 -0
  457. package/src/markdown/scan.ts +295 -0
  458. package/src/markdown/structure.ts +730 -0
  459. package/src/migrate/apply.ts +115 -0
  460. package/src/migrate/plan.ts +103 -0
  461. package/src/migrate/rename.ts +183 -0
  462. package/src/pr/bijection.ts +145 -0
  463. package/src/pr/paths.ts +335 -0
  464. package/src/process/harness.ts +167 -0
  465. package/src/project-root.ts +19 -0
  466. package/src/records/backup.ts +455 -0
  467. package/src/records/migrate.ts +78 -0
  468. package/src/records/size.ts +260 -0
  469. package/src/records/validate.ts +1162 -0
  470. package/src/sandbox/census.ts +228 -0
  471. package/src/sandbox/coverage.ts +115 -0
  472. package/src/sandbox/expect.ts +629 -0
  473. package/src/sandbox/tree.ts +47 -0
  474. package/src/secrets/marker.ts +30 -0
  475. package/src/secrets/patterns.ts +142 -0
  476. package/src/secrets/scan.ts +123 -0
  477. package/src/secrets/shipped.ts +111 -0
  478. package/src/seed-marker.ts +74 -0
  479. package/src/serve/static.ts +322 -0
  480. package/src/sessions/claim.ts +85 -0
  481. package/src/sessions/live.ts +79 -0
  482. package/src/sessions/registry.ts +137 -0
  483. package/src/sessions/resolve.ts +333 -0
  484. package/src/slides/layouts.ts +391 -0
  485. package/src/slides/open.ts +18 -0
  486. package/src/slides/parse.ts +84 -0
  487. package/src/slides/render.ts +88 -0
  488. package/src/slides/styles.ts +44 -0
  489. package/src/snippets/categories.ts +66 -0
  490. package/src/snippets/list.ts +32 -0
  491. package/src/snippets/presets.ts +50 -0
  492. package/src/standards/audit.ts +132 -0
  493. package/src/standards/read.ts +100 -0
  494. package/src/sync/check.ts +692 -0
  495. package/src/sync/engine.ts +576 -0
  496. package/src/sync/git.ts +225 -0
  497. package/src/sync/history.ts +123 -0
  498. package/src/sync/layout.ts +140 -0
  499. package/src/sync/reverse.ts +268 -0
  500. package/src/sync/seeds-report.ts +126 -0
  501. package/src/sync/stamp.ts +358 -0
  502. package/src/sync/target.ts +70 -0
  503. package/src/sync/workflow.ts +200 -0
  504. package/src/target.ts +43 -0
  505. package/src/targets/pulls.ts +250 -0
  506. package/src/targets/registry.ts +203 -0
  507. package/src/targets/resolve.ts +145 -0
  508. package/src/targets/sweep.ts +246 -0
  509. package/src/tasks/archive.ts +506 -0
  510. package/src/tasks/record.ts +311 -0
  511. package/src/tasks/trunk.ts +89 -0
  512. package/src/tasks/validate.ts +1001 -0
  513. package/src/teach/lesson.ts +180 -0
  514. package/src/teach/workspace.ts +842 -0
  515. package/src/tooling/gitignore.ts +122 -0
  516. package/src/tooling/inject.ts +193 -0
  517. package/src/tooling/list.ts +39 -0
  518. package/src/tooling/manifest.ts +176 -0
  519. package/src/tooling/package.ts +166 -0
  520. package/src/tooling/read.ts +65 -0
  521. package/src/tooling/scan.ts +147 -0
  522. package/src/tooling/stamp.ts +44 -0
  523. package/src/transcripts/fetch.ts +156 -0
  524. package/src/transcripts/metadata.ts +54 -0
  525. package/src/transcripts/vtt.ts +114 -0
  526. package/src/ui.ts +266 -0
  527. package/src/version/compare.ts +53 -0
  528. package/src/version/installed.ts +40 -0
  529. package/src/version/manager.ts +67 -0
  530. package/src/version/skew.ts +192 -0
  531. package/src/wiki/init.ts +85 -0
  532. package/src/worktree.ts +143 -0
  533. package/src/worktrees/reclaim.ts +306 -0
  534. package/standards/architecture.md +72 -0
  535. package/standards/branch.md +59 -0
  536. package/standards/commit.md +72 -0
  537. package/standards/context.md +151 -0
  538. package/standards/design.md +93 -0
  539. package/standards/diagrams.md +152 -0
  540. package/standards/glossary.md +75 -0
  541. package/standards/groundwork.md +211 -0
  542. package/standards/index.md +36 -0
  543. package/standards/intake.md +192 -0
  544. package/standards/issue.md +94 -0
  545. package/standards/markdown.md +137 -0
  546. package/standards/memory.md +144 -0
  547. package/standards/plan.md +172 -0
  548. package/standards/pr.md +139 -0
  549. package/standards/publish.md +51 -0
  550. package/standards/readme.md +208 -0
  551. package/standards/requirements.md +70 -0
  552. package/standards/rule.md +118 -0
  553. package/standards/session.md +109 -0
  554. package/standards/skill.md +300 -0
  555. package/standards/slug.md +39 -0
  556. package/standards/snippets.md +76 -0
  557. package/standards/standard.md +170 -0
  558. package/standards/tasks.md +254 -0
  559. package/standards/teach.md +153 -0
  560. package/standards/versioning.md +71 -0
  561. package/standards/wireframes.md +113 -0
  562. package/tooling/astro/configs/astro.config.mjs +31 -0
  563. package/tooling/astro/configs/eslint.config.js +79 -0
  564. package/tooling/astro/configs/playwright.config.ts +26 -0
  565. package/tooling/astro/configs/tsconfig.json +12 -0
  566. package/tooling/astro/configs/vitest.config.ts +22 -0
  567. package/tooling/astro/manifest.toml +34 -0
  568. package/tooling/astro/reference.md +60 -0
  569. package/tooling/base/configs/.editorconfig +5 -0
  570. package/tooling/base/configs/.github/pull_request_template.md +18 -0
  571. package/tooling/base/configs/.github/workflows/verify.yml +35 -0
  572. package/tooling/base/configs/.husky/commit-msg +1 -0
  573. package/tooling/base/configs/.husky/post-merge +61 -0
  574. package/tooling/base/configs/.husky/post-rewrite +21 -0
  575. package/tooling/base/configs/.husky/pre-commit +1 -0
  576. package/tooling/base/configs/.husky/pre-push +1 -0
  577. package/tooling/base/configs/.prettierrc +12 -0
  578. package/tooling/base/configs/.shellcheckrc +1 -0
  579. package/tooling/base/configs/.vscode/extensions.json +9 -0
  580. package/tooling/base/configs/.vscode/settings.json +3 -0
  581. package/tooling/base/configs/commitlint.config.js +11 -0
  582. package/tooling/base/configs/scripts/verify.sh +64 -0
  583. package/tooling/base/manifest.toml +30 -0
  584. package/tooling/base/reference.md +98 -0
  585. package/tooling/base/seeds/.claude/context/ci.md +33 -0
  586. package/tooling/base/seeds/.claude/context/development.md +37 -0
  587. package/tooling/base/seeds/.claude/context/index.md +11 -0
  588. package/tooling/base/seeds/.cspell/project-terms.txt +0 -0
  589. package/tooling/base/seeds/.cspell/tech-stack.txt +19 -0
  590. package/tooling/base/seeds/.lintstagedrc +8 -0
  591. package/tooling/base/seeds/.prettierignore +0 -0
  592. package/tooling/base/seeds/cspell.json +20 -0
  593. package/tooling/claude/manifest.toml +14 -0
  594. package/tooling/claude/reference.md +79 -0
  595. package/tooling/claude/seeds/.claude/ARCHITECTURE.md +13 -0
  596. package/tooling/claude/seeds/.claude/DESIGN.md +62 -0
  597. package/tooling/claude/seeds/.claude/REQUIREMENTS.md +18 -0
  598. package/tooling/claude/seeds/.claude/diagrams/index.md +8 -0
  599. package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +50 -0
  600. package/tooling/claude/seeds/.claude/hooks/memory-index.sh +68 -0
  601. package/tooling/claude/seeds/.claude/hooks/path-form.sh +57 -0
  602. package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +52 -0
  603. package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +86 -0
  604. package/tooling/claude/seeds/.claude/hooks/tasks-index.sh +71 -0
  605. package/tooling/claude/seeds/.claude/memory/index.md +8 -0
  606. package/tooling/claude/seeds/.claude/settings.json +47 -0
  607. package/tooling/claude/seeds/.claude/tasks/index.md +8 -0
  608. package/tooling/claude/seeds/.claude/wireframes/index.md +8 -0
  609. package/tooling/claude/seeds/CLAUDE.md +29 -0
  610. package/tooling/claude/user/settings.template.json +10 -0
  611. package/tooling/claude/user/statusline-command.sh +53 -0
  612. package/tooling/python/configs/.coveragerc +14 -0
  613. package/tooling/python/configs/.python-version +1 -0
  614. package/tooling/python/configs/mypy.ini +6 -0
  615. package/tooling/python/configs/pytest.ini +4 -0
  616. package/tooling/python/configs/ruff.toml +15 -0
  617. package/tooling/python/configs/scripts/verify.sh +77 -0
  618. package/tooling/python/manifest.toml +16 -0
  619. package/tooling/python/reference.md +66 -0
  620. package/tooling/python/seeds/.cspell/tech-stack.txt +19 -0
  621. package/tooling/python/seeds/tests/test_smoke.py +2 -0
  622. package/tooling/vite-react/configs/playwright.config.ts +26 -0
  623. package/tooling/vite-react/configs/tsconfig.json +35 -0
  624. package/tooling/vite-react/configs/vite.config.ts +24 -0
  625. package/tooling/vite-react/configs/vitest.config.ts +26 -0
  626. package/tooling/vite-react/manifest.toml +23 -0
  627. package/tooling/vite-react/reference.md +55 -0
  628. package/tooling/vite-react/seeds/.cspell/project-terms.txt +1 -0
  629. package/tooling/vite-react/seeds/.cspell/tech-stack.txt +1 -0
  630. package/tooling/web/configs/.github/workflows/verify.yml +134 -0
  631. package/tooling/web/configs/.vscode/extensions.json +13 -0
  632. package/tooling/web/configs/.vscode/settings.json +10 -0
  633. package/tooling/web/configs/e2e/home.spec.ts +6 -0
  634. package/tooling/web/configs/e2e/screenshot.ts +53 -0
  635. package/tooling/web/configs/eslint.config.js +82 -0
  636. package/tooling/web/configs/scripts/screenshot.sh +28 -0
  637. package/tooling/web/configs/scripts/verify.sh +80 -0
  638. package/tooling/web/configs/scripts/worktree-port.sh +74 -0
  639. package/tooling/web/configs/src/test/setup.ts +8 -0
  640. package/tooling/web/manifest.toml +58 -0
  641. package/tooling/web/reference.md +115 -0
  642. package/tooling/web/seeds/.cspell/tech-stack.txt +18 -0
  643. package/tsconfig.json +14 -0
@@ -0,0 +1,349 @@
1
+ # Bash script patterns
2
+
3
+ Code templates for the `bash-script` skill. Copy verbatim, keeping only the colors and functions the script uses.
4
+
5
+ ## Timeline structure
6
+
7
+ ```plaintext
8
+ ┌ # Start boundary (alone on its own line)
9
+ │ Title # Script or context title (immediately after ┌)
10
+ │ # Persistent vertical line (grey)
11
+ ├ Section Branch # Section headers (no diamond)
12
+ │ ✓ Log message # Info/success logs
13
+ │ ! Warning # Warning logs
14
+ │ ✗ Error # Error logs
15
+ └ # End boundary
16
+ ```
17
+
18
+ ## Color palette
19
+
20
+ Define only the colors the script uses from this set:
21
+
22
+ ```bash
23
+ GREEN='\033[0;32m' # Success/Active
24
+ RED='\033[0;31m' # Error/Delete
25
+ YELLOW='\033[0;33m' # Warning
26
+ WHITE='\033[1;37m' # Active text
27
+ GREY='\033[0;90m' # Timeline/Inactive
28
+ CYAN='\033[0;36m' # Optional accent
29
+ MAGENTA='\033[0;35m' # Optional highlight
30
+ NC='\033[0m' # Reset
31
+ ```
32
+
33
+ ## Timeline lifecycle
34
+
35
+ Define `open_timeline` and `close_timeline`. Call `open_timeline "Title"` at the start of `main()`, then register `close_timeline` as the EXIT trap. The trap guarantees `└` prints on every exit path: normal completion, `exit 1` from cancellation, or unexpected errors. Do not print `└` manually anywhere else.
36
+
37
+ ```bash
38
+ open_timeline() {
39
+ echo -e "${GREY}┌${NC}" >&2
40
+ [ -n "${1:-}" ] && echo -e "${GREY}│${NC} ${WHITE}$1${NC}" >&2
41
+ }
42
+
43
+ close_timeline() {
44
+ echo -e "${GREY}└${NC}" >&2
45
+ }
46
+ ```
47
+
48
+ Register the trap inside `main()` right after opening:
49
+
50
+ ```bash
51
+ open_timeline "Script title"
52
+ trap close_timeline EXIT
53
+ ```
54
+
55
+ ## Logging
56
+
57
+ All log functions include the `│` prefix and write to stderr.
58
+
59
+ ```bash
60
+ log_info() { echo -e "${GREY}│${NC} ${GREEN}✓${NC} $1" >&2; }
61
+ log_warn() { echo -e "${GREY}│${NC} ${YELLOW}!${NC} $1" >&2; }
62
+ log_error() { echo -e "${GREY}│${NC} ${RED}✗${NC} $1" >&2; exit 1; }
63
+ log_step() { echo -e "${GREY}│${NC}\n${GREY}├${NC} ${WHITE}$1${NC}" >&2; }
64
+ log_add() { echo -e "${GREY}│${NC} ${GREEN}+${NC} $1" >&2; }
65
+ log_rem() { echo -e "${GREY}│${NC} ${RED}-${NC} $1" >&2; }
66
+ ```
67
+
68
+ ## Section headers
69
+
70
+ Use `log_step` for every section header, including the first. It emits a leading blank `│` line to separate the banner from the first section and to give breathing room between subsequent sections:
71
+
72
+ ```bash
73
+ open_timeline "Script title"
74
+ trap close_timeline EXIT
75
+
76
+ log_step "Deploy"
77
+ log_step "Verify"
78
+ ```
79
+
80
+ Renders as:
81
+
82
+ ```plaintext
83
+ ┌
84
+ │ Script title
85
+ │
86
+ ├ Deploy
87
+ ...
88
+ │
89
+ ├ Verify
90
+ ...
91
+ └
92
+ ```
93
+
94
+ ## Interactive prompts
95
+
96
+ Both prompts transition `◆` to `◇`, guard against non-TTY stdin with `[ -t 0 ]`, and write UI to stderr.
97
+
98
+ ```bash
99
+ ask() {
100
+ local prompt_text=$1
101
+ local var_name=$2
102
+ local default_val=$3
103
+ local input=""
104
+ local char
105
+ local display_default=""
106
+ if [ -n "$default_val" ]; then
107
+ display_default=" (${default_val})"
108
+ fi
109
+ if [ ! -t 0 ]; then
110
+ log_error "${prompt_text} requires a TTY"
111
+ fi
112
+ echo -e "${GREY}│${NC}" >&2
113
+ echo -ne "${GREEN}◆${NC} ${prompt_text}${display_default} " >&2
114
+ while IFS= read -r -s -n1 char; do
115
+ if [[ $char == $'\x1b' ]]; then
116
+ read -rsn2 -t 0.001 _ || true
117
+ echo -ne "\r\033[K" >&2
118
+ echo -e "${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
119
+ exit 1
120
+ elif [[ $char == $'\x7f' || $char == $'\x08' ]]; then
121
+ if [ -n "$input" ]; then
122
+ input="${input%?}"
123
+ echo -ne "\b \b" >&2
124
+ fi
125
+ elif [[ -z "$char" ]]; then
126
+ break
127
+ else
128
+ input+="$char"
129
+ echo -n "$char" >&2
130
+ fi
131
+ done
132
+ [ -z "$input" ] && input="$default_val"
133
+ echo -ne "\r\033[K" >&2
134
+ echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${input}${NC}" >&2
135
+ export "$var_name"="$input"
136
+ }
137
+ ```
138
+
139
+ ```bash
140
+ select_option() {
141
+ local prompt_text=$1
142
+ shift
143
+ local options=("$@")
144
+ local cur=0
145
+ local count=${#options[@]}
146
+
147
+ if [ ! -t 0 ]; then
148
+ log_error "${prompt_text} requires a TTY"
149
+ fi
150
+
151
+ echo -ne "${GREY}│${NC}\n${GREEN}◆${NC} ${prompt_text}\n" >&2
152
+
153
+ while true; do
154
+ for i in "${!options[@]}"; do
155
+ if [ "$i" -eq "$cur" ]; then
156
+ echo -e "${GREY}│${NC} ${GREEN}❯ ${options[$i]}${NC}" >&2
157
+ else
158
+ echo -e "${GREY}│${NC} ${GREY}${options[$i]}${NC}" >&2
159
+ fi
160
+ done
161
+
162
+ read -rsn1 key
163
+ case "$key" in
164
+ $'\x1b')
165
+ if read -rsn2 -t 0.001 key_seq; then
166
+ if [[ "$key_seq" == "[A" ]]; then cur=$(( (cur - 1 + count) % count )); fi
167
+ if [[ "$key_seq" == "[B" ]]; then cur=$(( (cur + 1) % count )); fi
168
+ else
169
+ echo -en "\033[$((count + 1))A\033[J" >&2
170
+ echo -e "\033[1A${GREY}│${NC}\n${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
171
+ exit 1
172
+ fi
173
+ ;;
174
+ "k") cur=$(( (cur - 1 + count) % count ));;
175
+ "j") cur=$(( (cur + 1) % count ));;
176
+ "q")
177
+ echo -en "\033[$((count + 1))A\033[J" >&2
178
+ echo -e "\033[1A${GREY}│${NC}\n${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
179
+ exit 1
180
+ ;;
181
+ "") break ;;
182
+ esac
183
+
184
+ echo -en "\033[${count}A" >&2
185
+ done
186
+
187
+ echo -en "\033[$((count + 1))A\033[J" >&2
188
+ echo -e "\033[1A${GREY}│${NC}\n${GREY}◇${NC} ${prompt_text} ${WHITE}${options[$cur]}${NC}" >&2
189
+ SELECTED_OPTION="${options[$cur]}"
190
+ }
191
+ ```
192
+
193
+ ## Help system
194
+
195
+ ```bash
196
+ show_help() {
197
+ echo -e "${GREY}┌${NC}"
198
+ echo -e "${GREY}├${NC} ${WHITE}Usage:${NC} ./script.sh [options]"
199
+ echo -e "${GREY}│${NC}"
200
+ echo -e "${GREY}│${NC} ${WHITE}Options:${NC}"
201
+ echo -e "${GREY}│${NC} -h, --help ${GREY}# Show this help message${NC}"
202
+ echo -e "${GREY}│${NC} [flag] ${GREY}# [Description]${NC}"
203
+ echo -e "${GREY}└${NC}"
204
+ exit 0
205
+ }
206
+ ```
207
+
208
+ ## Error handling helper
209
+
210
+ ```bash
211
+ run_check() {
212
+ local cmd=$1
213
+ local err_msg=$2
214
+ if ! eval "$cmd"; then
215
+ log_error "$err_msg"
216
+ fi
217
+ }
218
+ ```
219
+
220
+ ## Full script structure
221
+
222
+ ```bash
223
+ #!/usr/bin/env bash
224
+ set -e
225
+ set -o pipefail
226
+
227
+ [Color definitions - only used colors]
228
+
229
+ [Function definitions - only needed functions]
230
+
231
+ open_timeline() {
232
+ echo -e "${GREY}┌${NC}" >&2
233
+ [ -n "${1:-}" ] && echo -e "${GREY}│${NC} ${WHITE}$1${NC}" >&2
234
+ }
235
+
236
+ close_timeline() {
237
+ echo -e "${GREY}└${NC}" >&2
238
+ }
239
+
240
+ check_dependencies() {
241
+ [Verify required tools installed]
242
+ }
243
+
244
+ main() {
245
+ check_dependencies
246
+
247
+ open_timeline "Script title"
248
+ trap close_timeline EXIT
249
+
250
+ log_step "First section"
251
+ [Script logic with timeline maintained]
252
+
253
+ trap - EXIT
254
+ echo -e "${GREY}└${NC}\n" >&2
255
+ echo -e "${GREEN}✓ Final success message${NC}"
256
+ }
257
+
258
+ main "$@"
259
+ ```
260
+
261
+ ## Worked example
262
+
263
+ ```bash
264
+ #!/usr/bin/env bash
265
+ set -e
266
+ set -o pipefail
267
+
268
+ GREEN='\033[0;32m'
269
+ RED='\033[0;31m'
270
+ YELLOW='\033[0;33m'
271
+ WHITE='\033[1;37m'
272
+ GREY='\033[0;90m'
273
+ NC='\033[0m'
274
+
275
+ log_info() { echo -e "${GREY}│${NC} ${GREEN}✓${NC} $1" >&2; }
276
+ log_error() { echo -e "${GREY}│${NC} ${RED}✗${NC} $1" >&2; exit 1; }
277
+ log_step() { echo -e "${GREY}│${NC}\n${GREY}├${NC} ${WHITE}$1${NC}" >&2; }
278
+ log_add() { echo -e "${GREY}│${NC} ${GREEN}+${NC} $1" >&2; }
279
+
280
+ open_timeline() {
281
+ echo -e "${GREY}┌${NC}" >&2
282
+ [ -n "${1:-}" ] && echo -e "${GREY}│${NC} ${WHITE}$1${NC}" >&2
283
+ }
284
+
285
+ close_timeline() {
286
+ echo -e "${GREY}└${NC}" >&2
287
+ }
288
+
289
+ ask() {
290
+ local prompt_text=$1
291
+ local var_name=$2
292
+ local default_val=$3
293
+ local input=""
294
+ local char
295
+ local display_default=""
296
+ if [ -n "$default_val" ]; then
297
+ display_default=" (${default_val})"
298
+ fi
299
+ if [ ! -t 0 ]; then
300
+ log_error "${prompt_text} requires a TTY"
301
+ fi
302
+ echo -e "${GREY}│${NC}" >&2
303
+ echo -ne "${GREEN}◆${NC} ${prompt_text}${display_default} " >&2
304
+ while IFS= read -r -s -n1 char; do
305
+ if [[ $char == $'\x1b' ]]; then
306
+ read -rsn2 -t 0.001 _ || true
307
+ echo -ne "\r\033[K" >&2
308
+ echo -e "${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
309
+ exit 1
310
+ elif [[ $char == $'\x7f' || $char == $'\x08' ]]; then
311
+ if [ -n "$input" ]; then
312
+ input="${input%?}"
313
+ echo -ne "\b \b" >&2
314
+ fi
315
+ elif [[ -z "$char" ]]; then
316
+ break
317
+ else
318
+ input+="$char"
319
+ echo -n "$char" >&2
320
+ fi
321
+ done
322
+ [ -z "$input" ] && input="$default_val"
323
+ echo -ne "\r\033[K" >&2
324
+ echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${input}${NC}" >&2
325
+ export "$var_name"="$input"
326
+ }
327
+
328
+ check_dependencies() {
329
+ command -v npm >/dev/null 2>&1 || log_error "npm not installed"
330
+ }
331
+
332
+ main() {
333
+ check_dependencies
334
+
335
+ open_timeline "Project Setup"
336
+ trap close_timeline EXIT
337
+
338
+ ask "Project name?" "PROJECT_NAME" "my-app"
339
+
340
+ log_step "Installing dependencies"
341
+ npm install vite
342
+ log_add "vite@latest"
343
+
344
+ log_info "Setup complete"
345
+ echo -e "\n${GREEN}✓ Project created successfully${NC}"
346
+ }
347
+
348
+ main "$@"
349
+ ```
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: canon-cli
3
+ description: Why the overwrite contract is stated before a sync runs, and why the skill reads rather than executes
4
+ ---
5
+
6
+ # Canon cli requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session runs a `canon` sync and finds out afterward what it did. The command names give nothing away. `install` and `sync` differ per domain, some surfaces overwrite unconditionally, some merge, some are written once and never touched again, and none of that is visible from the command line the user typed.
11
+
12
+ The damage lands on the files a project owns. A golden config carrying local edits is replaced without a warning anyone saw, and a standards install overwrites every standard in a project that only needed the two it had drifted on. The user learns which category a file was in by losing the edit.
13
+
14
+ The inverse failure is quieter. A session that assumes a sync will pick up a change edits a seed and waits for an update that never comes, because the seed is copy-once and no sync command writes it again. Both failures are one missing fact available before the command runs.
15
+
16
+ Being reachable is a separate problem from being right. This is a pure reference whose moment happens inside another skill's run, so nothing brings it up unless a body names it. Three sibling requirement files named it and routed nothing, because Claude Code loads `SKILL.md` as the entry and never opens the sibling. A route lives in a body or it does not exist, and a fourth requirement mention would repeat the same defect.
17
+
18
+ The two bodies now carrying an inline pointer are `claude-seed-sync` and `canon-operator`, each at the point it runs or prints an overwriting command.
19
+
20
+ ## Must
21
+
22
+ - State per surface and per command whether an existing file is overwritten, merged, written once, or left alone
23
+ - Warn about a destructive run before it happens, naming the surface that will be lost
24
+ - Name the section-preserving path for a standard or seed the project has customized
25
+ - Defer to the toolkit's own context docs when they and this summary disagree, since the summary is a copy and they are the source
26
+
27
+ ## Must not
28
+
29
+ - Run any `canon` command. The skill is read before acting.
30
+ - Restate the full semantics. It is a target-session summary and the detail lives with its owner.
31
+ - Take a mention in a sibling's requirement file as an inbound route. The three bodies named in the gap above carry the pointer, and adding a fourth means editing that body rather than its requirement.
32
+
33
+ ## Guards
34
+
35
+ - A surface or command the contract does not cover routes to the context docs rather than to an inference from a similar row
36
+
37
+ ## Out of scope
38
+
39
+ - Executing the sync, which the user runs or `canon-operator` routes
40
+ - Reconciling a customized seed section by section: `claude-seed-sync`
41
+ - Deciding which stack, rule, or standard a project should install, which the setup skills resolve from live catalogs
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: canon-cli
3
+ description: Reference for what canon sync and install commands overwrite, merge, or leave untouched in a target project. Use before running `canon tooling`, `canon standards`, `canon claude sync`, or `canon init`, or when asked "will this overwrite my changes". Do NOT use to run the commands, only to know their effect.
4
+ ---
5
+
6
+ # Toolkit CLI contract
7
+
8
+ What each `canon` sync or install command does to existing files in a target project. Consult before running one, then warn the user about anything destructive. This skill is reference only. It does not run commands.
9
+
10
+ ## Overwrite contract
11
+
12
+ | Surface | Command | Effect on existing files |
13
+ | -------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------- |
14
+ | Golden configs, listed in full below | `canon tooling sync` | Overwritten once `--write` is passed. Local edits are lost. |
15
+ | Dictionary seeds (`.cspell/*.txt`) | `canon tooling sync` | Merged and sorted. Existing terms preserved. |
16
+ | Other seeds (`cspell.json`, `.lintstagedrc`, state docs) | `canon tooling sync` | Copy-once. Dropped on first install, untouched after. |
17
+ | Standards | none | Nothing installs. `canon standards <name>` reads and never writes. |
18
+ | Seed docs and `CLAUDE.md` | `canon claude init` | Skipped when present. Never overwritten. |
19
+ | Seed docs | `canon claude sync` | Never touched. Only `.gitignore` is written. |
20
+ | Stack references | none | Nothing installs. `canon tooling reference <stack>` reads and never writes. |
21
+ | `.gitignore`, deps, scripts | any sync | Additive. Existing entries preserved. Deps re-pin on major skew. |
22
+ | Generated `index.md` | any sync or regen | Rewritten from target state. Hand edits are lost. |
23
+
24
+ ## What a tooling sync can overwrite
25
+
26
+ A golden config is any file a stack ships under `configs/`, and the category is wider than its name suggests. It carries the CI workflow, the git hooks, the end-to-end harness, the shell scripts under `scripts/`, and the editor settings, alongside the linters and compilers a reader expects. A stack inherits its parent's configs, so syncing `astro` also writes everything `web` and `base` hold.
27
+
28
+ Run `canon tooling sync <stack> <target> --check` for the list resolved against a real target. It reports every path and writes nothing. The list below is what the stacks hold as shipped, before any chain resolution.
29
+
30
+ <!-- generated:tooling-paths -->
31
+
32
+ ### astro
33
+
34
+ - `astro.config.mjs`
35
+ - `eslint.config.js`
36
+ - `playwright.config.ts`
37
+ - `tsconfig.json`
38
+ - `vitest.config.ts`
39
+
40
+ ### base
41
+
42
+ - `.editorconfig`
43
+ - `.github/pull_request_template.md`
44
+ - `.github/workflows/verify.yml`
45
+ - `.husky/commit-msg`
46
+ - `.husky/post-merge`
47
+ - `.husky/post-rewrite`
48
+ - `.husky/pre-commit`
49
+ - `.husky/pre-push`
50
+ - `.prettierrc`
51
+ - `.shellcheckrc`
52
+ - `.vscode/extensions.json`
53
+ - `.vscode/settings.json`
54
+ - `commitlint.config.js`
55
+ - `scripts/verify.sh`
56
+
57
+ ### python
58
+
59
+ - `.coveragerc`
60
+ - `.python-version`
61
+ - `mypy.ini`
62
+ - `pytest.ini`
63
+ - `ruff.toml`
64
+ - `scripts/verify.sh`
65
+
66
+ ### vite-react
67
+
68
+ - `playwright.config.ts`
69
+ - `tsconfig.json`
70
+ - `vite.config.ts`
71
+ - `vitest.config.ts`
72
+
73
+ ### web
74
+
75
+ - `.github/workflows/verify.yml`
76
+ - `.vscode/extensions.json`
77
+ - `.vscode/settings.json`
78
+ - `e2e/home.spec.ts`
79
+ - `e2e/screenshot.ts`
80
+ - `eslint.config.js`
81
+ - `scripts/screenshot.sh`
82
+ - `scripts/verify.sh`
83
+ - `scripts/worktree-port.sh`
84
+ - `src/test/setup.ts`
85
+
86
+ <!-- /generated:tooling-paths -->
87
+
88
+ ## Rules
89
+
90
+ - `canon tooling sync` writes nothing until `--write` is passed. A headless run without it reports and exits 1, so a script that forgets the flag fails rather than silently skipping the sync.
91
+ - Run `--check` first when the project carries local edits to any path above. The report names each file it would replace, which is the warning the user needs before the write.
92
+ - An interactive run still prompts. `--write` skips the prompt, and `--check` refuses to write even with a TTY.
93
+ - Seeds are user-owned. Dictionary `.txt` files merge and sort. Other seeds are copy-once, so re-seeding a structured file means deleting it and syncing again.
94
+ - No command writes a standard into a project. A `.claude/standards/` folder from an older toolkit is inert, and deleting it costs nothing.
95
+ - For section-level customizations of a seed doc, use the `claude-seed-sync` skill, not `canon ... sync`. It diffs per section and preserves edits.
96
+
97
+ ## CLAUDE.md
98
+
99
+ - `CLAUDE.md` is a copy-once seed. No `canon` sync command ever updates it. Reconcile it with the `claude-seed-sync` skill, which diffs the preamble and each section and preserves customizations by default.
100
+
101
+ ## Source of truth
102
+
103
+ - Full semantics live in the toolkit's `.claude/context/tooling.md`, `.claude/context/standards/`, and `.claude/context/claude-plugin/`. This skill is the target-session summary. When they disagree, the context docs win.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: canon-feedback-file
3
+ description: Why a toolkit defect is reported from session context alone, and what shipping through the CLI replaces
4
+ ---
5
+
6
+ # Canon feedback file requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a toolkit defect noticed inside a target project dies with the session. The user is told to mention it in the toolkit repository later, which means retyping a report they no longer have the context to write, so the defect is either reported badly or not at all.
11
+
12
+ The report itself fails two ways. A block printed in chat needs a copy-paste into another repository, and a step that manual is skipped under any time pressure. A report that names no surface cannot be routed, because the toolkit acts on a plugin skill, a snippet, a CLI command, and a seed through different paths, and the difference is not recoverable from the symptom.
13
+
14
+ The last failure is the session's own effort. Asked to report, a session starts diagnosing instead, searching the toolkit and reading its surfaces to find the cause. That spends the context the report was meant to capture cheaply, and it produces a diagnosis from a project that cannot see the toolkit's current source.
15
+
16
+ ## Must
17
+
18
+ - Build the report from what the session already holds
19
+ - Name the surface and its type, since the toolkit routes on that rather than on the symptom
20
+ - Write the stated fallback for a field the session cannot fill, so an empty field reads as absent rather than as unreported
21
+ - Ship through the CLI so the report lands without a copy-paste, and print the returned path on its own line
22
+ - Offer the durable route for a report worth keeping across sessions and machines
23
+ - Fall back to printing the block when the CLI is absent, so the report still exists
24
+
25
+ ## Must not
26
+
27
+ - Probe the project, list files, grep, or read toolkit surfaces to enrich the report
28
+ - Guess the surface type when the session is ambiguous. Ask one line.
29
+ - Diagnose or fix, which needs the toolkit's source rather than the target's
30
+
31
+ ## Guards
32
+
33
+ - Nothing in session context pointing at a toolkit issue stops, since a report assembled from nothing wastes the triage it reaches
34
+
35
+ ## Out of scope
36
+
37
+ - Fixing the defect, which happens in the toolkit repository against its own source
38
+ - Draining the queue this fills: `canon-feedback-triage`
39
+ - Filing an issue against the current project: `git-issue`
40
+ - Complaints about tooling the toolkit does not own
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: canon-feedback-file
3
+ description: Format a paste-back report about something broken, missing, or off in canon and write it directly to the toolkit's `.claude/review/feedback/` folder via `canon feedback`. Use when asked to "send this to the toolkit", "report this to canon", "file toolkit feedback", or "give the toolkit feedback about X". Do NOT use for general complaints about other tooling, IDE issues, or in-project bugs that do not implicate canon surfaces.
4
+ ---
5
+
6
+ # Canon feedback file
7
+
8
+ Format a `## Toolkit feedback` block from the current session, then ship it to the toolkit repo without manual copy-paste.
9
+
10
+ ## Guards
11
+
12
+ - If nothing in session context points to a toolkit issue, stop: `❌ No toolkit issue in session context. Describe what broke, then re-invoke.`
13
+ - If the surface type is ambiguous (snippet vs. plugin skill vs. CLI vs. seed), ask one line before formatting.
14
+ - Do not probe the project, list files, grep, or read toolkit surfaces. Use only what the session already contains.
15
+
16
+ ## Step 1: build the block
17
+
18
+ From the conversation so far, identify:
19
+
20
+ - Target project name or path
21
+ - Toolkit surface and its type (plugin skill, snippet, tooling config, governance rule, seed, or CLI)
22
+ - Specific toolkit file or name when the session cites one
23
+ - Observed behavior
24
+ - Expected behavior, or `unclear`
25
+ - Repro details already in context (commands run, files touched), or `none`
26
+ - Proposed fix when the user stated one, or `open`
27
+
28
+ Format as a single fenced markdown block:
29
+
30
+ ```markdown
31
+ ## Toolkit feedback
32
+
33
+ **From project:** <name or path>
34
+ **Surface:** <type>, <file path or name>
35
+ **Observed:** <one or two lines>
36
+ **Expected:** <one or two lines, or "unclear">
37
+ **Repro:** <commands or steps, or "none">
38
+ **Proposed fix:** <one line, or "open">
39
+ ```
40
+
41
+ Keep each field to one or two lines. Write the literal fallback shown above when a field has nothing.
42
+
43
+ ## Step 2: ship to the toolkit
44
+
45
+ Detect whether `canon` is on PATH:
46
+
47
+ ```bash
48
+ command -v canon >/dev/null 2>&1
49
+ ```
50
+
51
+ If present, pipe the block to `canon feedback`. The CLI writes to its own repo's `.claude/review/feedback/feedback-<slug>-<ts>.md` and prints the absolute path on stdout:
52
+
53
+ ```bash
54
+ cat <<'EOF' | canon feedback
55
+ ## Toolkit feedback
56
+
57
+ ...
58
+ EOF
59
+ ```
60
+
61
+ Report the printed path back to the user on its own line, in the form the project's instruction file sets under `## Output`.
62
+
63
+ For a durable, cross-machine report instead of local scratch, add `--github`. The CLI opens a GitHub issue on the toolkit repo and prints the issue URL. It needs `gh` authenticated, and falls back to local scratch with a warning when `gh` is absent.
64
+
65
+ ```bash
66
+ cat <<'EOF' | canon feedback --github
67
+ ## Toolkit feedback
68
+
69
+ ...
70
+ EOF
71
+ ```
72
+
73
+ Default to local scratch for a quick note. Use `--github` for a report worth tracking across sessions and machines.
74
+
75
+ If `canon` is not on PATH, fall back: print the block in chat and tell the user `📋 Copy the block above into a toolkit-repo session.`
76
+
77
+ ## Notes
78
+
79
+ - `canon feedback` resolves the toolkit root from the running `canon` binary's source location. If multiple toolkit clones exist on the machine, the first `canon` on PATH wins.
80
+ - The destination `.claude/review/` is gitignored in the toolkit repo. Feedback lives as session scratch for the next toolkit-side triage, not as a durable archive.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: canon-feedback-triage
3
+ description: Why the feedback queue is read from GitHub rather than local scratch, and why triage routes instead of implementing
4
+ ---
5
+
6
+ # Canon feedback triage requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, the feedback queue fills and nothing drains it. Reports arrive from projects the toolkit never sees, and a queue nobody reads on a schedule is the same as no queue. The local review folder looks like the right place to read, and it is the wrong one, because that content is per-machine session scratch that any cleanup removes.
11
+
12
+ Triage fails three ways once it starts. Unrelated issues get batched into one branch, so review has to judge several unconnected changes at once and can approve none of them cleanly. An issue needing a plan gets implemented inline from a paragraph of description, which skips the step where scope is argued. And an issue whose report contradicts itself gets a guess rather than a question, so the fix addresses a defect nobody confirmed.
13
+
14
+ The queue also fails to drain even when the work ships. A fix merged with no link back leaves its issue open, and the next triage re-reads work already done.
15
+
16
+ ## Must
17
+
18
+ - Read the durable queue rather than local session scratch
19
+ - Classify each issue in a fixed order and stop at the first match, stating the class and its one-line reason before routing
20
+ - Route to the skills that own planning, branch naming, and the pull request body rather than restating them
21
+ - Keep one issue to one branch and one pull request
22
+ - Link a fix to its issue so merge closes it, and preserve that link when the body is regenerated
23
+ - Ask on the issue when the report is unreadable, then move on rather than blocking the batch
24
+
25
+ ## Must not
26
+
27
+ - Batch unrelated fixes into one branch
28
+ - Implement a plan-worthy issue, which stops at the plan handed back to the user
29
+ - Close an issue whose pull request has yet to merge
30
+
31
+ ## Guards
32
+
33
+ - The `gh` CLI absent or unauthenticated stops, since the queue is unreachable
34
+ - An empty queue reports nothing open rather than widening the label to find work
35
+
36
+ ## Out of scope
37
+
38
+ - Filing new feedback: `canon-feedback-file`
39
+ - Writing the plan a plan-worthy issue needs: `claude-feature`
40
+ - Triage of issues carrying any other label, which surface here by design only under the feedback label