@erclx/canon 5.45.0 → 5.47.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/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/REQUIREMENT.md +15 -31
- package/claude/skills/auto-ship/REQUIREMENT.md +14 -25
- package/claude/skills/backlog-triage/REQUIREMENT.md +12 -23
- package/claude/skills/build-in-slices/REQUIREMENT.md +15 -25
- package/claude/skills/canon-cli/REQUIREMENT.md +15 -27
- package/claude/skills/canon-feedback/REQUIREMENT.md +10 -18
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +10 -15
- package/claude/skills/canvas-board/REQUIREMENT.md +14 -28
- package/claude/skills/ci-workflow/REQUIREMENT.md +12 -21
- package/claude/skills/code-craft/REQUIREMENT.md +14 -28
- package/claude/skills/codebase-layout/REQUIREMENT.md +14 -31
- package/claude/skills/context-fold/REQUIREMENT.md +15 -39
- package/claude/skills/context-fold/references/context.md +3 -3
- package/claude/skills/create-rule/REQUIREMENT.md +10 -24
- package/claude/skills/create-rule/SKILL.md +3 -0
- package/claude/skills/create-skill/REQUIREMENT.md +10 -21
- package/claude/skills/decision-escalate/REQUIREMENT.md +12 -24
- package/claude/skills/deploy-app/REQUIREMENT.md +12 -22
- package/claude/skills/deprecation-migration/REQUIREMENT.md +14 -42
- package/claude/skills/design-identity/REQUIREMENT.md +14 -20
- package/claude/skills/design-taste/REQUIREMENT.md +16 -57
- package/claude/skills/docs-sync/REQUIREMENT.md +14 -23
- package/claude/skills/document-health/REQUIREMENT.md +15 -29
- package/claude/skills/document-health/SKILL.md +2 -2
- package/claude/skills/document-repair/REQUIREMENT.md +32 -0
- package/claude/skills/document-repair/SKILL.md +76 -0
- package/claude/skills/document-repair/references/batches.md +44 -0
- package/claude/skills/draft-and-pick/REQUIREMENT.md +4 -3
- package/claude/skills/draft-doc/REQUIREMENT.md +4 -3
- package/claude/skills/draft-figure/REQUIREMENT.md +4 -3
- package/claude/skills/draft-identity/REQUIREMENT.md +4 -3
- package/claude/skills/draft-ready/REQUIREMENT.md +4 -3
- package/claude/skills/draft-screencast/REQUIREMENT.md +4 -3
- package/claude/skills/draft-slides/REQUIREMENT.md +4 -3
- package/claude/skills/draw-figure/REQUIREMENT.md +15 -39
- package/claude/skills/git-branch/REQUIREMENT.md +12 -26
- package/claude/skills/git-commit/REQUIREMENT.md +11 -15
- package/claude/skills/git-followup/REQUIREMENT.md +11 -22
- package/claude/skills/git-followup/SKILL.md +1 -0
- package/claude/skills/git-issue/REQUIREMENT.md +9 -15
- package/claude/skills/git-pr/REQUIREMENT.md +13 -32
- package/claude/skills/git-pr/SKILL.md +11 -2
- package/claude/skills/git-pr/references/closing-issues.md +47 -0
- package/claude/skills/git-pr/references/pr.md +62 -7
- package/claude/skills/git-ship/REQUIREMENT.md +13 -26
- package/claude/skills/git-split/REQUIREMENT.md +10 -17
- package/claude/skills/git-stage/REQUIREMENT.md +12 -18
- package/claude/skills/git-worktree/REQUIREMENT.md +15 -19
- package/claude/skills/make-deck/REQUIREMENT.md +13 -21
- package/claude/skills/markdown-craft/REQUIREMENT.md +9 -3
- package/claude/skills/plan-feature/REQUIREMENT.md +15 -24
- package/claude/skills/plan-groundwork/REQUIREMENT.md +12 -28
- package/claude/skills/plan-groundwork/SKILL.md +5 -2
- package/claude/skills/plan-groundwork/references/output.md +47 -1
- package/claude/skills/plan-intake/REQUIREMENT.md +11 -26
- package/claude/skills/plan-intake/references/intake.md +2 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +14 -29
- package/claude/skills/plan-intake-answer/SKILL.md +7 -1
- package/claude/skills/plan-ready/REQUIREMENT.md +17 -36
- package/claude/skills/pr-evidence/REQUIREMENT.md +11 -17
- package/claude/skills/read-frames/REQUIREMENT.md +3 -8
- package/claude/skills/record-screencast/REQUIREMENT.md +14 -17
- package/claude/skills/review-address/REQUIREMENT.md +14 -38
- package/claude/skills/review-address/SKILL.md +18 -6
- package/claude/skills/review-address/references/post-review-findings.md +4 -1
- package/claude/skills/review-address/references/rebase-only.md +14 -2
- package/claude/skills/review-craft/REQUIREMENT.md +14 -32
- package/claude/skills/review-pr/REQUIREMENT.md +15 -34
- package/claude/skills/review-pr/SKILL.md +9 -2
- package/claude/skills/review-pr/references/body-variants.md +29 -8
- package/claude/skills/review-pr/references/post.md +29 -10
- package/claude/skills/review-ui/REQUIREMENT.md +14 -39
- package/claude/skills/review-ui/SKILL.md +1 -0
- package/claude/skills/review-ui/references/post.md +2 -0
- package/claude/skills/review-ui/references/tick.md +3 -0
- package/claude/skills/role-orchestrator/REQUIREMENT.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +5 -0
- package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +9 -0
- package/claude/skills/role-reviewer/REQUIREMENT.md +15 -65
- package/claude/skills/role-reviewer/SKILL.md +8 -1
- package/claude/skills/role-worker/REQUIREMENT.md +2 -2
- package/claude/skills/role-worker/SKILL.md +3 -0
- package/claude/skills/script-screencast/REQUIREMENT.md +10 -16
- package/claude/skills/search-craft/REQUIREMENT.md +12 -36
- package/claude/skills/search-craft/SKILL.md +1 -1
- package/claude/skills/search-craft/references/adopted.md +2 -2
- package/claude/skills/session-compact/REQUIREMENT.md +13 -23
- package/claude/skills/session-map/REQUIREMENT.md +13 -29
- package/claude/skills/session-relay/REQUIREMENT.md +14 -58
- package/claude/skills/session-relay/SKILL.md +6 -0
- package/claude/skills/session-resume/REQUIREMENT.md +13 -27
- package/claude/skills/session-worktree/REQUIREMENT.md +14 -43
- package/claude/skills/systematic-debugging/REQUIREMENT.md +13 -34
- package/claude/skills/target-check/REQUIREMENT.md +16 -23
- package/claude/skills/target-setup/REQUIREMENT.md +11 -34
- package/claude/skills/task-board/REQUIREMENT.md +13 -22
- package/claude/skills/task-board/SKILL.md +7 -0
- package/claude/skills/task-board/references/decline.md +2 -2
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/task-complete/REQUIREMENT.md +11 -24
- package/claude/skills/task-complete/references/archive.md +4 -2
- package/claude/skills/teach-workspace/REQUIREMENT.md +14 -45
- package/claude/skills/test-craft/REQUIREMENT.md +15 -46
- package/claude/skills/test-first/REQUIREMENT.md +14 -20
- package/claude/skills/ui-checklist/REQUIREMENT.md +14 -29
- package/claude/skills/ui-checklist/SKILL.md +3 -3
- package/claude/skills/ux-audit/REQUIREMENT.md +3 -7
- package/claude/skills/ux-measure/REQUIREMENT.md +14 -28
- package/claude/skills/video-craft/REQUIREMENT.md +14 -27
- package/claude/skills/write-doc/REQUIREMENT.md +14 -24
- package/claude/skills/write-human/REQUIREMENT.md +15 -27
- package/claude/skills/youtube-transcripts/REQUIREMENT.md +9 -15
- package/docs/agents/context-audit.md +19 -12
- package/docs/agents/markdown-audit.md +15 -10
- package/docs/target/projects.md +2 -0
- package/docs/workflow/skill-map.md +6 -5
- package/docs/workflow/zshrc-aliases.md +3 -0
- package/governance/renames.toml +0 -2
- package/governance/rules/claude/output.md +5 -1
- package/governance/rules/code/routing.md +5 -1
- package/governance/stacks/base.toml +0 -1
- package/package.json +1 -1
- package/scripts/core/bootstrap.sh +1 -0
- package/src/claude/cases/workflow.ts +12 -0
- package/src/commands/context.ts +57 -3
- package/src/commands/labels.ts +149 -4
- package/src/commands/markdown.ts +188 -21
- package/src/commands/pr.ts +113 -4
- package/src/commands/sessions.ts +58 -11
- package/src/commands/tasks.ts +182 -0
- package/src/commands/worktrees.ts +2 -0
- package/src/context/coverage.ts +210 -0
- package/src/context/gate.ts +12 -3
- package/src/gate/stages.ts +1 -1
- package/src/init/steps.ts +45 -0
- package/src/intake/items.ts +14 -0
- package/src/labels/closing.ts +46 -0
- package/src/labels/density.ts +363 -0
- package/src/markdown/gated.ts +250 -0
- package/src/markdown/scope.ts +115 -2
- package/src/migrate/rename.ts +6 -0
- package/src/pr/evidence.ts +1 -1
- package/src/pr/rest.ts +2 -0
- package/src/pr/tick.ts +89 -0
- package/src/sessions/claim.ts +7 -0
- package/src/sessions/live.ts +79 -6
- package/src/sessions/registry.ts +11 -0
- package/src/sessions/resolve.ts +85 -7
- package/src/tasks/archive.ts +15 -4
- package/src/tasks/closes.ts +136 -0
- package/src/tasks/record.ts +1 -1
- package/src/worktrees/reclaim.ts +16 -1
- package/tooling/base/configs/scripts/verify.ts +1 -1
- package/tooling/base/seeds/.github/pull_request_template.md +1 -1
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +1 -1
- package/tooling/claude/seeds/CLAUDE.md +2 -2
- package/governance/rules/canon/task-scope.md +0 -12
|
@@ -7,44 +7,28 @@ description: Why a session changing what a caller can see needs stated rules on
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
A session changing a surface a caller depends on has nothing in front of it about what that caller can see or how a change lands without breaking it. It works for the one caller it opened, renames a field in place, and returns whatever record it held.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
The one skill nearest the subject leaves the pointer open. `codebase-layout` excludes shaping "a module's interface and seams" in its description and names no skill to take it, so a session routed away from layout on that question lands nowhere.
|
|
15
|
-
|
|
16
|
-
`review-craft` lists the consumers of a changed contract, but only once the change exists. A rename caught at review costs a second pass over a surface that was cheap to shape before its first caller.
|
|
12
|
+
No skill carries the subject, and the core code rule's two error bullets say nothing about exposure, versioning, or retries. `review-craft` lists a changed contract's consumers only once the change exists, when a rename costs a second pass over a surface that was cheap to shape before its first caller.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
- State Hyrum's Law as design rules
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- State
|
|
24
|
-
-
|
|
25
|
-
- State the four idempotency rules: store and honor a caller's key, claim it in one atomic step under a unique constraint, fail loudly on a reused key with a different body, and keep a key past the longest retry window
|
|
26
|
-
- Record the external sources adopted and declined with the reason for each, so a later session extends the position instead of re-deriving it
|
|
27
|
-
- Close with a table of the excuses a session gives for breaking a caller, each with its rebuttal, the red flags a session can see in its own diff, and a checklist each line of which answers yes or no against the surface the change produced
|
|
28
|
-
- Exclude a visual interface by name in the description, since `design-taste` already routes on drafting or judging an interface
|
|
16
|
+
- State Hyrum's Law as design rules, deciding what is observable and exposing no storage type, internal identifier, ordering, or timing by accident
|
|
17
|
+
- Write the contract before the body, with one error shape per surface carrying a stable code, and validate once at the boundary
|
|
18
|
+
- Make change additive by default, with new fields optional and nothing renamed, removed, or redefined in place, and the One-Version Rule for a caller that cannot pin
|
|
19
|
+
- State four idempotency rules: honor a caller's key, claim it atomically, fail loudly on a reused key with a different body, and keep it past the retry window
|
|
20
|
+
- Close with excuses, red flags, a checklist, and the external sources adopted and declined with the reason for each, and exclude visual interfaces by name in the description
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
32
|
-
- Name a framework, a protocol style, or a language in the body
|
|
33
|
-
- Restate the consumer-listing axis `review-craft` carries
|
|
34
|
-
-
|
|
35
|
-
- Import an external skill's tone, such as a law stated as absolute, or an excuse row rebutting an objection no session has raised
|
|
36
|
-
|
|
37
|
-
## Guards
|
|
38
|
-
|
|
39
|
-
- A change that stays behind an existing boundary and alters nothing a caller observes skips the skill
|
|
40
|
-
- A rename lands as an addition beside the old name, never in place, unless every caller lives in the same change and the change migrates each one
|
|
24
|
+
- Name a framework, a protocol style, or a language in the body
|
|
25
|
+
- Restate the consumer-listing axis `review-craft` carries, or cover the internals behind a boundary
|
|
26
|
+
- Land a rename in place unless every caller sits in the same change and the change migrates each one
|
|
41
27
|
|
|
42
28
|
## Out of scope
|
|
43
29
|
|
|
44
|
-
- Where the file holding a surface sits on disk
|
|
45
|
-
- Interface depth
|
|
46
|
-
- Listing the consumers a finished change breaks,
|
|
47
|
-
- A visual interface, its layout, and its look
|
|
48
|
-
- Retiring a surface and migrating its last consumers
|
|
49
|
-
- Protocol-specific guidance such as verbs, status codes, and pagination
|
|
50
|
-
- Whether the guidance changes what a session ships, which needs a measured with-and-without run rather than a rule here
|
|
30
|
+
- Where the file holding a surface sits on disk, which `codebase-layout` owns
|
|
31
|
+
- Interface depth and the internals behind a boundary, which `code-craft` owns
|
|
32
|
+
- Listing the consumers a finished change breaks, which `review-craft` owns
|
|
33
|
+
- A visual interface, its layout, and its look, which `design-taste` owns
|
|
34
|
+
- Retiring a surface and migrating its last consumers, which `deprecation-migration` owns
|
|
@@ -9,37 +9,26 @@ 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
|
+
A pull request opened ready stays mergeable through its CI run, and a draft mark typed against the wrong number holds someone else's release. Parallel batches sharing edge files conflict on each merge. A worker improvising the review wait polls issue comments and stalls with both reviewers idle.
|
|
13
|
+
|
|
12
14
|
## Must
|
|
13
15
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
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
|
|
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
|
|
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
|
|
22
|
-
- Stop a fan-in member after its verify and test order with a push and a done message rather than a pull request, and open an integrator's build by merging the member branches, since parallel batches sharing edge files put every open sibling into conflict on each merge
|
|
23
|
-
- Wait for both review families through `canon pr review-state --wait` once CI passes on a launch that named a controller, which alone dispatches the reviewers, bounded at the lift's own default, and hand the record to the controller on a timeout, since a worker improvising the read polled issue comments, never saw a UI close posted as a review, and stalled with both reviewers idle
|
|
24
|
-
- Name the recovery for the stop it took, since the value of stopping is that the user knows where to resume
|
|
16
|
+
- The approved plan is the scope, built in tested slices through `build-in-slices`, and every step stops with the code on the branch and the recovery for that stop named
|
|
17
|
+
- The ship sequence is delegated to `git-ship`, and the pull request is marked a draft before the CI watch, after proving its head is this branch and its state is open
|
|
18
|
+
- A test-order finding between verify and ship is reported without gating, and a produced UI checklist is reported in the closing block without stopping
|
|
19
|
+
- A fan-in member stops after verify with a push and a done message, and an integrator opens its build by merging the member branches
|
|
20
|
+
- On a launch naming a controller, both review families are awaited through `canon pr review-state --wait`, and a timeout hands the record to the controller
|
|
25
21
|
|
|
26
22
|
## Must not
|
|
27
23
|
|
|
28
24
|
- Expand past the plan, refactor a neighbor, or touch a file outside it without reason
|
|
29
|
-
- Loop on a failed verify
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- 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.
|
|
34
|
-
|
|
35
|
-
## Guards
|
|
36
|
-
|
|
37
|
-
- Detached HEAD: stop, no slug resolves
|
|
38
|
-
- 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
|
|
39
|
-
- Uncommitted changes unrelated to the plan: stop
|
|
25
|
+
- Loop on a failed verify or auto-fix a failing check, since a green pull request reached that way hides what broke
|
|
26
|
+
- Restate the ship sequence, or skip `git-ship`'s own verify for repeating this chain's
|
|
27
|
+
- Stop the chain or rewrite a commit over a test-order finding
|
|
28
|
+
- Run on a detached HEAD, a missing plan, or uncommitted changes unrelated to the plan
|
|
40
29
|
|
|
41
30
|
## Out of scope
|
|
42
31
|
|
|
43
|
-
- Writing the plan, which `plan-feature` owns
|
|
44
|
-
- The behavior of each step,
|
|
45
|
-
- The ship sequence and the resume path after
|
|
32
|
+
- Writing the plan, which `plan-feature` owns
|
|
33
|
+
- The behavior of each step, which the skill that step invokes owns
|
|
34
|
+
- The ship sequence and the resume path after its stops, which `git-ship` owns
|
|
@@ -7,41 +7,30 @@ description: Why the backlog gets a measured verdict per row with a lean toward
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the backlog only grows. `task-board` declines one named task and `task-complete` archives one,
|
|
10
|
+
Without this skill, the backlog only grows. `task-board` declines one named task and `task-complete` archives one, but nothing reads the backlog as a whole, and the orchestrator's re-test only clears a row upward. A long backlog has no surface that can say which rows still matter.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Judged by its own task file, every row reads live and stays. Applied without the operator, verdicts decline rows on silence, on a board with no history to restore them. Measuring only that a defect still exists keeps nearly everything, since a row filed against the tree almost always reproduces.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Split filing from applying by the operator's answer, so filing writes only inside the intake folder and applying writes only what was approved
|
|
22
|
-
- Apply through the existing decline, outcome, and archive verbs
|
|
23
|
-
- Leave the folder slug on every task a verdict touched, so a re-run writes nothing twice
|
|
24
|
-
- Refuse to apply under a planner or worker session, and hand a promote to a live orchestrator rather than writing the ordering file beside it
|
|
16
|
+
- Every row is measured against the tree and the log, carrying a count, a path, or a commit rather than the task file's claim
|
|
17
|
+
- Keep or promote is suggested only for a row naming a cost someone hit or a reach into what the project ships, and decline for a row whose defect merely still exists
|
|
18
|
+
- Verdicts are filed into an ordinary intake folder, in the suggestion line and item heading, so the intake verbs read them unchanged
|
|
19
|
+
- Applying writes only what the operator approved, through the existing decline, outcome, and archive verbs, and archive names the commit or pull request per outcome position
|
|
20
|
+
- Every task a verdict touched carries the folder slug, so a re-run writes nothing twice
|
|
25
21
|
|
|
26
22
|
## Must not
|
|
27
23
|
|
|
28
|
-
- Fill an
|
|
29
|
-
- Read a suggestion carrying no verdict token as keep
|
|
24
|
+
- Fill an answer slot, or read a verdict from an empty answer, a free-text answer, or a suggestion with no verdict token
|
|
30
25
|
- Treat age as evidence for or against a row
|
|
31
26
|
- Retry an archive with guessed outcome positions after a refusal
|
|
27
|
+
- Apply under a planner or worker session, or write the ordering file beside a live orchestrator rather than handing it the promote
|
|
32
28
|
- Change the intake standard, the intake skills, or the task verbs to fit triage
|
|
33
29
|
|
|
34
|
-
## Guards
|
|
35
|
-
|
|
36
|
-
- No backlog file: stop
|
|
37
|
-
- Unread items in the newest triage folder: stop and name the answer skill
|
|
38
|
-
- An item carrying no answer slot: stop and name the folder to repair
|
|
39
|
-
- Apply under a session named for the planner or worker role: stop before writing
|
|
40
|
-
|
|
41
30
|
## Out of scope
|
|
42
31
|
|
|
43
32
|
- Filing a brain dump, which `plan-intake` owns
|
|
44
33
|
- Answering the filed items, which `plan-intake-answer` owns
|
|
45
|
-
- Creating or declining one named task outside a triage, which `task-board` owns
|
|
46
|
-
-
|
|
47
|
-
-
|
|
34
|
+
- Creating or declining one named task outside a triage, which `task-board` owns
|
|
35
|
+
- Archiving one named task outside a triage, which `task-complete` owns
|
|
36
|
+
- Ordering the rows a promote lands under `## Needs a plan`, which `role-orchestrator` owns
|
|
@@ -7,39 +7,29 @@ description: Why a building session needs stated rules for working through a pla
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Nothing says how a session works through a plan once it starts building. `test-first` loops per behavior and stops at refactor, and `auto-ship` says to implement only what the plan describes. No skill asks for a commit per slice, a build left passing between slices, or a noticed defect written down rather than fixed.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Without those, a session builds in one pass and tests at the end, so the diff outgrows what anyone can read and a late failure could come from any change. A defect found on the way gets fixed in the same diff, and the review reads two changes as one.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Keep each commit safe to revert
|
|
19
|
-
- Route a defect noticed outside the plan to the open task's
|
|
20
|
-
-
|
|
21
|
-
- Record the external sources adopted and declined with the reason for each, so a later session extends the position instead of re-deriving it
|
|
22
|
-
- Close with a table of the excuses a session gives for skipping a slice commit or widening scope, each with its rebuttal, the red flags a session can see in its own work mid-task, and a checklist each line of which answers yes or no against the branch the build produced
|
|
16
|
+
- Work each slice as implement, run its tests and the checks its change could affect, commit through `git-commit`, then move on from the committed state
|
|
17
|
+
- Choose the next slice as one path end to end, the riskiest piece first, and the contract first when two sides are written against it
|
|
18
|
+
- Keep each commit safe to revert alone, with one logical change, a test committed with or ahead of its code, and no delete sharing a commit with its replacement
|
|
19
|
+
- Route a defect noticed outside the plan to the open task's findings or the handover, and leave its file unchanged
|
|
20
|
+
- Re-run a check only after an edit it could see, never to skip a chain's verify step, then close with excuses, red flags, a checklist, and the sources adopted and declined with the reason for each
|
|
23
21
|
|
|
24
22
|
## Must not
|
|
25
23
|
|
|
26
|
-
- Restate the scope floors of minimal edits and no unrequested features
|
|
27
|
-
- Carry simplicity or abstraction rules,
|
|
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
|
-
- Name a framework, a test runner, or a line-count threshold, none of which holds across stacks
|
|
24
|
+
- Restate the scope floors of minimal edits and no unrequested features
|
|
25
|
+
- Carry simplicity or abstraction rules, a feature flag pattern, a framework, or a line-count threshold
|
|
30
26
|
- Describe a raw `git commit` recipe in place of `git-commit`
|
|
31
|
-
|
|
32
|
-
## Guards
|
|
33
|
-
|
|
34
|
-
- A change that is already one behavior in one place skips the skill
|
|
35
|
-
- A defect outside the plan is fixed on the branch only when the plan's own change cannot pass without it, and the commit says so
|
|
27
|
+
- Fix an outside defect on the branch unless the plan's own change cannot pass without it, and then say so in the commit
|
|
36
28
|
|
|
37
29
|
## Out of scope
|
|
38
30
|
|
|
39
|
-
- The red, green, refactor loop inside one behavior
|
|
40
|
-
- Which layer a test belongs at
|
|
41
|
-
- The shape of a function, class, or module a slice writes
|
|
42
|
-
- What a building session may write
|
|
43
|
-
- The message format of a commit
|
|
44
|
-
- Safe defaults for a new interface, which belong to the skill shaping what a caller sees
|
|
45
|
-
- Whether the guidance changes what a session ships, which needs a measured with-and-without run rather than a rule here
|
|
31
|
+
- The red, green, refactor loop inside one behavior, which `test-first` owns
|
|
32
|
+
- Which layer a test belongs at, which `test-craft` owns
|
|
33
|
+
- The shape of a function, class, or module a slice writes, which `code-craft` owns
|
|
34
|
+
- What a building session may write and whom it reports to, which `role-worker` owns
|
|
35
|
+
- The message format of a commit, which `git-commit` owns
|
|
@@ -7,40 +7,28 @@ description: Why a session is routed from a job to its canon verb from one place
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a session guesses at a verb from its name
|
|
10
|
+
Without this skill, a session guesses at a verb from its name. It learns afterward what the verb did, because `install` and `sync` differ per domain, with some surfaces overwriting, some merging, and some written once and never again. Golden configs and edited rules get replaced unwarned. A copy-once seed waits on a sync that never rewrites it.
|
|
11
11
|
|
|
12
|
-
The
|
|
13
|
-
|
|
14
|
-
The inverse failure is quieter. A session that assumes a sync will pick up a change edits a seed and waits for an update that never comes, because the seed is copy-once and no sync command writes it again. Both failures are one missing fact available before the command runs.
|
|
15
|
-
|
|
16
|
-
A third gap is the route itself. `canon --help` lists every top-level verb by a one-line description, and a session with a job in hand pays a `--help` read per candidate to find the one that does it, or picks by name and lands on the wrong one. The job-to-verb mapping is the fact the session needs and no verb answers.
|
|
17
|
-
|
|
18
|
-
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. A route lives in a body or it does not exist, and a mention in a sibling's requirement file is not one.
|
|
12
|
+
The route is missing too. `canon --help` lists each verb in one line, so a session with a job pays a read per candidate or picks by name. The job-to-verb mapping is the fact it needs, and nothing brings it up unless a body names it.
|
|
19
13
|
|
|
20
14
|
## Must
|
|
21
15
|
|
|
22
|
-
- Name each target-usable top-level verb by its job, never its subcommands or flags
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Defer to `canon docs install-and-sync` when it and this summary disagree, since the summary is a copy and the doc is the source
|
|
16
|
+
- Name each target-usable top-level verb by its job, never its subcommands or flags, and route an author-and-render verb to the skill that owns it
|
|
17
|
+
- Warn before a verb that can lose the project's edits runs, naming what it replaces, and defer to `canon docs install-and-sync` where the summary disagrees
|
|
18
|
+
- Point to `canon <verb> --help --all` and `canon docs agents` for subcommands, flags, and the invocation contract, and have the session read that help before running a verb no skill body spells out
|
|
19
|
+
- Route a verb or surface the skill does not cover to `canon docs` rather than to an inference from a similar row
|
|
20
|
+
- Fail a coverage test naming each top-level verb that the body neither carries nor exempts, and each exemption naming something no longer a verb
|
|
28
21
|
|
|
29
22
|
## Must not
|
|
30
23
|
|
|
31
|
-
- Run, or send the session to run, a `canon` command that writes or installs
|
|
32
|
-
- List a subcommand, a flag, or a JSON shape
|
|
33
|
-
- List a verb that only works inside the toolkit repository
|
|
34
|
-
- Take a mention in a sibling's requirement file as an inbound route
|
|
35
|
-
|
|
36
|
-
## Guards
|
|
37
|
-
|
|
38
|
-
- A test fails naming each top-level verb in `COMMAND_GROUPS` that the body neither carries as `canon <verb>` nor exempts, and fails again when an exemption names something that is no longer a verb
|
|
39
|
-
- A verb or surface the skill does not cover routes to `canon docs` rather than to an inference from a similar row
|
|
24
|
+
- Run, or send the session to run, a `canon` command that writes or installs
|
|
25
|
+
- List a subcommand, a flag, or a JSON shape, which restates the docs
|
|
26
|
+
- List a verb that only works inside the toolkit repository
|
|
27
|
+
- Take a mention in a sibling's requirement file as an inbound route, since the pointer lives in the body that needs it
|
|
40
28
|
|
|
41
29
|
## Out of scope
|
|
42
30
|
|
|
43
|
-
- Executing the sync, which the user
|
|
44
|
-
- Reconciling a customized seed section by section, which an operator
|
|
45
|
-
- Deciding which stack, rule, or standard a project
|
|
46
|
-
- Diagnosing what a project is behind on
|
|
31
|
+
- Executing the sync, which the user owns
|
|
32
|
+
- Reconciling a customized seed section by section, which an operator owns
|
|
33
|
+
- Deciding which stack, rule, or standard a project installs, which `target-setup` owns
|
|
34
|
+
- Diagnosing what a project is behind on, which `target-check` owns
|
|
@@ -7,36 +7,28 @@ description: Why a toolkit defect is reported from session context alone, and wh
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a toolkit defect noticed
|
|
10
|
+
Without this skill, a toolkit defect noticed in a target project dies with the session. The user retypes a report later without the context, so it is reported badly or not at all. A block printed in chat needs a copy-paste into another repository, which gets skipped under time pressure, and a report naming no surface cannot be routed.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
The last failure is the session's own effort. Asked to report, a session starts diagnosing instead, searching the toolkit and reading its surfaces to find the cause. That spends the context the report was meant to capture cheaply, and it produces a diagnosis from a project that cannot see the toolkit's current source.
|
|
12
|
+
Asked to report, a session also starts diagnosing, which spends the context the report was meant to capture and yields a diagnosis from a project that cannot see the toolkit's source.
|
|
15
13
|
|
|
16
14
|
## Must
|
|
17
15
|
|
|
18
|
-
- Build the report from what the session already holds
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
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
|
-
- Carry the whole request in the issue body alone, since a comment is easy to miss and a body and a comment that differ leave triage choosing
|
|
16
|
+
- Build the report from what the session already holds, name the surface and its type, and write the stated fallback for a field it cannot fill
|
|
17
|
+
- Carry the whole request in the issue body alone, since a body and a comment that differ leave triage choosing
|
|
18
|
+
- Open a GitHub issue on the toolkit repository through the CLI and print the returned URL on its own line
|
|
19
|
+
- Surface the block and the reason when the issue call fails or the CLI is absent, so the report still exists
|
|
24
20
|
- Hold a report the operator marks sensitive, since the issue is public
|
|
25
|
-
- Fall back to printing the block when the CLI is absent, so the report still exists
|
|
26
21
|
|
|
27
22
|
## Must not
|
|
28
23
|
|
|
29
24
|
- Probe the project, list files, grep, or read toolkit surfaces to enrich the report
|
|
30
|
-
- Guess the surface type when the session is ambiguous
|
|
25
|
+
- Guess the surface type when the session is ambiguous
|
|
31
26
|
- Diagnose or fix, which needs the toolkit's source rather than the target's
|
|
32
|
-
|
|
33
|
-
## Guards
|
|
34
|
-
|
|
35
|
-
- Nothing in session context pointing at a toolkit issue stops, since a report assembled from nothing wastes the triage it reaches
|
|
27
|
+
- Report from a session holding nothing that points at a toolkit issue
|
|
36
28
|
|
|
37
29
|
## Out of scope
|
|
38
30
|
|
|
39
31
|
- Fixing the defect, which happens in the toolkit repository against its own source
|
|
40
|
-
- Draining the queue this fills
|
|
41
|
-
- Filing an issue against the current project, which `git-issue`
|
|
32
|
+
- Draining the queue this fills, which `canon-feedback-triage` owns
|
|
33
|
+
- Filing an issue against the current project, which `git-issue` owns
|
|
42
34
|
- Complaints about tooling the toolkit does not own
|
|
@@ -7,33 +7,28 @@ description: Why the feedback queue is read from GitHub rather than local scratc
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the feedback queue fills and nothing drains it.
|
|
10
|
+
Without this skill, the feedback queue fills and nothing drains it. A local folder looks like the place to read and is the wrong one, since that scratch is per-machine and any cleanup removes it.
|
|
11
11
|
|
|
12
|
-
Triage fails three ways
|
|
12
|
+
Triage then fails three ways. An issue routes to a fix from a paragraph, which skips the scope argument. A self-contradicting report gets a guess instead of a question. The same issue gets filed twice because two passes cannot see the board carries it.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
- Read the durable queue rather than local session scratch
|
|
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
|
|
16
|
+
- Read the durable queue through the `gh` CLI rather than local session scratch, and stop when it is absent or unauthenticated
|
|
17
|
+
- File one measured item per open issue into an intake folder, headed so an answer finds its issue, and name each skipped issue with its carrier
|
|
19
18
|
- Measure each claim against the tree rather than carrying the issue's figures forward
|
|
20
19
|
- Claim the folder through the CLI rather than picking an ordinal by hand
|
|
20
|
+
- Report an empty queue as nothing open rather than widening the label to find work
|
|
21
21
|
|
|
22
22
|
## Must not
|
|
23
23
|
|
|
24
24
|
- Post to the remote, whether a comment, a close, or a label
|
|
25
|
-
- Implement a fix or write a plan
|
|
25
|
+
- Implement a fix or write a plan
|
|
26
26
|
- Fill an answer slot, or read an empty one as agreement
|
|
27
27
|
- Write outside the folder it claimed
|
|
28
28
|
|
|
29
|
-
## Guards
|
|
30
|
-
|
|
31
|
-
- The `gh` CLI absent or unauthenticated stops, since the queue is unreachable
|
|
32
|
-
- An empty queue reports nothing open rather than widening the label to find work
|
|
33
|
-
|
|
34
29
|
## Out of scope
|
|
35
30
|
|
|
36
|
-
- Filing new feedback
|
|
37
|
-
- Answering the filed items
|
|
38
|
-
- Writing the plan a plan-worthy item needs
|
|
39
|
-
-
|
|
31
|
+
- Filing new feedback, which `canon-feedback` owns
|
|
32
|
+
- Answering the filed items, which `plan-intake-answer` owns
|
|
33
|
+
- Writing the plan a plan-worthy item needs, which `plan-feature` owns
|
|
34
|
+
- Issues carrying any other label, which no skill here owns
|
|
@@ -7,42 +7,28 @@ description: Scope boundary for driving the local design canvas, and the line be
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a session asked to draw on the canvas writes frames
|
|
10
|
+
Without this skill, a session asked to draw on the canvas writes frames nothing is serving and reports them drawn. It trusts a passing capture, though a blank shell passes every capture while the operator sees an empty tab. From a linked worktree it writes a copy the canvas never serves, and it captures after every edit.
|
|
11
11
|
|
|
12
|
-
It reads "this one" from the conversation rather than
|
|
13
|
-
|
|
14
|
-
It writes frames from a linked worktree with the file tools, which refuse the main-root path and offer a worktree copy the canvas never serves. It captures after every edit, filling session scratch with images of drafts nobody picked.
|
|
15
|
-
|
|
16
|
-
When the operator picks a frame, the session leaves the decision on the canvas and cites the frame as the design, so the project's design document never learns it and a gitignored file becomes the only record.
|
|
12
|
+
It reads "this one" from the conversation rather than the operator's selection, or acts on a stale element pick and edits the wrong element. It restyles through a class while the operator's inspector edit sits inline, so the change never shows. A picked frame stays on the canvas as the only record, and the design document never learns it.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Read the operator's selection when they point at something, and treat a stale element pick as unknown
|
|
26
|
-
- Read a frame's inline styles before restyling it, and say which operator edits were kept and which dropped
|
|
27
|
-
- Capture once per finished frame or page rather than after every edit
|
|
28
|
-
- Carry a picked value into the project's stylesheet and its intent into the design document, and leave a picked layout on the canvas for the plan that builds it
|
|
16
|
+
- The canvas is serving and its live shell loads at the address the server reported before any frame is written, and a refusal or a blank shell is reported rather than drawn into
|
|
17
|
+
- Pages and frames go through the verbs, so the session and the operator's drags share one writer, and a frame from a linked worktree takes the main-root route
|
|
18
|
+
- The operator's selection decides what "this one" means, and a stale element pick reads as unknown
|
|
19
|
+
- A frame's inline styles are read before a restyle, the run names which operator edits it kept and dropped, and capture runs once per finished frame or page
|
|
20
|
+
- A picked value lands in the project's stylesheet and its intent in the design document, while a picked layout stays on the canvas for the plan that builds it
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
32
|
-
- Present the canvas as the project's source of truth for design
|
|
33
|
-
-
|
|
24
|
+
- Present the canvas as the project's source of truth for design, or promise it survives a lost checkout
|
|
25
|
+
- Write frames when `canon` or its canvas command is missing
|
|
34
26
|
- Name any third-party design tool, or the canvas's predecessor surface
|
|
35
|
-
- Be
|
|
36
|
-
|
|
37
|
-
## Guards
|
|
38
|
-
|
|
39
|
-
- No `canon` on PATH, or an installed CLI with no canvas command, stop rather than writing files nothing serves
|
|
40
|
-
- A server that refuses to start, or a shell that answers blank, stop and report it rather than drawing into it
|
|
27
|
+
- Be reached only by the author typing its name, since a request to draw, select, or capture on the canvas should reach it by description
|
|
41
28
|
|
|
42
29
|
## Out of scope
|
|
43
30
|
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
- Tracing reference images into design values
|
|
48
|
-
- Backing up the canvas folder off one disk
|
|
31
|
+
- Drafting candidates for a taste decision and taking the pick, which `pick-by-eye` owns
|
|
32
|
+
- What the canvas verbs do internally, which the CLI's own contract owns
|
|
33
|
+
- The content format a frame and a layout take, which the canvas standard owns
|
|
34
|
+
- Tracing reference images into design values, writing the design document from code, and backing up the canvas folder, which no skill owns
|
|
@@ -7,34 +7,25 @@ description: Scope boundary for pipeline structure against job contents, and the
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a session
|
|
10
|
+
Without this skill, a session chains jobs with `needs` to express reading order rather than a data dependency, so the pipeline costs the sum of its jobs. The same session splits a one-minute gate into parallel jobs, each repaying checkout, install, and toolchain setup, so the gate gets slower while reporting no earlier.
|
|
11
11
|
|
|
12
|
-
The
|
|
13
|
-
|
|
14
|
-
The rest are reproducibility failures that surface as flakes. An action pinned to a moving ref changes under the project, so a run that passed yesterday fails today with no commit behind it and the diff explains nothing.
|
|
15
|
-
|
|
16
|
-
A cache keyed on a static string serves a stale browser or toolchain after a version bump, and the failure reads as a broken test rather than a stale cache. Artifacts upload on every run and never expire, so storage grows with the commit count while the ones worth reading are the failures. And a workflow with no manual trigger can only be reproduced by pushing a commit, which is the wrong instrument for a run that failed for an environmental reason.
|
|
12
|
+
The rest surface as flakes. An action pinned to a moving ref changes under the project, a cache keyed on a static string serves a stale toolchain after a bump, artifacts upload on every run and never expire, a broad default token grants writes nobody needed, and a workflow with no manual trigger reproduces only by pushing a commit.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Default the token to read-only and grant a write scope only on the job that needs it
|
|
26
|
-
- Bound artifact upload to failures and set an expiry on it
|
|
16
|
+
- A job is gated only on a data dependency or a cost that justifies the wait, and checks sharing setup stay in one job until a run log puts the gate past roughly two minutes
|
|
17
|
+
- Every action is pinned to a tag that cannot cross a major version, and every cache is keyed on the version of what it caches
|
|
18
|
+
- Every workflow carries a manual trigger beside its primary one, except one that commits back
|
|
19
|
+
- The token defaults to read-only, with a write scope granted only on the job that needs it
|
|
20
|
+
- Artifact upload is bounded to failures and expires
|
|
27
21
|
|
|
28
22
|
## Must not
|
|
29
23
|
|
|
30
|
-
- Own what runs inside a job
|
|
31
|
-
- Enumerate the job set as a fixed list
|
|
32
|
-
|
|
33
|
-
## Guards
|
|
34
|
-
|
|
35
|
-
- A request for a deploy, publish, or release step stops at the gate. The job's contents carry credentials and an environment this skill cannot see, so it emits the `needs` wiring and names what the caller has to fill in rather than guessing a deploy command.
|
|
24
|
+
- Own what runs inside a job, or guess a deploy command. A deploy, publish, or release step gets its `needs` wiring and the inputs the caller fills in.
|
|
25
|
+
- Enumerate the job set as a fixed list
|
|
36
26
|
|
|
37
27
|
## Out of scope
|
|
38
28
|
|
|
39
|
-
- Secrets, environments, and deploy targets, which live in the repository settings
|
|
40
|
-
-
|
|
29
|
+
- Secrets, environments, and deploy targets, which live in the repository settings
|
|
30
|
+
- The deploy setup on a host, which `deploy-app` owns
|
|
31
|
+
- CI systems other than GitHub Actions, which a separate skill would own
|