@erclx/canon 5.30.0 → 5.32.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/backlog-triage/SKILL.md +1 -1
- package/claude/skills/build-in-slices/REQUIREMENT.md +1 -1
- package/claude/skills/build-in-slices/references/adopted.md +1 -1
- package/claude/skills/canon-cli/REQUIREMENT.md +4 -6
- package/claude/skills/canon-cli/SKILL.md +2 -2
- package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback/SKILL.md +10 -13
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +13 -14
- package/claude/skills/canon-feedback-triage/SKILL.md +50 -29
- package/claude/skills/canvas/REQUIREMENT.md +3 -4
- package/claude/skills/canvas/SKILL.md +5 -5
- package/{standards → claude/skills/canvas/references}/canvas.md +12 -1
- package/claude/skills/ci-workflow/REQUIREMENT.md +0 -1
- package/claude/skills/context-fold/REQUIREMENT.md +8 -20
- package/claude/skills/context-fold/SKILL.md +21 -45
- package/claude/skills/context-fold/references/classify.md +7 -8
- package/claude/skills/context-fold/references/completion-report.md +2 -6
- package/claude/skills/context-fold/references/context-refresh.md +5 -15
- package/claude/skills/context-fold/references/promoted-pages.md +3 -3
- package/claude/skills/context-fold/references/receipt-sweep.md +6 -17
- package/claude/skills/context-fold/references/unusable-baseline.md +4 -6
- package/claude/skills/create-rule/REQUIREMENT.md +0 -1
- package/claude/skills/create-skill/REQUIREMENT.md +6 -4
- package/claude/skills/create-skill/SKILL.md +9 -8
- package/{standards → claude/skills/create-skill/references}/skill-paths.md +1 -0
- 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 +0 -2
- 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 +1 -1
- 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 +10 -11
- 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 +1 -1
- 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 +1 -1
- package/claude/skills/draft-identity/SKILL.md +9 -7
- package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
- package/claude/skills/draft-ready/SKILL.md +6 -6
- 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-issue/SKILL.md +1 -1
- package/claude/skills/git-issue/references/issue.md +3 -3
- package/claude/skills/git-pr/SKILL.md +1 -1
- package/claude/skills/git-ship/REQUIREMENT.md +0 -2
- package/claude/skills/git-ship/SKILL.md +16 -24
- package/claude/skills/git-stage/SKILL.md +1 -1
- package/claude/skills/markdown-craft/REQUIREMENT.md +23 -0
- package/claude/skills/markdown-craft/SKILL.md +17 -0
- package/{standards → claude/skills/markdown-craft/references}/markdown.md +14 -7
- package/claude/skills/plan-feature/REQUIREMENT.md +2 -1
- package/claude/skills/plan-feature/SKILL.md +14 -8
- package/{standards → claude/skills/plan-feature/references}/plan.md +33 -21
- 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 +1 -1
- package/claude/skills/review-pr/SKILL.md +5 -7
- package/claude/skills/review-pr/references/post.md +2 -2
- package/claude/skills/review-ui/REQUIREMENT.md +0 -1
- package/claude/skills/review-ui/SKILL.md +1 -1
- package/claude/skills/review-ui/references/post.md +1 -1
- package/claude/skills/role-orchestrator/REQUIREMENT.md +0 -3
- package/claude/skills/role-orchestrator/SKILL.md +8 -8
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +4 -3
- package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +7 -10
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +0 -3
- package/claude/skills/role-orchestrator/references/orchestrator-resume.md +1 -1
- package/claude/skills/role-planner/SKILL.md +2 -2
- package/claude/skills/role-reviewer/SKILL.md +1 -1
- package/claude/skills/role-worker/SKILL.md +2 -2
- 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 +8 -16
- 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 +4 -6
- package/claude/skills/session-resume/SKILL.md +3 -9
- package/claude/skills/session-worktree/SKILL.md +1 -1
- 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 +1 -1
- package/claude/skills/target-setup/references/indexes.md +1 -1
- package/claude/skills/task-board/SKILL.md +4 -4
- package/claude/skills/task-board/references/archive.md +1 -1
- 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 +13 -8
- package/claude/skills/teach-workspace/SKILL.md +1 -1
- package/claude/skills/teach-workspace/references/revisit.md +1 -1
- package/{standards → claude/skills/teach-workspace/references}/teach.md +17 -5
- package/claude/skills/test-first/REQUIREMENT.md +1 -1
- package/claude/skills/ux-audit/REQUIREMENT.md +2 -2
- package/claude/skills/ux-audit/SKILL.md +2 -3
- package/claude/skills/write-human/REQUIREMENT.md +0 -1
- package/claude/skills/write-human/SKILL.md +2 -2
- package/docs/agents/audits.md +1 -1
- package/docs/agents/canvas.md +1 -1
- package/docs/agents/commands.md +6 -10
- package/docs/agents/context-audit-checks.md +10 -24
- 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 +3 -4
- package/docs/agents/install-and-sync.md +6 -6
- package/docs/agents/intake.md +1 -1
- package/docs/agents/markdown-audit.md +1 -1
- package/docs/agents/records-stale.md +5 -5
- package/docs/agents/records-validate.md +1 -1
- package/docs/agents/records.md +2 -2
- package/docs/agents/restated.md +1 -1
- package/docs/agents/routing.md +1 -1
- package/docs/agents/rule-citations.md +1 -1
- 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 +2 -2
- package/docs/agents/tasks-validate.md +1 -1
- package/docs/agents/tasks.md +1 -1
- package/docs/agents/teach.md +1 -1
- package/docs/agents/test-order.md +1 -1
- package/docs/agents/upstream.md +94 -0
- package/docs/target/migrations.md +24 -0
- package/docs/target/projects.md +5 -7
- package/docs/target/scenarios.md +2 -2
- package/docs/target/sync.md +3 -3
- package/docs/workflow/ai-workflow.md +7 -38
- package/docs/workflow/index.md +1 -1
- package/docs/workflow/operating-model.md +8 -8
- package/docs/workflow/parallel-features.md +7 -7
- package/docs/workflow/skill-map-on-request.md +13 -16
- package/docs/workflow/skill-map.md +20 -32
- package/docs/workflow/visual-design-workflow.md +11 -14
- package/governance/renames.toml +0 -23
- package/governance/rules/canon/605-worktrees.md +1 -1
- package/governance/rules/{standards → canon}/plan.md +5 -5
- package/governance/rules/canon/tasks.md +18 -0
- package/governance/rules/writing/markdown.md +23 -0
- package/governance/stacks/base.toml +1 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +2 -2
- package/scripts/core/regen-web-previews.ts +1 -1
- package/src/audits/catalog.ts +5 -97
- package/src/claude/cases/authoring.ts +5 -18
- package/src/claude/cases/misc.ts +0 -17
- package/src/claude/cases/setup.ts +3 -20
- package/src/claude/cases/workflow.ts +0 -33
- package/src/claude/seeds.ts +1 -7
- package/src/claude/skills-audit.ts +1 -1
- package/src/claude/skills-reach.ts +1 -1
- package/src/cli/help.ts +3 -4
- package/src/cli.ts +2 -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 -2
- package/src/commands/records.ts +24 -6
- package/src/commands/sync.ts +5 -3
- package/src/commands/upstream.ts +430 -0
- package/src/context/audit.ts +6 -15
- 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 +7 -12
- package/src/context/gate.ts +11 -91
- package/src/context/requirements.ts +13 -4
- package/src/counts/scan.ts +3 -3
- package/src/design/components.ts +2 -2
- package/src/feedback/body.ts +0 -12
- package/src/gate/measures.ts +6 -57
- package/src/gate/stages.ts +0 -1
- package/src/gov/citations.ts +9 -3
- package/src/gov/restated.ts +3 -3
- package/src/markdown/structure.ts +3 -3
- package/src/migrate/record-layout.ts +3 -3
- package/src/records/backup.ts +1 -0
- package/src/records/ordinal.ts +1 -1
- package/src/records/prune.ts +2 -1
- package/src/records/stale-canonical.ts +2 -2
- package/src/records/validate.ts +55 -0
- package/src/roots/record.ts +2 -1
- package/src/sandbox/scenario.ts +115 -11
- package/src/shipped/references.ts +3 -3
- package/src/standards/read.ts +52 -1
- package/src/sync/seeds-report.ts +1 -1
- package/src/tasks/answers.ts +14 -1
- package/src/tasks/reach.ts +2 -2
- package/src/tasks/stack.ts +176 -0
- package/src/tasks/validate.ts +1 -1
- package/src/teach/workspace.ts +1 -1
- package/src/upstream/catalog.ts +112 -0
- package/src/upstream/cursor.ts +120 -0
- package/src/upstream/digest.ts +75 -0
- package/src/upstream/due.ts +128 -0
- package/src/upstream/releases.ts +170 -0
- package/standards/context.md +3 -5
- package/standards/design.md +2 -3
- package/standards/index.md +0 -23
- package/standards/publish.md +1 -1
- package/standards/rule.md +1 -1
- package/standards/skill.md +1 -1
- package/tooling/base/reference.md +1 -1
- package/tooling/claude/reference.md +6 -20
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +1 -1
- package/tooling/claude/seeds/.claude/hooks/records-index.sh +8 -20
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +3 -3
- 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/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/index-lookup/REQUIREMENT.md +0 -35
- package/claude/skills/index-lookup/SKILL.md +0 -44
- 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/601-indexes.md +0 -9
- package/governance/rules/canon/603-memory.md +0 -11
- package/governance/rules/claude/565-behavior.md +0 -27
- package/governance/rules/claude/567-planning.md +0 -16
- package/governance/rules/claude/575-hooks.md +0 -16
- package/governance/rules/claude/576-settings.md +0 -13
- package/governance/rules/claude/592-claude-md.md +0 -19
- package/governance/rules/lang/120-bash.md +0 -18
- package/governance/rules/standards/architecture.md +0 -13
- package/governance/rules/standards/groundwork.md +0 -13
- package/governance/rules/standards/intake.md +0 -12
- package/governance/rules/standards/markdown.md +0 -16
- package/governance/rules/standards/memory.md +0 -12
- package/governance/rules/standards/ready.md +0 -13
- package/governance/rules/standards/requirements.md +0 -12
- package/governance/rules/standards/session.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/governance/rules/writing/800-prose.md +0 -15
- 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/repo/metadata.ts +0 -206
- 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/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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Upstream
|
|
3
|
+
description: The fetch, catalog, due, and advance verbs that read Claude Code releases against the toolkit, the cursor record, and each refusal reason
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Upstream
|
|
7
|
+
|
|
8
|
+
`canon upstream` reads the Claude Code release feed from a stored cursor and lists canon's own mechanisms beside it, so a triage can match a release line to something canon does. The verbs ship in the published CLI as `canon gate` and `canon sandbox` do, and only this repository has the skill that drives them. A target has no use for them.
|
|
9
|
+
|
|
10
|
+
Run them as `bun src/cli.ts upstream ...` from this repository's root. The global `canon` resolves to the installed package, which lacks the verbs until a release ships them.
|
|
11
|
+
|
|
12
|
+
## Verbs
|
|
13
|
+
|
|
14
|
+
| Verb | Behavior |
|
|
15
|
+
| ----------------------------------- | ---------------------------------------------------------------------------- |
|
|
16
|
+
| `fetch [--since <version>]` | List the release lines since the cursor, with the mechanical noise dropped |
|
|
17
|
+
| `catalog` | List the skills, verbs, hooks, and gate stages the tree holds, one line each |
|
|
18
|
+
| `due` | Say whether a digest is due, from the cursor and the installed version |
|
|
19
|
+
| `advance <version> --intake <slug>` | Move the cursor to a version, and store the current `llms.txt` beside it |
|
|
20
|
+
|
|
21
|
+
Every verb takes `--root <path>` for the repository to read and `--json` for a record on stdout. `fetch` and `catalog` write nothing, and `due` writes only its day cache. `advance` is the only writer of the cursor, and the digest skill runs it after the findings are filed, so a run that dies midway reads the same range next time.
|
|
22
|
+
|
|
23
|
+
## fetch
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bun src/cli.ts upstream fetch --json
|
|
27
|
+
bun src/cli.ts upstream fetch --since 2.1.256 --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The range runs from the cursor, or from `--since` when given, to the newest release. The walk stops at the first release whose version is not newer than the cursor, so a cursor naming a version the feed never carried still bounds the range, and a range crossing a page boundary is read whole.
|
|
31
|
+
|
|
32
|
+
A line survives when it opens with `Added`, `Changed`, `Removed`, `Improved`, or `Deprecated` and carries none of the dropped surfaces: `[VSCode]`, `[Claude Tag]`, `[Code Review]`, `Windows:`, `Self-hosted`, the apps gateway, managed settings, OpenTelemetry, Bedrock, Vertex, and screen reader. A nested bullet and a `*` bullet are read as well as a `-` one.
|
|
33
|
+
|
|
34
|
+
Without `--json`, stdout carries one `version<TAB>text` row per line. With it, stdout carries one record:
|
|
35
|
+
|
|
36
|
+
| Field | Holds |
|
|
37
|
+
| ---------- | -------------------------------------------------------------------------- |
|
|
38
|
+
| `from` | The cursor version the range starts after |
|
|
39
|
+
| `to` | The newest release version, or `from` when nothing is newer |
|
|
40
|
+
| `releases` | How many releases the range spans |
|
|
41
|
+
| `lines` | Each kept line as `version`, `date`, `text`, and `identifiers` |
|
|
42
|
+
| `llms` | `added` and `removed` lines of `llms.txt` against the stored copy, or null |
|
|
43
|
+
|
|
44
|
+
An identifier is a backticked name on a `Changed`, `Removed`, or `Deprecated` line that holds a dash, a slash, a dot, or a capital. It carries up to three tracked files naming it, and one with no hit is left out. `llms` is null when the page could not be fetched, and every line reads as added until `advance` has stored a first copy.
|
|
45
|
+
|
|
46
|
+
The request sends `GH_TOKEN` or `GITHUB_TOKEN` when either is set. Unauthenticated, GitHub allows 60 requests an hour, and a range takes about three.
|
|
47
|
+
|
|
48
|
+
## catalog
|
|
49
|
+
|
|
50
|
+
Prints a heading per section and a line per entry. With `--json` it prints one record whose fields are `skills`, `internalSkills`, `verbs`, `hooks`, `gate`, and `gaps`, each entry as `name` and `text`. A skill folder with no `SKILL.md` or no description appears in `gaps` rather than dropping out. A hook's text is the first comment line after its shebang.
|
|
51
|
+
|
|
52
|
+
## due
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
bun src/cli.ts upstream due --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Answers whether a digest is worth running now. It exits 0 whether or not one is due, so branch on the record rather than the exit. The installed version comes from `claude --version`, and the cursor from the main worktree root.
|
|
59
|
+
|
|
60
|
+
| Reason | `due` | Meaning |
|
|
61
|
+
| ----------------- | ------- | -------------------------------------------------------------------------- |
|
|
62
|
+
| `no-cursor` | `true` | No digest has been run, so a first run is prompted |
|
|
63
|
+
| `week` | `true` | The cursor is seven or more days old and the install is ahead of it |
|
|
64
|
+
| `vocabulary` | `true` | An `Added` line in the gap names a plugin, skill, hook, worktree, or so on |
|
|
65
|
+
| `current` | `false` | The install is at or below the cursor, as after a downgrade |
|
|
66
|
+
| `recent` | `false` | The cursor is under a week old and no line in the gap matches |
|
|
67
|
+
| `unknown-version` | `false` | `claude --version` could not be read |
|
|
68
|
+
|
|
69
|
+
The record is `due`, `reason`, `releases`, `installed`, and `cursor`. `releases` counts the releases in the gap and is `null` when the feed was not read, so a `week` result can arrive without a count.
|
|
70
|
+
|
|
71
|
+
The gap is read from GitHub only when the install is ahead of the cursor, and the result is cached for a day under the scratch folder at `.canon/tmp/upstream-due/check.json`. A failed read is cached too, so a rate limit hit by one session is not retried by the next. Nothing here moves the cursor.
|
|
72
|
+
|
|
73
|
+
The `.claude/hooks/upstream-due.sh` hook runs the verb at an attended session start and shows the operator one line when it is due. It stays silent in a background session, on a resume, a clear, or a compaction, and on any failure.
|
|
74
|
+
|
|
75
|
+
## advance
|
|
76
|
+
|
|
77
|
+
Writes `cursor.json` and the fetched `llms.txt` under the upstream record folder at the main worktree root, each through a temp file and a rename. `--no-llms` keeps the stored `llms.txt` and fetches nothing. The record is `version`, `intake`, `advanced`, and `llms`, which reads `stored` when a fresh copy was written and `kept` when the stored one stayed, whether by `--no-llms` or because the fetch failed.
|
|
78
|
+
|
|
79
|
+
The cursor file holds `version`, `date`, and `intake`. The folder is a backed record folder, so `canon records push` carries it.
|
|
80
|
+
|
|
81
|
+
## Refusals
|
|
82
|
+
|
|
83
|
+
A refusal exits 1, prints the reason on stderr, and with `--json` adds `reason` and `message` to stdout. Branch on `reason`.
|
|
84
|
+
|
|
85
|
+
| Reason | Verb | Meaning |
|
|
86
|
+
| ------------------- | --------- | ------------------------------------------------------------------- |
|
|
87
|
+
| `no-cursor` | `fetch` | No cursor is stored and no `--since` was given. Pass the flag. |
|
|
88
|
+
| `bad-since` | `fetch` | `--since` is not a dotted version |
|
|
89
|
+
| `cursor-missing` | `fetch` | Every release the feed returned is newer than the cursor |
|
|
90
|
+
| `rate-limited` | `fetch` | GitHub refused the request. Set `GH_TOKEN` or `GITHUB_TOKEN`. |
|
|
91
|
+
| `network` | `fetch` | The feed could not be reached |
|
|
92
|
+
| `http` | `fetch` | GitHub answered with an error status |
|
|
93
|
+
| `invalid-version` | `advance` | The version is not a dotted number |
|
|
94
|
+
| `older-than-cursor` | `advance` | The version is older than the stored cursor, which never moves back |
|
|
@@ -64,6 +64,12 @@ Twenty-five plugin skills dropped their `claude-` prefix for two-word names, so
|
|
|
64
64
|
|
|
65
65
|
The same sweep carries the merge of the five per-kind document drafters into `draft-doc`, so a citation of any one of them lands on `canon:draft-doc`.
|
|
66
66
|
|
|
67
|
+
Fourteen skills, one verb, and one rule were retired without a rename, so the sweep has nothing to map them to and leaves a citation of one as it stands. `design-extract` and `sketch-design` are replaced by `canon:canvas`, which carries a picked direction into `canon/DESIGN.md`. `review-branch`, `seed-sync`, `restate-plainly`, `bash-cli-script`, `canon-operator`, `canon-rollout`, `create-standard`, `markdown-propose`, `memory-review`, `project-commands`, `repo-metadata`, and `ux-walkthrough` have no successor. `canon repo metadata` went with `repo-metadata`, and `canon autoship` went with `review-branch`, whose review step it served. The `120-bash` rule left the `base` stack, so `canon gov sync` removes its installed copy. Replace each citation by hand, or delete the sentence naming a skill that has no successor. <!-- canon-keep-retired -->
|
|
68
|
+
|
|
69
|
+
The memory system retired the same way. `memory-capture`, the `603-memory` rule, and the `memory` standard have no successor, and a citation of any one is replaced by hand or deleted. Ship chains no longer capture a session's lessons, so a lesson goes to the context entry that owns the fact, or to a task's findings. The `canon records` memory kind stays, so a project can still validate, back up, and migrate a folder it holds. <!-- canon-keep-retired -->
|
|
70
|
+
|
|
71
|
+
An installed target keeps its `.canon/memory/` folder and the memory arms of its seeded `records-index.sh` and `standards-audit.sh` hooks, since `canon claude sync` writes only a seed a target lacks. Both are inert: nothing writes the folder, and the hooks match no file. `canon gov sync` removes the installed `603-memory` rule and the generated `memory` standard rule.
|
|
72
|
+
|
|
67
73
|
Two of those files run rather than sit there. `.husky/post-merge` runs the `canon hooks post-merge` verb, so a stale copy of the hook calls a binary that may lack it, and `.claude/hooks/pr-create-log.sh` hands a session a message naming a skill, so a stale copy tells someone to invoke something that no longer exists. A copy older than `git-pr`'s move to REST also matches only `gh pr create`, so it stays silent on every pull request `git-pr` opens. A rule under `.claude/rules/canon/core/` names skills too, though a rule is read rather than run.
|
|
68
74
|
|
|
69
75
|
Resync what the toolkit owns, then sweep what the project wrote:
|
|
@@ -109,3 +115,21 @@ The walk checks both `.claude/snippets` and a root `snippets/`, since a toolkit
|
|
|
109
115
|
- `project` is content the project wrote under the same name, which the retirement does not reach, so leave it alone
|
|
110
116
|
|
|
111
117
|
The walk reads the toolkit's own history, so it needs a cloned toolkit. Installed from the registry it reports `historyUnavailable` and names nothing, so check for `.claude/snippets/` and a root `snippets/` by hand there, and treat what you find as `unattributed`.
|
|
118
|
+
|
|
119
|
+
## Keep or delete the wireframes folder, your call
|
|
120
|
+
|
|
121
|
+
The toolkit retired the wireframes record. Its standard, its generated rule, its seeded folder, and the `@canon/wireframes/index.md` import in the seed `CLAUDE.md` no longer ship, and no skill reads or writes `canon/wireframes/` any more. The canvas holds visual direction instead.
|
|
122
|
+
|
|
123
|
+
A project scaffolded earlier keeps what it already holds, and nothing deletes it:
|
|
124
|
+
|
|
125
|
+
- `canon/wireframes/` stays yours, unaudited and unreferenced by any skill. Keep it as plain notes or delete it.
|
|
126
|
+
- The `@canon/wireframes/index.md` line in your `CLAUDE.md` stays until you remove it, since `canon claude sync` reports the seed `CLAUDE.md` rather than rewriting a file you own. Delete the line when you delete the folder, because an import of a missing file reads as a broken pointer.
|
|
127
|
+
- `.claude/rules/canon/standards/wireframes.md` leaves on the next `canon gov sync`, which deletes a held copy of a rule the toolkit no longer ships.
|
|
128
|
+
|
|
129
|
+
A `## States` table under `canon/wireframes/` is no longer checked against evidence folders, so `canon context audit --gate` passes without reading the folder.
|
|
130
|
+
|
|
131
|
+
## Move decisions out of a held architecture record, once
|
|
132
|
+
|
|
133
|
+
The toolkit stopped seeding a `canon/ARCHITECTURE.md`, stopped gating its caps, and retired the `architecture` standard and the rule generated from it. A project scaffolded earlier may hold the file and import it from `CLAUDE.md`. Both stay, since the record is project prose now and nothing syncs or deletes it. `canon gov sync` removes the generated rule, and `canon context audit` no longer reports the record or its caps.
|
|
134
|
+
|
|
135
|
+
Decide what to do with the file yourself, since where a decision belongs takes judgment no sync has. A decision about how one domain is built goes to the `canon/context/` entry of the domain it constrains, under that entry's `## Decisions`. Once the file is empty, delete it and its `@canon/ARCHITECTURE.md` line in `CLAUDE.md`.
|
package/docs/target/projects.md
CHANGED
|
@@ -61,27 +61,25 @@ The chain is:
|
|
|
61
61
|
- The `verify` phase runs the installed `package.json` scripts (lint, typecheck, check, test, build) and reports pass or fail
|
|
62
62
|
- The `indexes` phase bootstraps the `index.md` system over the project's own documentation folders, confirming candidate folders with the operator rather than running unattended
|
|
63
63
|
|
|
64
|
-
The chain stops at the project edge. `
|
|
64
|
+
The chain stops at the project edge. `git-commit` also ships, reaching the project's history, and does not run as part of it. The chain serves a fresh scaffold and names a destination for the three states it does not. An existing project goes to `canon:target-check`, which reports what the project already carries against what the toolkit ships before anything is repaired. An install wanting the Claude layer without the tooling chain runs `canon claude init` for the seed docs and then `canon:target-setup indexes` for the index system. A language the toolkit ships no stack for is the one of the three the chain still runs for, on `base`, with the fallback marked in the preview so it can be declined there.
|
|
65
65
|
|
|
66
66
|
Run `canon:target-setup verify deep` by hand once the default depth passes, for the heavier server smoke, end-to-end, and screenshot pass, since the same flakiness reasons that keep those stages out of the default depth keep them out of this unattended chain too.
|
|
67
67
|
|
|
68
|
-
Keep the `## Scripts` table in `canon/context/development.md` current as scripts are added. Base tooling seeds that entry with the commands it installs, and each stack reference extends the table.
|
|
68
|
+
Keep the `## Scripts` table in `canon/context/development.md` current as scripts are added. Base tooling seeds that entry with the commands it installs, and each stack reference extends the table. A session reads it to start the app or run a check on request, so a command missing from the table cannot be found that way. A project whose entry outgrew one file and split into `canon/context/development/` keeps the table in `overview.md`, which is where the skill looks next. <!-- audit-ignore-citations: canon/context/development.md -->
|
|
69
69
|
|
|
70
70
|
### From scaffold to first feature
|
|
71
71
|
|
|
72
72
|
Scaffold installs tooling and seeds. It does not fill the planning docs or the design system. Complete those before the first feature session:
|
|
73
73
|
|
|
74
|
-
1. Fill `canon/REQUIREMENTS.md
|
|
75
|
-
2. For a UI project,
|
|
76
|
-
3. Optionally invoke `canon:draft-figure` naming an architecture view, such as system context or components, and the document it belongs in. It draws the view from the
|
|
74
|
+
1. Fill `canon/REQUIREMENTS.md`. The seed asks for the problem in one line, then goals and non-goals, and the scope is yours to write. The seed states its own cap of 600 words, and `canon context audit` gates on it. Edit the number in the record to loosen it. A decision about how the project is built goes in the `canon/context/` entry of the domain it constrains.
|
|
75
|
+
2. For a UI project, write `canon/DESIGN.md` from the seed template, or work the direction out with `canon:canvas` and carry the pick in. Skip for non-UI projects.
|
|
76
|
+
3. Optionally invoke `canon:draft-figure` naming an architecture view, such as system context or components, and the document it belongs in. It draws the view from the context index, the folder layout, and the requirements and renders it to verify the layout, which downloads the Mermaid CLI on first use and takes about 15 seconds.
|
|
77
77
|
4. Start the feature loop. See [AI workflow](../workflow/ai-workflow.md) for the per-feature sequence.
|
|
78
78
|
|
|
79
79
|
A machine without a renderer still gets the figure and is told which check was skipped.
|
|
80
80
|
|
|
81
81
|
Nothing watches a figure once it is drawn. Run `canon:draft-figure` again when the code a view is drawn from moves.
|
|
82
82
|
|
|
83
|
-
`canon/ARCHITECTURE.md` is watched where a figure is not. `canon:context-fold` anchors a decision it amends to the paths that decision cites, and reports an anchored decision whose cited path the branch touched.
|
|
84
|
-
|
|
85
83
|
### Stack decision
|
|
86
84
|
|
|
87
85
|
The default path is `base`. `canon init` on `base` installs base tooling configs, Claude seeds, and the `canon`, `claude`, `tooling`, and `writing` governance rule groups, and scaffolds an empty `.claude/wiki/`. Most projects need nothing more.
|
package/docs/target/scenarios.md
CHANGED
|
@@ -17,7 +17,7 @@ claude
|
|
|
17
17
|
|
|
18
18
|
In the session, invoke `canon:target-setup`. The skill detects no framework and resolves tooling to `base` and governance to `base`. The preview marks both stacks as fallbacks, since neither came from a match, then the chain runs `canon init`.
|
|
19
19
|
|
|
20
|
-
Ongoing: run `canon sync --check .` to see what has drifted, then
|
|
20
|
+
Ongoing: run `canon sync --check .` to see what has drifted, then merge seed drift by hand against the toolkit copy, or run `canon sync .` for a catch-all refresh.
|
|
21
21
|
|
|
22
22
|
## Web application
|
|
23
23
|
|
|
@@ -31,7 +31,7 @@ Invoke `canon:target-setup`. The skill reads `package.json` and the Vite config,
|
|
|
31
31
|
Ongoing maintenance:
|
|
32
32
|
|
|
33
33
|
- What has drifted: `canon sync --check .`
|
|
34
|
-
- Seed drift:
|
|
34
|
+
- Seed drift: merge by hand against the toolkit copy
|
|
35
35
|
- Catch-all sync: `canon sync .`
|
|
36
36
|
- Governance rule refresh only: `canon gov sync .`
|
|
37
37
|
- Layer a new rule on top, for example `260-shadcn` after adopting shadcn: `canon gov install react --add 260-shadcn .`
|
package/docs/target/sync.md
CHANGED
|
@@ -20,7 +20,7 @@ The report opens by naming the binary running it. The installed version reads ag
|
|
|
20
20
|
|
|
21
21
|
### Then the causes
|
|
22
22
|
|
|
23
|
-
A `stale` file still matches what the toolkit installed, so the update is mechanical. A `customized` file carries local edits, so taking the upstream version is a decision
|
|
23
|
+
A `stale` file still matches what the toolkit installed, so the update is mechanical. A `customized` file carries local edits, so taking the upstream version is a decision made by hand against the toolkit copy. A `stranded` file sits where an older toolkit installed it and the toolkit has since moved, which is a relocation the report names but no command runs. A `retired` rule is one under `.claude/rules/canon/` the toolkit no longer ships, and the next `canon gov sync` deletes it. A `renamed` rule is one the toolkit now ships under a new name, and the next sync installs the new name and deletes the old file.
|
|
24
24
|
|
|
25
25
|
That attribution comes from `canon/config/config.json`, which every install and sync now writes, falling back to `.claude/canon/config.json` for a target stamped before that move. A target stamped before that path shipped is read from the retired `.claude/canon.json` instead, reported rather than migrated. Governance records a hash per installed file, plus the stack `canon gov install` was given, and tooling records the stack chain it resolved instead of any file hash, since its install runs no per-file walk to attribute.
|
|
26
26
|
|
|
@@ -28,7 +28,7 @@ Each domain holds its own toolkit commit, so syncing governance today does not m
|
|
|
28
28
|
|
|
29
29
|
A project that has never synced under a toolkit new enough to write a stamp falls back to the toolkit's own git history. Installed content matching any version that history published proves the file untouched, so it reports `stale` naming the commit it came from, and content matching no published version stays `drifted`. That fallback needs the toolkit as a git checkout. Installed from the registry it ships source without history, and the report says attribution was unavailable rather than reading every file as a local edit.
|
|
30
30
|
|
|
31
|
-
Further causes sit outside the per-domain scan, each naming something that walk cannot see. A seed the project edited is reported under `seeds` and
|
|
31
|
+
Further causes sit outside the per-domain scan, each naming something that walk cannot see. A seed the project edited is reported under `seeds` and merged by hand, since no sync command touches a seed. A file a newer seed folder replaced is reported under `superseded`, such as `.claude/TASKS.md` against the `.canon/tasks/` that now ships, and nothing moves it because the content is the project's own. A domain sitting at the root layout with nothing under `.claude/` is reported under `unmigrated`, and no command moves it either. The project moves the content itself. A surface still at its `.claude/` spelling with nothing under `canon/`, such as `.claude/REQUIREMENTS.md`, is reported under `unmovedSurfaces`, since rules glob the `canon/` spelling alone, and `canon migrate surface-roots` moves it. <!-- canon-keep-surface-root -->
|
|
32
32
|
|
|
33
33
|
`unmigrated` currently names no domain, since standards and snippets are the two the toolkit ever installed at the project root, standards closed its install channel, and snippets retired outright. A target still holding a root `standards/` folder from an older toolkit is carrying its own authoring surface now, not an unfinished install, and nothing proposes moving it. A leftover `.claude/snippets/` reports under `reverse` below instead.
|
|
34
34
|
|
|
@@ -76,7 +76,7 @@ Standards take no part in that run. Nothing installed them, so there is no copy
|
|
|
76
76
|
|
|
77
77
|
## Targeted
|
|
78
78
|
|
|
79
|
-
- Claude seed docs such as `CLAUDE.md` and `canon/REQUIREMENTS.md`:
|
|
79
|
+
- Claude seed docs such as `CLAUDE.md` and `canon/REQUIREMENTS.md`: merge by hand against the toolkit copy, section by section, keeping the project's customizations. A `stale` seed is safe to take whole.
|
|
80
80
|
- Governance rules already installed: `canon gov sync <path>` diffs and applies, and never adds new rules. A rule your recorded stack lists reports as `missing` instead.
|
|
81
81
|
- Tooling configs and seeds: `canon tooling <stack> <path>` overwrites golden configs and merges seeds
|
|
82
82
|
- Reference docs for a stack: `canon tooling reference <stack>` reads and never writes, so there is nothing to sync
|
|
@@ -16,10 +16,8 @@ Project docs split across three roots at the project root. What the project auth
|
|
|
16
16
|
|
|
17
17
|
```plaintext
|
|
18
18
|
canon/
|
|
19
|
-
├── REQUIREMENTS.md ← goals, non-goals
|
|
20
|
-
├── ARCHITECTURE.md ← technical design decisions
|
|
19
|
+
├── REQUIREMENTS.md ← problem, goals, non-goals
|
|
21
20
|
├── DESIGN.md ← visual intent and token decisions (UI projects)
|
|
22
|
-
├── wireframes/ ← regions, states, UI copy, and interaction rules (UI projects)
|
|
23
21
|
└── context/ ← per-domain narrative loaded on demand via index.md
|
|
24
22
|
|
|
25
23
|
.claude/
|
|
@@ -28,13 +26,12 @@ canon/
|
|
|
28
26
|
.canon/
|
|
29
27
|
├── tasks/ ← one file per task with a generated index.md, local scratch
|
|
30
28
|
├── plans/ ← one plan per feature, archived inside itself once it ships
|
|
31
|
-
├── memory/ ← durable session facts no context entry owns
|
|
32
29
|
└── tmp/ ← deletable scratch, safe to remove without loss
|
|
33
30
|
```
|
|
34
31
|
|
|
35
|
-
A project scaffolded before the move keeps its records under `.claude/`, and every command reads either root. `canon migrate records` moves one project across and repoints what cites it, and `canon migrate record-tree` follows it to reach the citations inside the records themselves, which the first verb passes over because it enumerates through git. A project scaffolded before the surface move keeps its context
|
|
32
|
+
A project scaffolded before the move keeps its records under `.claude/`, and every command reads either root. `canon migrate records` moves one project across and repoints what cites it, and `canon migrate record-tree` follows it to reach the citations inside the records themselves, which the first verb passes over because it enumerates through git. A project scaffolded before the surface move keeps its context and loose documents under `.claude/` the same way, and `canon migrate surface-roots` moves those to `canon/` with the history following each file.
|
|
36
33
|
|
|
37
|
-
Three tiers of context load with different cost: always-loaded (root `CLAUDE.md
|
|
34
|
+
Three tiers of context load with different cost: always-loaded (root `CLAUDE.md` and `canon/REQUIREMENTS.md`), path-scoped lazy (`.claude/rules/<scope>.md` with `paths:` glob), and on-demand lookup (`canon/context/<domain>.md`, or `canon/context/<domain>/` once a domain outgrows one file, discovered via `canon/context/index.md`). See [the context model](../../canon/context/context-model/overview.md) for the full picture.
|
|
38
35
|
|
|
39
36
|
Run `canon init` to seed the `.claude/` directory, a root `CLAUDE.md` file, and `.claude/rules/` in one pass. `canon init` chains claude init and governance install. Claude Code auto-loads every file in `.claude/rules/` at session start, applying always-on rules unconditionally and path-scoped rules to files matching their `paths:` glob.
|
|
40
37
|
|
|
@@ -70,10 +67,8 @@ What a spike leaves behind splits on whether a later reader needs the file to ch
|
|
|
70
67
|
|
|
71
68
|
#### Session 2
|
|
72
69
|
|
|
73
|
-
Start a fresh Claude Code session. The diff is sufficient context for
|
|
70
|
+
Start a fresh Claude Code session. The diff is sufficient context for ship.
|
|
74
71
|
|
|
75
|
-
- Invoke `canon:review-branch` to review all changes since main and output a findings report
|
|
76
|
-
- Fix any valid findings
|
|
77
72
|
- Invoke `canon:git-ship` to run the project's verify commands, sync docs, commit by concern, rename branch, and open PR
|
|
78
73
|
|
|
79
74
|
### Parallel features
|
|
@@ -82,40 +77,14 @@ When features are independent, run them in parallel, one worktree and one sessio
|
|
|
82
77
|
|
|
83
78
|
### Autonomous ship
|
|
84
79
|
|
|
85
|
-
For features on a mature stack, chain the post-plan pipeline in one session. Approve the plan, invoke `canon:auto-ship`, and the skill runs implement → verify →
|
|
80
|
+
For features on a mature stack, chain the post-plan pipeline in one session. Approve the plan, invoke `canon:auto-ship`, and the skill runs implement → verify → ship sequentially.
|
|
86
81
|
|
|
87
82
|
- Use when the plan is tight and the stack has real verify commands and test coverage
|
|
88
|
-
- Autoship stops on: verify failure after one fix attempt,
|
|
83
|
+
- Autoship stops on: verify failure after one fix attempt, or hook failure
|
|
89
84
|
- A produced UI checklist does not stop it. The checklist rides to the draft pull request's evidence comment, and the closing block names how many visual boxes are still unchecked and who owes them
|
|
90
85
|
- Every stop leaves recoverable state. Fix and resume with `/git-ship`
|
|
91
86
|
- Skip autoship for auth, migrations, security-sensitive changes, or work where the plan itself is uncertain
|
|
92
87
|
|
|
93
|
-
#### What reaches review
|
|
94
|
-
|
|
95
|
-
Review findings split by origin before severity is read. One the branch inherited stops the chain, and one the run itself caused is repaired in place at any severity, bounded at a single pass. Origin is causation rather than authorship, so staleness the run induced in a file it never opened counts as its own and the plan's file list bounds what it builds rather than what it may repair.
|
|
96
|
-
|
|
97
|
-
Review is skipped when the diff is prose that only informs: every changed file matches `*.md` or `*.txt`, and none sits under a behavior path. Behavior paths cover skills and rules in both the authoring and the installed spelling, so the list matches whether a repository authors those surfaces or consumed them from the toolkit. Standards, `internal/`, and `tooling/` carry the authoring spelling alone, since none of the three reaches a session through a `.claude/` copy, and root `CLAUDE.md` is named as a file because a path prefix reaches nothing sitting in no folder.
|
|
98
|
-
|
|
99
|
-
Markdown under one states what an agent does, so a branch touching it reaches review while `docs/` and `wiki/` still skip and stay gated by `docs-sync`, `canon markdown audit`, and pre-push hooks.
|
|
100
|
-
|
|
101
|
-
An empty changed-file list stops the chain rather than counting as prose-only. The filename test passes vacuously on an empty set, which routed a branch past review instead of through it.
|
|
102
|
-
|
|
103
|
-
`canon autoship classify` answers that decision now, and the chain branches on the record it returns rather than on a session applying the list above. Three runs read past the list while it was prose, the last of them a driven arm that staged a file the list names and shipped a draft pull request with no review. The verb takes the names the chain already computed, so no second diff baseline resolves, and it names the file and the test that decided. [Review classification](../agents/review-classification.md) carries the record shape and the exit codes.
|
|
104
|
-
|
|
105
|
-
The list stays written in the skill body as the fallback for a target whose installed CLI predates the verb, since the two ship at different speeds. That fallback is never a skip: failing open is the defect the verb closes, so an absent subcommand routes to review rather than past it.
|
|
106
|
-
|
|
107
|
-
#### Memory in the chain
|
|
108
|
-
|
|
109
|
-
`git-ship` runs its verify gate and then opens on `memory-capture`, which sends what the session learned to the surface that owns it. `autoship` reaches the same step by invoking that skill at its Step 8 rather than restating the order. A fact about a domain carrying an entry in `canon/context/index.md` is routed to that entry, and `context-fold` folds it in on the next step, so it ships in the same pull request. Anything no entry owns stays a file in `.canon/memory/`.
|
|
110
|
-
|
|
111
|
-
Capture leads rather than trails because a routed fact edits a tracked file, which has to reach the branch before the commit steps run.
|
|
112
|
-
|
|
113
|
-
The chain ends at capture, and review is run on its own. Capture closes with a line naming `/canon:memory-review` once `canon records stale memory` counts 25 or more entries due, and says nothing below that.
|
|
114
|
-
|
|
115
|
-
Run `memory-review` standalone to curate the pen a batch at a time. Each pass takes the first 25 due entries in the order the stale verb reports, opening on those citing a path the tree no longer holds, and a named list overrides that order. An entry it retires moves to `.canon/memory/archive/` rather than being deleted, since a bulk pass has no undo. An entry it keeps is stamped with a `reviewed` date, which takes it out of the queue for 30 days.
|
|
116
|
-
|
|
117
|
-
The receipt is collected once every item on it has been decided, and it survives untouched while any item is still pending. Whichever runs first takes it: Apply collects the receipt it has resolved, and `context-fold` scans the folder on every shipped branch for one an earlier session left behind. Before the file goes, each declined item is folded into the entry it was about, since a promotion survives in its target and in git while a decline is recorded nowhere else. `canon standards memory` states what a fold writes and which entry types take one.
|
|
118
|
-
|
|
119
88
|
### UI polish
|
|
120
89
|
|
|
121
90
|
Verify the change manually in the browser. Invoke `canon:ui-checklist` if you need a written list of what to look at. For the fix itself, describe the change in Claude Code directly.
|
|
@@ -128,7 +97,7 @@ Verify the change manually in the browser. Invoke `canon:ui-checklist` if you ne
|
|
|
128
97
|
|
|
129
98
|
### Review
|
|
130
99
|
|
|
131
|
-
|
|
100
|
+
Review runs on the pull request. An independent session invokes `canon:review-pr` once `canon:git-ship` has opened it, and the worker answers what it posts with `canon:review-address`.
|
|
132
101
|
|
|
133
102
|
### UI-heavy project
|
|
134
103
|
|
package/docs/workflow/index.md
CHANGED
|
@@ -17,5 +17,5 @@ How a person and their agents run a feature, from the design tier through the pa
|
|
|
17
17
|
- [Parallel features](parallel-features.md): Run independent features in parallel worktrees, with the records and board every session shares
|
|
18
18
|
- [Skill map on request](skill-map-on-request.md): When to reach for the plugin skills that serve a request rather than a moment in a project's life
|
|
19
19
|
- [Skill map](skill-map.md): When to reach for each plugin skill, grouped by the moment a project meets it
|
|
20
|
-
- [Visual design workflow](visual-design-workflow.md): Tiered guide for design
|
|
20
|
+
- [Visual design workflow](visual-design-workflow.md): Tiered guide for design authoring with Claude Code
|
|
21
21
|
- [Zshrc aliases for Claude Code](zshrc-aliases.md): Shell aliases that shorten common Claude Code invocations
|
|
@@ -82,17 +82,17 @@ PR. The merge stays a manual human gate. Reliability comes from the plan being
|
|
|
82
82
|
complete enough that the cold session does not come back with questions, and
|
|
83
83
|
from merging promptly so the next PR does not rot against a moving main.
|
|
84
84
|
|
|
85
|
-
##
|
|
85
|
+
## The review layer
|
|
86
86
|
|
|
87
|
-
The worker's
|
|
88
|
-
|
|
87
|
+
The worker's chain carries no review step. The session that wrote the code is
|
|
88
|
+
structurally blind to its own misreadings, because the same misreading wrote
|
|
89
|
+
both the code and any review of it, so the first review a change gets is the
|
|
90
|
+
orchestrator's.
|
|
89
91
|
|
|
90
|
-
- Worker
|
|
92
|
+
- Worker gate, inside `auto-ship`: the session that wrote the code. Its job is "did I build the plan and does it pass?" The verify commands and the test order read decide whether the PR opens, and the draft mark holds the merge.
|
|
91
93
|
- Orchestrator review, via `review-pr`: a fresh session with cross-feature context (the board, a sibling PR in flight, a downstream contract). Its job is "is this right and does it fit?" It can question the plan itself. This is the merge gate.
|
|
92
94
|
|
|
93
|
-
|
|
94
|
-
light and let the orchestrator own the deep, independent one. The human read at
|
|
95
|
-
merge is the final gate. No layer repeats another.
|
|
95
|
+
The human read at merge is the final gate. No layer repeats another.
|
|
96
96
|
|
|
97
97
|
The orchestrator's pass also reads the pull request body against itself, which is
|
|
98
98
|
a vantage the worker never has. This repository squash-merges, so the body
|
|
@@ -190,7 +190,7 @@ coordination costs more than the change it was too small.
|
|
|
190
190
|
|
|
191
191
|
Two tiers hold work at different altitudes.
|
|
192
192
|
|
|
193
|
-
- Tasks (`.canon/tasks/`): the active few pulled into the current turn, one file each. Gitignored, high churn. Shape governed by `standards
|
|
193
|
+
- Tasks (`.canon/tasks/`): the active few pulled into the current turn, one file each. Gitignored, high churn. Shape governed by `canon standards tasks`. `priority.md` beside them carries execution order, and `backlog.md` carries what nobody is scheduling, both shaped by `canon standards board`.
|
|
194
194
|
- Edits: a few lines, done immediately with no ceremony.
|
|
195
195
|
|
|
196
196
|
Nothing above these sequences work into versions. Scope is stated in
|
|
@@ -12,7 +12,7 @@ When features are independent, run them in parallel instead of sequentially. Use
|
|
|
12
12
|
|
|
13
13
|
- Create a worktree per feature, then start a Claude Code session in each
|
|
14
14
|
- Invoke `canon:plan-feature` in each session. Plans land at the main worktree root as `.canon/plans/feature-<slug>.md`, one per feature, no collisions. Small features stay in chat and skip the file.
|
|
15
|
-
- Implement, verify, and review each feature independently. `
|
|
15
|
+
- Implement, verify, and review each feature independently. `ui-checklist` writes a per-branch checklist handoff there too (`tmp/handoff/ui-checklist/<slug>.md`) that `git-pr` posts to the pull request and removes, so parallel sessions do not overwrite each other. The slug is the branch name with any leading type segment dropped, so `feat/jwt-expiration` and the plan at `feature-jwt-expiration.md` meet on one name
|
|
16
16
|
- Ship each worktree separately with `canon:git-ship`
|
|
17
17
|
- For full autonomy per worktree, invoke `canon:auto-ship` instead of the manual chain. Approve the plan, walk away, come back to a pull request the chain marked as a draft and then read the flag back on. The mark says the work has had no review yet, and it holds no window, since readying a pull request to merge lifts it directly, an act reserved to the operator or to the controlling session that closed the review.
|
|
18
18
|
|
|
@@ -32,9 +32,9 @@ A constraint naming a track in flight carries the same problem past the handoff,
|
|
|
32
32
|
|
|
33
33
|
## Records at the main root
|
|
34
34
|
|
|
35
|
-
`.canon/plans
|
|
35
|
+
`.canon/plans/` and `.canon/review/` both resolve at the main worktree root, so artifacts created in any session are visible from any sibling worktree. A session inside a worktree reads them directly, since the file-editing tools refuse a main-root path but `Read` resolves normally. It writes a whole file through the shell and makes a change inside an existing file through a `canon` verb, which resolves the main root in-process. See [Claude Code and git worktrees](../../wiki/claude/worktrees.md) for why the tool refuses the write, and the fan-out section below for the domain-level guidance.
|
|
36
36
|
|
|
37
|
-
The plan's shape is fixed by `
|
|
37
|
+
The plan's shape is fixed by `claude/skills/plan-feature/references/plan.md`: the section list, the filename, and the contract its questions keep. Its lifecycle, from the session that writes it to the archive, is `claude/skills/plan-feature/references/plan-lifecycle.md`. Every question carries a `- Suggested:` line and an empty `- Answer:` slot, and a blank answer accepts the suggestion at execution time. That default is what makes a plan decision-ready in one pass, and it is the opposite of the contract an intake folder keeps, where an empty slot means nobody reached the item.
|
|
38
38
|
|
|
39
39
|
An execution that picks other than the suggestion rewrites the `- Suggested:` line as `overridden at execution to <pick>,` followed by the measurement that moved it, and leaves the slot blank. That fixed phrase is how a reader of the archived plan tells an override from a suggestion the execution accepted, since an authored suggestion often carries a number of its own. The same deviation takes one line in the open task's `## Findings`, which is the register that survives the plan being archived. A deviation from a question somebody already answered goes back to whoever answered it instead, since a filled slot is a decision already made.
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ An execution that picks other than the suggestion rewrites the `- Suggested:` li
|
|
|
42
42
|
|
|
43
43
|
`canon records push` carries these folders off the disk they live on, and `canon records pull` brings them back. Every top-level entry under `.canon/` is backed except `tmp`, `ordinal-locks`, and `.records.git`, so a folder added later enters the payload on its own rather than waiting on a name written into a list. Push names each folder it carries the first time it sees it, which is what keeps a stray folder visible instead of silently entering the payload. It refuses the whole push, naming each path, when a new or changed file is over 25 MB or carries a credential `canon secrets scan` would report. The history lives in a second git directory at `.canon/.records.git` with `.canon/` as its work tree, so every path a task file cites stays where it is.
|
|
44
44
|
|
|
45
|
-
A person points it at a private repository once and both verbs refuse until they have, and `push` refuses when that origin is also a remote of the project, since the payload is the
|
|
45
|
+
A person points it at a private repository once and both verbs refuse until they have, and `push` refuses when that origin is also a remote of the project, since the payload is the task board and the groundwork trails. `.husky/post-merge` runs the push after its archive loop, on every merge rather than only on one that closed a task. See [records push](../agents/records-push.md) for the refusal table.
|
|
46
46
|
|
|
47
47
|
`canon records size` reports what each of these folders holds, heaviest first, along with `.canon/tmp`. Each row carries the file count, the bytes, how many files were written in the last 7 and 30 days, and the dates of the least and most recently written one. Nothing fails on a number, because a record folder has no correct size. What the verb replaces is a reading somebody had to remember to take: the memory pen went from 44 entries to 236 between two counts made by hand a fortnight apart, and nothing reported the rate in between.
|
|
48
48
|
|
|
@@ -52,9 +52,9 @@ A person points it at a private repository once and both verbs refuse until they
|
|
|
52
52
|
|
|
53
53
|
A plan that ships is archived, never deleted. `canon tasks archive` moves it to `.canon/plans/archive/` alongside the task it belonged to and retargets that task's `Plan:` line at the new location, so a completed task still leads to the reasoning behind it. An archive sits inside the record folder it archives rather than beside it, so one ignore entry and one backed-folder entry cover a record and everything it has retired. The folder is gitignored, which is why a deleted plan had no recovery path. A plan cited by more than one task stays put until the last of them closes, since moving it early would strand every other pointer.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
An older branch review report takes the other route and is swept rather than archived. It sits flat in `.canon/review/` as `branch-<slug>.md`, the session addressing it read it once, and the durable record of what a review found is the comment `review-pr` posts on the pull request, so `context-fold` deletes any report whose branch is gone. The body that writes a report owns how long it lives, which leaves the shipping branch's own report on disk through the run that cites it and collects it a branch later. What that loses is a local-only review on a branch that never opened a pull request, which is why the report says so where a reader meets it.
|
|
56
56
|
|
|
57
|
-
`canon:context-fold` decides which task closed by reading the diff rather than the conversation. It resolves a merge base against `origin/main`, unions the committed diff with the working tree and untracked files, then matches unchecked outcomes on the board against what shipped. A task that shipped without ever being discussed still gets marked.
|
|
57
|
+
`canon:context-fold` decides which task closed by reading the diff rather than the conversation. It resolves a merge base against `origin/main`, unions the committed diff with the working tree and untracked files, then matches unchecked outcomes on the board against what shipped. A task that shipped without ever being discussed still gets marked. Decisions and design stay session-sourced, because a diff cannot carry a judgment. The requirements record is never folded. A direction change gets one report line naming `canon:document-health`, which reviews that record only when asked.
|
|
58
58
|
|
|
59
59
|
## Shipping a fan-out
|
|
60
60
|
|
|
@@ -81,7 +81,7 @@ Land any in-flight edit to a hotspot on `main` before fanning out where you can.
|
|
|
81
81
|
|
|
82
82
|
`.canon/tasks/` is gitignored and resolves at the main worktree root, so every session shares one board. One file per task is what keeps concurrent sessions from overwriting each other, since a gitignored board has no history to recover a lost write from. Its `index.md` is generated by a hook rather than by `bun run check`, because the whole-repo index walk skips gitignored folders.
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
A hand-maintained `priority.md` sits beside the index carrying execution order and what each task is waiting on, which the alphabetical index cannot express.
|
|
85
85
|
|
|
86
86
|
`canon tasks validate` reads a row against its own table before it reads anything the row claims. A blank or prose line closes the table above it, so a row stranded there is checked against the line behind it rather than parsed as a continuation, and a row that clears that test still has its cell count checked against its header. A `## Needs a plan` row that states its own position, searched for `<ordinal> here` or the bare word `last` anywhere in the cell rather than at its start, is checked against where it actually sits, which is what catches a gap, a duplicate, and a sequence starting somewhere other than first alike.
|
|
87
87
|
|
|
@@ -10,32 +10,29 @@ These two groups hold the skills no single moment in a project's life calls for,
|
|
|
10
10
|
|
|
11
11
|
## Generate an artifact on demand
|
|
12
12
|
|
|
13
|
-
| Skill | When to use
|
|
14
|
-
| ------------------------- |
|
|
15
|
-
| `canon:create-rule` | For a project-specific governance rule the toolkit does not ship
|
|
16
|
-
| `canon:create-skill` | For a new `SKILL.md`
|
|
17
|
-
| `canon:
|
|
18
|
-
| `canon:draft-
|
|
19
|
-
| `canon:draft-
|
|
20
|
-
| `canon:
|
|
21
|
-
| `canon:
|
|
22
|
-
| `canon:
|
|
23
|
-
| `canon:
|
|
24
|
-
| `canon:draft-
|
|
25
|
-
| `canon:record-screencast` | For recording a screencast draft, then composing the take into a finished mp4 when the draft asks for a wrap |
|
|
26
|
-
| `canon:draft-identity` | For a project's logo mark and its social card, drafted through `draft-and-pick`'s pick loop |
|
|
13
|
+
| Skill | When to use |
|
|
14
|
+
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| `canon:create-rule` | For a project-specific governance rule the toolkit does not ship |
|
|
16
|
+
| `canon:create-skill` | For a new `SKILL.md` |
|
|
17
|
+
| `canon:draft-doc` | For a brand-new `docs/` page, context entry, wiki reference page, or `README.md`, drafted against the standard for its kind |
|
|
18
|
+
| `canon:draft-ready` | For finished files a worker should copy, written as a ready folder with its overview, thin plan, and task |
|
|
19
|
+
| `canon:draft-figure` | For a hand-drawn figure or an architecture view inside an existing doc, drafted in Mermaid or freehand SVG |
|
|
20
|
+
| `canon:ci-workflow` | For a GitHub Actions workflow file |
|
|
21
|
+
| `canon:draft-slides` | For a deck, drawn as HTML slides in its own folder and rendered to editable PowerPoint |
|
|
22
|
+
| `canon:draft-screencast` | For a recording script with beats and defaults already seeded |
|
|
23
|
+
| `canon:record-screencast` | For recording a screencast draft, then composing the take into a finished mp4 when the draft asks for a wrap |
|
|
24
|
+
| `canon:draft-identity` | For a project's logo mark and its social card, drafted through `draft-and-pick`'s pick loop |
|
|
27
25
|
|
|
28
26
|
## Answer a question at any point
|
|
29
27
|
|
|
30
28
|
| Skill | When to use |
|
|
31
29
|
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
32
30
|
| `canon:canon-cli` | Before running an unfamiliar verb, a sync, or an install, to learn which command to run, which reference doc covers it, or what it overwrites, merges, or leaves alone |
|
|
33
|
-
| `canon:index-lookup` | To find where a topic is documented across the tracked `index.md` catalogs |
|
|
34
31
|
| `canon:youtube-transcripts` | When a video transcript is wanted in the repo as context |
|
|
35
32
|
| `canon:read-frames` | To read a recorded demo back frame by frame and report what each one shows, with no verdict on whether the recording looks right |
|
|
36
33
|
| `canon:teach-workspace` | To learn a subject across sessions, in a workspace that holds the progress |
|
|
34
|
+
| `canon:markdown-craft` | Before a substantial markdown edit, for the format and structure rules and the audit that follows |
|
|
37
35
|
| `canon:write-human` | Before drafting or revising prose, for voice, rhythm, and density |
|
|
38
|
-
| `canon:restate-plainly` | When an answer or a document has to be read again in plain words |
|
|
39
36
|
|
|
40
37
|
Every row answers a question rather than marking a point in a project's life, so filing one under a phase on the [skill map](skill-map.md) would send a reader to the wrong group.
|
|
41
38
|
|
|
@@ -14,14 +14,10 @@ Each row sits under the group its skill's `metadata.family` names. The landing p
|
|
|
14
14
|
|
|
15
15
|
## Set up a project
|
|
16
16
|
|
|
17
|
-
| Skill
|
|
18
|
-
|
|
|
19
|
-
| `canon:target-setup`
|
|
20
|
-
| `canon:
|
|
21
|
-
| `canon:sketch-design` | Before `design-extract`'s greenfield path, to trace a design direction from reference images or URLs |
|
|
22
|
-
| `canon:design-extract` | Before the first UI feature, to draft `canon/DESIGN.md` |
|
|
23
|
-
| `canon:deploy-app` | Once a project is ready to publish, to set up its Cloudflare or Vercel deploy and stop for token and domain |
|
|
24
|
-
| `canon:repo-metadata` | When the GitHub About text, homepage, or topics may have drifted, to reconcile them against the README |
|
|
17
|
+
| Skill | When to use |
|
|
18
|
+
| -------------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `canon:target-setup` | On a fresh scaffold, to detect the stack and run the install chain, or to reach one phase of it alone |
|
|
20
|
+
| `canon:deploy-app` | Once a project is ready to publish, to set up its Cloudflare or Vercel deploy and stop for token and domain |
|
|
25
21
|
|
|
26
22
|
## Decide what to build
|
|
27
23
|
|
|
@@ -43,8 +39,7 @@ Each row sits under the group its skill's `metadata.family` names. The landing p
|
|
|
43
39
|
| Skill | When to use |
|
|
44
40
|
| ----------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
45
41
|
| `canon:session-worktree` | At the plan-to-execute boundary, to get an isolated tree and branch, or to route a refused main-root write |
|
|
46
|
-
| `canon:auto-ship` | After plan approval, to chain implement, verify,
|
|
47
|
-
| `canon:project-commands` | When the project's own command needs running |
|
|
42
|
+
| `canon:auto-ship` | After plan approval, to chain implement, verify, draft PR |
|
|
48
43
|
| `canon:test-first` | Before implementing a planned change, to run its test red, green, then refactor |
|
|
49
44
|
| `canon:test-craft` | When writing or changing any test, to pick its layer and filter what it asserts |
|
|
50
45
|
| `canon:build-in-slices` | While building a plan, to commit each tested slice and note out-of-scope defects rather than fix them |
|
|
@@ -60,28 +55,23 @@ Each row sits under the group its skill's `metadata.family` names. The landing p
|
|
|
60
55
|
|
|
61
56
|
## Check the work before it leaves the branch
|
|
62
57
|
|
|
63
|
-
| Skill
|
|
64
|
-
|
|
|
65
|
-
| `canon:
|
|
66
|
-
| `canon:
|
|
67
|
-
| `canon:
|
|
68
|
-
| `canon:ux-audit` | To read UI source for missing states, edge cases, and inconsistencies |
|
|
69
|
-
| `canon:ux-measure` | To start the interface and measure paint, processor, and layout cost |
|
|
70
|
-
| `canon:ux-walkthrough` | To run a multi-finding inspection pass over a running app with the operator |
|
|
58
|
+
| Skill | When to use |
|
|
59
|
+
| ----------------------- | --------------------------------------------------------------------------------- |
|
|
60
|
+
| `canon:document-health` | When the documents themselves have to answer for length, placement, and staleness |
|
|
61
|
+
| `canon:ux-audit` | To read UI source for missing states, edge cases, and inconsistencies |
|
|
62
|
+
| `canon:ux-measure` | To start the interface and measure paint, processor, and layout cost |
|
|
71
63
|
|
|
72
64
|
## Ship it
|
|
73
65
|
|
|
74
|
-
| Skill
|
|
75
|
-
|
|
|
76
|
-
| `canon:git-ship`
|
|
77
|
-
| `canon:
|
|
78
|
-
| `canon:
|
|
79
|
-
| `canon:
|
|
80
|
-
| `canon:git-
|
|
81
|
-
| `canon:git-
|
|
82
|
-
| `canon:git-
|
|
83
|
-
| `canon:git-pr` | When a pull request needs a title and body written from the diff |
|
|
84
|
-
| `canon:memory-review` | When the pen has grown, to propose where each entry belongs |
|
|
66
|
+
| Skill | When to use |
|
|
67
|
+
| -------------------- | ---------------------------------------------------------------------------------- |
|
|
68
|
+
| `canon:git-ship` | To run the whole post-feature chain from the verify gate through open PR |
|
|
69
|
+
| `canon:context-fold` | When decisions diverged from the plan, or a shipped task needs its outcomes marked |
|
|
70
|
+
| `canon:docs-sync` | When a change since main left `README.md` or `docs/` stale |
|
|
71
|
+
| `canon:git-stage` | When the staged set spans several concerns and wants one commit each |
|
|
72
|
+
| `canon:git-commit` | When the staged set is one concern, or was staged hunk by hand |
|
|
73
|
+
| `canon:git-branch` | When a branch name needs generating or renaming to conventional form |
|
|
74
|
+
| `canon:git-pr` | When a pull request needs a title and body written from the diff |
|
|
85
75
|
|
|
86
76
|
## After the pull request opens
|
|
87
77
|
|
|
@@ -113,7 +103,5 @@ Each row sits under the group its skill's `metadata.family` names. The landing p
|
|
|
113
103
|
| Skill | When to use |
|
|
114
104
|
| ----------------------------- | -------------------------------------------------------------------------------------- |
|
|
115
105
|
| `canon:target-check` | In a target project, to report per domain what it holds against what the toolkit ships |
|
|
116
|
-
| `canon:seed-sync` | After a toolkit update, to reconcile installed seeds without losing customizations |
|
|
117
106
|
| `canon:canon-feedback` | When something in the toolkit is broken, missing, or off, to open an issue on it |
|
|
118
|
-
| `canon:canon-feedback-triage` | In the toolkit repo, to
|
|
119
|
-
| `canon:canon-rollout` | In the toolkit repo, to take one change out to every consuming project at once |
|
|
107
|
+
| `canon:canon-feedback-triage` | In the toolkit repo, to file the open feedback issues into an intake folder |
|