chaffjs 0.22.0 → 0.24.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.
Files changed (267) hide show
  1. package/README.md +7 -1
  2. package/dist/api.d.ts +14 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/cli-args.d.ts +2 -0
  6. package/dist/cli-args.d.ts.map +1 -1
  7. package/dist/cli-args.js +2 -0
  8. package/dist/cli-args.js.map +1 -1
  9. package/dist/cli-text.d.ts.map +1 -1
  10. package/dist/cli-text.js +2 -0
  11. package/dist/cli-text.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +13 -19
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/feedback.d.ts +3 -0
  16. package/dist/commands/feedback.d.ts.map +1 -1
  17. package/dist/commands/feedback.js.map +1 -1
  18. package/dist/commands/fix-plan.d.ts.map +1 -1
  19. package/dist/commands/fix-plan.js +5 -0
  20. package/dist/commands/fix-plan.js.map +1 -1
  21. package/dist/commands/rules.d.ts +9 -0
  22. package/dist/commands/rules.d.ts.map +1 -0
  23. package/dist/commands/rules.js +26 -0
  24. package/dist/commands/rules.js.map +1 -0
  25. package/dist/config/load.d.ts +6 -1
  26. package/dist/config/load.d.ts.map +1 -1
  27. package/dist/config/load.js +1 -0
  28. package/dist/config/load.js.map +1 -1
  29. package/dist/config/style.js +1 -1
  30. package/dist/config/style.js.map +1 -1
  31. package/dist/config/warnings.d.ts +1 -1
  32. package/dist/config/warnings.d.ts.map +1 -1
  33. package/dist/config/warnings.js +3 -1
  34. package/dist/config/warnings.js.map +1 -1
  35. package/dist/detectors/bare-comparative.d.ts +26 -0
  36. package/dist/detectors/bare-comparative.d.ts.map +1 -0
  37. package/dist/detectors/bare-comparative.js +117 -0
  38. package/dist/detectors/bare-comparative.js.map +1 -0
  39. package/dist/detectors/chat-citation.d.ts +6 -0
  40. package/dist/detectors/chat-citation.d.ts.map +1 -1
  41. package/dist/detectors/chat-citation.js +26 -1
  42. package/dist/detectors/chat-citation.js.map +1 -1
  43. package/dist/detectors/clause-shape.d.ts.map +1 -1
  44. package/dist/detectors/clause-shape.js +19 -5
  45. package/dist/detectors/clause-shape.js.map +1 -1
  46. package/dist/detectors/definition-use.d.ts.map +1 -1
  47. package/dist/detectors/definition-use.js +4 -2
  48. package/dist/detectors/definition-use.js.map +1 -1
  49. package/dist/detectors/ellipsis.d.ts +10 -0
  50. package/dist/detectors/ellipsis.d.ts.map +1 -0
  51. package/dist/detectors/ellipsis.js +56 -0
  52. package/dist/detectors/ellipsis.js.map +1 -0
  53. package/dist/detectors/generic-heading.d.ts +8 -0
  54. package/dist/detectors/generic-heading.d.ts.map +1 -0
  55. package/dist/detectors/generic-heading.js +26 -0
  56. package/dist/detectors/generic-heading.js.map +1 -0
  57. package/dist/detectors/ime-residue.d.ts +13 -0
  58. package/dist/detectors/ime-residue.d.ts.map +1 -0
  59. package/dist/detectors/ime-residue.js +27 -0
  60. package/dist/detectors/ime-residue.js.map +1 -0
  61. package/dist/detectors/lexicon.d.ts.map +1 -1
  62. package/dist/detectors/lexicon.js +9 -2
  63. package/dist/detectors/lexicon.js.map +1 -1
  64. package/dist/detectors/lookalike-character.d.ts +18 -0
  65. package/dist/detectors/lookalike-character.d.ts.map +1 -0
  66. package/dist/detectors/lookalike-character.js +50 -0
  67. package/dist/detectors/lookalike-character.js.map +1 -0
  68. package/dist/detectors/lowercase-name.d.ts +9 -0
  69. package/dist/detectors/lowercase-name.d.ts.map +1 -0
  70. package/dist/detectors/lowercase-name.js +40 -0
  71. package/dist/detectors/lowercase-name.js.map +1 -0
  72. package/dist/detectors/registry/bare-comparative.d.ts +3 -0
  73. package/dist/detectors/registry/bare-comparative.d.ts.map +1 -0
  74. package/dist/detectors/registry/bare-comparative.js +3 -0
  75. package/dist/detectors/registry/bare-comparative.js.map +1 -0
  76. package/dist/detectors/registry/calendar-name-case.d.ts +3 -0
  77. package/dist/detectors/registry/calendar-name-case.d.ts.map +1 -0
  78. package/dist/detectors/registry/calendar-name-case.js +3 -0
  79. package/dist/detectors/registry/calendar-name-case.js.map +1 -0
  80. package/dist/detectors/registry/ellipsis-consistency.d.ts +3 -0
  81. package/dist/detectors/registry/ellipsis-consistency.d.ts.map +1 -0
  82. package/dist/detectors/registry/ellipsis-consistency.js +3 -0
  83. package/dist/detectors/registry/ellipsis-consistency.js.map +1 -0
  84. package/dist/detectors/registry/generic-heading.d.ts +3 -0
  85. package/dist/detectors/registry/generic-heading.d.ts.map +1 -0
  86. package/dist/detectors/registry/generic-heading.js +3 -0
  87. package/dist/detectors/registry/generic-heading.js.map +1 -0
  88. package/dist/detectors/registry/ime-residue.d.ts +3 -0
  89. package/dist/detectors/registry/ime-residue.d.ts.map +1 -0
  90. package/dist/detectors/registry/ime-residue.js +3 -0
  91. package/dist/detectors/registry/ime-residue.js.map +1 -0
  92. package/dist/detectors/registry/lookalike-character.d.ts +3 -0
  93. package/dist/detectors/registry/lookalike-character.d.ts.map +1 -0
  94. package/dist/detectors/registry/lookalike-character.js +3 -0
  95. package/dist/detectors/registry/lookalike-character.js.map +1 -0
  96. package/dist/detectors/registry/unit-spacing-consistency.d.ts +3 -0
  97. package/dist/detectors/registry/unit-spacing-consistency.d.ts.map +1 -0
  98. package/dist/detectors/registry/unit-spacing-consistency.js +3 -0
  99. package/dist/detectors/registry/unit-spacing-consistency.js.map +1 -0
  100. package/dist/detectors/signals.d.ts.map +1 -1
  101. package/dist/detectors/signals.js +8 -4
  102. package/dist/detectors/signals.js.map +1 -1
  103. package/dist/detectors/structure-tree.d.ts.map +1 -1
  104. package/dist/detectors/structure-tree.js +32 -7
  105. package/dist/detectors/structure-tree.js.map +1 -1
  106. package/dist/detectors/technical-docs.d.ts.map +1 -1
  107. package/dist/detectors/technical-docs.js +14 -0
  108. package/dist/detectors/technical-docs.js.map +1 -1
  109. package/dist/detectors/unit-spacing.d.ts +25 -0
  110. package/dist/detectors/unit-spacing.d.ts.map +1 -0
  111. package/dist/detectors/unit-spacing.js +50 -0
  112. package/dist/detectors/unit-spacing.js.map +1 -0
  113. package/dist/extension/load.d.ts +3 -0
  114. package/dist/extension/load.d.ts.map +1 -1
  115. package/dist/extension/load.js +1 -0
  116. package/dist/extension/load.js.map +1 -1
  117. package/dist/extension/pack-read.d.ts.map +1 -1
  118. package/dist/extension/pack-read.js +1 -0
  119. package/dist/extension/pack-read.js.map +1 -1
  120. package/dist/extension/plugin-load.js.map +1 -1
  121. package/dist/extension/plugin-parse.d.ts +7 -0
  122. package/dist/extension/plugin-parse.d.ts.map +1 -1
  123. package/dist/extension/plugin-parse.js +18 -2
  124. package/dist/extension/plugin-parse.js.map +1 -1
  125. package/dist/extension/problem-text.d.ts.map +1 -1
  126. package/dist/extension/problem-text.js +5 -0
  127. package/dist/extension/problem-text.js.map +1 -1
  128. package/dist/fix-plan/plan.d.ts +4 -0
  129. package/dist/fix-plan/plan.d.ts.map +1 -1
  130. package/dist/fix-plan/plan.js +1 -0
  131. package/dist/fix-plan/plan.js.map +1 -1
  132. package/dist/fix-plan/render.d.ts.map +1 -1
  133. package/dist/fix-plan/render.js +9 -0
  134. package/dist/fix-plan/render.js.map +1 -1
  135. package/dist/fix-plan/text.d.ts +4 -0
  136. package/dist/fix-plan/text.d.ts.map +1 -1
  137. package/dist/fix-plan/text.js +8 -2
  138. package/dist/fix-plan/text.js.map +1 -1
  139. package/dist/genre-guide/key-rules.d.ts +10 -0
  140. package/dist/genre-guide/key-rules.d.ts.map +1 -0
  141. package/dist/genre-guide/key-rules.js +23 -0
  142. package/dist/genre-guide/key-rules.js.map +1 -0
  143. package/dist/genre-guide/layer.d.ts +44 -0
  144. package/dist/genre-guide/layer.d.ts.map +1 -0
  145. package/dist/genre-guide/layer.js +43 -0
  146. package/dist/genre-guide/layer.js.map +1 -0
  147. package/dist/genre-guide/lines.d.ts +15 -0
  148. package/dist/genre-guide/lines.d.ts.map +1 -0
  149. package/dist/genre-guide/lines.js +39 -0
  150. package/dist/genre-guide/lines.js.map +1 -0
  151. package/dist/genre-guide/of-config.d.ts +13 -0
  152. package/dist/genre-guide/of-config.d.ts.map +1 -0
  153. package/dist/genre-guide/of-config.js +18 -0
  154. package/dist/genre-guide/of-config.js.map +1 -0
  155. package/dist/genre-guide/problem-text.d.ts +5 -0
  156. package/dist/genre-guide/problem-text.d.ts.map +1 -0
  157. package/dist/genre-guide/problem-text.js +29 -0
  158. package/dist/genre-guide/problem-text.js.map +1 -0
  159. package/dist/genre-guide/render.d.ts +5 -0
  160. package/dist/genre-guide/render.d.ts.map +1 -0
  161. package/dist/genre-guide/render.js +38 -0
  162. package/dist/genre-guide/render.js.map +1 -0
  163. package/dist/genre-guide/report.d.ts +32 -0
  164. package/dist/genre-guide/report.d.ts.map +1 -0
  165. package/dist/genre-guide/report.js +42 -0
  166. package/dist/genre-guide/report.js.map +1 -0
  167. package/dist/genre-guide/resolve.d.ts +16 -0
  168. package/dist/genre-guide/resolve.d.ts.map +1 -0
  169. package/dist/genre-guide/resolve.js +31 -0
  170. package/dist/genre-guide/resolve.js.map +1 -0
  171. package/dist/genre-parse.d.ts +5 -1
  172. package/dist/genre-parse.d.ts.map +1 -1
  173. package/dist/genre-parse.js +8 -1
  174. package/dist/genre-parse.js.map +1 -1
  175. package/dist/init.d.ts.map +1 -1
  176. package/dist/init.js +14 -0
  177. package/dist/init.js.map +1 -1
  178. package/dist/quoted-span.d.ts +7 -0
  179. package/dist/quoted-span.d.ts.map +1 -1
  180. package/dist/quoted-span.js +20 -0
  181. package/dist/quoted-span.js.map +1 -1
  182. package/dist/render/rules-json.d.ts +2 -1
  183. package/dist/render/rules-json.d.ts.map +1 -1
  184. package/dist/render/rules-json.js +3 -1
  185. package/dist/render/rules-json.js.map +1 -1
  186. package/dist/render/sarif.d.ts +3 -1
  187. package/dist/render/sarif.d.ts.map +1 -1
  188. package/dist/render/sarif.js +3 -1
  189. package/dist/render/sarif.js.map +1 -1
  190. package/dist/structure/definition-use.d.ts +14 -4
  191. package/dist/structure/definition-use.d.ts.map +1 -1
  192. package/dist/structure/definition-use.js +29 -9
  193. package/dist/structure/definition-use.js.map +1 -1
  194. package/dist/style-parse.d.ts +3 -0
  195. package/dist/style-parse.d.ts.map +1 -1
  196. package/dist/style-parse.js +18 -2
  197. package/dist/style-parse.js.map +1 -1
  198. package/genres.yaml +329 -0
  199. package/package.json +3 -3
  200. package/rules/calendar-name-case.yaml +55 -0
  201. package/rules/comparative-without-baseline.yaml +71 -0
  202. package/rules/cross-doc-broken-link.yaml +1 -1
  203. package/rules/cross-doc-duplicate-definition.yaml +1 -1
  204. package/rules/cross-doc-fact-conflict.yaml +1 -1
  205. package/rules/cross-doc-term-variant.yaml +5 -3
  206. package/rules/ellipsis-consistency.yaml +73 -0
  207. package/rules/figurative-density.yaml +84 -0
  208. package/rules/ime-residue.yaml +55 -0
  209. package/rules/lookalike-character.yaml +82 -0
  210. package/rules/numbered-generic-heading.yaml +111 -0
  211. package/rules/undefined-acronym.yaml +1 -0
  212. package/rules/unit-spacing-consistency.yaml +74 -0
  213. package/skills/chaff/SKILL.md +6 -0
  214. package/src/api.ts +13 -0
  215. package/src/cli-args.ts +3 -0
  216. package/src/cli-text.ts +2 -0
  217. package/src/cli.ts +16 -20
  218. package/src/commands/feedback.ts +3 -0
  219. package/src/commands/fix-plan.ts +8 -0
  220. package/src/commands/rules.ts +34 -0
  221. package/src/config/load.ts +7 -1
  222. package/src/config/style.ts +1 -1
  223. package/src/config/warnings.ts +3 -1
  224. package/src/detectors/bare-comparative.ts +152 -0
  225. package/src/detectors/chat-citation.ts +28 -1
  226. package/src/detectors/clause-shape.ts +20 -6
  227. package/src/detectors/definition-use.ts +13 -3
  228. package/src/detectors/ellipsis.ts +74 -0
  229. package/src/detectors/generic-heading.ts +30 -0
  230. package/src/detectors/ime-residue.ts +37 -0
  231. package/src/detectors/lexicon.ts +11 -2
  232. package/src/detectors/lookalike-character.ts +75 -0
  233. package/src/detectors/lowercase-name.ts +58 -0
  234. package/src/detectors/registry/bare-comparative.ts +4 -0
  235. package/src/detectors/registry/calendar-name-case.ts +4 -0
  236. package/src/detectors/registry/ellipsis-consistency.ts +4 -0
  237. package/src/detectors/registry/generic-heading.ts +4 -0
  238. package/src/detectors/registry/ime-residue.ts +4 -0
  239. package/src/detectors/registry/lookalike-character.ts +4 -0
  240. package/src/detectors/registry/unit-spacing-consistency.ts +4 -0
  241. package/src/detectors/signals.ts +9 -5
  242. package/src/detectors/structure-tree.ts +55 -30
  243. package/src/detectors/technical-docs.ts +13 -0
  244. package/src/detectors/unit-spacing.ts +71 -0
  245. package/src/extension/load.ts +4 -0
  246. package/src/extension/pack-read.ts +1 -0
  247. package/src/extension/plugin-load.ts +1 -1
  248. package/src/extension/plugin-parse.ts +27 -4
  249. package/src/extension/problem-text.ts +7 -1
  250. package/src/fix-plan/plan.ts +5 -0
  251. package/src/fix-plan/render.ts +9 -0
  252. package/src/fix-plan/text.ts +12 -2
  253. package/src/genre-guide/key-rules.ts +37 -0
  254. package/src/genre-guide/layer.ts +77 -0
  255. package/src/genre-guide/lines.ts +41 -0
  256. package/src/genre-guide/of-config.ts +26 -0
  257. package/src/genre-guide/problem-text.ts +34 -0
  258. package/src/genre-guide/render.ts +50 -0
  259. package/src/genre-guide/report.ts +63 -0
  260. package/src/genre-guide/resolve.ts +36 -0
  261. package/src/genre-parse.ts +13 -3
  262. package/src/init.ts +14 -0
  263. package/src/quoted-span.ts +25 -0
  264. package/src/render/rules-json.ts +4 -0
  265. package/src/render/sarif.ts +4 -1
  266. package/src/structure/definition-use.ts +42 -10
  267. package/src/style-parse.ts +19 -1
