@erclx/canon 5.31.0 → 5.33.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/README.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/references/adopted.md +1 -1
- package/claude/skills/auto-ship/REQUIREMENT.md +4 -16
- package/claude/skills/auto-ship/SKILL.md +13 -58
- package/claude/skills/auto-ship/references/draft-mark.md +2 -2
- package/claude/skills/auto-ship/references/failure-recovery.md +1 -5
- package/claude/skills/auto-ship/references/tier-failures.md +1 -1
- package/claude/skills/auto-ship/references/ui-checklist.md +2 -2
- package/claude/skills/auto-ship/references/verb-absent.md +3 -27
- package/claude/skills/auto-ship/references/worktree-name.md +1 -1
- package/claude/skills/backlog-triage/REQUIREMENT.md +2 -2
- package/claude/skills/backlog-triage/SKILL.md +2 -2
- package/claude/skills/canon-cli/REQUIREMENT.md +19 -18
- package/claude/skills/canon-cli/SKILL.md +75 -32
- package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback/SKILL.md +11 -14
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +13 -14
- package/claude/skills/canon-feedback-triage/SKILL.md +49 -30
- package/claude/skills/{canvas → canvas-board}/REQUIREMENT.md +5 -6
- package/claude/skills/{canvas → canvas-board}/SKILL.md +7 -7
- package/{standards → claude/skills/canvas-board/references}/canvas.md +12 -1
- package/{standards → claude/skills/canvas-board/references}/design.md +13 -5
- package/claude/skills/ci-workflow/REQUIREMENT.md +0 -1
- package/claude/skills/context-fold/REQUIREMENT.md +28 -48
- package/claude/skills/context-fold/SKILL.md +26 -95
- package/claude/skills/context-fold/references/classify.md +7 -8
- package/claude/skills/context-fold/references/completion-report.md +4 -8
- package/claude/skills/context-fold/references/context-refresh.md +7 -17
- package/{standards → claude/skills/context-fold/references}/context.md +19 -10
- package/claude/skills/context-fold/references/unusable-baseline.md +4 -8
- package/claude/skills/create-rule/REQUIREMENT.md +0 -1
- package/claude/skills/create-rule/SKILL.md +2 -2
- package/{standards → claude/skills/create-rule/references}/rule.md +12 -5
- package/claude/skills/create-skill/REQUIREMENT.md +6 -4
- package/claude/skills/create-skill/SKILL.md +10 -9
- package/{standards → claude/skills/create-skill/references}/skill-paths.md +1 -0
- package/{standards → claude/skills/create-skill/references}/skill.md +18 -15
- package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
- package/claude/skills/decision-escalate/SKILL.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +3 -5
- package/claude/skills/design-taste/SKILL.md +2 -4
- package/claude/skills/design-taste/references/vocabulary.md +1 -1
- package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
- package/claude/skills/docs-sync/SKILL.md +3 -3
- package/{standards → claude/skills/docs-sync/references}/docs.md +11 -0
- package/{standards → claude/skills/docs-sync/references}/readme.md +9 -2
- package/claude/skills/document-health/REQUIREMENT.md +2 -2
- package/claude/skills/document-health/SKILL.md +4 -5
- package/claude/skills/document-health/references/axes.md +4 -6
- package/claude/skills/draft-and-pick/REQUIREMENT.md +16 -14
- package/claude/skills/draft-and-pick/SKILL.md +40 -32
- package/claude/skills/draft-and-pick/references/live-arms.md +9 -9
- package/claude/skills/draft-doc/REQUIREMENT.md +5 -5
- package/claude/skills/draft-doc/SKILL.md +9 -10
- package/claude/skills/draft-doc/references/requirements.md +61 -0
- package/claude/skills/draft-doc/references/wiki-kind.md +53 -0
- package/claude/skills/draft-doc/references/wiki.md +50 -30
- package/claude/skills/draft-figure/REQUIREMENT.md +2 -2
- package/claude/skills/draft-figure/SKILL.md +5 -5
- package/claude/skills/draft-figure/references/architecture-set.md +4 -4
- package/claude/skills/draft-figure/references/hand-drawn.md +2 -2
- package/claude/skills/draft-figure/references/mermaid-path.md +55 -0
- package/claude/skills/draft-figure/references/mermaid.md +43 -34
- package/claude/skills/draft-identity/REQUIREMENT.md +3 -3
- package/claude/skills/draft-identity/SKILL.md +10 -8
- package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
- package/claude/skills/draft-ready/SKILL.md +7 -7
- package/claude/skills/draft-ready/references/assembly.md +1 -1
- package/{standards → claude/skills/draft-ready/references}/ready.md +13 -5
- package/claude/skills/git-branch/SKILL.md +1 -1
- package/{standards → claude/skills/git-branch/references}/branch.md +1 -1
- package/claude/skills/git-commit/SKILL.md +2 -2
- package/claude/skills/git-followup/REQUIREMENT.md +1 -1
- package/claude/skills/git-followup/SKILL.md +1 -1
- package/claude/skills/git-issue/SKILL.md +1 -1
- package/claude/skills/git-issue/references/issue.md +3 -3
- package/claude/skills/git-pr/SKILL.md +13 -13
- package/claude/skills/git-pr/references/evidence.md +2 -2
- package/claude/skills/git-pr/references/final-command.md +38 -14
- package/claude/skills/git-pr/references/labels.md +5 -1
- package/{standards → claude/skills/git-pr/references}/pr.md +19 -9
- package/{standards → claude/skills/git-pr/references}/publish.md +5 -3
- package/claude/skills/git-pr/references/task-number.md +1 -1
- package/claude/skills/git-ship/REQUIREMENT.md +0 -2
- package/claude/skills/git-ship/SKILL.md +5 -12
- package/claude/skills/git-split/SKILL.md +3 -3
- package/claude/skills/git-stage/SKILL.md +1 -1
- package/claude/skills/plan-feature/REQUIREMENT.md +1 -1
- package/claude/skills/plan-feature/SKILL.md +2 -6
- package/{standards → claude/skills/plan-feature/references}/plan.md +9 -10
- package/claude/skills/plan-groundwork/SKILL.md +5 -6
- package/{standards → claude/skills/plan-groundwork/references}/groundwork.md +17 -4
- package/claude/skills/plan-intake/SKILL.md +2 -3
- package/{standards → claude/skills/plan-intake/references}/intake.md +17 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
- package/claude/skills/plan-intake-answer/SKILL.md +1 -1
- package/claude/skills/review-address/SKILL.md +2 -2
- package/claude/skills/review-address/references/post-review-findings.md +1 -1
- package/claude/skills/review-craft/REQUIREMENT.md +3 -3
- package/claude/skills/review-craft/SKILL.md +2 -2
- package/claude/skills/review-craft/references/ui.md +4 -4
- package/claude/skills/review-pr/REQUIREMENT.md +2 -2
- package/claude/skills/review-pr/SKILL.md +8 -10
- package/claude/skills/review-pr/references/body-variants.md +2 -2
- package/claude/skills/review-pr/references/key-changes.md +3 -3
- package/claude/skills/review-pr/references/post.md +4 -2
- package/claude/skills/review-ui/REQUIREMENT.md +1 -2
- package/claude/skills/review-ui/SKILL.md +2 -2
- package/claude/skills/review-ui/references/post.md +1 -1
- package/claude/skills/role-orchestrator/REQUIREMENT.md +3 -3
- package/claude/skills/role-orchestrator/SKILL.md +10 -10
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +3 -3
- package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +9 -9
- package/claude/skills/role-orchestrator/references/orchestrator-launch.md +23 -1
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +2 -5
- package/claude/skills/role-orchestrator/references/orchestrator-resume.md +4 -1
- package/claude/skills/role-planner/REQUIREMENT.md +2 -1
- package/claude/skills/role-planner/SKILL.md +15 -4
- package/claude/skills/role-reviewer/SKILL.md +2 -2
- package/claude/skills/role-worker/REQUIREMENT.md +1 -0
- package/claude/skills/role-worker/SKILL.md +11 -3
- package/claude/skills/session-compact/REQUIREMENT.md +1 -4
- package/claude/skills/session-compact/SKILL.md +3 -13
- package/claude/skills/session-compact/references/handoff-note.md +2 -2
- package/claude/skills/session-map/REQUIREMENT.md +1 -9
- package/claude/skills/session-map/SKILL.md +9 -17
- package/{standards → claude/skills/session-map/references}/session.md +17 -11
- package/claude/skills/session-relay/REQUIREMENT.md +1 -1
- package/claude/skills/session-resume/REQUIREMENT.md +6 -8
- package/claude/skills/session-resume/SKILL.md +3 -9
- package/claude/skills/session-worktree/SKILL.md +6 -6
- package/claude/skills/session-worktree/references/main-root-writes.md +2 -2
- package/claude/skills/systematic-debugging/REQUIREMENT.md +0 -1
- package/claude/skills/target-check/REQUIREMENT.md +3 -3
- package/claude/skills/target-check/SKILL.md +1 -1
- package/claude/skills/target-check/references/domains.md +1 -1
- package/claude/skills/target-setup/REQUIREMENT.md +4 -4
- package/claude/skills/target-setup/SKILL.md +3 -3
- package/claude/skills/target-setup/references/detect.md +2 -2
- package/claude/skills/task-board/REQUIREMENT.md +7 -12
- package/claude/skills/task-board/SKILL.md +9 -21
- package/{standards → claude/skills/task-board/references}/board.md +9 -0
- package/claude/skills/task-board/references/decline.md +1 -1
- package/{standards → claude/skills/task-board/references}/tasks.md +15 -10
- package/claude/skills/task-complete/REQUIREMENT.md +47 -0
- package/claude/skills/task-complete/SKILL.md +86 -0
- package/claude/skills/{task-board → task-complete}/references/archive.md +5 -5
- package/claude/skills/task-complete/references/receipt-sweep.md +32 -0
- package/claude/skills/task-complete/references/unusable-baseline.md +19 -0
- package/claude/skills/teach-workspace/REQUIREMENT.md +6 -2
- package/claude/skills/teach-workspace/SKILL.md +9 -5
- package/claude/skills/teach-workspace/references/lesson-craft.md +1 -1
- package/claude/skills/teach-workspace/references/promotion-fold.md +29 -0
- package/claude/skills/teach-workspace/references/promotion.md +3 -3
- package/claude/skills/teach-workspace/references/revisit.md +1 -1
- package/{standards → claude/skills/teach-workspace/references}/teach.md +17 -5
- package/claude/skills/ui-checklist/SKILL.md +1 -1
- package/claude/skills/ux-audit/REQUIREMENT.md +2 -2
- package/claude/skills/ux-audit/SKILL.md +3 -4
- package/claude/skills/ux-measure/SKILL.md +1 -1
- package/claude/skills/write-human/REQUIREMENT.md +0 -1
- package/claude/skills/write-human/SKILL.md +1 -1
- package/docs/agents/audits.md +1 -1
- package/docs/agents/canvas.md +1 -1
- package/docs/agents/commands.md +4 -8
- package/docs/agents/context-audit-checks.md +11 -25
- package/docs/agents/context-audit.md +7 -15
- package/docs/agents/context-classify.md +5 -5
- package/docs/agents/counts.md +5 -5
- package/docs/agents/drift-surfaces.md +2 -2
- package/docs/agents/index.md +5 -7
- package/docs/agents/indexes.md +1 -1
- package/docs/agents/install-and-sync.md +6 -11
- package/docs/agents/intake.md +1 -1
- package/docs/agents/key-changes.md +5 -5
- package/docs/agents/label-coverage.md +11 -0
- package/docs/agents/migrate.md +1 -1
- package/docs/agents/records-push.md +2 -2
- package/docs/agents/records-stale.md +13 -48
- package/docs/agents/records-validate.md +4 -8
- package/docs/agents/records.md +6 -28
- package/docs/agents/restated.md +1 -1
- package/docs/agents/rule-citations.md +2 -2
- package/docs/agents/sandbox.md +4 -4
- package/docs/agents/skills-audit.md +2 -2
- package/docs/agents/state-scoped-risk.md +2 -2
- package/docs/agents/superseded.md +2 -2
- package/docs/agents/tasks-plans.md +1 -1
- package/docs/agents/tasks-validate.md +1 -1
- package/docs/agents/tasks.md +3 -3
- package/docs/agents/teach.md +1 -1
- package/docs/agents/upstream.md +26 -2
- package/docs/target/migrations.md +32 -0
- package/docs/target/projects.md +5 -7
- package/docs/target/scenarios.md +2 -2
- package/docs/target/sync.md +4 -4
- package/docs/workflow/ai-workflow.md +7 -38
- package/docs/workflow/index.md +1 -1
- package/docs/workflow/operating-model.md +10 -10
- package/docs/workflow/parallel-features.md +12 -12
- package/docs/workflow/skill-map-on-request.md +21 -24
- package/docs/workflow/skill-map.md +23 -34
- package/docs/workflow/visual-design-workflow.md +13 -16
- package/governance/renames.toml +0 -30
- package/governance/rules/canon/605-worktrees.md +1 -1
- package/governance/rules/canon/context.md +13 -0
- package/governance/rules/{standards → canon}/plan.md +4 -5
- package/governance/rules/canon/tasks.md +18 -0
- package/governance/rules/claude/skill.md +17 -0
- package/governance/stacks/base.toml +2 -4
- package/package.json +4 -4
- package/scripts/core/install-check.sh +4 -4
- package/scripts/core/regen-web-previews.ts +1 -1
- package/scripts/lib/ui.sh +0 -159
- package/src/audits/catalog.ts +5 -98
- package/src/claude/cases/authoring.ts +0 -18
- package/src/claude/cases/misc.ts +1 -14
- package/src/claude/cases/setup.ts +7 -20
- package/src/claude/cases/workflow.ts +6 -34
- package/src/claude/seeds.ts +1 -7
- package/src/claude/skills-audit.ts +3 -3
- package/src/cli/help.ts +4 -5
- package/src/cli/ui.ts +2 -3
- package/src/cli.ts +0 -4
- package/src/commands/claude.ts +9 -15
- package/src/commands/context.ts +18 -280
- package/src/commands/feedback.ts +22 -91
- package/src/commands/gov.ts +2 -15
- package/src/commands/labels.ts +326 -7
- package/src/commands/migrate.ts +6 -1
- package/src/commands/pr.ts +1 -1
- package/src/commands/records.ts +17 -403
- package/src/commands/sandbox.ts +3 -6
- package/src/commands/sync.ts +5 -3
- package/src/commands/tasks.ts +3 -3
- package/src/commands/upstream.ts +135 -0
- package/src/context/audit.ts +10 -19
- package/src/context/classify/extract.ts +6 -13
- package/src/context/classify/patterns.ts +2 -41
- package/src/context/classify/prompts.ts +2 -6
- package/src/context/classify/run.ts +3 -3
- package/src/context/folders.ts +8 -13
- package/src/context/gate.ts +11 -91
- package/src/context/requirements.ts +13 -4
- package/src/counts/scan.ts +3 -3
- package/src/design/budget.ts +1 -1
- package/src/design/components.ts +3 -3
- package/src/design/document.ts +1 -1
- package/src/design/regen.ts +1 -1
- package/src/design/render.ts +1 -1
- package/src/feedback/body.ts +0 -12
- package/src/gate/measures.ts +7 -58
- package/src/gate/sequencer.ts +56 -1
- package/src/gate/stages.ts +1 -7
- package/src/gov/citations.ts +9 -3
- package/src/gov/install.ts +2 -3
- package/src/gov/restated.ts +3 -3
- package/src/gov/stacks.ts +1 -1
- package/src/hooks/post-merge.ts +1 -1
- package/src/labels/apply.ts +39 -0
- package/src/labels/format.ts +3 -3
- package/src/labels/phase.ts +3 -3
- package/src/labels/sections.ts +43 -0
- package/src/markdown/structure.ts +2 -2
- package/src/migrate/record-layout.ts +3 -3
- package/src/migrate/skill-names.ts +20 -1
- package/src/pr/paths.ts +4 -4
- package/src/records/backup.ts +16 -6
- package/src/records/ordinal.ts +1 -1
- package/src/records/prune.ts +2 -1
- package/src/records/stale-canonical.ts +33 -3
- package/src/records/validate.ts +2 -188
- package/src/roots/record.ts +1 -1
- package/src/sandbox/census.ts +1 -1
- package/src/sandbox/coverage.ts +2 -6
- package/src/sandbox/equivalence.ts +5 -44
- package/src/sandbox/expect.ts +4 -4
- package/src/sandbox/provision.ts +13 -36
- package/src/sandbox/scenario.ts +137 -55
- package/src/sandbox/tree.ts +2 -6
- package/src/shipped/references.ts +3 -3
- package/src/standards/read.ts +44 -0
- package/src/sync/git.ts +1 -1
- package/src/sync/seeds-report.ts +1 -1
- package/src/tasks/archive.ts +5 -5
- package/src/tasks/branch.ts +3 -3
- package/src/tasks/label.ts +1 -1
- package/src/tasks/reach.ts +2 -2
- package/src/tasks/record.ts +2 -2
- package/src/tasks/validate.ts +2 -2
- package/src/teach/workspace.ts +1 -1
- package/src/upstream/cursor.ts +1 -1
- package/src/upstream/due.ts +128 -0
- package/src/upstream/releases.ts +2 -1
- package/standards/index.md +0 -35
- package/standards/standard.md +1 -7
- package/tooling/base/reference.md +2 -2
- package/tooling/base/seeds/.github/pull_request_template.md +2 -2
- package/tooling/claude/reference.md +7 -21
- package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +9 -1
- package/tooling/claude/seeds/.claude/hooks/records-index.sh +8 -20
- package/tooling/claude/seeds/.claude/hooks/review-post-scan.sh +171 -0
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +3 -3
- package/tooling/claude/seeds/.claude/settings.json +9 -0
- package/tooling/claude/seeds/CLAUDE.md +1 -3
- package/tooling/claude/seeds/canon/REQUIREMENTS.md +2 -9
- package/tooling/web/configs/e2e/screenshot.ts +0 -1
- package/claude/skills/auto-ship/references/review-findings.md +0 -20
- package/claude/skills/bash-cli-script/REQUIREMENT.md +0 -43
- package/claude/skills/bash-cli-script/SKILL.md +0 -53
- package/claude/skills/bash-cli-script/references/template.md +0 -19
- package/claude/skills/canon-operator/REQUIREMENT.md +0 -62
- package/claude/skills/canon-operator/SKILL.md +0 -113
- package/claude/skills/canon-rollout/REQUIREMENT.md +0 -59
- package/claude/skills/canon-rollout/SKILL.md +0 -140
- package/claude/skills/canon-rollout/references/failure-recovery.md +0 -20
- package/claude/skills/context-fold/references/anchor-sweep.md +0 -58
- package/claude/skills/context-fold/references/promoted-pages.md +0 -29
- package/claude/skills/context-fold/references/receipt-sweep.md +0 -43
- package/claude/skills/context-fold/references/wireframe-sweep.md +0 -45
- package/claude/skills/create-standard/REQUIREMENT.md +0 -33
- package/claude/skills/create-standard/SKILL.md +0 -31
- package/claude/skills/design-extract/REQUIREMENT.md +0 -42
- package/claude/skills/design-extract/SKILL.md +0 -108
- package/claude/skills/draft-and-pick/references/frame.html +0 -118
- package/claude/skills/draft-doc/references/wireframes.md +0 -48
- package/claude/skills/markdown-propose/REQUIREMENT.md +0 -47
- package/claude/skills/markdown-propose/SKILL.md +0 -122
- package/claude/skills/markdown-propose/references/format.md +0 -118
- package/claude/skills/memory-capture/REQUIREMENT.md +0 -50
- package/claude/skills/memory-capture/SKILL.md +0 -117
- package/claude/skills/memory-review/REQUIREMENT.md +0 -52
- package/claude/skills/memory-review/SKILL.md +0 -129
- package/claude/skills/memory-review/references/later-phases.md +0 -118
- package/claude/skills/memory-review/references/receipt-format.md +0 -64
- package/claude/skills/project-commands/REQUIREMENT.md +0 -42
- package/claude/skills/project-commands/SKILL.md +0 -87
- package/claude/skills/repo-metadata/REQUIREMENT.md +0 -37
- package/claude/skills/repo-metadata/SKILL.md +0 -54
- package/claude/skills/restate-plainly/REQUIREMENT.md +0 -41
- package/claude/skills/restate-plainly/SKILL.md +0 -41
- package/claude/skills/review-branch/REQUIREMENT.md +0 -40
- package/claude/skills/review-branch/SKILL.md +0 -137
- package/claude/skills/seed-sync/REQUIREMENT.md +0 -45
- package/claude/skills/seed-sync/SKILL.md +0 -158
- package/claude/skills/sketch-design/REQUIREMENT.md +0 -38
- package/claude/skills/sketch-design/SKILL.md +0 -94
- package/claude/skills/ux-walkthrough/REQUIREMENT.md +0 -56
- package/claude/skills/ux-walkthrough/SKILL.md +0 -53
- package/claude/skills/ux-walkthrough/references/builds.md +0 -15
- package/claude/skills/ux-walkthrough/references/candidate-pages.md +0 -11
- package/claude/skills/ux-walkthrough/references/measuring.md +0 -22
- package/claude/skills/ux-walkthrough/references/record.md +0 -36
- package/claude/skills/ux-walkthrough/references/relay.md +0 -25
- package/docs/agents/architecture-record.md +0 -36
- package/docs/agents/review-classification.md +0 -76
- package/governance/rules/canon/603-memory.md +0 -11
- package/governance/rules/lang/120-bash.md +0 -18
- package/governance/rules/standards/architecture.md +0 -13
- package/governance/rules/standards/context.md +0 -14
- package/governance/rules/standards/design.md +0 -12
- package/governance/rules/standards/groundwork.md +0 -13
- package/governance/rules/standards/intake.md +0 -12
- package/governance/rules/standards/memory.md +0 -12
- package/governance/rules/standards/readme.md +0 -12
- package/governance/rules/standards/ready.md +0 -13
- package/governance/rules/standards/requirements.md +0 -12
- package/governance/rules/standards/rule.md +0 -13
- package/governance/rules/standards/session.md +0 -13
- package/governance/rules/standards/skill.md +0 -21
- package/governance/rules/standards/standard.md +0 -13
- package/governance/rules/standards/tasks.md +0 -15
- package/governance/rules/standards/teach.md +0 -14
- package/governance/rules/standards/wiki.md +0 -13
- package/governance/rules/standards/wireframes.md +0 -13
- package/scripts/config.sh +0 -11
- package/scripts/lib/gov.sh +0 -14
- package/scripts/lib/sandbox-fixtures.sh +0 -191
- package/scripts/lib/sandbox-git.sh +0 -125
- package/scripts/lib/sandbox-path.sh +0 -50
- package/scripts/sandbox-hook.sh +0 -99
- package/src/autoship/classify.ts +0 -75
- package/src/autoship/paths.ts +0 -50
- package/src/commands/autoship.ts +0 -129
- package/src/commands/repo.ts +0 -393
- package/src/context/architecture.ts +0 -654
- package/src/context/wireframe-states.ts +0 -238
- package/src/gov/standard-rules.ts +0 -179
- package/src/records/migrate.ts +0 -78
- package/src/records/stale.ts +0 -243
- package/src/repo/metadata.ts +0 -206
- package/src/sandbox/hooks.ts +0 -128
- package/standards/architecture.md +0 -127
- package/standards/memory.md +0 -158
- package/standards/mermaid.md +0 -64
- package/standards/requirements.md +0 -79
- package/standards/wiki.md +0 -77
- package/standards/wireframes.md +0 -143
- package/tooling/claude/seeds/.claude/memory/index.md +0 -8
- package/tooling/claude/seeds/canon/ARCHITECTURE.md +0 -23
- package/tooling/claude/seeds/canon/wireframes/index.md +0 -8
- /package/{standards → claude/skills/create-skill/references}/skill-practice.md +0 -0
- /package/{standards → claude/skills/create-skill/references}/skill-requirement.md +0 -0
- /package/{standards → claude/skills/draft-figure/references}/figures.md +0 -0
- /package/{standards → claude/skills/git-branch/references}/slug.md +0 -0
- /package/{standards → claude/skills/git-commit/references}/commit.md +0 -0
- /package/{standards → claude/skills/git-commit/references}/versioning.md +0 -0
- /package/{standards → claude/skills/plan-feature/references}/plan-lifecycle.md +0 -0
- /package/{standards → claude/skills/plan-groundwork/references}/groundwork-spikes.md +0 -0
- /package/{standards → claude/skills/task-board/references}/tasks-decline.md +0 -0
- /package/{standards → claude/skills/teach-workspace/references}/glossary.md +0 -0
package/scripts/lib/ui.sh
CHANGED
|
@@ -6,12 +6,6 @@ if [ "${BASH_VERSINFO[0]:-0}" -lt 4 ]; then
|
|
|
6
6
|
exit 1
|
|
7
7
|
fi
|
|
8
8
|
|
|
9
|
-
# Resolved from this file's own location rather than `$PROJECT_ROOT`, because
|
|
10
|
-
# `require_project_root` is what several scripts call before anything has
|
|
11
|
-
# established a root.
|
|
12
|
-
# shellcheck source=/dev/null
|
|
13
|
-
source "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")/sandbox-path.sh"
|
|
14
|
-
|
|
15
9
|
# `NO_COLOR` follows the published convention, where any non-empty value turns
|
|
16
10
|
# color off whatever the value says.
|
|
17
11
|
supports_color() {
|
|
@@ -111,156 +105,3 @@ guard_root() {
|
|
|
111
105
|
log_error "Cannot run against toolkit root. Files here are the source of truth."
|
|
112
106
|
fi
|
|
113
107
|
}
|
|
114
|
-
|
|
115
|
-
require_project_root() {
|
|
116
|
-
local GREEN RED YELLOW WHITE GREY NC
|
|
117
|
-
set_palette 2
|
|
118
|
-
local sandbox in_sandbox=0
|
|
119
|
-
if [ -n "${CANON_SANDBOX_DIR:-}" ]; then
|
|
120
|
-
sandbox="$CANON_SANDBOX_DIR"
|
|
121
|
-
[[ "$PWD" == "$sandbox" || "$PWD" == "$sandbox"/* ]] && in_sandbox=1
|
|
122
|
-
else
|
|
123
|
-
sandbox="$(sandbox_dir_prefix)"
|
|
124
|
-
[[ "$PWD" == "$sandbox" || "$PWD" == "$sandbox"/* || "$PWD" == "$sandbox"-* ]] && in_sandbox=1
|
|
125
|
-
fi
|
|
126
|
-
if [ "$in_sandbox" -eq 1 ]; then
|
|
127
|
-
echo -e "${GREY}┌${NC}" >&2
|
|
128
|
-
log_error "Execution restricted: Command cannot be run from inside the sandbox environment."
|
|
129
|
-
fi
|
|
130
|
-
if [[ "$PWD" != "$PROJECT_ROOT"* ]]; then
|
|
131
|
-
echo -e "${GREY}┌${NC}" >&2
|
|
132
|
-
log_error "Context Error: You must run this command from inside the repository."
|
|
133
|
-
fi
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
# The retired spelling stays honored, and permanently. This variable is the
|
|
137
|
-
# documented way to drive any command headlessly, so every skill body, CI job,
|
|
138
|
-
# and operator script already written sets the old name, and those callers live
|
|
139
|
-
# in repositories and plugin caches this release cannot reach. Dropping it
|
|
140
|
-
# leaves them waiting on a TTY nobody is watching.
|
|
141
|
-
is_non_interactive() {
|
|
142
|
-
# canon-keep-retired
|
|
143
|
-
[[ "${CANON_NON_INTERACTIVE:-}" == "1" || "${AITK_NON_INTERACTIVE:-}" == "1" ]]
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
ask() {
|
|
147
|
-
local GREEN RED YELLOW WHITE GREY NC
|
|
148
|
-
set_palette 2
|
|
149
|
-
local prompt_text=$1
|
|
150
|
-
local var_name=$2
|
|
151
|
-
local default_val=$3
|
|
152
|
-
local input=""
|
|
153
|
-
local char
|
|
154
|
-
local display_default=""
|
|
155
|
-
if [ -n "$default_val" ]; then
|
|
156
|
-
display_default=" (${default_val})"
|
|
157
|
-
fi
|
|
158
|
-
if is_non_interactive; then
|
|
159
|
-
echo -e "${GREY}│${NC}" >&2
|
|
160
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${default_val}${NC}" >&2
|
|
161
|
-
export "$var_name"="$default_val"
|
|
162
|
-
return
|
|
163
|
-
fi
|
|
164
|
-
echo -e "${GREY}│${NC}" >&2
|
|
165
|
-
echo -ne "${GREEN}◆${NC} ${prompt_text}${display_default} " >&2
|
|
166
|
-
while IFS= read -r -s -n1 char; do
|
|
167
|
-
if [[ $char == $'\x1b' ]]; then
|
|
168
|
-
read -rsn2 -t 0.001 _ || true
|
|
169
|
-
echo -ne "\r\033[K" >&2
|
|
170
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
|
|
171
|
-
exit 1
|
|
172
|
-
elif [[ $char == $'\x7f' || $char == $'\x08' ]]; then
|
|
173
|
-
if [ -n "$input" ]; then
|
|
174
|
-
input="${input%?}"
|
|
175
|
-
echo -ne "\b \b" >&2
|
|
176
|
-
fi
|
|
177
|
-
elif [[ -z "$char" ]]; then
|
|
178
|
-
break
|
|
179
|
-
else
|
|
180
|
-
input+="$char"
|
|
181
|
-
echo -n "$char" >&2
|
|
182
|
-
fi
|
|
183
|
-
done
|
|
184
|
-
[ -z "$input" ] && input="$default_val"
|
|
185
|
-
echo -ne "\r\033[K" >&2
|
|
186
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${input}${NC}" >&2
|
|
187
|
-
export "$var_name"="$input"
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
select_or_route_scenario() {
|
|
191
|
-
local GREEN RED YELLOW WHITE GREY NC
|
|
192
|
-
set_palette 2
|
|
193
|
-
local prompt_text=$1
|
|
194
|
-
shift
|
|
195
|
-
local options=("$@")
|
|
196
|
-
|
|
197
|
-
if [ -n "${SANDBOX_SCENARIO:-}" ]; then
|
|
198
|
-
echo -e "${GREY}│${NC}" >&2
|
|
199
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${SANDBOX_SCENARIO}${NC}" >&2
|
|
200
|
-
export SELECTED_OPTION="$SANDBOX_SCENARIO"
|
|
201
|
-
return
|
|
202
|
-
fi
|
|
203
|
-
|
|
204
|
-
select_option "$prompt_text" "${options[@]}"
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
select_option() {
|
|
208
|
-
local GREEN RED YELLOW WHITE GREY NC
|
|
209
|
-
set_palette 2
|
|
210
|
-
local prompt_text=$1
|
|
211
|
-
shift
|
|
212
|
-
local options=("$@")
|
|
213
|
-
local cur=0
|
|
214
|
-
local count=${#options[@]}
|
|
215
|
-
|
|
216
|
-
if is_non_interactive; then
|
|
217
|
-
echo -e "${GREY}│${NC}" >&2
|
|
218
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${options[0]}${NC}" >&2
|
|
219
|
-
export SELECTED_OPTION="${options[0]}"
|
|
220
|
-
return
|
|
221
|
-
fi
|
|
222
|
-
|
|
223
|
-
if [ ! -t 0 ]; then
|
|
224
|
-
log_error "${prompt_text} requires a TTY. Pass an argument or set CANON_NON_INTERACTIVE=1."
|
|
225
|
-
fi
|
|
226
|
-
|
|
227
|
-
echo -e "${GREY}│${NC}" >&2
|
|
228
|
-
echo -ne "${GREEN}◆${NC} ${prompt_text}\n" >&2
|
|
229
|
-
|
|
230
|
-
while true; do
|
|
231
|
-
for i in "${!options[@]}"; do
|
|
232
|
-
if [ "$i" -eq "$cur" ]; then
|
|
233
|
-
echo -e "${GREY}│${NC} ${GREEN}❯ ${options[$i]}${NC}" >&2
|
|
234
|
-
else
|
|
235
|
-
echo -e "${GREY}│${NC} ${GREY}${options[$i]}${NC}" >&2
|
|
236
|
-
fi
|
|
237
|
-
done
|
|
238
|
-
|
|
239
|
-
read -rsn1 key
|
|
240
|
-
case "$key" in
|
|
241
|
-
$'\x1b')
|
|
242
|
-
if read -rsn2 -t 0.001 key_seq; then
|
|
243
|
-
if [[ "$key_seq" == "[A" ]]; then cur=$(((cur - 1 + count) % count)); fi
|
|
244
|
-
if [[ "$key_seq" == "[B" ]]; then cur=$(((cur + 1) % count)); fi
|
|
245
|
-
else
|
|
246
|
-
echo -ne "\033[$((count + 1))A\033[J" >&2
|
|
247
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
|
|
248
|
-
exit 1
|
|
249
|
-
fi
|
|
250
|
-
;;
|
|
251
|
-
"k") cur=$(((cur - 1 + count) % count)) ;;
|
|
252
|
-
"j") cur=$(((cur + 1) % count)) ;;
|
|
253
|
-
"q")
|
|
254
|
-
echo -ne "\033[$((count + 1))A\033[J" >&2
|
|
255
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${RED}Cancelled${NC}" >&2
|
|
256
|
-
exit 1
|
|
257
|
-
;;
|
|
258
|
-
"") break ;;
|
|
259
|
-
esac
|
|
260
|
-
echo -ne "\033[${count}A" >&2
|
|
261
|
-
done
|
|
262
|
-
|
|
263
|
-
echo -ne "\033[$((count + 1))A\033[J" >&2
|
|
264
|
-
echo -e "${GREY}◇${NC} ${prompt_text} ${WHITE}${options[$cur]}${NC}" >&2
|
|
265
|
-
export SELECTED_OPTION="${options[$cur]}"
|
|
266
|
-
}
|
package/src/audits/catalog.ts
CHANGED
|
@@ -139,100 +139,12 @@ function allOf(
|
|
|
139
139
|
return counts
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
/**
|
|
143
|
-
* Reads the architecture record's measures, or nothing when the project
|
|
144
|
-
* carries no record.
|
|
145
|
-
*
|
|
146
|
-
* Three states rather than two, matching what the verb publishes. The key
|
|
147
|
-
* absent is a run that never opened the record, which the aggregate never asks
|
|
148
|
-
* for and so reads as a shape that moved. Null is a project entitled to carry
|
|
149
|
-
* no record, whose other context counts still stand, so it contributes no key
|
|
150
|
-
* rather than a zero that would read as a conforming record.
|
|
151
|
-
*/
|
|
152
|
-
function architectureCounts(
|
|
153
|
-
root: Record<string, unknown>,
|
|
154
|
-
): Record<string, number> | undefined | 'absent' {
|
|
155
|
-
if (!('architecture' in root)) return undefined
|
|
156
|
-
if (root.architecture === null) return 'absent'
|
|
157
|
-
|
|
158
|
-
const record = asObject(root.architecture)
|
|
159
|
-
const decisions = record?.decisions
|
|
160
|
-
if (
|
|
161
|
-
record === undefined ||
|
|
162
|
-
!Array.isArray(decisions) ||
|
|
163
|
-
typeof record.lines !== 'number'
|
|
164
|
-
) {
|
|
165
|
-
return undefined
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// A record stating no length rule has no ceiling to be past, and reporting
|
|
169
|
-
// zero there would read as one measured and found conforming.
|
|
170
|
-
const ceiling =
|
|
171
|
-
typeof record.ceiling === 'number' ? record.ceiling : undefined
|
|
172
|
-
const entryCap =
|
|
173
|
-
typeof record.entryCap === 'number' ? record.entryCap : undefined
|
|
174
|
-
|
|
175
|
-
const revisitRequired = record.revisitRequired === true
|
|
176
|
-
const wordCap =
|
|
177
|
-
typeof record.wordCap === 'number' ? record.wordCap : undefined
|
|
178
|
-
const riskCap =
|
|
179
|
-
typeof record.riskCap === 'number' ? record.riskCap : undefined
|
|
180
|
-
const risksBullets =
|
|
181
|
-
typeof record.risksBullets === 'number' ? record.risksBullets : undefined
|
|
182
|
-
|
|
183
|
-
let unverifiable = 0
|
|
184
|
-
let unchecked = 0
|
|
185
|
-
let lackingRevisit = 0
|
|
186
|
-
let overWords = 0
|
|
187
|
-
for (const raw of decisions) {
|
|
188
|
-
const entry = asObject(raw)
|
|
189
|
-
const claim = entry?.claim
|
|
190
|
-
const checks = lengthOf(entry?.checks)
|
|
191
|
-
if (typeof claim !== 'string' || checks === undefined) return undefined
|
|
192
|
-
|
|
193
|
-
if (claim === 'neither') unverifiable += 1
|
|
194
|
-
else if (checks === 0) unchecked += 1
|
|
195
|
-
if (revisitRequired && entry?.revisit !== true) lackingRevisit += 1
|
|
196
|
-
if (
|
|
197
|
-
wordCap !== undefined &&
|
|
198
|
-
typeof entry?.words === 'number' &&
|
|
199
|
-
entry.words > wordCap
|
|
200
|
-
) {
|
|
201
|
-
overWords += 1
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return {
|
|
206
|
-
// A boolean, counted so the aggregate reads it the way it reads every
|
|
207
|
-
// other measure. The verb gates on it separately, and the key is absent
|
|
208
|
-
// rather than zero on a record that declared no ceiling.
|
|
209
|
-
...(ceiling !== undefined && {
|
|
210
|
-
recordOverLength: record.lines > ceiling ? 1 : 0,
|
|
211
|
-
}),
|
|
212
|
-
// Absent on a record stating no entry cap, for the same reason.
|
|
213
|
-
...(entryCap !== undefined && {
|
|
214
|
-
recordOverCount: decisions.length > entryCap ? 1 : 0,
|
|
215
|
-
}),
|
|
216
|
-
// Absent on a record stating no revisit clause, for the same reason.
|
|
217
|
-
...(revisitRequired && { recordMissingRevisit: lackingRevisit }),
|
|
218
|
-
// Absent on a record stating no word cap or no bullet cap, for the same
|
|
219
|
-
// reason, and the bullet key absent too on a record with no Risks section.
|
|
220
|
-
...(wordCap !== undefined && { recordOverWords: overWords }),
|
|
221
|
-
...(riskCap !== undefined &&
|
|
222
|
-
risksBullets !== undefined && {
|
|
223
|
-
recordOverRisks: risksBullets > riskCap ? 1 : 0,
|
|
224
|
-
}),
|
|
225
|
-
recordUnverifiable: unverifiable,
|
|
226
|
-
recordUnchecked: unchecked,
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
142
|
/**
|
|
231
143
|
* Reads the requirements record's one cap, or nothing when the record is
|
|
232
144
|
* absent, states no cap, or the run never opened it.
|
|
233
145
|
*
|
|
234
|
-
* The key is optional
|
|
235
|
-
*
|
|
146
|
+
* The key is optional, so a record from a binary predating it still counts
|
|
147
|
+
* its other findings.
|
|
236
148
|
*/
|
|
237
149
|
function requirementsCounts(
|
|
238
150
|
root: Record<string, unknown>,
|
|
@@ -301,8 +213,6 @@ function contextCounts(record: unknown): Record<string, number> | undefined {
|
|
|
301
213
|
bareReferences += bare
|
|
302
214
|
}
|
|
303
215
|
|
|
304
|
-
const architecture = architectureCounts(root)
|
|
305
|
-
if (architecture === undefined) return undefined
|
|
306
216
|
const requirements = requirementsCounts(root)
|
|
307
217
|
|
|
308
218
|
const counts = allOf({
|
|
@@ -314,9 +224,7 @@ function contextCounts(record: unknown): Record<string, number> | undefined {
|
|
|
314
224
|
})
|
|
315
225
|
|
|
316
226
|
if (counts === undefined) return undefined
|
|
317
|
-
return
|
|
318
|
-
? { ...counts, ...requirements }
|
|
319
|
-
: { ...counts, ...architecture, ...requirements }
|
|
227
|
+
return { ...counts, ...requirements }
|
|
320
228
|
}
|
|
321
229
|
|
|
322
230
|
function markdownCounts(record: unknown): Record<string, number> | undefined {
|
|
@@ -560,7 +468,6 @@ const RECORD_KINDS: readonly (readonly [string, Corpus])[] = [
|
|
|
560
468
|
['plans', 'per-machine'],
|
|
561
469
|
['groundwork', 'per-machine'],
|
|
562
470
|
['intake', 'per-machine'],
|
|
563
|
-
['memory', 'per-machine'],
|
|
564
471
|
['standards', 'tracked'],
|
|
565
472
|
['teach', 'per-machine'],
|
|
566
473
|
]
|
|
@@ -587,8 +494,8 @@ export const AUDITS: readonly AuditSpec[] = [
|
|
|
587
494
|
corpus: 'tracked',
|
|
588
495
|
// The one reason this verb refuses for that is an absence rather than a
|
|
589
496
|
// break, on the same test the reach check and the skill audit take: no
|
|
590
|
-
// target adopts `canon/context
|
|
591
|
-
//
|
|
497
|
+
// target adopts `canon/context/` and an older install's `.canon/diagrams/`
|
|
498
|
+
// both, so without the allowance every such
|
|
592
499
|
// project reports the verb unmeasured on every run and never changes.
|
|
593
500
|
absentReasons: ['no-folders'] satisfies ContextAuditRefusal[],
|
|
594
501
|
counts: contextCounts,
|
|
@@ -10,19 +10,10 @@ export const AUTHORING_CASES: readonly SkillCase[] = [
|
|
|
10
10
|
'Wire up a GitHub Actions pipeline with parallel jobs for this repo.',
|
|
11
11
|
expect: 'ci-workflow',
|
|
12
12
|
},
|
|
13
|
-
{
|
|
14
|
-
prompt:
|
|
15
|
-
'Write me a headless automation script with no interactive prompts.',
|
|
16
|
-
expect: 'bash-cli-script',
|
|
17
|
-
},
|
|
18
13
|
{
|
|
19
14
|
prompt: 'Scaffold a brand-new SKILL.md for this capability.',
|
|
20
15
|
expect: 'create-skill',
|
|
21
16
|
},
|
|
22
|
-
{
|
|
23
|
-
prompt: 'Write a fresh authoring convention as a new standard file.',
|
|
24
|
-
expect: 'create-standard',
|
|
25
|
-
},
|
|
26
17
|
{
|
|
27
18
|
prompt:
|
|
28
19
|
"The docs folder and README are stale against what's on main, refresh them.",
|
|
@@ -47,20 +38,11 @@ export const AUTHORING_CASES: readonly SkillCase[] = [
|
|
|
47
38
|
'Write a context entry for the payments domain, there is no canon/context page for it yet.',
|
|
48
39
|
expect: 'draft-doc',
|
|
49
40
|
},
|
|
50
|
-
{
|
|
51
|
-
prompt:
|
|
52
|
-
'Draft a wireframe for the settings panel, nothing under canon/wireframes covers that surface yet.',
|
|
53
|
-
expect: 'draft-doc',
|
|
54
|
-
},
|
|
55
41
|
{
|
|
56
42
|
prompt:
|
|
57
43
|
'Write a wiki reference page for Claude Code output styles, no page covers that subject yet.',
|
|
58
44
|
expect: 'draft-doc',
|
|
59
45
|
},
|
|
60
|
-
{
|
|
61
|
-
prompt: 'Say what that dense answer actually means in plain terms.',
|
|
62
|
-
expect: 'restate-plainly',
|
|
63
|
-
},
|
|
64
46
|
{
|
|
65
47
|
prompt: 'This passage reads flat and robotic, give it some real cadence.',
|
|
66
48
|
expect: 'write-human',
|
package/src/claude/cases/misc.ts
CHANGED
|
@@ -22,19 +22,10 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
22
22
|
'This project has no logo yet. Draft one and give me a social card to go with it.',
|
|
23
23
|
expect: 'draft-identity',
|
|
24
24
|
},
|
|
25
|
-
{
|
|
26
|
-
prompt:
|
|
27
|
-
"I found two sites whose look I want us to draw from. Put them side by side and let's settle which one the design should follow before anyone writes a token.",
|
|
28
|
-
expect: 'sketch-design',
|
|
29
|
-
},
|
|
30
25
|
{
|
|
31
26
|
prompt:
|
|
32
27
|
'Draw the signup screen as a frame on the canvas, then restyle the element I just selected there.',
|
|
33
|
-
expect: 'canvas',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
prompt: 'Fire up the dev server the way this project documents it.',
|
|
37
|
-
expect: 'project-commands',
|
|
28
|
+
expect: 'canvas-board',
|
|
38
29
|
},
|
|
39
30
|
{
|
|
40
31
|
prompt:
|
|
@@ -104,10 +95,6 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
104
95
|
'The old parseDate helper was replaced months ago. Can I just delete it, or could a few files still be calling it?',
|
|
105
96
|
expect: 'deprecation-migration',
|
|
106
97
|
},
|
|
107
|
-
{
|
|
108
|
-
prompt: 'Does our github about text still match what the readme says?',
|
|
109
|
-
expect: 'repo-metadata',
|
|
110
|
-
},
|
|
111
98
|
{
|
|
112
99
|
prompt: 'Connect this repo to Cloudflare Pages and set up the deploy.',
|
|
113
100
|
expect: 'deploy-app',
|
|
@@ -41,18 +41,14 @@ export const SETUP_CASES: readonly SkillCase[] = [
|
|
|
41
41
|
expect: 'canon-cli',
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
prompt:
|
|
45
|
-
|
|
46
|
-
expect: 'canon-feedback',
|
|
44
|
+
prompt: 'Which canon command tells me if my markdown breaks the rules?',
|
|
45
|
+
expect: 'canon-cli',
|
|
47
46
|
},
|
|
48
47
|
{
|
|
49
48
|
prompt:
|
|
50
|
-
|
|
51
|
-
expect: 'canon-
|
|
49
|
+
'Something about the toolkit itself is broken, write it up and send it back to the maintainers.',
|
|
50
|
+
expect: 'canon-feedback',
|
|
52
51
|
},
|
|
53
|
-
// The performing skill wins a phrase naming its operation over the front
|
|
54
|
-
// door's own routing framing, even though canon-operator's description
|
|
55
|
-
// quotes a phrase near this one. See canon/context/cli/audits/routing.md.
|
|
56
52
|
{
|
|
57
53
|
prompt:
|
|
58
54
|
"Whatever the right toolkit command is, get this project's rules installed.",
|
|
@@ -60,20 +56,11 @@ export const SETUP_CASES: readonly SkillCase[] = [
|
|
|
60
56
|
},
|
|
61
57
|
{
|
|
62
58
|
prompt:
|
|
63
|
-
'
|
|
59
|
+
'File the open feedback issues on the toolkit repo into an intake folder.',
|
|
64
60
|
expect: 'canon-feedback-triage',
|
|
65
61
|
},
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
// this reaches every project the toolkit installed into from the toolkit.
|
|
69
|
-
{
|
|
70
|
-
prompt:
|
|
71
|
-
'Take this change out to every project that installed the toolkit and get each one to a pull request.',
|
|
72
|
-
expect: 'canon-rollout',
|
|
73
|
-
},
|
|
74
|
-
// Reporting per domain is what separates this from canon-operator, which
|
|
75
|
-
// diagnoses on the way to running the operation an intent named. This answers
|
|
76
|
-
// one fixed question across a fixed domain list and repairs nothing.
|
|
62
|
+
// This answers one fixed question across a fixed domain list and repairs
|
|
63
|
+
// nothing, which is what separates it from the setup skill above.
|
|
77
64
|
{
|
|
78
65
|
prompt:
|
|
79
66
|
'Report what this project has fallen behind the toolkit on, domain by domain, and fix nothing.',
|
|
@@ -20,10 +20,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
20
20
|
'Run the whole implement, verify, review, and ship pipeline for the approved plan.',
|
|
21
21
|
expect: 'auto-ship',
|
|
22
22
|
},
|
|
23
|
-
{
|
|
24
|
-
prompt: "Pull together a design system from what's already in the app.",
|
|
25
|
-
expect: 'design-extract',
|
|
26
|
-
},
|
|
27
23
|
{
|
|
28
24
|
prompt: 'Draw me a diagram of how the pieces of this system connect.',
|
|
29
25
|
expect: 'draft-figure',
|
|
@@ -35,7 +31,7 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
35
31
|
},
|
|
36
32
|
{
|
|
37
33
|
prompt:
|
|
38
|
-
'Fold what we decided this session into the context entries
|
|
34
|
+
'Fold what we decided this session into the context entries before this branch goes out.',
|
|
39
35
|
expect: 'context-fold',
|
|
40
36
|
},
|
|
41
37
|
{
|
|
@@ -61,20 +57,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
61
57
|
prompt: 'Walk me through the open intake items so I can decide on each.',
|
|
62
58
|
expect: 'plan-intake-answer',
|
|
63
59
|
},
|
|
64
|
-
{
|
|
65
|
-
prompt:
|
|
66
|
-
"Draft a diff-based proposal for tightening this passage in the standard, don't just edit it.",
|
|
67
|
-
expect: 'markdown-propose',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
prompt: 'Pull the durable lessons out of this session before it ends.',
|
|
71
|
-
expect: 'memory-capture',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
prompt:
|
|
75
|
-
'Go through the memory folder and propose what to do with each entry.',
|
|
76
|
-
expect: 'memory-review',
|
|
77
|
-
},
|
|
78
60
|
{
|
|
79
61
|
prompt:
|
|
80
62
|
'Take on the orchestrator role and coordinate the parallel feature builds.',
|
|
@@ -104,11 +86,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
104
86
|
'The screencast draft is finished. Turn it into an actual video now.',
|
|
105
87
|
expect: 'record-screencast',
|
|
106
88
|
},
|
|
107
|
-
{
|
|
108
|
-
prompt:
|
|
109
|
-
'Look over everything that changed on this branch for bugs and edge cases.',
|
|
110
|
-
expect: 'review-branch',
|
|
111
|
-
},
|
|
112
89
|
{
|
|
113
90
|
prompt:
|
|
114
91
|
'What should a review of a change look for beyond bugs, and how much evidence does a finding need?',
|
|
@@ -128,11 +105,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
128
105
|
prompt: 'Draft me a script with beats for a screencast recording.',
|
|
129
106
|
expect: 'draft-screencast',
|
|
130
107
|
},
|
|
131
|
-
{
|
|
132
|
-
prompt:
|
|
133
|
-
"Check whether my installed Claude seed docs have drifted from the toolkit's.",
|
|
134
|
-
expect: 'seed-sync',
|
|
135
|
-
},
|
|
136
108
|
{
|
|
137
109
|
prompt: 'Turn this topic into a slide deck I can render.',
|
|
138
110
|
expect: 'draft-slides',
|
|
@@ -155,6 +127,11 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
155
127
|
prompt: 'Open a new entry on the task board for this piece of work.',
|
|
156
128
|
expect: 'task-board',
|
|
157
129
|
},
|
|
130
|
+
{
|
|
131
|
+
prompt:
|
|
132
|
+
'This branch finished the pagination work, so tick off whichever board outcomes it actually delivered.',
|
|
133
|
+
expect: 'task-complete',
|
|
134
|
+
},
|
|
158
135
|
{
|
|
159
136
|
prompt: 'Open a learning workspace so I can study this topic properly.',
|
|
160
137
|
expect: 'teach-workspace',
|
|
@@ -173,11 +150,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
173
150
|
prompt: 'Tell me the paint and layout cost of this page right now.',
|
|
174
151
|
expect: 'ux-measure',
|
|
175
152
|
},
|
|
176
|
-
{
|
|
177
|
-
prompt:
|
|
178
|
-
'Sit with me while I go through my whole list of app findings one at a time, and write down each pick with what it beat.',
|
|
179
|
-
expect: 'ux-walkthrough',
|
|
180
|
-
},
|
|
181
153
|
{
|
|
182
154
|
prompt:
|
|
183
155
|
'I am building this branch for another session. What am I on the hook for, and what is off limits?',
|
package/src/claude/seeds.ts
CHANGED
|
@@ -17,13 +17,7 @@ const HOOKS = 'hooks'
|
|
|
17
17
|
* stem in an older layout, which is what `@/sync/layout` pairs a target against
|
|
18
18
|
* to find a superseded artifact.
|
|
19
19
|
*/
|
|
20
|
-
export const SUBDIRS: readonly string[] = [
|
|
21
|
-
HOOKS,
|
|
22
|
-
'context',
|
|
23
|
-
'memory',
|
|
24
|
-
'tasks',
|
|
25
|
-
'wireframes',
|
|
26
|
-
]
|
|
20
|
+
export const SUBDIRS: readonly string[] = [HOOKS, 'context', 'tasks']
|
|
27
21
|
|
|
28
22
|
export type SeedScope = 'claude' | 'root'
|
|
29
23
|
|
|
@@ -7,7 +7,7 @@ import { bodyLines, maskDisplayed } from '@/markdown/scan'
|
|
|
7
7
|
/** Returned when a skill folder carries no `REQUIREMENT.md`, the gating check. */
|
|
8
8
|
export const EXIT_MISSING_REQUIREMENT = 2
|
|
9
9
|
|
|
10
|
-
/** The description ceiling stated in the frontmatter rules of `
|
|
10
|
+
/** The description ceiling stated in the frontmatter rules of `claude/skills/create-skill/references/skill.md`. */
|
|
11
11
|
export const DESCRIPTION_LIMIT = 1024
|
|
12
12
|
|
|
13
13
|
/** The two headings the requirement template declares, matched at any level. */
|
|
@@ -27,7 +27,7 @@ export const CORPORA: readonly string[] = [
|
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* The practice skills `
|
|
30
|
+
* The practice skills `claude/skills/create-skill/references/skill-practice.md` describes, keyed by corpus-relative
|
|
31
31
|
* folder rather than by name, so a target's own `.claude/skills/` folder that
|
|
32
32
|
* shares a name is never swept in. The list lives here rather than in a skill's
|
|
33
33
|
* frontmatter because a skill declaring its own kind could exempt itself.
|
|
@@ -160,7 +160,7 @@ interface SkillText {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
|
-
* Measures both skill corpora against the rules `
|
|
163
|
+
* Measures both skill corpora against the rules `claude/skills/create-skill/references/skill.md` states
|
|
164
164
|
* mechanically. A corpus the project does not carry is skipped rather than
|
|
165
165
|
* reported, so a target holding only `.claude/skills/` reads as in scope.
|
|
166
166
|
*
|
package/src/cli/help.ts
CHANGED
|
@@ -10,6 +10,8 @@ type HelpStream = { isTTY?: boolean }
|
|
|
10
10
|
|
|
11
11
|
// The grouping mirrors the README's domain table and has no other source, so a
|
|
12
12
|
// command added to the program needs a row here or help-option.test.ts fails.
|
|
13
|
+
// A row here also needs a `canon <verb>` line in claude/skills/canon-cli, or a
|
|
14
|
+
// name in TOOLKIT_ONLY in canon-cli-skill.test.ts, which reads this list.
|
|
13
15
|
export const COMMAND_GROUPS: { title: string; rows: CommandRow[] }[] = [
|
|
14
16
|
{
|
|
15
17
|
title: 'Project',
|
|
@@ -25,7 +27,7 @@ export const COMMAND_GROUPS: { title: string; rows: CommandRow[] }[] = [
|
|
|
25
27
|
title: 'Domains',
|
|
26
28
|
rows: [
|
|
27
29
|
['gov [cmd]', 'Governance rules (install, sync, list)'],
|
|
28
|
-
['standards [cmd]', 'Standards (
|
|
30
|
+
['standards [cmd]', 'Standards (list, <name>)'],
|
|
29
31
|
['tooling [cmd]', 'Tooling stacks (sync, ref, create)'],
|
|
30
32
|
['claude [cmd]', 'Claude workflow (init, sync, setup)'],
|
|
31
33
|
['wiki [cmd]', 'Wiki pages (init)'],
|
|
@@ -58,10 +60,9 @@ export const COMMAND_GROUPS: { title: string; rows: CommandRow[] }[] = [
|
|
|
58
60
|
['sessions [cmd]', 'Resolve live sessions to worktree and branch'],
|
|
59
61
|
['worktrees [cmd]', 'Reclaim worktrees whose branches merged'],
|
|
60
62
|
['hooks [cmd]', 'Run the steps a git hook drives (post-merge)'],
|
|
61
|
-
['autoship [cmd]', 'Decide whether a changed set needs review'],
|
|
62
63
|
['pr [cmd]', 'Read a pull request (key-changes, head, checks)'],
|
|
63
64
|
['upstream [cmd]', 'Read Claude Code releases (fetch, catalog, advance)'],
|
|
64
|
-
['feedback', '
|
|
65
|
+
['feedback', 'File toolkit feedback as a GitHub issue'],
|
|
65
66
|
],
|
|
66
67
|
},
|
|
67
68
|
{
|
|
@@ -75,7 +76,6 @@ export const COMMAND_GROUPS: { title: string; rows: CommandRow[] }[] = [
|
|
|
75
76
|
['comments [cmd]', 'Measure comment density and trend (scan)'],
|
|
76
77
|
['context [cmd]', 'Report context folder health (audit)'],
|
|
77
78
|
['markdown [cmd]', 'Report markdown against the standards (audit)'],
|
|
78
|
-
['repo [cmd]', 'Remote metadata (metadata propose, apply)'],
|
|
79
79
|
['census [path]', 'Report file count, extensions, and line totals'],
|
|
80
80
|
],
|
|
81
81
|
},
|
|
@@ -128,7 +128,6 @@ const EXAMPLES = [
|
|
|
128
128
|
'canon secrets scan --json',
|
|
129
129
|
'canon deps audit --json',
|
|
130
130
|
'canon labels audit --json',
|
|
131
|
-
'canon repo metadata propose --json',
|
|
132
131
|
'canon census --json',
|
|
133
132
|
'canon audits run --json',
|
|
134
133
|
'canon gate run --all --no-write',
|
package/src/cli/ui.ts
CHANGED
|
@@ -154,9 +154,8 @@ export function isNonInteractive(): boolean {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/**
|
|
157
|
-
* `nonInteractiveDefault` opts a prompt into
|
|
158
|
-
*
|
|
159
|
-
* option instead of failing. Callers that would rather fail loudly than pick
|
|
157
|
+
* `nonInteractiveDefault` opts a prompt into resolving to its first option
|
|
158
|
+
* under `CANON_NON_INTERACTIVE=1` instead of failing. Callers that would rather fail loudly than pick
|
|
160
159
|
* for the user leave it off.
|
|
161
160
|
*/
|
|
162
161
|
export async function select<Value>(opts: {
|
package/src/cli.ts
CHANGED
|
@@ -37,9 +37,7 @@ import { register as gate } from '@/commands/gate'
|
|
|
37
37
|
import { register as secrets } from '@/commands/secrets'
|
|
38
38
|
import { register as deps } from '@/commands/deps'
|
|
39
39
|
import { register as labels } from '@/commands/labels'
|
|
40
|
-
import { register as autoship } from '@/commands/autoship'
|
|
41
40
|
import { register as pr } from '@/commands/pr'
|
|
42
|
-
import { register as repo } from '@/commands/repo'
|
|
43
41
|
import { register as census } from '@/commands/census'
|
|
44
42
|
import { register as upstream } from '@/commands/upstream'
|
|
45
43
|
import { register as targets } from '@/commands/targets'
|
|
@@ -99,9 +97,7 @@ hooks(program)
|
|
|
99
97
|
secrets(program)
|
|
100
98
|
deps(program)
|
|
101
99
|
labels(program)
|
|
102
|
-
autoship(program)
|
|
103
100
|
pr(program)
|
|
104
|
-
repo(program)
|
|
105
101
|
census(program)
|
|
106
102
|
upstream(program)
|
|
107
103
|
audits(program)
|