@erclx/canon 5.44.0 → 5.46.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/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-cli/SKILL.md +0 -1
- 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-issue/REQUIREMENT.md +9 -15
- package/claude/skills/git-pr/REQUIREMENT.md +13 -32
- package/claude/skills/git-pr/SKILL.md +10 -2
- package/claude/skills/git-pr/references/closing-issues.md +47 -0
- package/claude/skills/git-pr/references/pr.md +4 -0
- 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/pick-by-eye/REQUIREMENT.md +17 -67
- 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-craft/REQUIREMENT.md +14 -32
- package/claude/skills/review-pr/REQUIREMENT.md +15 -34
- package/claude/skills/review-ui/REQUIREMENT.md +14 -39
- package/claude/skills/role-orchestrator/REQUIREMENT.md +16 -99
- 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-planner/REQUIREMENT.md +15 -73
- package/claude/skills/role-reviewer/REQUIREMENT.md +15 -65
- package/claude/skills/role-reviewer/SKILL.md +5 -1
- package/claude/skills/role-worker/REQUIREMENT.md +13 -41
- package/claude/skills/role-worker/SKILL.md +2 -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/target-setup/SKILL.md +2 -2
- package/claude/skills/target-setup/references/detect.md +0 -1
- package/claude/skills/target-setup/references/verify.md +2 -2
- package/claude/skills/task-board/REQUIREMENT.md +13 -22
- package/claude/skills/task-board/SKILL.md +7 -0
- 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 +1 -0
- package/claude/skills/teach-workspace/REQUIREMENT.md +14 -45
- package/claude/skills/teach-workspace/references/promotion.md +5 -5
- 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/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/install-and-sync.md +2 -2
- package/docs/agents/markdown-audit.md +15 -10
- package/docs/agents/output-shape.md +1 -2
- package/docs/target/migrations.md +18 -0
- package/docs/target/projects.md +3 -2
- package/docs/target/scenarios.md +4 -1
- package/docs/workflow/skill-map-on-request.md +1 -1
- package/docs/workflow/skill-map.md +6 -5
- package/governance/detect.toml +4 -0
- package/governance/ledger/lang/go.md +61 -0
- package/governance/ledger/lang/php.md +50 -0
- package/governance/ledger/lang/python.md +68 -0
- package/governance/ledger/lang/typescript.md +64 -0
- package/governance/ledger/lib/database.md +65 -0
- package/governance/ledger/lib/e2e-reliability.md +57 -0
- package/governance/ledger/lib/pydantic.md +61 -0
- package/governance/ledger/lib/security-server.md +62 -0
- package/governance/ledger/lib/security-web.md +51 -0
- package/governance/ledger/lib/tanstack-query.md +57 -0
- package/governance/ledger/lib/test-scope.md +43 -0
- package/governance/ledger/lib/testing-go.md +57 -0
- package/governance/ledger/lib/testing-php.md +51 -0
- package/governance/ledger/lib/testing-py.md +67 -0
- package/governance/ledger/lib/testing-ts.md +63 -0
- package/governance/ledger/lib/zod.md +47 -0
- package/governance/ledger/tooling/ci-workflow.md +33 -0
- package/governance/ledger/tooling/code-comments.md +48 -0
- package/governance/ledger/tooling/config-comments.md +27 -0
- package/governance/ledger/tooling/dependencies.md +38 -0
- package/governance/ledger/ui/a11y.md +55 -0
- package/governance/ledger/ui/copy.md +49 -0
- package/governance/ledger/ui/design-reference.md +42 -0
- package/governance/ledger/ui/design-taste.md +19 -0
- package/governance/ledger/ui/forms.md +71 -0
- package/governance/ledger/ui/interface-casing.md +47 -0
- package/governance/ledger/ui/keyboard.md +68 -0
- package/governance/ledger/ui/link-behavior.md +29 -0
- package/governance/ledger/ui/motion.md +33 -0
- package/governance/ledger/ui/surface-capture.md +69 -0
- package/governance/ledger/ui/ux-completeness.md +79 -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/rules/lang/go.md +7 -16
- package/governance/rules/lang/php.md +3 -3
- package/governance/rules/lang/python.md +9 -18
- package/governance/rules/lang/typescript.md +9 -19
- package/governance/rules/lib/database.md +5 -5
- package/governance/rules/lib/e2e-reliability.md +4 -6
- package/governance/rules/lib/pydantic.md +14 -16
- package/governance/rules/lib/security-server.md +4 -4
- package/governance/rules/lib/security-web.md +6 -10
- package/governance/rules/lib/tanstack-query.md +10 -12
- package/governance/rules/lib/test-scope.md +4 -4
- package/governance/rules/lib/testing-go.md +1 -2
- package/governance/rules/lib/testing-php.md +4 -5
- package/governance/rules/lib/testing-py.md +11 -19
- package/governance/rules/lib/testing-ts.md +7 -16
- package/governance/rules/lib/zod.md +6 -8
- package/governance/rules/tooling/code-comments.md +2 -4
- package/governance/rules/tooling/config-comments.md +1 -4
- package/governance/rules/tooling/dependencies.md +1 -1
- package/governance/rules/ui/a11y.md +16 -45
- package/governance/rules/ui/copy.md +6 -9
- package/governance/rules/ui/forms.md +13 -19
- package/governance/rules/ui/interface-casing.md +5 -7
- package/governance/rules/ui/keyboard.md +38 -0
- package/governance/rules/ui/link-behavior.md +3 -3
- package/governance/rules/ui/motion.md +3 -3
- package/governance/rules/ui/surface-capture.md +15 -27
- package/governance/rules/ui/ux-completeness.md +16 -39
- package/governance/stacks/base.toml +0 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/src/claude/cases/workflow.ts +12 -0
- package/src/cli/help.ts +0 -1
- package/src/cli.ts +0 -2
- package/src/commands/context.ts +57 -3
- package/src/commands/gov.ts +4 -0
- package/src/commands/init.ts +2 -2
- package/src/commands/labels.ts +83 -3
- package/src/commands/markdown.ts +188 -21
- package/src/commands/sessions.ts +36 -3
- package/src/commands/tasks.ts +180 -0
- package/src/commands/tooling.ts +18 -5
- package/src/commands/worktrees.ts +2 -0
- package/src/context/coverage.ts +210 -0
- package/src/context/gate.ts +12 -3
- package/src/design/components.ts +1 -1
- package/src/gate/stages.ts +1 -1
- package/src/gov/audit.ts +22 -2
- package/src/init/plan.ts +1 -8
- package/src/init/steps.ts +44 -7
- package/src/intake/items.ts +14 -0
- package/src/inventory/subjects.ts +1 -1
- package/src/labels/closing.ts +46 -0
- package/src/markdown/gated.ts +250 -0
- package/src/markdown/scope.ts +119 -2
- package/src/migrate/rename.ts +6 -0
- package/src/migrate/scratch-evidence.ts +12 -4
- package/src/records/backup.ts +3 -3
- package/src/records/validate.ts +3 -3
- package/src/roots/record.ts +17 -8
- package/src/sessions/claim.ts +7 -0
- package/src/sessions/live.ts +53 -6
- package/src/sessions/registry.ts +11 -0
- package/src/sessions/resolve.ts +32 -5
- package/src/tasks/closes.ts +136 -0
- package/src/tasks/record.ts +1 -1
- package/src/tooling/inject.ts +26 -7
- package/src/tooling/package.ts +32 -0
- package/src/tooling/read.ts +46 -3
- package/src/tooling/scan.ts +8 -2
- package/src/worktrees/reclaim.ts +16 -1
- package/tooling/astro/reference.md +64 -93
- package/tooling/base/configs/.github/workflows/phase-label-gate.yml +1 -1
- package/tooling/base/configs/scripts/verify.ts +2 -2
- package/tooling/base/reference.md +1 -9
- package/tooling/base/seeds/canon/context/{ci.md → development/ci.md} +1 -1
- package/tooling/base/seeds/canon/context/development/index.md +11 -0
- package/tooling/base/seeds/canon/context/{development.md → development/setup.md} +8 -12
- package/tooling/base/seeds/canon/context/index.md +1 -2
- package/tooling/claude/manifest.toml +1 -5
- package/tooling/claude/reference.md +36 -59
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +1 -1
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +3 -10
- package/tooling/claude/seeds/.claude/hooks/search-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +2 -4
- package/tooling/claude/seeds/CLAUDE.md +2 -2
- package/tooling/nextjs/reference.md +0 -6
- package/tooling/php/reference.md +0 -4
- package/tooling/web/configs/.github/workflows/verify.yml +28 -0
- package/tooling/web/configs/.oxlintrc.json +7 -0
- package/tooling/web/configs/e2e/capture-types.ts +35 -0
- package/tooling/web/configs/e2e/screenshot.ts +23 -72
- package/tooling/web/manifest.toml +1 -1
- package/tooling/web/reference.md +77 -124
- package/tooling/web/seeds/e2e/capture/cases.ts +47 -0
- package/governance/rules/canon/task-scope.md +0 -12
- package/src/commands/wiki.ts +0 -100
- package/src/wiki/init.ts +0 -85
|
@@ -7,42 +7,28 @@ description: Why a session writing code needs stated rules on the shape of a fun
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Nothing shapes code at the moment it is written. The loop, the file's placement, and the caller's contract each have an owner, and the shape of a function, a class, or a module's internals is left to whatever the neighboring code suggests.
|
|
11
11
|
|
|
12
|
-
Agents fail there in recorded ways.
|
|
13
|
-
|
|
14
|
-
Before this skill, two shipped pointers left interface depth unowned. `api-design` declined depth and the internals behind a boundary, and `codebase-layout` named depth as having no owner, so a session routed away from either on that question landed nowhere. Both now point here.
|
|
12
|
+
Agents fail there in recorded ways. They copy where reuse belonged, spread one change across files, build features nobody asked for, fill in assumptions, and patch a symptom by brute force. Each reads fine in its own diff and costs the next change.
|
|
15
13
|
|
|
16
14
|
## Must
|
|
17
15
|
|
|
18
|
-
- Open with the change test
|
|
19
|
-
- State depth as rules a session can act on
|
|
20
|
-
- State each tension as when one side wins
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- Close the concern groups with the agent failure modes as checks on the session's own diff: a copy where a refactor belonged, one responsibility scattered across files, a feature nobody asked for, an assumption filled in rather than asked, and a brute-force fix
|
|
24
|
-
- Record the external sources adopted and declined with the reason for each, so a later session extends the position instead of re-deriving it
|
|
25
|
-
- Close with a table of the excuses a session gives for a shape that costs the next change, 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 code the change produced
|
|
16
|
+
- Open with the change test, naming the change most likely to come next and counting what it would touch before choosing a shape
|
|
17
|
+
- State depth as rules a session can act on, covering a unit's interface being simpler than its work, inlined pass-throughs, and splitting by the decision hidden
|
|
18
|
+
- State each tension as when one side wins, such as one place for knowledge against coupling two things that only look alike
|
|
19
|
+
- State hidden inputs: pass in the clock, environment, and randomness, and keep business rules free of transport and storage code
|
|
20
|
+
- Close with the agent failure modes as checks on the session's own diff, with excuses, red flags, a checklist, and the external sources adopted and declined with the reason for each
|
|
26
21
|
|
|
27
22
|
## Must not
|
|
28
23
|
|
|
29
|
-
- Restate a definition a model already holds,
|
|
30
|
-
- State a tension as one side only, such as "never duplicate"
|
|
24
|
+
- Restate a definition a model already holds, state a tension as one side only, or shape code for a change nobody can name
|
|
31
25
|
- Name a language, a framework, or a type system feature in the body
|
|
32
|
-
- Restate
|
|
33
|
-
- Restate error or naming bullets. The core code rule retired them on purpose, and the error shape lives in `api-design`.
|
|
34
|
-
|
|
35
|
-
## Guards
|
|
36
|
-
|
|
37
|
-
- A change filling in a body whose shape is already fixed skips the skill
|
|
38
|
-
- A shape is never chosen for a change nobody can name, since that shape is a guess
|
|
26
|
+
- Restate error or naming bullets, which the core code rule and `api-design` carry
|
|
39
27
|
|
|
40
28
|
## Out of scope
|
|
41
29
|
|
|
42
|
-
- Where a new file sits on disk
|
|
43
|
-
- The red, green, refactor loop
|
|
44
|
-
- Which layer a test belongs at
|
|
45
|
-
- The contract a caller depends on,
|
|
46
|
-
- Judging a finished diff,
|
|
47
|
-
- Service architecture and layering beyond the one hidden-inputs bullet kept here
|
|
48
|
-
- Whether the guidance changes what a session ships, which needs a measured with-and-without run rather than a rule here
|
|
30
|
+
- Where a new file sits on disk, which `codebase-layout` owns
|
|
31
|
+
- The red, green, refactor loop, which `test-first` owns
|
|
32
|
+
- Which layer a test belongs at, which `test-craft` owns
|
|
33
|
+
- The contract a caller depends on, which `api-design` owns
|
|
34
|
+
- Judging a finished diff, which `review-craft` owns
|
|
@@ -7,44 +7,27 @@ description: Why the session writing a new path into a plan needs placement guid
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The session that decides where a new file goes has nothing about layout in front of it. The planner writes each new path into the plan and the worker copies it, so a new path copies the flat folder beside it and a source folder grows flat until a split touches dozens of files.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Sharpening the rules does not reach the decision. Both were loaded and neither was applied, since an always-loaded line competes with everything else a session holds and a path-scoped rule fires on a read of an existing file rather than on a path written into a plan.
|
|
15
|
-
|
|
16
|
-
A placement rule in front of the session is also one it can argue past. Each flat file in that target landed for a reason that sounded fine in the moment, such as the neighbors already being flat or a split reading as scope creep, and nothing answered the reason before the path was written.
|
|
12
|
+
Sharpening the rules does not reach the decision. An always-loaded line competes with everything else a session holds, and a path-scoped rule fires on a read of an existing file rather than on a path written into a plan. Each flat file also lands for a reason that sounds fine, such as the neighbors already being flat.
|
|
17
13
|
|
|
18
14
|
## Must
|
|
19
15
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- State that a file is named for what it covers inside its folder, never repeating the folder's name as its stem or its prefix, since a name placed beside its neighbor copies the neighbor's prefix along with its folder
|
|
26
|
-
- Hold the stack-neutral core in the body and defer category specifics to a reference loaded only when a new path falls in that category
|
|
27
|
-
- Record the external layouts adopted and declined with the reason for each, so a later session extends the position instead of re-deriving it
|
|
28
|
-
- Close with a table of the excuses a session gives for placing a file beside its neighbor, each with its rebuttal, the red flags a session can see while writing a path, and a checklist each new path passes before the plan is handed over
|
|
29
|
-
- Fire on a direct question about placement as well, such as where a file goes or whether a flat folder should split, since a session outside any plan still places files
|
|
16
|
+
- Load whenever a plan names a path that does not exist yet, and on a direct question about placement
|
|
17
|
+
- Keep to the project's existing layout strategy, naming it before placing a file, and propose a strategy change as its own decision
|
|
18
|
+
- Split a folder when a second role enters it, with a file count only as a prompt to look, and colocate with the one consumer until a second promotes the file
|
|
19
|
+
- Give every new path a one-clause placement reason, and name a file for what it covers rather than repeating its folder
|
|
20
|
+
- Hold the stack-neutral core in the body, with category specifics in a reference, then close with excuses, red flags, a checklist, and the external sources adopted and declined with the reason for each
|
|
30
21
|
|
|
31
22
|
## Must not
|
|
32
23
|
|
|
33
|
-
- Name a framework or runner in the body
|
|
34
|
-
-
|
|
35
|
-
- Restate the layer rule
|
|
36
|
-
- Mandate one layout across projects, such as a `features/` tree, over the project's own strategy
|
|
37
|
-
- Restate the pointer in `routing`, which loads in code stacks only. The rule points here and this body carries the depth.
|
|
38
|
-
|
|
39
|
-
## Guards
|
|
40
|
-
|
|
41
|
-
- A plan that only edits existing files does not load the skill, so the cost lands only where a placement is decided
|
|
42
|
-
- A strategy change is proposed as its own decision rather than made while placing one file
|
|
24
|
+
- Name a framework or runner in the body, or carry a hard file-count threshold
|
|
25
|
+
- Mandate one layout across projects over the project's own strategy
|
|
26
|
+
- Restate the layer rule that `test-craft` owns, or the pointer the routing rule carries
|
|
43
27
|
|
|
44
28
|
## Out of scope
|
|
45
29
|
|
|
46
|
-
- Which layer a test belongs at
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Whether a plan that loaded the skill actually places files differently, which needs a measured run on a target rather than a rule here
|
|
30
|
+
- Which layer a test belongs at, which `test-craft` owns
|
|
31
|
+
- What crosses a module boundary, which `api-design` owns
|
|
32
|
+
- Interface depth and seams inside a module, which `code-craft` owns
|
|
33
|
+
- Per-language placement conventions, which the language testing rules own
|
|
@@ -7,53 +7,29 @@ description: What the context-entry fold is for, the gaps it closes, and why it
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The context entries describe the repository the session opened with. An entry keeps listing a folder the diff moved and a trap the diff fixed. A fold doing everything at ship time buries the one step a caller asked for under board marking, receipt sweeps, and the design record.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
The opposite gap opened from the same write. A fold allowed to touch the requirements record on every ship rewrote it one reasonable edit at a time, and nothing read it for whether it still stated the project's identity. Each ship looked correct and the sum drifted.
|
|
15
|
-
|
|
16
|
-
A fold that did everything at ship time hid its own job. It marked board outcomes, swept receipts, wrote the design record, and landed promoted pages, so a session invoking it to refresh the context entries ran ten steps and could not tell which one it had asked for.
|
|
17
|
-
|
|
18
|
-
This skill writes canonical docs at the end of a long build. An appended figure, a branch-narrated re-measurement, or an entry pushed past its length lands unchecked the same way a session's own edits do, so what the fold produces carries the exact defect the standards it cites already ban.
|
|
12
|
+
"Sync the docs" names either corpus, so a description leaving its corpus to the opening clause loses the request to its sibling. A fold rewriting the requirements record each ship drifts its identity. Appended figures and over-length entries land unchecked at the end of a long build.
|
|
19
13
|
|
|
20
14
|
## Must
|
|
21
15
|
|
|
22
|
-
- Name the context entries in a trigger phrase
|
|
23
|
-
- Take the refresh scope from the diff
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Close on an audit of what the fold touched, running `canon context audit` and reporting the findings on files this run wrote or the diff carries
|
|
28
|
-
- Classify the fold's whole diff baseline through `canon context classify diff`, calling the verb rather than reimplementing its pattern or its prompt in the skill body, since an earlier commit on the branch carries a doc edit the fold is equally responsible for
|
|
29
|
-
- Apply a `REPLACE` or `HISTORY` finding against the quote it names, report a `MOVE` finding naming the surface it belongs on rather than cutting it, or keep a finding with a one-line reason, rather than leaving a finding unanswered
|
|
30
|
-
- Rewrite a restated or superseded statement in place rather than appending the replacement beside it
|
|
31
|
-
- Report a refusal or a missing `context audit` or `context classify` subcommand as one line and continue the fold either way, since a check that cannot run is not a reason to leave the fold's own output unshipped
|
|
16
|
+
- Name the context entries in a trigger phrase, so a bare request to sync the docs separates this skill from `docs-sync`
|
|
17
|
+
- Take the refresh scope from the diff and write tracked docs at the current worktree root, only when the diff adds, moves, or removes a folder, falsifies a bullet, or changes a trap
|
|
18
|
+
- Report a requirements or direction change in one line naming `document-health` rather than writing it
|
|
19
|
+
- Close on `canon context audit` and `canon context classify diff` over the fold's whole baseline, reporting findings on files this run wrote or the diff carries
|
|
20
|
+
- Apply a `REPLACE` or `HISTORY` finding against its quote, report a `MOVE` with its surface rather than cutting it, and continue the fold when a check cannot run
|
|
32
21
|
|
|
33
22
|
## Must not
|
|
34
23
|
|
|
35
|
-
- Write the task board, the design record, `CLAUDE.md`,
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- Report an audit finding on an entry this run never touched, which belongs to whoever next edits it
|
|
40
|
-
- Add a path flag to the audit verb from this skill. It takes a project root, so the skill filters the record.
|
|
41
|
-
- Pick or configure a classifier backend. The project setting decides it, and this skill reports the resolved `modelLayer` as returned.
|
|
42
|
-
- Stop the fold on an audit or classify finding, a refusal, or a missing subcommand. All of them report and continue.
|
|
43
|
-
- Apply a finding against a quote found more than once or not found at all. Report that it could not be located instead of guessing.
|
|
44
|
-
- Re-run the classifier after applying a finding, which loops it over its own edit
|
|
45
|
-
- Cut a `MOVE` finding. The verdict means correct content sitting on the wrong surface rather than a deletion candidate, so cutting one can discard content that belongs elsewhere rather than removing detail that never belonged at all.
|
|
46
|
-
- Scope the classifier to the files Step 3 wrote this run. An earlier commit on the branch carries a doc edit the fold is equally responsible for, and the verb's own extraction already answers whether anything in range qualifies.
|
|
47
|
-
|
|
48
|
-
## Guards
|
|
49
|
-
|
|
50
|
-
- Neither a `canon/` nor a `.claude/` directory: stop and name the command that sets one up
|
|
51
|
-
- No direction change in the session and no diff a context entry could describe: stop with a pass, since both conditions have to hold
|
|
24
|
+
- Write the task board, the design record, `CLAUDE.md`, the requirements record, or a promoted page
|
|
25
|
+
- Create an entry for a domain the catalog does not list, or report a finding on an entry this run never touched
|
|
26
|
+
- Pick a classifier backend, re-run the classifier after a fix, or apply a finding whose quote is not found exactly once
|
|
27
|
+
- Stop the fold on a finding, a refusal, or a missing subcommand
|
|
52
28
|
|
|
53
29
|
## Out of scope
|
|
54
30
|
|
|
55
|
-
- Marking
|
|
56
|
-
- Landing a
|
|
31
|
+
- Marking outcomes, sweeping receipts, and archiving a task, which `task-complete` owns
|
|
32
|
+
- Landing a teach promotion page, which `teach-workspace` owns
|
|
57
33
|
- Creating or declining a task file, which `task-board` owns
|
|
58
|
-
- Public-facing docs, which `docs-sync` owns
|
|
59
|
-
- Regenerating the context catalog, which a commit hook
|
|
34
|
+
- Public-facing docs, which `docs-sync` owns
|
|
35
|
+
- Regenerating the context catalog, which a commit hook owns
|
|
@@ -71,13 +71,13 @@ An entry carries three H2 sections and no other, being `Overview`, `Layout`, and
|
|
|
71
71
|
|
|
72
72
|
Layout gives each folder doing real work its own H3, titled with the folder path in a code span, such as ``### `src/design/` ``.
|
|
73
73
|
|
|
74
|
-
- Open the H3 with a
|
|
75
|
-
- Follow it with at most five bullets on what the folder does now
|
|
74
|
+
- Open the H3 with a one-paragraph lead stating what the folder does, then at most five bullets on what it does now
|
|
76
75
|
- Put every trivial folder under `### Other folders` as a one-line bullet in owns-X form
|
|
77
76
|
- Name folders only, never files, and write no decisions and no history under any H3
|
|
77
|
+
- Give each folder under the code roots one H3 or `Other folders` line, since a second entry may cite it but never claims it
|
|
78
78
|
- Write no heading below H3 under `## Layout`
|
|
79
79
|
|
|
80
|
-
The audit reports a Layout H3 titled neither a path nor `Other folders`, a folder H3 holding a second paragraph or a sixth bullet, and any H4 under Layout. Bullets count at any indent and across any paragraph, so a list split by a bold label still counts as one list.
|
|
80
|
+
The audit reports a Layout H3 titled neither a path nor `Other folders`, a folder H3 holding a second paragraph or a sixth bullet, and any H4 under Layout. Under `--gate` it also fails a code folder no Layout names. Bullets count at any indent and across any paragraph, so a list split by a bold label still counts as one list.
|
|
81
81
|
|
|
82
82
|
### Ordering and headings
|
|
83
83
|
|
|
@@ -7,25 +7,17 @@ description: Why a project-local rule needs a subdir, a slug free in it, and a s
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a project rule is written
|
|
10
|
+
Without this skill, a project rule is written into the rules folder under a name already taken, or one a shipped rule claims later and overwrites. Writing under `.claude/rules/project/` closes that by location, leaving only a slug taken in the same subdir to check.
|
|
11
11
|
|
|
12
|
-
The subdir gets picked by feel, so a UI copy rule
|
|
12
|
+
The subdir gets picked by feel, so a UI copy rule loads on every session. The scope key fails both ways, and a body written from memory drifts from the rule standard's shape. A rule restating what canon ships duplicates it, and one committed unseen lands before the operator read it.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
- Resolve what the rule enforces and where it applies, asking only for what the request leaves missing
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Hold the body to the rule standard's shape limits on words, bullets, sections, and bullet length
|
|
22
|
-
- Apply the content test, leaving out what Claude already knows, what the toolchain enforces, and what changes often
|
|
23
|
-
- Check the installed skills for one already covering the topic and point the rule at it, skipping the check when none are listed
|
|
24
|
-
- Run every written bullet through the checklist and fix what fails before reporting
|
|
25
|
-
- Tell the user to cite a source in the commit that adds a rule claiming outside practice
|
|
26
|
-
- Emit the path scope for a path-scoped rule and omit the key entirely for an always-on one
|
|
27
|
-
- Preview the resolved path, subdir, slug, and frontmatter, then write without pausing
|
|
28
|
-
- Say when the rule loads, since path-scoped and always-on rules behave differently
|
|
16
|
+
- Resolve what the rule enforces and where it applies, asking only for what the request leaves missing, and stop when it names no behavior
|
|
17
|
+
- Write under `.claude/rules/project/` in a subdir picked from the topic, with a slug no rule in that subdir uses, and propose a narrower slug when it is taken
|
|
18
|
+
- Read the rule standard before writing, then hold the body to its shape limits and content test and run every bullet through its checklist before reporting
|
|
19
|
+
- Emit the path scope for a path-scoped rule and omit the key for an always-on one, say when the rule loads, then write and show the diff, leaving the commit to the operator's OK
|
|
20
|
+
- Check what canon ships and the installed skills for one already covering the topic and point the rule at it, and tell the user to cite a source in the commit when the rule claims outside practice
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
@@ -34,14 +26,8 @@ The subdir gets picked by feel, so a UI copy rule lands in the always-on folder
|
|
|
34
26
|
- Overwrite a project rule already holding the slug
|
|
35
27
|
- Write more than one topic into a single rule
|
|
36
28
|
|
|
37
|
-
## Guards
|
|
38
|
-
|
|
39
|
-
- No project Claude directory: stop, since there is nowhere for the rule to live
|
|
40
|
-
- The request names no behavior to enforce: stop rather than inventing one
|
|
41
|
-
- The topic's slug is taken in the chosen subdir: stop and propose a narrower one
|
|
42
|
-
|
|
43
29
|
## Out of scope
|
|
44
30
|
|
|
45
|
-
- Editing a rule that already exists
|
|
46
|
-
- Toolkit source rules, which
|
|
47
|
-
- Installing the rules the toolkit ships, which
|
|
31
|
+
- Editing a rule that already exists, which the rule standard governs
|
|
32
|
+
- Toolkit source rules, which the toolkit authors rather than a target
|
|
33
|
+
- Installing the rules the toolkit ships, which `target-setup` owns
|
|
@@ -22,6 +22,7 @@ Resolve both from the request, and ask only for what is missing. Attach a propos
|
|
|
22
22
|
|
|
23
23
|
- What the rule enforces: one topic, phrased as a standard (`<topic> conventions`).
|
|
24
24
|
- Scope: a path glob relative to the project root (`<dir>/**/*.<ext>`) for a path-scoped rule, or always-on when the rule states a global principle with no file scope.
|
|
25
|
+
- Whether canon already ships a rule for the topic, read from `canon gov list --rules --json`. When one does, point the user at it and at `canon gov install --add` rather than authoring a copy.
|
|
25
26
|
- An installed skill already covering the topic, found per `### Checking the installed skills` in `${CLAUDE_SKILL_DIR}/references/rule.md`. Point the rule at it rather than restating it.
|
|
26
27
|
|
|
27
28
|
## Step 2: resolve the subdir
|
|
@@ -86,3 +87,5 @@ Read `${CLAUDE_SKILL_DIR}/references/checklist.md` and run every bullet of the w
|
|
|
86
87
|
## After writing
|
|
87
88
|
|
|
88
89
|
Emit the full path on its own line: `.claude/rules/project/<subdir>/<slug>.md`. Remind the user that Claude Code loads path-scoped rules when it reads or writes a matching file, and always-on rules every session. When a bullet claims outside practice, tell them to cite its source in the commit that adds the rule.
|
|
90
|
+
|
|
91
|
+
Show the new rule as a diff in chat and commit nothing until the operator says OK.
|
|
@@ -7,37 +7,26 @@ description: What skill creation is for, the gaps it closes, and why it confirms
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a new skill lands in the wrong shape and
|
|
10
|
+
Without this skill, a new skill lands in the wrong shape and place. A session writes `SKILL.md` and its frontmatter from its own idea of the format and never opens the authoring standard. With no requirement beside it, a later sweep must reconstruct what the skill was for.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
A third failure is a folder created for a moment a rule, a verb, or an existing skill already reaches, or for a procedure no session would get wrong from first principles. Nothing caught that before the folder existed, so the corpus grew by a skill an inward audit later had to argue for removing, with only a commit body recording the argument.
|
|
15
|
-
|
|
16
|
-
A fourth failure is dated provenance in the body. A target asked for an edit citing a measurement taken that day, and the draft carried "measured on" and the date inline, with the authoring standard, the markdown audit, and this skill all passing it. A body collecting those notes reads as history rather than as the rule a session follows.
|
|
17
|
-
|
|
18
|
-
A fifth failure is the confirmation itself. A worker running a plan that adds a skill reached Step 4, asked a person nobody had dispatched, and the chain parked on a question nobody read. The same description named only the `.claude/skills/` root, which is where a target authors and where a toolkit checkout keeps its `internal-*` skills, but not where its plugin skills live.
|
|
12
|
+
Nothing checks the folder before it exists, so a skill appears for a moment a rule, a verb, or a sibling already reaches. Bodies collect dated provenance. The confirm step stalls an unattended run, and a checkout keeps internal and plugin skills in different roots.
|
|
19
13
|
|
|
20
14
|
## Must
|
|
21
15
|
|
|
22
|
-
- Read the authoring standard and the prose standard before drafting
|
|
23
|
-
- Answer
|
|
24
|
-
- Draft the sibling `REQUIREMENT.md` beside the body
|
|
25
|
-
- Confirm the name and both files
|
|
26
|
-
- Write to the conventional skills path
|
|
27
|
-
- Leave the skills audit's dated-provenance check clean for the new folder before reporting it, with each incident cut and left to git
|
|
16
|
+
- Read the authoring standard and the prose standard before drafting
|
|
17
|
+
- Answer in writing whether a rule, a verb, or a skill already reaches this moment, and whether a session would get the procedure wrong unaided, since a folder failing either belongs elsewhere
|
|
18
|
+
- Draft the sibling `REQUIREMENT.md` beside the body from what the skill is for, never from the drafted body
|
|
19
|
+
- Confirm the name and both files before writing where a person is present, and where nobody is, record the three answers and both paths in the output and write
|
|
20
|
+
- Write to the conventional skills path for the project, and leave the skills audit's dated-provenance check clean for the new folder before reporting
|
|
28
21
|
|
|
29
22
|
## Must not
|
|
30
23
|
|
|
31
|
-
- Auto-trigger
|
|
24
|
+
- Auto-trigger, since creation is a deliberate act and a skill invented from an ambiguous request is worse than none
|
|
32
25
|
- Write either file before the user has seen it, where a user is present
|
|
33
26
|
- Derive the requirement from the drafted body, which records the draft's overfitting as the requirement
|
|
34
|
-
- Gate creation on whether anything will invoke the new skill beyond the author typing its name
|
|
35
|
-
|
|
36
|
-
## Guards
|
|
37
|
-
|
|
38
|
-
- The authoring standard is not installed: stop and name the command that installs it
|
|
27
|
+
- Gate creation on whether anything will invoke the new skill beyond the author typing its name
|
|
39
28
|
|
|
40
29
|
## Out of scope
|
|
41
30
|
|
|
42
31
|
- Editing an existing skill, which the authoring standard and the skill's own requirement govern
|
|
43
|
-
- Whether anything ends up invoking the new skill
|
|
32
|
+
- Whether anything ends up invoking the new skill, which the toolkit's usage census owns
|
|
@@ -7,38 +7,26 @@ description: Scope boundary for handing a decision back to the operator, and the
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
A session facing a decision that belongs to the operator asks one question per turn, so the operator cannot see how many are open or trade one against another. It asks in prose with no options, omits what the other option buys, or escalates a call the repository could settle.
|
|
11
11
|
|
|
12
|
-
It
|
|
13
|
-
|
|
14
|
-
A body written around a named tool fails a third way. A session on a surface carrying no structured question tool reads an instruction it cannot execute and falls back to whatever it would have done unaided, which is the per-decision ask this file exists against.
|
|
15
|
-
|
|
16
|
-
The opposite failure is the one that ships silently. A session that takes a preference decision itself produces work the operator did not ask for and never learns a choice was made, because nothing in the output says a fork was passed.
|
|
17
|
-
|
|
18
|
-
`CLAUDE.md` states both branches of the rule, sending an ordinary judgment call to a pick with the tradeoff in one sentence and a preference-deciding call to the operator. The second branch now states how a question is shaped and where it is put, so this skill inherits both and adds only what a batch needs on top of one question.
|
|
12
|
+
It carries on with work the open questions govern, or acts on an answer and leaves the record that posed it reading open, so the next session re-asks. Where the named tool is absent it falls back to the per-decision ask. Taking a preference decision itself ships silently.
|
|
19
13
|
|
|
20
14
|
## Must
|
|
21
15
|
|
|
22
|
-
- Collect every open decision before asking
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Hold every escalated decision until it is answered, and continue only the work depending on none of them
|
|
28
|
-
- Route a pick that changes a written artifact into that artifact under the standard owning it, rather than leaving it in the session
|
|
16
|
+
- Collect every open decision before asking, and put the whole batch in one turn
|
|
17
|
+
- Give each question a short axis header and two to four options shaped as `CLAUDE.md` states, capped at four questions with the held count said
|
|
18
|
+
- Test the surface rather than the project's instruction file when choosing where the batch goes
|
|
19
|
+
- Hold every escalated decision until answered, and continue only work depending on none of them
|
|
20
|
+
- Route a pick that changes a written artifact into that artifact under the standard owning it
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
32
24
|
- Answer on the operator's behalf, or treat the recommendation as the answer because no reply arrived
|
|
33
|
-
- Escalate a decision
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
## Guards
|
|
37
|
-
|
|
38
|
-
- Nothing open, stop rather than manufacturing a question to justify the invocation
|
|
25
|
+
- Escalate a decision settled by the repository or by the session's own judgment, or one already recorded
|
|
26
|
+
- Manufacture a question when nothing is open
|
|
39
27
|
|
|
40
28
|
## Out of scope
|
|
41
29
|
|
|
42
|
-
-
|
|
43
|
-
- Writing the decision into a plan, task, or context entry, which each owning standard governs
|
|
44
|
-
- Deciding when to fire
|
|
30
|
+
- The ordinary judgment call, which `CLAUDE.md` owns as a pick plus a one-sentence tradeoff
|
|
31
|
+
- Writing the decision into a plan, task, or context entry, which each owning standard governs
|
|
32
|
+
- Deciding when to fire, which the operator owns since the skill never auto-triggers
|
|
@@ -7,38 +7,28 @@ description: What the deploy setup gap is on each host, which of the manual step
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a deploy setup is a sequence performed from memory. Most of its
|
|
10
|
+
Without this skill, a deploy setup is a sequence performed from memory. Most of its acts touch a service rather than the tree, so no workflow file absorbs them, and an account ID copied from a host's dashboard can be truncated in a way that shows only at deploy time.
|
|
11
11
|
|
|
12
|
-
The
|
|
12
|
+
The sequence repeats on Cloudflare and Vercel with different calls, so a skill per host duplicates every stop. A project mid-migration carries both hosts' files, and a silent pick creates a project on the account the operator was leaving.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Stop for the operator at the custom domain step, since DNS sits outside the tree
|
|
22
|
-
- Call `wrangler`, `vercel`, and `gh` directly for every step those tools already cover
|
|
16
|
+
- The host comes from the signals the project carries, and the operator is asked when it carries none or both
|
|
17
|
+
- The host's project is created and every account, org, or project ID fetched through the host CLI's own session or files
|
|
18
|
+
- The operator issues the API token and runs `gh secret set` themselves, and every secret the host needs is confirmed with `gh secret list` before continuing
|
|
19
|
+
- The run stops for the operator at the custom domain step
|
|
20
|
+
- `wrangler`, `vercel`, and `gh` are called directly for every step they cover, each confirmed authenticated first
|
|
23
21
|
|
|
24
22
|
## Must not
|
|
25
23
|
|
|
26
|
-
- Accept an API token as input in any form
|
|
27
|
-
- Take an ID from the operator
|
|
24
|
+
- Accept an API token as input in any form
|
|
25
|
+
- Take an ID from the operator
|
|
28
26
|
- Default to a host when the signals are absent or disagree
|
|
29
|
-
- Reimplement a host CLI call or `gh secret set` as a hand-built API call
|
|
30
27
|
- Seed a deploy workflow for Vercel, whose git integration already deploys on push
|
|
31
28
|
- Open a pull request or merge
|
|
32
29
|
|
|
33
|
-
## Guards
|
|
34
|
-
|
|
35
|
-
- `wrangler` or `vercel` not authenticated: stop and name the login command
|
|
36
|
-
- `gh` not authenticated: stop and name the login command
|
|
37
|
-
- A secret missing after the token stop: stop and name which one
|
|
38
|
-
|
|
39
30
|
## Out of scope
|
|
40
31
|
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
- A Vercel
|
|
44
|
-
- Reconfiguring an existing project's build settings on either host.
|
|
32
|
+
- Running the deploy once secrets and the domain are set, which the seeded workflow or the host's git integration owns
|
|
33
|
+
- The workflow structure around a deploy job, which `ci-workflow` owns
|
|
34
|
+
- A Vercel tooling stack, a domain attached through the REST API, or reconfiguring an existing project's build settings, which no skill owns yet
|
|
@@ -7,56 +7,28 @@ description: Why a session retiring code needs stated rules for deciding to depr
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Nothing tells a session how to retire a function, a flag, a file, or a command. The persistence rule covers only the destructive half of a schema change, and `api-design` stops at adding a new name beside an old one, without saying how a session proves the old one unused or who moves the callers.
|
|
11
11
|
|
|
12
|
-
The
|
|
13
|
-
|
|
14
|
-
- A record folder moved from a flat sibling to a nested layout while one known consumer still sat on the old layout with no checkout reachable to migrate it. The expand step shipped and the contract step had no owner or date.
|
|
15
|
-
- A skill kept a fallback beside a new command "until a release retires it", a compatibility path with no stated removal condition.
|
|
16
|
-
- A sync engine reported entries a source had stopped shipping as retired, leaving each consumer to decide what to do with them, which is a deprecation announced without the owner migrating anyone.
|
|
17
|
-
|
|
18
|
-
Each excuse row in the body traces to one of these cases or to a source in the ledger:
|
|
19
|
-
|
|
20
|
-
- Fallback row: the second case
|
|
21
|
-
- Migrate-later and one-machine rows: the first and third cases
|
|
22
|
-
- Notice row: the deprecation chapter of Software Engineering at Google
|
|
23
|
-
- No-owner row: the upstream skill's zombie-code section
|
|
24
|
-
- Search row: the upstream skill's red flag against removing code without verifying zero consumers
|
|
25
|
-
- Add-and-drop row: the upstream skill's rationalization for adding a column and dropping the old one in one migration
|
|
12
|
+
The result is an expand step with no contract step behind it, a fallback kept "until a release retires it" with no removal condition, and a deprecation announced while every consumer is left to migrate alone.
|
|
26
13
|
|
|
27
14
|
## Must
|
|
28
15
|
|
|
29
|
-
-
|
|
30
|
-
- Separate advisory from compulsory,
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- State expand, migrate, and contract as three separate changes, never letting the contract step share a change with the expand step
|
|
35
|
-
- Treat zombie code as a decision between removal and ownership, settled by the same zero-consumers check
|
|
36
|
-
- Record the external sources adopted and declined with the reason for each
|
|
37
|
-
- Close with a table of the excuses a session gives for removing early or leaving a deprecation open, the red flags it can see mid-task, and a checklist each line of which answers yes or no against the change
|
|
16
|
+
- Decide to deprecate by four questions, being what keeping it costs, who calls it, what replaces it, and who migrates the callers
|
|
17
|
+
- Separate advisory from compulsory deprecation, allowing compulsory only once a replacement has shipped and a removal date sits where a caller looks
|
|
18
|
+
- Make the owner of a surface migrate its callers rather than announce and wait
|
|
19
|
+
- Prove zero consumers across imports, string references, configuration, documentation, and outside copies before removal, naming any kind the search could not reach
|
|
20
|
+
- Run expand, migrate, and contract as three changes, then close with excuses, red flags, a checklist, and the external sources adopted and declined with the reason for each
|
|
38
21
|
|
|
39
22
|
## Must not
|
|
40
23
|
|
|
41
|
-
- Name a toolkit command, a toolkit-local path, or a project
|
|
42
|
-
- State a numeric deprecation window
|
|
43
|
-
- Restate additive change or the One-Version Rule,
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
## Guards
|
|
47
|
-
|
|
48
|
-
- Code introduced on the same branch that nothing has shipped against skips the skill
|
|
49
|
-
- A removal whose zero-consumers check left a caller kind unreached is reported with that kind named, never as clean
|
|
24
|
+
- Name a toolkit command, a toolkit-local path, or a project, since the body ships to targets
|
|
25
|
+
- State a numeric deprecation window
|
|
26
|
+
- Restate additive change or the One-Version Rule, or the persistence rule's schema bullets
|
|
27
|
+
- Report a removal as clean while a caller kind went unsearched
|
|
50
28
|
|
|
51
29
|
## Out of scope
|
|
52
30
|
|
|
53
|
-
- Database schema migrations and their down paths
|
|
31
|
+
- Database schema migrations and their down paths, which the project's persistence rule owns
|
|
54
32
|
- Release versioning and changelog format, which a release process owns
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
- Adding a field, flag, or parameter beside an old one: `api-design`
|
|
58
|
-
- Whether the guidance changes what a session ships, which needs a measured with-and-without run rather than a rule here
|
|
59
|
-
|
|
60
|
-
## Measured
|
|
61
|
-
|
|
62
|
-
Not yet run. The seeded arm holds a deprecated helper with one caller by import and one by string reference, and asserts the session finds both before deleting and leaves the helper while either remains. The with-and-without run waits on the operator authorizing the spend.
|
|
33
|
+
- Moving or renaming a file with no caller change, which `codebase-layout` owns
|
|
34
|
+
- Adding a field, flag, or parameter beside an old one, which `api-design` owns
|