package/genres.yaml CHANGED
@@ -8,6 +8,9 @@
8
8
  # An off_for entry "<group>: measured by yarn rules:measure" is written by `yarn rules:measure --apply`: the
9
9
  # rule reports on most human documents of the group (chaff-spec.md §21.1). Edit the measurement, not these.
10
10
  # profile: the document profile (profiles/*.yaml) this genre reads with, when chaff.yaml names none.
11
+ # guide: what a good document of this kind does, as lines a reader (or an AI rewriting it) checks a draft against, in
12
+ # ja and en: checks, not adjectives. A genre without one reads its group's. A team replaces or adds lines with
13
+ # guide: in chaff.yaml, a style or a rule pack.
11
14
  # suggest: when no genre is set, what makes a file look like this genre, strongest first:
12
15
  # paths (the file's path), then per language an opening (the body's first line, past front matter and
13
16
  # headings) or a line with min_lines (how many lines must have that shape). A wrong suggestion misleads
@@ -18,27 +21,99 @@
18
21
  groups:
19
22
  - id: technical
20
23
  name: { ja: 技術文書, en: Technical }
24
+ guide:
25
+ ja:
26
+ - 書かれたとおりに実装・操作して、誰がやっても同じ結果になるか
27
+ - 用語・型・単位・既定値を一か所で定め、どこでも同じ名前で使っているか
28
+ - 必須と任意、前提条件、エラーのときの振る舞いを書き分けているか
29
+ en:
30
+ - Can a reader implement or run it exactly as written and get the same result?
31
+ - Is each term, type, unit and default defined once and named the same everywhere?
32
+ - Are required and optional, preconditions and error behaviour stated apart?
21
33
  - id: blog
