@gspothq/cli 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -11
- package/configurations/database/postgres/manifest.toml +51 -57
- package/configurations/database/postgres/rules/POSTGRES.md +14 -13
- package/configurations/framework/astro/manifest.toml +33 -35
- package/configurations/framework/astro/rules/ASTRO.md +2 -2
- package/configurations/framework/expo/manifest.toml +19 -19
- package/configurations/framework/express/manifest.toml +10 -4
- package/configurations/framework/express/rules/EXPRESS.md +9 -7
- package/configurations/framework/fastapi/manifest.toml +9 -3
- package/configurations/framework/fastapi/rules/FASTAPI.md +19 -18
- package/configurations/framework/nestjs/manifest.toml +12 -12
- package/configurations/framework/nestjs/rules/NESTJS.md +9 -9
- package/configurations/framework/nextjs/manifest.toml +39 -79
- package/configurations/framework/nextjs/rules/NEXTJS.md +9 -7
- package/configurations/framework/nextjs/tool-files/semgrep/nextjs.yml +35 -0
- package/configurations/framework/react/manifest.toml +33 -43
- package/configurations/framework/react/rules/REACT.md +14 -20
- package/configurations/framework/react-dom/manifest.toml +6 -6
- package/configurations/framework/react-native/manifest.toml +11 -11
- package/configurations/framework/react-native/rules/REACT-NATIVE.md +3 -5
- package/configurations/framework/site/manifest.toml +57 -110
- package/configurations/framework/site/rules/SITE.md +1 -1
- package/configurations/framework/svelte/manifest.toml +29 -31
- package/configurations/framework/svelte/rules/SVELTE.md +6 -6
- package/configurations/framework/vue/manifest.toml +37 -37
- package/configurations/framework/vue/rules/VUE.md +6 -6
- package/configurations/general/commits/manifest.toml +20 -84
- package/configurations/general/commits/rules/GIT.md +24 -13
- package/configurations/general/coverage/manifest.toml +1 -1
- package/configurations/general/dependencies/manifest.toml +47 -107
- package/configurations/general/dependencies/rules/DEPENDENCIES.md +13 -7
- package/configurations/general/docs/manifest.toml +28 -43
- package/configurations/general/docs/rules/DOCS.md +16 -9
- package/configurations/general/duplication/manifest.toml +12 -14
- package/configurations/general/engineering/manifest.toml +6 -2
- package/configurations/general/engineering/rules/agent/PLANNING.md +9 -6
- package/configurations/general/engineering/rules/agent/SUPPRESSIONS.md +20 -11
- package/configurations/general/engineering/rules/agent/TASKS.md +6 -2
- package/configurations/general/engineering/rules/agent/WORKING.md +34 -29
- package/configurations/general/engineering/rules/code/ACCESSIBILITY.md +9 -7
- package/configurations/general/engineering/rules/code/CLI.md +12 -9
- package/configurations/general/engineering/rules/code/COMMENTS.md +11 -1
- package/configurations/general/engineering/rules/code/CONFIGURATION.md +2 -0
- package/configurations/general/engineering/rules/code/ERRORS.md +5 -3
- package/configurations/general/engineering/rules/code/HTTP.md +9 -10
- package/configurations/general/engineering/rules/code/LOGGING.md +10 -9
- package/configurations/general/engineering/rules/code/TESTING.md +18 -11
- package/configurations/general/files/manifest.toml +45 -73
- package/configurations/general/files/rules/YAML.md +20 -10
- package/configurations/general/format/manifest.toml +53 -106
- package/configurations/general/gspot/manifest.toml +19 -39
- package/configurations/general/gspot/rules/GENERATED.md +14 -4
- package/configurations/general/licenses/manifest.toml +12 -14
- package/configurations/general/naming/defaults.json +14 -13
- package/configurations/general/naming/manifest.toml +17 -17
- package/configurations/general/naming/rules/NAMING.md +87 -67
- package/configurations/general/prose/manifest.toml +166 -25
- package/configurations/general/prose/rules/WRITING.md +6 -2
- package/configurations/general/repository/manifest.toml +12 -12
- package/configurations/general/secrets/manifest.toml +52 -73
- package/configurations/general/secrets/rules/SECRETS.md +3 -1
- package/configurations/general/security/manifest.toml +29 -52
- package/configurations/general/security/rules/SECURITY.md +8 -6
- package/configurations/general/spelling/manifest.toml +15 -25
- package/configurations/general/structure/manifest.toml +31 -31
- package/configurations/infrastructure/ansible/manifest.toml +15 -15
- package/configurations/infrastructure/docker/manifest.toml +55 -67
- package/configurations/infrastructure/docker/rules/DOCKER.md +15 -13
- package/configurations/infrastructure/github-actions/manifest.toml +21 -41
- package/configurations/infrastructure/github-actions/rules/GITHUB-ACTIONS.md +16 -12
- package/configurations/infrastructure/github-actions/tool-files/zizmor.yml +5 -0
- package/configurations/infrastructure/nginx/manifest.toml +20 -20
- package/configurations/infrastructure/nginx/rules/NGINX.md +5 -4
- package/configurations/infrastructure/openapi/manifest.toml +20 -20
- package/configurations/infrastructure/openapi/rules/OPENAPI.md +3 -1
- package/configurations/infrastructure/xcode/manifest.toml +55 -75
- package/configurations/infrastructure/xcode/rules/XCODE.md +5 -3
- package/configurations/language/bash/manifest.toml +89 -170
- package/configurations/language/bash/rules/BASH.md +79 -17
- package/configurations/language/bash/rules/LANGUAGE.md +30 -26
- package/configurations/language/bash/rules/OPERATIONS.md +10 -8
- package/configurations/language/bash/rules/SAFETY.md +39 -35
- package/configurations/language/css/manifest.toml +22 -61
- package/configurations/language/css/rules/CSS.md +21 -2
- package/configurations/language/css/rules/TAILWIND.md +7 -5
- package/configurations/language/html/manifest.toml +16 -35
- package/configurations/language/html/rules/HTML.md +23 -5
- package/configurations/language/javascript/eslint-runtime-names.json +66 -61
- package/configurations/language/javascript/eslint-runtime.mjs +118 -0
- package/configurations/language/javascript/manifest.toml +135 -207
- package/configurations/language/javascript/rules/BUN.md +2 -2
- package/configurations/language/javascript/rules/COMPONENTS.md +4 -4
- package/configurations/language/javascript/rules/DENO.md +1 -1
- package/configurations/language/javascript/rules/JAVASCRIPT.md +30 -17
- package/configurations/language/javascript/rules/NODE.md +2 -2
- package/configurations/language/javascript/rules/PLAYWRIGHT.md +10 -9
- package/configurations/language/markdown/manifest.toml +20 -51
- package/configurations/language/python/manifest.toml +231 -342
- package/configurations/language/python/rules/DESIGN.md +40 -33
- package/configurations/language/python/rules/FLOW.md +8 -6
- package/configurations/language/python/rules/PACKAGING.md +14 -7
- package/configurations/language/python/rules/PYTHON.md +83 -33
- package/configurations/language/python/rules/TYPING.md +25 -23
- package/configurations/language/sql/manifest.toml +19 -37
- package/configurations/language/sql/rules/SQL.md +90 -2
- package/configurations/language/swift/manifest.toml +67 -78
- package/configurations/language/swift/rules/SWIFT.md +138 -40
- package/configurations/language/swift/rules/SWIFTUI.md +11 -9
- package/configurations/language/swift/rules/UIKIT.md +21 -19
- package/configurations/language/typescript/manifest.toml +34 -34
- package/configurations/language/typescript/rules/TYPESCRIPT.md +62 -10
- package/configurations/library/drizzle/manifest.toml +25 -38
- package/configurations/library/drizzle/rules/DRIZZLE.md +4 -2
- package/configurations/library/react-hook-form/manifest.toml +4 -4
- package/configurations/library/react-hook-form/rules/REACT-HOOK-FORM.md +15 -13
- package/configurations/library/tanstack-query/manifest.toml +6 -6
- package/configurations/library/tanstack-query/rules/TANSTACK-QUERY.md +5 -3
- package/configurations/library/testing-library/manifest.toml +6 -6
- package/configurations/library/translations/manifest.toml +22 -22
- package/configurations/library/translations/rules/NEXT-INTL.md +6 -8
- package/configurations/library/translations/rules/TRANSLATIONS.md +22 -23
- package/configurations/library/trpc/manifest.toml +3 -3
- package/configurations/library/trpc/rules/TRPC.md +8 -6
- package/configurations/library/zod/manifest.toml +6 -6
- package/configurations/library/zod/rules/ZOD.md +4 -2
- package/configurations/library/zustand/manifest.toml +4 -4
- package/configurations/library/zustand/rules/ZUSTAND.md +16 -14
- package/configurations/platform/cloudflare/manifest.toml +28 -47
- package/configurations/platform/cloudflare/rules/CLOUDFLARE.md +11 -6
- package/configurations/platform/supabase/manifest.toml +48 -61
- package/configurations/platform/supabase/rules/SUPABASE.md +27 -28
- package/configurations/testing/jest/manifest.toml +21 -22
- package/configurations/testing/pytest/manifest.toml +28 -28
- package/configurations/testing/swift-tests/manifest.toml +18 -29
- package/configurations/testing/swift-tests/rules/SWIFT-TESTS.md +7 -5
- package/configurations/testing/vitest/manifest.toml +32 -32
- package/configurations/testing/vitest/rules/VITEST.md +3 -1
- package/dist/gspot.js +22297 -24707
- package/dist/{linkinator-program.js → linkinator-process.js} +5 -7
- package/dist/{purgecss-program.js → purgecss-process.js} +12 -12
- package/package.json +7 -9
- package/configurations/infrastructure/github-actions/zizmor.yml +0 -3
- package/configurations/language/bash/rules/NAMING.md +0 -62
- package/configurations/language/css/rules/NAMING.md +0 -17
- package/configurations/language/html/rules/NAMING.md +0 -16
- package/configurations/language/javascript/rules/NAMING.md +0 -31
- package/configurations/language/markdown/markdownlint-cli2.mjs +0 -19
- package/configurations/language/python/rules/NAMING.md +0 -53
- package/configurations/language/sql/rules/NAMING.md +0 -90
- package/configurations/language/swift/rules/NAMING.md +0 -88
- package/configurations/language/typescript/rules/NAMING.md +0 -73
- package/configurations/library/swift-snapshot-testing/manifest.toml +0 -32
- package/dist/THIRD-PARTY-NOTICES.md +0 -25
- package/dist/eslint-rule-levels.json +0 -10
- package/dist/tool-versions.json +0 -3
- package/gspot.schema.json +0 -45991
- /package/{dist/LICENSE.md → LICENSE.md} +0 -0
- /package/configurations/framework/express/{semgrep → tool-files/semgrep}/express.yml +0 -0
- /package/configurations/framework/fastapi/{semgrep → tool-files/semgrep}/fastapi.yml +0 -0
- /package/configurations/general/dependencies/{syncpack.json → tool-files/syncpack.json} +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/LICENSES.md +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/ampm.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/conscious-language.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/contractions.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/currency.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/dashes.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/date-ordinals.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/dates.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/file-paths.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/future.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/hedging.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/history.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/idioms.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/interface-verbs.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/jargon.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/leading-conjunctions.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/link-text.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/locations.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/marketing.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/merge-conflict-markers.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/militaristic-language.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/modals.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/numbered-units.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/obvious-fields.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/ordinal-adverbs.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/percentage-numbers.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/placeholders.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/product-centric-writing.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/punctuated-headings.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/self-reference.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/session-identifiers.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/since.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/straight-quotes.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/suspended-hyphens.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/symbols.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/time-ranges.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/url-prepositions.yml +0 -0
- /package/configurations/general/prose/{vale → tool-files/vale}/styles/gspot/version-range.yml +0 -0
- /package/configurations/general/secrets/{gitleaks.toml → tool-files/gitleaks.toml} +0 -0
- /package/configurations/infrastructure/docker/{trivyignore → tool-files/trivyignore} +0 -0
- /package/configurations/language/bash/{semgrep → tool-files/semgrep}/bash.yml +0 -0
- /package/configurations/language/javascript/{semgrep → tool-files/semgrep}/javascript.yml +0 -0
- /package/configurations/language/swift/{semgrep → tool-files/semgrep}/swift.yml +0 -0
- /package/configurations/platform/cloudflare/{semgrep → tool-files/semgrep}/cloudflare.yml +0 -0
- /package/configurations/platform/supabase/{semgrep → tool-files/semgrep}/supabase.yml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vue
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Read this rule when you change Vue components, composables, or stores.
|
|
4
4
|
|
|
5
5
|
## Components
|
|
6
6
|
|
|
@@ -18,23 +18,23 @@ These rules cover Vue 3 single-file components, reactivity, props and events, te
|
|
|
18
18
|
|
|
19
19
|
<!-- level: all -->
|
|
20
20
|
|
|
21
|
-
Name an event for what happened, in the past tense or as a noun
|
|
21
|
+
Name an event for what happened, in the past tense or as a noun, such as `saved` or `update:modelValue`.
|
|
22
22
|
|
|
23
23
|
## Reactivity
|
|
24
24
|
|
|
25
25
|
- Use `ref` for a value and `reactive` for an object that keeps the same identity. Do not destructure a reactive object.
|
|
26
26
|
- Derive with `computed`.
|
|
27
|
-
- Use `watch` for an effect outside Vue: a request, a timer, storage. Do not use it to derive state.
|
|
28
|
-
-
|
|
27
|
+
- Use `watch` for an effect outside Vue: a request, a timer, or storage. Do not use it to derive state.
|
|
28
|
+
- Stop whatever a component started in `onUnmounted` or in the cleanup callback of the watcher.
|
|
29
29
|
|
|
30
30
|
## State and data
|
|
31
31
|
|
|
32
32
|
<!-- level: all -->
|
|
33
33
|
|
|
34
|
-
- Local state stays in the component. Shared state goes in a store, one
|
|
34
|
+
- Local state stays in the component. Shared state goes in a store, one per domain.
|
|
35
35
|
- A store exposes actions that say what happened. Components do not assign to store state.
|
|
36
36
|
- Fetch data in a composable or a store action, never inline in a template event.
|
|
37
|
-
- Name a composable `use` and its subject, such as `useCart
|
|
37
|
+
- Name a composable `use` and its subject, such as `useCart`. Return reactive values when callers need reactivity.
|
|
38
38
|
|
|
39
39
|
## Tests
|
|
40
40
|
|
|
@@ -1,111 +1,47 @@
|
|
|
1
1
|
[configuration]
|
|
2
|
-
title = "Commits"
|
|
3
2
|
always_selected = true
|
|
4
|
-
when = { git = true }
|
|
5
3
|
description = "Checks commit messages for a conventional type, an optional project scope, a first line of 72 characters or fewer, and a wrapped body."
|
|
4
|
+
title = "Commits"
|
|
5
|
+
when = { git = true }
|
|
6
6
|
|
|
7
7
|
[files]
|
|
8
8
|
paths = ["**"]
|
|
9
9
|
|
|
10
10
|
[[tool]]
|
|
11
|
+
mise = "npm:@commitlint/cli"
|
|
11
12
|
name = "commitlint"
|
|
12
|
-
version = "21.2.2"
|
|
13
13
|
npm = "@commitlint/cli"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
file = ".commitlintrc"
|
|
17
|
-
shared = false
|
|
18
|
-
|
|
19
|
-
[[tool.replace]]
|
|
20
|
-
file = ".commitlintrc.json"
|
|
21
|
-
shared = false
|
|
22
|
-
|
|
23
|
-
[[tool.replace]]
|
|
24
|
-
file = ".commitlintrc.yml"
|
|
25
|
-
shared = false
|
|
26
|
-
|
|
27
|
-
[[tool.replace]]
|
|
28
|
-
file = ".commitlintrc.yaml"
|
|
29
|
-
shared = false
|
|
30
|
-
|
|
31
|
-
[[tool.replace]]
|
|
32
|
-
file = ".commitlintrc.js"
|
|
33
|
-
shared = false
|
|
34
|
-
|
|
35
|
-
[[tool.replace]]
|
|
36
|
-
file = ".commitlintrc.cjs"
|
|
37
|
-
shared = false
|
|
38
|
-
|
|
39
|
-
[[tool.replace]]
|
|
40
|
-
file = ".commitlintrc.mjs"
|
|
41
|
-
shared = false
|
|
42
|
-
|
|
43
|
-
[[tool.replace]]
|
|
44
|
-
file = ".commitlintrc.ts"
|
|
45
|
-
shared = false
|
|
46
|
-
|
|
47
|
-
[[tool.replace]]
|
|
48
|
-
file = ".commitlintrc.cts"
|
|
49
|
-
shared = false
|
|
50
|
-
|
|
51
|
-
[[tool.replace]]
|
|
52
|
-
file = ".commitlintrc.mts"
|
|
53
|
-
shared = false
|
|
54
|
-
|
|
55
|
-
[[tool.replace]]
|
|
56
|
-
file = "commitlint.config.js"
|
|
57
|
-
shared = false
|
|
58
|
-
|
|
59
|
-
[[tool.replace]]
|
|
60
|
-
file = "commitlint.config.cjs"
|
|
61
|
-
shared = false
|
|
62
|
-
|
|
63
|
-
[[tool.replace]]
|
|
64
|
-
file = "commitlint.config.mjs"
|
|
65
|
-
shared = false
|
|
66
|
-
|
|
67
|
-
[[tool.replace]]
|
|
68
|
-
file = "commitlint.config.ts"
|
|
69
|
-
shared = false
|
|
70
|
-
|
|
71
|
-
[[tool.replace]]
|
|
72
|
-
file = "commitlint.config.cts"
|
|
73
|
-
shared = false
|
|
74
|
-
|
|
75
|
-
[[tool.replace]]
|
|
76
|
-
file = "commitlint.config.mts"
|
|
77
|
-
shared = false
|
|
14
|
+
replace = [".commitlintrc", ".commitlintrc.json", ".commitlintrc.yml", ".commitlintrc.yaml", ".commitlintrc.js", ".commitlintrc.cjs", ".commitlintrc.mjs", ".commitlintrc.ts", ".commitlintrc.cts", ".commitlintrc.mts", "commitlint.config.js", "commitlint.config.cjs", "commitlint.config.mjs", "commitlint.config.ts", "commitlint.config.cts", "commitlint.config.mts"]
|
|
15
|
+
version = "21.2.2"
|
|
78
16
|
|
|
79
|
-
[[tool.
|
|
17
|
+
[[tool.replace_key]]
|
|
80
18
|
file = "package.json"
|
|
81
19
|
key = "commitlint"
|
|
82
20
|
redirect = true
|
|
83
|
-
shared = true
|
|
84
21
|
|
|
85
22
|
[[tool_file]]
|
|
86
23
|
target = ".gspot/config/commitlint.config.cjs"
|
|
87
24
|
tool = "commitlint"
|
|
88
|
-
rule_keys = ["rules"]
|
|
89
25
|
|
|
90
26
|
[[check]]
|
|
91
|
-
name = "commitlint"
|
|
92
|
-
example = "The proposed message `changed stuff` lacks the configured conventional-commit structure. A message such as `fix(cli): report missing configuration` supplies a type, scope, and subject. Use a type and scope accepted by the repository policy."
|
|
93
|
-
level = "all"
|
|
94
|
-
stage = "message"
|
|
95
27
|
command = ["commitlint", "--config", "{tool_file:commitlint}", "--edit", "{message_file}"]
|
|
28
|
+
example = "The message `changed stuff` has no type or scope. Write `fix(cli): report missing configuration` instead."
|
|
29
|
+
help = "Write `<type>`: `<subject>` or `<type>`(`<scope>`): `<subject>` in a first line of 72 characters or fewer. Change the accepted types with `gspot set tools.commitlint.types`."
|
|
30
|
+
level = "all"
|
|
31
|
+
name = "commitlint"
|
|
96
32
|
output = { format = "regex", pattern = "^\\s*[✖⚠]\\s+(?<message>.*?)\\s+\\[(?<rule>[a-z-]+)\\]\\s*$" }
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
33
|
+
stage = "message"
|
|
34
|
+
summary = "Checks a new commit message for a conventional type, an optional known scope, a first line of 72 characters or fewer, and a wrapped body."
|
|
35
|
+
why = "Release notes, blame, and bisect depend on typed, scoped subjects, and a free-form message hides the change."
|
|
100
36
|
|
|
101
37
|
[[check]]
|
|
102
|
-
|
|
103
|
-
|
|
38
|
+
example = "A commit with the message `changed stuff` in the push fails. Reword it as `fix(cli): report missing configuration`, and coordinate first when others share that history."
|
|
39
|
+
help = "Reword the commits that fail with `git rebase -i`, or change the rule with `gspot set tools.commitlint.rules`."
|
|
104
40
|
level = "all"
|
|
105
|
-
|
|
41
|
+
name = "commitlint-pushed"
|
|
42
|
+
output = { format = "regex", pattern = "^\\s*[✖⚠]\\s+(?<message>.*?)\\s+\\[(?<rule>[a-z-]+)\\]\\s*$" }
|
|
106
43
|
runs = "history"
|
|
44
|
+
stage = "push"
|
|
45
|
+
summary = "Checks the message of each commit in a push. A manual run covers every commit from the upstream merge base to HEAD."
|
|
107
46
|
tool = "commitlint"
|
|
108
|
-
|
|
109
|
-
summary = "Checks the message of every commit the push sends. Run by hand, it checks every commit from the upstream merge base to HEAD."
|
|
110
|
-
why = "A message written past the hook (--no-verify, a rebase, a merge) still reaches the shared branch unless the push checks it."
|
|
111
|
-
help = "Reword the commits that fail with git rebase -i, or change the rule with gspot set tools.commitlint.rules."
|
|
47
|
+
why = "A message written past the hook (--no-verify, a rebase, or a merge) still reaches the shared branch unless the push checks it."
|
|
@@ -1,31 +1,42 @@
|
|
|
1
1
|
# Git
|
|
2
2
|
|
|
3
|
+
Read this rule before you commit, push, tag, or open a pull request.
|
|
4
|
+
|
|
3
5
|
## Working with uncommitted changes
|
|
4
6
|
|
|
5
|
-
Changes you did not make may belong to another agent or contributor working in parallel. Do not
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
Changes you did not make may belong to another agent or contributor working in parallel. Do not revert, stash,
|
|
8
|
+
clean, or overwrite them. Keep working beside them, and ask the user only when your change overwrites or contradicts
|
|
9
|
+
one.
|
|
8
10
|
|
|
9
11
|
## Commits
|
|
10
12
|
|
|
11
13
|
- Commit only when the user asks.
|
|
12
14
|
- One change per commit. Put a rename and a behavior change in two commits.
|
|
13
15
|
- The body says what changed and why.
|
|
14
|
-
- Footers reference issues with `Refs: #123` or `Closes: #123`, and breaking changes with `BREAKING CHANGE
|
|
16
|
+
- Footers reference issues with `Refs: #123` or `Closes: #123`, and breaking changes with `BREAKING CHANGE:...`.
|
|
15
17
|
- Never bypass hooks with `--no-verify`.
|
|
18
|
+
- Never add `[skip ci]`, `[ci skip]`, `[no ci]`, or another marker that stops CI.
|
|
19
|
+
- Never force-push the default branch or a protected branch.
|
|
20
|
+
|
|
21
|
+
## Branches and pull requests
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
When the repository uses branches and pull requests, follow these steps. Skip them when changes go straight to
|
|
24
|
+
the default branch.
|
|
18
25
|
|
|
19
26
|
- Name branches `<type>/<kebab-summary>`, such as `feat/order-export` or `fix/session-expiry`.
|
|
20
|
-
-
|
|
21
|
-
- Rebase onto the default branch before
|
|
27
|
+
- Force-push your own branch only after a rebase you performed.
|
|
28
|
+
- Rebase onto the default branch before you open a pull request. Do not merge it into a feature branch.
|
|
29
|
+
- Use the commit subject as the title for a single-commit branch. Otherwise, write one sentence for the whole
|
|
30
|
+
change.
|
|
31
|
+
- The description states what changed, why, and which checks verified it. It links the issue.
|
|
32
|
+
- A pull request does one thing. Put unrelated fixes in a separate branch.
|
|
22
33
|
|
|
23
|
-
##
|
|
34
|
+
## Releases
|
|
24
35
|
|
|
25
|
-
-
|
|
36
|
+
- Publish a package only through the release task or workflow, from a commit that CI tested.
|
|
37
|
+
- Tag every published version. The tag names the commit you published.
|
|
38
|
+
- After you publish a version, change its code only under a new version number.
|
|
26
39
|
|
|
27
|
-
##
|
|
40
|
+
## Files to keep out of commits
|
|
28
41
|
|
|
29
|
-
-
|
|
30
|
-
- The description states what changed, why, and which checks verified it. It links the issue.
|
|
31
|
-
- A pull request does one thing. Unrelated fixes found on the way go in a separate branch.
|
|
42
|
+
- Editor state such as `.vscode/`, `.idea/`, or `xcuserdata/`, except settings the team commits on purpose.
|
|
@@ -1,159 +1,99 @@
|
|
|
1
|
-
prefix_collisions = { prefixes = ["package", "pnpm"] }
|
|
2
|
-
|
|
3
1
|
[configuration]
|
|
4
|
-
title = "Dependencies"
|
|
5
2
|
always_selected = true
|
|
6
|
-
description = "
|
|
3
|
+
description = "Checks for known advisories, one version per package, exact pins, one package manager, and a lockfile that matches its dependency file."
|
|
4
|
+
title = "Dependencies"
|
|
7
5
|
|
|
8
6
|
[files]
|
|
9
7
|
filenames = ["package.json", "bun.lock", "bun.lockb", "package-lock.json", "pnpm-lock.yaml", "yarn.lock", "bunfig.toml", ".npmrc", "pnpm-workspace.yaml", "pyproject.toml", "uv.lock", "requirements*.txt", "Package.swift", "Package.resolved", "Cargo.toml", "Cargo.lock", "go.mod", "go.sum", "Gemfile.lock"]
|
|
10
8
|
kinds = ["source", "generated"]
|
|
11
9
|
|
|
10
|
+
[shared_prefixes]
|
|
11
|
+
prefixes = ["package", "pnpm"]
|
|
12
|
+
|
|
12
13
|
[[tool]]
|
|
13
|
-
name = "osv-scanner"
|
|
14
|
-
version = "2.6.0"
|
|
15
|
-
min_version = "2.0.0"
|
|
16
|
-
mise = "osv-scanner"
|
|
17
14
|
brew = "osv-scanner"
|
|
18
15
|
github = { name = "google/osv-scanner", version = "v2.6.0" }
|
|
19
|
-
|
|
16
|
+
min_version = "2.0.0"
|
|
17
|
+
mise = "osv-scanner"
|
|
18
|
+
name = "osv-scanner"
|
|
19
|
+
replace = ["osv-scanner.toml"]
|
|
20
20
|
scoop = "osv-scanner"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
shared = false
|
|
21
|
+
version = "2.6.0"
|
|
22
|
+
winget = "Google.OSVScanner"
|
|
24
23
|
|
|
25
24
|
[[tool]]
|
|
25
|
+
mise = "npm:syncpack"
|
|
26
26
|
name = "syncpack"
|
|
27
|
-
version = "15.3.3"
|
|
28
27
|
npm = "syncpack"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
file = ".syncpackrc"
|
|
32
|
-
shared = false
|
|
33
|
-
|
|
34
|
-
[[tool.replace]]
|
|
35
|
-
file = ".syncpackrc.json"
|
|
36
|
-
shared = false
|
|
37
|
-
|
|
38
|
-
[[tool.replace]]
|
|
39
|
-
file = ".syncpackrc.yaml"
|
|
40
|
-
shared = false
|
|
41
|
-
|
|
42
|
-
[[tool.replace]]
|
|
43
|
-
file = ".syncpackrc.yml"
|
|
44
|
-
shared = false
|
|
45
|
-
|
|
46
|
-
[[tool.replace]]
|
|
47
|
-
file = ".syncpackrc.ts"
|
|
48
|
-
shared = false
|
|
49
|
-
|
|
50
|
-
[[tool.replace]]
|
|
51
|
-
file = ".syncpackrc.mjs"
|
|
52
|
-
shared = false
|
|
53
|
-
|
|
54
|
-
[[tool.replace]]
|
|
55
|
-
file = ".syncpackrc.js"
|
|
56
|
-
shared = false
|
|
57
|
-
|
|
58
|
-
[[tool.replace]]
|
|
59
|
-
file = ".syncpackrc.cjs"
|
|
60
|
-
shared = false
|
|
61
|
-
|
|
62
|
-
[[tool.replace]]
|
|
63
|
-
file = "syncpack.config.js"
|
|
64
|
-
shared = false
|
|
65
|
-
|
|
66
|
-
[[tool.replace]]
|
|
67
|
-
file = "syncpack.config.cjs"
|
|
68
|
-
shared = false
|
|
69
|
-
|
|
70
|
-
[[tool.replace]]
|
|
71
|
-
file = "syncpack.config.mjs"
|
|
72
|
-
shared = false
|
|
73
|
-
|
|
74
|
-
[[tool.replace]]
|
|
75
|
-
file = "syncpack.config.ts"
|
|
76
|
-
shared = false
|
|
28
|
+
replace = [".syncpackrc", ".syncpackrc.json", ".syncpackrc.yaml", ".syncpackrc.yml", ".syncpackrc.ts", ".syncpackrc.mjs", ".syncpackrc.js", ".syncpackrc.cjs", "syncpack.config.js", "syncpack.config.cjs", "syncpack.config.mjs", "syncpack.config.ts"]
|
|
29
|
+
version = "15.3.3"
|
|
77
30
|
|
|
78
31
|
[[tool_file]]
|
|
79
32
|
target = ".gspot/config/osv-scanner.toml"
|
|
80
33
|
tool = "osv-scanner"
|
|
81
34
|
|
|
82
35
|
[[tool_file]]
|
|
83
|
-
source = "syncpack.json"
|
|
84
36
|
target = ".gspot/config/syncpack.json"
|
|
85
37
|
tool = "syncpack"
|
|
86
38
|
|
|
87
39
|
[[check]]
|
|
88
|
-
|
|
89
|
-
|
|
40
|
+
example = "A locked package version named in an OSV advisory reports a finding. Upgrade to a fixed version, and update the lockfile."
|
|
41
|
+
files = { filenames = ["bun.lock", "package-lock.json", "npm-shrinkwrap.json", "pnpm-lock.yaml", "yarn.lock", "go.mod", "Cargo.lock", "Gemfile.lock", "gems.locked", "requirements.txt", "Pipfile.lock", "poetry.lock", "pdm.lock", "pylock.toml", "uv.lock", "pom.xml", "gradle.lockfile", "buildscript-gradle.lockfile", "conan.lock", "pubspec.lock", "mix.lock", "cabal.project.freeze", "stack.yaml.lock", "composer.lock", "renv.lock", "packages.config", "packages.lock.json", "*.deps.json"], paths = ["**/gradle/verification-metadata.xml", "gradle/verification-metadata.xml"], kinds = ["source", "generated"] }
|
|
90
42
|
level = "recommended"
|
|
91
|
-
|
|
92
|
-
runs = "once"
|
|
43
|
+
name = "osv-scanner"
|
|
93
44
|
needs = ["network"]
|
|
94
|
-
|
|
45
|
+
runs = "once"
|
|
46
|
+
stage = "push"
|
|
95
47
|
# The tool project lockfiles under .gspot stay out: a repository cannot upgrade a package that a gspot tool pins.
|
|
96
48
|
command = ["osv-scanner", "scan", "source", "--config", "{tool_file:osv-scanner}", "--format", "json", "--allow-no-lockfiles", "--recursive", "--experimental-exclude", ".gspot", "{root}"]
|
|
49
|
+
help = "Upgrade the package the finding names. When no fix exists, accept the advisory until a recheck date with `gspot ignore dependencies/osv-scanner --rule <advisory-id> --reason \"<why>\" --until <YYYY-MM-DD>`."
|
|
97
50
|
output = { format = "json", items = "results", children = "packages.vulnerabilities", fields = { file = "source.path", rule = "id", message = "package.name package.version summary" } }
|
|
98
51
|
summary = "Looks up every locked dependency in the Open Source Vulnerabilities (OSV) advisory database."
|
|
99
52
|
why = "An advisory identifies a vulnerability in a dependency version."
|
|
100
|
-
help = "Upgrade the package the finding names. When no fix exists, accept the advisory with `gspot ignore dependencies/osv --rule <advisory-id> --reason \"<why>\" --until <YYYY-MM-DD>`. Recheck it before that date."
|
|
101
53
|
|
|
102
54
|
[[check]]
|
|
103
|
-
name = "syncpack"
|
|
104
|
-
example = "Two workspace manifests declaring different versions of a dependency governed by the same version group report a mismatch. Align both declarations to the reviewed version and update the lockfile."
|
|
105
|
-
level = "all"
|
|
106
|
-
stage = "push"
|
|
107
|
-
runs = "once"
|
|
108
55
|
command = ["syncpack", "lint", "--config", "{tool_file:syncpack}"]
|
|
109
|
-
|
|
56
|
+
example = "Two package.json files that pin different versions of one dependency report a mismatch. Set both to the same version, and update the lockfile."
|
|
110
57
|
files = { filenames = ["package.json"] }
|
|
58
|
+
help = "Run `syncpack fix --config .gspot/config/syncpack.json`, or align the versions by hand."
|
|
59
|
+
level = "all"
|
|
60
|
+
name = "syncpack"
|
|
111
61
|
output = { format = "lines" }
|
|
62
|
+
runs = "once"
|
|
63
|
+
stage = "push"
|
|
112
64
|
summary = "Checks that every workspace package resolves each dependency to one version."
|
|
113
|
-
|
|
114
|
-
|
|
65
|
+
tool = "syncpack"
|
|
66
|
+
why = "Two versions of a dependency in one workspace behave differently, so a bug shows in only one package."
|
|
115
67
|
|
|
116
68
|
[[check]]
|
|
117
|
-
|
|
118
|
-
example = "A repository with both `bun.lock` and `package-lock.json` reports a second lockfile. Delete the lockfile of the package manager the repository does not use."
|
|
119
|
-
level = "all"
|
|
120
|
-
stage = "commit"
|
|
121
|
-
runs = "once"
|
|
69
|
+
example = "npm 10.9.2 in packageManager reports a finding, because it ignores min-release-age. Declare npm 11.17.0 or newer."
|
|
122
70
|
files = { filenames = ["package.json"] }
|
|
123
|
-
|
|
124
|
-
why = "Two package managers install two different trees."
|
|
125
|
-
help = "Name one packageManager in the root package.json, use it in every package, mark a workspace root private, and delete the other lockfile."
|
|
126
|
-
|
|
127
|
-
[[check]]
|
|
128
|
-
name = "stale-lockfile"
|
|
129
|
-
example = "Adding a dependency to a package manifest without updating its lockfile reports an outdated lockfile. Run the owning package manager installation, inspect its manifest and lockfile changes, and retain both together."
|
|
71
|
+
help = "Upgrade the package manager that the root package.json names to the version the finding gives."
|
|
130
72
|
level = "recommended"
|
|
131
|
-
|
|
73
|
+
name = "release-age"
|
|
132
74
|
runs = "once"
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
why = "A lockfile that lags its manifest installs versions nobody reviewed the moment someone runs a plain install."
|
|
137
|
-
help = "Run the install of the package manager once and commit the lockfile it writes."
|
|
75
|
+
stage = "commit"
|
|
76
|
+
summary = "Checks that the package manager in the root package.json holds back releases newer than dependencies.min_release_age_days."
|
|
77
|
+
why = "gspot writes a release hold for each package manager. An older version ignores it and installs a new release the day it appears."
|
|
138
78
|
|
|
139
79
|
[[check]]
|
|
140
|
-
|
|
141
|
-
|
|
80
|
+
example = "A root package.json without packageManager reports a finding. Declare the package manager and its exact version."
|
|
81
|
+
files = { filenames = ["package.json"] }
|
|
82
|
+
help = "Name one packageManager in the root package.json."
|
|
142
83
|
level = "all"
|
|
84
|
+
name = "package-json"
|
|
85
|
+
runs = "once"
|
|
143
86
|
stage = "commit"
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
summary = "Checks each Bun project's bunfig.toml for the required minimum release age and security scanner."
|
|
147
|
-
why = "Most malicious releases are pulled within days, so a package nobody installs in its first week rarely harms anybody."
|
|
148
|
-
help = "Set [install] minimumReleaseAge in bunfig.toml to the seconds the message names, and the scanner under [install.security]."
|
|
87
|
+
summary = "Checks that the root package.json names a packageManager."
|
|
88
|
+
why = "A declared package manager keeps installs and the lockfile format consistent."
|
|
149
89
|
|
|
150
90
|
[[check]]
|
|
151
|
-
|
|
152
|
-
|
|
91
|
+
example = "A lockfile URL outside `dependencies.allowed_registries` reports its host. Install the package again from an allowed registry, or add that host to the list."
|
|
92
|
+
files = { filenames = ["package-lock.json", "npm-shrinkwrap.json", "pnpm-lock.yaml", "yarn.lock", "bun.lock", "bun.lockb"], kinds = ["source", "generated"] }
|
|
93
|
+
help = "Install the package from the registry again, or add the host to dependencies.allowed_registries."
|
|
153
94
|
level = "recommended"
|
|
154
|
-
|
|
95
|
+
name = "lockfiles"
|
|
155
96
|
runs = "scope"
|
|
156
|
-
|
|
97
|
+
stage = "commit"
|
|
157
98
|
summary = "Checks that npm, pnpm, Yarn, and text Bun lockfile downloads in each project scope use HTTPS and allowed registry hosts."
|
|
158
|
-
why = "A lockfile line
|
|
159
|
-
help = "Install the package from the registry again, or add the host to dependencies.allowed_registries."
|
|
99
|
+
why = "A lockfile line from another host installs code nobody chose, and reviewers rarely read those files."
|
|
@@ -1,30 +1,36 @@
|
|
|
1
1
|
# Dependencies
|
|
2
2
|
|
|
3
|
+
Read this rule before you add, upgrade, or remove a dependency.
|
|
4
|
+
|
|
3
5
|
## Adding one
|
|
4
6
|
|
|
5
|
-
- Do not add a dependency for a one-line
|
|
7
|
+
- Do not add a dependency for a one-line standard API, a small local helper, or an array, object, or
|
|
6
8
|
string utility. Use the platform first, then what the repository already depends on.
|
|
7
9
|
- A new dependency needs a reason in the commit: what it does that the platform and existing
|
|
8
10
|
dependencies do not.
|
|
9
11
|
- Prefer a package that does one thing, receives maintenance, publishes types, and has no install scripts.
|
|
10
12
|
- Each project uses one package manager and commits its lockfile. CI and Docker builds install
|
|
11
|
-
from the lockfile without changing it such as `npm ci
|
|
13
|
+
from the lockfile without changing it, such as `npm ci` or `uv sync --frozen`.
|
|
12
14
|
|
|
13
15
|
## Versions
|
|
14
16
|
|
|
15
17
|
- Pin exact versions in an application. A published library keeps ranges for its dependencies and peers.
|
|
16
18
|
- Pin the runtime version once for Node, Python, Bun, or the Swift toolchain. Every file that
|
|
17
19
|
states it agrees.
|
|
18
|
-
- If the package manager
|
|
19
|
-
- Upgrade one dependency per commit with the reason. Never upgrade broadly to
|
|
20
|
+
- If the package manager rejects a release as too new, pick an older one or ask the user.
|
|
21
|
+
- Upgrade one dependency per commit with the reason. Never upgrade broadly to pass a scanner
|
|
20
22
|
without reading what changed.
|
|
23
|
+
- Write each tool version once. Other files read that pin, or a check compares them with it.
|
|
21
24
|
|
|
22
25
|
## Policy
|
|
23
26
|
|
|
27
|
+
- Delete an override when it matches no package in the lockfile, or when every caller already accepts the fixed
|
|
28
|
+
version.
|
|
29
|
+
- Keep third-party license notices in a tracked file, not in a string in code.
|
|
24
30
|
- Ask the user before you add a dependency whose license falls outside the allowed list.
|
|
25
|
-
-
|
|
26
|
-
and expiry. Never ignore advisories in bulk.
|
|
31
|
+
- For a known advisory that has no fix, follow the suppression rules: ask the user, then run
|
|
32
|
+
`gspot ignore` with the advisory ID, a reason, and an expiry date. Never ignore advisories in bulk.
|
|
27
33
|
- Declare vendored code and record its upstream version and license. Change it only by updating
|
|
28
34
|
it from upstream.
|
|
29
|
-
- Remove
|
|
35
|
+
- Remove a package when no runtime, build, tool, or public peer dependency needs it.
|
|
30
36
|
Before you remove a package that a check calls unused, search configuration and scripts for it.
|
|
@@ -1,79 +1,64 @@
|
|
|
1
1
|
[configuration]
|
|
2
|
-
title = "Docs"
|
|
3
2
|
always_selected = true
|
|
4
|
-
description = "
|
|
3
|
+
description = "Checks documentation for broken links and anchors, banned headings, stale paths, and a well-formed README in every scope."
|
|
4
|
+
title = "Docs"
|
|
5
5
|
|
|
6
6
|
[files]
|
|
7
7
|
extensions = [".md", ".mdx"]
|
|
8
8
|
filenames = ["CLAUDE.md", "AGENTS.md", "README.md"]
|
|
9
9
|
|
|
10
10
|
[[tool]]
|
|
11
|
-
name = "lychee"
|
|
12
|
-
version = "0.24.2"
|
|
13
|
-
mise = "lychee"
|
|
14
11
|
brew = "lychee"
|
|
15
12
|
cargo = "lychee"
|
|
16
13
|
github = { name = "lycheeverse/lychee", version = "lychee-v0.24.2" }
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
[[tool.replace]]
|
|
22
|
-
file = ".lycheeignore"
|
|
23
|
-
shared = false
|
|
14
|
+
mise = "lychee"
|
|
15
|
+
name = "lychee"
|
|
16
|
+
replace = ["lychee.toml", ".lycheeignore"]
|
|
17
|
+
version = "0.24.2"
|
|
24
18
|
|
|
25
19
|
[[tool_file]]
|
|
20
|
+
per_scope = true
|
|
26
21
|
target = ".gspot/config/lychee.toml"
|
|
27
22
|
tool = "lychee"
|
|
28
|
-
per_scope = true
|
|
29
23
|
|
|
30
24
|
[[check]]
|
|
31
|
-
name = "lychee"
|
|
32
|
-
example = "The Markdown link `[Setup](missing.md)` reports a missing local target when `missing.md` does not exist. Point it at the actual setup guide or add the intended document."
|
|
33
|
-
level = "recommended"
|
|
34
|
-
stage = "commit"
|
|
35
25
|
command = ["lychee", "--config", "{tool_file:lychee}", "--offline", "--include-fragments=full", "--format", "detailed", "--no-progress", "{files}"]
|
|
26
|
+
example = "The link `[Setup](missing.md)` reports a broken target when no `missing.md` exists. Point it at the setup guide, or add that file."
|
|
27
|
+
help = "Point the link at the file or heading that exists, or delete it."
|
|
28
|
+
level = "recommended"
|
|
29
|
+
name = "lychee"
|
|
36
30
|
output = { format = "grouped", file_pattern = "^Errors in (?<file>.+)$", pattern = "^\\[(?<rule>[A-Z0-9]+)\\] (?<message>\\S+(?: \\(at (?<line>\\d+):(?<column>\\d+)\\))? \\| .*)$" }
|
|
31
|
+
stage = "commit"
|
|
37
32
|
summary = "Checks that local documentation links reach existing files and valid anchor or text fragments."
|
|
38
|
-
why = "A dead link inside the repository
|
|
39
|
-
help = "Point the link at the file or heading that exists, or delete it."
|
|
33
|
+
why = "A dead link inside the repository breaks silently, and readers hit it first."
|
|
40
34
|
|
|
41
35
|
[[check]]
|
|
42
|
-
|
|
43
|
-
example = "A
|
|
36
|
+
command = ["lychee", "--config", "{tool_file:lychee}", "--root-dir", "{root}", "--scheme", "http", "--scheme", "https", "--include-fragments=full", "--format", "detailed", "--no-progress", "{files}"]
|
|
37
|
+
example = "A link that returns HTTP 404 reports a broken destination. Replace the URL with a current one, or remove the link."
|
|
38
|
+
help = "Update or remove the link, or exclude the URL pattern with a reason under docs.allowed_urls."
|
|
44
39
|
level = "recommended"
|
|
45
|
-
|
|
40
|
+
name = "lychee-external"
|
|
46
41
|
needs = ["network"]
|
|
47
|
-
command = ["lychee", "--config", "{tool_file:lychee}", "--root-dir", "{root}", "--scheme", "http", "--scheme", "https", "--include-fragments=full", "--format", "detailed", "--no-progress", "{files}"]
|
|
48
42
|
output = { format = "grouped", file_pattern = "^Errors in (?<file>.+)$", pattern = "^\\[(?<rule>[A-Z0-9]+)\\] (?<message>\\S+(?: \\(at (?<line>\\d+):(?<column>\\d+)\\))? \\| .*)$" }
|
|
43
|
+
stage = "manual"
|
|
49
44
|
summary = "Checks every external link over the network."
|
|
50
|
-
why = "
|
|
51
|
-
help = "Update or remove the link, or exclude the URL pattern with a reason under docs.allowed_urls."
|
|
45
|
+
why = "External links break over time; this check reports which ones did."
|
|
52
46
|
|
|
53
47
|
[[check]]
|
|
48
|
+
example = "A path in the docs that points to a deleted file reports a stale reference. Update the path and any command that uses it."
|
|
49
|
+
help = "Fix the path or the task name. Give an example code block a `title=` attribute."
|
|
50
|
+
level = "recommended"
|
|
54
51
|
name = "missing-paths"
|
|
55
|
-
example = "A documented repository path that no longer exists reports a stale reference. Update the path and any associated command to the current owner, then verify the procedure from its stated working directory."
|
|
56
52
|
runs = "once"
|
|
57
|
-
level = "recommended"
|
|
58
53
|
stage = "commit"
|
|
59
|
-
summary = "Checks that documented paths
|
|
60
|
-
why = "A path in the docs
|
|
61
|
-
help = "Fix the path or the task name. Give an example code block a title= attribute."
|
|
54
|
+
summary = "Checks that documented paths point to tracked files, and that mise, npm, pnpm, yarn, and bun run commands name a task or script of their project."
|
|
55
|
+
why = "A stale path in the docs sends the reader to a deleted file."
|
|
62
56
|
|
|
63
57
|
[[check]]
|
|
64
|
-
|
|
65
|
-
example = "A configured scope without `README.md` reports the missing README. Add one that explains its purpose and setup. The repository root also needs a license when license presence is required."
|
|
66
|
-
level = "all"
|
|
67
|
-
stage = "commit"
|
|
68
|
-
summary = "Checks that every scope has a README.md and the root has a LICENSE."
|
|
69
|
-
why = "A scope with no README is a door with no sign."
|
|
58
|
+
example = "A scope without `README.md` reports the missing file. Add one that explains what the scope does and how to start."
|
|
70
59
|
help = "Write the README; the docs rule files say what goes in it."
|
|
71
|
-
|
|
72
|
-
[[check]]
|
|
73
|
-
name = "readme-shape"
|
|
74
|
-
example = "A README with more H2 headings than limits.docs.headings_before_contents reports a missing Contents section. Add the section. A scope-root README also needs an opening paragraph and a section named install, setup, start, or requirements."
|
|
75
60
|
level = "all"
|
|
61
|
+
name = "required-files"
|
|
76
62
|
stage = "commit"
|
|
77
|
-
summary = "Checks
|
|
78
|
-
why = "A
|
|
79
|
-
help = "Add the missing section or paragraph. For an accepted exception, run gspot ignore docs/readme-shape --paths `<glob>` --reason \"`<why>`\"."
|
|
63
|
+
summary = "Checks that every scope has a README.md and the root has a LICENSE."
|
|
64
|
+
why = "A scope with no README leaves readers to guess what it does."
|