@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.
- package/LICENSE +21 -0
- package/README.md +129 -0
- package/claude/.claude-plugin/plugin.json +19 -0
- package/claude/skills/bash-cli-script/REQUIREMENT.md +42 -0
- package/claude/skills/bash-cli-script/SKILL.md +48 -0
- package/claude/skills/bash-cli-script/references/template.md +43 -0
- package/claude/skills/bash-script/REQUIREMENT.md +36 -0
- package/claude/skills/bash-script/SKILL.md +100 -0
- package/claude/skills/bash-script/references/patterns.md +349 -0
- package/claude/skills/canon-cli/REQUIREMENT.md +41 -0
- package/claude/skills/canon-cli/SKILL.md +103 -0
- package/claude/skills/canon-feedback-file/REQUIREMENT.md +40 -0
- package/claude/skills/canon-feedback-file/SKILL.md +80 -0
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +40 -0
- package/claude/skills/canon-feedback-triage/SKILL.md +63 -0
- package/claude/skills/canon-operator/REQUIREMENT.md +61 -0
- package/claude/skills/canon-operator/SKILL.md +108 -0
- package/claude/skills/canon-rollout/REQUIREMENT.md +59 -0
- package/claude/skills/canon-rollout/SKILL.md +147 -0
- package/claude/skills/canon-screencast/REQUIREMENT.md +39 -0
- package/claude/skills/canon-screencast/SKILL.md +167 -0
- package/claude/skills/canon-slides-draft/REQUIREMENT.md +39 -0
- package/claude/skills/canon-slides-draft/SKILL.md +62 -0
- package/claude/skills/ci-workflow/REQUIREMENT.md +40 -0
- package/claude/skills/ci-workflow/SKILL.md +65 -0
- package/claude/skills/ci-workflow/references/workflows.md +98 -0
- package/claude/skills/claude-address-review/REQUIREMENT.md +57 -0
- package/claude/skills/claude-address-review/SKILL.md +212 -0
- package/claude/skills/claude-address-review/references/rebase-conflicts.md +39 -0
- package/claude/skills/claude-autoship/REQUIREMENT.md +50 -0
- package/claude/skills/claude-autoship/SKILL.md +207 -0
- package/claude/skills/claude-design-extract/REQUIREMENT.md +42 -0
- package/claude/skills/claude-design-extract/SKILL.md +102 -0
- package/claude/skills/claude-diagram/REQUIREMENT.md +45 -0
- package/claude/skills/claude-diagram/SKILL.md +177 -0
- package/claude/skills/claude-docs/REQUIREMENT.md +60 -0
- package/claude/skills/claude-docs/SKILL.md +287 -0
- package/claude/skills/claude-docs/references/anchor-sweep.md +58 -0
- package/claude/skills/claude-docs/references/wireframe-sweep.md +45 -0
- package/claude/skills/claude-feature/REQUIREMENT.md +36 -0
- package/claude/skills/claude-feature/SKILL.md +115 -0
- package/claude/skills/claude-groundwork/REQUIREMENT.md +48 -0
- package/claude/skills/claude-groundwork/SKILL.md +142 -0
- package/claude/skills/claude-intake/REQUIREMENT.md +49 -0
- package/claude/skills/claude-intake/SKILL.md +114 -0
- package/claude/skills/claude-intake-answer/REQUIREMENT.md +48 -0
- package/claude/skills/claude-intake-answer/SKILL.md +90 -0
- package/claude/skills/claude-markdown-propose/REQUIREMENT.md +48 -0
- package/claude/skills/claude-markdown-propose/SKILL.md +118 -0
- package/claude/skills/claude-markdown-propose/references/format.md +107 -0
- package/claude/skills/claude-memory-capture/REQUIREMENT.md +50 -0
- package/claude/skills/claude-memory-capture/SKILL.md +101 -0
- package/claude/skills/claude-memory-review/REQUIREMENT.md +50 -0
- package/claude/skills/claude-memory-review/SKILL.md +210 -0
- package/claude/skills/claude-memory-review/references/receipt-format.md +48 -0
- package/claude/skills/claude-orchestrate/REQUIREMENT.md +121 -0
- package/claude/skills/claude-orchestrate/SKILL.md +241 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-dispatch.md +132 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-handoff.md +32 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-parked.md +72 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-poll.md +87 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-resume.md +30 -0
- package/claude/skills/claude-orchestrate/references/orchestrator-sweep.md +21 -0
- package/claude/skills/claude-orchestrate/scripts/poll.sh +373 -0
- package/claude/skills/claude-orchestrate/scripts/watch.sh +181 -0
- package/claude/skills/claude-pr-review/REQUIREMENT.md +47 -0
- package/claude/skills/claude-pr-review/SKILL.md +295 -0
- package/claude/skills/claude-review/REQUIREMENT.md +39 -0
- package/claude/skills/claude-review/SKILL.md +142 -0
- package/claude/skills/claude-seed-sync/REQUIREMENT.md +45 -0
- package/claude/skills/claude-seed-sync/SKILL.md +156 -0
- package/claude/skills/claude-standards-audit/REQUIREMENT.md +33 -0
- package/claude/skills/claude-standards-audit/SKILL.md +99 -0
- package/claude/skills/claude-tasks/REQUIREMENT.md +43 -0
- package/claude/skills/claude-tasks/SKILL.md +161 -0
- package/claude/skills/claude-teach/REQUIREMENT.md +56 -0
- package/claude/skills/claude-teach/SKILL.md +196 -0
- package/claude/skills/claude-teach/references/lesson-craft.md +59 -0
- package/claude/skills/claude-teach/references/pedagogy.md +67 -0
- package/claude/skills/claude-teach/references/promotion.md +54 -0
- package/claude/skills/claude-ui-test/REQUIREMENT.md +40 -0
- package/claude/skills/claude-ui-test/SKILL.md +77 -0
- package/claude/skills/claude-ux-audit/REQUIREMENT.md +40 -0
- package/claude/skills/claude-ux-audit/SKILL.md +79 -0
- package/claude/skills/claude-ux-measure/REQUIREMENT.md +48 -0
- package/claude/skills/claude-ux-measure/SKILL.md +122 -0
- package/claude/skills/claude-worker/REQUIREMENT.md +54 -0
- package/claude/skills/claude-worker/SKILL.md +96 -0
- package/claude/skills/claude-worktree/REQUIREMENT.md +58 -0
- package/claude/skills/claude-worktree/SKILL.md +136 -0
- package/claude/skills/create-rule/REQUIREMENT.md +45 -0
- package/claude/skills/create-rule/SKILL.md +68 -0
- package/claude/skills/create-skill/REQUIREMENT.md +38 -0
- package/claude/skills/create-skill/SKILL.md +32 -0
- package/claude/skills/create-snippet/REQUIREMENT.md +39 -0
- package/claude/skills/create-snippet/SKILL.md +30 -0
- package/claude/skills/create-standard/REQUIREMENT.md +35 -0
- package/claude/skills/create-standard/SKILL.md +29 -0
- package/claude/skills/decision-escalate/REQUIREMENT.md +45 -0
- package/claude/skills/decision-escalate/SKILL.md +79 -0
- package/claude/skills/docs-sync/REQUIREMENT.md +41 -0
- package/claude/skills/docs-sync/SKILL.md +95 -0
- package/claude/skills/git-branch/REQUIREMENT.md +38 -0
- package/claude/skills/git-branch/SKILL.md +60 -0
- package/claude/skills/git-commit/REQUIREMENT.md +36 -0
- package/claude/skills/git-commit/SKILL.md +49 -0
- package/claude/skills/git-followup/REQUIREMENT.md +43 -0
- package/claude/skills/git-followup/SKILL.md +48 -0
- package/claude/skills/git-issue/REQUIREMENT.md +38 -0
- package/claude/skills/git-issue/SKILL.md +65 -0
- package/claude/skills/git-pr/REQUIREMENT.md +50 -0
- package/claude/skills/git-pr/SKILL.md +164 -0
- package/claude/skills/git-pr/references/labels.md +95 -0
- package/claude/skills/git-ship/REQUIREMENT.md +42 -0
- package/claude/skills/git-ship/SKILL.md +55 -0
- package/claude/skills/git-split/REQUIREMENT.md +39 -0
- package/claude/skills/git-split/SKILL.md +162 -0
- package/claude/skills/git-stage/REQUIREMENT.md +39 -0
- package/claude/skills/git-stage/SKILL.md +73 -0
- package/claude/skills/git-worktree/REQUIREMENT.md +38 -0
- package/claude/skills/git-worktree/SKILL.md +130 -0
- package/claude/skills/migration-claude-md/REQUIREMENT.md +40 -0
- package/claude/skills/migration-claude-md/SKILL.md +76 -0
- package/claude/skills/migration-context/REQUIREMENT.md +36 -0
- package/claude/skills/migration-context/SKILL.md +95 -0
- package/claude/skills/migration-standards-drop/REQUIREMENT.md +55 -0
- package/claude/skills/migration-standards-drop/SKILL.md +113 -0
- package/claude/skills/migration-superseded/REQUIREMENT.md +44 -0
- package/claude/skills/migration-superseded/SKILL.md +115 -0
- package/claude/skills/project-commands/REQUIREMENT.md +42 -0
- package/claude/skills/project-commands/SKILL.md +85 -0
- package/claude/skills/restate-plainly/REQUIREMENT.md +41 -0
- package/claude/skills/restate-plainly/SKILL.md +39 -0
- package/claude/skills/session-map/REQUIREMENT.md +57 -0
- package/claude/skills/session-map/SKILL.md +70 -0
- package/claude/skills/session-resume/REQUIREMENT.md +49 -0
- package/claude/skills/session-resume/SKILL.md +51 -0
- package/claude/skills/setup-gov/REQUIREMENT.md +37 -0
- package/claude/skills/setup-gov/SKILL.md +77 -0
- package/claude/skills/setup-indexes/REQUIREMENT.md +45 -0
- package/claude/skills/setup-indexes/SKILL.md +153 -0
- package/claude/skills/setup-init/REQUIREMENT.md +45 -0
- package/claude/skills/setup-init/SKILL.md +127 -0
- package/claude/skills/setup-plugins/REQUIREMENT.md +42 -0
- package/claude/skills/setup-plugins/SKILL.md +81 -0
- package/claude/skills/setup-plugins/references/plugin-catalog.md +53 -0
- package/claude/skills/setup-verify/REQUIREMENT.md +39 -0
- package/claude/skills/setup-verify/SKILL.md +51 -0
- package/claude/skills/systematic-debugging/REQUIREMENT.md +41 -0
- package/claude/skills/systematic-debugging/SKILL.md +70 -0
- package/claude/skills/write-human/REQUIREMENT.md +46 -0
- package/claude/skills/write-human/SKILL.md +68 -0
- package/claude/skills/write-human/references/density.md +38 -0
- package/claude/skills/write-human/references/machine-tells.md +107 -0
- package/claude/skills/write-human/references/source-material.md +37 -0
- package/claude/skills/youtube-transcripts/REQUIREMENT.md +38 -0
- package/claude/skills/youtube-transcripts/SKILL.md +34 -0
- package/docs/agents/audits.md +98 -0
- package/docs/agents/capture.md +37 -0
- package/docs/agents/census.md +23 -0
- package/docs/agents/commands.md +146 -0
- package/docs/agents/comments.md +34 -0
- package/docs/agents/context-audit-checks.md +120 -0
- package/docs/agents/context-audit.md +83 -0
- package/docs/agents/counts.md +76 -0
- package/docs/agents/demo.md +86 -0
- package/docs/agents/docs.md +17 -0
- package/docs/agents/gate.md +84 -0
- package/docs/agents/index.md +47 -0
- package/docs/agents/indexes.md +35 -0
- package/docs/agents/install-and-sync.md +385 -0
- package/docs/agents/intake.md +81 -0
- package/docs/agents/key-changes.md +103 -0
- package/docs/agents/label-coverage.md +73 -0
- package/docs/agents/markdown-audit.md +197 -0
- package/docs/agents/output-shape.md +70 -0
- package/docs/agents/overview.md +26 -0
- package/docs/agents/records.md +170 -0
- package/docs/agents/restated.md +81 -0
- package/docs/agents/review-classification.md +77 -0
- package/docs/agents/routing.md +61 -0
- package/docs/agents/rule-citations.md +98 -0
- package/docs/agents/sandbox.md +71 -0
- package/docs/agents/scripting.md +149 -0
- package/docs/agents/sessions.md +120 -0
- package/docs/agents/skills-audit.md +94 -0
- package/docs/agents/skills-reach.md +64 -0
- package/docs/agents/standards-audit.md +38 -0
- package/docs/agents/state-scoped-risk.md +105 -0
- package/docs/agents/superseded.md +85 -0
- package/docs/agents/targets.md +83 -0
- package/docs/agents/tasks.md +200 -0
- package/docs/agents/teach.md +158 -0
- package/docs/agents/test-order.md +56 -0
- package/docs/agents/worktrees.md +62 -0
- package/docs/ai-workflow.md +317 -0
- package/docs/index.md +23 -0
- package/docs/operating-model.md +223 -0
- package/docs/target-projects.md +258 -0
- package/docs/visual-design-workflow.md +151 -0
- package/docs/zshrc-aliases.md +65 -0
- package/governance/rules/ci/700-ci-workflow.md +44 -0
- package/governance/rules/claude/500-prose.md +15 -0
- package/governance/rules/claude/501-markdown.md +14 -0
- package/governance/rules/claude/510-context.md +28 -0
- package/governance/rules/claude/511-indexes.md +14 -0
- package/governance/rules/claude/520-wireframes.md +12 -0
- package/governance/rules/claude/530-requirements.md +11 -0
- package/governance/rules/claude/540-architecture.md +11 -0
- package/governance/rules/claude/550-design.md +11 -0
- package/governance/rules/claude/555-tasks.md +12 -0
- package/governance/rules/claude/556-groundwork.md +11 -0
- package/governance/rules/claude/557-intake.md +11 -0
- package/governance/rules/claude/558-plan.md +22 -0
- package/governance/rules/claude/559-memory.md +11 -0
- package/governance/rules/claude/560-diagrams.md +18 -0
- package/governance/rules/claude/561-teach.md +13 -0
- package/governance/rules/claude/562-session.md +15 -0
- package/governance/rules/claude/570-skill.md +24 -0
- package/governance/rules/claude/575-hooks.md +17 -0
- package/governance/rules/claude/576-settings.md +14 -0
- package/governance/rules/claude/580-readme.md +11 -0
- package/governance/rules/claude/590-rule-authoring.md +12 -0
- package/governance/rules/claude/591-standard-authoring.md +12 -0
- package/governance/rules/claude/592-claude-md.md +19 -0
- package/governance/rules/core/000-constitution.md +30 -0
- package/governance/rules/core/005-behavior.md +27 -0
- package/governance/rules/core/010-testing.md +35 -0
- package/governance/rules/core/015-output.md +20 -0
- package/governance/rules/core/020-concurrency.md +22 -0
- package/governance/rules/core/025-indexes.md +9 -0
- package/governance/rules/core/030-error-handling.md +31 -0
- package/governance/rules/core/035-tasks.md +13 -0
- package/governance/rules/core/040-performance.md +20 -0
- package/governance/rules/core/045-memory.md +12 -0
- package/governance/rules/core/050-logging.md +20 -0
- package/governance/rules/core/055-scratch.md +9 -0
- package/governance/rules/core/060-naming.md +19 -0
- package/governance/rules/core/065-spelling.md +19 -0
- package/governance/rules/core/070-planning.md +18 -0
- package/governance/rules/core/075-dependencies.md +25 -0
- package/governance/rules/core/080-config-comments.md +22 -0
- package/governance/rules/core/085-worktrees.md +17 -0
- package/governance/rules/core/087-git.md +11 -0
- package/governance/rules/core/090-code-comments.md +39 -0
- package/governance/rules/framework/200-react.md +51 -0
- package/governance/rules/framework/210-astro.md +41 -0
- package/governance/rules/framework/220-fastapi.md +43 -0
- package/governance/rules/framework/230-nextjs.md +48 -0
- package/governance/rules/framework/250-tailwind.md +32 -0
- package/governance/rules/framework/260-shadcn.md +34 -0
- package/governance/rules/lang/100-typescript.md +40 -0
- package/governance/rules/lang/110-python.md +42 -0
- package/governance/rules/lang/120-bash.md +19 -0
- package/governance/rules/lib/300-testing-ts.md +39 -0
- package/governance/rules/lib/305-e2e-reliability.md +34 -0
- package/governance/rules/lib/306-test-scope.md +25 -0
- package/governance/rules/lib/310-zod.md +25 -0
- package/governance/rules/lib/320-tanstack-query.md +32 -0
- package/governance/rules/lib/330-testing-py.md +44 -0
- package/governance/rules/lib/340-pydantic.md +38 -0
- package/governance/rules/lib/350-security-web.md +32 -0
- package/governance/rules/lib/360-security-server.md +39 -0
- package/governance/rules/lib/370-database.md +35 -0
- package/governance/rules/snippets/505-at-references.md +9 -0
- package/governance/rules/ui/400-ui.md +36 -0
- package/governance/rules/ui/410-a11y.md +48 -0
- package/governance/rules/ui/420-forms.md +36 -0
- package/governance/rules/ui/430-ux-completeness.md +65 -0
- package/governance/rules/ui/440-surface-capture.md +34 -0
- package/governance/rules/ui/450-link-behavior.md +19 -0
- package/governance/stacks/astro.toml +2 -0
- package/governance/stacks/base.toml +8 -0
- package/governance/stacks/node-server.toml +2 -0
- package/governance/stacks/node.toml +2 -0
- package/governance/stacks/python-fastapi.toml +2 -0
- package/governance/stacks/python.toml +2 -0
- package/governance/stacks/react.toml +2 -0
- package/package.json +69 -0
- package/scripts/config.sh +11 -0
- package/scripts/core/bootstrap.sh +81 -0
- package/scripts/core/check-color-source.sh +41 -0
- package/scripts/core/check-ignore-parity.sh +162 -0
- package/scripts/core/check-plugin-boundary.sh +45 -0
- package/scripts/core/check-seed-independence.sh +59 -0
- package/scripts/core/check-skill-paths.sh +24 -0
- package/scripts/core/clean.sh +36 -0
- package/scripts/core/install-check.sh +101 -0
- package/scripts/core/list-seed-roots.sh +18 -0
- package/scripts/core/regen-claude-copies.sh +10 -0
- package/scripts/core/regen-hero.sh +217 -0
- package/scripts/core/regen-indexes.sh +10 -0
- package/scripts/core/regen-tooling-paths.sh +61 -0
- package/scripts/core/repair-bare-flag.sh +19 -0
- package/scripts/core/snapshot.sh +134 -0
- package/scripts/core/update.sh +35 -0
- package/scripts/docs/list.sh +165 -0
- package/scripts/lib/frontmatter.sh +30 -0
- package/scripts/lib/gov.sh +14 -0
- package/scripts/lib/sandbox-fixtures.sh +191 -0
- package/scripts/lib/sandbox-git.sh +125 -0
- package/scripts/lib/sandbox-path.sh +206 -0
- package/scripts/lib/tooling.sh +35 -0
- package/scripts/lib/ui.sh +266 -0
- package/scripts/lib/worktree.sh +20 -0
- package/scripts/manage-sandbox.sh +466 -0
- package/scripts/snippets/create.sh +156 -0
- package/scripts/standards/list.sh +115 -0
- package/scripts/tooling/create.sh +109 -0
- package/scripts/tooling/verify.sh +179 -0
- package/snippets/align.md +12 -0
- package/snippets/claude/decision-memo.md +39 -0
- package/snippets/claude/feature-recap.md +19 -0
- package/snippets/claude/figma-steps.md +24 -0
- package/snippets/compact-summary.md +5 -0
- package/snippets/decision-help.md +6 -0
- package/snippets/meta-prompt.md +14 -0
- package/snippets/research-prompt.md +7 -0
- package/snippets/session-notes.md +11 -0
- package/snippets/snippets.toml +5 -0
- package/snippets/step-by-step.md +10 -0
- package/snippets/web-research.md +21 -0
- package/src/audits/baseline.ts +201 -0
- package/src/audits/catalog.ts +876 -0
- package/src/audits/run.ts +204 -0
- package/src/autoship/classify.ts +75 -0
- package/src/autoship/paths.ts +51 -0
- package/src/binary.ts +16 -0
- package/src/browser/engine.ts +40 -0
- package/src/census/count.ts +113 -0
- package/src/claude/cases/all.ts +24 -0
- package/src/claude/cases/authoring.ts +53 -0
- package/src/claude/cases/claude-workflow.ts +158 -0
- package/src/claude/cases/git.ts +44 -0
- package/src/claude/cases/misc.ts +27 -0
- package/src/claude/cases/setup.ts +94 -0
- package/src/claude/gitignore.ts +51 -0
- package/src/claude/routing.ts +283 -0
- package/src/claude/seeds-list.ts +47 -0
- package/src/claude/seeds.ts +150 -0
- package/src/claude/settings.ts +151 -0
- package/src/claude/skills-audit.ts +228 -0
- package/src/claude/skills-drift.ts +156 -0
- package/src/claude/skills-list.ts +99 -0
- package/src/claude/skills-rank.ts +320 -0
- package/src/claude/skills-reach.ts +227 -0
- package/src/cli-run.ts +43 -0
- package/src/cli.ts +200 -0
- package/src/commands/audits.ts +350 -0
- package/src/commands/autoship.ts +129 -0
- package/src/commands/capture.ts +133 -0
- package/src/commands/census.ts +105 -0
- package/src/commands/claude.ts +1286 -0
- package/src/commands/comments.ts +240 -0
- package/src/commands/context.ts +857 -0
- package/src/commands/demo.ts +389 -0
- package/src/commands/deps.ts +173 -0
- package/src/commands/design.ts +36 -0
- package/src/commands/docs.ts +60 -0
- package/src/commands/feedback-format.ts +23 -0
- package/src/commands/feedback.ts +112 -0
- package/src/commands/gate.ts +189 -0
- package/src/commands/gov.ts +1265 -0
- package/src/commands/indexes.ts +184 -0
- package/src/commands/init.ts +113 -0
- package/src/commands/intake.ts +406 -0
- package/src/commands/inventory.ts +256 -0
- package/src/commands/labels.ts +361 -0
- package/src/commands/markdown.ts +544 -0
- package/src/commands/migrate.ts +175 -0
- package/src/commands/pass-through.ts +39 -0
- package/src/commands/pr.ts +411 -0
- package/src/commands/records.ts +728 -0
- package/src/commands/sandbox.ts +468 -0
- package/src/commands/secrets.ts +132 -0
- package/src/commands/serve.ts +159 -0
- package/src/commands/sessions.ts +408 -0
- package/src/commands/slides.ts +126 -0
- package/src/commands/snippets.ts +84 -0
- package/src/commands/standards.ts +247 -0
- package/src/commands/sync.ts +428 -0
- package/src/commands/targets.ts +319 -0
- package/src/commands/tasks.ts +743 -0
- package/src/commands/teach.ts +786 -0
- package/src/commands/tooling.ts +573 -0
- package/src/commands/transcripts.ts +44 -0
- package/src/commands/upgrade.ts +231 -0
- package/src/commands/wiki.ts +100 -0
- package/src/commands/worktrees.ts +191 -0
- package/src/comments/scan.ts +338 -0
- package/src/comments/trend.ts +207 -0
- package/src/comments/vocabulary.ts +85 -0
- package/src/context/architecture.ts +364 -0
- package/src/context/audit.ts +790 -0
- package/src/context/citations.ts +196 -0
- package/src/context/folders.ts +186 -0
- package/src/context/gate.ts +57 -0
- package/src/context/index-drift.ts +64 -0
- package/src/context/narration.ts +99 -0
- package/src/copy.ts +30 -0
- package/src/counts/catalogs.ts +96 -0
- package/src/counts/numbers.ts +79 -0
- package/src/counts/scan.ts +314 -0
- package/src/demo/beats.ts +135 -0
- package/src/demo/compile.ts +326 -0
- package/src/demo/container.ts +63 -0
- package/src/demo/cursors.ts +55 -0
- package/src/demo/drive.ts +357 -0
- package/src/demo/pointer.ts +178 -0
- package/src/demo/theme.ts +112 -0
- package/src/deps/audit.ts +153 -0
- package/src/design/parse.ts +116 -0
- package/src/design/render.ts +249 -0
- package/src/docs/read.ts +77 -0
- package/src/exec.ts +16 -0
- package/src/exempt-marker.ts +43 -0
- package/src/frontmatter.ts +13 -0
- package/src/gate/measures.ts +682 -0
- package/src/gate/sequencer.ts +386 -0
- package/src/gate/stages.ts +412 -0
- package/src/git-env.ts +36 -0
- package/src/git-files.ts +105 -0
- package/src/git-ignore.ts +46 -0
- package/src/github-format.ts +13 -0
- package/src/github.ts +24 -0
- package/src/gov/adapter.ts +103 -0
- package/src/gov/citations.ts +514 -0
- package/src/gov/consumed.ts +129 -0
- package/src/gov/install.ts +132 -0
- package/src/gov/list.ts +106 -0
- package/src/gov/payload.ts +39 -0
- package/src/gov/restated.ts +814 -0
- package/src/gov/stacks.ts +205 -0
- package/src/gov/superseded.ts +415 -0
- package/src/gov/test-order.ts +407 -0
- package/src/indexes/frontmatter.ts +46 -0
- package/src/indexes/regen.ts +84 -0
- package/src/indexes/render.ts +201 -0
- package/src/indexes/walk.ts +83 -0
- package/src/init/flags.ts +60 -0
- package/src/init/plan.ts +114 -0
- package/src/init/run.ts +46 -0
- package/src/init/steps.ts +77 -0
- package/src/intake/folder.ts +320 -0
- package/src/intake/items.ts +174 -0
- package/src/inventory/config.ts +117 -0
- package/src/inventory/group.ts +76 -0
- package/src/inventory/subjects.ts +114 -0
- package/src/inventory/walk.ts +129 -0
- package/src/labels/audit.ts +82 -0
- package/src/labels/coverage.ts +79 -0
- package/src/labels/map.ts +101 -0
- package/src/labels/phase.ts +95 -0
- package/src/markdown/bans.ts +94 -0
- package/src/markdown/files.ts +102 -0
- package/src/markdown/gate.ts +28 -0
- package/src/markdown/scan.ts +295 -0
- package/src/markdown/structure.ts +730 -0
- package/src/migrate/apply.ts +115 -0
- package/src/migrate/plan.ts +103 -0
- package/src/migrate/rename.ts +183 -0
- package/src/pr/bijection.ts +145 -0
- package/src/pr/paths.ts +335 -0
- package/src/process/harness.ts +167 -0
- package/src/project-root.ts +19 -0
- package/src/records/backup.ts +455 -0
- package/src/records/migrate.ts +78 -0
- package/src/records/size.ts +260 -0
- package/src/records/validate.ts +1162 -0
- package/src/sandbox/census.ts +228 -0
- package/src/sandbox/coverage.ts +115 -0
- package/src/sandbox/expect.ts +629 -0
- package/src/sandbox/tree.ts +47 -0
- package/src/secrets/marker.ts +30 -0
- package/src/secrets/patterns.ts +142 -0
- package/src/secrets/scan.ts +123 -0
- package/src/secrets/shipped.ts +111 -0
- package/src/seed-marker.ts +74 -0
- package/src/serve/static.ts +322 -0
- package/src/sessions/claim.ts +85 -0
- package/src/sessions/live.ts +79 -0
- package/src/sessions/registry.ts +137 -0
- package/src/sessions/resolve.ts +333 -0
- package/src/slides/layouts.ts +391 -0
- package/src/slides/open.ts +18 -0
- package/src/slides/parse.ts +84 -0
- package/src/slides/render.ts +88 -0
- package/src/slides/styles.ts +44 -0
- package/src/snippets/categories.ts +66 -0
- package/src/snippets/list.ts +32 -0
- package/src/snippets/presets.ts +50 -0
- package/src/standards/audit.ts +132 -0
- package/src/standards/read.ts +100 -0
- package/src/sync/check.ts +692 -0
- package/src/sync/engine.ts +576 -0
- package/src/sync/git.ts +225 -0
- package/src/sync/history.ts +123 -0
- package/src/sync/layout.ts +140 -0
- package/src/sync/reverse.ts +268 -0
- package/src/sync/seeds-report.ts +126 -0
- package/src/sync/stamp.ts +358 -0
- package/src/sync/target.ts +70 -0
- package/src/sync/workflow.ts +200 -0
- package/src/target.ts +43 -0
- package/src/targets/pulls.ts +250 -0
- package/src/targets/registry.ts +203 -0
- package/src/targets/resolve.ts +145 -0
- package/src/targets/sweep.ts +246 -0
- package/src/tasks/archive.ts +506 -0
- package/src/tasks/record.ts +311 -0
- package/src/tasks/trunk.ts +89 -0
- package/src/tasks/validate.ts +1001 -0
- package/src/teach/lesson.ts +180 -0
- package/src/teach/workspace.ts +842 -0
- package/src/tooling/gitignore.ts +122 -0
- package/src/tooling/inject.ts +193 -0
- package/src/tooling/list.ts +39 -0
- package/src/tooling/manifest.ts +176 -0
- package/src/tooling/package.ts +166 -0
- package/src/tooling/read.ts +65 -0
- package/src/tooling/scan.ts +147 -0
- package/src/tooling/stamp.ts +44 -0
- package/src/transcripts/fetch.ts +156 -0
- package/src/transcripts/metadata.ts +54 -0
- package/src/transcripts/vtt.ts +114 -0
- package/src/ui.ts +266 -0
- package/src/version/compare.ts +53 -0
- package/src/version/installed.ts +40 -0
- package/src/version/manager.ts +67 -0
- package/src/version/skew.ts +192 -0
- package/src/wiki/init.ts +85 -0
- package/src/worktree.ts +143 -0
- package/src/worktrees/reclaim.ts +306 -0
- package/standards/architecture.md +72 -0
- package/standards/branch.md +59 -0
- package/standards/commit.md +72 -0
- package/standards/context.md +151 -0
- package/standards/design.md +93 -0
- package/standards/diagrams.md +152 -0
- package/standards/glossary.md +75 -0
- package/standards/groundwork.md +211 -0
- package/standards/index.md +36 -0
- package/standards/intake.md +192 -0
- package/standards/issue.md +94 -0
- package/standards/markdown.md +137 -0
- package/standards/memory.md +144 -0
- package/standards/plan.md +172 -0
- package/standards/pr.md +139 -0
- package/standards/publish.md +51 -0
- package/standards/readme.md +208 -0
- package/standards/requirements.md +70 -0
- package/standards/rule.md +118 -0
- package/standards/session.md +109 -0
- package/standards/skill.md +300 -0
- package/standards/slug.md +39 -0
- package/standards/snippets.md +76 -0
- package/standards/standard.md +170 -0
- package/standards/tasks.md +254 -0
- package/standards/teach.md +153 -0
- package/standards/versioning.md +71 -0
- package/standards/wireframes.md +113 -0
- package/tooling/astro/configs/astro.config.mjs +31 -0
- package/tooling/astro/configs/eslint.config.js +79 -0
- package/tooling/astro/configs/playwright.config.ts +26 -0
- package/tooling/astro/configs/tsconfig.json +12 -0
- package/tooling/astro/configs/vitest.config.ts +22 -0
- package/tooling/astro/manifest.toml +34 -0
- package/tooling/astro/reference.md +60 -0
- package/tooling/base/configs/.editorconfig +5 -0
- package/tooling/base/configs/.github/pull_request_template.md +18 -0
- package/tooling/base/configs/.github/workflows/verify.yml +35 -0
- package/tooling/base/configs/.husky/commit-msg +1 -0
- package/tooling/base/configs/.husky/post-merge +61 -0
- package/tooling/base/configs/.husky/post-rewrite +21 -0
- package/tooling/base/configs/.husky/pre-commit +1 -0
- package/tooling/base/configs/.husky/pre-push +1 -0
- package/tooling/base/configs/.prettierrc +12 -0
- package/tooling/base/configs/.shellcheckrc +1 -0
- package/tooling/base/configs/.vscode/extensions.json +9 -0
- package/tooling/base/configs/.vscode/settings.json +3 -0
- package/tooling/base/configs/commitlint.config.js +11 -0
- package/tooling/base/configs/scripts/verify.sh +64 -0
- package/tooling/base/manifest.toml +30 -0
- package/tooling/base/reference.md +98 -0
- package/tooling/base/seeds/.claude/context/ci.md +33 -0
- package/tooling/base/seeds/.claude/context/development.md +37 -0
- package/tooling/base/seeds/.claude/context/index.md +11 -0
- package/tooling/base/seeds/.cspell/project-terms.txt +0 -0
- package/tooling/base/seeds/.cspell/tech-stack.txt +19 -0
- package/tooling/base/seeds/.lintstagedrc +8 -0
- package/tooling/base/seeds/.prettierignore +0 -0
- package/tooling/base/seeds/cspell.json +20 -0
- package/tooling/claude/manifest.toml +14 -0
- package/tooling/claude/reference.md +79 -0
- package/tooling/claude/seeds/.claude/ARCHITECTURE.md +13 -0
- package/tooling/claude/seeds/.claude/DESIGN.md +62 -0
- package/tooling/claude/seeds/.claude/REQUIREMENTS.md +18 -0
- package/tooling/claude/seeds/.claude/diagrams/index.md +8 -0
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +50 -0
- package/tooling/claude/seeds/.claude/hooks/memory-index.sh +68 -0
- package/tooling/claude/seeds/.claude/hooks/path-form.sh +57 -0
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +52 -0
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +86 -0
- package/tooling/claude/seeds/.claude/hooks/tasks-index.sh +71 -0
- package/tooling/claude/seeds/.claude/memory/index.md +8 -0
- package/tooling/claude/seeds/.claude/settings.json +47 -0
- package/tooling/claude/seeds/.claude/tasks/index.md +8 -0
- package/tooling/claude/seeds/.claude/wireframes/index.md +8 -0
- package/tooling/claude/seeds/CLAUDE.md +29 -0
- package/tooling/claude/user/settings.template.json +10 -0
- package/tooling/claude/user/statusline-command.sh +53 -0
- package/tooling/python/configs/.coveragerc +14 -0
- package/tooling/python/configs/.python-version +1 -0
- package/tooling/python/configs/mypy.ini +6 -0
- package/tooling/python/configs/pytest.ini +4 -0
- package/tooling/python/configs/ruff.toml +15 -0
- package/tooling/python/configs/scripts/verify.sh +77 -0
- package/tooling/python/manifest.toml +16 -0
- package/tooling/python/reference.md +66 -0
- package/tooling/python/seeds/.cspell/tech-stack.txt +19 -0
- package/tooling/python/seeds/tests/test_smoke.py +2 -0
- package/tooling/vite-react/configs/playwright.config.ts +26 -0
- package/tooling/vite-react/configs/tsconfig.json +35 -0
- package/tooling/vite-react/configs/vite.config.ts +24 -0
- package/tooling/vite-react/configs/vitest.config.ts +26 -0
- package/tooling/vite-react/manifest.toml +23 -0
- package/tooling/vite-react/reference.md +55 -0
- package/tooling/vite-react/seeds/.cspell/project-terms.txt +1 -0
- package/tooling/vite-react/seeds/.cspell/tech-stack.txt +1 -0
- package/tooling/web/configs/.github/workflows/verify.yml +134 -0
- package/tooling/web/configs/.vscode/extensions.json +13 -0
- package/tooling/web/configs/.vscode/settings.json +10 -0
- package/tooling/web/configs/e2e/home.spec.ts +6 -0
- package/tooling/web/configs/e2e/screenshot.ts +53 -0
- package/tooling/web/configs/eslint.config.js +82 -0
- package/tooling/web/configs/scripts/screenshot.sh +28 -0
- package/tooling/web/configs/scripts/verify.sh +80 -0
- package/tooling/web/configs/scripts/worktree-port.sh +74 -0
- package/tooling/web/configs/src/test/setup.ts +8 -0
- package/tooling/web/manifest.toml +58 -0
- package/tooling/web/reference.md +115 -0
- package/tooling/web/seeds/.cspell/tech-stack.txt +18 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -e
|
|
3
|
+
set -o pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
PROJECT_ROOT="${PROJECT_ROOT:-$(dirname "$(dirname "$SCRIPT_DIR")")}"
|
|
7
|
+
|
|
8
|
+
source "$PROJECT_ROOT/scripts/lib/ui.sh"
|
|
9
|
+
source "$PROJECT_ROOT/scripts/lib/frontmatter.sh"
|
|
10
|
+
|
|
11
|
+
STANDARDS_DIR="$PROJECT_ROOT/standards"
|
|
12
|
+
|
|
13
|
+
show_help() {
|
|
14
|
+
echo -e "${GREY}┌${NC}"
|
|
15
|
+
echo -e "${GREY}├${NC} ${WHITE}Usage:${NC} canon standards list [options]"
|
|
16
|
+
echo -e "${GREY}│${NC}"
|
|
17
|
+
echo -e "${GREY}│${NC} ${WHITE}Options:${NC}"
|
|
18
|
+
echo -e "${GREY}│${NC} --json ${GREY}# Emit machine-readable JSON${NC}"
|
|
19
|
+
echo -e "${GREY}│${NC} -h, --help ${GREY}# Show this help message${NC}"
|
|
20
|
+
echo -e "${GREY}└${NC}"
|
|
21
|
+
exit 0
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
json_escape() {
|
|
25
|
+
local s="$1"
|
|
26
|
+
s="${s//\\/\\\\}"
|
|
27
|
+
s="${s//\"/\\\"}"
|
|
28
|
+
printf '%s' "$s"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Emits the paths a standard's `## Scope` statement declares, as a JSON array.
|
|
32
|
+
# The declaration is prose, so the contract is narrow on purpose: backticked
|
|
33
|
+
# paths in the first sentence of the statement, or `*` for an attribute standard,
|
|
34
|
+
# which names no path and says so in the same statement. An empty array means the
|
|
35
|
+
# statement did not parse, which consumers report rather than skip.
|
|
36
|
+
read_applies_to() {
|
|
37
|
+
local file="$1"
|
|
38
|
+
local scope first paths
|
|
39
|
+
|
|
40
|
+
scope=$(awk '/^## Scope[[:space:]]*$/ {found = 1; next} found && NF {print; exit}' "$file")
|
|
41
|
+
first="${scope%%. *}"
|
|
42
|
+
paths=$(printf '%s' "$first" | grep -o '`[^`]*`' | tr -d '`' || true)
|
|
43
|
+
|
|
44
|
+
if [ -z "$paths" ] && [[ "$scope" == *"attribute standard"* ]]; then
|
|
45
|
+
paths="*"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
printf '%s\n' "$paths" | jq -Rnc '[inputs | select(length > 0)]'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
list_text() {
|
|
52
|
+
log_step "Standards"
|
|
53
|
+
local file name title
|
|
54
|
+
while IFS= read -r file; do
|
|
55
|
+
name=$(basename "$file" .md)
|
|
56
|
+
[ "$name" = "index" ] && continue
|
|
57
|
+
title=$(read_frontmatter_field "$file" "description")
|
|
58
|
+
log_info "$name : $title"
|
|
59
|
+
done < <(find "$STANDARDS_DIR" -maxdepth 1 -type f -name "*.md" | sort)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# No `target` field. It named where a standard installed, and nothing installs
|
|
63
|
+
# one now, so every value it could carry is either a path only this repository
|
|
64
|
+
# has or a duplicate of what `canon standards <name>` reports. `content` already
|
|
65
|
+
# carries the document, which is what a consumer wanted the path for.
|
|
66
|
+
list_json() {
|
|
67
|
+
local first=1
|
|
68
|
+
local file name title applies_to
|
|
69
|
+
printf '['
|
|
70
|
+
while IFS= read -r file; do
|
|
71
|
+
name=$(basename "$file" .md)
|
|
72
|
+
[ "$name" = "index" ] && continue
|
|
73
|
+
title=$(read_frontmatter_field "$file" "description")
|
|
74
|
+
applies_to=$(read_applies_to "$file")
|
|
75
|
+
if [ "$first" -eq 0 ]; then
|
|
76
|
+
printf ','
|
|
77
|
+
fi
|
|
78
|
+
jq -nc \
|
|
79
|
+
--arg name "$name" \
|
|
80
|
+
--arg description "$title" \
|
|
81
|
+
--argjson appliesTo "$applies_to" \
|
|
82
|
+
--rawfile content "$file" \
|
|
83
|
+
'{name: $name, description: $description, appliesTo: $appliesTo, content: $content}'
|
|
84
|
+
first=0
|
|
85
|
+
done < <(find "$STANDARDS_DIR" -maxdepth 1 -type f -name "*.md" | sort)
|
|
86
|
+
printf ']'
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
main() {
|
|
90
|
+
local json=0
|
|
91
|
+
|
|
92
|
+
while [[ $# -gt 0 ]]; do
|
|
93
|
+
case "$1" in
|
|
94
|
+
-h | --help) show_help ;;
|
|
95
|
+
--json)
|
|
96
|
+
json=1
|
|
97
|
+
shift
|
|
98
|
+
;;
|
|
99
|
+
*) log_error "Unknown option: $1" ;;
|
|
100
|
+
esac
|
|
101
|
+
done
|
|
102
|
+
|
|
103
|
+
trap close_timeline EXIT
|
|
104
|
+
|
|
105
|
+
if [ "$json" -eq 1 ]; then
|
|
106
|
+
printf '{"standards":'
|
|
107
|
+
list_json
|
|
108
|
+
printf '}\n'
|
|
109
|
+
exit 0
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
list_text
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
main "$@"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -e
|
|
3
|
+
set -o pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
PROJECT_ROOT="${PROJECT_ROOT:-$(dirname "$(dirname "$SCRIPT_DIR")")}"
|
|
7
|
+
|
|
8
|
+
source "$PROJECT_ROOT/scripts/lib/ui.sh"
|
|
9
|
+
source "$PROJECT_ROOT/scripts/lib/tooling.sh"
|
|
10
|
+
trap close_timeline EXIT
|
|
11
|
+
|
|
12
|
+
show_help() {
|
|
13
|
+
echo -e "${GREY}┌${NC}"
|
|
14
|
+
log_step "Tooling create usage"
|
|
15
|
+
echo -e "${GREY}│${NC} ${WHITE}Usage:${NC} canon tooling create [stack]"
|
|
16
|
+
echo -e "${GREY}│${NC}"
|
|
17
|
+
echo -e "${GREY}│${NC} Creates a new stack with stub manifest, reference, configs, and seeds."
|
|
18
|
+
echo -e "${GREY}│${NC}"
|
|
19
|
+
echo -e "${GREY}│${NC} ${WHITE}Arguments:${NC}"
|
|
20
|
+
echo -e "${GREY}│${NC} stack Name of the new stack to create"
|
|
21
|
+
echo -e "${GREY}│${NC}"
|
|
22
|
+
echo -e "${GREY}│${NC} ${WHITE}Options:${NC}"
|
|
23
|
+
echo -e "${GREY}│${NC} -h, --help ${GREY}# Show this help message${NC}"
|
|
24
|
+
echo -e "${GREY}└${NC}"
|
|
25
|
+
exit 0
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
main() {
|
|
29
|
+
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
|
|
30
|
+
show_help
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
local stack="$1"
|
|
34
|
+
|
|
35
|
+
echo -e "${GREY}┌${NC}"
|
|
36
|
+
echo -e "${GREY}│${NC} ${WHITE}canon tooling create${NC}"
|
|
37
|
+
|
|
38
|
+
if [ -z "$stack" ]; then
|
|
39
|
+
ask "Stack name?" "stack"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -z "$stack" ]; then
|
|
43
|
+
log_error "Stack name is required"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if is_tooling_stack_excluded "$stack"; then
|
|
47
|
+
log_error "Reserved name: $stack. Managed by \`canon claude\`, not \`canon tooling\`."
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
local dest="$PROJECT_ROOT/tooling/$stack"
|
|
51
|
+
|
|
52
|
+
if [ -d "$dest" ]; then
|
|
53
|
+
log_error "Stack already exists: $stack"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
log_step "Creating"
|
|
57
|
+
log_add "tooling/$stack/configs/"
|
|
58
|
+
log_add "tooling/$stack/seeds/"
|
|
59
|
+
log_add "tooling/$stack/manifest.toml"
|
|
60
|
+
log_add "tooling/$stack/reference.md"
|
|
61
|
+
|
|
62
|
+
select_option "Create stack at tooling/$stack?" "Yes" "No"
|
|
63
|
+
|
|
64
|
+
if [ "$SELECTED_OPTION" = "No" ]; then
|
|
65
|
+
log_warn "Cancelled"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
log_step "Applying"
|
|
70
|
+
|
|
71
|
+
mkdir -p "$dest/configs"
|
|
72
|
+
log_add "tooling/$stack/configs/"
|
|
73
|
+
|
|
74
|
+
mkdir -p "$dest/seeds"
|
|
75
|
+
log_add "tooling/$stack/seeds/"
|
|
76
|
+
|
|
77
|
+
cat >"$dest/manifest.toml" <<EOF
|
|
78
|
+
[stack]
|
|
79
|
+
name = "$stack"
|
|
80
|
+
extends = ""
|
|
81
|
+
runtime = ""
|
|
82
|
+
scaffold = ""
|
|
83
|
+
|
|
84
|
+
[dependencies.dev]
|
|
85
|
+
packages = []
|
|
86
|
+
|
|
87
|
+
[scripts]
|
|
88
|
+
"script-key" = "command --flag"
|
|
89
|
+
|
|
90
|
+
[gitignore]
|
|
91
|
+
"# $stack" = ["pattern/", ".file"]
|
|
92
|
+
EOF
|
|
93
|
+
log_add "tooling/$stack/manifest.toml"
|
|
94
|
+
cat >"$dest/reference.md" <<EOF
|
|
95
|
+
# Tooling $stack reference
|
|
96
|
+
|
|
97
|
+
## Overview
|
|
98
|
+
|
|
99
|
+
[One or two sentences: what this stack provides and its purpose.]
|
|
100
|
+
|
|
101
|
+
EOF
|
|
102
|
+
log_add "tooling/$stack/reference.md"
|
|
103
|
+
|
|
104
|
+
trap - EXIT
|
|
105
|
+
echo -e "${GREY}└${NC}\n"
|
|
106
|
+
echo -e "${GREEN}✓ Stack created${NC}"
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
main "$@"
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -e
|
|
3
|
+
set -o pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
PROJECT_ROOT="${PROJECT_ROOT:-$(dirname "$(dirname "$SCRIPT_DIR")")}"
|
|
7
|
+
|
|
8
|
+
source "$PROJECT_ROOT/scripts/lib/ui.sh"
|
|
9
|
+
source "$PROJECT_ROOT/scripts/lib/tooling.sh"
|
|
10
|
+
|
|
11
|
+
show_help() {
|
|
12
|
+
echo -e "${GREY}┌${NC}"
|
|
13
|
+
echo -e "${GREY}├${NC} ${WHITE}Usage:${NC} canon tooling verify <stack> [options]"
|
|
14
|
+
echo -e "${GREY}│${NC}"
|
|
15
|
+
echo -e "${GREY}│${NC} ${WHITE}Options:${NC}"
|
|
16
|
+
echo -e "${GREY}│${NC} --keep ${GREY}# Keep tmp dir after run for inspection${NC}"
|
|
17
|
+
echo -e "${GREY}│${NC} -h, --help ${GREY}# Show this help message${NC}"
|
|
18
|
+
echo -e "${GREY}│${NC}"
|
|
19
|
+
echo -e "${GREY}│${NC} Scaffolds <stack> into .claude/.tmp/verify-<stack>/, syncs the full"
|
|
20
|
+
echo -e "${GREY}│${NC} layer chain, and runs check + test:e2e + screenshot."
|
|
21
|
+
echo -e "${GREY}└${NC}"
|
|
22
|
+
exit 0
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
read_manifest_field() {
|
|
26
|
+
local toml="$1"
|
|
27
|
+
local section="$2"
|
|
28
|
+
local field="$3"
|
|
29
|
+
awk -v s="$section" -v f="$field" '
|
|
30
|
+
$0 == "[" s "]" { in_section = 1; next }
|
|
31
|
+
in_section && /^\[/ { exit }
|
|
32
|
+
in_section && match($0, "^" f "[[:space:]]*=") {
|
|
33
|
+
val = substr($0, RLENGTH + 1)
|
|
34
|
+
sub(/^[[:space:]]+/, "", val)
|
|
35
|
+
sub(/^"/, "", val)
|
|
36
|
+
sub(/"$/, "", val)
|
|
37
|
+
print val
|
|
38
|
+
exit
|
|
39
|
+
}
|
|
40
|
+
' "$toml"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
run_phase() {
|
|
44
|
+
local name="$1"
|
|
45
|
+
shift
|
|
46
|
+
log_step "$name"
|
|
47
|
+
if "$@" >/tmp/verify-phase.log 2>&1; then
|
|
48
|
+
log_info "$name passed"
|
|
49
|
+
RESULTS+=("$name:pass")
|
|
50
|
+
return 0
|
|
51
|
+
fi
|
|
52
|
+
log_warn "$name failed"
|
|
53
|
+
tail -20 /tmp/verify-phase.log >&2
|
|
54
|
+
RESULTS+=("$name:fail")
|
|
55
|
+
FAILED=1
|
|
56
|
+
return 1
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
main() {
|
|
60
|
+
local stack=""
|
|
61
|
+
local keep=0
|
|
62
|
+
|
|
63
|
+
while [[ $# -gt 0 ]]; do
|
|
64
|
+
case "$1" in
|
|
65
|
+
-h | --help) show_help ;;
|
|
66
|
+
--keep)
|
|
67
|
+
keep=1
|
|
68
|
+
shift
|
|
69
|
+
;;
|
|
70
|
+
-*)
|
|
71
|
+
log_error "Unknown option: $1"
|
|
72
|
+
;;
|
|
73
|
+
*)
|
|
74
|
+
if [ -z "$stack" ]; then
|
|
75
|
+
stack="$1"
|
|
76
|
+
shift
|
|
77
|
+
else
|
|
78
|
+
log_error "Unexpected argument: $1"
|
|
79
|
+
fi
|
|
80
|
+
;;
|
|
81
|
+
esac
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
[ -z "$stack" ] && log_error "Stack required. See --help."
|
|
85
|
+
|
|
86
|
+
if is_tooling_stack_excluded "$stack"; then
|
|
87
|
+
log_error "Stack '$stack' is excluded from tooling."
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
local manifest="$PROJECT_ROOT/tooling/$stack/manifest.toml"
|
|
91
|
+
[ ! -f "$manifest" ] && log_error "No manifest at $manifest"
|
|
92
|
+
|
|
93
|
+
local scaffold
|
|
94
|
+
scaffold=$(read_manifest_field "$manifest" "stack" "scaffold")
|
|
95
|
+
[ -z "$scaffold" ] && log_error "Stack '$stack' has no scaffold command in manifest."
|
|
96
|
+
|
|
97
|
+
local prepare
|
|
98
|
+
prepare=$(read_manifest_field "$manifest" "verify" "prepare")
|
|
99
|
+
|
|
100
|
+
open_timeline "canon tooling verify $stack"
|
|
101
|
+
trap close_timeline EXIT
|
|
102
|
+
|
|
103
|
+
local tmp_root="$PROJECT_ROOT/.claude/.tmp"
|
|
104
|
+
local tmp_dir="$tmp_root/verify-$stack"
|
|
105
|
+
|
|
106
|
+
mkdir -p "$tmp_root"
|
|
107
|
+
rm -rf "$tmp_dir"
|
|
108
|
+
|
|
109
|
+
local project_name="verify-$stack"
|
|
110
|
+
local scaffold_cmd="${scaffold//\{\{name\}\}/$project_name}"
|
|
111
|
+
|
|
112
|
+
RESULTS=()
|
|
113
|
+
FAILED=0
|
|
114
|
+
|
|
115
|
+
log_step "Scaffolding $stack"
|
|
116
|
+
(cd "$tmp_root" && eval "$scaffold_cmd") >/tmp/verify-scaffold.log 2>&1 || {
|
|
117
|
+
log_warn "Scaffold failed"
|
|
118
|
+
tail -20 /tmp/verify-scaffold.log >&2
|
|
119
|
+
FAILED=1
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if [ ! -d "$tmp_dir" ]; then
|
|
123
|
+
log_error "Scaffold did not produce $tmp_dir"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
(cd "$tmp_dir" && git init -q && git add . && git commit -m "chore: verify scaffold" -q --no-verify)
|
|
127
|
+
|
|
128
|
+
if [ -n "$prepare" ]; then
|
|
129
|
+
run_phase "Prepare" bash -c "cd '$tmp_dir' && $prepare"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
run_phase "Sync" bash -c "cd '$tmp_dir' && CANON_NON_INTERACTIVE=1 canon tooling sync $stack . --write"
|
|
133
|
+
|
|
134
|
+
if [ -f "$tmp_dir/package.json" ]; then
|
|
135
|
+
run_phase "lint:fix" bash -c "cd '$tmp_dir' && bun run lint:fix"
|
|
136
|
+
run_phase "check" bash -c "cd '$tmp_dir' && bun run check"
|
|
137
|
+
|
|
138
|
+
if grep -q '"test:e2e"' "$tmp_dir/package.json"; then
|
|
139
|
+
run_phase "test:e2e" bash -c "cd '$tmp_dir' && bun run test:e2e"
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
if grep -q '"screenshot"' "$tmp_dir/package.json"; then
|
|
143
|
+
if run_phase "screenshot" bash -c "cd '$tmp_dir' && timeout 60 bun run screenshot"; then
|
|
144
|
+
local shots
|
|
145
|
+
shots=$(find "$tmp_dir/screenshots" -type f -name '*.png' 2>/dev/null | wc -l)
|
|
146
|
+
if [ "$shots" -eq 0 ]; then
|
|
147
|
+
log_warn "screenshot produced no png files"
|
|
148
|
+
RESULTS+=("screenshot-artifacts:fail")
|
|
149
|
+
FAILED=1
|
|
150
|
+
else
|
|
151
|
+
RESULTS+=("screenshot-artifacts:pass")
|
|
152
|
+
fi
|
|
153
|
+
fi
|
|
154
|
+
fi
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
log_step "Results"
|
|
158
|
+
for r in "${RESULTS[@]}"; do
|
|
159
|
+
local name="${r%:*}"
|
|
160
|
+
local status="${r##*:}"
|
|
161
|
+
if [ "$status" = "pass" ]; then
|
|
162
|
+
log_info "$name"
|
|
163
|
+
else
|
|
164
|
+
log_warn "$name"
|
|
165
|
+
fi
|
|
166
|
+
done
|
|
167
|
+
|
|
168
|
+
if [ "$keep" -eq 0 ] && [ "$FAILED" -eq 0 ]; then
|
|
169
|
+
rm -rf "$tmp_dir"
|
|
170
|
+
else
|
|
171
|
+
log_info "Kept $tmp_dir"
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
if [ "$FAILED" -ne 0 ]; then
|
|
175
|
+
exit 1
|
|
176
|
+
fi
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
main "$@"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Check alignment before acting, not after. State three lines, then proceed.
|
|
2
|
+
|
|
3
|
+
- Outcome: what will be true when this is done
|
|
4
|
+
- Scope: what this deliberately does not touch
|
|
5
|
+
- Assumption: the one inference that would change the work if it is wrong
|
|
6
|
+
|
|
7
|
+
Act without waiting, unless being wrong about the assumption wastes the work rather than costing an edit.
|
|
8
|
+
|
|
9
|
+
- Three lines, not three paragraphs
|
|
10
|
+
- Name the inference you are least sure of, not the safest one
|
|
11
|
+
- Do not ask what the request already answers
|
|
12
|
+
- Silence is agreement
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Produce a decision memo for a research or should-we question. This is the decision-heavy counterpart to `claude-feature`, which plans a build. Write one file per independent concern under `.claude/plans/feature-<slug>.md`, or answer inline when the plan is small. Use the same plans folder as `claude-feature`.
|
|
2
|
+
|
|
3
|
+
Read the current state from the code and docs before recommending. Do not assume it.
|
|
4
|
+
|
|
5
|
+
Output this shape per memo:
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# <slug title>
|
|
9
|
+
|
|
10
|
+
<the question in one or two lines>
|
|
11
|
+
|
|
12
|
+
## Summary
|
|
13
|
+
|
|
14
|
+
- <goal in one line>
|
|
15
|
+
- <deliverables in one line>
|
|
16
|
+
- <key tradeoff in one line>
|
|
17
|
+
|
|
18
|
+
## Finding
|
|
19
|
+
|
|
20
|
+
<what the current state actually is, from reading the code and docs>
|
|
21
|
+
|
|
22
|
+
## Item A: <decision>
|
|
23
|
+
|
|
24
|
+
**Current state.** <what exists today>
|
|
25
|
+
|
|
26
|
+
**Recommendation.** <the pick, with the tradeoff in one sentence>
|
|
27
|
+
|
|
28
|
+
**Options.** <the real alternatives, only when the choice is the user's to make>
|
|
29
|
+
|
|
30
|
+
**Feasibility.** <what is not buildable as asked and why, omit when all options are buildable>
|
|
31
|
+
|
|
32
|
+
**Questions.**
|
|
33
|
+
|
|
34
|
+
1. <question>
|
|
35
|
+
- Suggested: <best-practice default derived from context>
|
|
36
|
+
- Answer:
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Repeat the `## Item` block per decision. Keep chat to the file pointer plus the questions. Recommend, do not enumerate, unless the user's preference is the deciding factor.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Recap the implementation this session completed. Read the plan file referenced in the session (usually `.claude/plans/feature-<slug>.md`) and produce a verification block.
|
|
2
|
+
|
|
3
|
+
Output this shape, nothing else:
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
**Deliverable 1**: <name from the plan>
|
|
7
|
+
|
|
8
|
+
- `path/to/file`: one-line reason
|
|
9
|
+
|
|
10
|
+
**Deliverable 2**: <name from the plan>
|
|
11
|
+
|
|
12
|
+
- `path/to/file`: one-line reason
|
|
13
|
+
|
|
14
|
+
**Verified**: <what was smoke-tested or `Nothing tested in session.`>
|
|
15
|
+
|
|
16
|
+
**Open**: <unresolved questions, deferred items, or `None.`>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Group files by deliverable, not by directory. Keep each line scannable. Do not restate the plan body.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Read the relevant spec from `.claude/DESIGN.md` and any other design files needed. Write step-by-step Figma instructions to produce the component exactly.
|
|
2
|
+
|
|
3
|
+
For each step, specify:
|
|
4
|
+
|
|
5
|
+
- The exact tool or keyboard shortcut to activate
|
|
6
|
+
- Which panel or field to click
|
|
7
|
+
- The exact value to enter
|
|
8
|
+
|
|
9
|
+
When a step has multiple sub-actions or lists several items, use nested bullets instead of stacking them in one sentence.
|
|
10
|
+
|
|
11
|
+
Cover in order:
|
|
12
|
+
|
|
13
|
+
- Frame or group setup (dimensions, corner radius, fill)
|
|
14
|
+
- Each layer or shape (type, size, position, fill, stroke)
|
|
15
|
+
- Alignment and spacing rules
|
|
16
|
+
- Export settings
|
|
17
|
+
|
|
18
|
+
Throughout:
|
|
19
|
+
|
|
20
|
+
- Use exact values from the spec
|
|
21
|
+
- Do not restate design rationale
|
|
22
|
+
- Use Title Case for all layer and frame names
|
|
23
|
+
- Use Figma terminology throughout, not code or CSS equivalents
|
|
24
|
+
- Reuse existing frames or components from the same Figma document by name instead of rebuilding from scratch
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Apply senior-level judgment. Pick the best option from the discussion so far. State the pick in one sentence, then the reason and the main tradeoff in one or two sentences.
|
|
2
|
+
|
|
3
|
+
- Minimal and necessary only
|
|
4
|
+
- No nice-to-haves
|
|
5
|
+
- No padding
|
|
6
|
+
- No alternatives unless they change the recommendation
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Turn the idea below into a production-grade system prompt.
|
|
2
|
+
|
|
3
|
+
Give it a role of one to three lines, a constraints section, and an output format carrying a template plus one worked example. Add a validation checklist when the prompt involves multi-step logic, edge cases, or error handling. Omit that checklist for a single-purpose prompt.
|
|
4
|
+
|
|
5
|
+
Group constraints under domain headings when they span two or more domains and total five or more. Use flat must-do and must-not-do lists otherwise. Keep dos and don'ts together under the topic they belong to.
|
|
6
|
+
|
|
7
|
+
Use `{{DOUBLE_BRACES}}` for values the end user fills in at runtime.
|
|
8
|
+
|
|
9
|
+
Constraints:
|
|
10
|
+
|
|
11
|
+
- Use imperative voice. Write `Do X`, never `You should` or `Try to`.
|
|
12
|
+
- Make every constraint verifiable from the output. Reject subjective qualifiers like `appropriate`, `concise`, or `well-structured`.
|
|
13
|
+
- Match prompt length to task complexity. A single-purpose task gets a minimal prompt.
|
|
14
|
+
- Never write `maybe`, `consider`, or `depending on`. Be definitive.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Generate a self-contained research prompt for another AI chat. Include:
|
|
2
|
+
|
|
3
|
+
- State what I am trying to do and why
|
|
4
|
+
- List what I have already tried and the results
|
|
5
|
+
- Specify questions that need answers
|
|
6
|
+
|
|
7
|
+
Write it in first person. Assume the reader has no context from this session.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Give me step-by-step instructions.
|
|
2
|
+
|
|
3
|
+
For each step:
|
|
4
|
+
|
|
5
|
+
- State what to do in one sentence.
|
|
6
|
+
- Include the exact value, command, or input where precision matters.
|
|
7
|
+
- Note any output to save or verify before moving on.
|
|
8
|
+
- When the step has multiple sub-actions or lists several items, use nested bullets instead of stacking them in one sentence.
|
|
9
|
+
|
|
10
|
+
Group related steps under a heading if the process has distinct phases. Flag any step that is irreversible or that blocks later steps.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Search the web for the topic or question added after this snippet. Fetch the most relevant pages. Synthesize findings into a decision-ready block using this format:
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
Topic: [what was researched]
|
|
5
|
+
Recommendation: [one clear answer or choice]
|
|
6
|
+
|
|
7
|
+
Options considered:
|
|
8
|
+
|
|
9
|
+
- [Option A]: why considered, why chosen or rejected
|
|
10
|
+
- [Option B]: why considered, why chosen or rejected
|
|
11
|
+
|
|
12
|
+
Key constraints:
|
|
13
|
+
|
|
14
|
+
- [constraint that shaped the decision]
|
|
15
|
+
|
|
16
|
+
Sources:
|
|
17
|
+
|
|
18
|
+
- [URL]: what it confirmed
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Output only the block. Do not add commentary before or after it.
|