22
34
  name: { ja: ブログ, en: Blog }
35
+ guide:
36
+ ja:
37
+ - 最初の段落で、何について何を言う記事かが分かるか
38
+ - 主張ごとに、具体例・数字・出典のどれかで裏付けているか
39
+ - 結びが本文の言い直しではなく、読者が次にすることを示しているか
40
+ en:
41
+ - Does the first paragraph say what the article is about and what it claims?
42
+ - Is each claim backed by an example, a number or a source?
43
+ - Does the ending tell the reader what to do next, rather than restate the body?
23
44
  - id: business
24
45
  name: { ja: ビジネス文書, en: Business }
46
+ guide:
47
+ ja:
48
+ - 冒頭で、結論と、読み手に求めること(判断・返事・期限)を述べているか
49
+ - 数字・日付・金額に出典か根拠があり、本文と表で一致しているか
50
+ - 誰が・何を・いつまでに、が文ごとに読み取れるか
51
+ en:
52
+ - Does the opening give the conclusion and what the reader must do (decide, reply, by when)?
53
+ - Do numbers, dates and amounts have a source, and agree between the text and the tables?
54
+ - Can each action be read as who does what by when?
25
55
  # Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive
26
56
  # (shall be deemed), and joins long noun compounds (個人情報取扱事業者). Those rules would only flag the form.
27
57
  - id: legal
28
58
  name: { ja: 法務, en: Legal }
59
+ guide:
60
+ ja:
61
+ - 定義した語を、定義どおりの形で使い通しているか
62
+ - 条・項・号の番号に抜けや重複がなく、参照先が実在するか
63
+ - 義務・権利・例外の主語と条件が、一通りにしか読めないか
64
+ en:
65
+ - Is each defined term used in exactly its defined form throughout?
66
+ - Are articles, sections and items numbered without gaps or repeats, and does every cross-reference point to one that exists?
67
+ - "Can each obligation, right and exception be read only one way: who, and under what condition?"
29
68
  # A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up.
30
69
  - id: docs
31
70
  name: { ja: 説明書, en: Documentation }
