@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
package/README.md
CHANGED
|
@@ -99,7 +99,7 @@ Working with an agent rather than reading this yourself? It loads `CLAUDE.md` at
|
|
|
99
99
|
- [Operating model](docs/workflow/operating-model.md): orchestrator, planner, and worker roles for building across parallel sessions
|
|
100
100
|
- [Skill map](docs/workflow/skill-map.md): plugin skills grouped by the moment a project meets them
|
|
101
101
|
- [Skill map on request](docs/workflow/skill-map-on-request.md): plugin skills that serve a request rather than a moment
|
|
102
|
-
- [Visual design workflow](docs/workflow/visual-design-workflow.md): tiered guide for design
|
|
102
|
+
- [Visual design workflow](docs/workflow/visual-design-workflow.md): tiered guide for design authoring
|
|
103
103
|
- [Target projects](docs/target/projects.md): scaffold, add a domain later, sync upstream drift
|
|
104
104
|
- [Agents](docs/agents/index.md): CLI flags, exit codes, and JSON output shapes
|
|
105
105
|
- [Docs index](docs/index.md): every reference doc in this repo
|
|
@@ -29,7 +29,7 @@ From `addyosmani/agent-skills@2686b620`, [`skills/api-and-interface-design/SKILL
|
|
|
29
29
|
|
|
30
30
|
**Idempotency.** A stored key honored on retry, an atomic claim under a unique constraint, a reused key with a different body failing loudly, and retention past the longest retry. Adopted as four rules, keeping the reused-key rule, which is the one most often left out.
|
|
31
31
|
|
|
32
|
-
**Excuses, red flags, and a closing checklist.** The same source's skill anatomy, adopted toolkit-wide through `${CLAUDE_SKILL_DIR}
|
|
32
|
+
**Excuses, red flags, and a closing checklist.** The same source's skill anatomy, adopted toolkit-wide through `${CLAUDE_SKILL_DIR}/../create-skill/references/skill-practice.md`. Each excuse row here rebuts a reason a session gives when it is about to break a caller, such as "nobody depends on that field".
|
|
33
33
|
|
|
34
34
|
## Declined
|
|
35
35
|
|
|
@@ -9,20 +9,15 @@ description: What the post-plan pipeline is for, the gaps it closes, and why eve
|
|
|
9
9
|
|
|
10
10
|
Without this skill, the run from an approved plan to an open pull request is a conversation. A session implements, then asks what comes next, and the answer varies by session. A run that halts leaves no stated resume point, so the user reconstructs how far it got from the working tree.
|
|
11
11
|
|
|
12
|
-
Review is the step that varies most. It gets skipped on a diff that needed one, or spent on prose already gated by a hook. A file-extension test cannot separate the two, since a skill body and a documentation page are both markdown, so a branch changing what an agent does takes the skip a documentation branch earned.
|
|
13
|
-
|
|
14
12
|
## Must
|
|
15
13
|
|
|
16
14
|
- Take the approved plan for the branch as the scope, and implement only what it describes
|
|
17
15
|
- Load `build-in-slices` before implementing, so the build reaches history as tested slices rather than one uncommitted pass
|
|
18
16
|
- Give every step a stop condition, and leave the code on the branch and the receipts on disk at each one
|
|
19
|
-
-
|
|
20
|
-
- Check the branch's committed history for a test-order violation between verify and review, and report any finding without gating on it, matching the verb's own contract
|
|
21
|
-
- Split findings by origin, stopping on a critical or should-fix one the branch inherited and repairing one this run caused
|
|
22
|
-
- Own the review receipt's lifetime, since this chain writes it, cites it in its own closing block, and is the only body that can read whether the step keeping it is still using it
|
|
17
|
+
- Check the branch's committed history for a test-order violation between verify and ship, and report any finding without gating on it, matching the verb's own contract
|
|
23
18
|
- Delegate the ship sequence to `git-ship` rather than restating it, and name only what this chain adds to it
|
|
24
19
|
- Open the pull request as a draft before the continuous integration watch begins, since a pull request marked after it is mergeable for the length of the run
|
|
25
|
-
- Continue past a produced UI checklist rather than stopping on it, and report its unchecked boxes in the closing block, since the draft mark already holds the merge
|
|
20
|
+
- Continue past a produced UI checklist rather than stopping on it, and report its unchecked boxes in the closing block, since the draft mark already holds the merge
|
|
26
21
|
- Prove the draft target's head is the current branch and its state is open before marking it, and stop with nothing marked on a mismatch, since the number is retyped between steps and a draft mark on a release pull request holds that release
|
|
27
22
|
- Name the recovery for the stop it took, since the value of stopping is that the user knows where to resume
|
|
28
23
|
|
|
@@ -30,14 +25,9 @@ Review is the step that varies most. It gets skipped on a diff that needed one,
|
|
|
30
25
|
|
|
31
26
|
- Expand past the plan, refactor a neighbor, or touch a file outside it without reason
|
|
32
27
|
- Loop on a failed verify. One fix attempt against the reported errors, then stop.
|
|
33
|
-
- Fix
|
|
34
|
-
- Loop on a self-introduced finding. One repair pass, then stop, which is the bound a failed verify already carries.
|
|
35
|
-
- Read the plan's file list as the boundary on a repair. It scopes what the run builds, and a finding this run caused is in reach wherever it landed.
|
|
28
|
+
- Fix a failing check. The stop is deliberate, since a green pull request reached by auto-fix hides what broke.
|
|
36
29
|
- Restate the ship sequence. Two copies of one order drift with nothing comparing them, which is what the merge into `git-ship` closed.
|
|
37
30
|
- Skip that skill's own verify for repeating this chain's. The gate exists for the resumed run, and a chain that suppresses it leaves the resumed run reaching nothing.
|
|
38
|
-
- Run the memory Apply phase. Promoting an entry changes how the agent operates and ships as its own change.
|
|
39
|
-
- Read an empty changed-file list as prose-only. It satisfies that test vacuously and would route the branch past review instead of through it.
|
|
40
|
-
- Read a markdown extension as evidence the change only informs. A skill body, a governance rule, and a standard are behavior written in prose.
|
|
41
31
|
- Stop the chain or rewrite a commit over a test-order finding. The verb reports and never gates, and a commit already in history is a different act from the work this run is building.
|
|
42
32
|
|
|
43
33
|
## Guards
|
|
@@ -45,11 +35,9 @@ Review is the step that varies most. It gets skipped on a diff that needed one,
|
|
|
45
35
|
- Detached HEAD: stop, no slug resolves
|
|
46
36
|
- No approved plan at the branch-derived plan path: stop, name the branch the slug came from, and say the invocation carried no argument, so a plan or a task path may be passed
|
|
47
37
|
- Uncommitted changes unrelated to the plan: stop
|
|
48
|
-
- No diff baseline against main: stop
|
|
49
|
-
- Empty changed-file list: stop, and never advise removing the output from `.gitignore` to get past it
|
|
50
38
|
|
|
51
39
|
## Out of scope
|
|
52
40
|
|
|
53
41
|
- Writing the plan, which `plan-feature` owns. This chain starts from one already approved.
|
|
54
42
|
- The behavior of each step, owned by the skill invoked. This skill owns the order and the stop conditions.
|
|
55
|
-
- The ship sequence and the resume path after a stop, both of which `git-ship` owns. That skill is the tail of this chain, invoked at Step
|
|
43
|
+
- The ship sequence and the resume path after a stop, both of which `git-ship` owns. That skill is the tail of this chain, invoked at Step 6 rather than copied into it, so the overlap is one body reached two ways rather than two bodies stating one order.
|
|
@@ -1,36 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: auto-ship
|
|
3
|
-
description: Chains implement → verify →
|
|
4
|
-
disable-model-invocation: true
|
|
3
|
+
description: Chains implement → verify → ship after a feature plan is approved. Reads the plan the caller names, the plan a named task points at, or the plan for the current branch when none is named, runs the full pipeline in one session, and stops on any failure. Use when asked to "autoship", "ship this feature end to end", or "run the chain". Do NOT auto-trigger. Requires an approved plan file.
|
|
5
4
|
metadata:
|
|
6
5
|
family: build
|
|
7
6
|
---
|
|
8
7
|
|
|
9
8
|
# Auto ship
|
|
10
9
|
|
|
11
|
-
Chain the post-plan pipeline in a single run. Every step but the UI checklist has a stop condition. State is always recoverable on stop: code lives on the branch,
|
|
10
|
+
Chain the post-plan pipeline in a single run. Every step but the UI checklist has a stop condition. State is always recoverable on stop: code lives on the branch, plan still linked.
|
|
12
11
|
|
|
13
12
|
## Guards
|
|
14
13
|
|
|
15
|
-
- All `.canon/plans/`
|
|
16
|
-
- Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. This skill takes the stop rather than the `latest` fallback, since it commits and opens a pull request. If empty, stop: `❌ Detached HEAD. Checkout the feature branch first.` This slug is provisional. It is superseded once `session-worktree` runs, whether at Step 0 or before this chain began. Every later step keys its output on the slug that run resolves, being the worktree
|
|
14
|
+
- All `.canon/plans/` reads resolve at the main worktree root, not the current worktree. Resolve that root the way `session-worktree` does.
|
|
15
|
+
- Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. This skill takes the stop rather than the `latest` fallback, since it commits and opens a pull request. If empty, stop: `❌ Detached HEAD. Checkout the feature branch first.` This slug is provisional. It is superseded once `session-worktree` runs, whether at Step 0 or before this chain began. Every later step keys its output on the slug that run resolves, being the worktree and the branch, regardless of which plan Step 1 reads.
|
|
17
16
|
- Resolve `<plan>` in Step 1, ahead of any other read.
|
|
18
17
|
- If the working tree has uncommitted changes unrelated to the plan, stop: `❌ Uncommitted changes outside the plan. Commit or stash before autoshipping.`
|
|
19
18
|
|
|
20
|
-
## Diff baseline
|
|
21
|
-
|
|
22
|
-
Step 6 classifies the changed-file list to decide whether review runs. Resolve the base ref once:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD main 2>/dev/null
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Prefer `origin/main` over local `main`, since a local `main` trailing the remote pulls other people's merged commits into the list.
|
|
29
|
-
|
|
30
|
-
The baseline is unusable when no merge base resolves against either ref. Stop: `❌ No diff baseline against main. Fetch origin, then re-run autoship.`
|
|
31
|
-
|
|
32
|
-
The base equalling HEAD stays usable, since nothing need be committed before Step 8. The classifier diffs the base against the working tree, so every slice Step 2 already committed stays in the changed set. Do not port the read-only siblings' `base == HEAD` stop into this skill.
|
|
33
|
-
|
|
34
19
|
## Step 0: take the role, then enter a worktree
|
|
35
20
|
|
|
36
21
|
Invoke `canon:role-worker` first, whatever the worktree state. That skill states the boundaries, the lifetime, and the channel obligations of a session building one branch under one plan, and a dispatched worker reaches the role here and nowhere else. Report it rather than proceeding silently when `canon:role-worker` does not resolve.
|
|
@@ -49,7 +34,7 @@ When the invocation argument is a plan path or a bare slug, name the worktree fr
|
|
|
49
34
|
|
|
50
35
|
Resolve `<plan>` in this order, stopping at the first match:
|
|
51
36
|
|
|
52
|
-
1. **Caller-supplied task.** The invocation carried a path under `.canon/tasks/`. If it does not resolve to a file, stop: `❌ No task at <path>. Path was supplied, not derived, so check it and re-run.` Read that task's first `Plan:` line and take what it names as `<plan>`, per `${CLAUDE_SKILL_DIR}
|
|
37
|
+
1. **Caller-supplied task.** The invocation carried a path under `.canon/tasks/`. If it does not resolve to a file, stop: `❌ No task at <path>. Path was supplied, not derived, so check it and re-run.` Read that task's first `Plan:` line and take what it names as `<plan>`, per `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md`, reading `${CLAUDE_SKILL_DIR}/references/tier-failures.md` first for how the pointer resolves and the four stops it can take.
|
|
53
38
|
2. **Caller-supplied plan.** The invocation carried something else. Accept it as a plan path or a bare slug, in the same position `session-worktree` tier 0 accepts its name. A bare slug resolves to `.canon/plans/feature-<slug>.md`, and a path is taken as given from the main worktree root. If it does not resolve to a file, stop: `❌ No plan at <path>. Path was supplied, not derived, so check it and re-run.`
|
|
54
39
|
3. **Derived.** `.canon/plans/feature-<slug>.md`, from the `<slug>` the Guards derived. If it does not exist, stop: `❌ No approved plan at .canon/plans/feature-<slug>.md, where <slug> was derived from the current branch, <branch>. The invocation carried no argument, so pass a plan or a task path, or run /plan-feature first.`
|
|
55
40
|
|
|
@@ -61,11 +46,11 @@ Tier 1 stops on a `Plan:` line linking several plans, on a task carrying none, a
|
|
|
61
46
|
|
|
62
47
|
Test the shape of whatever `<plan>` resolved to before reading it as one, after all three tiers, since a file resolving under any tier can still be the wrong document.
|
|
63
48
|
|
|
64
|
-
Check for a `**Files to touch:**` or `## Files to touch` marker per `${CLAUDE_SKILL_DIR}
|
|
49
|
+
Check for a `**Files to touch:**` or `## Files to touch` marker per `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`, the one section every plan carries structurally and a task never does, where `## Outcomes` and `## Findings` are the task's own. If neither form is present, stop: `❌ <path> carries no plan sections. A plan lives at .canon/plans/feature-<slug>.md, and a task reaches one through its Plan: line only from .canon/tasks/. Point autoship at either and re-run.`
|
|
65
50
|
|
|
66
51
|
Read `<plan>` at the main worktree root. This file is the scope for this run.
|
|
67
52
|
|
|
68
|
-
Its sections and its answer contract are fixed by `${CLAUDE_SKILL_DIR}
|
|
53
|
+
Its sections and its answer contract are fixed by `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`. A blank `- Answer:` accepts the `- Suggested:` line above it, so an unanswered question is a decision this run executes rather than a reason to stop. When this run decides against that suggestion, rewrite the `- Suggested:` line as `overridden at execution to <pick>,` plus the measurement, leaving the `- Answer:` slot blank, and put the same deviation in one line under the open task's `## Findings`, per `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`.
|
|
69
54
|
|
|
70
55
|
## Step 2: implement
|
|
71
56
|
|
|
@@ -97,37 +82,11 @@ Never read a missing subcommand as clean. Read `${CLAUDE_SKILL_DIR}/references/v
|
|
|
97
82
|
|
|
98
83
|
## Step 5: UI checklist (conditional)
|
|
99
84
|
|
|
100
|
-
If the diff touches UI files (JSX, TSX, Vue, Svelte, HTML, or CSS under `src/`), invoke `canon:ui-checklist`, then continue to Step 6 whatever it returns, in every run. The Step
|
|
101
|
-
|
|
102
|
-
## Step 6: review
|
|
103
|
-
|
|
104
|
-
Classify the diff first. Take the union of `git diff --name-only <base>` and `git ls-files --others --exclude-standard`, resolving `<base>` per Diff baseline, then hand that set to the verb rather than reading it against the list below yourself:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
canon autoship classify --json <path>...
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
The verb reads names only and touches git not at all. Branch on the record's `decision` rather than on the exit code, which a shell function wrapping `canon` can flatten to zero.
|
|
111
|
-
|
|
112
|
-
- `skip`. Every path reads as prose and none states agent behavior. Skip review entirely and continue to Step 8.
|
|
113
|
-
- `review`. Invoke `canon:review-branch`. The record names the `file` that decided it and the `test` it failed, `extension` for a path that is not prose and `behavior-path` for prose that states what an agent does.
|
|
114
|
-
- `refused`, carrying reason `no-changes`. The changed set was empty, so take the stop below.
|
|
115
|
-
|
|
116
|
-
Say in the run whether the verb or the written fallback decided.
|
|
117
|
-
|
|
118
|
-
An empty list stops the chain rather than reading as prose-only, which it satisfies vacuously: `❌ No changed files to classify. Re-run when the plan has yet to produce its output. When the output is gitignored by design, autoship cannot ship it, so take the work out of the chain.` Never advise removing the output from `.gitignore`, which trades a stopped run for scratch committed into the repository.
|
|
119
|
-
|
|
120
|
-
### When the verb is absent
|
|
121
|
-
|
|
122
|
-
Never read an absent subcommand as a skip, since failing open would ship every branch unreviewed. Read `${CLAUDE_SKILL_DIR}/references/verb-absent.md` on meeting one, which carries the written test and the behavior paths it reads.
|
|
123
|
-
|
|
124
|
-
## Step 7: evaluate findings
|
|
125
|
-
|
|
126
|
-
Skip this step when Step 6 skipped review. Otherwise read `${CLAUDE_SKILL_DIR}/references/review-findings.md` before opening the review receipt. It carries how every finding splits by origin, which ones this run repairs and which stop the chain, and the one-pass bound on the repair.
|
|
85
|
+
If the diff touches UI files (JSX, TSX, Vue, Svelte, HTML, or CSS under `src/`), invoke `canon:ui-checklist`, then continue to Step 6 whatever it returns, in every run. The Step 6 draft mark holds the merge, so a stop here protects nothing. When it produces a checklist, read `${CLAUDE_SKILL_DIR}/references/ui-checklist.md` for the counts to hold before `git-pr` removes the file.
|
|
127
86
|
|
|
128
|
-
## Step
|
|
87
|
+
## Step 6: ship
|
|
129
88
|
|
|
130
|
-
Invoke `canon:git-ship`. That body owns the sequence, being the verify gate,
|
|
89
|
+
Invoke `canon:git-ship`. That body owns the sequence, being the verify gate, both doc syncs, staging, the commit grouping, the branch rename, the pull request, and the CI watch, along with the reason each step sits where it does. Read the order there and never here.
|
|
131
90
|
|
|
132
91
|
One thing this chain adds. Mark the pull request as a draft as soon as `git-ship`'s pull request step returns, ahead of its CI watch, naming the number that step returned rather than one resolved by branch. Read `${CLAUDE_SKILL_DIR}/references/draft-mark.md` on reaching that point for the one command that proves the target, marks it, and reads the flag back. A `false` read stops the chain, and never re-issue the mark on it.
|
|
133
92
|
|
|
@@ -137,20 +96,16 @@ Emit the Output block on the wake after `git-ship`'s background CI watch exits o
|
|
|
137
96
|
|
|
138
97
|
## Output
|
|
139
98
|
|
|
140
|
-
Respond with up to
|
|
99
|
+
Respond with up to two lines:
|
|
141
100
|
|
|
142
101
|
```plaintext
|
|
143
102
|
✅ Autoshipped (<state>): <PR url>
|
|
144
103
|
🖼️ <N> visual boxes unchecked (<M> taste), owed on the evidence comment of <PR url> to the operator, or to the UI reviewer for the boxes a driver can run
|
|
145
|
-
<N minor findings kept in .canon/review/branch-<slug>.md>
|
|
146
|
-
<N facts routed to context entries>
|
|
147
|
-
<N memories captured in .canon/memory/>
|
|
148
|
-
<the review line memory-capture returned>
|
|
149
104
|
```
|
|
150
105
|
|
|
151
|
-
`<state>` is whatever the Step
|
|
106
|
+
`<state>` is whatever the Step 6 read returned, being `draft` or `ready, unsupervised`, rather than the state the mark asked for.
|
|
152
107
|
|
|
153
|
-
Fill the second line from the counts Step 5 held, and omit it when no checklist was produced.
|
|
108
|
+
Fill the second line from the counts Step 5 held, and omit it when no checklist was produced.
|
|
154
109
|
|
|
155
110
|
This block replaces the one `git-ship` closes on rather than following it, since emitting both reports one run twice and buries the state under a `✅ Shipped` that does not name it.
|
|
156
111
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Draft mark
|
|
3
|
-
description: The one command auto-ship Step
|
|
3
|
+
description: The one command auto-ship Step 6 runs as git-ship's pull request step returns, which proves the target is this branch's open pull request, marks it a draft, and reads the flag back
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Mark the pull request a draft
|
|
7
7
|
|
|
8
|
-
Step
|
|
8
|
+
Step 6 of `auto-ship`. The session reads this file as `git-ship`'s pull request step returns, ahead of its CI watch.
|
|
9
9
|
|
|
10
10
|
Run the mark as one command, where the shell proves the target before the mark and reads the flag back after it:
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Failure recovery
|
|
3
|
-
description: The step an operator resumes from after each auto-ship stop point, since every stop leaves the code on the branch
|
|
3
|
+
description: The step an operator resumes from after each auto-ship stop point, since every stop leaves the code on the branch and the plan linked
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Failure recovery
|
|
@@ -16,11 +16,7 @@ Every stop point leaves recoverable state. The user resumes manually from the ap
|
|
|
16
16
|
| Task points at an archived plan | The work already shipped. Reopen the task against a live plan, or pass that plan's path directly. |
|
|
17
17
|
| Task's `Plan:` pointer resolves to nothing | Repoint the task's `Plan:` line at the plan that exists, then re-run |
|
|
18
18
|
| Resolved file carries no plan shape | Point autoship at a plan under `.canon/plans/feature-<slug>.md` or at a task under `.canon/tasks/`, then re-run |
|
|
19
|
-
| No diff baseline | Fetch origin so a merge base resolves against `main`, then re-run autoship |
|
|
20
|
-
| Empty changed-file list | Re-run once the plan produces tracked output. Ship gitignored output outside the chain, never by tracking it. |
|
|
21
19
|
| Branch collision on worktree entry | `session-worktree` Step 5 found `<slug>` already as a local branch. Resolve manually (rename or delete the stale branch), then re-run autoship. |
|
|
22
20
|
| Verify fails | Read logs, fix manually, run `/git-ship` |
|
|
23
|
-
| Inherited review findings | Fix findings, run `/git-ship` |
|
|
24
|
-
| Self-introduced finding survived | Read the receipt for what the one repair pass left open, fix it, run `/git-ship` |
|
|
25
21
|
| git-ship fails | Inspect hook or remote error, run again |
|
|
26
22
|
| Draft target is not this branch's | Nothing was marked. Read the number and `head=` from `git-pr`'s output, confirm they match, then run the mark by hand |
|
|
@@ -24,6 +24,6 @@ Tier 1 stops on four failures, and each names a different repair:
|
|
|
24
24
|
- The pointer resolves into a plans archive. Stop: `❌ <path> points at an archived plan, which describes work that already shipped. Reopen the task against a live plan, or pass that plan directly.` Test the resolved path rather than the task's outcomes or its `Pull request:` line, since a stale board gets its ticks wrong and the standard fixes where a shipped pointer lands.
|
|
25
25
|
- The pointer resolves to no file. Stop: `❌ <path> points at <target>, which does not exist. The citation is stale, so repoint the task or pass the plan path directly.`
|
|
26
26
|
|
|
27
|
-
An archive is `.canon/plans/archive/` and also the two older spellings `${CLAUDE_SKILL_DIR}
|
|
27
|
+
An archive is `.canon/plans/archive/` and also the two older spellings `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md` leaves in place for a project that archived plans before the folder nested, written from a task as `../plans-archive/` and `../.tmp/plans-archive/`. Test all three, since a shipped pointer in a project nobody migrated lands on the older two. Run the archive test ahead of the existence test, so a pointer into an archive that no longer holds the file still refuses as shipped work rather than as a stale citation.
|
|
28
28
|
|
|
29
29
|
Each tier fails for a different reason and says so. A supplied path resolving to nothing is a typo, a derived path resolving to nothing is a plan nobody wrote, and a task pointer resolving to nothing is a stale citation the board should have caught.
|
|
@@ -7,14 +7,14 @@ description: What auto-ship Step 5 holds when ui-checklist produces a checklist,
|
|
|
7
7
|
|
|
8
8
|
Step 5 of `auto-ship`. The session reads this file when `ui-checklist` has produced a checklist.
|
|
9
9
|
|
|
10
|
-
The chain continues to Step 6 here in every run, dispatched or hand-run, since the skill cannot tell the two apart and the draft mark at Step
|
|
10
|
+
The chain continues to Step 6 here in every run, dispatched or hand-run, since the skill cannot tell the two apart and the draft mark at Step 6 holds the merge either way.
|
|
11
11
|
|
|
12
12
|
Count two things in `.canon/tmp/handoff/ui-checklist/<slug>.md` at the main worktree root:
|
|
13
13
|
|
|
14
14
|
- `<N>`, the `- [ ]` lines
|
|
15
15
|
- `<M>`, how many of those end in `(taste)`
|
|
16
16
|
|
|
17
|
-
Hold both until the Output block. `git-pr` removes the file once it posts the evidence comment, so a count taken after Step
|
|
17
|
+
Hold both until the Output block. `git-pr` removes the file once it posts the evidence comment, so a count taken after Step 6 reads nothing.
|
|
18
18
|
|
|
19
19
|
The Output block's second line takes both counts. When every box is a taste box, `<N>` and `<M>` match and the boxes are owed to the operator alone, since a driver reports a taste box as needing a person's eyes rather than passing it, so say the operator and drop the UI reviewer clause.
|
|
20
20
|
|
|
@@ -1,36 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Verbs absent from an older binary
|
|
3
|
-
description: What auto-ship
|
|
3
|
+
description: What auto-ship Step 4 does when the installed canon binary carries no test-order subcommand
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# When the verb is absent
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Step 4 of `auto-ship`. The session reads this file when the installed binary answers the test-order verb with a missing subcommand, since the verb ships with the CLI and this body ships with the plugin.
|
|
9
9
|
|
|
10
10
|
## Step 4: test order
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## Step 6: review
|
|
15
|
-
|
|
16
|
-
The verb ships with the CLI and this body ships with the plugin, so a target holding an older binary meets a missing subcommand. Apply the written test by hand there, and say the fallback decided it.
|
|
17
|
-
|
|
18
|
-
Never read an absent subcommand as a skip. Failing open is the exact defect the verb closes, and a shell that answers `command not found` reaching a body that skips on anything other than a `skip` record would ship every branch unreviewed.
|
|
19
|
-
|
|
20
|
-
The skip needs both tests to pass: every changed file matches `*.md` or `*.txt`, and no changed file sits under a behavior path. On a pass, skip review entirely and continue to Step 8. Otherwise invoke `canon:review-branch`.
|
|
21
|
-
|
|
22
|
-
Behavior paths carry two spellings, the one a surface authors at and the one it reaches a session at, so the rule reads the same in a toolkit and in a project that consumed one:
|
|
23
|
-
|
|
24
|
-
- `claude/skills/` and `.claude/skills/`
|
|
25
|
-
- `governance/rules/` and `.claude/rules/`
|
|
26
|
-
- `standards/`, which is the authoring root and reaches a reader by resolution rather than by an install, so it carries no `.claude/` spelling
|
|
27
|
-
- `internal/` and `tooling/`, which hold the stack references and the seed documents a target is handed
|
|
28
|
-
- `CLAUDE.md` at the repository root, named as a file because a path prefix reaches nothing that sits in no folder
|
|
29
|
-
|
|
30
|
-
Markdown under one of them states what an agent does, so a change there is a behavior change wearing a prose extension. Everything outside them is informational, which keeps `docs/`, `README.md`, and `CHANGELOG.md` skipping without naming them. One behavior file sends the whole branch to review, since documentation shipped beside a behavior change does not cancel it.
|
|
31
|
-
|
|
32
|
-
Informational prose is already gated by `docs-sync`, `canon markdown audit`, and pre-push hooks. Running a code-style review on it burns tokens with no signal.
|
|
33
|
-
|
|
34
|
-
The list covers this toolkit's authoring layout and the layout it installs, which is not every layout. A project keeping executable prose where neither spelling reaches adds the path, and until it does every branch touching it skips review silently.
|
|
35
|
-
|
|
36
|
-
The verb reads the same set from `src/autoship/paths.ts`, so a path added here belongs there too and a path added there belongs here. Two copies is what the fallback costs, and it stands until a release retires the written half.
|
|
12
|
+
Report that the check did not run rather than reading a missing subcommand as clean, and continue to Step 5.
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
A backlog only grows while nothing can decline a row. This pass reads every row against the current tree, files one verdict per row for the operator, and later applies what they approved.
|
|
11
11
|
|
|
12
|
-
The record is an ordinary intake folder at `.canon/intake/<nn>-backlog-triage/`. Read `${CLAUDE_SKILL_DIR}
|
|
12
|
+
The record is an ordinary intake folder at `.canon/intake/<nn>-backlog-triage/`. Read `${CLAUDE_SKILL_DIR}/../plan-intake/references/intake.md` before writing any file in it, since it holds the item format, the frontmatter, the index shape, and the answer contract this skill is bound by. Read `${CLAUDE_SKILL_DIR}/../task-board/references/board.md` and `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md` before applying, since the first holds the backlog and the ordering file and the second holds the `Declined:` line.
|
|
13
13
|
|
|
14
14
|
## Guards
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@ The ship chain assumed the work arrives uncommitted. `git-ship` ran `git-stage`
|
|
|
23
23
|
|
|
24
24
|
## Must not
|
|
25
25
|
|
|
26
|
-
- Restate the scope floors
|
|
26
|
+
- Restate the scope floors of minimal edits and no unrequested features, which a scope call the skill makes already holds
|
|
27
27
|
- Carry simplicity or abstraction rules, which `code-craft` owns
|
|
28
28
|
- Name a feature flag pattern, since the slices of one branch merge as one pull request rather than reaching trunk one at a time
|
|
29
29
|
- Name a framework, a test runner, or a line-count threshold, none of which holds across stacks
|
|
@@ -30,7 +30,7 @@ External sources were read and filtered rather than imported. This file is the r
|
|
|
30
30
|
|
|
31
31
|
**Rule 0, simplicity first, and the abstraction red flags.** Declined because `code-craft` owns when an abstraction earns its place and when to write the plainest code that passes. Restating it here would put two owners on one rule.
|
|
32
32
|
|
|
33
|
-
**The rest of its scope section.** Declined
|
|
33
|
+
**The rest of its scope section.** Declined as a scope call this skill makes: its slices already keep to the plan, and minimal edits, no unrequested features, and edits limited to what the user named restate that in different words. Only the noticed list was new.
|
|
34
34
|
|
|
35
35
|
**Rule 3, feature flags for incomplete features.** Declined because the slices of one branch merge together as one pull request rather than reaching trunk one at a time, so nothing incomplete is exposed between them.
|
|
36
36
|
|
|
@@ -15,9 +15,7 @@ The inverse failure is quieter. A session that assumes a sync will pick up a cha
|
|
|
15
15
|
|
|
16
16
|
Being reachable is a separate problem from being right. This is a pure reference whose moment happens inside another skill's run, so nothing brings it up unless a body names it. Three sibling requirement files named it and routed nothing, because Claude Code loads `SKILL.md` as the entry and never opens the sibling. A route lives in a body or it does not exist, and a fourth requirement mention would repeat the same defect.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
A third gap sits beside the first two, aimed at a different question. `canon --help` lists every top-level verb and `canon docs` emits the toolkit's own reference corpus, but no reference skill pointed a session at either. The one skill that does, `canon-operator`, is user-invoked only and reaches them as a side effect of its own orientation step. A session guessing at a verb's name, or restating what a doc already answers, is the same missing-fact failure the overwrite gap names.
|
|
18
|
+
A third gap sits beside the first two, aimed at a different question. `canon --help` lists every top-level verb and `canon docs` emits the toolkit's own reference corpus, but no reference skill pointed a session at either. No skill does now. A session guessing at a verb's name, or restating what a doc already answers, is the same missing-fact failure the overwrite gap names.
|
|
21
19
|
|
|
22
20
|
## Must
|
|
23
21
|
|
|
@@ -39,7 +37,7 @@ A third gap sits beside the first two, aimed at a different question. `canon --h
|
|
|
39
37
|
|
|
40
38
|
## Out of scope
|
|
41
39
|
|
|
42
|
-
- Executing the sync, which the user runs
|
|
43
|
-
- Reconciling a customized seed section by section
|
|
40
|
+
- Executing the sync, which the user runs
|
|
41
|
+
- Reconciling a customized seed section by section, which an operator does by hand
|
|
44
42
|
- Deciding which stack, rule, or standard a project should install, which the setup skills resolve from live catalogs
|
|
45
|
-
- Diagnosing what a project is behind on
|
|
43
|
+
- Diagnosing what a project is behind on: `target-check`
|
|
@@ -42,11 +42,11 @@ No list of those paths ships in this body, since a copy would go stale on a diff
|
|
|
42
42
|
- An interactive run still prompts. `--write` skips the prompt, and `--check` refuses to write even with a TTY.
|
|
43
43
|
- Seeds are user-owned. Dictionary `.txt` files merge and sort. Other seeds are copy-once, so re-seeding a structured file means deleting it and syncing again.
|
|
44
44
|
- No command writes a standard into a project. A `.claude/standards/` folder from an older toolkit is inert, and deleting it costs nothing.
|
|
45
|
-
- For section-level customizations of a seed doc,
|
|
45
|
+
- For section-level customizations of a seed doc, merge by hand against the toolkit copy, not through `canon ... sync`.
|
|
46
46
|
|
|
47
47
|
## CLAUDE.md
|
|
48
48
|
|
|
49
|
-
- `CLAUDE.md` is a copy-once seed. No `canon` sync command ever updates it.
|
|
49
|
+
- `CLAUDE.md` is a copy-once seed. No `canon` sync command ever updates it. Merge it by hand against the toolkit copy, keeping the project's customizations.
|
|
50
50
|
|
|
51
51
|
## Source of truth
|
|
52
52
|
|
|
@@ -19,7 +19,7 @@ The last failure is the session's own effort. Asked to report, a session starts
|
|
|
19
19
|
- Name the surface and its type, since the toolkit routes on that rather than on the symptom
|
|
20
20
|
- Write the stated fallback for a field the session cannot fill, so an empty field reads as absent rather than as unreported
|
|
21
21
|
- Open a GitHub issue on the toolkit repo through the CLI so the report lands where triage reads it, and print the returned URL on its own line
|
|
22
|
-
-
|
|
22
|
+
- Surface the block and the reason when the issue call fails, since a failure that prints nothing leaves the report where nothing reads it
|
|
23
23
|
- Hold a report the operator marks sensitive, since the issue is public
|
|
24
24
|
- Fall back to printing the block when the CLI is absent, so the report still exists
|
|
25
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: canon-feedback
|
|
3
|
-
description: Format a report about something broken, missing, or off in canon and open it as a GitHub issue on the toolkit repo via `canon feedback
|
|
3
|
+
description: Format a report about something broken, missing, or off in canon and open it as a GitHub issue on the toolkit repo via `canon feedback`, where the toolkit's triage reads it. Use when asked to "send this to the toolkit", "report this to canon", "file toolkit feedback", or "give the toolkit feedback about X". Do NOT use for general complaints about other tooling, IDE issues, or in-project bugs that do not implicate canon surfaces.
|
|
4
4
|
metadata:
|
|
5
5
|
family: upkeep
|
|
6
6
|
---
|
|
@@ -76,7 +76,7 @@ The destination is a public GitHub issue on the toolkit repo, so the report leav
|
|
|
76
76
|
Before the pipe below, run the scan in `${CLAUDE_SKILL_DIR}/../../standards/publish.md` against the composed block, phase-label half included. Nothing else checks what reaches the remote, so this scan is the only gate.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
cat <<'EOF' | canon feedback
|
|
79
|
+
cat <<'EOF' | canon feedback
|
|
80
80
|
## Toolkit feedback
|
|
81
81
|
|
|
82
82
|
...
|
|
@@ -85,20 +85,17 @@ EOF
|
|
|
85
85
|
|
|
86
86
|
The CLI opens a GitHub issue on the toolkit repo, labeled `feedback` and each domain label the surface type names, such as `skills` for a plugin skill, and prints the issue URL, which this skill reports back on its own line. It needs `gh` authenticated. `git-issue` is not the route, since it files on the current repository and this report belongs on the toolkit's.
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
Read the outcome off stdout, never off the exit code, since a shell wrapper can flatten it. Stdout takes one of three shapes:
|
|
89
|
+
|
|
90
|
+
- A line opening with `https://` is the filed issue. Report the URL.
|
|
91
|
+
- A block opening with `## Toolkit feedback` is a failed call. The reason is on stderr, so show the block in chat with it and `📋 Paste this into an issue at https://github.com/erclx/canon/issues/new`.
|
|
92
|
+
- Empty stdout is a refusal. Step 3 says how to repair it from stderr.
|
|
89
93
|
|
|
90
94
|
If `canon` is not on PATH, fall back: print the block in chat and tell the user `📋 Copy the block above into a toolkit-repo session.`
|
|
91
95
|
|
|
92
96
|
## Step 3: read what the CLI said back
|
|
93
97
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- A named missing field. Add that heading with a real value or its stated fallback, then re-run. Do not report the defect as filed.
|
|
97
|
-
- `gh` absent or its call failed. The stderr names which, since installing `gh` and fixing an authenticated call are different repairs. Fall back to printing the block in chat.
|
|
98
|
-
|
|
99
|
-
A `--github` run from a toolkit checkout whose GitHub call fails warns and writes local scratch instead, which is a report filed on the other route rather than a failure.
|
|
100
|
-
|
|
101
|
-
## Notes
|
|
98
|
+
A report that was not filed reads one of two ways on stdout, and stderr carries the reason in both:
|
|
102
99
|
|
|
103
|
-
-
|
|
104
|
-
- The
|
|
100
|
+
- Empty stdout, with a named missing field on stderr. Add that heading with a real value or its stated fallback, then re-run. Do not report the defect as filed.
|
|
101
|
+
- The block on stdout, with `gh` absent or its call failed on stderr. The stderr names which, since installing `gh` and fixing an authenticated call are different repairs. Show the block in chat with the reason and the paste line from Step 2.
|
|
@@ -1,32 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: canon-feedback-triage
|
|
3
|
-
description: Why the feedback queue is read from GitHub rather than local scratch, and why triage
|
|
3
|
+
description: Why the feedback queue is read from GitHub rather than local scratch, and why triage files measured items instead of routing or implementing
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Canon feedback triage requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the feedback queue fills and nothing drains it. Reports arrive from projects the toolkit never sees, and a queue nobody reads on a schedule is the same as no queue.
|
|
10
|
+
Without this skill, the feedback queue fills and nothing drains it. Reports arrive from projects the toolkit never sees, and a queue nobody reads on a schedule is the same as no queue. A local folder looks like the right place to read, and it is the wrong one, because that content is per-machine session scratch that any cleanup removes.
|
|
11
11
|
|
|
12
|
-
Triage fails three ways once it starts.
|
|
13
|
-
|
|
14
|
-
The queue also fails to drain even when the work ships. A fix merged with no link back leaves its issue open, and the next triage re-reads work already done.
|
|
12
|
+
Triage fails three ways once it starts. An issue gets routed straight to a fix from a paragraph of description, which skips the step where scope is argued and the operator's call. An issue whose report contradicts itself gets a guess rather than a question, so the fix addresses a defect nobody confirmed. And the same issue gets filed twice, because two passes cannot see that the board already carries it.
|
|
15
13
|
|
|
16
14
|
## Must
|
|
17
15
|
|
|
18
16
|
- Read the durable queue rather than local session scratch
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- Ask on the issue when the report is unreadable, then move on rather than blocking the batch
|
|
17
|
+
- File one measured item per open issue into an intake folder, headed so an answer finds its issue
|
|
18
|
+
- File every open issue the board does not already carry, and name each skipped issue with its carrier
|
|
19
|
+
- Measure each claim against the tree rather than carrying the issue's figures forward
|
|
20
|
+
- Claim the folder through the CLI rather than picking an ordinal by hand
|
|
24
21
|
|
|
25
22
|
## Must not
|
|
26
23
|
|
|
27
|
-
-
|
|
28
|
-
- Implement a plan
|
|
29
|
-
-
|
|
24
|
+
- Post to the remote, whether a comment, a close, or a label
|
|
25
|
+
- Implement a fix or write a plan, which the answered item routes to
|
|
26
|
+
- Fill an answer slot, or read an empty one as agreement
|
|
27
|
+
- Write outside the folder it claimed
|
|
30
28
|
|
|
31
29
|
## Guards
|
|
32
30
|
|
|
@@ -36,5 +34,6 @@ The queue also fails to drain even when the work ships. A fix merged with no lin
|
|
|
36
34
|
## Out of scope
|
|
37
35
|
|
|
38
36
|
- Filing new feedback: `canon-feedback`
|
|
39
|
-
-
|
|
37
|
+
- Answering the filed items: `plan-intake-answer`
|
|
38
|
+
- Writing the plan a plan-worthy item needs: `plan-feature`
|
|
40
39
|
- Triage of issues carrying any other label, which surface here by design only under the feedback label
|