@nitra/cursor 12.6.1 → 12.8.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-template/settings.template.json +1 -1
- package/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
- package/CHANGELOG.md +25 -5
- package/bin/docs/n-cursor.md +4 -20
- package/bin/n-cursor.js +8 -54
- package/docs/index.md +3 -3
- package/docs/stryker.config.md +20 -28
- package/lib/docs/index.md +5 -5
- package/lib/docs/llm.md +4 -4
- package/package.json +2 -2
- package/rules/abie/docs/fix.md +8 -8
- package/rules/abie/docs/index.md +4 -3
- package/rules/abie/docs/main.md +29 -0
- package/rules/abie/js/docs/index.md +6 -6
- package/rules/abie/lib/docs/index.md +9 -9
- package/rules/abie/{fix.mjs → main.mjs} +5 -3
- package/rules/adr/docs/index.md +1 -0
- package/rules/adr/docs/main.md +29 -0
- package/rules/adr/{fix.mjs → main.mjs} +5 -3
- package/rules/bun/docs/fix.md +5 -5
- package/rules/bun/docs/index.md +4 -3
- package/rules/bun/docs/main.md +30 -0
- package/rules/bun/js/docs/index.md +2 -2
- package/rules/bun/js/docs/layout.md +11 -36
- package/rules/bun/{fix.mjs → main.mjs} +5 -3
- package/rules/capacitor/docs/fix.md +10 -10
- package/rules/capacitor/docs/index.md +4 -3
- package/rules/capacitor/docs/main.md +29 -0
- package/rules/capacitor/js/docs/index.md +2 -2
- package/rules/capacitor/{fix.mjs → main.mjs} +5 -3
- package/rules/changelog/docs/fix.md +11 -11
- package/rules/changelog/docs/index.md +4 -3
- package/rules/changelog/docs/main.md +27 -0
- package/rules/changelog/js/docs/consistency.md +12 -12
- package/rules/changelog/js/docs/index.md +2 -2
- package/rules/changelog/lib/docs/index.md +2 -2
- package/rules/changelog/main.mjs +20 -0
- package/rules/ci4/docs/fix.md +4 -4
- package/rules/ci4/docs/index.md +4 -3
- package/rules/ci4/docs/main.md +30 -0
- package/rules/ci4/js/docs/index.md +2 -2
- package/rules/ci4/main.mjs +20 -0
- package/rules/doc-files/docs/index.md +4 -3
- package/rules/doc-files/docs/main.md +31 -0
- package/rules/doc-files/js/docgen-crc.mjs +2 -8
- package/rules/doc-files/js/docgen-extract.mjs +5 -3
- package/rules/doc-files/js/docgen-files-batch.mjs +63 -4
- package/rules/doc-files/js/docgen-gen.mjs +11 -3
- package/rules/doc-files/js/docgen-judge-measure.mjs +67 -18
- package/rules/doc-files/js/docgen-judge.mjs +8 -1
- package/rules/doc-files/js/docgen-scan.mjs +99 -11
- package/rules/doc-files/js/docs/docgen-crc.md +25 -14
- package/rules/doc-files/js/docs/docgen-extract.md +15 -13
- package/rules/doc-files/js/docs/docgen-files-batch.md +15 -15
- package/rules/doc-files/js/docs/docgen-gen.md +15 -26
- package/rules/doc-files/js/docs/docgen-judge-measure.md +14 -12
- package/rules/doc-files/js/docs/docgen-scan.md +34 -34
- package/rules/doc-files/js/docs/index.md +16 -15
- package/rules/doc-files/js/docs/run-lint.md +27 -0
- package/rules/doc-files/{lint/lint.mjs → js/run-lint.mjs} +23 -9
- package/rules/doc-files/{js/lint.mjs → main.mjs} +60 -10
- package/rules/docker/docs/fix.md +6 -6
- package/rules/docker/docs/index.md +4 -3
- package/rules/docker/docs/main.md +28 -0
- package/rules/docker/js/docs/index.md +2 -2
- package/rules/docker/js/docs/lint.md +26 -54
- package/rules/docker/js/lint.mjs +11 -0
- package/rules/docker/lib/docker-hadolint.mjs +1 -1
- package/rules/docker/lib/docs/docker-hadolint.md +16 -173
- package/rules/docker/lib/docs/index.md +5 -5
- package/rules/docker/main.mjs +20 -0
- package/rules/efes/docs/fix.md +8 -8
- package/rules/efes/docs/index.md +4 -3
- package/rules/efes/docs/main.md +29 -0
- package/rules/efes/main.mjs +20 -0
- package/rules/feedback/docs/fix.md +5 -5
- package/rules/feedback/docs/index.md +4 -3
- package/rules/feedback/docs/main.md +30 -0
- package/rules/feedback/main.mjs +20 -0
- package/rules/ga/docs/fix.md +5 -5
- package/rules/ga/docs/index.md +4 -3
- package/rules/ga/docs/main.md +29 -0
- package/rules/ga/js/docs/index.md +3 -3
- package/rules/ga/{lint/lint.mjs → main.mjs} +36 -10
- package/rules/graphql/docs/fix.md +8 -8
- package/rules/graphql/docs/index.md +4 -3
- package/rules/graphql/docs/main.md +36 -0
- package/rules/graphql/js/docs/index.md +2 -2
- package/rules/graphql/lib/docs/index.md +2 -2
- package/rules/graphql/main.mjs +20 -0
- package/rules/hasura/docs/fix.md +11 -11
- package/rules/hasura/docs/index.md +4 -3
- package/rules/hasura/docs/main.md +30 -0
- package/rules/hasura/js/docs/index.md +2 -2
- package/rules/hasura/main.mjs +20 -0
- package/rules/image-avif/docs/fix.md +3 -3
- package/rules/image-avif/docs/index.md +4 -3
- package/rules/image-avif/docs/main.md +30 -0
- package/rules/image-avif/js/docs/avif_generation.md +20 -233
- package/rules/image-avif/js/docs/index.md +2 -2
- package/rules/image-avif/main.mjs +20 -0
- package/rules/image-compress/docs/fix.md +2 -2
- package/rules/image-compress/docs/index.md +4 -3
- package/rules/image-compress/docs/main.md +29 -0
- package/rules/image-compress/js/docs/index.md +3 -3
- package/rules/image-compress/js/docs/package_setup.md +12 -11
- package/rules/image-compress/{js/lint.mjs → main.mjs} +21 -5
- package/rules/js-bun-db/docs/fix.md +5 -5
- package/rules/js-bun-db/docs/index.md +4 -3
- package/rules/js-bun-db/docs/main.md +30 -0
- package/rules/js-bun-db/js/docs/index.md +2 -2
- package/rules/js-bun-db/lib/docs/index.md +2 -2
- package/rules/js-bun-db/main.mjs +20 -0
- package/rules/js-bun-redis/docs/fix.md +6 -6
- package/rules/js-bun-redis/docs/index.md +4 -3
- package/rules/js-bun-redis/docs/main.md +29 -0
- package/rules/js-bun-redis/js/docs/index.md +2 -2
- package/rules/js-bun-redis/lib/docs/index.md +2 -2
- package/rules/js-bun-redis/main.mjs +20 -0
- package/rules/js-lint/docs/fix.md +9 -9
- package/rules/js-lint/docs/index.md +4 -3
- package/rules/js-lint/docs/main.md +29 -0
- package/rules/js-lint/js/check.mjs +268 -0
- package/rules/js-lint/js/docs/check.md +39 -0
- package/rules/js-lint/js/docs/index.md +4 -4
- package/rules/js-lint/js/docs/tooling.md +12 -32
- package/rules/js-lint/js/tooling.mjs +1 -265
- package/rules/js-lint/{js/lint.mjs → main.mjs} +19 -2
- package/rules/js-lint-ci/docs/fix.md +3 -3
- package/rules/js-lint-ci/docs/index.md +4 -3
- package/rules/js-lint-ci/docs/main.md +27 -0
- package/rules/js-lint-ci/js/docs/index.md +2 -2
- package/rules/js-lint-ci/main.mjs +33 -0
- package/rules/js-mssql/docs/fix.md +5 -5
- package/rules/js-mssql/docs/index.md +4 -3
- package/rules/js-mssql/docs/main.md +30 -0
- package/rules/js-mssql/js/docs/index.md +2 -2
- package/rules/js-mssql/lib/docs/index.md +2 -2
- package/rules/js-mssql/main.mjs +20 -0
- package/rules/js-run/docs/fix.md +8 -8
- package/rules/js-run/docs/index.md +4 -3
- package/rules/js-run/docs/main.md +30 -0
- package/rules/js-run/js/docs/index.md +2 -2
- package/rules/js-run/lib/docs/index.md +7 -7
- package/rules/js-run/main.mjs +20 -0
- package/rules/k8s/docs/fix.md +4 -4
- package/rules/k8s/docs/index.md +4 -3
- package/rules/k8s/docs/main.md +40 -0
- package/rules/k8s/js/docs/index.md +12 -0
- package/rules/k8s/{lint/lint.mjs → main.mjs} +32 -10
- package/rules/nginx-default-tpl/docs/fix.md +7 -7
- package/rules/nginx-default-tpl/docs/index.md +4 -3
- package/rules/nginx-default-tpl/docs/main.md +30 -0
- package/rules/nginx-default-tpl/js/docs/index.md +2 -2
- package/rules/nginx-default-tpl/js/docs/template.md +2 -2
- package/rules/nginx-default-tpl/main.mjs +20 -0
- package/rules/npm-module/docs/fix.md +8 -8
- package/rules/npm-module/docs/index.md +4 -3
- package/rules/npm-module/docs/main.md +29 -0
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +17 -16
- package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
- package/rules/npm-module/js/rule_meta.mjs +13 -3
- package/rules/npm-module/main.mjs +20 -0
- package/rules/php/docs/fix.md +6 -6
- package/rules/php/docs/index.md +4 -3
- package/rules/php/docs/main.md +33 -0
- package/rules/php/js/docs/index.md +3 -3
- package/rules/php/js/docs/tooling.md +10 -10
- package/rules/php/{lint/lint.mjs → main.mjs} +32 -6
- package/rules/python/docs/fix.md +11 -11
- package/rules/python/docs/index.md +4 -3
- package/rules/python/docs/main.md +31 -0
- package/rules/python/js/docs/index.md +3 -3
- package/rules/python/js/docs/tooling.md +17 -17
- package/rules/python/{lint/lint.mjs → main.mjs} +31 -6
- package/rules/rego/docs/fix.md +5 -5
- package/rules/rego/docs/index.md +4 -3
- package/rules/rego/docs/main.md +37 -0
- package/rules/rego/js/docs/index.md +3 -3
- package/rules/rego/{lint/lint.mjs → main.mjs} +27 -5
- package/rules/release/docs/index.md +5 -4
- package/rules/release/docs/main.md +29 -0
- package/rules/release/docs/release.md +0 -3
- package/rules/release/lib/docs/index.md +4 -4
- package/rules/release/release.mdc +10 -0
- package/rules/rust/docs/fix.md +4 -4
- package/rules/rust/docs/index.md +4 -3
- package/rules/rust/docs/main.md +27 -0
- package/rules/rust/js/docs/index.md +3 -3
- package/rules/rust/lib/docs/index.md +2 -2
- package/rules/rust/{js/lint.mjs → main.mjs} +27 -4
- package/rules/security/docs/fix.md +6 -6
- package/rules/security/docs/index.md +4 -3
- package/rules/security/docs/main.md +28 -0
- package/rules/security/js/docs/index.md +4 -4
- package/rules/security/main.mjs +45 -0
- package/rules/style-lint/docs/fix.md +3 -3
- package/rules/style-lint/docs/index.md +4 -3
- package/rules/style-lint/docs/main.md +29 -0
- package/rules/style-lint/js/docs/index.md +3 -3
- package/rules/style-lint/{js/lint.mjs → main.mjs} +19 -1
- package/rules/tauri/docs/fix.md +11 -11
- package/rules/tauri/docs/index.md +4 -3
- package/rules/tauri/docs/main.md +29 -0
- package/rules/tauri/js/docs/index.md +3 -3
- package/rules/tauri/main.mjs +20 -0
- package/rules/test/docs/fix.md +5 -5
- package/rules/test/docs/index.md +4 -3
- package/rules/test/docs/main.md +30 -0
- package/rules/test/js/data/stryker_config/docs/index.md +4 -4
- package/rules/test/js/data/vitest_config/docs/index.md +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/test/main.mjs +20 -0
- package/rules/text/docs/fix.md +11 -11
- package/rules/text/docs/index.md +4 -3
- package/rules/text/docs/main.md +29 -0
- package/rules/text/{lint → js}/cspell-fix.mjs +7 -2
- package/rules/text/js/docs/cspell-fix.md +30 -0
- package/rules/text/js/docs/formatting.md +12 -45
- package/rules/text/js/docs/index.md +8 -4
- package/rules/text/js/docs/run-dotenv-linter.md +31 -0
- package/rules/text/js/docs/run-shellcheck.md +28 -0
- package/rules/text/js/docs/run-v8r.md +29 -0
- package/rules/text/{lint/lint.mjs → main.mjs} +41 -10
- package/rules/tool-surface/docs/index.md +4 -3
- package/rules/tool-surface/docs/main.md +29 -0
- package/rules/tool-surface/main.mjs +20 -0
- package/rules/tool-surface/meta.json +6 -1
- package/rules/vue/docs/fix.md +6 -6
- package/rules/vue/docs/index.md +4 -3
- package/rules/vue/docs/main.md +29 -0
- package/rules/vue/js/docs/index.md +2 -2
- package/rules/vue/lib/docs/index.md +2 -2
- package/rules/vue/main.mjs +20 -0
- package/rules/worktree/docs/fix.md +11 -11
- package/rules/worktree/docs/index.md +4 -3
- package/rules/worktree/docs/main.md +28 -0
- package/rules/worktree/main.mjs +20 -0
- package/scripts/coverage-classify/docs/index.md +6 -6
- package/scripts/dispatcher/docs/index.md +2 -2
- package/scripts/docs/index.md +16 -15
- package/scripts/docs/post-tool-use-check.md +29 -0
- package/scripts/docs/sync-claude-config.md +64 -92
- package/scripts/lib/adr/docs/normalize-cli.md +0 -3
- package/scripts/lib/adr/docs/normalize-pipeline.md +0 -3
- package/scripts/lib/docs/gha-workflow.md +25 -317
- package/scripts/lib/docs/index.md +36 -35
- package/scripts/lib/docs/list-project-rules-mdc.md +5 -4
- package/scripts/lib/docs/list-rule-ids.md +15 -148
- package/scripts/lib/docs/read-n-cursor-config-lite.md +12 -16
- package/scripts/lib/docs/run-lint-step.md +13 -13
- package/scripts/lib/docs/run-lint.md +30 -0
- package/scripts/lib/docs/run-rule-cli.md +14 -10
- package/scripts/lib/docs/run-standard-lint.md +29 -10
- package/scripts/lib/docs/run-standard-rule.md +12 -11
- package/scripts/lib/docs/timing-summary.md +11 -12
- package/scripts/lib/docs/worktree-notice.md +0 -3
- package/scripts/lib/fix/analyze-escalation.mjs +4 -1
- package/scripts/lib/fix/docs/index.md +11 -10
- package/scripts/lib/fix/docs/orchestrator.md +23 -18
- package/scripts/lib/fix/docs/run-conformance-check.md +33 -0
- package/scripts/lib/fix/docs/run-fix-check.md +3 -3
- package/scripts/lib/fix/docs/t0.md +10 -9
- package/scripts/lib/fix/orchestrator.mjs +31 -8
- package/scripts/lib/fix/{run-fix-check.mjs → run-conformance-check.mjs} +13 -13
- package/scripts/lib/fix/t0.mjs +6 -3
- package/scripts/lib/list-project-rules-mdc.mjs +1 -1
- package/scripts/lib/list-rule-ids.mjs +12 -3
- package/scripts/lib/read-n-cursor-config-lite.mjs +2 -2
- package/{rules/lint/js/orchestrate.mjs → scripts/lib/run-lint.mjs} +42 -22
- package/scripts/lib/run-rule-cli.mjs +4 -4
- package/scripts/lib/run-standard-lint.mjs +19 -6
- package/scripts/lib/run-standard-rule.mjs +4 -4
- package/scripts/lib/timing-summary.mjs +1 -1
- package/scripts/{post-tool-use-fix.mjs → post-tool-use-check.mjs} +9 -9
- package/scripts/sync-claude-config.mjs +2 -2
- package/scripts/utils/docs/index.md +14 -14
- package/skills/doc-aggregate/js/docs/index.md +3 -3
- package/skills/doc-files/.changes/260612-0002.md +1 -0
- package/skills/doc-files/.changes/260612-0006.md +1 -0
- package/skills/doc-files/.changes/260612-0008.md +1 -0
- package/skills/doc-files/.changes/260612-0012.md +1 -0
- package/skills/doc-files/.changes/260612-0031.md +1 -0
- package/skills/doc-files/.changes/260612-0036.md +1 -0
- package/skills/doc-files/.changes/260612-0114.md +1 -0
- package/skills/start-check/js/docs/index.md +2 -2
- package/skills/taze/js/docs/index.md +2 -2
- package/types/bin/n-cursor.d.ts +1 -1
- package/rules/changelog/fix.mjs +0 -18
- package/rules/ci4/fix.mjs +0 -18
- package/rules/doc-files/fix.mjs +0 -19
- package/rules/doc-files/js/docs/lint.md +0 -34
- package/rules/doc-files/lint/docs/index.md +0 -11
- package/rules/doc-files/lint/docs/lint.md +0 -35
- package/rules/docker/fix.mjs +0 -18
- package/rules/docker/lint/docs/index.md +0 -11
- package/rules/docker/lint/docs/lint.md +0 -200
- package/rules/docker/lint/lint.mjs +0 -95
- package/rules/efes/fix.mjs +0 -18
- package/rules/feedback/fix.mjs +0 -18
- package/rules/ga/fix.mjs +0 -18
- package/rules/ga/js/docs/lint.md +0 -20
- package/rules/ga/js/lint.mjs +0 -12
- package/rules/ga/lint/docs/index.md +0 -11
- package/rules/ga/lint/docs/lint.md +0 -31
- package/rules/graphql/fix.mjs +0 -18
- package/rules/hasura/fix.mjs +0 -18
- package/rules/image-avif/fix.mjs +0 -18
- package/rules/image-compress/fix.mjs +0 -18
- package/rules/image-compress/js/docs/lint.md +0 -24
- package/rules/js-bun-db/fix.mjs +0 -18
- package/rules/js-bun-redis/fix.mjs +0 -18
- package/rules/js-lint/fix.mjs +0 -18
- package/rules/js-lint/js/docs/lint.md +0 -32
- package/rules/js-lint-ci/fix.mjs +0 -18
- package/rules/js-lint-ci/js/docs/lint.md +0 -22
- package/rules/js-lint-ci/js/lint.mjs +0 -15
- package/rules/js-mssql/fix.mjs +0 -18
- package/rules/js-run/fix.mjs +0 -18
- package/rules/k8s/fix.mjs +0 -18
- package/rules/k8s/js/lint.mjs +0 -14
- package/rules/k8s/lint/docs/index.md +0 -11
- package/rules/k8s/lint/docs/lint.md +0 -413
- package/rules/lint/docs/fix.md +0 -25
- package/rules/lint/docs/index.md +0 -11
- package/rules/lint/fix.mjs +0 -18
- package/rules/lint/js/docs/index.md +0 -11
- package/rules/lint/js/docs/orchestrate.md +0 -31
- package/rules/lint/meta.json +0 -1
- package/rules/nginx-default-tpl/fix.mjs +0 -18
- package/rules/npm-module/fix.mjs +0 -18
- package/rules/php/fix.mjs +0 -18
- package/rules/php/js/docs/lint.md +0 -20
- package/rules/php/js/lint.mjs +0 -15
- package/rules/php/lint/docs/index.md +0 -11
- package/rules/php/lint/docs/lint.md +0 -219
- package/rules/python/fix.mjs +0 -18
- package/rules/python/js/docs/lint.md +0 -21
- package/rules/python/js/lint.mjs +0 -14
- package/rules/python/lint/docs/index.md +0 -11
- package/rules/python/lint/docs/lint.md +0 -29
- package/rules/rego/fix.mjs +0 -18
- package/rules/rego/js/docs/lint.md +0 -21
- package/rules/rego/js/lint.mjs +0 -12
- package/rules/rego/lint/docs/index.md +0 -11
- package/rules/rego/lint/docs/lint.md +0 -208
- package/rules/rust/fix.mjs +0 -18
- package/rules/rust/js/docs/lint.md +0 -21
- package/rules/security/fix.mjs +0 -18
- package/rules/security/js/docs/lint.md +0 -175
- package/rules/security/js/lint.mjs +0 -26
- package/rules/style-lint/fix.mjs +0 -18
- package/rules/style-lint/js/docs/lint.md +0 -31
- package/rules/tauri/fix.mjs +0 -18
- package/rules/test/fix.mjs +0 -18
- package/rules/text/fix.mjs +0 -18
- package/rules/text/js/docs/lint.md +0 -23
- package/rules/text/js/lint.mjs +0 -15
- package/rules/text/lint/docs/cspell-fix.md +0 -32
- package/rules/text/lint/docs/index.md +0 -15
- package/rules/text/lint/docs/lint.md +0 -36
- package/rules/text/lint/docs/run-dotenv-linter.md +0 -161
- package/rules/text/lint/docs/run-shellcheck.md +0 -216
- package/rules/text/lint/docs/run-v8r.md +0 -201
- package/rules/tool-surface/fix.mjs +0 -18
- package/rules/vue/fix.mjs +0 -18
- package/rules/worktree/fix.mjs +0 -18
- /package/rules/release/{fix.mjs → main.mjs} +0 -0
- /package/rules/text/{lint → js}/run-dotenv-linter.mjs +0 -0
- /package/rules/text/{lint → js}/run-shellcheck.mjs +0 -0
- /package/rules/text/{lint → js}/run-v8r.mjs +0 -0
|
@@ -3,42 +3,31 @@ type: JS Module
|
|
|
3
3
|
title: docgen-gen.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-gen.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 059d7d6e
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
Огляд
|
|
11
|
-
Публічні функції виконують операції з текстом та оцінками. Вони включають виділення коду, вставлення інформації та генерацію документів на основі визначених параметрів.
|
|
11
|
+
## Огляд
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
splitProtected
|
|
16
|
-
Вибирає та видаляє код-фенс-обгортку з секції
|
|
17
|
-
|
|
18
|
-
insertProtected
|
|
19
|
-
Вставляє захищений блок Призначення після заголовка Огляд
|
|
13
|
+
Модуль забезпечує повний цикл роботи з документами: відокремлює захищений блок за допомогою `splitProtected`, вставляє його у визначене місце за допомогою `insertProtected`, генерує повний Markdown-документ через `generateDoc` (з використанням `DEFAULT_LOCAL_MODEL`), а також оцінює якість документа за допомогою `scoreDoc`. Кешування застосовується протягом прогону. (abie.mdc)
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
Перевіряє вихід проти фактів і повертає оцінку та список проблем
|
|
23
|
-
|
|
24
|
-
DEFAULT_LOCAL_MODEL
|
|
25
|
-
Повертає дефолтну модель для роботи
|
|
15
|
+
## Поведінка
|
|
26
16
|
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
splitProtected відокремлює захищений блок Призначення від основного документа.
|
|
18
|
+
insertProtected вставляє захищений блок Призначення у фіксовану позицію після заголовка документа.
|
|
19
|
+
scoreDoc оцінює якість згенерованого документа за заданими критеріями.
|
|
20
|
+
DEFAULT_LOCAL_MODEL визначає модель, яка використовується для генерації документа.
|
|
21
|
+
generateDoc генерує повний Markdown-документ з опису файлу, застосовуючи оцінку та можливий ретрай.
|
|
29
22
|
|
|
30
23
|
## Публічний API
|
|
31
24
|
|
|
32
|
-
splitProtected —
|
|
33
|
-
insertProtected —
|
|
34
|
-
scoreDoc — Stage 2.5
|
|
35
|
-
DEFAULT_LOCAL_MODEL —
|
|
36
|
-
generateDoc —
|
|
25
|
+
splitProtected — Розділяє захищений розділ `## Призначення` (Варіант B), використовуючи наступний заголовок рівня H2 або H3 як межу.
|
|
26
|
+
insertProtected — Розміщує захищений блок `## Призначення` безпосередньо після основного заголовка (H1).
|
|
27
|
+
scoreDoc — Виконує детерміновану оцінку (Stage 2.5), порівнюючи вихідні дані з фактичною інформацією.
|
|
28
|
+
DEFAULT_LOCAL_MODEL — Визначає модель для генерації документа, використовуючи мінімальну локальну модель. Якщо модель не задана, процес зупиняється з помилкою.
|
|
29
|
+
generateDoc — Основна функція, яка перетворює вхідний файл у Markdown-документ з оцінкою достовірності.
|
|
37
30
|
|
|
38
31
|
## Гарантії поведінки
|
|
39
32
|
|
|
40
|
-
- Read-only: файл не виконує операцій запису у файлову систему.
|
|
41
|
-
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
42
|
-
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
43
33
|
- Кешує результати в межах одного прогону.
|
|
44
|
-
- Не звертається до мережі.
|
|
@@ -3,26 +3,28 @@ type: JS Module
|
|
|
3
3
|
title: docgen-judge-measure.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-judge-measure.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 86b3120f
|
|
7
7
|
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль обробляє файли, витягуючи їхній зміст для генерації документації. Він порівнює цю документацію з оцінками сильної модільної системи. Під час роботи відбувається кешування у межах прогону. Модуль збирає метрики якості згенерованої документації та зберігає фінальний звіт у `report.json`, який спирається на конфігурації, визначені в `report.json`.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
|
-
1. Зчитує список файлів для аналізу з командного рядка.
|
|
17
|
+
1. Зчитує список файлів для аналізу з аргументів командного рядка.
|
|
16
18
|
2. Для кожного файлу зчитує його вміст.
|
|
17
|
-
3. Генерує документацію для файлу, використовуючи
|
|
18
|
-
4. Якщо
|
|
19
|
-
5. Якщо
|
|
20
|
-
6.
|
|
21
|
-
7.
|
|
22
|
-
8.
|
|
23
|
-
9.
|
|
24
|
-
10. Зберігає
|
|
25
|
-
11. Виводить консольний звіт
|
|
19
|
+
3. Генерує документацію для файлу, використовуючи кеш за вмістом джерела.
|
|
20
|
+
4. Якщо документація згенерована, перевіряє її якість за встановленим порогом.
|
|
21
|
+
5. Якщо якість документації відповідає порогу, передає вміст джерела та згенеровану документацію для оцінки сильною моделлю.
|
|
22
|
+
6. Оцінювач повертає вердикт (точний, загальний, неточний) з обґрунтуванням.
|
|
23
|
+
7. Зберігає результати для кожного файлу.
|
|
24
|
+
8. Агрегує результати: підраховує загальну кількість файлів, успішно згенерованих, пройшли перевірку, а також розподіл вердиктів серед тих, що пройшли перевірку.
|
|
25
|
+
9. Формує звіт, який включає конфігурацію, підрахунки та відсотки помилкових спрацьовувань.
|
|
26
|
+
10. Зберігає фінальний звіт у файл `report.json` у каталозі кешу.
|
|
27
|
+
11. Виводить консольний звіт про результати вимірювання.
|
|
26
28
|
|
|
27
29
|
## Гарантії поведінки
|
|
28
30
|
|
|
@@ -3,50 +3,50 @@ type: JS Module
|
|
|
3
3
|
title: docgen-scan.mjs
|
|
4
4
|
resource: npm/rules/doc-files/js/docgen-scan.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: f01465d8
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
describeFile описує кодовий файл, включаючи шлях доки та стан застарілості.
|
|
14
|
-
scanForDocFiles рекурсивно обходить дерево, повертаючи кандидати з інформацією про старілість.
|
|
15
|
-
resolveRoot парсить аргументи, щоб визначити абсолютний корінь.
|
|
16
|
-
runDocFilesScanCli сканує дерево і друкує JSON-масив усіх кодових файлів зі станом застарілості.
|
|
17
|
-
runDocFilesCheckCli детектує застарілість для хук'ів, гейтів або інших режимів, повертаючи код виходу.
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль аналізує кодову базу та пов'язану з нею документацію. Він визначає, які файли є джерелами за допомогою `isSourceFile` та знаходить відповідні шляхи документації за допомогою `docPathForSource`. Модуль перевіряє, чи не залишилися без зв'язку (сиротами) документи, використовуючи `scanOrphanedDocs`, та сканує файли документації за допомогою `scanForDocFiles`. Для роботи з кореневими каталогами використовується `resolveRoot`. Усі операції виконуються з механізмом перехоплення помилок (fail-safe), при цьому при певних збоях повертається `null` замість викидання винятків.
|
|
18
14
|
|
|
19
15
|
## Поведінка
|
|
20
16
|
|
|
21
|
-
isSourceFile
|
|
22
|
-
docPathForSource
|
|
23
|
-
isDocCandidate
|
|
24
|
-
describeFile
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
isSourceFile визначає, чи є ім'я файлу кодовим джерелом для документування.
|
|
18
|
+
docPathForSource обчислює шлях до відповідного MD-документа для заданого кодового файлу.
|
|
19
|
+
isDocCandidate визначає, чи підлягає певний файл документуванню, враховуючи розширення, статус тесту та ігнорування.
|
|
20
|
+
describeFile описує кодовий файл, надаючи його шлях, шлях до документації та стан застарілості.
|
|
21
|
+
scanOrphanedDocs знаходить MD-документи, які посилаються на кодові файли, що більше не існують.
|
|
22
|
+
scanForDocFiles рекурсивно обходить дерево і повертає список кодових файлів із їхнім станом застарілості, відфільтрований за ігноруванням Git.
|
|
23
|
+
resolveRoot парсить аргументи для визначення абсолютного кореня обходу, використовуючи поточну робочу директорію за замовчуванням.
|
|
24
|
+
runDocFilesScanCli сканує дерево і друкує JSON-масив усіх кодових файлів зі станом застарілості.
|
|
25
|
+
runDocFilesCheckCli виконує перевірку застарілості, підтримуючи режими для перевірки одного файлу, Git-гейту або звітів про знижену якість.
|
|
29
26
|
|
|
30
27
|
## Публічний API
|
|
31
28
|
|
|
32
|
-
isSourceFile —
|
|
33
|
-
docPathForSource —
|
|
34
|
-
isDocCandidate —
|
|
35
|
-
describeFile — надає опис кодового
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
--
|
|
44
|
-
|
|
45
|
-
|
|
29
|
+
isSourceFile — визначає, чи є файл кодовим джерелом для створення документації.
|
|
30
|
+
docPathForSource — визначає шлях до відповідного MD-документа, розміщений у теці `docs/` відносно коду.
|
|
31
|
+
isDocCandidate — вирішує, чи повинен кодовий файл бути документований: має правильне розширення, не є тестом, не ігнорується та не є системним документом.
|
|
32
|
+
describeFile — надає опис кодового файлу, включаючи його шлях, шлях до документації та статус застарілості.
|
|
33
|
+
scanOrphanedDocs — шукає документи, які посилаються на кодові файли, що більше не існують, перевіряючи лише згенеровані файли.
|
|
34
|
+
scanForDocFiles — рекурсивно збирає всі кодові файли з дерева, визначаючи їхній статус застарілості, і відсіюючи ті, що ігноруються через `.gitignore`.
|
|
35
|
+
resolveRoot — встановлює кореневу директорію для сканування, використовуючи аргумент командного рядка або поточну робочу директорію.
|
|
36
|
+
runDocFilesScanCli — сканує дерево та виводить JSON-масив усіх кодових файлів зі статусом застарілості, дозволяючи фільтрувати лише застарілі або всі файли.
|
|
37
|
+
runDocFilesCheckCli — виконує перевірку застарілості для використання у хуках та командному інтерфейсі.
|
|
38
|
+
|
|
39
|
+
Режими:
|
|
40
|
+
--hook — перевіряє один файл, отриманий з JSON через стандартний ввід.
|
|
41
|
+
--git — порівнює файли у `git diff` та блокує процес, якщо знайдено більше за встановлений поріг застарілих файлів.
|
|
42
|
+
--degraded — виводить звіт про документи з низьким показником якості.
|
|
43
|
+
<paths…> — обробляє лише вказані шляхи-джерела.
|
|
44
|
+
|
|
45
|
+
Вихідний код 2 — вказує на знаходження застарілих файлів (для блокування хука).
|
|
46
|
+
Вихідний код 0 — вказує на відсутність застарілих файлів або проходження перевірки згідно з порогом.
|
|
46
47
|
|
|
47
48
|
## Гарантії поведінки
|
|
48
49
|
|
|
49
|
-
- Read-only:
|
|
50
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
50
51
|
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
51
|
-
- За
|
|
52
|
-
- Не звертається до мережі.
|
|
52
|
+
- За певних помилок повертає порожнє значення (напр. `null`) замість винятку.
|
|
@@ -6,19 +6,20 @@ resource: npm/rules/doc-files/js/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/doc-files/js
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [docgen-crc.mjs](docgen-crc.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
| ------------------------------------------------------- | --------- |
|
|
11
|
+
| [docgen-crc.mjs](docgen-crc.md) | JS Module |
|
|
12
12
|
| [docgen-extract-anchors.mjs](docgen-extract-anchors.md) | JS Module |
|
|
13
|
-
| [docgen-extract.mjs](docgen-extract.md)
|
|
14
|
-
| [docgen-files-batch.mjs](docgen-files-batch.md)
|
|
15
|
-
| [docgen-gen.mjs](docgen-gen.md)
|
|
16
|
-
| [docgen-ignore.mjs](docgen-ignore.md)
|
|
17
|
-
| [docgen-judge-measure.mjs](docgen-judge-measure.md)
|
|
18
|
-
| [docgen-judge.mjs](docgen-judge.md)
|
|
19
|
-
| [docgen-prompts.mjs](docgen-prompts.md)
|
|
20
|
-
| [docgen-scan.mjs](docgen-scan.md)
|
|
21
|
-
| [lint.mjs](lint.md)
|
|
22
|
-
| [
|
|
23
|
-
| [units-
|
|
24
|
-
| [units.mjs](units.md)
|
|
13
|
+
| [docgen-extract.mjs](docgen-extract.md) | JS Module |
|
|
14
|
+
| [docgen-files-batch.mjs](docgen-files-batch.md) | JS Module |
|
|
15
|
+
| [docgen-gen.mjs](docgen-gen.md) | JS Module |
|
|
16
|
+
| [docgen-ignore.mjs](docgen-ignore.md) | JS Module |
|
|
17
|
+
| [docgen-judge-measure.mjs](docgen-judge-measure.md) | JS Module |
|
|
18
|
+
| [docgen-judge.mjs](docgen-judge.md) | JS Module |
|
|
19
|
+
| [docgen-prompts.mjs](docgen-prompts.md) | JS Module |
|
|
20
|
+
| [docgen-scan.mjs](docgen-scan.md) | JS Module |
|
|
21
|
+
| [lint.mjs](lint.md) | JS Module |
|
|
22
|
+
| [run-lint.mjs](run-lint.md) | JS Module |
|
|
23
|
+
| [units-js.mjs](units-js.md) | JS Module |
|
|
24
|
+
| [units-rs.mjs](units-rs.md) | JS Module |
|
|
25
|
+
| [units.mjs](units.md) | JS Module |
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: run-lint.mjs
|
|
4
|
+
resource: npm/rules/doc-files/js/run-lint.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: ba329b37
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 80
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Цей модуль надає CLI-обгортку для канонічного `lint-doc-files` (doc-files.mdc): детермінованого детектора застарілості файлових док (`<dir>/docs/<stem>.md`). При відсутності прапорців або при вказанні шляхів (`[paths…]`) виконується повний або точковий детекст застарілості. Якщо знайдено застарілі файли, повертається код виходу 1. Можливі режими: `--missing-only` звужує перевірку до відсутніх файлів. Прапорець `--json` виводить JSON-лістинг усіх кандидатів. Режими `--hook`, `--git` та `--degraded` делегують перевірку через `runDocFilesCheckCli` (hook-протокол: exit 2/0). Повний прогін здійснюється через `runStandardLint` (ключ `lint-doc-files`), тоді як хук/git/degraded форми використовують канон scripts.mdc, не генеруючи логів. Поведінка описується у (doc-files.mdc).
|
|
14
|
+
|
|
15
|
+
## Поведінка
|
|
16
|
+
|
|
17
|
+
runLintDocFilesSteps виконує повний або точковий детект застарілості файлової документації (doc-files.mdc), повертаючи код виходу 1, якщо знайдено застарілі файли, або 0, якщо всі актуальні.
|
|
18
|
+
runLintDocFilesCli керує викликом лінтера doc-files.mdc: виконує повний/точковий детект, якщо не вказано `--json`, або повертає JSON-лістинг кандидатів, якщо вказано `--json`, або делегує перевірку через протоколи `--hook`, `--git`, `--degraded`.
|
|
19
|
+
|
|
20
|
+
## Публічний API
|
|
21
|
+
|
|
22
|
+
runLintDocFilesSteps — Виконує повний або точковий пошук неактуальних (stale) файлів документації. Повертає код виходу 1, якщо знайдено неактуальні файли, і 0, якщо всі файли актуальні.
|
|
23
|
+
runLintDocFilesCli — Виконує перевірку файлів документації через інтерфейс командного рядка. У режимах hook/git/degraded виконує делегацію без логування. З опцією `--json` виконує сканування. В інших режимах виконує повний або точковий пошук, використовуючи логіку `runStandardLint` для ключа `lint-doc-files`.
|
|
24
|
+
|
|
25
|
+
## Гарантії поведінки
|
|
26
|
+
|
|
27
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -23,8 +23,9 @@ import {
|
|
|
23
23
|
resolveRoot,
|
|
24
24
|
runDocFilesCheckCli,
|
|
25
25
|
runDocFilesScanCli,
|
|
26
|
-
scanForDocFiles
|
|
27
|
-
|
|
26
|
+
scanForDocFiles,
|
|
27
|
+
scanOrphanedDocs
|
|
28
|
+
} from './docgen-scan.mjs'
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
31
|
* Нормалізує шлях-кандидат до posix-шляху від кореня (null поза деревом).
|
|
@@ -73,15 +74,28 @@ export function runLintDocFilesSteps(argv) {
|
|
|
73
74
|
let stale = described.filter(f => f.stale)
|
|
74
75
|
if (missingOnly) stale = stale.filter(f => f.reason === 'missing')
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
// Orphan-детект лише при повному скані (без явних шляхів); точковий — не релевантно
|
|
78
|
+
const orphans = paths.length === 0 ? scanOrphanedDocs(root) : []
|
|
79
|
+
|
|
80
|
+
let exitCode = 0
|
|
81
|
+
if (stale.length > 0) {
|
|
82
|
+
const list = stale.map(f => ` - ${f.sourcePath} (${f.reason})`).join('\n')
|
|
83
|
+
console.error(
|
|
84
|
+
`✗ doc-files: документація застаріла/відсутня для ${stale.length} файл(ів):\n${list}\n→ перегенеруй: npx @nitra/cursor fix-doc-files`
|
|
85
|
+
)
|
|
86
|
+
exitCode = 1
|
|
87
|
+
}
|
|
88
|
+
if (orphans.length > 0) {
|
|
89
|
+
const list = orphans.map(f => ` - ${f}`).join('\n')
|
|
90
|
+
console.error(
|
|
91
|
+
`✗ doc-files: сирітських доків (source видалено) ${orphans.length}:\n${list}\n→ очисти: npx @nitra/cursor fix-doc-files`
|
|
92
|
+
)
|
|
93
|
+
exitCode = 1
|
|
94
|
+
}
|
|
95
|
+
if (exitCode === 0) {
|
|
77
96
|
console.log('✓ doc-files: усі файлові доки актуальні.')
|
|
78
|
-
return 0
|
|
79
97
|
}
|
|
80
|
-
|
|
81
|
-
console.error(
|
|
82
|
-
`✗ doc-files: документація застаріла/відсутня для ${stale.length} файл(ів):\n${list}\n→ перегенеруй: npx @nitra/cursor fix-doc-files`
|
|
83
|
-
)
|
|
84
|
-
return 1
|
|
98
|
+
return exitCode
|
|
85
99
|
}
|
|
86
100
|
|
|
87
101
|
/**
|
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
import { join, dirname, basename, extname } from 'node:path'
|
|
3
3
|
import { existsSync, readdirSync } from 'node:fs'
|
|
4
4
|
|
|
5
|
-
import { describeFile, isDocCandidate, isSourceFile, scanForDocFiles } from './docgen-scan.mjs'
|
|
5
|
+
import { describeFile, isDocCandidate, isSourceFile, scanForDocFiles, scanOrphanedDocs } from './js/docgen-scan.mjs'
|
|
6
|
+
import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
|
|
7
|
+
import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня (applies → JS-concerns
|
|
11
|
+
* → policy → mdc-refs); `lint()` нижче — lint-поверхня (детект застарілих файлових док), імпл інлайн тут.
|
|
12
|
+
* @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону
|
|
13
|
+
* @returns {Promise<number>} 0 — OK, 1 — порушення
|
|
14
|
+
*/
|
|
15
|
+
export function run(ctx) {
|
|
16
|
+
return runStandardRule(import.meta.dirname, ctx)
|
|
17
|
+
}
|
|
6
18
|
|
|
7
19
|
/** Дока живе у `<dir>/docs/<stem>.md`; повертає `<dir>/<stem>` для реверс-мапінгу. */
|
|
8
20
|
const DOC_MD_RE = /(?:^|\/)docs\/[^/]+\.md$/u
|
|
@@ -89,14 +101,52 @@ function collectStale(files, cwd) {
|
|
|
89
101
|
*/
|
|
90
102
|
export async function lint(files, cwd = process.cwd(), { readOnly = false, llmFix = false } = {}) {
|
|
91
103
|
const stale = collectStale(files, cwd)
|
|
92
|
-
|
|
93
|
-
|
|
104
|
+
// Orphan-детект тільки при повному скані; при точковому (files визначено) — не релевантно
|
|
105
|
+
const orphans = files === undefined ? scanOrphanedDocs(cwd) : []
|
|
106
|
+
|
|
107
|
+
if (stale.length === 0 && orphans.length === 0) return 0
|
|
108
|
+
if (readOnly || !llmFix) {
|
|
109
|
+
if (stale.length > 0) reportStale(stale)
|
|
110
|
+
if (orphans.length > 0) {
|
|
111
|
+
const list = orphans.map(f => ` - ${f}`).join('\n')
|
|
112
|
+
process.stderr.write(
|
|
113
|
+
`✗ doc-files: сирітських доків (source видалено) ${orphans.length}:\n${list}\n→ очисти: npx @nitra/cursor fix-doc-files\n`
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
return 1
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// fix-by-default: opportunistic-генерація stale + purge orphans.
|
|
120
|
+
// omlx недоступний → runGenerationBatch друкує причину й повертає !=0;
|
|
121
|
+
// purgeOrphanedDocs не залежить від LLM і виконується завжди.
|
|
122
|
+
if (stale.length > 0) {
|
|
123
|
+
process.stdout.write(`ℹ️ doc-files: ${stale.length} застарілих — пробую авто-фікс (omlx)…\n`)
|
|
124
|
+
}
|
|
125
|
+
const { runGenerationBatch, purgeOrphanedDocs } = await import('./js/docgen-files-batch.mjs')
|
|
126
|
+
if (stale.length > 0) {
|
|
127
|
+
await runGenerationBatch(stale, cwd, { headline: `📋 doc-files: генерація ${stale.length} файл(ів)` })
|
|
128
|
+
}
|
|
129
|
+
if (orphans.length > 0) {
|
|
130
|
+
const deleted = purgeOrphanedDocs(cwd)
|
|
131
|
+
if (deleted > 0) process.stdout.write(`🗑 doc-files: видалено ${deleted} сирітських доки(ів)\n`)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const stillStale = collectStale(files, cwd)
|
|
135
|
+
const stillOrphans = files === undefined ? scanOrphanedDocs(cwd) : []
|
|
136
|
+
if (stillStale.length === 0 && stillOrphans.length === 0) return 0
|
|
137
|
+
if (stillStale.length > 0) reportStale(stillStale)
|
|
138
|
+
if (stillOrphans.length > 0) {
|
|
139
|
+
const list = stillOrphans.map(f => ` - ${f}`).join('\n')
|
|
140
|
+
process.stderr.write(
|
|
141
|
+
`✗ doc-files: сирітських доків (source видалено) ${stillOrphans.length}:\n${list}\n→ очисти: npx @nitra/cursor fix-doc-files\n`
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
return 1
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export { runLintDocFilesCli } from './js/run-lint.mjs'
|
|
94
148
|
|
|
95
|
-
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
process.stdout.write(`ℹ️ doc-files: ${stale.length} застарілих — пробую авто-фікс (omlx)…\n`)
|
|
99
|
-
const { runGenerationBatch } = await import('./docgen-files-batch.mjs')
|
|
100
|
-
await runGenerationBatch(stale, cwd, { headline: `📋 doc-files: генерація ${stale.length} файл(ів)` })
|
|
101
|
-
return reportStale(collectStale(files, cwd))
|
|
149
|
+
if (isRunAsCli(import.meta.url)) {
|
|
150
|
+
// Standalone: bun rules/doc-files/main.mjs — повний еквівалент `npx @nitra/cursor check doc-files`.
|
|
151
|
+
process.exitCode = await runRuleCli(import.meta.dirname)
|
|
102
152
|
}
|
package/rules/docker/docs/fix.md
CHANGED
|
@@ -14,14 +14,14 @@ docgen:
|
|
|
14
14
|
## Поведінка
|
|
15
15
|
|
|
16
16
|
1. Запуск правила.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
- Приймає контекст прогону.
|
|
18
|
+
- Виконує застосування JS-занепокоєних до політики до mdc-refs.
|
|
19
|
+
- Повертає результат.
|
|
20
20
|
|
|
21
21
|
2. Виконання у режимі CLI.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
- Викликається через оркестрацію CLI.
|
|
23
|
+
- Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
|
|
24
|
+
- Виконує завантаження конфігурації, перевірку дозволених елементів та підбиття підсумку.
|
|
25
25
|
|
|
26
26
|
## Публічний API
|
|
27
27
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: main.mjs
|
|
4
|
+
resource: npm/rules/docker/main.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 10e84989
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль виконує перевірку на відповідність логіці JS-зацікавленостей, політикам та посиланням MDC. Запуск правила ініціюється через публічну функцію `run`.
|
|
14
|
+
|
|
15
|
+
## Поведінка
|
|
16
|
+
|
|
17
|
+
1. Викликається функція `run` для виконання перевірки.
|
|
18
|
+
2. Виконання перевірки застосовує логіку, пов'язану з JS-зацікавленостями, політиками та посиланнями MDC.
|
|
19
|
+
3. Якщо скрипт виконується як окрема утиліта, ініціюється повний запуск правила.
|
|
20
|
+
|
|
21
|
+
## Публічний API
|
|
22
|
+
|
|
23
|
+
run — виконує послідовність перевірок: застосовує логіку, перевіряє аспекти JavaScript, застосовує політику та посилання MDC.
|
|
24
|
+
lint — виконує перевірку синтаксису та стилю коду, делегуючи складну логіку зовнішньому модулю.
|
|
25
|
+
|
|
26
|
+
## Гарантії поведінки
|
|
27
|
+
|
|
28
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -3,70 +3,42 @@ type: JS Module
|
|
|
3
3
|
title: lint.mjs
|
|
4
4
|
resource: npm/rules/docker/js/lint.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: bf935f19
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Огляд
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
isDockerfileName
|
|
15
|
-
Перевіряє, чи є вхідний рядок назвою Dockerfile або Containerfile.
|
|
16
|
-
|
|
17
|
-
findDockerfilePaths
|
|
18
|
-
Збирає абсолютні шляхи до Dockerfile або Containerfile від заданого кореня репозиторію, враховуючи виключені шляхи.
|
|
19
|
-
|
|
20
|
-
parseFromStages
|
|
21
|
-
Витягує інструкції FROM з вмісту файлу.
|
|
22
|
-
|
|
23
|
-
splitDockerfileStages
|
|
24
|
-
Розбиває вміст Dockerfile на окремі стадії на основі інструкцій FROM.
|
|
25
|
-
|
|
26
|
-
getMultistageAndRuntimeHint
|
|
27
|
-
Перевіряє, чи має Dockerfile мінімум дві інструкції FROM і чи є фінальний образ дозволеним runtime-образом (docker.mdc).
|
|
13
|
+
Модуль аналізує файли `Dockerfile` та `Containerfile` у репозиторії, використовуючи `isDockerfileName` та `findDockerfilePaths` для ідентифікації конфігурацій. Він розбиває знайдені файли на етапи за допомогою `parseFromStages` та `splitDockerfileStages`. Модуль перевіряє конфігурацію, використовуючи `check` та `lint`, щоб оцінити відповідність стандартам, враховуючи дані з `package.json`. Він визначає інформацію про багатоетапну збірку, теги образів та права користувача, відповідно до вимог (docker.mdc).
|
|
28
14
|
|
|
29
|
-
|
|
30
|
-
Перевіряє наявність інструкцій `bun install` та відсутності `bun build --compile` для виявлення необхідності компіляції бінарника (docker.mdc).
|
|
31
|
-
|
|
32
|
-
getNginxAlpineSlimTagHint
|
|
33
|
-
Перевіряє, чи містить інструкція FROM для образу nginx потрібний тег `alpine-slim` (docker.mdc).
|
|
34
|
-
|
|
35
|
-
getNonRootRuntimeHint
|
|
36
|
-
Перевіряє, чи присутня інструкція USER у фінальній стадії і чи не використовується `root` або `0` для запуску (docker.mdc).
|
|
37
|
-
|
|
38
|
-
check
|
|
39
|
-
Запускає перевірки Dockerfile через hadolint, включаючи перевірки multistage, компіляції, non-root, тегів nginx та загальну валідацію.
|
|
40
|
-
|
|
41
|
-
readNearestDependencies
|
|
42
|
-
Читає залежності з найближчого package.json, розташованого у каталогах Dockerfile або вище.
|
|
15
|
+
## Поведінка
|
|
43
16
|
|
|
44
|
-
|
|
45
|
-
|
|
17
|
+
isDockerfileName визначає, чи є наданий шлях назвою Dockerfile або Containerfile.
|
|
18
|
+
findDockerfilePaths збирає відсортований список абсолютних шляхів до всіх Dockerfile/Containerfile, ігноруючи вказані шляхи каталогів.
|
|
19
|
+
parseFromStages витягує список усіх інструкцій `FROM <image>` з вмісту Dockerfile/Containerfile.
|
|
20
|
+
splitDockerfileStages розбиває вміст Dockerfile/Containerfile на окремі етапи (stages) на основі інструкцій `FROM`.
|
|
21
|
+
getMultistageAndRuntimeHint перевіряє, чи відповідає структура Dockerfile вимогам multistage build та дозволеним образам для фінального runtime (docker.mdc).
|
|
22
|
+
getBunCompileHint перевіряє, чи виконано необхідну компіляцію застосунку у бінарник для bun-проєктів, якщо фінальний образ — alpine (docker.mdc).
|
|
23
|
+
getNginxAlpineSlimTagHint перевіряє, чи використовується тег `alpine-slim` для nginx-образів (docker.mdc).
|
|
24
|
+
getNonRootRuntimeHint перевіряє, чи має фінальний stage інструкцію `USER <non-root>` для забезпечення не превілейованого образу (docker.mdc).
|
|
25
|
+
check перевіряє всі знайдені Dockerfile/Containerfile, виконуючи перевірки на відповідність стандартам, включаючи hadolint (docker.mdc).
|
|
26
|
+
lint оркеструє обхід репозиторію та викликає `check` для всіх знайдених Dockerfile/Containerfile.
|
|
46
27
|
|
|
47
28
|
## Публічний API
|
|
48
29
|
|
|
49
|
-
isDockerfileName —
|
|
50
|
-
findDockerfilePaths — збирає повні шляхи до файлів `Dockerfile` або `Containerfile` від
|
|
51
|
-
parseFromStages — витягує всі
|
|
52
|
-
splitDockerfileStages — розділяє
|
|
53
|
-
getMultistageAndRuntimeHint —
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
getNginxAlpineSlimTagHint — перевіряє, чи містить `FROM` для nginx-образу (`mirror.gcr.io/nginxinc/nginx-unprivileged`) тег `alpine-slim` (`docker.mdc`).
|
|
60
|
-
getNonRootRuntimeHint — перевіряє вимогу "non-root" у фінальному runtime-етапі (`docker.mdc`).
|
|
61
|
-
Очікування — перевіряє, чи містить build stage інструкцію `bun build --compile`.
|
|
62
|
-
Очікування — перевіряє, чи відсутні виклики `bun` у фінальному етапі (залишкові інструменти збірки).
|
|
63
|
-
Очікування — перевіряє, чи містить фінальний етап інструкцію `USER <name|uid>`.
|
|
64
|
-
Очікування — перевіряє, чи користувач у фінальному етапі не є `root` і не дорівнює `0`.
|
|
65
|
-
check — виконує перевірку через hadolint (`docker.mdc`).
|
|
30
|
+
isDockerfileName — визначає, чи є файл `Dockerfile` або `Containerfile` у поточному каталозі.
|
|
31
|
+
findDockerfilePaths — збирає повні шляхи до файлів `Dockerfile` або `Containerfile` від кореня робочого каталогу.
|
|
32
|
+
parseFromStages — витягує всі образи, зазначені в інструкціях `FROM` у файлі.
|
|
33
|
+
splitDockerfileStages — розділяє вміст файлу на окремі етапи згідно з інструкціями `FROM`.
|
|
34
|
+
getMultistageAndRuntimeHint — оцінює відповідність структури файлу: мінімум два етапи `FROM` та відповідність базових образів списку дозволених у `docker.mdc` (з додатковим дозволом для `bun` у випадку нативного `.node-аддону`).
|
|
35
|
+
getBunCompileHint — перевіряє, чи вимагає проєкт на базі Bun компіляції в бінарний файл для бекенд-рантайму.
|
|
36
|
+
getNginxAlpineSlimTagHint — перевіряє, чи використовується тег `alpine-slim` для образів Nginx, як зазначено в `docker.mdc`.
|
|
37
|
+
getNonRootRuntimeHint — перевіряє, чи встановлено користувача, відмінного від `root` (не `0`), у фінальному етапі виконання, згідно з `docker.mdc`.
|
|
38
|
+
check — виконує статичний аналіз файлу `Dockerfile`/`Containerfile` за допомогою hadolint (`docker.mdc`).
|
|
39
|
+
lint — запускає стандартний лінтер для Docker-файлів через адаптер `n-cursor lint docker`.
|
|
66
40
|
|
|
67
41
|
## Гарантії поведінки
|
|
68
42
|
|
|
69
|
-
- Read-only:
|
|
43
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
70
44
|
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
71
|
-
- За невдалої перевірки повертає `false`/`null` замість винятку.
|
|
72
|
-
- Не звертається до мережі.
|
package/rules/docker/js/lint.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** @see ./docs/lint.md */
|
|
2
2
|
import { readFile } from 'node:fs/promises'
|
|
3
3
|
import { basename, dirname, join } from 'node:path'
|
|
4
|
+
import { runStandardLint } from '../../../scripts/lib/run-standard-lint.mjs'
|
|
4
5
|
|
|
5
6
|
import { getMirrorGcrHint, getFromImageToken } from '../lib/docker-mirror.mjs'
|
|
6
7
|
import { getNativeAddonDeps, getNativeAddonNoCompileHint } from '../lib/docker-native-addon.mjs'
|
|
@@ -369,3 +370,13 @@ async function checkDockerfile(reporter, root, abs) {
|
|
|
369
370
|
fail(`${rel} (${via})${detail}`)
|
|
370
371
|
}
|
|
371
372
|
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Оркестраторний адаптер `n-cursor lint docker`: обгортає `check()` у `runStandardLint` (лок).
|
|
376
|
+
* @param {string[] | undefined} _files ігнорується (whole-repo обхід)
|
|
377
|
+
* @param {string} [cwd] корінь
|
|
378
|
+
* @returns {Promise<number>} exit code
|
|
379
|
+
*/
|
|
380
|
+
export function lint(_files, cwd = process.cwd()) {
|
|
381
|
+
return runStandardLint(import.meta.dirname, () => check(cwd))
|
|
382
|
+
}
|