71
+ guide:
72
+ ja:
73
+ - 1 つの節が 1 つの用事(作業・問い・用語)に答えているか
74
+ - 前提条件と必要なものを、手順より前に書いているか
75
+ - 読み手が操作する語(ボタン名・コマンド・設定名)を、画面やコードと同じ綴りで書いているか
76
+ en:
77
+ - Does each section answer one need (one task, one question, one term)?
78
+ - Are prerequisites and what is needed stated before the steps?
79
+ - Are the words the reader acts on (button labels, commands, setting names) spelled exactly as on screen or in code?
32
80
  # Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence.
33
81
  - id: academic
34
82
  name: { ja: 学術, en: Academic }
83
+ guide:
84
+ ja:
85
+ - 要旨だけで、問い・方法・結果・結論が分かるか
86
+ - 引用が参考文献の一覧と一対一で対応し、引用の書き方が一つにそろっているか
87
+ - 図表が参照の順に番号付けされ、本文の数字と図表の数字が一致しているか
88
+ en:
89
+ - Does the abstract alone give the question, the method, the result and the conclusion?
90
+ - Does every citation match one entry in the reference list, in one citation style?
91
+ - Are figures and tables numbered in the order they are referred to, and do the numbers in the text match them?
35
92
  # Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles.
36
93
  # Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps.
37
94
  - id: literature
38
95
  name: { ja: 文学, en: Literature }
96
+ guide:
97
+ ja:
98
+ - 文体・リズム・繰り返しは作者の選択として読む。直すのは作品の中での食い違いだけ
99
+ - 人名・地名・表記・時系列が、作品を通して一貫しているか
100
+ - 章の番号と記号(ダッシュ・三点リーダー・括弧)の使い方が、通してそろっているか
101
+ en:
102
+ - Style, rhythm and repetition are the author's choices; fix only what the work contradicts in itself
103
+ - Are names, places, spellings and the timeline consistent through the work?
104
+ - Are chapter numbers and marks (dashes, ellipses, quotation marks) used the same way throughout?
39
105
  # A speech opens with greetings and closes with thanks: that is its form, not padding.
40
106
  - id: speech
41
107
  name: { ja: 話し言葉, en: Speech }
108
+ guide:
109
+ ja:
110
+ - 耳で一度聞いて分かる長さの文か(主語と述語が離れすぎていないか)
111
+ - 冒頭で何の話かを言い、最後に要点をもう一度言っているか
112
+ - 数字と固有名詞を、聞き取れる形(読み方・単位)で書いているか
113
+ en:
114
+ - Can each sentence be understood on one hearing (subject and verb close together)?
115
+ - Does it say what it is about at the start, and repeat the point at the end?
116
+ - Are numbers and names written the way they will be spoken (units, pronunciation)?
42
117
 
43
118
  genres:
44
119
  - id: technical/spec
@@ -46,41 +121,129 @@ genres:
46
121
  summary:
47
122
  ja: 仕様書・RFC・設計文書。読み手に間違えさせないための文書
48
123
  en: Specifications, RFCs and design documents, written so the reader cannot get it wrong
124
+ guide:
125
+ ja:
126
+ - 要件ごとに、必須(しなければならない)か任意(してもよい)かが一語で分かるか
127
+ - 曖昧な語(適切に・速やかに・など)を、数値か条件に置き換えているか
128
+ - 用語・型・単位・既定値を一か所で定義し、仕様全体で同じ名前で使っているか
129
+ - 正常な場合だけでなく、エラー・境界値・想定外の入力での振る舞いを書いているか
130
+ en:
131
+ - Does each requirement say in one word whether it is required (MUST) or optional (MAY)?
132
+ - Are vague words (appropriate, promptly, etc.) replaced by a number or a condition?
133
+ - Is each term, type, unit and default defined once and used under the same name across the spec?
134
+ - Is the behaviour stated for errors, boundaries and unexpected input, not only the normal case?
49
135
  - id: technical/readme
50
136
  name: { ja: README・技術文書, en: README and technical docs }
51
137
  summary:
52
138
  ja: README と開発者向けの説明
53
139
  en: READMEs and documentation for developers
140
+ guide:
141
+ ja:
142
+ - 最初の数行で、これが何で、誰のためのものかが分かるか
143
+ - インストールから最初に動かすまでの手順が、コピーしてそのまま動くか
144
+ - 対応するバージョン(言語・OS・依存するもの)を書いているか
145
+ - コード・コマンド・設定名が、実物と同じ綴りか
146
+ en:
147
+ - Do the first lines say what this is and who it is for?
148
+ - Do the steps from installing to the first run work when copied as they are?
149
+ - Are the supported versions (language, OS, dependencies) stated?
150
+ - Are code, commands and setting names spelled exactly as in the project?
54
151
  - id: blog/tech
55
152
  name: { ja: 技術ブログ, en: Tech blog }
56
153
  summary:
57
154
  ja: 技術記事。ジャンルを決めないときはこれで見ます
58
155
  en: Technical articles; the genre used when none is set
156
+ guide:
157
+ ja:
158
+ - 冒頭で、主張を 1 つに絞って言い切っているか(何が分かり、何ができるようになる記事か)
159
+ - 手順とコードが、書いてあるとおりに実行して同じ結果になるか
160
+ - 使ったバージョン(言語・ライブラリ・OS)と、試した日付を書いているか
161
+ - 試してうまくいかなかったこと、制約、前提を書いているか
162
+ - 結びが本文の言い直しではなく、次に読むもの・試すものを示しているか
163
+ en:
164
+ - Does the opening make one claim, plainly (what the reader will learn or be able to do)?
165
+ - Do the steps and code run as written and give the same result?
166
+ - Are the versions used (language, libraries, OS) and the date they were tried stated?
167
+ - Does it say what was tried and failed, the limits, and the assumptions?
168
+ - Does the ending point to what to read or try next, rather than restate the body?
59
169
  - id: blog/essay
60
170
  name: { ja: エッセイ(ブログ), en: Blog essay }
61
171
  summary:
62
172
  ja: 自分の考えを書くブログのエッセイ
63
173
  en: Personal essays posted on a blog
174
+ guide:
175
+ ja:
176
+ - 何について考えた文章かを、最初の段落で示しているか
177
+ - 主張を、自分の体験か具体的な場面で裏付けているか
178
+ - 結びが、冒頭で立てた問いに答えているか
179
+ en:
180
+ - Does the first paragraph show what the essay is thinking about?
181
+ - Is each claim grounded in an experience or a concrete scene?
182
+ - Does the ending answer the question the opening raised?
64
183
  - id: blog/owned-media
65
184
  name: { ja: オウンドメディア, en: Owned media }
66
185
  summary:
67
186
  ja: 会社や団体が読者に向けて出す記事
68
187
  en: Articles an organisation publishes for its readers
188
+ guide:
189
+ ja:
190
+ - 冒頭で、想定する読者と、その読者が得るものを示しているか
191
+ - 数字・事例・引用に、出典と時点があるか
192
+ - 自社の宣伝と、読者に役立つ情報を見分けられるか
193
+ - 最後に、読者が次にとれる行動(問い合わせ・関連記事)を 1 つ示しているか
194
+ en:
195
+ - Does the opening name the intended reader and what they will get?
196
+ - Do numbers, cases and quotes have a source and a date?
197
+ - Can promotion be told apart from what is useful to the reader?
198
+ - Does it end with one action the reader can take next (get in touch, a related article)?
69
199
  - id: business/proposal
