@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
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: restate-plainly
|
|
3
|
-
description: Why a plain restatement is asked for by name, and where its boundary sits against the skill that drafts and the command that measures
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Restate plainly requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, a reader who cannot follow a dense answer has to ask for it again in ordinary words, and the second answer is drafted by the same session that produced the first. Nothing tells that session which half of its own text carried the decision, so the rewrite shortens the passage and keeps the abstraction that made it hard to read.
|
|
11
|
-
|
|
12
|
-
The corpus around it covers the neighboring jobs and not this one. `write-human` governs a passage being drafted or revised and arrives on a markdown edit, so it never sees an answer in chat and never reaches a document nobody is editing. `canon markdown audit` reports sentence spread and repeated openings against a stated range, which measures how a passage moves and says nothing about whether a reader can act on it.
|
|
13
|
-
|
|
14
|
-
A restatement also fails in a way a rewrite does not. A run that compresses by dropping what supports a claim leaves a reader who acts on the plain version and meets a different answer in the source, and that failure is invisible in the restatement itself.
|
|
15
|
-
|
|
16
|
-
## Must
|
|
17
|
-
|
|
18
|
-
- Take a named markdown path or the preceding answer, resolving the path first, since a reader pointing at a file has already said which one they mean
|
|
19
|
-
- Keep every point that changes a decision and cut what only supports one, which is the split that separates a restatement from a summary
|
|
20
|
-
- Preserve a hedge the source carries, since dropping it manufactures a certainty
|
|
21
|
-
- Cite the carrier of the rhythm and density rules rather than restating them, because a second copy drifts with nothing comparing the two
|
|
22
|
-
- Fire on an explicit request and refuse the model's own judgment about its own output
|
|
23
|
-
|
|
24
|
-
## Must not
|
|
25
|
-
|
|
26
|
-
- Write a file. A restatement is read once to reach a decision, and a file makes a record nobody opens twice.
|
|
27
|
-
- Add a fact, number, or name the source does not carry
|
|
28
|
-
- Restate the voice, rhythm, or density rules, which live in the skill this body cites
|
|
29
|
-
- Claim the restatement is verified. Nothing checks whether a plain version kept the deciding half, so the sandbox arm asserts what the run did rather than that the output is good.
|
|
30
|
-
|
|
31
|
-
## Guards
|
|
32
|
-
|
|
33
|
-
- A named path that does not resolve stops the run rather than falling back to the preceding answer, since the two inputs are different requests
|
|
34
|
-
- A request with no path and nothing preceding it stops rather than restating the request itself
|
|
35
|
-
|
|
36
|
-
## Out of scope
|
|
37
|
-
|
|
38
|
-
- Drafting or revising a passage, which is `write-human` on a markdown edit
|
|
39
|
-
- Measuring cadence in finished output, which `canon markdown audit` reports from package data
|
|
40
|
-
- Rewriting a document into a file, which is a proposal against the source rather than a restatement of it
|
|
41
|
-
- The banned characters, which `markdown.md` states and the audit gates
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: restate-plainly
|
|
3
|
-
description: Restates a dense answer or a named markdown document in plain language, cutting jargon and keeping only what changes a decision. Use when asked to "restate that in plain language", "say that plainly", "what does this actually mean", "cut the jargon", "give me the plain version", or "restate this document". Do NOT use to draft or revise prose, which is `write-human`, and do NOT fire on the model's own judgment that its own output was dense.
|
|
4
|
-
metadata:
|
|
5
|
-
family: answer
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Restate plainly
|
|
9
|
-
|
|
10
|
-
Return the plain version of something already written. The reader asked because they stopped to decode rather than to decide, so the restatement earns its place by getting them to the decision.
|
|
11
|
-
|
|
12
|
-
## What to restate
|
|
13
|
-
|
|
14
|
-
- Restate the file when the request names a markdown path, and the preceding answer in the conversation when it names none. A named path wins over an answer sitting in the same turn.
|
|
15
|
-
- Stop when the request names a path that does not resolve: `❌ No file at <path>. Name a path that exists, or ask for the preceding answer instead.`
|
|
16
|
-
- Stop when nothing precedes the request and no path is named: `❌ Nothing to restate. Name a markdown path, or ask right after the answer you want in plain words.`
|
|
17
|
-
- Refuse a request to restate output on the model's own initiative. A person asks for this by name.
|
|
18
|
-
|
|
19
|
-
## What survives
|
|
20
|
-
|
|
21
|
-
- Keep every point that changes a decision, and cut every point that only supports one. A reader who acts on the restatement and is surprised by the original has been given the wrong half.
|
|
22
|
-
- Name the thing the source names. Replace a term of art with its plain equivalent, and keep the term where the reader has to search for it later.
|
|
23
|
-
- Say what is uncertain where the source hedges, and say it plainly. Dropping a hedge invents a certainty the source does not carry.
|
|
24
|
-
- Introduce no fact, number, or name the source lacks. A restatement changes wording and never claims.
|
|
25
|
-
- Report the reasoning, not the metaphor. An abstraction standing in for a mechanism is what made the source dense.
|
|
26
|
-
|
|
27
|
-
## How it reads
|
|
28
|
-
|
|
29
|
-
Load the `write-human` skill before writing the restatement. Compression is where a plain version turns into a list of verbless fragments, and that skill states the rhythm and density rules this one does not copy.
|
|
30
|
-
|
|
31
|
-
## Output
|
|
32
|
-
|
|
33
|
-
Answer in chat. Write no file, since a restatement is read once to reach a decision.
|
|
34
|
-
|
|
35
|
-
Lead with the plain version in prose. Close with one line naming what was cut and why, so the reader can go back for it:
|
|
36
|
-
|
|
37
|
-
```plaintext
|
|
38
|
-
Cut: <what left, and why it changes no decision>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Name the source path on its own line when the restatement came from a file.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: review-branch
|
|
3
|
-
description: What local review is for, the gaps it closes, and why it reports without fixing
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Review branch requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, a branch ships on the confidence of the session that wrote it. Review happens in chat and evaporates, so the ship step has no receipt to gate on. What review does happen mixes style opinion with real defects at one severity, and a reader cannot tell which blocks the merge. Worst, a diff that resolves empty against a stale base reports a clean branch instead of admitting the skill could not see the work.
|
|
11
|
-
|
|
12
|
-
## Must
|
|
13
|
-
|
|
14
|
-
- Read the project's own context before the diff, so a decision already settled is not reported as a defect
|
|
15
|
-
- Resolve the base ref once, preferring the remote over local `main`, and reuse it in the guard and the read
|
|
16
|
-
- Say when the baseline is unusable and name the narrowed scope, rather than letting a clean summary read as a clean branch
|
|
17
|
-
- Flag only what will cause incorrect behavior or break a documented rule
|
|
18
|
-
- Apply `canon:review-craft`'s axes and evidence bar, rendered output included, rather than carrying an axis list of its own
|
|
19
|
-
- Grade every finding, since the caller gates on the counts rather than on the prose
|
|
20
|
-
- Write the report to disk under a branch-derived slug, so what the ship step reads outlives the session
|
|
21
|
-
|
|
22
|
-
## Must not
|
|
23
|
-
|
|
24
|
-
- Fix, rewrite, or suggest a refactor outside a finding. Reporting is the whole job.
|
|
25
|
-
- Flag style, linter territory, or anything resting on unverified state. A false positive erodes trust in the pass.
|
|
26
|
-
- Substitute the whole tree for a missing baseline
|
|
27
|
-
- Repeat the full report in chat. The file is the report and a chat copy of it goes stale immediately.
|
|
28
|
-
- Stage or commit the receipt, which is gitignored scratch
|
|
29
|
-
- Auto-trigger on a vague signal. Require an explicit request or a pipeline invocation.
|
|
30
|
-
|
|
31
|
-
## Guards
|
|
32
|
-
|
|
33
|
-
- The staged set, the branch set, and the working set are all empty: stop with a pass
|
|
34
|
-
- Baseline unusable: continue on the uncommitted set and lead the report with the warning
|
|
35
|
-
|
|
36
|
-
## Out of scope
|
|
37
|
-
|
|
38
|
-
- Reviewing an open pull request, which `review-pr` owns. The split is by vantage: this one reviews local work for the session that wrote it and writes to disk.
|
|
39
|
-
- Deciding whether the findings block the ship. This skill grades and the caller gates.
|
|
40
|
-
- Fixing anything it found, which `review-address` owns once the work is on a pull request
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: review-branch
|
|
3
|
-
description: Reviews all changes since main for bugs, edge cases, and logic flaws. Reads CLAUDE.md, REQUIREMENTS.md, and ARCHITECTURE.md for context, then applies a structured review to the full diff and outputs a findings report. Coding standards from `.claude/rules/` are auto-loaded by Claude Code. Use when asked to review changes, run a code review, or check the current branch. Do NOT auto-trigger on vague signals like "looks good" or "can you check this". Require an explicit review request or an autoship invocation.
|
|
4
|
-
metadata:
|
|
5
|
-
family: check
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Review branch
|
|
9
|
-
|
|
10
|
-
## Guards
|
|
11
|
-
|
|
12
|
-
- Resolve the base ref first, per Diff baseline below. If `git diff <base>` and the untracked listing are both empty, stop: `✅ No changes to review.` Those two are the sets Step 2 reads, and the range already carries the staged and the unstaged work the guard used to test on its own. A guard reading bare local `main` stops the skill on `main` before it ever reaches Step 2.
|
|
13
|
-
|
|
14
|
-
## Diff baseline
|
|
15
|
-
|
|
16
|
-
Resolve the base ref once and reuse it in the guard and in Step 2:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD main 2>/dev/null
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Prefer `origin/main` over local `main`. On `main` itself the local ref resolves to HEAD, so every committed change drops out of the set and the skill reports a clean branch rather than admitting it cannot see the work.
|
|
23
|
-
|
|
24
|
-
The baseline is unusable in one case: no merge base resolves against either ref. Substitute `HEAD` and lead the report with `⚠ Baseline unusable. Reviewed the uncommitted set only.`, so a clean summary is never read as a clean branch. That substitution costs the committed half, because `git diff HEAD` reaches the staged and the unstaged work and nothing behind it.
|
|
25
|
-
|
|
26
|
-
The base equalling HEAD is a usable baseline rather than the second case it used to be. It means nothing is committed ahead of the base, which is the ordinary shape on `main` and on a feature branch before its first commit, and `git diff <base>` degenerates there to `git diff HEAD` and reads the branch whole. Warning on it would tell a reader their review was partial when it had covered everything.
|
|
27
|
-
|
|
28
|
-
## Step 1: read context
|
|
29
|
-
|
|
30
|
-
Read these in parallel from the project root, skipping any that do not exist:
|
|
31
|
-
|
|
32
|
-
- `CLAUDE.md`: project type, conventions, and commands
|
|
33
|
-
- `canon/REQUIREMENTS.md`: feature scope and non-goals
|
|
34
|
-
- `canon/ARCHITECTURE.md`: technical design decisions
|
|
35
|
-
|
|
36
|
-
Coding standards from `.claude/rules/` are auto-loaded by Claude Code. Always-on rules apply every session. Path-scoped rules apply to files matching their `paths:` glob.
|
|
37
|
-
|
|
38
|
-
## Step 2: get the diff and changed files
|
|
39
|
-
|
|
40
|
-
Resolve the base ref per Diff baseline above, then run these in parallel from the project root:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
git diff <base>
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
git diff --name-only <base>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
git ls-files --others --exclude-standard
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Use `git diff <base>` as the diff scope. It compares the base against the working tree, so the committed, staged, and unstaged halves arrive in one range and no selection between them is made. Take the file list as the name-only output plus the untracked listing, which covers a file git has never tracked and therefore no diff can reach.
|
|
55
|
-
|
|
56
|
-
When the baseline is unusable, substitute `HEAD` for `<base>` in both diff commands. Never substitute the whole tree for a missing baseline.
|
|
57
|
-
|
|
58
|
-
## Step 3: read changed files
|
|
59
|
-
|
|
60
|
-
Read each file from the changed file list. Skip deleted files. Run reads in parallel.
|
|
61
|
-
|
|
62
|
-
## Step 4: review and persist
|
|
63
|
-
|
|
64
|
-
Invoke `canon:review-craft` before reading the diff for findings, whatever the diff's size. It carries what to look for and the evidence bar, rendered output included, and this step carries no axis list of its own to fall back on. Report it rather than proceeding silently when the skill does not resolve.
|
|
65
|
-
|
|
66
|
-
Review the full diff and changed file contents for:
|
|
67
|
-
|
|
68
|
-
1. Every axis `canon:review-craft` states, held to its evidence bar
|
|
69
|
-
2. Violations of rules from `.claude/rules/` that apply to the changed files
|
|
70
|
-
3. When the diff touches a file this project ships to a target holding none of its own history: a repository-relative path, a phase label naming a gitignored board, a same-repository pull request or commit reference, or a layout, stack, or config-path claim true of this checkout but stated as if it were general
|
|
71
|
-
|
|
72
|
-
Use `CLAUDE.md`, `canon/REQUIREMENTS.md`, `canon/ARCHITECTURE.md`, and the auto-loaded `.claude/rules/` as project context to inform what is intentional vs problematic. Do not fix, rewrite, or suggest refactors outside the scope of a finding.
|
|
73
|
-
|
|
74
|
-
### High-signal filter
|
|
75
|
-
|
|
76
|
-
Flag only issues that will definitely cause incorrect behavior or break a documented rule. Skip:
|
|
77
|
-
|
|
78
|
-
- Code style or quality concerns
|
|
79
|
-
- Subjective suggestions
|
|
80
|
-
- Linter territory
|
|
81
|
-
- Issues that depend on unverified state
|
|
82
|
-
|
|
83
|
-
A comment that makes a false claim about the code is a correctness finding, not a style one. Flag it past the exclusions above and let the severity ladder rank it.
|
|
84
|
-
|
|
85
|
-
If uncertain, do not flag. False positives erode trust.
|
|
86
|
-
|
|
87
|
-
### Severity
|
|
88
|
-
|
|
89
|
-
- **critical**: blocks the feature. Broken in production if shipped.
|
|
90
|
-
- **should-fix**: fix in same session while context is fresh. Not a blocker.
|
|
91
|
-
- **minor**: not worth fixing now. Include for visibility.
|
|
92
|
-
|
|
93
|
-
### Report format
|
|
94
|
-
|
|
95
|
-
Start with a summary line. Group findings by file. Within each file, list findings sorted by severity (critical first, then should-fix, then minor). Omit files with no findings.
|
|
96
|
-
|
|
97
|
-
```markdown
|
|
98
|
-
X critical, Y should-fix, Z minor across N files.
|
|
99
|
-
|
|
100
|
-
File: path/to/file.ext
|
|
101
|
-
|
|
102
|
-
- **critical**: finding
|
|
103
|
-
- **should-fix**: finding
|
|
104
|
-
- **minor**: finding
|
|
105
|
-
|
|
106
|
-
File: path/to/other.ext
|
|
107
|
-
|
|
108
|
-
- **critical**: finding
|
|
109
|
-
- **minor**: finding
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
If nothing is wrong, use: `✅ No findings.`
|
|
113
|
-
|
|
114
|
-
### Persist
|
|
115
|
-
|
|
116
|
-
Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. Fall back to `latest` on an empty result.
|
|
117
|
-
|
|
118
|
-
Write the full report directly to `.canon/review/branch-<slug>.md` at the main worktree root, not the current worktree. Resolve that root the way `session-worktree` does. Create the directory if it does not exist. Always overwrite.
|
|
119
|
-
|
|
120
|
-
The report is a main-root write, so it goes out as a heredoc, routed the way `session-worktree` states.
|
|
121
|
-
|
|
122
|
-
If there are no findings, write `✅ No findings.` to the file with a timestamp.
|
|
123
|
-
|
|
124
|
-
The `.canon/review/` directory is gitignored. Do not stage or commit the file.
|
|
125
|
-
|
|
126
|
-
The report is disposable. It outlives the ship chain that reads it, and `context-fold` sweeps it once the branch it names is gone, because the durable record of what a review found is the comment `review-pr` posts on the pull request. A review run on a branch that never opens one leaves nothing behind once that branch is gone, so fold anything worth keeping into the pull request body or a task finding while the report is still on disk.
|
|
127
|
-
|
|
128
|
-
### Chat output
|
|
129
|
-
|
|
130
|
-
Output only the summary line and the file path. Do not repeat the full report in chat.
|
|
131
|
-
|
|
132
|
-
```plaintext
|
|
133
|
-
X critical, Y should-fix, Z minor across N files.
|
|
134
|
-
📝 Wrote .canon/review/branch-<slug>.md
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
If no findings: `✅ No findings. Wrote .canon/review/branch-<slug>.md`
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: seed-sync
|
|
3
|
-
description: Scope boundary for section-granular seed reconciliation against the bulk install and sync commands
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Seed sync requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, a project that edited a seed has no way to take an upstream change without losing something. No `canon` command touches a seed at all, so the only route is a hand copy that overwrites the file and takes the edits with it, unrecorded. Nothing can deliver one upstream section into a file the project has customized, which is the case a grown project is always in.
|
|
11
|
-
|
|
12
|
-
A whole-file diff does not close it either. It cannot separate a section the user rewrote on purpose from a section the toolkit moved on without them, so the choice reaches the user as accept everything or lose everything, and the safe answer is always to skip.
|
|
13
|
-
|
|
14
|
-
Naming the bulk command carries a failure of its own. This skill decides which files the bulk sync should take and then hands that command over without stating what it does to them, and the boundary line below names the reference holding that answer where no session reads it. Claude Code loads the skill entry alone, so a sibling named here reaches nobody.
|
|
15
|
-
|
|
16
|
-
Two failures belong to the audit rather than to the diff. A decision taken in chat dies with the session, so an audit half applied cannot be resumed and the second run starts over. And a file the toolkit generates rather than ships, such as an index rebuilt from sibling frontmatter, is absent from every source catalog by design, so a naive comparison reports it as a local addition and invites the user to reconcile something nothing owns.
|
|
17
|
-
|
|
18
|
-
## Must
|
|
19
|
-
|
|
20
|
-
- Read seed content from the CLI rather than holding a copy, so the audit and the install cannot disagree
|
|
21
|
-
- Diff per section, treating the preamble as a section of its own
|
|
22
|
-
- Separate a customized section from a stale one by reading the attribution the drift report records, not by how the section looks, and default the customized one to no action
|
|
23
|
-
- Fall back to appearance only when attribution is unavailable, and mark every verdict reached that way as unverified
|
|
24
|
-
- Leave a file the report proves untouched to the bulk sync that owns it, rather than auditing what carries no edits
|
|
25
|
-
- Route to the overwrite contract from the body, at the point the bulk command is named, since the boundary below is read by an author and never by a session
|
|
26
|
-
- Persist the proposal and every decision to a review file that stays the source of truth across re-pings
|
|
27
|
-
- Apply one section at a time, never by rewriting a file
|
|
28
|
-
|
|
29
|
-
## Must not
|
|
30
|
-
|
|
31
|
-
- Propose removing a section present only in the target. Those are the customizations the skill exists to preserve.
|
|
32
|
-
- Write a target file before a decision is recorded against the item
|
|
33
|
-
- Read an empty decision slot as consent
|
|
34
|
-
|
|
35
|
-
## Guards
|
|
36
|
-
|
|
37
|
-
- No `canon` on PATH, or no `.claude/` directory at the project root, stops before any read
|
|
38
|
-
|
|
39
|
-
## Out of scope
|
|
40
|
-
|
|
41
|
-
- Bulk install and sync of a whole domain, which `canon <domain> install` and `canon <domain> sync` own and `canon-cli` documents. Reach for this skill when the target holds edits worth keeping, and for those commands when it does not.
|
|
42
|
-
- Golden configs, which overwrite by design and carry no section structure to diff
|
|
43
|
-
- Governance rules: `canon gov sync`
|
|
44
|
-
- First-time scaffold of a project that has installed nothing yet: `target-setup`
|
|
45
|
-
- Public `README.md` and `docs/` prose: `docs-sync`
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: seed-sync
|
|
3
|
-
description: Audits a project's installed Claude seed docs against the toolkit's current seed source and proposes per-section edits without overwriting customizations. Use when asked to "sync seeds", "update my seeds", "check seed drift", "did the toolkit seeds change", or when reconciling `CLAUDE.md` and `.claude/` preambles after an upstream toolkit update.
|
|
4
|
-
metadata:
|
|
5
|
-
family: upkeep
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Seed sync
|
|
9
|
-
|
|
10
|
-
Surfaces drift between the toolkit's current seed docs and what was installed in this project, then proposes targeted edits. The CLI emits seed content. This skill diffs, reasons, and writes the proposal to a review file. It does not write target files until the user confirms.
|
|
11
|
-
|
|
12
|
-
## Guards
|
|
13
|
-
|
|
14
|
-
- If the `canon` CLI is not on PATH, stop: `❌ canon CLI not found. Install the toolkit first.`
|
|
15
|
-
- If no `.claude/` directory exists at the project root, stop: `❌ No .claude/ directory found. Run canon claude init first.`
|
|
16
|
-
|
|
17
|
-
## Step 1: read toolkit sources and the drift report
|
|
18
|
-
|
|
19
|
-
Run both in parallel from the project root:
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
canon claude seeds list --json 2>/dev/null
|
|
23
|
-
canon sync --check . --json 2>/dev/null
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Seeds emit an array of `{name, source, target, content}`, where `target` is the path relative to the project root where the file installs.
|
|
27
|
-
|
|
28
|
-
Seeds are the whole subject. No standard installs into a project, so there is no installed copy to audit and nothing to reconcile against the corpus. A standard a session needs is read with `canon standards <name>`, which resolves against the copy inside the package.
|
|
29
|
-
|
|
30
|
-
### Narrow the set by attribution
|
|
31
|
-
|
|
32
|
-
The report is what separates a file the project edited from one the toolkit moved on without it. Read `seeds.entries` for seed paths.
|
|
33
|
-
|
|
34
|
-
Keep every seed regardless of state. `CLAUDE.md` is the file a project edits most, and its `drifted` verdict is the case this skill exists for.
|
|
35
|
-
|
|
36
|
-
Read the `canon-cli` skill before naming a sync command in the output. It states which surfaces a sync overwrites, merges, or writes once.
|
|
37
|
-
|
|
38
|
-
Fall back to the appearance heuristic in step 3 when the report cannot attribute, which is `historyUnavailable` set on the relevant section or the command failing outright. Say so in the summary block, because a fallback audit reports guesses rather than facts.
|
|
39
|
-
|
|
40
|
-
## Step 2: read installed copies
|
|
41
|
-
|
|
42
|
-
For each entry in the merged list, read the file at its `target` path from the project root. Run reads in parallel.
|
|
43
|
-
|
|
44
|
-
Mark missing files for **Add** treatment. Skip non-text seeds (`.json`) for section diffing. Record a one-line note in the scope table that the user can compare manually.
|
|
45
|
-
|
|
46
|
-
When detecting target-only files for `local-only` flagging, skip files the toolkit's own walkers regenerate from sibling frontmatter (today: any `index.md` produced by `canon indexes regen`). They are absent from source catalogs by design, so flagging them as `local-only` is a false positive.
|
|
47
|
-
|
|
48
|
-
Note on `settings.json`: the seed now ships only the PostToolUse hook block. If a target project's `.claude/settings.json` carries `attribution` or `permissions` keys, those are stale: the user-level `~/.claude/settings.json` (installed via `canon claude setup`) owns them now. Flag those keys in the scope table for removal rather than diffing them as content drift.
|
|
49
|
-
|
|
50
|
-
## Step 3: diff per section
|
|
51
|
-
|
|
52
|
-
For each seed file present in both sides, parse the body into a preamble (everything between H1 and the first H2) plus one part per `##` header, then compare part by part. Treat the preamble as a single unit with the same verdicts as a section. Use `(preamble)` as its label in the proposal.
|
|
53
|
-
|
|
54
|
-
- **Identical:** ignore.
|
|
55
|
-
- **Toolkit-only section** (present in source, absent in target): candidate to **Add**. Number it whatever the file's own verdict is. The verdict rules below govern a section present in both, and a section the project never had cannot be the customization a `drifted` file is being credited with. A pass that reads the file-level verdict first proposes nothing on a target missing eleven sections, which is the shape this bullet exists to catch.
|
|
56
|
-
- A deliberate removal reads the same as one that never arrived, and no decline is carried between runs, so a section the user skips is proposed again on the next branch. Say so beside the item rather than letting a reader meet it a third time wondering. The way to settle it for good is to keep the heading and write the project's own content under it, which moves the section onto the drifted path below, where the customization rule protects it and stops numbering it.
|
|
57
|
-
- **Target-only section** (present in target, absent in source): preserve, never propose removal. These are user customizations.
|
|
58
|
-
- **Drifted section** (present in both, content differs): candidate to **Update**.
|
|
59
|
-
- Read the file's verdict from the report rather than judging it by eye. `drifted` means the content matches no version the toolkit ever published, so the project wrote it: call it **Customized**, default to skip, record in the scope table only, never numbered.
|
|
60
|
-
- `stale` at the file level means the toolkit moved and the project did not, so any section differing inside it is **Stale**. Default action: propose update.
|
|
61
|
-
- Only when the report could not attribute the file, judge by appearance: a version carrying extra bullets, project-specific paths, or filled-in placeholders reads as **Customized**, and one reading like the original toolkit text reads as **Stale**. Mark every verdict reached this way as unverified in the proposal.
|
|
62
|
-
|
|
63
|
-
The user judges intent. The skill makes the judgment legible.
|
|
64
|
-
|
|
65
|
-
### Absorbed-already check
|
|
66
|
-
|
|
67
|
-
Before proposing an Update, grep the target section for the seed text's keywords. If the rule is already implied by an adjacent bullet in the target version, drop the proposal and record the section as `in sync` in the scope table.
|
|
68
|
-
|
|
69
|
-
## Step 4: write the proposal to the review file
|
|
70
|
-
|
|
71
|
-
Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. Fall back to `latest` on an empty result.
|
|
72
|
-
|
|
73
|
-
Write the full proposal to `.canon/review/seed-audit-<slug>.md` at the main worktree root. Do not print the proposal inline.
|
|
74
|
-
|
|
75
|
-
The proposal is a main-root write, so it goes out as a heredoc, routed the way `session-worktree` states.
|
|
76
|
-
|
|
77
|
-
Structure: a summary block at the top, a legend, a scope table, then one H2 per numbered item. Number items across all files so the user can reference them by number. Fuse the status, action, and target into each H2. Every item starts as 📝 pending.
|
|
78
|
-
|
|
79
|
-
````markdown
|
|
80
|
-
# Seed audit: <slug>
|
|
81
|
-
|
|
82
|
-
**Pending:** <all numbers>
|
|
83
|
-
|
|
84
|
-
Legend: ✅ applied · ⏭ skipped · 📝 pending
|
|
85
|
-
|
|
86
|
-
How to respond: fill in `Decision:` per item (`apply` or `skip`), then ping. Chat shortcut: `all`, `none`, or a list of numbers.
|
|
87
|
-
|
|
88
|
-
## Scope
|
|
89
|
-
|
|
90
|
-
Mark target-only files (present in target, absent in source) as `local-only` and leave them untouched.
|
|
91
|
-
|
|
92
|
-
| Source | File | Status | Note |
|
|
93
|
-
| ------ | ---------- | ---------- | ---------------------------- |
|
|
94
|
-
| seed | `<target>` | diffed | <counts> |
|
|
95
|
-
| seed | `<target>` | in sync | |
|
|
96
|
-
| seed | `<target>` | skipped | non-text, compare manually |
|
|
97
|
-
| seed | `<target>` | customized | <section> skipped by default |
|
|
98
|
-
| seed | `<target>` | local-only | not in toolkit, preserved |
|
|
99
|
-
|
|
100
|
-
## 1. 📝 Update → `<target-path>` / <section>
|
|
101
|
-
|
|
102
|
-
Why: <one-line reason>
|
|
103
|
-
|
|
104
|
-
```diff
|
|
105
|
-
|
|
106
|
-
- <project line removed>
|
|
107
|
-
<unchanged context line>
|
|
108
|
-
|
|
109
|
-
* <seed line added>
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Decision:
|
|
113
|
-
|
|
114
|
-
## 2. 📝 Add → `<target-path>` / <section>
|
|
115
|
-
|
|
116
|
-
Why: <one-line reason>
|
|
117
|
-
|
|
118
|
-
```diff
|
|
119
|
-
|
|
120
|
-
- <seed section body, each line prefixed with +>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Decision:
|
|
124
|
-
````
|
|
125
|
-
|
|
126
|
-
Update items show both sides in one `diff` block: removed lines from the project version with `-`, added lines from the seed version with `+`, unchanged context lines without a prefix. Add items show only `+` lines. Customized sections appear in the scope table only, never numbered. A file with no drift still appears in the scope table as `in sync`.
|
|
127
|
-
|
|
128
|
-
After writing, tell the user `✅ Wrote proposal to .canon/review/seed-audit-<slug>.md`. Ask them to fill in `Decision:` per item, then re-ping or use the chat shortcut.
|
|
129
|
-
|
|
130
|
-
Rewrite the review file in place whenever the proposal changes mid-review. The file stays the source of truth for the current decisions.
|
|
131
|
-
|
|
132
|
-
## Step 5: apply
|
|
133
|
-
|
|
134
|
-
Re-read the review file as source of truth. For each item, parse `Decision:`:
|
|
135
|
-
|
|
136
|
-
- `apply` (or affirmative): run the `Edit`, flip emoji to ✅.
|
|
137
|
-
- `skip`: leave the target section as-is, flip emoji to ⏭.
|
|
138
|
-
- `defer` or empty: leave 📝 pending, no action.
|
|
139
|
-
- Contains `?` or unrecognized verb: leave 📝 pending, no action.
|
|
140
|
-
|
|
141
|
-
Chat shortcut: the user replies with `all`, `none`, a comma-separated list of numbers, or `skip <nums>`. Write the matching verb into the `Decision:` slot of every item the reply names, `apply` for `all` or a bare list and `skip` for a `skip` reply, then run the parse above against the file. A reply of `none` writes nothing. A slot the reply does not name keeps its own value, so the receipt stays the source of truth and an empty slot still means take no action.
|
|
142
|
-
|
|
143
|
-
Apply edits one at a time via `Edit`, replacing one section at a time. Never rewrite a whole file. Claude Code's tool permission dialog is the confirmation gate per edit.
|
|
144
|
-
|
|
145
|
-
As each item resolves, update its status in the review file: flip the H2 emoji from 📝 to ✅ for applied or ⏭ for skipped. Refresh the summary block counts at the top. Do not delete the review file. It stays as a receipt until the next `seed-sync` run overwrites it or the user clears it.
|
|
146
|
-
|
|
147
|
-
## After completion
|
|
148
|
-
|
|
149
|
-
Output one line per action taken:
|
|
150
|
-
|
|
151
|
-
- `✅ Updated: <target-path> / <section>`
|
|
152
|
-
- `⏭ Skipped: <target-path> / <section>`
|
|
153
|
-
|
|
154
|
-
End with a one-line bucket summary: `✅ Applied: <nums> | ⏭ Skipped: <nums> | 📝 Pending: <nums>`. Omit empty buckets. If anything is pending, remind the user they can fill in a `Decision:` and re-ping, or commit a skip with `skip <nums>` in chat.
|
|
155
|
-
|
|
156
|
-
If the user accepted nothing, output:
|
|
157
|
-
|
|
158
|
-
`✅ No changes applied.`
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sketch-design
|
|
3
|
-
description: Why a greenfield design value needs a render behind it before it reaches DESIGN.md, and where the reference loop stops short of writing that file itself
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Sketch design requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, a session asked to match a look an operator has in mind either invents token values from a personality paragraph alone, which is what `design-extract`'s greenfield path already does and states plainly as a proposal rather than a fact, or builds a one-off render-and-pick comparison by hand for each request, restating `draft-and-pick`'s candidate page, hand-off, and pick mechanics from scratch with nothing comparing the copy to the shipped one. Neither path lets an operator point at a reference image or a live page and have the values that follow trace back to what was actually looked at and picked.
|
|
11
|
-
|
|
12
|
-
## Must
|
|
13
|
-
|
|
14
|
-
- Take at least two operator-supplied references, each a path to an image on disk or a URL to render, and gather them through this skill's own Step 1 prompt rather than a caller-supplied argument
|
|
15
|
-
- Render every URL reference before drafting, and report a capture refusal naming an unrecognized source as a version gap rather than a broken reference
|
|
16
|
-
- Follow `draft-and-pick`'s candidate page, render, hand-off, structured pick, and archival capture mechanics rather than restating them
|
|
17
|
-
- Trace the picked reference's color, type, and spacing by reading its render, and carry the operator's own stated reason for the pick forward as written
|
|
18
|
-
- Write the handoff one field per line, grouped under the section names `standards/design.md` already fixes for `canon/DESIGN.md`, so `design-extract` can read it mechanically
|
|
19
|
-
- Resolve the handoff file and the archival capture against the main worktree root, never against a linked worktree this run happens to be building in
|
|
20
|
-
|
|
21
|
-
## Must not
|
|
22
|
-
|
|
23
|
-
- Write to `canon/DESIGN.md`. Tracing values into the handoff is this skill's whole output. Filling the design document from them is `design-extract`'s Step 2, kept as the one place that file is written.
|
|
24
|
-
- Take the pick on the operator's behalf. That call is theirs on every arm that is defensible, the same boundary `draft-and-pick` states for itself.
|
|
25
|
-
- Restate `draft-and-pick`'s render, hand-off, pick, or loop mechanics, or `canon capture`'s render mechanics
|
|
26
|
-
- Assume this skill's own invocation frequency needs no check. `design-extract` Step 1 points to it as the first move on the greenfield path, and an operator can also type its name directly, so whether anything else reaches for it has an answer only after a review pass reads usage back, rather than at creation time.
|
|
27
|
-
|
|
28
|
-
## Guards
|
|
29
|
-
|
|
30
|
-
- `canon` not on PATH: stop, since the render loop and the capture calls both need it
|
|
31
|
-
- Fires on a direct request or on `design-extract`'s own pointer, never on the model's own read that a project could use a design direction
|
|
32
|
-
|
|
33
|
-
## Out of scope
|
|
34
|
-
|
|
35
|
-
- `design-extract` reads the handoff this skill writes and fills `canon/DESIGN.md` from it. That fill, and the seed template it starts from, stay entirely that skill's own.
|
|
36
|
-
- `draft-and-pick` owns the render, hand-off, pick, and loop mechanics this skill invokes rather than reimplements
|
|
37
|
-
- `canon capture` and `canon serve` own the render and the address mechanics
|
|
38
|
-
- Auditing an implemented UI against its tokens, which `ux-audit` owns
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sketch-design
|
|
3
|
-
description: Runs a reference-and-pick loop against operator-supplied images and URLs, then writes the picked reference's traced color, type, and spacing values to a handoff file `design-extract` reads. Use when asked to "sketch a design direction", "compare these reference sites", "pick a look before we build DESIGN.md", "show me a few design directions", or as the first move on `design-extract`'s greenfield path when nothing has been rendered yet. Do NOT use when a value is already anchored to running code or a stylesheet, which is `design-extract`'s source path, or to draft the design system document itself, which stays `design-extract`'s job.
|
|
4
|
-
metadata:
|
|
5
|
-
family: setup
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Sketch design
|
|
9
|
-
|
|
10
|
-
`design-extract`'s greenfield path proposes color, type, and spacing from a personality paragraph alone, with no render behind any value. This skill puts operator-supplied references in front of a render instead, so the values `design-extract` fills are traced to a picked reference rather than invented from prose.
|
|
11
|
-
|
|
12
|
-
## Guards
|
|
13
|
-
|
|
14
|
-
- If `canon` is not on PATH, stop: `❌ canon CLI not found.`
|
|
15
|
-
- Draft no comparison for a reference set the operator has not supplied. This skill fires on a direct request or on `design-extract` pointing at it, never on the model's own read that a project could use one.
|
|
16
|
-
|
|
17
|
-
## Step 1: gather the references and render what needs it
|
|
18
|
-
|
|
19
|
-
Ask the operator, in this step's own prompt, for the references to compare: a path to an image already on disk for each one already rendered somewhere, and a full URL for each live page to render. Take at least two.
|
|
20
|
-
|
|
21
|
-
Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Step 1 items 2 through 5 to name the decision and derive `<dest>`, with the decision fixed rather than derived: "which of these references the project's design should draw from." Arm 0 is the current state when `canon/DESIGN.md` already carries filled Color, Typography, or Spacing cells. Arms start at 1 otherwise, since a greenfield project asking for this loop has nothing shipped yet to anchor a baseline arm against.
|
|
22
|
-
|
|
23
|
-
Render every URL reference before drafting, one call per reference since each targets its own file:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
canon capture <url> --selector body --out <dest>/refs/arm-<id>.png
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`--selector body` is the right choice here, unlike inside `draft-and-pick`'s own arms: the page belongs to someone else, so nothing on it is a wrapper this skill can name, and a full-page render is what a reference comparison needs. An operator-supplied image needs no render. Reference it directly from `<dest>/refs/` by copying it there under the same `arm-<id>` naming, so every arm resolves through one path shape regardless of source.
|
|
30
|
-
|
|
31
|
-
`canon capture <url>` reaches a target only once a release ships the URL-source capability. Report a refusal naming an unrecognized source as that gap rather than a broken reference, and name upgrading the installed `canon` as the repair.
|
|
32
|
-
|
|
33
|
-
## Step 2: author the candidate set as one page
|
|
34
|
-
|
|
35
|
-
Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Step 2, with one substitution: each arm is an `<img>` of the file `<dest>/refs/arm-<id>.png` produced in Step 1, not markup drafted from scratch. Wrap each in the shared class that skill's Step 2 fixes, label it with its id and its cost, and inline everything else the page needs, per that step's rules.
|
|
36
|
-
|
|
37
|
-
## Step 3: render, hand off, and take the pick
|
|
38
|
-
|
|
39
|
-
Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Steps 3 and 4 unchanged: render the combined page, hand over the address, and put the choice to the operator through the structured question surface. Take whatever reason the operator's answer already states, whether through the surface's own free-text escape or in the surrounding turn, as the reason Step 5 records. The surface takes the pick and the reason in one turn when the operator gives both together, rather than needing a second one.
|
|
40
|
-
|
|
41
|
-
## Step 4: loop, when the operator asks for a change
|
|
42
|
-
|
|
43
|
-
The arms here are fixed references rather than drafted markup, so nothing about a picked arm's own content can be revised. A loop here narrows the set instead: drop an arm the operator rules out, or add a new reference by returning to Step 1 for it alone. Return to Step 2 with the adjusted set and repeat Step 3. Stop when the operator says the pick is right, the same rule `draft-and-pick` Step 5 states, never when the set stops changing.
|
|
44
|
-
|
|
45
|
-
## Step 5: trace and write the handoff
|
|
46
|
-
|
|
47
|
-
1. Carry forward the reason Step 3's pick already stated, as written rather than paraphrased. Ask the operator to state, in their own words, why the picked reference won only when the pick arrived with no reason attached.
|
|
48
|
-
2. Read the picked arm's render at `<dest>/refs/arm-<id>.png` and trace its color, type, and spacing by looking, the same reading a person does against a screenshot. Name a role only where the reference actually shows it. Leave one out rather than guessing.
|
|
49
|
-
3. Write `.canon/picks/<slug>/design-handoff.md`, resolved against the main worktree root rather than the linked worktree this run may be building in, since shared session scratch always resolves there. One field per line, grouped under the section names `${CLAUDE_SKILL_DIR}/../../standards/design.md` fixes, so `design-extract` reads it mechanically:
|
|
50
|
-
|
|
51
|
-
```markdown
|
|
52
|
-
# Design handoff
|
|
53
|
-
|
|
54
|
-
Picked: arm-<id> (<label>)
|
|
55
|
-
Reason: <the operator's own sentence from item 1>
|
|
56
|
-
|
|
57
|
-
## Color
|
|
58
|
-
|
|
59
|
-
- <role>: <hex>
|
|
60
|
-
|
|
61
|
-
## Typography
|
|
62
|
-
|
|
63
|
-
- <role>: <family>, <size>
|
|
64
|
-
|
|
65
|
-
## Spacing
|
|
66
|
-
|
|
67
|
-
- base unit: <value>
|
|
68
|
-
|
|
69
|
-
## Borders
|
|
70
|
-
|
|
71
|
-
- <role>: <radius>, <width>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Write only the sections and roles the trace actually names. A role or a whole section with nothing traced is left out rather than written empty, since `design-extract` Step 2 treats an absent line as untraced and an empty one as a claim about the source.
|
|
75
|
-
|
|
76
|
-
4. Batch-capture the final round's arm files, the same directory-batch convention `draft-and-pick` Step 6 uses: `canon capture <dest>/arms --selector <wrapper-class> --out .canon/picks/<slug>/`, naming Step 2's chosen class, so every arm considered, not only the winner, survives past the pick as a revert record.
|
|
77
|
-
5. Delete `<dest>` and everything in it, now that the handoff and the arms both sit at the durable path above. Report the path as still standing when the delete is refused, rather than closing on a report the tree contradicts.
|
|
78
|
-
|
|
79
|
-
## Response format
|
|
80
|
-
|
|
81
|
-
```plaintext
|
|
82
|
-
📝 Wrote .canon/picks/<slug>/design-handoff.md
|
|
83
|
-
📝 Wrote .canon/picks/<slug>/arm-<id>.png (and every other arm considered)
|
|
84
|
-
|
|
85
|
-
Picked arm-<id>: <label>. Run /canon:design-extract to fill canon/DESIGN.md from the trace.
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## What this delegates
|
|
89
|
-
|
|
90
|
-
Cite these rather than restating them. A step reimplemented here rots against the skill that owns it.
|
|
91
|
-
|
|
92
|
-
- `draft-and-pick` owns the candidate page, the render and hand-off, the structured pick, and the archival capture convention, cited above
|
|
93
|
-
- `design-extract` reads the handoff file this skill writes and fills `canon/DESIGN.md` from it. This skill never writes that file itself.
|
|
94
|
-
- `canon capture` owns the render mechanics, including the URL source and its font refusal
|