@erclx/aitk 0.52.0 → 0.53.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/claude-design-extract/SKILL.md +2 -1
- package/claude/skills/claude-docs/SKILL.md +1 -1
- package/claude/skills/claude-memory-capture/SKILL.md +2 -1
- package/claude/skills/claude-standards-audit/SKILL.md +5 -3
- package/claude/skills/create-skill/SKILL.md +2 -1
- package/claude/skills/create-snippet/SKILL.md +3 -2
- package/claude/skills/create-snippet/references/snippets.md +2 -1
- package/claude/skills/create-standard/SKILL.md +2 -1
- package/claude/skills/docs-sync/SKILL.md +2 -1
- package/claude/skills/git-issue/SKILL.md +2 -1
- package/claude/skills/git-issue/references/issue.md +2 -1
- package/claude/skills/git-pr/SKILL.md +2 -1
- package/claude/skills/git-pr/references/pr.md +2 -1
- package/claude/skills/git-split/references/pr.md +2 -1
- package/claude/skills/git-stage/SKILL.md +2 -1
- package/governance/rules/claude/500-prose.md +4 -3
- package/governance/rules/claude/501-markdown.md +13 -0
- package/governance/stacks/base.toml +1 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/src/comments/vocabulary.ts +1 -1
- package/standards/bundled/issue.md +2 -1
- package/standards/bundled/pr.md +2 -1
- package/standards/bundled/snippets.md +2 -1
- package/standards/diagrams.md +4 -3
- package/standards/index.md +2 -1
- package/standards/markdown.md +72 -0
- package/standards/prose.md +6 -57
- package/standards/publish.md +3 -2
- package/standards/readme.md +3 -2
- package/standards/skill.md +2 -1
- package/standards/standard.md +2 -1
- package/standards/versioning.md +2 -1
- package/standards/wireframes.md +3 -2
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +5 -1
|
@@ -33,6 +33,7 @@ Read these from the project root on both paths, skipping any that do not exist:
|
|
|
33
33
|
- `CLAUDE.md`: voice, personality, spelling rules
|
|
34
34
|
- `.claude/REQUIREMENTS.md`: the `## Personality` paragraph, worldview, non-goals
|
|
35
35
|
- `.claude/standards/prose.md`: tone constraints
|
|
36
|
+
- `.claude/standards/markdown.md`: punctuation and formatting constraints
|
|
36
37
|
|
|
37
38
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
38
39
|
|
|
@@ -54,7 +55,7 @@ Use the returned content as the target shape. Keep every section heading and eve
|
|
|
54
55
|
|
|
55
56
|
## Step 4: fill the template
|
|
56
57
|
|
|
57
|
-
Walk each section once. Follow `.claude/standards/prose.md` throughout: no em dashes, no semicolons, no marketing buzzwords. Use commas or separate sentences instead.
|
|
58
|
+
Walk each section once. Follow `.claude/standards/markdown.md` for punctuation and `.claude/standards/prose.md` for word choice throughout: no em dashes, no semicolons, no marketing buzzwords. Use commas or separate sentences instead.
|
|
58
59
|
|
|
59
60
|
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.
|
|
60
61
|
|
|
@@ -97,7 +97,7 @@ For each doc with relevant changes, apply updates following these rules. Read a
|
|
|
97
97
|
|
|
98
98
|
- Update only the sections affected by session decisions.
|
|
99
99
|
- Do not rewrite sections unrelated to what changed.
|
|
100
|
-
- Follow `.claude/standards/prose.md` for all edits.
|
|
100
|
+
- Follow `.claude/standards/prose.md` and `.claude/standards/markdown.md` for all edits.
|
|
101
101
|
|
|
102
102
|
Write each updated file immediately. Claude Code's tool permission dialog is the confirmation gate. Do not wait for user input.
|
|
103
103
|
|
|
@@ -23,7 +23,8 @@ Read in parallel from the project root, skipping any that do not exist:
|
|
|
23
23
|
- `CLAUDE.md`: Memory section rules, including save thresholds and file format overrides
|
|
24
24
|
- `.claude/memory/index.md`: existing index, to avoid duplicates
|
|
25
25
|
- `.claude/context/index.md`: the domain catalog Step 3 routes against
|
|
26
|
-
- `.claude/standards/prose.md`:
|
|
26
|
+
- `.claude/standards/prose.md`: voice and banned words applied to memory file bodies
|
|
27
|
+
- `.claude/standards/markdown.md`: punctuation and formatting applied to memory file bodies
|
|
27
28
|
|
|
28
29
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
29
30
|
|
|
@@ -9,6 +9,7 @@ description: Audits changed markdown files against every authoring standard that
|
|
|
9
9
|
|
|
10
10
|
- Resolve the base ref first, per Diff baseline below, then scope the file list exactly as Step 1 does, fallback included. If no markdown files changed, stop: `✅ No markdown changes to audit.` A guard that reads bare local `main`, or that skips the unusable-baseline fallback, passes the skill clean on a branch it never read.
|
|
11
11
|
- If neither `.claude/standards/prose.md` nor `${CLAUDE_SKILL_DIR}/../../standards/prose.md` is present, stop: `❌ prose.md standard not found. Install toolkit standards first.` Test the file rather than the directory, since a project that installed standards before a given file existed keeps the directory without ever receiving that file.
|
|
12
|
+
- Apply the same test to `markdown.md`, stopping with its own name. It carries the character bans and the formatting rules, so a run reaching only `prose.md` reports word choice against a clean file and calls the pass complete.
|
|
12
13
|
|
|
13
14
|
## Diff baseline
|
|
14
15
|
|
|
@@ -72,7 +73,7 @@ Read each applicable standard once. For each changed file, audit against every r
|
|
|
72
73
|
- **Pattern rules**: grep the file for every token the standard bans. Grep is authoritative. Reading alone misses occurrences.
|
|
73
74
|
- **Judgment rules**: check each rule in context against the standard that states it.
|
|
74
75
|
|
|
75
|
-
Every changed markdown file gets the prose pattern pass, since `.claude/standards/prose.md`
|
|
76
|
+
Every changed markdown file gets the prose pattern pass, since `.claude/standards/prose.md` and `.claude/standards/markdown.md` both apply to all of them. Take the banned tokens from those standards at read time rather than from a list held here. The banned words sit in the first and the banned characters in the second, so a pass reading one file finds half the tokens.
|
|
76
77
|
|
|
77
78
|
## Step 4: report
|
|
78
79
|
|
|
@@ -81,8 +82,9 @@ Group findings by file with line references, naming the standard each one comes
|
|
|
81
82
|
```markdown
|
|
82
83
|
path/to/file.md
|
|
83
84
|
|
|
84
|
-
- L12: `
|
|
85
|
-
- L34: `
|
|
85
|
+
- L12: `markdown.md`, em dash in prose
|
|
86
|
+
- L34: `markdown.md`, semicolon used to join clauses
|
|
87
|
+
- L51: `prose.md`, vague qualifier `simply`
|
|
86
88
|
- L67: `context.md`, decision entry names no rejected alternative
|
|
87
89
|
```
|
|
88
90
|
|
|
@@ -9,7 +9,8 @@ disable-model-invocation: true
|
|
|
9
9
|
Read these files from the project root in parallel:
|
|
10
10
|
|
|
11
11
|
- `.claude/standards/skill.md`: skill structure, skill types, frontmatter fields, invocation rules
|
|
12
|
-
- `.claude/standards/prose.md`:
|
|
12
|
+
- `.claude/standards/prose.md`: voice and banned words for skill body text
|
|
13
|
+
- `.claude/standards/markdown.md`: punctuation and formatting for skill body text
|
|
13
14
|
|
|
14
15
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
15
16
|
|
|
@@ -7,10 +7,11 @@ description: Creates a new snippet file in `snippets/` or `.claude/snippets/`. U
|
|
|
7
7
|
|
|
8
8
|
Creates one snippet file. Read these files in parallel:
|
|
9
9
|
|
|
10
|
-
- `.claude/standards/prose.md` from the project root:
|
|
10
|
+
- `.claude/standards/prose.md` from the project root: voice and banned words for all generated text
|
|
11
|
+
- `.claude/standards/markdown.md` from the project root: punctuation and formatting for all generated text
|
|
11
12
|
- `${CLAUDE_SKILL_DIR}/references/snippets.md`: authoring conventions, invocation channels, use patterns
|
|
12
13
|
|
|
13
|
-
Read `${CLAUDE_SKILL_DIR}/../../standards
|
|
14
|
+
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
14
15
|
|
|
15
16
|
## Guards
|
|
16
17
|
|
|
@@ -13,7 +13,8 @@ Governs a snippet file: what one is for, whether a prompt qualifies as one, how
|
|
|
13
13
|
Does not govern:
|
|
14
14
|
|
|
15
15
|
- Skill folders, which carry frontmatter, references, and scripts a snippet has none of: `skill.md`
|
|
16
|
-
- Voice
|
|
16
|
+
- Voice and word choice in snippet prose: `prose.md`
|
|
17
|
+
- Punctuation and formatting in snippet prose: `markdown.md`
|
|
17
18
|
|
|
18
19
|
## What a snippet is
|
|
19
20
|
|
|
@@ -7,7 +7,8 @@ description: Creates a new standard file in `standards/` or `.claude/standards/`
|
|
|
7
7
|
|
|
8
8
|
Creates one standard file. Read these files in parallel:
|
|
9
9
|
|
|
10
|
-
- `.claude/standards/prose.md` from the project root:
|
|
10
|
+
- `.claude/standards/prose.md` from the project root: voice and banned words for all generated text
|
|
11
|
+
- `.claude/standards/markdown.md` from the project root: punctuation and formatting for all generated text
|
|
11
12
|
- `.claude/standards/standard.md` from the project root: the meta-standard for shape, frontmatter, and structure
|
|
12
13
|
|
|
13
14
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
@@ -7,7 +7,8 @@ description: Rewrites stale `README.md` and `docs/*.md` sections based on change
|
|
|
7
7
|
|
|
8
8
|
Read these files from the project root in parallel:
|
|
9
9
|
|
|
10
|
-
- `.claude/standards/prose.md`:
|
|
10
|
+
- `.claude/standards/prose.md`: voice and banned words for all generated text
|
|
11
|
+
- `.claude/standards/markdown.md`: punctuation and formatting for all generated text
|
|
11
12
|
- `.claude/standards/readme.md`: README structure, required sections, and content rules
|
|
12
13
|
|
|
13
14
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
@@ -12,7 +12,8 @@ Format an issue from session context following the issue standard, then file it
|
|
|
12
12
|
Read these in parallel:
|
|
13
13
|
|
|
14
14
|
- `${CLAUDE_SKILL_DIR}/references/issue.md`: issue title, labels, body sections, and banned phrases
|
|
15
|
-
- `.claude/standards/prose.md` from the project root:
|
|
15
|
+
- `.claude/standards/prose.md` from the project root: voice and banned words for all generated text
|
|
16
|
+
- `.claude/standards/markdown.md` from the project root: punctuation and formatting for all generated text
|
|
16
17
|
|
|
17
18
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
18
19
|
|
|
@@ -14,7 +14,8 @@ Does not govern:
|
|
|
14
14
|
|
|
15
15
|
- Pull request title and body: `pr.md`
|
|
16
16
|
- Whether a phase label may appear in issue text: `versioning.md`
|
|
17
|
-
- Voice
|
|
17
|
+
- Voice and banned words in issue prose: `prose.md`
|
|
18
|
+
- Punctuation and formatting in issue prose: `markdown.md`
|
|
18
19
|
|
|
19
20
|
## Title
|
|
20
21
|
|
|
@@ -11,7 +11,8 @@ Read these files in parallel:
|
|
|
11
11
|
|
|
12
12
|
- `${CLAUDE_SKILL_DIR}/references/branch.md`: branch format, valid types, and constraints
|
|
13
13
|
- `${CLAUDE_SKILL_DIR}/references/pr.md`: structure, rules, and banned phrases
|
|
14
|
-
- `.claude/standards/prose.md` from the project root:
|
|
14
|
+
- `.claude/standards/prose.md` from the project root: voice and banned words for all generated text
|
|
15
|
+
- `.claude/standards/markdown.md` from the project root: punctuation and formatting for all generated text
|
|
15
16
|
- `.claude/standards/versioning.md` from the project root: phase label vs semver discipline
|
|
16
17
|
|
|
17
18
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
@@ -15,7 +15,8 @@ Does not govern:
|
|
|
15
15
|
- Commit subject format, which shares the title form: `commit.md`
|
|
16
16
|
- Branch naming: `branch.md`
|
|
17
17
|
- Whether a phase label or a semver tag may appear in a title or body: `versioning.md`
|
|
18
|
-
- Voice
|
|
18
|
+
- Voice and banned words in pull request prose: `prose.md`
|
|
19
|
+
- Punctuation and formatting in pull request prose: `markdown.md`
|
|
19
20
|
|
|
20
21
|
## Title
|
|
21
22
|
|
|
@@ -15,7 +15,8 @@ Does not govern:
|
|
|
15
15
|
- Commit subject format, which shares the title form: `commit.md`
|
|
16
16
|
- Branch naming: `branch.md`
|
|
17
17
|
- Whether a phase label or a semver tag may appear in a title or body: `versioning.md`
|
|
18
|
-
- Voice
|
|
18
|
+
- Voice and banned words in pull request prose: `prose.md`
|
|
19
|
+
- Punctuation and formatting in pull request prose: `markdown.md`
|
|
19
20
|
|
|
20
21
|
## Title
|
|
21
22
|
|
|
@@ -8,7 +8,8 @@ description: Groups staged files by concern and generates one conventional commi
|
|
|
8
8
|
Read these files in parallel:
|
|
9
9
|
|
|
10
10
|
- `${CLAUDE_SKILL_DIR}/references/commit.md`: format, types, scopes, and constraints
|
|
11
|
-
- `.claude/standards/prose.md` from the project root:
|
|
11
|
+
- `.claude/standards/prose.md` from the project root: voice and banned words for all generated text
|
|
12
|
+
- `.claude/standards/markdown.md` from the project root: punctuation and formatting for all generated text
|
|
12
13
|
|
|
13
14
|
Read a standard from `${CLAUDE_SKILL_DIR}/../../standards/` instead when the project does not have it.
|
|
14
15
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Route markdown edits to the prose standard for voice,
|
|
2
|
+
description: Route markdown edits to the prose standard for voice, language, and frontmatter wording
|
|
3
3
|
paths:
|
|
4
4
|
- '**/*.md'
|
|
5
5
|
---
|
|
@@ -8,5 +8,6 @@ paths:
|
|
|
8
8
|
|
|
9
9
|
## Authority
|
|
10
10
|
|
|
11
|
-
- Follow `.claude/standards/prose.md` for
|
|
12
|
-
- Read it before a substantial prose edit. Do not work the
|
|
11
|
+
- Follow `.claude/standards/prose.md` for voice, language, and the wording of a `title` or `description`. It is the single source.
|
|
12
|
+
- Read it before a substantial prose edit. Do not work the banned words from memory.
|
|
13
|
+
- Punctuation, formatting, and file references are a separate topic. `501-markdown` routes them.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Route markdown edits to the markdown standard for headings, lists, punctuation, and file references
|
|
3
|
+
paths:
|
|
4
|
+
- '**/*.md'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Markdown mechanics standards
|
|
8
|
+
|
|
9
|
+
## Authority
|
|
10
|
+
|
|
11
|
+
- Follow `.claude/standards/markdown.md` for headings, paragraph and list structure, code spans, punctuation, emphasis, and file references. It is the single source.
|
|
12
|
+
- Read it before a substantial markdown edit. Do not work the banned characters from memory.
|
|
13
|
+
- Voice, language, and frontmatter wording are a separate topic. `500-prose` routes them.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
extends = ""
|
|
2
|
-
rules = ["000-constitution", "010-testing", "020-concurrency", "030-error-handling", "040-performance", "050-logging", "060-naming", "070-planning", "080-config-comments", "090-code-comments", "500-prose", "510-context", "520-wireframes", "530-requirements", "540-architecture", "550-design", "555-tasks", "560-diagrams", "570-skill", "580-readme", "590-rule-authoring", "591-standard-authoring"]
|
|
2
|
+
rules = ["000-constitution", "010-testing", "020-concurrency", "030-error-handling", "040-performance", "050-logging", "060-naming", "070-planning", "080-config-comments", "090-code-comments", "500-prose", "501-markdown", "510-context", "520-wireframes", "530-requirements", "540-architecture", "550-design", "555-tasks", "560-diagrams", "570-skill", "580-readme", "590-rule-authoring", "591-standard-authoring"]
|
package/package.json
CHANGED
|
@@ -79,7 +79,7 @@ log_step "Assert scaffold"
|
|
|
79
79
|
# The snippets path has to name a slug the default preset still carries, since
|
|
80
80
|
# init resolves snippets through `essentials`. Editing that preset without
|
|
81
81
|
# editing this line fails the gate on a correct install.
|
|
82
|
-
for path in "CLAUDE.md" ".claude/snippets/decision-help.md" ".claude/standards/prose.md" ".claude/wiki/index.md" ".claude" ".claude/context/index.md" ".claude/wireframes/index.md" ".claude/diagrams/index.md" \
|
|
82
|
+
for path in "CLAUDE.md" ".claude/snippets/decision-help.md" ".claude/standards/prose.md" ".claude/standards/markdown.md" ".claude/wiki/index.md" ".claude" ".claude/context/index.md" ".claude/wireframes/index.md" ".claude/diagrams/index.md" \
|
|
83
83
|
".prettierrc" ".editorconfig" ".lintstagedrc" ".husky/pre-commit" ".github/workflows/verify.yml" "scripts/verify.sh" \
|
|
84
84
|
".claude/rules/core/000-constitution.md"; do
|
|
85
85
|
if [ ! -e "$TARGET_DIR/$path" ]; then
|
|
@@ -57,7 +57,7 @@ export function parseVocabulary(markdown: string): string[] | undefined {
|
|
|
57
57
|
*
|
|
58
58
|
* Reading the list out of the rule rather than hardcoding it is what keeps one
|
|
59
59
|
* definition when the rule installs into a target, the same way
|
|
60
|
-
* `.claude/hooks/standards-audit.sh` reads its bans out of `prose.md`.
|
|
60
|
+
* `.claude/hooks/standards-audit.sh` reads its word bans out of `prose.md`.
|
|
61
61
|
*/
|
|
62
62
|
export async function loadVocabulary(root: string): Promise<Vocabulary> {
|
|
63
63
|
for (const ruleRoot of RULE_ROOTS) {
|
|
@@ -14,7 +14,8 @@ Does not govern:
|
|
|
14
14
|
|
|
15
15
|
- Pull request title and body: `pr.md`
|
|
16
16
|
- Whether a phase label may appear in issue text: `versioning.md`
|
|
17
|
-
- Voice
|
|
17
|
+
- Voice and banned words in issue prose: `prose.md`
|
|
18
|
+
- Punctuation and formatting in issue prose: `markdown.md`
|
|
18
19
|
|
|
19
20
|
## Title
|
|
20
21
|
|
package/standards/bundled/pr.md
CHANGED
|
@@ -15,7 +15,8 @@ Does not govern:
|
|
|
15
15
|
- Commit subject format, which shares the title form: `commit.md`
|
|
16
16
|
- Branch naming: `branch.md`
|
|
17
17
|
- Whether a phase label or a semver tag may appear in a title or body: `versioning.md`
|
|
18
|
-
- Voice
|
|
18
|
+
- Voice and banned words in pull request prose: `prose.md`
|
|
19
|
+
- Punctuation and formatting in pull request prose: `markdown.md`
|
|
19
20
|
|
|
20
21
|
## Title
|
|
21
22
|
|
|
@@ -13,7 +13,8 @@ Governs a snippet file: what one is for, whether a prompt qualifies as one, how
|
|
|
13
13
|
Does not govern:
|
|
14
14
|
|
|
15
15
|
- Skill folders, which carry frontmatter, references, and scripts a snippet has none of: `skill.md`
|
|
16
|
-
- Voice
|
|
16
|
+
- Voice and word choice in snippet prose: `prose.md`
|
|
17
|
+
- Punctuation and formatting in snippet prose: `markdown.md`
|
|
17
18
|
|
|
18
19
|
## What a snippet is
|
|
19
20
|
|
package/standards/diagrams.md
CHANGED
|
@@ -15,7 +15,8 @@ Governs per-kind diagram entries under `.claude/diagrams/`: which question each
|
|
|
15
15
|
|
|
16
16
|
Does not govern:
|
|
17
17
|
|
|
18
|
-
-
|
|
18
|
+
- Language and word choice in explanation prose and node labels: `prose.md`, whose bans the yield does not lift
|
|
19
|
+
- Punctuation and formatting in explanation prose: `markdown.md`, which the yield does not reach
|
|
19
20
|
- The mechanism behind any component a diagram draws: `context.md`
|
|
20
21
|
- UI layout, on-screen copy, and interaction intent: `wireframes.md`
|
|
21
22
|
- The decision record a components diagram is drawn from: `architecture.md`
|
|
@@ -93,7 +94,7 @@ A second entry for one kind takes a suffixed name (`request-flow-admin.md`) and
|
|
|
93
94
|
- Do not duplicate prose across entries. An entry that restates its neighbor has taken the neighbor's job.
|
|
94
95
|
- The audience is mixed, so vocabulary runs as a gradient across the set. `System context` assumes no knowledge of the repository. `Deployment` may assume the reader has read the others.
|
|
95
96
|
|
|
96
|
-
This section states the voice for the surface, which is what claims the yield `prose.md` grants to a surface whose own standard sets it. Explanation prose is pedagogical here and the default developer-facing voice does not apply. The yield covers voice alone.
|
|
97
|
+
This section states the voice for the surface, which is what claims the yield `prose.md` grants to a surface whose own standard sets it. Explanation prose is pedagogical here and the default developer-facing voice does not apply. The yield covers voice alone. The language bans in `prose.md` stay in force, as do the punctuation and formatting rules in `markdown.md`, which grants no yield at all.
|
|
97
98
|
|
|
98
99
|
## Verification
|
|
99
100
|
|
|
@@ -120,7 +121,7 @@ Reference the context entry by path when a reader needs the mechanism. The diagr
|
|
|
120
121
|
- `System context` has no named source signal beyond `.claude/REQUIREMENTS.md`, so nothing tells a session it went stale. Re-read it when the boundary or the set of external dependencies moves.
|
|
121
122
|
- The `claude-docs` sweep watches two things and writes frontmatter only. It appends `stale` when a path an entry cites leaves the tree, and it stubs a kind when a diff adds the source signal that kind is drawn from. Diagram bodies and explanation paragraphs are off limits to it, because a change that removes a module does not carry the new correct shape of the picture.
|
|
122
123
|
- That watch samples thinly. It sees the one or two paths an entry happened to cite and nothing else, so a change elsewhere leaves the entry looking current. `verified` is what covers the gap, and an entry whose date sits far behind the branch is due a read whether or not anything flagged it.
|
|
123
|
-
- The explanation paragraphs around a Mermaid block are prose and follow `prose.md`. The fenced block itself is not, which is why a check scoped to prose is the wrong thing to rely on for what sits inside it.
|
|
124
|
+
- The explanation paragraphs around a Mermaid block are prose and follow `prose.md` and `markdown.md`. The fenced block itself is not, which is why a check scoped to prose is the wrong thing to rely on for what sits inside it.
|
|
124
125
|
- The punctuation bans still apply to node and subgraph labels, and nothing checks them there. An em dash in a label passes every gate the repository has, so read the labels before shipping the entry.
|
|
125
126
|
|
|
126
127
|
## Template
|
package/standards/index.md
CHANGED
|
@@ -11,7 +11,8 @@ Reference docs for consistent authoring across the toolkit and target projects.
|
|
|
11
11
|
- [Context entry reference](context.md): Shape and content rules for .claude/context/<domain>.md entries
|
|
12
12
|
- [Design reference](design.md): Shape and content rules for .claude/DESIGN.md
|
|
13
13
|
- [Diagram reference](diagrams.md): Shape and content rules for .claude/diagrams/<kind>.md files
|
|
14
|
-
- [
|
|
14
|
+
- [Markdown reference](markdown.md): Headings, paragraph and list structure, code spans, punctuation, emphasis, and file references
|
|
15
|
+
- [Prose reference](prose.md): Voice, language, and frontmatter wording for reference markdown
|
|
15
16
|
- [Publish reference](publish.md): Scan run against finished text leaving through a channel no automated check covers
|
|
16
17
|
- [Readme reference](readme.md): Readme voice, structure, and content conventions
|
|
17
18
|
- [Requirements reference](requirements.md): Shape and content rules for .claude/REQUIREMENTS.md
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown reference
|
|
3
|
+
description: Headings, paragraph and list structure, code spans, punctuation, emphasis, and file references
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Markdown reference
|
|
7
|
+
|
|
8
|
+
Applies to markdown reference docs, READMEs, and inline documentation in repos. These are mechanics rather than voice, so no surface yields them. A surface stating its own voice claims that yield from `prose.md` and formats by this file regardless.
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
|
|
12
|
+
Governs the markdown mechanics of every markdown file: headings, paragraph and list structure, code spans and fences, punctuation, emphasis, and file references. 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 mechanics are written across every document and have none of their own to shape.
|
|
13
|
+
|
|
14
|
+
Does not govern:
|
|
15
|
+
|
|
16
|
+
- Voice, word choice, and the wording of a `title` or `description`: `prose.md`
|
|
17
|
+
- What sections a document has, or what belongs in each: the standard for that document type
|
|
18
|
+
- The text inside a fenced block, which follows the conventions of its own language rather than these
|
|
19
|
+
- The scan that applies the punctuation bans to finished text on its way out: `publish.md`
|
|
20
|
+
|
|
21
|
+
## Headings
|
|
22
|
+
|
|
23
|
+
- H1 for document title, H2 for main sections, H3 for subsections
|
|
24
|
+
- Use sentence case for all headings (H1, H2, H3)
|
|
25
|
+
- Proper nouns and product names retain their casing in headings
|
|
26
|
+
|
|
27
|
+
## Paragraphs and lists
|
|
28
|
+
|
|
29
|
+
- Use prose by default. Reserve bullets for discrete, unrelated items.
|
|
30
|
+
- Keep paragraphs to four sentences or fewer. Split longer blocks at the next logical boundary.
|
|
31
|
+
- Keep bullets tight. If a bullet needs more than a couple of sentences, it belongs in prose.
|
|
32
|
+
- Use dashes (`-`) not asterisks (`*`) for bulleted lists
|
|
33
|
+
- Do not end single-sentence or fragment bullets with a period. Use periods when a bullet has two or more sentences.
|
|
34
|
+
- For key path lists, use colon format: `- \`src/\`: description`. Never use an em dash.
|
|
35
|
+
- Do not introduce a list with a "Here are the X:" or "The following X:" lead-in
|
|
36
|
+
|
|
37
|
+
## Code and identifiers
|
|
38
|
+
|
|
39
|
+
- Wrap commands, API names, file paths, and code identifiers in backticks
|
|
40
|
+
- Use a language identifier on all fenced code blocks (`markdown`, `typescript`, `plaintext`). Never use a bare ` ``` `
|
|
41
|
+
- In ASCII tree diagrams, use `←` for inline annotations. Never use `#`.
|
|
42
|
+
|
|
43
|
+
## Punctuation
|
|
44
|
+
|
|
45
|
+
- Do not use em dashes (`—`) or semicolons (`;`). Rewrite or restructure the sentence to avoid them.
|
|
46
|
+
- Do not use parenthetical asides in prose (`the config (which is optional) controls...`). Split into its own sentence or drop it. Parentheses in rule definitions for grouping examples are fine.
|
|
47
|
+
|
|
48
|
+
The closed-set word bans sit in `prose.md` under `## Language` rather than here, because a banned word is a word-choice rule and these are character rules. A surface applying both reads both files.
|
|
49
|
+
|
|
50
|
+
## Emphasis and dividers
|
|
51
|
+
|
|
52
|
+
- Do not over-format with excessive bold, italic, or header usage
|
|
53
|
+
- Do not use horizontal rules or dividers (`---`) in body content. The `---` delimiters of a YAML frontmatter block at the top of the file are allowed.
|
|
54
|
+
|
|
55
|
+
## Links and file references
|
|
56
|
+
|
|
57
|
+
- Use descriptive anchor text for links. Avoid `click here` or `read more`.
|
|
58
|
+
- Wrap file references in backticks by default. Use a labeled markdown link (`[label](path)`) only on rendered-for-human surfaces (`README.md`, `docs/`) and in an index file, whose rows exist to be followed. Never repeat the path verbatim as the label.
|
|
59
|
+
|
|
60
|
+
## Examples
|
|
61
|
+
|
|
62
|
+
Each pair shows a banned pattern and its fix.
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
Bad: See [.claude/context/retrieval.md](.claude/context/retrieval.md) for the retrieval flow.
|
|
66
|
+
Good: See `.claude/context/retrieval.md` for the retrieval flow.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
Bad: Read [docs/development.md](docs/development.md) before contributing.
|
|
71
|
+
Good: Read the [development guide](docs/development.md) before contributing.
|
|
72
|
+
```
|
package/standards/prose.md
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Prose reference
|
|
3
|
-
description: Voice,
|
|
3
|
+
description: Voice, language, and frontmatter wording for reference markdown
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Prose reference
|
|
7
7
|
|
|
8
|
-
Applies to markdown reference docs, READMEs, and inline documentation in repos. It is the default voice for `.md` files and yields to any surface with its own voice, such as blogs, emails, changelogs, or commit messages. It also yields wherever another standard states the voice for the surface it governs, which is how a surface claims the exemption without this file having to name it. The yield covers voice alone.
|
|
8
|
+
Applies to markdown reference docs, READMEs, and inline documentation in repos. It is the default voice for `.md` files and yields to any surface with its own voice, such as blogs, emails, changelogs, or commit messages. It also yields wherever another standard states the voice for the surface it governs, which is how a surface claims the exemption without this file having to name it. The yield covers voice alone. The language rules below stay in force on every surface, including the surfaces no automated check reaches, as do the mechanics in `markdown.md`.
|
|
9
9
|
|
|
10
10
|
## Scope
|
|
11
11
|
|
|
12
|
-
Governs voice,
|
|
12
|
+
Governs voice, word choice, and frontmatter wording wherever prose is written. It is an attribute standard rather than a document-type one, so it applies over documents whose shape another standard sets, yields on voice alone where that standard states one, and carries no template because voice is written across every document and has none of its own to shape.
|
|
13
13
|
|
|
14
14
|
Does not govern:
|
|
15
15
|
|
|
16
|
+
- Headings, list and paragraph structure, code spans, punctuation, emphasis, and file references: `markdown.md`
|
|
16
17
|
- What sections a document has, or what belongs in each: the standard for that document type
|
|
17
18
|
- Which frontmatter fields a document carries, which is that standard's own subject. This file governs the wording of a `title` and a `description` and nothing else about them.
|
|
18
19
|
- Phase-label and semver discipline: `versioning.md`
|
|
@@ -28,52 +29,8 @@ Does not govern:
|
|
|
28
29
|
- Use substantive connectives where flow matters, but never add words solely for rhythm. Terse reference prose needs no padding.
|
|
29
30
|
- Be direct on established facts. Hedge on genuinely uncertain claims.
|
|
30
31
|
- Assume developer-level technical knowledge. Skip hand-holding explanations.
|
|
31
|
-
- Keep paragraphs to four sentences or fewer. Split longer blocks at the next logical boundary.
|
|
32
|
-
|
|
33
|
-
## Structure
|
|
34
|
-
|
|
35
|
-
### Headings
|
|
36
|
-
|
|
37
|
-
- H1 for document title, H2 for main sections, H3 for subsections
|
|
38
|
-
- Use sentence case for all headings (H1, H2, H3)
|
|
39
|
-
- Proper nouns and product names retain their casing in headings
|
|
40
|
-
|
|
41
|
-
### Paragraphs and lists
|
|
42
|
-
|
|
43
32
|
- Front-load key information in each paragraph. Keep paragraphs concise and scannable.
|
|
44
33
|
- Every sentence must provide new information. Cut redundant context.
|
|
45
|
-
- Use prose by default. Reserve bullets for discrete, unrelated items.
|
|
46
|
-
- Keep bullets tight. If a bullet needs more than a couple of sentences, it belongs in prose.
|
|
47
|
-
|
|
48
|
-
## Formatting
|
|
49
|
-
|
|
50
|
-
### Lists
|
|
51
|
-
|
|
52
|
-
- Use dashes (`-`) not asterisks (`*`) for bulleted lists
|
|
53
|
-
- Do not end single-sentence or fragment bullets with a period. Use periods when a bullet has two or more sentences.
|
|
54
|
-
- For key path lists, use colon format: `- \`src/\`: description`. Never use an em dash.
|
|
55
|
-
- Do not introduce a list with a "Here are the X:" or "The following X:" lead-in
|
|
56
|
-
|
|
57
|
-
### Code and identifiers
|
|
58
|
-
|
|
59
|
-
- Wrap commands, API names, file paths, and code identifiers in backticks
|
|
60
|
-
- Use a language identifier on all fenced code blocks (`markdown`, `typescript`, `plaintext`). Never use a bare ` ``` `
|
|
61
|
-
- In ASCII tree diagrams, use `←` for inline annotations. Never use `#`.
|
|
62
|
-
|
|
63
|
-
### Punctuation
|
|
64
|
-
|
|
65
|
-
- Do not use em dashes (`—`) or semicolons (`;`). Rewrite or restructure the sentence to avoid them.
|
|
66
|
-
- Do not use parenthetical asides in prose (`the config (which is optional) controls...`). Split into its own sentence or drop it. Parentheses in rule definitions for grouping examples are fine.
|
|
67
|
-
|
|
68
|
-
### Emphasis and dividers
|
|
69
|
-
|
|
70
|
-
- Do not over-format with excessive bold, italic, or header usage
|
|
71
|
-
- Do not use horizontal rules or dividers (`---`) in body content. The `---` delimiters of a YAML frontmatter block at the top of the file are allowed.
|
|
72
|
-
|
|
73
|
-
### Links and file references
|
|
74
|
-
|
|
75
|
-
- Use descriptive anchor text for links. Avoid `click here` or `read more`.
|
|
76
|
-
- Wrap file references in backticks by default. Use a labeled markdown link (`[label](path)`) only on rendered-for-human surfaces (`README.md`, `docs/`) for cross-folder navigation. Never repeat the path verbatim as the label.
|
|
77
34
|
|
|
78
35
|
## Language
|
|
79
36
|
|
|
@@ -86,6 +43,8 @@ Does not govern:
|
|
|
86
43
|
- Do not address the reader as a participant (`Let's`, `Here's`, `Here are`). State the content directly.
|
|
87
44
|
- Commit to a position. Do not hedge in clusters (`It might be worth considering`) or use false balance (`While X is true, Y is also important`). Recommend, or state the tradeoff.
|
|
88
45
|
|
|
46
|
+
The character bans sit in `markdown.md` under `## Punctuation` rather than here, because an em dash and a semicolon are typography and these are word choice. A surface applying both reads both files.
|
|
47
|
+
|
|
89
48
|
## Frontmatter descriptions
|
|
90
49
|
|
|
91
50
|
When frontmatter carries a short `title` or `description` used for catalog display:
|
|
@@ -122,13 +81,3 @@ Good: Use the `retry` option for failed webhooks. Set `maxRetries` to 3.
|
|
|
122
81
|
Bad: It might be worth considering whether to enable caching.
|
|
123
82
|
Good: Enable caching for read-heavy endpoints. Skip it for writes.
|
|
124
83
|
```
|
|
125
|
-
|
|
126
|
-
```markdown
|
|
127
|
-
Bad: See [.claude/context/retrieval.md](.claude/context/retrieval.md) for the retrieval flow.
|
|
128
|
-
Good: See `.claude/context/retrieval.md` for the retrieval flow.
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
```markdown
|
|
132
|
-
Bad: Read [docs/development.md](docs/development.md) before contributing.
|
|
133
|
-
Good: Read the [development guide](docs/development.md) before contributing.
|
|
134
|
-
```
|
package/standards/publish.md
CHANGED
|
@@ -11,7 +11,8 @@ Governs the scan an author runs against finished text on its way out, and the re
|
|
|
11
11
|
|
|
12
12
|
Does not govern:
|
|
13
13
|
|
|
14
|
-
- Which characters are banned, and the
|
|
14
|
+
- Which characters are banned, and the formatting the text carries: `markdown.md`
|
|
15
|
+
- The voice and word choice the text is written in: `prose.md`
|
|
15
16
|
- The phase-label rule and the table of surfaces each namespace may appear on: `versioning.md`
|
|
16
17
|
- Which gap a given surface has, and what it publishes through, which that surface names for itself
|
|
17
18
|
|
|
@@ -23,7 +24,7 @@ Run the scan as an explicit step against the finished text. Having read the unde
|
|
|
23
24
|
|
|
24
25
|
## Banned characters
|
|
25
26
|
|
|
26
|
-
`
|
|
27
|
+
`markdown.md` holds the character bans and `prose.md` holds the banned words. Read both at scan time rather than working them from memory, then scan the drafted text and rewrite each occurrence.
|
|
27
28
|
|
|
28
29
|
Restructure the sentence rather than substituting the character. A semicolon swapped for a period leaves both clauses in the order the semicolon chose, which is the shape the ban exists to remove.
|
|
29
30
|
|
package/standards/readme.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Readme voice, structure, and content conventions
|
|
|
5
5
|
|
|
6
6
|
# Readme reference
|
|
7
7
|
|
|
8
|
-
Applies to every `README.md`. The `## Voice` section states the voice for a repository's root README, so `prose.md` yields to it there. The yield covers voice alone. The
|
|
8
|
+
Applies to every `README.md`. The `## Voice` section states the voice for a repository's root README, so `prose.md` yields to it there. The yield covers voice alone. The spelling rules and banned words in `prose.md` stay in force, as do the punctuation and formatting rules in `markdown.md`, so the warmer register ships with the same hygiene: no em dashes, no semicolons, no buzzwords.
|
|
9
9
|
|
|
10
10
|
The reader is what changes. Reference prose serves someone who already committed to the project and is scanning for a fact. A root README meets someone deciding whether to commit at all, and it is often the only file they read.
|
|
11
11
|
|
|
@@ -15,7 +15,8 @@ Governs every `README.md`: voice, heading structure, required and optional secti
|
|
|
15
15
|
|
|
16
16
|
Does not govern:
|
|
17
17
|
|
|
18
|
-
-
|
|
18
|
+
- Spelling and banned words in README prose: `prose.md`, which yields the voice and keeps the rest
|
|
19
|
+
- Punctuation and formatting in README prose: `markdown.md`, which yields nothing
|
|
19
20
|
- Product scope and goals: `requirements.md`
|
|
20
21
|
|
|
21
22
|
## Voice
|
package/standards/skill.md
CHANGED
|
@@ -17,7 +17,8 @@ Does not govern:
|
|
|
17
17
|
|
|
18
18
|
- Path-scoped coding rules, which load on a file match rather than on a request match: `rule.md`
|
|
19
19
|
- Single-purpose chat prompts carrying no frontmatter, references, or scripts: `snippets.md`
|
|
20
|
-
- Voice
|
|
20
|
+
- Voice and word choice in a skill body: `prose.md`
|
|
21
|
+
- Punctuation and formatting in a skill body: `markdown.md`
|
|
21
22
|
- The transform from a branch name to a slug a skill carries in a filename: `slug.md`
|
|
22
23
|
- The domain conventions a skill cites, each of which belongs to the standard that owns it
|
|
23
24
|
|
package/standards/standard.md
CHANGED
|
@@ -17,7 +17,8 @@ Governs each authored standard under `standards/`: its stated jurisdiction, succ
|
|
|
17
17
|
|
|
18
18
|
Does not govern:
|
|
19
19
|
|
|
20
|
-
- The voice
|
|
20
|
+
- The voice and word choice a standard is written in: `prose.md`
|
|
21
|
+
- The punctuation and formatting a standard is written in: `markdown.md`
|
|
21
22
|
- The shape of any artifact a standard governs, which is that standard's own subject
|
|
22
23
|
|
|
23
24
|
## What a working standard looks like
|
package/standards/versioning.md
CHANGED
|
@@ -16,7 +16,8 @@ Does not govern:
|
|
|
16
16
|
- The format of a phase label, which is project-specific by the rule below
|
|
17
17
|
- Task filenames and board layout: `tasks.md`
|
|
18
18
|
- Commit subject, branch name, and pull request title format: `commit.md`, `branch.md`, and `pr.md`
|
|
19
|
-
- Voice
|
|
19
|
+
- Voice and word choice in any text carrying a label: `prose.md`
|
|
20
|
+
- Punctuation and formatting in any text carrying a label: `markdown.md`
|
|
20
21
|
|
|
21
22
|
## Phase labels
|
|
22
23
|
|
package/standards/wireframes.md
CHANGED
|
@@ -17,7 +17,8 @@ Does not govern:
|
|
|
17
17
|
|
|
18
18
|
- Tokens, typography, spacing, and the rest of the visual system: `design.md`
|
|
19
19
|
- The mechanism behind a surface: `context.md`
|
|
20
|
-
- Voice
|
|
20
|
+
- Voice and word choice in wireframe prose: `prose.md`
|
|
21
|
+
- Punctuation and formatting in wireframe prose: `markdown.md`
|
|
21
22
|
|
|
22
23
|
## What a working wireframe looks like
|
|
23
24
|
|
|
@@ -74,7 +75,7 @@ Reference the context entry from the wireframe by path when a reader needs the m
|
|
|
74
75
|
## Maintenance
|
|
75
76
|
|
|
76
77
|
- When a surface's layout or interaction changes, update its wireframe file in the same PR. A wireframe showing a defunct layout is worse than none.
|
|
77
|
-
- The Behavior and Copy prose around an ASCII block is prose and follows `prose.md`. The fenced block itself is not, so a check scoped to prose is the wrong thing to rely on for what sits inside it.
|
|
78
|
+
- The Behavior and Copy prose around an ASCII block is prose and follows `prose.md` and `markdown.md`. The fenced block itself is not, so a check scoped to prose is the wrong thing to rely on for what sits inside it.
|
|
78
79
|
|
|
79
80
|
## Template
|
|
80
81
|
|
|
@@ -19,6 +19,10 @@ esac
|
|
|
19
19
|
# Read the closed-set word bans from the standard so the hook never carries a
|
|
20
20
|
# second copy. Every "Do not use ... (`a`, `b`)" bullet contributes its
|
|
21
21
|
# single-word backticked terms, which skips the multi-word and punctuation bans.
|
|
22
|
+
#
|
|
23
|
+
# The word bans sit in prose.md and the em-dash and semicolon bans in
|
|
24
|
+
# markdown.md, so this parses the first and hardcodes the second. A "Do not use"
|
|
25
|
+
# bullet added to markdown.md is parsed by nothing and enforces silently.
|
|
22
26
|
standard="${CLAUDE_PROJECT_DIR:-.}/.claude/standards/prose.md"
|
|
23
27
|
words=""
|
|
24
28
|
if [ -f "$standard" ]; then
|
|
@@ -56,6 +60,6 @@ hits=$(awk -v words="$words" '
|
|
|
56
60
|
|
|
57
61
|
[ -z "$hits" ] && exit 0
|
|
58
62
|
|
|
59
|
-
msg=$(printf 'Standards-audit: prose.md violations in %s. Rewrite or restructure (do not lazy-swap).\n%s' "$file" "$hits")
|
|
63
|
+
msg=$(printf 'Standards-audit: prose.md and markdown.md violations in %s. Rewrite or restructure (do not lazy-swap).\n%s' "$file" "$hits")
|
|
60
64
|
|
|
61
65
|
jq -nc --arg msg "$msg" '{hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:$msg}}'
|