70
200
  name: { ja: 提案書・企画書, en: Proposal }
71
201
  summary:
72
202
  ja: 提案書・企画書・計画書
73
203
  en: Proposals, plans and pitches
204
+ guide:
205
+ ja:
206
+ - 冒頭で、何を・いくらで・いつまでに提案するかを言い切っているか
207
+ - 課題・提案・効果の数字に根拠があり、本文と表で一致しているか
208
+ - リスクと、それぞれへの手当てを書いているか
209
+ - 読み手に求める判断と、その期限を書いているか
210
+ en:
211
+ - Does the opening state what is proposed, at what cost, and by when?
212
+ - Do the figures for the problem, the proposal and the benefit have a basis, and agree between the text and the tables?
213
+ - Are the risks stated, each with what is done about it?
214
+ - Does it say what decision is asked of the reader, and by when?
74
215
  - id: business/report
75
216
  name: { ja: 報告書, en: Report }
76
217
  summary:
77
218
  ja: 報告書・白書・社内文書
78
219
  en: Reports, white papers and internal documents
220
+ guide:
221
+ ja:
222
+ - 冒頭で、結論(何が分かったか・何が起きたか)を述べているか
223
+ - 数字に出典と時点があり、合計と割合が合っているか
224
+ - 事実と、意見・推測を書き分けているか
225
+ - 次の行動を、担当と期限つきで書いているか
226
+ en:
227
+ - Does the opening give the finding (what was learned, or what happened)?
228
+ - Do the numbers have a source and a date, and do totals and percentages add up?
229
+ - Are facts kept apart from opinions and guesses?
230
+ - Are the next actions given with an owner and a deadline?
79
231
  - id: business/email
80
232
  name: { ja: メール・手紙, en: Email and letter }
81
233
  summary:
82
234
  ja: 仕事のメールと手紙
83
235
  en: Work email and letters
236
+ guide:
237
+ ja:
238
+ - 件名と最初の 2 行で、用件と、相手にしてほしいことが分かるか
239
+ - 依頼ごとに期限があるか(「近日中」ではなく日付で)
240
+ - 「添付します」と書いたものを、本当に添付しているか
241
+ - 宛名・挨拶・結び・署名がそろっているか
242
+ en:
243
+ - Do the subject and the first two lines give the purpose and what the reader should do?
244
+ - 'Does each request have a deadline (a date, not "soon")?'
245
+ - Is everything said to be attached actually attached?
246
+ - Are the greeting, the closing and the signature in place?
84
247
  # A letter is a letter even when it encloses an agreement (an offer letter), so it goes by how it opens.
85
248
  # Not by an addressee line (〇〇御中, To: ...): quotes and proposals open with one too.
86
249
  suggest:
@@ -91,16 +254,51 @@ genres:
91
254
  summary:
92
255
  ja: プレスリリースと、お知らせ
93
256
  en: Press releases and public notices
257
+ guide:
258
+ ja:
259
+ - 見出しと第 1 段落で、誰が・何を・いつ・どこで・なぜを言い切っているか
260
+ - 日付・価格・数字・固有名詞が正確で、本文の中で一致しているか
261
+ - 強い形容(画期的・業界初)に裏付けがあるか
262
+ - 問い合わせ先と、発表の日付を書いているか
263
+ en:
264
+ - Do the headline and the first paragraph state who, what, when, where and why?
265
+ - Are dates, prices, figures and names exact and consistent throughout?
266
+ - Is every superlative (groundbreaking, first in the industry) backed by evidence?
267
+ - Are the contact and the release date given?
94
268
  - id: business/meeting-notes
95
269
  name: { ja: 議事録, en: Meeting notes }
96
270
  summary:
97
271
  ja: 議事録・議事要旨
98
272
  en: Minutes and meeting notes
273
+ guide:
274
+ ja:
275
+ - 日時・出席者・議題が冒頭にあるか
276
+ - 決まったことと、話し合っただけのことを分けているか
277
+ - 宿題ごとに、担当と期限があるか
278
+ - 次回の日程と、持ち越した議題を書いているか
279
+ en:
280
+ - Are the date, the attendees and the agenda at the top?
281
+ - Are decisions kept apart from what was only discussed?
282
+ - Does each action item have an owner and a deadline?
283
+ - Are the next meeting and the items carried over recorded?
99
284
  - id: legal/contract
100
285
  name: { ja: 契約書・規約, en: Contract and terms }
101
286
  summary:
102
287
  ja: 契約書・利用規約・プライバシーポリシー
103
288
  en: Contracts, terms of service and privacy policies
289
+ guide:
290
+ ja:
291
+ - 当事者の呼び方(甲・乙、定義した名前)を、最後まで同じ形で使っているか
292
+ - 定義語を一度だけ定め、定義どおりの形で使っているか
293
+ - 義務ごとに、誰が・何を・いつまでにするかが読み取れるか
294
+ - 金額・日付・期間・条番号の参照が、条項どうしと別表とで一致しているか
295
+ - 解除・損害賠償・準拠法・紛争の解決を定めた条項があるか
296
+ en:
297
+ - Are the parties named the same way (as defined) from start to end?
298
+ - Is each defined term defined once and used in exactly its defined form?
299
+ - Can each obligation be read as who does what by when?
300
+ - Do amounts, dates, periods and clause references agree across the clauses and the schedules?
301
+ - Are termination, liability, governing law and dispute resolution covered?
104
302
  suggest:
105
303
  paths: ["(^|/)(contracts?|agreements?|terms|tos|nda|keiyaku|kiyaku)(/|[-_.])", "(^|/)privacy[-_]?policy[-_.]"]
106
304
  ja: { line: "本契約|本規約|本ポリシー|以下「(?:甲|乙|丙)」|^#{1,6}\\s*(?:プライバシーポリシー|個人情報保護方針|利用規約|契約書)", min_lines: 2 }
@@ -126,6 +324,17 @@ genres:
126
324
  summary:
127
325
  ja: 法令・規則・社内規程・通達
128
326
  en: Statutes, regulations and internal rules
327
+ guide:
328
+ ja:
329
+ - 定義規定で定めた語を、定義どおりの形で使っているか
330
+ - 条・項・号の番号に抜けや重複がなく、「第何条」の参照先が実在するか
331
+ - 義務(しなければならない)・禁止・権限(することができる)・努力義務を書き分けているか
332
+ - 適用の範囲・例外(ただし書)・施行の日が読み取れるか
333
+ en:
334
+ - Is every term from the definitions used in exactly its defined form?
335
+ - Are sections numbered without gaps or repeats, and does every cross-reference point to one that exists?
336
+ - Are duties (shall), prohibitions (shall not), powers (may) and best-effort duties written apart?
337
+ - Can the scope, the exceptions (provided that) and the date of effect be found?
129
338
  profile: statute
