@erclx/canon 5.29.0 → 5.31.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/build-in-slices/REQUIREMENT.md +1 -1
- package/claude/skills/build-in-slices/references/adopted.md +1 -1
- package/claude/skills/canon-feedback-triage/SKILL.md +2 -0
- package/claude/skills/context-fold/SKILL.md +1 -1
- package/claude/skills/create-skill/SKILL.md +1 -1
- package/claude/skills/create-standard/SKILL.md +1 -1
- package/claude/skills/design-extract/SKILL.md +2 -2
- package/claude/skills/design-taste/SKILL.md +1 -1
- package/claude/skills/docs-sync/SKILL.md +1 -1
- package/claude/skills/draft-doc/SKILL.md +1 -1
- package/claude/skills/draft-figure/SKILL.md +1 -1
- package/claude/skills/draft-figure/references/mermaid.md +1 -1
- package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
- package/claude/skills/git-issue/SKILL.md +1 -1
- package/claude/skills/git-pr/SKILL.md +1 -1
- package/claude/skills/git-stage/SKILL.md +1 -1
- package/claude/skills/markdown-craft/REQUIREMENT.md +23 -0
- package/claude/skills/markdown-craft/SKILL.md +17 -0
- package/{standards → claude/skills/markdown-craft/references}/markdown.md +14 -7
- package/claude/skills/memory-capture/SKILL.md +1 -1
- package/claude/skills/memory-review/SKILL.md +1 -1
- package/claude/skills/plan-feature/REQUIREMENT.md +2 -1
- package/claude/skills/plan-feature/SKILL.md +12 -2
- package/claude/skills/review-address/SKILL.md +1 -1
- package/claude/skills/review-address/references/post-review-findings.md +1 -1
- package/claude/skills/review-pr/references/post.md +2 -2
- package/claude/skills/review-ui/references/post.md +1 -1
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +1 -0
- package/claude/skills/target-setup/references/indexes.md +1 -1
- package/claude/skills/test-first/REQUIREMENT.md +1 -1
- package/claude/skills/write-human/SKILL.md +1 -1
- package/docs/agents/commands.md +5 -4
- package/docs/agents/context-audit-checks.md +1 -1
- package/docs/agents/counts.md +3 -3
- package/docs/agents/index.md +1 -0
- package/docs/agents/install-and-sync.md +3 -3
- package/docs/agents/markdown-audit.md +1 -1
- package/docs/agents/routing.md +1 -1
- package/docs/agents/tasks-plans.md +1 -1
- package/docs/agents/test-order.md +1 -1
- package/docs/agents/upstream.md +70 -0
- package/docs/workflow/skill-map-on-request.md +1 -1
- package/governance/renames.toml +0 -4
- package/governance/rules/standards/plan.md +1 -0
- package/governance/rules/writing/markdown.md +23 -0
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/src/canvas/client/main.tsx +9 -0
- package/src/canvas/server.ts +7 -0
- package/src/claude/cases/authoring.ts +5 -0
- package/src/claude/cases/misc.ts +0 -4
- package/src/claude/skills-reach.ts +1 -1
- package/src/cli/help.ts +2 -0
- package/src/cli.ts +2 -0
- package/src/commands/claude.ts +1 -1
- package/src/commands/gov.ts +2 -2
- package/src/commands/records.ts +19 -1
- package/src/commands/upstream.ts +295 -0
- package/src/context/audit.ts +1 -1
- package/src/design/brand-favicon.ts +18 -0
- package/src/gate/stages.ts +0 -1
- package/src/markdown/structure.ts +1 -1
- package/src/records/backup.ts +1 -0
- package/src/records/validate.ts +55 -0
- package/src/roots/record.ts +1 -0
- package/src/standards/read.ts +21 -1
- package/src/tasks/answers.ts +14 -1
- package/src/tasks/stack.ts +176 -0
- package/src/teach/nav.ts +5 -12
- package/src/upstream/catalog.ts +112 -0
- package/src/upstream/cursor.ts +120 -0
- package/src/upstream/digest.ts +75 -0
- package/src/upstream/releases.ts +169 -0
- package/standards/index.md +0 -1
- package/standards/plan.md +25 -12
- package/standards/rule.md +1 -1
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +1 -1
- package/claude/skills/index-lookup/REQUIREMENT.md +0 -35
- package/claude/skills/index-lookup/SKILL.md +0 -44
- package/governance/rules/canon/601-indexes.md +0 -9
- package/governance/rules/claude/565-behavior.md +0 -27
- package/governance/rules/claude/567-planning.md +0 -16
- package/governance/rules/claude/575-hooks.md +0 -16
- package/governance/rules/claude/576-settings.md +0 -13
- package/governance/rules/claude/592-claude-md.md +0 -19
- package/governance/rules/standards/markdown.md +0 -16
- package/governance/rules/writing/800-prose.md +0 -15
|
@@ -23,7 +23,7 @@ The ship chain assumed the work arrives uncommitted. `git-ship` ran `git-stage`
|
|
|
23
23
|
|
|
24
24
|
## Must not
|
|
25
25
|
|
|
26
|
-
- Restate the scope floors
|
|
26
|
+
- Restate the scope floors of minimal edits and no unrequested features, which a scope call the skill makes already holds
|
|
27
27
|
- Carry simplicity or abstraction rules, which `code-craft` owns
|
|
28
28
|
- Name a feature flag pattern, since the slices of one branch merge as one pull request rather than reaching trunk one at a time
|
|
29
29
|
- Name a framework, a test runner, or a line-count threshold, none of which holds across stacks
|
|
@@ -30,7 +30,7 @@ External sources were read and filtered rather than imported. This file is the r
|
|
|
30
30
|
|
|
31
31
|
**Rule 0, simplicity first, and the abstraction red flags.** Declined because `code-craft` owns when an abstraction earns its place and when to write the plainest code that passes. Restating it here would put two owners on one rule.
|
|
32
32
|
|
|
33
|
-
**The rest of its scope section.** Declined
|
|
33
|
+
**The rest of its scope section.** Declined as a scope call this skill makes: its slices already keep to the plan, and minimal edits, no unrequested features, and edits limited to what the user named restate that in different words. Only the noticed list was new.
|
|
34
34
|
|
|
35
35
|
**Rule 3, feature flags for incomplete features.** Declined because the slices of one branch merge together as one pull request rather than reaching trunk one at a time, so nothing incomplete is exposed between them.
|
|
36
36
|
|
|
@@ -43,6 +43,8 @@ Classify against the toolkit's own surfaces. Score in this order and stop at the
|
|
|
43
43
|
|
|
44
44
|
State the class and the one-line reason per issue before routing. Do not batch unrelated fixes into one branch.
|
|
45
45
|
|
|
46
|
+
When the fix encodes into a skill, standard, or seed, keep the principle and strip the reporting project's specifics: its filenames, frameworks, deploy targets, and label values. The issue describes one project, and the fix serves every project that installs the toolkit.
|
|
47
|
+
|
|
46
48
|
## Step 3: route
|
|
47
49
|
|
|
48
50
|
- Direct fix: rename the branch to a conventional name (invoke `git-branch`), make the edit, then open the PR with `git-pr`.
|
|
@@ -90,7 +90,7 @@ Read `ok` and `reason` out of that record rather than the exit. An operator's sh
|
|
|
90
90
|
- Update only the sections affected by session decisions.
|
|
91
91
|
- Do not rewrite sections unrelated to what changed.
|
|
92
92
|
- Rewrite a restated or superseded statement in place rather than appending the replacement beside it. State the fact that stands and keep the earlier reasoning only where it is the alternative that lost, per `${CLAUDE_SKILL_DIR}/../../standards/context.md` and `${CLAUDE_SKILL_DIR}/../../standards/architecture.md`.
|
|
93
|
-
- Follow `${CLAUDE_SKILL_DIR}
|
|
93
|
+
- Follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` and the `write-human` skill for all edits.
|
|
94
94
|
- Write a session decision into the `canon/context/` entry for the domain it constrains, under that entry's `## Decisions`, by default.
|
|
95
95
|
- Touch `canon/ARCHITECTURE.md` only when a plan a matched task's `Plan:` line names states a decision filling a slot `${CLAUDE_SKILL_DIR}/../../standards/architecture.md` names. A slot decision no plan carries goes to the domain entry.
|
|
96
96
|
- Read the entry cap the record states before adding a decision to it. At the cap, merge two decisions or retire one to the domain entry it constrains, and name which in the report. Never compress a decision's prose to fit, and never pack two decisions under one heading.
|
|
@@ -12,7 +12,7 @@ Read these files in parallel:
|
|
|
12
12
|
- `${CLAUDE_SKILL_DIR}/../../standards/skill.md`: skill structure, skill types, frontmatter fields, invocation rules
|
|
13
13
|
- `${CLAUDE_SKILL_DIR}/../../standards/skill-requirement.md`: what `REQUIREMENT.md` must answer, its sections, and its template
|
|
14
14
|
- `${CLAUDE_SKILL_DIR}/../../standards/skill-paths.md`: which root a path in the body resolves against, and how the body cites a standard
|
|
15
|
-
- `${CLAUDE_SKILL_DIR}
|
|
15
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for skill body text
|
|
16
16
|
- The `write-human` skill: voice, rhythm, and sentence construction for skill body text
|
|
17
17
|
|
|
18
18
|
## Guards
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
Creates one standard file. Read these files in parallel:
|
|
11
11
|
|
|
12
|
-
- `${CLAUDE_SKILL_DIR}
|
|
12
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
13
13
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
14
14
|
- `${CLAUDE_SKILL_DIR}/../../standards/standard.md`: the meta-standard for shape, frontmatter, and structure
|
|
15
15
|
|
|
@@ -34,7 +34,7 @@ Read these on both paths, skipping any that do not exist:
|
|
|
34
34
|
|
|
35
35
|
- `CLAUDE.md`: voice and personality
|
|
36
36
|
- `canon/REQUIREMENTS.md`: the `## Personality` paragraph, worldview, non-goals
|
|
37
|
-
- `${CLAUDE_SKILL_DIR}
|
|
37
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: word, punctuation, and formatting constraints
|
|
38
38
|
- The `write-human` skill: tone and sentence construction constraints
|
|
39
39
|
|
|
40
40
|
On the source path, also read the UI surfaces matched in Step 1 plus `canon docs output-shape` and `canon docs index`, for output shape or framing rules already documented in the toolkit's own reference. Skip either that fails to resolve, since a project keeping its framing rules elsewhere is read there instead.
|
|
@@ -57,7 +57,7 @@ Use the returned content as the target shape. Keep every section heading and eve
|
|
|
57
57
|
|
|
58
58
|
## Step 4: fill the template
|
|
59
59
|
|
|
60
|
-
Walk each section once. Follow `${CLAUDE_SKILL_DIR}
|
|
60
|
+
Walk each section once. Follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` for punctuation throughout: no em dashes, no semicolons. Use commas or separate sentences instead. Load the `write-human` skill for word choice, which keeps marketing words out.
|
|
61
61
|
|
|
62
62
|
Mark any cell not traced to a source value by appending ` ? verify` inside the cell value, never as a trailing column. The cell stays inside the table shape: `| #ffffff ? verify |`. A trailing `| ? verify` after the row breaks the parser. A prose section takes its uncertainty inline instead, for example `Proposed 150ms ease-out, not yet confirmed.`, because a trailing tag on a sentence renders raw in the preview.
|
|
63
63
|
|
|
@@ -46,7 +46,7 @@ Two worked examples:
|
|
|
46
46
|
|
|
47
47
|
The read fixes the kind, which decides which rules apply, and names the layer, which decides what may vary. A round that cannot state its read has not decided what it is doing.
|
|
48
48
|
|
|
49
|
-
Put the read to the operator through the structured question surface where it genuinely forks
|
|
49
|
+
Put the read to the operator through the structured question surface where it genuinely forks. Where context settles it, declare and proceed rather than asking.
|
|
50
50
|
|
|
51
51
|
## The layers, and the order they settle
|
|
52
52
|
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
Read these files in parallel:
|
|
11
11
|
|
|
12
|
-
- `${CLAUDE_SKILL_DIR}
|
|
12
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
13
13
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
14
14
|
- `${CLAUDE_SKILL_DIR}/../../standards/readme.md`: README structure, required sections, and content rules
|
|
15
15
|
- `${CLAUDE_SKILL_DIR}/../../standards/docs.md`: the reader a page under `docs/` serves, its frontmatter, structure, and what it links out rather than carrying
|
|
@@ -30,7 +30,7 @@ Each kind has one standard and one reference. Load the reference for the resolve
|
|
|
30
30
|
Read these in parallel, from the project root where a path is relative:
|
|
31
31
|
|
|
32
32
|
- The kind's standard from the table above: the reader the document serves, its frontmatter, its structure, and what it links out to rather than restates
|
|
33
|
-
- `${CLAUDE_SKILL_DIR}
|
|
33
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
34
34
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
35
35
|
- The kind's reference from the table above
|
|
36
36
|
|
|
@@ -19,7 +19,7 @@ Decide whether a requested figure reduces to a graph Mermaid can draw, is one of
|
|
|
19
19
|
Read these in parallel:
|
|
20
20
|
|
|
21
21
|
- `${CLAUDE_SKILL_DIR}/../../standards/figures.md`: when a figure earns its place, the render-first policy, wrapping and captioning, and the color and accessibility rules
|
|
22
|
-
- `${CLAUDE_SKILL_DIR}
|
|
22
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: formatting for the caption prose
|
|
23
23
|
- The `write-human` skill: voice and rhythm for the caption prose
|
|
24
24
|
|
|
25
25
|
## Step 2: does it earn its place
|
|
@@ -10,7 +10,7 @@ description: The hand-drawn render config, the SVG and PNG pair, the hex rewrite
|
|
|
10
10
|
## Draft the fence
|
|
11
11
|
|
|
12
12
|
- Draft the fence against `${CLAUDE_SKILL_DIR}/../../standards/mermaid.md` for direction, node and edge budgets, `accTitle` and `accDescr`, and quoted labels. Do not work the layout or the budgets from memory.
|
|
13
|
-
- Read every node and subgraph label against the banned characters `${CLAUDE_SKILL_DIR}
|
|
13
|
+
- Read every node and subgraph label against the banned characters `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` lists. The audit hook skips every line inside a fence, so a label carrying a banned character passes silently while the same character in the caption is caught. Reading the labels is the only gate they have. A colon works as a replacement inside a label.
|
|
14
14
|
|
|
15
15
|
## Render
|
|
16
16
|
|
|
@@ -51,4 +51,4 @@ Without this skill, a session holding finished files that hands them to a worker
|
|
|
51
51
|
- `role-worker` copies the folder into a worktree and ships it. This stops once the three artifacts exist.
|
|
52
52
|
- `task-board` creates a task file for a row with no ready folder. This writes the row it needs beside the folder and calls the same verbs.
|
|
53
53
|
- `git-ship` ships a branch, and a ready folder never reaches one.
|
|
54
|
-
- `standards/ready.md` owns the folder's shape and lifecycle, and this skill owns the procedure that produces it, the way `write-human` and `
|
|
54
|
+
- `standards/ready.md` owns the folder's shape and lifecycle, and this skill owns the procedure that produces it, the way `write-human` and the `markdown` rule split.
|
|
@@ -14,7 +14,7 @@ Format an issue from session context following the issue standard, then file it
|
|
|
14
14
|
Read these in parallel:
|
|
15
15
|
|
|
16
16
|
- `${CLAUDE_SKILL_DIR}/references/issue.md`: issue title, labels, body sections, and banned phrases
|
|
17
|
-
- `${CLAUDE_SKILL_DIR}
|
|
17
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
18
18
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
19
19
|
|
|
20
20
|
Then gather repo context in parallel:
|
|
@@ -14,7 +14,7 @@ Read these files in parallel:
|
|
|
14
14
|
- `${CLAUDE_SKILL_DIR}/../../standards/branch.md`: branch format, valid types, and constraints
|
|
15
15
|
- `${CLAUDE_SKILL_DIR}/../../standards/pr.md`: structure, rules, and banned phrases
|
|
16
16
|
- `${CLAUDE_SKILL_DIR}/references/labels.md`: label map format, matching, and the missing-label warning. Skip when the project has no `canon/config/pr-labels.toml` and no `.claude/canon/pr-labels.toml`.
|
|
17
|
-
- `${CLAUDE_SKILL_DIR}
|
|
17
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
18
18
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
19
19
|
- `${CLAUDE_SKILL_DIR}/../../standards/versioning.md`: phase label vs semver discipline
|
|
20
20
|
|
|
@@ -10,7 +10,7 @@ metadata:
|
|
|
10
10
|
Read these files in parallel:
|
|
11
11
|
|
|
12
12
|
- `${CLAUDE_SKILL_DIR}/../../standards/commit.md`: format, types, scopes, and constraints
|
|
13
|
-
- `${CLAUDE_SKILL_DIR}
|
|
13
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
|
|
14
14
|
- The `write-human` skill: voice, rhythm, and sentence construction for all generated text
|
|
15
15
|
|
|
16
16
|
## Context
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: markdown-craft
|
|
3
|
+
description: Why the markdown format rules travel in a skill, and where the boundary sits against the voice skill and the audit command
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Markdown craft requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, the markdown format rules sat in a standard that a session opened only when a rule told it to. The banned characters and the structure rules are facts a scan settles, yet a session wrote the whole document from memory and learned the result only from the audit's exit.
|
|
11
|
+
|
|
12
|
+
The rules also had three carriers, a standard, a generated rule pointing at it, and a second hand-written rule routing voice. Each stated one routing and each drifted from the others.
|
|
13
|
+
|
|
14
|
+
## Must
|
|
15
|
+
|
|
16
|
+
- Hold the format and structure reference in `references/markdown.md`, the one copy, read by sibling path from every skill that writes markdown
|
|
17
|
+
- Send the session to `canon markdown audit` after an edit, since the audit reads the bans from the package and a restated list would drift
|
|
18
|
+
- Route voice to `write-human` and a Mermaid fence to `draft-figure` rather than restating either
|
|
19
|
+
|
|
20
|
+
## Must not
|
|
21
|
+
|
|
22
|
+
- Restate the banned characters in the body
|
|
23
|
+
- Carry voice, rhythm, or word guidance, which `write-human` owns
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: markdown-craft
|
|
3
|
+
description: Carries the format and structure rules for markdown, being headings, paragraph and list shape, code spans, the date form, punctuation, emphasis, file references, American spelling, and frontmatter wording, and runs the audit after an edit. Use before a substantial markdown edit, when writing a README, a doc, a skill body, or any `.md` file, or when asked "what are the markdown rules" or "which characters are banned". Do NOT use for voice, rhythm, or word choice, which is `write-human`, or for a Mermaid fence or figure, which is `draft-figure`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: answer
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Markdown craft
|
|
9
|
+
|
|
10
|
+
Read `${CLAUDE_SKILL_DIR}/references/markdown.md` before a substantial markdown edit. Every rule in it is a fact a scan can settle, so do not work the banned characters from memory.
|
|
11
|
+
|
|
12
|
+
Run `canon markdown audit <path>` after the edit. Rewrite the sentence carrying a hit rather than swapping the token for a near-synonym.
|
|
13
|
+
|
|
14
|
+
## Routes
|
|
15
|
+
|
|
16
|
+
- Voice, rhythm, sentence construction, and information density: load `write-human`.
|
|
17
|
+
- A Mermaid fence or a figure: load `draft-figure`, since the audit skips every line inside a fence.
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Markdown reference
|
|
3
3
|
description: Headings, paragraph and list structure, code spans, the date form, punctuation, emphasis, file references, American spelling, and frontmatter wording
|
|
4
|
-
paths:
|
|
5
|
-
- '**/*.md'
|
|
6
|
-
rule:
|
|
7
|
-
- 'Read it before a substantial markdown edit. Do not work the banned characters from memory.'
|
|
8
|
-
- 'Run `canon markdown audit <path>` after the edit, and rewrite the sentence carrying a hit rather than swapping the token for a near-synonym.'
|
|
9
|
-
- 'Voice, rhythm, and sentence construction are a separate topic. `800-prose` routes them.'
|
|
10
|
-
- 'Load the `canon:draft-figure` skill before drafting or revising a Mermaid fence or a figure, and report it rather than proceeding silently when it does not resolve.'
|
|
11
4
|
---
|
|
12
5
|
|
|
13
6
|
# Markdown reference
|
|
14
7
|
|
|
15
8
|
Applies to markdown reference docs, READMEs, and inline documentation in repos. Every rule here is a fact a scan can settle rather than a judgment, so no surface yields any of them. A surface stating its own voice claims that yield from the voice guidance and formats and spells by this file regardless.
|
|
16
9
|
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [Scope](#scope)
|
|
13
|
+
- [Headings](#headings)
|
|
14
|
+
- [Paragraphs and lists](#paragraphs-and-lists)
|
|
15
|
+
- [Code and identifiers](#code-and-identifiers)
|
|
16
|
+
- [Dates](#dates)
|
|
17
|
+
- [Punctuation](#punctuation)
|
|
18
|
+
- [Language](#language)
|
|
19
|
+
- [Frontmatter descriptions](#frontmatter-descriptions)
|
|
20
|
+
- [Emphasis and dividers](#emphasis-and-dividers)
|
|
21
|
+
- [Links and file references](#links-and-file-references)
|
|
22
|
+
- [Examples](#examples)
|
|
23
|
+
|
|
17
24
|
## Scope
|
|
18
25
|
|
|
19
26
|
Governs what a check can decide about a markdown file: headings, paragraph and list structure, code spans and fences, the form a date takes, punctuation, emphasis, file references, the spelling convention, what prose may claim about its sources, and the wording of a catalog title and description. It is an attribute standard rather than a document-type one, so it applies over documents whose shape another standard sets, and it carries no template because these rules are written across every document and have no shape of their own.
|
|
@@ -29,7 +29,7 @@ Read in parallel, skipping any that do not exist:
|
|
|
29
29
|
- `CLAUDE.md`: the project's write location and any rule it states over the folder
|
|
30
30
|
- `.canon/memory/index.md`: existing index, to avoid duplicates
|
|
31
31
|
- `canon/context/index.md`: the domain catalog Step 3 routes against, read under `.claude/` instead in a project the surface move has not reached
|
|
32
|
-
- `${CLAUDE_SKILL_DIR}
|
|
32
|
+
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting applied to memory file bodies
|
|
33
33
|
- The `write-human` skill: voice, rhythm, and sentence construction applied to memory file bodies
|
|
34
34
|
|
|
35
35
|
## Step 2: classify candidates
|
|
@@ -73,7 +73,7 @@ An entry's `unresolved` list in the stale record names paths it cites that the t
|
|
|
73
73
|
|
|
74
74
|
For each in-scope entry (see Scope), pick one action:
|
|
75
75
|
|
|
76
|
-
- **Promote to an always-loaded rule**: the rule is cross-domain behavior or a design principle applied across the whole project, passing `
|
|
76
|
+
- **Promote to an always-loaded rule**: the rule is cross-domain behavior or a design principle applied across the whole project, passing the tier test in `canon/context/context-model/overview.md` (applies every session regardless of what is being edited). Do not author a toolkit rule file inline.
|
|
77
77
|
- In the toolkit repo, hand off to `internal-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md`, which own `internal/rules/` (this repo only, never ships) and the audience group under `governance/rules/` the rule serves (ships to every target that group reaches).
|
|
78
78
|
- In a target project, append the rule to an existing file under `.claude/rules/project/` with `Edit`, since a project rule is project-owned and sync never overwrites it, or hand off to the `create-rule` skill when no existing file fits.
|
|
79
79
|
- **Promote to a skill body**: the rule fires only when editing a specific path-scoped domain. Name the target skill.
|
|
@@ -13,8 +13,9 @@ Without this skill, implementation starts before anyone knows what it touches. A
|
|
|
13
13
|
|
|
14
14
|
- Read the project's own Claude setup before scanning source, so the plan inherits decisions already made instead of reopening them
|
|
15
15
|
- Reframe a vague ask as observable, checkable success criteria before listing any file, and carry each criterion into the plan's verification, so a plan never ships a check with nothing measurable to prove
|
|
16
|
-
- Slice batches by a user-visible path rather than by layer, and sequence the riskiest batch first while a sweep stays last, so the batch most likely to change the plan lands while later ones can still move
|
|
16
|
+
- Slice batches by a user-visible path rather than by layer, and sequence the riskiest batch first while a sweep stays last, so the batch most likely to change the plan lands while later ones can still move, and fold a stacked batch that shares most of its files into its parent unless the plan writes down why the two are judged apart, since a canvas inspector built as five stacked pull requests over 26 files paid the full review, rebase, and merge cost five times
|
|
17
17
|
- Predict the operator's answers to the next three questions about the ask's success criteria, proceed on the ones it can predict, and ask when it can predict none, since a plan built on a guessed goal proves the wrong thing
|
|
18
|
+
- Fetch the outside source a decision rests on, quote the passage relied on in the plan's `**Sources:**` section, and mark a source it could not fetch as unverified, since a planner that paraphrases a practice from model memory ships an unaudited claim. A measured planner run fetched its sources only after a follow-up message asked, and the `search-craft` measured run shows a plain research request never loaded that skill unprompted
|
|
18
19
|
- Name every file the work touches with the reason it is touched
|
|
19
20
|
- Place each new path against the layout guidance with a one-clause reason, loading that guidance only when the plan creates a file or folder, since the planner decides placement and the worker copies whatever path it is given
|
|
20
21
|
- Name how each outcome is proven and which input or state would break the change, so the executing session has a check to run and the reviewer has a place to look
|
|
@@ -40,6 +40,13 @@ Measure against the tree rather than recall. Grep for each construct the plan wi
|
|
|
40
40
|
|
|
41
41
|
Open each file before describing what is in it. A count or a claim carried from an earlier session, a summary, or another document is the most common way a plan ships the wrong scope.
|
|
42
42
|
|
|
43
|
+
When a decision the plan will make rests on an outside practice or a third-party behavior, invoke `canon:search-craft` before searching, fetch each source, and record the passage relied on. Skip this for a plan that rests on nothing outside the project.
|
|
44
|
+
|
|
45
|
+
- Ask the fetch for the verbatim passage, and confirm the wording through `curl` where a decision turns on exact wording, since `WebFetch` returns a model's answer rather than the page.
|
|
46
|
+
- Route a Claude Code subject to the `claude-code-guide` agent.
|
|
47
|
+
- Mark a source that could not be fetched as unverified rather than citing recall.
|
|
48
|
+
- Report it rather than proceeding silently when `canon:search-craft` does not resolve.
|
|
49
|
+
|
|
43
50
|
## Step 3: build the plan
|
|
44
51
|
|
|
45
52
|
The section list, what each section holds, and the suggested-and-answer contract are fixed by `${CLAUDE_SKILL_DIR}/../../standards/plan.md`, and the lifecycle by `${CLAUDE_SKILL_DIR}/../../standards/plan-lifecycle.md`. Read it before writing the file and follow it rather than working the shape from memory.
|
|
@@ -47,10 +54,13 @@ The section list, what each section holds, and the suggested-and-answer contract
|
|
|
47
54
|
What this skill adds on top of the standard:
|
|
48
55
|
|
|
49
56
|
- Reframe a vague ask as success criteria before writing `**Files to touch:**`. Each criterion names something observable and a check that decides it, such as a measure and the threshold it must stay under, drawn from the ask or the project context. "Make it faster" names no criterion, while a stated budget for one path does. Each criterion becomes one `**Verification:**` bullet.
|
|
57
|
+
- Confirm a concrete project or use case drives the feature before shaping it, and lift patterns from that project where precedent exists. A feature with no named user is a guess about what one will want.
|
|
58
|
+
- Prefer one layout that serves both a new and a grown project over a dual-mode toggle or a migration shim. Two modes double what every later change has to hold.
|
|
50
59
|
- Apply senior judgment to every `- Suggested:` line. Pick the best option and state it in one line with its reason or main tradeoff. No padding, no alternatives unless they change the pick.
|
|
51
60
|
- Suggest a real default when best practice, the codebase, or prior context points to one.
|
|
52
61
|
- Load the `canon:codebase-layout` skill before writing the `**Files to touch:**` entries when any of them names a file or folder that does not exist yet, and give each new path its placement reason in its entry. Skip the load when every entry edits an existing file. Report it rather than proceeding silently when the skill does not resolve.
|
|
53
62
|
- Write `**Verification:**` as one bullet per outcome naming the test or command that proves it, and `**Review focus:**` as the inputs or states that would break the change. You understood the risk before any diff existed, and these two sections carry it to the executing session and to the reviewer.
|
|
63
|
+
- Cite the `**Sources:**` entry for every decision Step 2 sourced, each with its quoted passage or the word `unverified`.
|
|
54
64
|
- Prefer `None identified.` over low-signal fillers. A small feature should produce a short plan, not a padded one.
|
|
55
65
|
- When three or more questions remain, keep chat output to the file pointer plus a short summary. Inline chat is fine when two or fewer remain.
|
|
56
66
|
|
|
@@ -59,9 +69,9 @@ What this skill adds on top of the standard:
|
|
|
59
69
|
A plan sequencing its work into batches declares where one pull request ends, here rather than at ship time. A dependency chain cannot be split once it is built, so the choice exists only while the batches are still a plan.
|
|
60
70
|
|
|
61
71
|
- One batch is one pull request, and one pull request is one plan file, named for its own concern rather than a numeric suffix. `canon tasks plan-branch` derives one branch from one plan filename, so a `**Batch N**` sub-heading inside one file's `**Files to touch:**` shares that one branch across every batch, and the batch that merges first strands every batch behind it with nothing left to open a pull request against. Write a plan opening five batches as five files before the first line of any of them.
|
|
62
|
-
- State a dependent batch's dependency on the ones before it in its own `**Constraints:**`, naming the earlier batch's slug and stacking rather than merging into it.
|
|
72
|
+
- State a dependent batch's dependency on the ones before it in its own `**Constraints:**`, naming the earlier batch's slug and stacking rather than merging into it. A batch that builds after another and shares most of its files with it folds into that batch as contiguous commits on one branch, since each pull request pays a fixed cost a same-file slice cannot earn back, and the rebases between stacked slices land on the same files. Keep a batch apart only where a reviewer or the operator would judge it apart: a contract a later batch is built against, a taste call the operator judges in its own sitting, or a fold that would exceed one review. Write that reason as ``Judged apart from `feature-<parent>`: <reason>`` in the batch's `**Constraints:**`. `canon records validate plans` reports a stacked batch that should have folded, and its thresholds live there.
|
|
63
73
|
- Mark each batch dependent or independent by comparing the file sets rather than the descriptions. A batch sharing no file with another is independent and earns its own branch even where both arrived in one request. One run measured at 68 files carried three such batches into a single review because nothing drew the boundary.
|
|
64
|
-
- Slice a batch by one user-visible path end to end rather than by layer, so each batch ships something a person can exercise. The slice decides what a batch contains, and the file-set comparison above still decides whether two batches depend on each other, so two slices sharing a file stay marked dependent
|
|
74
|
+
- Slice a batch by one user-visible path end to end rather than by layer, so each batch ships something a person can exercise. The slice decides what a batch contains, and the file-set comparison above still decides whether two batches depend on each other, so two slices sharing a file stay marked dependent. A path too thin to pay a pull request of its own folds forward into the next.
|
|
65
75
|
- Sequence the riskiest batch first, so the batch most likely to change the plan is built while every later batch can still move. A sweep is the one exception and stays last even when it is the riskiest, per the next bullet.
|
|
66
76
|
- Sequence a sweep last. A batch deliberately rewriting files earlier batches touched is coherent as the final one and forces every batch behind it into one review anywhere else.
|
|
67
77
|
- Keep each batch's commits contiguous once the work starts. A later fix to an earlier batch belongs on that batch's own commits, since a batch interrupted by another cannot be lifted onto its own branch afterward.
|
|
@@ -112,7 +112,7 @@ fixes.
|
|
|
112
112
|
|
|
113
113
|
The reply is a rendered-for-human GitHub surface, so load the `write-human`
|
|
114
114
|
skill for voice and word choice, follow
|
|
115
|
-
`${CLAUDE_SKILL_DIR}
|
|
115
|
+
`${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` for punctuation, and keep each
|
|
116
116
|
mapping to a line or two.
|
|
117
117
|
|
|
118
118
|
Open the body with the `## Review response` heading so it anchors as a section
|
|
@@ -7,7 +7,7 @@ description: How review-address posts something worth reporting after Step 7 clo
|
|
|
7
7
|
|
|
8
8
|
Outside the numbered flow of `review-address`. The session reads this file when it has something worth reaching the reviewing session after Step 7 already closed the review.
|
|
9
9
|
|
|
10
|
-
Not everything worth reaching the reviewing session surfaces inside the numbered flow in `SKILL.md`. A worker that settled a risk, filed a follow-up, or found something else worth reporting after Step 7 already closed the review posts it directly rather than waiting on a review pass that has nothing left to trigger it. Write the body the way Step 6 writes a reply: load `write-human` for voice and word choice, follow `${CLAUDE_SKILL_DIR}
|
|
10
|
+
Not everything worth reaching the reviewing session surfaces inside the numbered flow in `SKILL.md`. A worker that settled a risk, filed a follow-up, or found something else worth reporting after Step 7 already closed the review posts it directly rather than waiting on a review pass that has nothing left to trigger it. Write the body the way Step 6 writes a reply: load `write-human` for voice and word choice, follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` for punctuation, and run the `${CLAUDE_SKILL_DIR}/../../standards/publish.md` scan before posting with `canon labels scan --body-file .canon/tmp/pr/reply/reply-<number>.md`.
|
|
11
11
|
|
|
12
12
|
Open with `## Post-review findings` rather than `## Review response`, since nothing on the thread is being answered. `review-pr` states the full heading set this belongs to and routes it the same as a response: `role-orchestrator`'s poll picks it up and sends the reviewing session back for a pass. Close the body with `🤖 Addressed by Claude Code` on its own line, matching the reply's footer.
|
|
13
13
|
|
|
@@ -29,11 +29,11 @@ A finding bound to a line links to it, so a reader skips the hunt:
|
|
|
29
29
|
|
|
30
30
|
A finding that spans lines anchors to the span as `#L12-L14`, with no spaces and no en dash, and a single-line finding anchors as `#L12`. Take the line number from the file read at `<headRefOid>`, `git show <headRefOid>:<path>`, never from another checkout. The URL carries the full 40-character `<headRefOid>`, never `<short-sha>`, `HEAD`, or the branch name, so the link survives a push. A later pass restating an open finding links it again at its own `<headRefOid>` rather than copying the old bullet.
|
|
31
31
|
|
|
32
|
-
Four findings take the plain bullet with no link: a `**PR body**` entry, a finding on a file the head deleted, a finding on a line the diff removed from a file that survives, since the head holds no number for it, and a finding about a whole file with no one line. A path holding a character a URL needs encoded, such as a space or `#`, is percent-encoded in the link or keeps the plain bullet. Keep the file block header a bare backticked path, so the section-marker reading in `${CLAUDE_SKILL_DIR}
|
|
32
|
+
Four findings take the plain bullet with no link: a `**PR body**` entry, a finding on a file the head deleted, a finding on a line the diff removed from a file that survives, since the head holds no number for it, and a finding about a whole file with no one line. A path holding a character a URL needs encoded, such as a space or `#`, is percent-encoded in the link or keeps the plain bullet. Keep the file block header a bare backticked path, so the section-marker reading in `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` does not change.
|
|
33
33
|
|
|
34
34
|
## The body shapes
|
|
35
35
|
|
|
36
|
-
The comment is a rendered-for-human GitHub surface, so load the `write-human` skill for voice and word choice and follow `${CLAUDE_SKILL_DIR}
|
|
36
|
+
The comment is a rendered-for-human GitHub surface, so load the `write-human` skill for voice and word choice and follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` for punctuation: cut editorializing, and keep every sentence load-bearing. Match this shape on a first pass:
|
|
37
37
|
|
|
38
38
|
```markdown
|
|
39
39
|
## Review
|
|
@@ -18,7 +18,7 @@ A needs-eyes box leaves the review closed, and so does a box not driven for a ca
|
|
|
18
18
|
|
|
19
19
|
## The body
|
|
20
20
|
|
|
21
|
-
Write it to `.canon/tmp/pr/review-ui/body-<number>-<short-sha>.md` at the main worktree root, sent as a heredoc the way `session-worktree` states for a main-root write. Load the `write-human` skill for the prose and follow `${CLAUDE_SKILL_DIR}
|
|
21
|
+
Write it to `.canon/tmp/pr/review-ui/body-<number>-<short-sha>.md` at the main worktree root, sent as a heredoc the way `session-worktree` states for a main-root write. Load the `write-human` skill for the prose and follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` for punctuation.
|
|
22
22
|
|
|
23
23
|
```markdown
|
|
24
24
|
<## UI review, or ## UI review closed, by the rule above>
|
|
@@ -42,6 +42,7 @@ Run `canon tasks plan-answers <plan> --json` and read `launchable` off the recor
|
|
|
42
42
|
- `reason: archived`: the row's plan sits in `.canon/plans/archive/` and describes work that already shipped. Repoint the row at a live plan rather than dispatching, since `auto-ship` Step 1 refuses the same file and the worker would meet that refusal after the launch spent.
|
|
43
43
|
- The command refuses for any other reason, or the record carries no `launchable` key: treat the row as unverified rather than clear, name what could not be read, and fall back to the human. A gate that reads nothing and proceeds is the gate not running.
|
|
44
44
|
- The same read also refuses a plan still staging its batches in one file with `**Batch N**` sub-headings. That reports as an entry in `open` labeled `Batch staging`, so a staged plan reads as `launchable: false` the same way an unanswered operator call does, and the row waits on a split rather than on the operator.
|
|
45
|
+
- An entry labeled `Stacked sibling` means the plan stacks on a live sibling it mostly shares files with, so the row waits on a fold into that sibling or on a `Judged apart from` constraint line, and not on the operator.
|
|
45
46
|
|
|
46
47
|
Branch on `launchable` rather than on the exit code, which a shell function wrapping `canon` can flatten to zero and so read a held row as a clear one.
|
|
47
48
|
|
|
@@ -75,7 +75,7 @@ candidate list and stop rather than choosing on the operator's behalf.
|
|
|
75
75
|
For each chosen folder, read every `*.md` sibling and draft frontmatter:
|
|
76
76
|
|
|
77
77
|
- `title`: derived from the first H1. If absent, derive from the filename in sentence case.
|
|
78
|
-
- `description`: one line summarizing the file's purpose, drawn from the first paragraph after the H1. Follow `${CLAUDE_SKILL_DIR}
|
|
78
|
+
- `description`: one line summarizing the file's purpose, drawn from the first paragraph after the H1. Follow `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md` § Frontmatter descriptions for length and style.
|
|
79
79
|
|
|
80
80
|
Surface every drafted entry to the user grouped by file:
|
|
81
81
|
|
|
@@ -33,7 +33,7 @@ Without this skill, a session implementing a planned change writes the test afte
|
|
|
33
33
|
|
|
34
34
|
- Choosing the layer a test belongs at and judging whether it is a good test: `canon:test-craft`, loaded at step 1 rather than restated here
|
|
35
35
|
- Finding the cause of an unexplained failure: `canon:systematic-debugging`
|
|
36
|
-
- Confirming visual output after a change lands: `
|
|
36
|
+
- Confirming visual output after a change lands: `ui-checklist` writes the list to confirm against
|
|
37
37
|
- Shaping the function, class, or module the implementation writes: `canon:code-craft`, loaded at step 4 rather than restated here
|
|
38
38
|
- Committing the behavior as a slice and ordering the slices of a larger build: `canon:build-in-slices`
|
|
39
39
|
- The mechanical audit of whether an implementation reached history ahead of its test: `canon gov test-order`, invoked from `auto-ship`
|
|
@@ -11,7 +11,7 @@ Write prose that reads as though a person wrote it. A ban list subtracts words a
|
|
|
11
11
|
|
|
12
12
|
Load this before drafting a passage rather than after. A revision pass recovers the words and never recovers the structure the draft already settled.
|
|
13
13
|
|
|
14
|
-
The banned characters sit in `${CLAUDE_SKILL_DIR}
|
|
14
|
+
The banned characters sit in `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`. They stay in force here. This skill adds to them and never restates them, since `canon markdown audit` reads them from the package and a second copy would drift. The word guidance under `## Voice` is the one copy of that list, and no command reads it.
|
|
15
15
|
|
|
16
16
|
## What yields and what does not
|
|
17
17
|
|
package/docs/agents/commands.md
CHANGED
|
@@ -55,6 +55,7 @@ One row per top-level command, in the order `canon --help` prints them. A domain
|
|
|
55
55
|
| `canon markdown <verb>` | Fail markdown on a banned character or a dead link, and report its structure |
|
|
56
56
|
| `canon repo <verb>` | Propose and apply the remote's description, homepage, and topics |
|
|
57
57
|
| `canon census [path]` | Report tracked file count, extensions, and a line total skipping binaries |
|
|
58
|
+
| `canon upstream <verb>` | Read Claude Code releases from a cursor, and list the toolkit's own mechanisms |
|
|
58
59
|
|
|
59
60
|
`canon serve` drives no browser, which is what separates it from the four that do. All four ship now that `capture` does, so the line between them is the engine rather than the package. A generated page loses its script to an editor preview and to a `file://` open, so the link is the delivery rather than a convenience, and every generated surface here reaches a reader through one. A teach lesson's stylesheet is embedded rather than linked, so only its script still needs a server. It binds `127.0.0.1` and never a wildcard, because what it is pointed at is routinely a gitignored record tree. It sends `cache-control: no-store`, since a preview exists to be edited and reloaded and a cached stylesheet reads as a fix that did not work.
|
|
60
61
|
|
|
@@ -150,7 +151,7 @@ the JSON record rather than on the exit, since an offline machine has to read as
|
|
|
150
151
|
unmeasured rather than as a failing check.
|
|
151
152
|
|
|
152
153
|
`canon upgrade --json` carries one further state, `pending`, that the skew report
|
|
153
|
-
does not
|
|
154
|
-
|
|
155
|
-
`
|
|
156
|
-
|
|
154
|
+
does not: the working directory's checkout holds a release npm does not serve
|
|
155
|
+
yet, so there is nothing to install. The record names it in `checkout` beside
|
|
156
|
+
`latest`, exits 0, and its `message` starts `CLI stays at`. Outside a canon
|
|
157
|
+
checkout it never reads `pending`.
|
|
@@ -45,7 +45,7 @@ Only the third is mechanical, and it is the provenance check already reported be
|
|
|
45
45
|
|
|
46
46
|
It reports and never gates, which the standard settles rather than the usual judgment-against-fact line: the 150 checkpoint is diagnostic, so an entry that answers all three and is still long is a correct outcome. The one hard cap is the 300-line whole-document ceiling, which `canon markdown audit` and the Document ceiling gate stage read rather than this check. The JSON record carries the joined findings as `length`, each with a `causes` array in the standard's order, and the jurisdiction the join reads as `entries[].governed`. That flag is what parts a provenance list measured and empty from one never scanned, which the count alone cannot say. The join is published rather than left to a consumer, since deriving it means restating which question the provenance count answers.
|
|
47
47
|
|
|
48
|
-
Depth and bullet weight are quoted from `
|
|
48
|
+
Depth and bullet weight are quoted from `claude/skills/markdown-craft/references/markdown.md`, which states both over every markdown file rather than over a context entry, so `canon markdown audit` measures them and this command no longer does. They share `renderedHeight` with the length measure, since the two checkpoints sit in one section of that standard and a reader compares them. What the split costs is that a session wanting both numbers for one entry runs two commands, and what it buys is that either number can be had for a file in a folder this audit refuses to resolve.
|
|
49
49
|
|
|
50
50
|
## Tables
|
|
51
51
|
|
package/docs/agents/counts.md
CHANGED
|
@@ -36,7 +36,7 @@ The set is closed rather than derived, so widening it is a deliberate change to
|
|
|
36
36
|
|
|
37
37
|
A sentence has to carry an assertion verb (`loads`, `ships`, `carries`, `holds`, `counts`, `totals`, `documents`, `declares`, `installs`, `lists`, `contains`, `comprises`, `authors`), the quantifier `all`, or an article (`the`, `a`, `an`) immediately ahead of the number, which is immediately ahead of the catalog noun, with one optional qualifying word between the number and the noun (`sixty-one shipped skills`). The number reads either as digits or as a spelled-out cardinal through ninety-nine, since this corpus states a catalog size in words as often as in digits.
|
|
38
38
|
|
|
39
|
-
Nothing stands between the trigger and the number, which is the rule an author writing a new count has to know. It separates `the toolkit authors
|
|
39
|
+
Nothing stands between the trigger and the number, which is the rule an author writing a new count has to know. It separates `the toolkit authors 65 rules` and `took all 65 rules`, both read, from `a domain of 55 skills` and `denominator of sixty-one shipped skills`, neither of them read. A figure meant as a past state takes a date in the same sentence instead, which reads the sentence past whatever its shape.
|
|
40
40
|
|
|
41
41
|
## How the trigger set grew
|
|
42
42
|
|
|
@@ -44,7 +44,7 @@ The verb gate is not the first design tried. A bare number next to a catalog nou
|
|
|
44
44
|
|
|
45
45
|
The article half was added after a first review of the shipped design found a live miss: the development domain's gating-stages entry stated a stale audit total while the tree held 20, and the verb gate never reached it, since that sentence puts its verb after the noun rather than ahead of the number. Widening the trigger set to admit an article ahead of the number closed that gap.
|
|
46
46
|
|
|
47
|
-
The quantifier `all` and the verb `authors` joined on the same evidence, two more live misses failing only the trigger test. Allowing words to stand between the trigger and the number was the other candidate, measured and declined: at widths of one, two, and three it reached 77, 104, and 132 sentences against a baseline of 65, missed `took all
|
|
47
|
+
The quantifier `all` and the verb `authors` joined on the same evidence, two more live misses failing only the trigger test. Allowing words to stand between the trigger and the number was the other candidate, measured and declined: at widths of one, two, and three it reached 77, 104, and 132 sentences against a baseline of 65, missed `took all 65 rules` at every width, and reached `the toolkit authors 65 rules` only at a width admitting the indirect-noun shape below. The two words reach both at 75 sentences and no false positive.
|
|
48
48
|
|
|
49
49
|
## The plausibility filter
|
|
50
50
|
|
|
@@ -58,7 +58,7 @@ The article gate is looser than the verb list and carries a real cost. Re-runnin
|
|
|
58
58
|
|
|
59
59
|
A delta phrased as a transition (`from fourteen to fifteen`), a fraction (`thirteen of sixteen`), and a total reached through an indirect noun (`denominator of sixty-one shipped skills`) are all catalog-size claims this corpus carries, and none matches the trigger shape this reads. Each stays a known gap. The false-positive rate that gated closing them has a measurement behind it now, and what it showed is that the widening these three need is the one that costs a false positive rather than the one that does not.
|
|
60
60
|
|
|
61
|
-
A second figure in a sentence whose first figure already matched is a fourth gap and a structural one, since one match is taken per catalog per sentence. `authors
|
|
61
|
+
A second figure in a sentence whose first figure already matched is a fourth gap and a structural one, since one match is taken per catalog per sentence. `authors 65 rules under governance/rules/ and consumes 44 into .claude/rules/` is read for its 65 alone, which is correct here because the two figures name different populations, and a sentence stating one catalog twice would go unread the same way.
|
|
62
62
|
|
|
63
63
|
A calendar date (`2026-08-21`) or a backticked commit reference in the same sentence reads the whole sentence past, since that is how this corpus already marks a figure as a historical record rather than a live claim. `canon/ARCHITECTURE.md` and the context entries carry a figure this way deliberately, and every one of them stays correct forever.
|
|
64
64
|
|
package/docs/agents/index.md
CHANGED
|
@@ -67,4 +67,5 @@ CLI catalog and invocation rules for agents, split by command domain. Start with
|
|
|
67
67
|
- [Teach authoring](teach-authoring.md): Resolving what the next lesson needs before it is written, rendering a lesson body's blocks to HTML, and rewriting the root listing, a contents page, and each lesson's chrome and quiz stepper from its marker regions
|
|
68
68
|
- [Teach](teach.md): Listing learning workspaces with what their records schedule next, opening one with its required files, recording sources and glossary terms, viewing one with its chrome refreshed, where the lesson authoring verbs are described, the refusal reasons, and why every write here runs through a verb
|
|
69
69
|
- [Test order](test-order.md): Reading where an implementation reached history ahead of its test, how a pair is decided, the three verdicts, the coverage the pairing cannot reach, and why the check reports rather than gates
|
|
70
|
+
- [Upstream](upstream.md): The fetch, catalog, and advance verbs that read Claude Code releases against the toolkit, the cursor record, and each refusal reason
|
|
70
71
|
- [Worktrees](worktrees.md): Reporting which worktrees are reclaimable, removing the ones that are, the hidden verb that clears a stranded bare flag, the record a hook reads back, why the reading keys on the pull request rather than on git ancestry, the refusals it names, and the two removal shapes
|
|
@@ -30,9 +30,9 @@ applies, and the target's git diff is the record afterwards. `canon sync
|
|
|
30
30
|
The `standards` band is the largest such move. Each rule that only routed a
|
|
31
31
|
path to a standard now ships under that standard's name at
|
|
32
32
|
`.claude/rules/canon/standards/<standard>.md`, so a target holding
|
|
33
|
-
`canon/658-plan.md`
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
`canon/658-plan.md` syncs onto `standards/plan.md`. The markdown rule is
|
|
34
|
+
hand-written at `writing/markdown.md`, and a target holding
|
|
35
|
+
`standards/markdown.md` keeps it there as `800-prose` retires.
|
|
36
36
|
|
|
37
37
|
A project's own rules belong under `.claude/rules/project/`, where
|
|
38
38
|
`canon standards rule` reserves `900-999` for them, and a rule placed under
|
|
@@ -113,4 +113,4 @@ The verb reads the two attribute standards and nothing else. The five standards
|
|
|
113
113
|
|
|
114
114
|
That standard's cross-reference rule is out of reach rather than merely unimplemented. It resolves by destination, bare where the destination auto-links a pull request or issue number and backticked where it does not, so this verb sees only the half where the backticked form is correct. A check here would report every compliant reference in the tree and reach none of the published text that goes wrong, which is why the rule holds on reading alone.
|
|
115
115
|
|
|
116
|
-
The list-density rule at `
|
|
116
|
+
The list-density rule at `claude/skills/markdown-craft/references/markdown.md` is out of scope on purpose, since it carries no number and what a density figure should measure is still open.
|
package/docs/agents/routing.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Reading per CLAUDE.md section how many bullets name a path, what co
|
|
|
5
5
|
|
|
6
6
|
# Routing report
|
|
7
7
|
|
|
8
|
-
`canon claude routing` reports, per `CLAUDE.md` section, how many top-level bullets name a path and how many of those a path-scoped rule already covers. It answers the firing axis of the tier test in
|
|
8
|
+
`canon claude routing` reports, per `CLAUDE.md` section, how many top-level bullets name a path and how many of those a path-scoped rule already covers. It answers the firing axis of the tier test in `canon/context/context-model/overview.md`, whether a fact applies every session or fires on one path, and which until this verb existed was a judgment nothing counted. The tier test names two further axes, conditional presence and updatability, that this verb does not check.
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
canon claude routing
|
|
@@ -44,7 +44,7 @@ A relative path resolves against the project root first and against `.canon/task
|
|
|
44
44
|
|
|
45
45
|
`canon tasks plan-citations` reads a task's `Plan:` line against those same two bases in the opposite order, and tests that the target lands under the live plans folder, which this verb does not. Both answer the same file for every spelling a board writes. Liveness is a separate refusal here: a plan resolving inside `.canon/plans/archive/` returns `archived` rather than a launchable reading, since it answers every question and describes work that already shipped.
|
|
46
46
|
|
|
47
|
-
A plan still staging its batches with a `**Batch N**` sub-heading inside one file's `**Files to touch:**` reads `launchable: false` the same way, alongside the operator-call case. It reports as an entry in `open` labeled `Batch staging`,
|
|
47
|
+
A plan still staging its batches with a `**Batch N**` sub-heading inside one file's `**Files to touch:**` reads `launchable: false` the same way, alongside the operator-call case. It reports as an entry in `open` labeled `Batch staging`, since the row waits on a split into one file per batch rather than on the operator. A plan stacked on a live sibling it mostly shares files with reads the same way under `Stacked sibling`, and waits on a fold or on a ``Judged apart from `feature-<parent>`: <reason>`` constraint.
|
|
48
48
|
|
|
49
49
|
| Option | Effect |
|
|
50
50
|
| --------------- | ------------------------------------------- |
|
|
@@ -5,7 +5,7 @@ description: Reading where an implementation reached history ahead of its test,
|
|
|
5
5
|
|
|
6
6
|
# Test order
|
|
7
7
|
|
|
8
|
-
`canon gov test-order` reports where an implementation reached a commit ahead of the test covering the same behavior. It
|
|
8
|
+
`canon gov test-order` reports where an implementation reached a commit ahead of the test covering the same behavior. It measures the test-first order that the `test-first` skill and `auto-ship` hold, which until this verb existed was prose with nothing measuring it.
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
canon gov test-order
|