130
339
  # Also suggested when the content has the statute profile's shape.
131
340
  suggest:
@@ -147,6 +356,15 @@ genres:
147
356
  summary:
148
357
  ja: 判決文・決定
149
358
  en: Court judgments and opinions
359
+ guide:
360
+ ja:
361
+ - 主文(結論)と理由が分かれているか
362
+ - 当事者・証拠・条文の呼び方が、全体で一貫しているか
363
+ - 引用した条文と判例の番号・日付が正確か
364
+ en:
365
+ - Are the holding and the reasoning kept apart?
366
+ - Are the parties, the exhibits and the statutes referred to the same way throughout?
367
+ - Are the cited statutes and cases given with exact numbers and dates?
150
368
  suggest:
151
369
  ja: { line: "^(?:#{1,6}\\s*)?(?:主\\s*文|理\\s*由|判\\s*決)\\s*$", min_lines: 2 }
152
370
  en: { line: "delivered the opinion of the Court|^(?:Reversed|Affirmed)\\.?$", min_lines: 1 }
@@ -155,6 +373,17 @@ genres:
155
373
  summary:
156
374
  ja: 特許の明細書と請求項
157
375
  en: Patent specifications and claims
376
+ guide:
377
+ ja:
378
+ - 請求項の用語が、明細書で定義か説明されているか
379
+ - 従属する請求項(請求項 1 に記載の)の参照先が実在するか
380
+ - 本文の符号と、図面の符号が一致しているか
381
+ - 一つの構成要素を、最後まで同じ名前で呼んでいるか
382
+ en:
383
+ - Is every term in the claims defined or described in the specification?
384
+ - Does each dependent claim refer to a claim that exists (according to claim 1)?
385
+ - Do the reference numerals in the text match the drawings?
386
+ - Is each element called by the same name throughout?
158
387
  suggest:
159
388
  ja: { line: "【(?:課題|解決手段|請求項[0-90-9]+|選択図|技術分野|背景技術|発明の詳細な説明|特許請求の範囲)】", min_lines: 2 }
160
389
  en: { line: "^#{1,6}\\s*(?:BACKGROUND OF THE INVENTION|SUMMARY OF THE INVENTION|Claims\\b)|\\bof claim \\d+", min_lines: 3 }
@@ -163,6 +392,19 @@ genres:
163
392
  summary:
164
393
  ja: 使い方の説明・手順書・ヘルプ
165
394
  en: User guides, how-to pages and help
395
+ guide:
396
+ ja:
397
+ - 1 つの節が 1 つの作業だけを扱い、見出しがその作業の名前になっているか
398
+ - 前提条件・必要な権限・準備を、手順より前に書いているか
399
+ - 手順は番号付きで、1 手順に 1 操作、命令の形で、行う順に並んでいるか
400
+ - 手順ごとに、うまくいったら何が見えるかを書いているか
401
+ - ボタン名・コマンド・設定名が、画面やコードと同じ綴りか
402
+ en:
403
+ - Does each section cover one task, with the task as its heading?
404
+ - Are prerequisites, permissions and preparation given before the steps?
405
+ - Are the steps numbered, one action each, in the imperative and in the order they are done?
406
+ - Does each step say what the reader should see when it worked?
407
+ - Are button labels, commands and setting names spelled exactly as on screen or in code?
166
408
  # Path only: step and procedure headings are as common in tech blogs and specifications as in manuals.
167
409
  suggest:
168
410
  paths: ["(^|/)(manuals?|guides?|how-?tos?|help|tutorials?|user-?guides?)(/|[-_.])"]
@@ -177,6 +419,15 @@ genres:
177
419
  summary:
178
420
  ja: 問いと答えを並べたページ
179
421
  en: Pages of questions and answers
422
+ guide:
423
+ ja:
424
+ - 問いごとに、最初の 1 文で答えているか
425
+ - 問いが、読み手が実際に使う言葉で書かれているか
426
+ - 長い説明は繰り返さず、本編へのリンクで済ませているか
427
+ en:
428
+ - Does each question get its answer in the first sentence?
429
+ - Is each question worded the way readers actually ask it?
430
+ - Are longer explanations linked to rather than repeated?
180
431
  suggest:
181
432
  paths: ["(^|[/_-])(faqs?|q-?and-?a)([/_.-]|$)"]
182
433
  ja: { line: "^(?:#{1,6}\\s*)?(?:[QQ][0-90-9]*[..::、\\s ]|問[0-90-9]+[..::\\s ])|^#{1,6}\\s*(?:よくある(?:ご)?質問|Q&A|Q&A)", min_lines: 2 }
@@ -186,6 +437,15 @@ genres:
186
437
  summary:
187
438
  ja: 用語と、その説明を並べたページ
188
439
  en: Lists of terms and what they mean
440
+ guide:
441
+ ja:
442
+ - 1 つの語を、1 か所でだけ定義しているか
443
+ - 説明が、まだ定義していない語に頼っていないか
444
+ - 並び順(五十音・アルファベット)が一貫しているか
445
+ en:
446
+ - Is each term defined in one place only?
447
+ - Do the definitions avoid relying on terms not yet defined?
448
+ - Is the order (alphabetical, or 五十音 for Japanese) consistent?
189
449
  suggest:
190
450
  paths: ["(^|/)(glossary|glossaries|yogo|用語集)(/|[-_.])"]
191
451
  ja: { line: "^#{1,6}\\s*用語集", min_lines: 1 }
@@ -195,6 +455,17 @@ genres:
195
455
  summary:
196
456
  ja: 論文と、その要旨
197
457
  en: Papers and abstracts
458
+ guide:
459
+ ja:
460
+ - 要旨だけで、問い・方法・結果・結論が分かり、決められた長さに収まっているか
461
+ - 引用が参考文献の一覧と一対一で対応し、引用の書き方が一つにそろっているか
462
+ - 図表が参照の順に番号付けされ、本文の数字と図表の数字が一致しているか
463
+ - 主張の強さが結果に見合っているか(示した・示唆する、を使い分けているか)
464
+ en:
465
+ - Does the abstract alone give the question, the method, the result and the conclusion, within its length?
466
+ - Does every citation match one entry in the reference list, in one citation style?
467
+ - Are figures and tables numbered in the order they are referred to, and do the numbers in the text match them?
468
+ - Does each claim go no further than the results (shows, or suggests)?
198
469
  suggest:
199
470
  paths: ["(^|/)(papers?|ronbun)(/|[-_.])"]
200
471
  ja: { line: "^(?:#{1,6}\\s*)?(?:要旨|抄録|参考文献|引用文献|謝辞)\\s*(?:[((].*)?$", min_lines: 2 }
@@ -215,6 +486,17 @@ genres:
215
486
  summary:
216
487
  ja: 小説・物語
217
488
  en: Novels and stories
489
+ guide:
490
+ ja:
491
+ - 文体・リズム・会話の崩しは作者の選択として読む。直すのは作品の中での食い違いだけ
492
+ - 登場人物の名前・呼び方・設定が、最後まで一貫しているか
493
+ - 時の流れと場所の移り変わりに、矛盾がないか
494
+ - 会話の括弧・ダッシュ・三点リーダーの使い方が、通してそろっているか
495
+ en:
496
+ - Style, rhythm and broken speech are the author's choices; fix only what the work contradicts in itself
497
+ - Are the characters' names, forms of address and details consistent to the end?
498
+ - Do the timeline and the changes of place hold together?
499
+ - Are quotation marks, dashes and ellipses used the same way throughout?
218
500
  # A line that is a spoken line (「…」, or 「…」と云った): a sentence in quotes, not a term being defined
219
501
  # (「…」とは, 「…」という, 「…」とする, 「…」と定める, 「…」と称する, 「…」と呼ぶ).
220
502
  suggest:
@@ -225,11 +507,29 @@ genres:
225
507
  summary:
226
508
  ja: 文学としての随筆。ブログのエッセイは blog/essay
227
509
  en: Literary essays; a blog essay is blog/essay
510
+ guide:
511
+ ja:
512
+ - 文体は作者の選択として読む。直すのは作品の中での食い違いだけ
513
+ - 引用・固有名詞・年代が正確か
514
+ - 表記(漢字とかな、数字の書き方)が通してそろっているか
515
+ en:
516
+ - The style is the author's choice; fix only what the work contradicts in itself
517
+ - Are quotations, names and dates accurate?
518
+ - Are spellings and the way numbers are written consistent throughout?
228
519
  - id: literature/poetry
229
520
  name: { ja: 詩歌, en: Poetry }
230
521
  summary:
231
522
  ja: 詩・短歌・俳句
232
523
  en: Poems and verse
524
+ guide:
525
+ ja:
526
+ - 行分け・字余り・繰り返しは作者の選択。直すのは誤字と、作品の中での表記の揺れだけ
527
+ - 題と本文、連の番号と区切りの記号がそろっているか
528
+ - ルビ・旧字・歴史的仮名遣いを、作品の中で一貫して使っているか
529
+ en:
530
+ - Line breaks, metre and repetition are the poet's choices; fix only typos and spellings the work itself varies
531
+ - Are titles, stanza numbers and section marks consistent?
532
+ - Are archaic spellings and forms used consistently within the work?
233
533
  # Verse lines: short lines with no sentence punctuation (a tanka's three lines; a capitalised line of English verse).
234
534
  # A glossary or a list of names has short lines too, so it takes many of them.
235
535
  suggest:
@@ -241,6 +541,15 @@ genres:
241
541
  summary:
242
542
  ja: 戯曲・脚本
243
543
  en: Plays and scripts
544
+ guide:
545
+ ja:
546
+ - 話者の名前の書き方が、登場人物の一覧と台詞とで一致しているか
547
+ - ト書きと台詞を、形で見分けられるか
548
+ - 幕と場の番号に抜けがないか
549
+ en:
550
+ - Are the speakers' names written the same in the cast list and before their lines?
551
+ - Can stage directions be told from dialogue by their form?
552
+ - Are acts and scenes numbered without gaps?
244
553
  # A speaker's name before the line: 妻  あたしは… (two ideographic spaces; a statute's 第一条  has one), ALGERNON.
245
554
  suggest:
246
555
  paths: ["(^|/)(plays?|screenplays?|kyakuhon)(/|[-_.])"]
@@ -251,6 +560,17 @@ genres:
251
560
  summary:
252
561
  ja: 読み上げるために書いた演説・挨拶
253
562
  en: Speeches and addresses written to be read aloud
563
+ guide:
564
+ ja:
565
+ - 耳で一度聞いて分かる長さの文か(主語と述語が離れすぎていないか)
566
+ - 冒頭で何の話かを言い、最後に要点をもう一度言っているか
567
+ - 数字と固有名詞を、聞き取れる形(読み方・単位)で書いているか
568
+ - 読み上げて、与えられた時間に収まるか
569
+ en:
570
+ - Can each sentence be understood on one hearing (subject and verb close together)?
571
+ - Does it say what it is about at the start, and repeat the point at the end?
572
+ - Are numbers and names written the way they will be spoken (units, pronunciation)?
573
+ - Does it fit the time it is given when read aloud?
254
574
  suggest:
255
575
  paths: ["(^|/)(speech(es)?|addresses)(/|[-_.])"]
256
576
  ja: { line: "^(?:議長|御列席の皆様|ご列席の皆様|皆様|皆さん)、|ご清聴(?:いただき)?ありがとうございました", min_lines: 2 }
@@ -260,6 +580,15 @@ genres:
260
580
  summary:
261
581
  ja: 話したことを書き起こした記録(会見・国会の会議録)
262
582
  en: Verbatim records of what was said (press conferences, parliamentary debates)
583
+ guide:
584
+ ja:
585
+ - 発言は話した人のもの。言い直しや口癖は記録として残し、直すのは書き起こしの誤りだけ
586
+ - 話者の名前と肩書の書き方が、全体で一貫しているか
587
+ - 聞き取れなかった所と補った所を、決めた印([不明]・〔 〕)で示しているか
588
+ en:
589
+ - What was said belongs to the speaker; keep restarts and habits as the record, and fix only transcription errors
590
+ - Are the speakers' names and titles written the same way throughout?
591
+ - Are inaudible and supplied passages marked the same way ([inaudible], [ ])?
263
592
  suggest:
264
593
  paths: ["(^|/)(transcripts?|kaigiroku)(/|[-_.])"]
265
594
  ja: { line: "^○[^ \\s]{1,30} |^((?:問|答))|^【(?:記者|大臣|質問|回答)】", min_lines: 3 }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chaffjs",
3
- "version": "0.22.0",
3
+ "version": "0.24.0",
4
4
  "description": "Prose validation harness. Finds what is hard to read, and never rewrites it for you.",
5
5
  "keywords": [
6
6
  "chaff",
@@ -66,8 +66,8 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@anthropic-ai/sdk": "^0.125.0",
69
- "@chaffjs/lang-en": "0.20.0",
70
- "@chaffjs/lang-ja": "0.21.0",
69
+ "@chaffjs/lang-en": "0.22.0",
70
+ "@chaffjs/lang-ja": "0.23.0",
71
71
  "mdast-util-from-markdown": "^2.0.3",
72
72
  "mdast-util-frontmatter": "^2.0.1",
73
73
  "mdast-util-gfm-table": "^2.0.0",
@@ -0,0 +1,55 @@
1
+ id: calendar-name-case
2
+ layer: L1
3
+ status: stable
4
+ how_to_find: calendar-name-case
5
+ languages: [en]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: 小文字で書いた曜日・月の名
10
+ en: Weekday or month in lower case
11
+
12
+ why:
13
+ ja: 英語では曜日と月の名(Monday、January)は固有名として必ず大文字で始めます。「on monday」のような小文字は、急いで打った跡か、チャットから貼った文に見え、検索でも大文字の形と分かれます。どの書き方を選ぶかの話ではなく、英語の綴りの決まりです。
14
+ en: 'English always capitalises the names of the days and months (Monday, January). "On monday" reads as typed in a hurry or pasted from a chat, and splits a search from the capitalised form. It is a rule of English spelling, not a matter of style.'
15
+
16
+ message:
17
+ ja: 「{written}」は大文字で始めて「{usual}」と書きます
18
+ en: 'Write "{written}" as "{usual}"'
19
+
20
+ how_to_fix:
21
+ ja: 頭の字を大文字にしてください。
22
+ en: Capitalise the first letter.
23
+
24
+ levels: { strict: error, normal: warning, relaxed: info }
25
+
26
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+
28
+ group: slips
29
+ summary:
30
+ ja: 英語で、「on monday」のように小文字で書いた曜日や月の名
31
+ en: A weekday or month written in lower case, as in "on monday"
32
+ example:
33
+ en:
34
+ before: |
35
+ The review is on monday, and the release follows in june.
36
+ after: |
37
+ The review is on Monday, and the release follows in June.
38
+
39
+ not_flagged:
40
+ ja: '英語の文書だけで動きます。普通の語でもある may、march、august と、略した形(mon、jan)は見ません。コードの中と、パス・タグ・アドレスの一部(monday.md、/june/、#friday、@sunday)と、設定の値(day: monday、"monday"、cron の * * monday)も見ません。'
41
+ en: 'Only in English documents. "may", "march" and "august", which are also ordinary words, and abbreviations (mon, jan) are not read. Code, and names inside a path, a tag or an address (monday.md, /june/, #friday, @sunday), and values in settings (day: monday, "monday", a cron field) are not read either.'
42
+ sources: [proselint]
43
+ rewrite:
44
+ depth: light
45
+ en:
46
+ direction: Capitalise the marked weekday or month. Change nothing else.
47
+ pairs:
48
+ - before: The review is on monday.
49
+ after: The review is on Monday.
50
+ - before: We ship in june and again in december.
51
+ after: We ship in June and again in December.
52
+ keep:
53
+ - the words and their order
54
+ avoid:
55
+ - capitalising other words in the sentence
@@ -0,0 +1,71 @@
1
+ id: comparative-without-baseline
2
+ layer: L3
3
+ status: stable
4
+ how_to_find: bare-comparative
5
+ requires: [pos]
6
+ severity: info
7
+
8
+ name:
9
+ ja: 比べる相手の無い比較
10
+ en: A comparison with nothing to compare with
11
+
12
+ why:
13
+ ja: 「より良い結果」「さらに高速になりました」は、何より良いのか、何より速いのかが書かれていなければ、読み手は確かめようがありません。宣伝の文に多く、言い切ったように見えて何も約束していません。「より」「さらに」の直後に程度を言う語がある文で、同じ文にも直前の文にも比べる相手(従来、以前、前回、「〜より」)が無いものを指します。
14
+ en: '"Better results" and "the new engine is faster" leave the reader unable to check anything unless they say better or faster than what. Marketing copy is full of them: they sound like a claim and promise nothing. A comparative that closes a clause after a verb ("is faster.", "is more efficient.") is reported when neither its sentence nor the one before names what it is compared with ("than", "previous", "before").'
15
+
16
+ message:
17
+ ja: 「{matched}」は、何と比べているかが書かれていません
18
+ en: '"{matched}" does not say what it is compared with'
19
+
20
+ how_to_fix:
21
+ ja: 比べる相手を書いてください(さらに高速になりました → 前の版より 2 倍速くなりました)。相手が無いなら、比較をやめて事実を書きます(処理は 1 秒で終わります)。
22
+ en: Name what it is compared with ("is faster" becomes "is twice as fast as version 2"), or state the fact instead of comparing ("finishes in one second").
23
+
24
+ levels: { strict: warning, normal: info, relaxed: info }
25
+
26
+ use_for: [business, technical, blog, docs, academic, legal, literature, speech]
27
+ off_for:
28
+ literature: "A narrator and a character compare as they speak."
29
+ speech: "A speaker's comparisons lean on what the audience already has in mind."
30
+
31
+ group: wording
32
+ summary:
33
+ ja: 「より良い」「さらに高速」のように、比べる相手が書かれていない比較
34
+ en: A comparative such as "is faster" or "is more efficient" with no "than" or other baseline nearby
35
+
36
+ example:
37
+ ja:
38
+ before: 新しい版では、処理がさらに高速になりました。
39
+ after: 新しい版では、処理が前の版の 2 倍速くなりました。
40
+ en:
41
+ before: We rewrote the parser. The new engine is faster.
42
+ after: We rewrote the parser. The new engine is twice as fast as version 2.
43
+
44
+ not_flagged:
45
+ ja: 同じ文か直前の文に比べる相手(従来、以前、前回、昨年、「〜より」「〜に比べて」)がある比較、「より多くの」「より詳しく」のような決まった言い方、程度を言う語が続かない「さらに」(さらに、〜します)、条件の下の比較(入れるとより良くなる)は指しません。
46
+ en: 'A comparison whose sentence or the one before names a baseline ("than", "previous", "before", "compared"), a comparative before a noun ("better results", read only in Japanese), a comparative that does not close its clause ("runs faster on large files"), and one under a condition or a hypothesis ("if it looks better", "would be easier") are not reported.'
47
+
48
+ rewrite:
49
+ depth: light
50
+ ja:
51
+ direction: 比べる相手を文書から探して書き足すか、比較をやめて数や事実で言い直してください。相手が文書に無ければ、作らずに書き手に尋ねます。
52
+ pairs:
53
+ - before: 新しい版では、処理がさらに高速になりました。
54
+ after: 新しい版では、処理が前の版の 2 倍速くなりました。
55
+ - before: より良い結果を届けます。
56
+ after: 誤検出を前年の半分に減らします。
57
+ keep:
58
+ - 文書に書いてある数と事実
59
+ avoid:
60
+ - 文書に無い比べる相手や数を作る
61
+ en:
62
+ direction: Add what the comparison is against, taken from the document, or replace the comparison with the figure or fact. If the document gives no baseline, ask the writer instead of inventing one.
63
+ pairs:
64
+ - before: The new engine is faster.
65
+ after: The new engine is twice as fast as version 2.
66
+ - before: Setup is now easier.
67
+ after: Setup now takes one command instead of five.
68
+ keep:
69
+ - the figures and facts the document gives
70
+ avoid:
71
+ - inventing a baseline or a figure the document does not give
@@ -1,6 +1,6 @@
1
1
  id: cross-doc-broken-link
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: cross-doc-broken-link
5
5
  # documents: compares the files of one run, so it runs only when chaff is given two or more files, or a folder.
6
6
  requires: [markdown, documents]