@7n/rules 1.0.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/hooks/capture-decisions.sh +355 -0
- package/.claude-template/hooks/lib/tooling-only.sh +77 -0
- package/.claude-template/hooks/normalize-decisions.sh +574 -0
- package/.claude-template/settings.template.json +26 -0
- package/.pi-template/extensions/n-rules-adr/docs/index.md +28 -0
- package/.pi-template/extensions/n-rules-adr/index.ts +105 -0
- package/.pi-template/extensions/n-rules-adr/tsconfig.json +17 -0
- package/AGENTS.template.md +53 -0
- package/CHANGELOG.md +4277 -0
- package/README.md +189 -0
- package/bin/docs/n-rules.md +612 -0
- package/bin/docs/rename-yaml-extensions.md +207 -0
- package/bin/n-rules.js +1709 -0
- package/bin/rename-yaml-extensions.mjs +42 -0
- package/docs/index.md +12 -0
- package/docs/stryker.config.md +31 -0
- package/docs/vitest.config.md +36 -0
- package/github-actions/release/action.yml +9 -0
- package/github-actions/setup-bun-deps/action.yml +27 -0
- package/package.json +87 -0
- package/rules/abie/base_deployment_preem/base_deployment_preem.mdc +22 -0
- package/rules/abie/base_deployment_preem/base_deployment_preem.rego +54 -0
- package/rules/abie/base_deployment_preem/concern.json +8 -0
- package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.mdc +19 -0
- package/rules/abie/clean_merged_ignore_branches/clean_merged_ignore_branches.rego +81 -0
- package/rules/abie/clean_merged_ignore_branches/concern.json +8 -0
- package/rules/abie/clean_merged_ignore_branches/template/clean-merged-branch.yml.snippet.yml +9 -0
- package/rules/abie/docs/index.md +11 -0
- package/rules/abie/env_dns/concern.json +4 -0
- package/rules/abie/env_dns/docs/main.md +32 -0
- package/rules/abie/env_dns/env_dns.mdc +33 -0
- package/rules/abie/env_dns/main.mjs +47 -0
- package/rules/abie/firebase_hosting/concern.json +4 -0
- package/rules/abie/firebase_hosting/docs/main.md +41 -0
- package/rules/abie/firebase_hosting/firebase_hosting.mdc +3 -0
- package/rules/abie/firebase_hosting/main.mjs +46 -0
- package/rules/abie/hc_pairing/concern.json +4 -0
- package/rules/abie/hc_pairing/docs/main.md +34 -0
- package/rules/abie/hc_pairing/hc_pairing.mdc +23 -0
- package/rules/abie/hc_pairing/main.mjs +52 -0
- package/rules/abie/health_check_policy/concern.json +8 -0
- package/rules/abie/health_check_policy/health_check_policy.mdc +19 -0
- package/rules/abie/health_check_policy/health_check_policy.rego +172 -0
- package/rules/abie/http_route_base/concern.json +8 -0
- package/rules/abie/http_route_base/http_route_base.mdc +9 -0
- package/rules/abie/http_route_base/http_route_base.rego +45 -0
- package/rules/abie/lib/docs/enabled.md +38 -0
- package/rules/abie/lib/docs/env-dns.md +31 -0
- package/rules/abie/lib/docs/hc-yaml.md +33 -0
- package/rules/abie/lib/docs/http-route.md +31 -0
- package/rules/abie/lib/docs/index.md +18 -0
- package/rules/abie/lib/docs/k8s-tree.md +44 -0
- package/rules/abie/lib/docs/kustomization-patches.md +37 -0
- package/rules/abie/lib/docs/overlay-paths.md +42 -0
- package/rules/abie/lib/docs/yaml.md +33 -0
- package/rules/abie/lib/enabled.mjs +37 -0
- package/rules/abie/lib/env-dns.mjs +81 -0
- package/rules/abie/lib/hc-yaml.mjs +27 -0
- package/rules/abie/lib/http-route.mjs +100 -0
- package/rules/abie/lib/k8s-tree.mjs +110 -0
- package/rules/abie/lib/kustomization-patches.mjs +211 -0
- package/rules/abie/lib/overlay-paths.mjs +97 -0
- package/rules/abie/lib/yaml.mjs +72 -0
- package/rules/abie/main.json +1 -0
- package/rules/abie/main.mdc +47 -0
- package/rules/abie/package_json_shared/concern.json +11 -0
- package/rules/abie/package_json_shared/package_json_shared.mdc +17 -0
- package/rules/abie/package_json_shared/package_json_shared.rego +16 -0
- package/rules/abie/ua_http_route/concern.json +4 -0
- package/rules/abie/ua_http_route/docs/main.md +44 -0
- package/rules/abie/ua_http_route/main.mjs +80 -0
- package/rules/abie/ua_http_route/ua_http_route.mdc +47 -0
- package/rules/abie/ua_node_selector/concern.json +4 -0
- package/rules/abie/ua_node_selector/docs/main.md +34 -0
- package/rules/abie/ua_node_selector/main.mjs +62 -0
- package/rules/abie/ua_node_selector/ua_node_selector.mdc +27 -0
- package/rules/adr/docs/index.md +11 -0
- package/rules/adr/hooks/concern.json +4 -0
- package/rules/adr/hooks/docs/main.md +38 -0
- package/rules/adr/hooks/hooks.mdc +32 -0
- package/rules/adr/hooks/main.mjs +367 -0
- package/rules/adr/main.json +1 -0
- package/rules/adr/main.mdc +93 -0
- package/rules/adr/settings_json/concern.json +9 -0
- package/rules/adr/settings_json/settings_json.mdc +7 -0
- package/rules/adr/settings_json/settings_json.rego +37 -0
- package/rules/adr/settings_local_json/concern.json +9 -0
- package/rules/adr/settings_local_json/settings_local_json.mdc +7 -0
- package/rules/adr/settings_local_json/settings_local_json.rego +40 -0
- package/rules/bun/bunfig/bunfig.mdc +12 -0
- package/rules/bun/bunfig/bunfig.rego +29 -0
- package/rules/bun/bunfig/concern.json +9 -0
- package/rules/bun/bunfig/template/bunfig.toml.snippet.toml +2 -0
- package/rules/bun/docs/index.md +11 -0
- package/rules/bun/layout/concern.json +16 -0
- package/rules/bun/layout/docs/fix-layout.md +29 -0
- package/rules/bun/layout/docs/main.md +34 -0
- package/rules/bun/layout/fix-layout.mjs +63 -0
- package/rules/bun/layout/layout.mdc +60 -0
- package/rules/bun/layout/main.mjs +53 -0
- package/rules/bun/licensee/concern.json +7 -0
- package/rules/bun/licensee/docs/fix-licensee.md +28 -0
- package/rules/bun/licensee/docs/index.md +12 -0
- package/rules/bun/licensee/docs/main.md +37 -0
- package/rules/bun/licensee/fix-licensee.mjs +32 -0
- package/rules/bun/licensee/main.mjs +44 -0
- package/rules/bun/main.json +1 -0
- package/rules/bun/main.mdc +11 -0
- package/rules/bun/package_json/concern.json +9 -0
- package/rules/bun/package_json/docs/fix-package_json.md +28 -0
- package/rules/bun/package_json/docs/index.md +9 -0
- package/rules/bun/package_json/fix-package_json.mjs +311 -0
- package/rules/bun/package_json/package_json.mdc +14 -0
- package/rules/bun/package_json/package_json.rego +64 -0
- package/rules/bun/package_json/template/package.json.deny.json +4 -0
- package/rules/capacitor/docs/index.md +11 -0
- package/rules/capacitor/main.json +1 -0
- package/rules/capacitor/main.mdc +12 -0
- package/rules/capacitor/package_json/concern.json +9 -0
- package/rules/capacitor/package_json/package_json.mdc +9 -0
- package/rules/capacitor/package_json/package_json.rego +45 -0
- package/rules/capacitor/platforms/concern.json +4 -0
- package/rules/capacitor/platforms/docs/main.md +41 -0
- package/rules/capacitor/platforms/main.mjs +486 -0
- package/rules/changelog/consistency/concern.json +4 -0
- package/rules/changelog/consistency/docs/fix-consistency.md +31 -0
- package/rules/changelog/consistency/docs/main.md +41 -0
- package/rules/changelog/consistency/fix-consistency.mjs +71 -0
- package/rules/changelog/consistency/main.mjs +820 -0
- package/rules/changelog/docs/index.md +11 -0
- package/rules/changelog/lib/docs/index.md +11 -0
- package/rules/changelog/lib/docs/package-manifest.md +214 -0
- package/rules/changelog/lib/package-manifest.mjs +158 -0
- package/rules/changelog/main.json +1 -0
- package/rules/changelog/main.mdc +7 -0
- package/rules/changelog/presence/concern.json +7 -0
- package/rules/changelog/presence/docs/main.md +44 -0
- package/rules/changelog/presence/main.mjs +87 -0
- package/rules/ci4/docs/index.md +11 -0
- package/rules/ci4/main.json +1 -0
- package/rules/ci4/main.mdc +375 -0
- package/rules/ci4/marksman_config/concern.json +5 -0
- package/rules/ci4/marksman_config/data/marksman_config/marksman.baseline.toml +27 -0
- package/rules/ci4/marksman_config/docs/fix-marksman_config.md +27 -0
- package/rules/ci4/marksman_config/docs/main.md +30 -0
- package/rules/ci4/marksman_config/fix-marksman_config.mjs +24 -0
- package/rules/ci4/marksman_config/main.mjs +38 -0
- package/rules/ci4/marksman_config/marksman_config.mdc +31 -0
- package/rules/ci4/vscode_extensions/concern.json +9 -0
- package/rules/ci4/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/ci4/vscode_extensions/docs/index.md +11 -0
- package/rules/ci4/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/ci4/vscode_extensions/template/extensions.json.snippet.json +3 -0
- package/rules/ci4/vscode_extensions/vscode_extensions.mdc +9 -0
- package/rules/ci4/vscode_extensions/vscode_extensions.rego +12 -0
- package/rules/doc-files/check/concern.json +7 -0
- package/rules/doc-files/check/docs/fix-check.md +28 -0
- package/rules/doc-files/check/docs/fix-worker.md +28 -0
- package/rules/doc-files/check/docs/main.md +32 -0
- package/rules/doc-files/check/fix-check.mjs +45 -0
- package/rules/doc-files/check/fix-worker.mjs +56 -0
- package/rules/doc-files/check/main.mjs +99 -0
- package/rules/doc-files/docgen-crc/concern.json +3 -0
- package/rules/doc-files/docgen-crc/docs/main.md +46 -0
- package/rules/doc-files/docgen-crc/main.mjs +207 -0
- package/rules/doc-files/docgen-extract/concern.json +3 -0
- package/rules/doc-files/docgen-extract/docs/main.md +38 -0
- package/rules/doc-files/docgen-extract/main.mjs +471 -0
- package/rules/doc-files/docgen-extract-anchors/concern.json +3 -0
- package/rules/doc-files/docgen-extract-anchors/docs/main.md +49 -0
- package/rules/doc-files/docgen-extract-anchors/main.mjs +115 -0
- package/rules/doc-files/docgen-files-batch/concern.json +3 -0
- package/rules/doc-files/docgen-files-batch/docs/main.md +38 -0
- package/rules/doc-files/docgen-files-batch/main.mjs +517 -0
- package/rules/doc-files/docgen-fix-worker/concern.json +3 -0
- package/rules/doc-files/docgen-gen/concern.json +3 -0
- package/rules/doc-files/docgen-gen/docs/main.md +40 -0
- package/rules/doc-files/docgen-gen/main.mjs +582 -0
- package/rules/doc-files/docgen-ignore/concern.json +3 -0
- package/rules/doc-files/docgen-ignore/docs/main.md +33 -0
- package/rules/doc-files/docgen-ignore/main.mjs +54 -0
- package/rules/doc-files/docgen-judge/concern.json +3 -0
- package/rules/doc-files/docgen-judge/docs/main.md +43 -0
- package/rules/doc-files/docgen-judge/main.mjs +116 -0
- package/rules/doc-files/docgen-prompts/concern.json +3 -0
- package/rules/doc-files/docgen-prompts/docs/main.md +48 -0
- package/rules/doc-files/docgen-prompts/main.mjs +222 -0
- package/rules/doc-files/docgen-scan/concern.json +3 -0
- package/rules/doc-files/docgen-scan/docs/main.md +52 -0
- package/rules/doc-files/docgen-scan/main.mjs +231 -0
- package/rules/doc-files/docs/index.md +11 -0
- package/rules/doc-files/main.json +1 -0
- package/rules/doc-files/main.mdc +49 -0
- package/rules/doc-files/units/concern.json +3 -0
- package/rules/doc-files/units/docs/main.md +32 -0
- package/rules/doc-files/units/main.mjs +20 -0
- package/rules/doc-files/units-js/concern.json +3 -0
- package/rules/doc-files/units-js/docs/main.md +32 -0
- package/rules/doc-files/units-js/main.mjs +141 -0
- package/rules/doc-files/units-rs/concern.json +3 -0
- package/rules/doc-files/units-rs/docs/main.md +36 -0
- package/rules/doc-files/units-rs/main.mjs +311 -0
- package/rules/docker/docs/index.md +11 -0
- package/rules/docker/lib/docker-hadolint.mjs +60 -0
- package/rules/docker/lib/docker-mirror.mjs +148 -0
- package/rules/docker/lib/docker-native-addon.mjs +93 -0
- package/rules/docker/lib/docker-nginx-user.mjs +122 -0
- package/rules/docker/lib/docs/docker-hadolint.md +29 -0
- package/rules/docker/lib/docs/docker-mirror.md +251 -0
- package/rules/docker/lib/docs/docker-native-addon.md +174 -0
- package/rules/docker/lib/docs/docker-nginx-user.md +223 -0
- package/rules/docker/lib/docs/index.md +14 -0
- package/rules/docker/lint/concern.json +7 -0
- package/rules/docker/lint/docs/main.md +47 -0
- package/rules/docker/lint/main.mjs +360 -0
- package/rules/docker/lint_docker_yml/concern.json +9 -0
- package/rules/docker/lint_docker_yml/lint_docker_yml.mdc +14 -0
- package/rules/docker/lint_docker_yml/lint_docker_yml.rego +79 -0
- package/rules/docker/lint_docker_yml/template/lint-docker.yml.snippet.yml +41 -0
- package/rules/docker/main.json +1 -0
- package/rules/docker/main.mdc +14 -0
- package/rules/efes/docs/index.md +11 -0
- package/rules/efes/main.json +1 -0
- package/rules/efes/main.mdc +21 -0
- package/rules/efes/package_json_shared/concern.json +11 -0
- package/rules/efes/package_json_shared/package_json_shared.mdc +33 -0
- package/rules/efes/package_json_shared/package_json_shared.rego +16 -0
- package/rules/feedback/docs/index.md +11 -0
- package/rules/feedback/main.json +1 -0
- package/rules/feedback/main.mdc +63 -0
- package/rules/ga/clean_ga_workflows/clean_ga_workflows.mdc +20 -0
- package/rules/ga/clean_ga_workflows/clean_ga_workflows.rego +112 -0
- package/rules/ga/clean_ga_workflows/concern.json +10 -0
- package/rules/ga/clean_ga_workflows/template/clean-ga-workflows.yml.snippet.yml +26 -0
- package/rules/ga/clean_merged_branch/clean_merged_branch.mdc +24 -0
- package/rules/ga/clean_merged_branch/clean_merged_branch.rego +163 -0
- package/rules/ga/clean_merged_branch/concern.json +10 -0
- package/rules/ga/clean_merged_branch/template/clean-merged-branch.yml.snippet.yml +37 -0
- package/rules/ga/docs/index.md +11 -0
- package/rules/ga/git_ai/concern.json +11 -0
- package/rules/ga/git_ai/git_ai.mdc +19 -0
- package/rules/ga/git_ai/git_ai.rego +76 -0
- package/rules/ga/git_ai/template/git-ai.yml.snippet.yml +30 -0
- package/rules/ga/lint_ga/concern.json +10 -0
- package/rules/ga/lint_ga/lint_ga.mdc +21 -0
- package/rules/ga/lint_ga/lint_ga.rego +132 -0
- package/rules/ga/lint_ga/template/lint-ga.yml.snippet.yml +41 -0
- package/rules/ga/main.json +1 -0
- package/rules/ga/main.mdc +17 -0
- package/rules/ga/vscode_extensions/concern.json +11 -0
- package/rules/ga/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/ga/vscode_extensions/docs/index.md +11 -0
- package/rules/ga/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/ga/vscode_extensions/template/extensions.json.snippet.json +1 -0
- package/rules/ga/vscode_extensions/vscode_extensions.mdc +9 -0
- package/rules/ga/vscode_extensions/vscode_extensions.rego +18 -0
- package/rules/ga/vscode_settings/concern.json +11 -0
- package/rules/ga/vscode_settings/template/settings.json.snippet.json +1 -0
- package/rules/ga/vscode_settings/vscode_settings.mdc +9 -0
- package/rules/ga/vscode_settings/vscode_settings.rego +22 -0
- package/rules/ga/workflow_common/concern.json +9 -0
- package/rules/ga/workflow_common/template/uses-min-versions.snippet.json +4 -0
- package/rules/ga/workflow_common/workflow_common.mdc +18 -0
- package/rules/ga/workflow_common/workflow_common.rego +288 -0
- package/rules/ga/workflows/concern.json +8 -0
- package/rules/ga/workflows/docs/fix-workflows.md +37 -0
- package/rules/ga/workflows/docs/main.md +38 -0
- package/rules/ga/workflows/fix-workflows.mjs +212 -0
- package/rules/ga/workflows/main.mjs +433 -0
- package/rules/ga/workflows/workflows.mdc +33 -0
- package/rules/ga/zizmor_yml/concern.json +11 -0
- package/rules/ga/zizmor_yml/template/zizmor.yml.snippet.yml +5 -0
- package/rules/ga/zizmor_yml/zizmor_yml.mdc +9 -0
- package/rules/ga/zizmor_yml/zizmor_yml.rego +27 -0
- package/rules/graphql/docs/index.md +11 -0
- package/rules/graphql/lib/docs/graphql-gql-scan.md +226 -0
- package/rules/graphql/lib/docs/index.md +11 -0
- package/rules/graphql/lib/graphql-gql-scan.mjs +146 -0
- package/rules/graphql/main.json +1 -0
- package/rules/graphql/main.mdc +8 -0
- package/rules/graphql/tooling/concern.json +8 -0
- package/rules/graphql/tooling/docs/main.md +36 -0
- package/rules/graphql/tooling/main.mjs +129 -0
- package/rules/graphql/tooling/tooling.mdc +13 -0
- package/rules/graphql/vscode_extensions/concern.json +9 -0
- package/rules/graphql/vscode_extensions/docs/fix-vscode_extensions.md +24 -0
- package/rules/graphql/vscode_extensions/docs/index.md +11 -0
- package/rules/graphql/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/graphql/vscode_extensions/vscode_extensions.mdc +9 -0
- package/rules/graphql/vscode_extensions/vscode_extensions.rego +20 -0
- package/rules/hasura/docs/index.md +11 -0
- package/rules/hasura/internal_urls/concern.json +5 -0
- package/rules/hasura/internal_urls/docs/fix-internal_urls.md +26 -0
- package/rules/hasura/internal_urls/docs/index.md +12 -0
- package/rules/hasura/internal_urls/docs/main.md +36 -0
- package/rules/hasura/internal_urls/fix-internal_urls.mjs +66 -0
- package/rules/hasura/internal_urls/internal_urls.mdc +27 -0
- package/rules/hasura/internal_urls/main.mjs +233 -0
- package/rules/hasura/main.json +1 -0
- package/rules/hasura/main.mdc +8 -0
- package/rules/hasura/migrations/concern.json +4 -0
- package/rules/hasura/migrations/docs/fix-migrations.md +25 -0
- package/rules/hasura/migrations/docs/index.md +12 -0
- package/rules/hasura/migrations/docs/main.md +35 -0
- package/rules/hasura/migrations/fix-migrations.mjs +35 -0
- package/rules/hasura/migrations/main.mjs +53 -0
- package/rules/hasura/migrations/migrations.mdc +13 -0
- package/rules/hasura/svc_hl/concern.json +8 -0
- package/rules/hasura/svc_hl/svc_hl.mdc +15 -0
- package/rules/hasura/svc_hl/svc_hl.rego +50 -0
- package/rules/image-avif/avif_generation/avif_generation.mdc +26 -0
- package/rules/image-avif/avif_generation/concern.json +4 -0
- package/rules/image-avif/avif_generation/docs/fix-avif_generation.md +27 -0
- package/rules/image-avif/avif_generation/docs/main.md +36 -0
- package/rules/image-avif/avif_generation/fix-avif_generation.mjs +80 -0
- package/rules/image-avif/avif_generation/main.mjs +411 -0
- package/rules/image-avif/docs/index.md +11 -0
- package/rules/image-avif/main.json +1 -0
- package/rules/image-avif/main.mdc +8 -0
- package/rules/image-avif/package_json/concern.json +9 -0
- package/rules/image-avif/package_json/package_json.mdc +18 -0
- package/rules/image-avif/package_json/package_json.rego +47 -0
- package/rules/image-avif/package_json/template/package.json.deny.json +5 -0
- package/rules/image-compress/check/concern.json +7 -0
- package/rules/image-compress/check/docs/fix-check.md +34 -0
- package/rules/image-compress/check/docs/index.md +10 -0
- package/rules/image-compress/check/docs/main.md +31 -0
- package/rules/image-compress/check/fix-check.mjs +74 -0
- package/rules/image-compress/check/main.mjs +64 -0
- package/rules/image-compress/docs/index.md +11 -0
- package/rules/image-compress/main.json +1 -0
- package/rules/image-compress/main.mdc +10 -0
- package/rules/image-compress/package_json/concern.json +9 -0
- package/rules/image-compress/package_json/package_json.mdc +13 -0
- package/rules/image-compress/package_json/package_json.rego +21 -0
- package/rules/image-compress/package_json/template/package.json.deny.json +8 -0
- package/rules/image-compress/package_setup/concern.json +4 -0
- package/rules/image-compress/package_setup/docs/main.md +34 -0
- package/rules/image-compress/package_setup/main.mjs +98 -0
- package/rules/image-compress/package_setup/package_setup.mdc +13 -0
- package/rules/js/check/concern.json +19 -0
- package/rules/js/check/docs/eslint-config.md +56 -0
- package/rules/js/check/docs/fix-check.md +31 -0
- package/rules/js/check/docs/index.md +13 -0
- package/rules/js/check/docs/main.md +45 -0
- package/rules/js/check/eslint-config.mjs +262 -0
- package/rules/js/check/fix-check.mjs +39 -0
- package/rules/js/check/main.mjs +312 -0
- package/rules/js/dep-policy/concern.json +4 -0
- package/rules/js/dep-policy/dep-policy.mdc +36 -0
- package/rules/js/dep-policy/docs/main.md +35 -0
- package/rules/js/dep-policy/main.mjs +99 -0
- package/rules/js/docs/index.md +11 -0
- package/rules/js/eslint/concern.json +7 -0
- package/rules/js/eslint/docs/fix-eslint.md +32 -0
- package/rules/js/eslint/docs/main.md +33 -0
- package/rules/js/eslint/fix-eslint.mjs +77 -0
- package/rules/js/eslint/main.mjs +99 -0
- package/rules/js/jscpd_config/concern.json +11 -0
- package/rules/js/jscpd_config/jscpd_config.mdc +14 -0
- package/rules/js/jscpd_config/jscpd_config.rego +44 -0
- package/rules/js/jscpd_config/template/.jscpd.json.snippet.json +7 -0
- package/rules/js/jscpd_duplicates/concern.json +7 -0
- package/rules/js/jscpd_duplicates/docs/main.md +29 -0
- package/rules/js/jscpd_duplicates/main.mjs +70 -0
- package/rules/js/knip/concern.json +6 -0
- package/rules/js/knip/docs/main.md +32 -0
- package/rules/js/knip/main.mjs +68 -0
- package/rules/js/lint-findings/concern.json +3 -0
- package/rules/js/lint-findings/docs/main.md +41 -0
- package/rules/js/lint-findings/main.mjs +125 -0
- package/rules/js/lint_js_yml/concern.json +9 -0
- package/rules/js/lint_js_yml/lint_js_yml.mdc +14 -0
- package/rules/js/lint_js_yml/lint_js_yml.rego +117 -0
- package/rules/js/lint_js_yml/template/lint-js.yml.snippet.yml +40 -0
- package/rules/js/main.json +1 -0
- package/rules/js/main.mdc +19 -0
- package/rules/js/package_json/concern.json +9 -0
- package/rules/js/package_json/package_json.mdc +15 -0
- package/rules/js/package_json/package_json.rego +142 -0
- package/rules/js/package_json/template/package.json.snippet.json +6 -0
- package/rules/js/tooling/concern.json +3 -0
- package/rules/js/tooling/data/tooling/knip-canonical.json +29 -0
- package/rules/js/tooling/data/tooling/oxlint-canonical.json +400 -0
- package/rules/js/tooling/docs/main.md +31 -0
- package/rules/js/tooling/main.mjs +149 -0
- package/rules/js/utils_imports/concern.json +4 -0
- package/rules/js/utils_imports/docs/main.md +50 -0
- package/rules/js/utils_imports/main.mjs +185 -0
- package/rules/js/vscode_extensions/concern.json +11 -0
- package/rules/js/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/js/vscode_extensions/docs/index.md +11 -0
- package/rules/js/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/js/vscode_extensions/template/extensions.json.snippet.json +3 -0
- package/rules/js/vscode_extensions/vscode_extensions.mdc +11 -0
- package/rules/js/vscode_extensions/vscode_extensions.rego +12 -0
- package/rules/js-bun-db/docs/index.md +11 -0
- package/rules/js-bun-db/lib/bun-sql-scan.mjs +1055 -0
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +63 -0
- package/rules/js-bun-db/lib/docs/index.md +11 -0
- package/rules/js-bun-db/main.json +1 -0
- package/rules/js-bun-db/main.mdc +8 -0
- package/rules/js-bun-db/package_json/concern.json +9 -0
- package/rules/js-bun-db/package_json/package_json.mdc +17 -0
- package/rules/js-bun-db/package_json/package_json.rego +15 -0
- package/rules/js-bun-db/package_json/template/package.json.deny.json +6 -0
- package/rules/js-bun-db/safety/concern.json +4 -0
- package/rules/js-bun-db/safety/docs/main.md +34 -0
- package/rules/js-bun-db/safety/main.mjs +430 -0
- package/rules/js-bun-redis/docs/index.md +11 -0
- package/rules/js-bun-redis/imports/concern.json +4 -0
- package/rules/js-bun-redis/imports/docs/main.md +36 -0
- package/rules/js-bun-redis/imports/imports.mdc +47 -0
- package/rules/js-bun-redis/imports/main.mjs +88 -0
- package/rules/js-bun-redis/lib/docs/index.md +11 -0
- package/rules/js-bun-redis/lib/docs/redis-imports.md +227 -0
- package/rules/js-bun-redis/lib/redis-imports.mjs +130 -0
- package/rules/js-bun-redis/main.json +1 -0
- package/rules/js-bun-redis/main.mdc +8 -0
- package/rules/js-bun-redis/package_json/concern.json +9 -0
- package/rules/js-bun-redis/package_json/package_json.mdc +11 -0
- package/rules/js-bun-redis/package_json/package_json.rego +15 -0
- package/rules/js-bun-redis/package_json/template/package.json.deny.json +12 -0
- package/rules/js-mssql/deps/concern.json +4 -0
- package/rules/js-mssql/deps/docs/main.md +33 -0
- package/rules/js-mssql/deps/main.mjs +297 -0
- package/rules/js-mssql/docs/index.md +11 -0
- package/rules/js-mssql/lib/docs/index.md +11 -0
- package/rules/js-mssql/lib/docs/mssql-pool-scan.md +380 -0
- package/rules/js-mssql/lib/mssql-pool-scan.mjs +610 -0
- package/rules/js-mssql/main.json +1 -0
- package/rules/js-mssql/main.mdc +14 -0
- package/rules/js-mssql/package_json/concern.json +9 -0
- package/rules/js-mssql/package_json/package_json.mdc +9 -0
- package/rules/js-mssql/package_json/package_json.rego +57 -0
- package/rules/js-run/configmap/concern.json +9 -0
- package/rules/js-run/configmap/configmap.mdc +31 -0
- package/rules/js-run/configmap/configmap.rego +21 -0
- package/rules/js-run/configmap/template/configmap.yaml.contains.yml +4 -0
- package/rules/js-run/docs/index.md +11 -0
- package/rules/js-run/jsconfig/concern.json +9 -0
- package/rules/js-run/jsconfig/docs/fix-jsconfig.md +29 -0
- package/rules/js-run/jsconfig/docs/index.md +9 -0
- package/rules/js-run/jsconfig/fix-jsconfig.mjs +119 -0
- package/rules/js-run/jsconfig/jsconfig.mdc +25 -0
- package/rules/js-run/jsconfig/jsconfig.rego +59 -0
- package/rules/js-run/jsconfig/template/jsconfig.json.snippet.json +10 -0
- package/rules/js-run/lib/bunyan-imports.mjs +98 -0
- package/rules/js-run/lib/check-env-scan.mjs +338 -0
- package/rules/js-run/lib/conn-file-rules.mjs +214 -0
- package/rules/js-run/lib/conn-imports-scan.mjs +154 -0
- package/rules/js-run/lib/docs/bunyan-imports.md +121 -0
- package/rules/js-run/lib/docs/check-env-scan.md +438 -0
- package/rules/js-run/lib/docs/conn-file-rules.md +304 -0
- package/rules/js-run/lib/docs/conn-imports-scan.md +208 -0
- package/rules/js-run/lib/docs/index.md +16 -0
- package/rules/js-run/lib/docs/promise-settimeout-scan.md +334 -0
- package/rules/js-run/lib/docs/temporal-scan.md +29 -0
- package/rules/js-run/lib/promise-settimeout-scan.mjs +128 -0
- package/rules/js-run/lib/temporal-scan.mjs +52 -0
- package/rules/js-run/main.json +1 -0
- package/rules/js-run/main.mdc +16 -0
- package/rules/js-run/package_json/concern.json +9 -0
- package/rules/js-run/package_json/package_json.mdc +38 -0
- package/rules/js-run/package_json/package_json.rego +37 -0
- package/rules/js-run/package_json/template/package.json.deny.json +22 -0
- package/rules/js-run/runtime/concern.json +12 -0
- package/rules/js-run/runtime/docs/fix-runtime.md +27 -0
- package/rules/js-run/runtime/docs/main.md +35 -0
- package/rules/js-run/runtime/fix-runtime.mjs +46 -0
- package/rules/js-run/runtime/main.mjs +494 -0
- package/rules/js-run/runtime/runtime.mdc +14 -0
- package/rules/k8s/base_kustomization/base_kustomization.mdc +12 -0
- package/rules/k8s/base_kustomization/base_kustomization.rego +77 -0
- package/rules/k8s/base_kustomization/concern.json +8 -0
- package/rules/k8s/base_manifest/base_manifest.mdc +14 -0
- package/rules/k8s/base_manifest/base_manifest.rego +154 -0
- package/rules/k8s/base_manifest/concern.json +8 -0
- package/rules/k8s/docs/index.md +11 -0
- package/rules/k8s/gateway/concern.json +8 -0
- package/rules/k8s/gateway/gateway.mdc +31 -0
- package/rules/k8s/gateway/gateway.rego +151 -0
- package/rules/k8s/hasura_configmap/concern.json +8 -0
- package/rules/k8s/hasura_configmap/hasura_configmap.mdc +20 -0
- package/rules/k8s/hasura_configmap/hasura_configmap.rego +129 -0
- package/rules/k8s/hasura_httproute/concern.json +8 -0
- package/rules/k8s/hasura_httproute/hasura_httproute.mdc +16 -0
- package/rules/k8s/hasura_httproute/hasura_httproute.rego +298 -0
- package/rules/k8s/hpa_pdb/concern.json +8 -0
- package/rules/k8s/hpa_pdb/hpa_pdb.mdc +25 -0
- package/rules/k8s/hpa_pdb/hpa_pdb.rego +139 -0
- package/rules/k8s/kubeconform/concern.json +7 -0
- package/rules/k8s/kubeconform/docs/main.md +32 -0
- package/rules/k8s/kubeconform/main.mjs +39 -0
- package/rules/k8s/kustomization/concern.json +8 -0
- package/rules/k8s/kustomization/kustomization.mdc +20 -0
- package/rules/k8s/kustomization/kustomization.rego +220 -0
- package/rules/k8s/lint_k8s_yml/concern.json +9 -0
- package/rules/k8s/lint_k8s_yml/lint_k8s_yml.rego +57 -0
- package/rules/k8s/lint_k8s_yml/template/lint-k8s.yml.snippet.yml +43 -0
- package/rules/k8s/main.json +1 -0
- package/rules/k8s/main.mdc +22 -0
- package/rules/k8s/manifest/concern.json +8 -0
- package/rules/k8s/manifest/manifest.mdc +17 -0
- package/rules/k8s/manifest/manifest.rego +328 -0
- package/rules/k8s/manifests/concern.json +6 -0
- package/rules/k8s/manifests/docs/fix-manifests.md +47 -0
- package/rules/k8s/manifests/fix-manifests.mjs +217 -0
- package/rules/k8s/manifests/main.mjs +6838 -0
- package/rules/k8s/network_policy/concern.json +8 -0
- package/rules/k8s/network_policy/network_policy.mdc +22 -0
- package/rules/k8s/network_policy/network_policy.rego +151 -0
- package/rules/k8s/network_policy/template/deployment.snippet.yaml +61 -0
- package/rules/k8s/network_policy/template/stateful-set.snippet.yaml +69 -0
- package/rules/k8s/svc_hl_yaml/concern.json +8 -0
- package/rules/k8s/svc_hl_yaml/svc_hl_yaml.mdc +13 -0
- package/rules/k8s/svc_hl_yaml/svc_hl_yaml.rego +51 -0
- package/rules/k8s/svc_yaml/concern.json +8 -0
- package/rules/k8s/svc_yaml/svc_yaml.mdc +12 -0
- package/rules/k8s/svc_yaml/svc_yaml.rego +31 -0
- package/rules/nginx-default-tpl/docs/index.md +11 -0
- package/rules/nginx-default-tpl/main.json +1 -0
- package/rules/nginx-default-tpl/main.mdc +8 -0
- package/rules/nginx-default-tpl/template/concern.json +17 -0
- package/rules/nginx-default-tpl/template/docs/fix-template.md +26 -0
- package/rules/nginx-default-tpl/template/docs/main.md +42 -0
- package/rules/nginx-default-tpl/template/fix-template.mjs +67 -0
- package/rules/nginx-default-tpl/template/main.mjs +505 -0
- package/rules/nginx-default-tpl/vscode_extensions/concern.json +9 -0
- package/rules/nginx-default-tpl/vscode_extensions/vscode_extensions.mdc +11 -0
- package/rules/nginx-default-tpl/vscode_extensions/vscode_extensions.rego +16 -0
- package/rules/nginx-default-tpl/vscode_settings/concern.json +9 -0
- package/rules/nginx-default-tpl/vscode_settings/vscode_settings.mdc +15 -0
- package/rules/nginx-default-tpl/vscode_settings/vscode_settings.rego +36 -0
- package/rules/npm-module/docs/index.md +11 -0
- package/rules/npm-module/emit_types_config/concern.json +9 -0
- package/rules/npm-module/emit_types_config/emit_types_config.mdc +43 -0
- package/rules/npm-module/emit_types_config/emit_types_config.rego +28 -0
- package/rules/npm-module/emit_types_config/template/tsconfig.emit-types.json.snippet.json +9 -0
- package/rules/npm-module/header_doc_pointer/concern.json +5 -0
- package/rules/npm-module/header_doc_pointer/docs/main.md +40 -0
- package/rules/npm-module/header_doc_pointer/header_doc_pointer.mdc +18 -0
- package/rules/npm-module/header_doc_pointer/main.mjs +131 -0
- package/rules/npm-module/main.json +1 -0
- package/rules/npm-module/main.mdc +38 -0
- package/rules/npm-module/npm_package_json/concern.json +9 -0
- package/rules/npm-module/npm_package_json/npm_package_json.mdc +57 -0
- package/rules/npm-module/npm_package_json/npm_package_json.rego +73 -0
- package/rules/npm-module/npm_package_json/template/package.json.snippet.json +1 -0
- package/rules/npm-module/npm_publish_yml/concern.json +10 -0
- package/rules/npm-module/npm_publish_yml/template/npm-publish.yml.snippet.yml +49 -0
- package/rules/npm-module/package_structure/concern.json +5 -0
- package/rules/npm-module/package_structure/docs/main.md +37 -0
- package/rules/npm-module/package_structure/main.mjs +515 -0
- package/rules/npm-module/package_structure/package_structure.mdc +63 -0
- package/rules/npm-module/root_package_json/concern.json +9 -0
- package/rules/npm-module/root_package_json/root_package_json.mdc +41 -0
- package/rules/npm-module/root_package_json/root_package_json.rego +28 -0
- package/rules/npm-module/root_package_json/template/package.json.snippet.json +1 -0
- package/rules/npm-module/rule_meta/concern.json +8 -0
- package/rules/npm-module/rule_meta/docs/main.md +35 -0
- package/rules/npm-module/rule_meta/main.mjs +119 -0
- package/rules/npm-module/rule_meta/rule_meta.mdc +11 -0
- package/rules/npm-module/skill_meta/concern.json +5 -0
- package/rules/npm-module/skill_meta/docs/main.md +149 -0
- package/rules/npm-module/skill_meta/main.mjs +91 -0
- package/rules/npm-module/skill_meta/skill_meta.mdc +11 -0
- package/rules/php/cs_fixer/concern.json +7 -0
- package/rules/php/cs_fixer/docs/main.md +34 -0
- package/rules/php/cs_fixer/main.mjs +52 -0
- package/rules/php/docs/index.md +11 -0
- package/rules/php/lint_php_yml/concern.json +9 -0
- package/rules/php/lint_php_yml/lint_php_yml.mdc +23 -0
- package/rules/php/lint_php_yml/lint_php_yml.rego +34 -0
- package/rules/php/lint_php_yml/template/lint-php.yml.snippet.yml +47 -0
- package/rules/php/main.json +1 -0
- package/rules/php/main.mdc +8 -0
- package/rules/php/phpcs/concern.json +7 -0
- package/rules/php/phpcs/docs/main.md +31 -0
- package/rules/php/phpcs/main.mjs +71 -0
- package/rules/php/project/concern.json +6 -0
- package/rules/php/project/docs/main.md +36 -0
- package/rules/php/project/main.mjs +88 -0
- package/rules/php/tooling/concern.json +5 -0
- package/rules/php/tooling/docs/main.md +33 -0
- package/rules/php/tooling/main.mjs +35 -0
- package/rules/php/tooling/tooling.mdc +66 -0
- package/rules/python/applies/concern.json +4 -0
- package/rules/python/applies/docs/main.md +29 -0
- package/rules/python/applies/main.mjs +24 -0
- package/rules/python/docs/index.md +11 -0
- package/rules/python/lib/docs/index.md +9 -0
- package/rules/python/lib/docs/uv-run.md +32 -0
- package/rules/python/lib/uv-run.mjs +48 -0
- package/rules/python/lint_python_yml/concern.json +9 -0
- package/rules/python/lint_python_yml/lint_python_yml.mdc +12 -0
- package/rules/python/lint_python_yml/lint_python_yml.rego +68 -0
- package/rules/python/lint_python_yml/template/lint-python.yml.snippet.yml +41 -0
- package/rules/python/main.json +1 -0
- package/rules/python/main.mdc +8 -0
- package/rules/python/mypy/concern.json +7 -0
- package/rules/python/mypy/docs/main.md +32 -0
- package/rules/python/mypy/main.mjs +36 -0
- package/rules/python/project/concern.json +6 -0
- package/rules/python/project/docs/main.md +43 -0
- package/rules/python/project/main.mjs +115 -0
- package/rules/python/pyproject_toml/concern.json +9 -0
- package/rules/python/pyproject_toml/pyproject_toml.mdc +13 -0
- package/rules/python/pyproject_toml/pyproject_toml.rego +53 -0
- package/rules/python/pyproject_toml/template/pyproject.toml.deny.toml +2 -0
- package/rules/python/pyproject_toml/template/pyproject.toml.snippet.toml +12 -0
- package/rules/python/ruff/concern.json +7 -0
- package/rules/python/ruff/docs/fix-ruff.md +34 -0
- package/rules/python/ruff/docs/main.md +35 -0
- package/rules/python/ruff/fix-ruff.mjs +63 -0
- package/rules/python/ruff/main.mjs +52 -0
- package/rules/python/tooling/concern.json +15 -0
- package/rules/python/tooling/docs/index.md +11 -0
- package/rules/python/tooling/docs/main.md +35 -0
- package/rules/python/tooling/main.mjs +50 -0
- package/rules/python/tooling/tooling.mdc +23 -0
- package/rules/rego/conftest_verify/concern.json +6 -0
- package/rules/rego/conftest_verify/docs/main.md +31 -0
- package/rules/rego/conftest_verify/main.mjs +55 -0
- package/rules/rego/docs/index.md +11 -0
- package/rules/rego/lib/docs/index.md +9 -0
- package/rules/rego/lib/docs/run-external-tool.md +36 -0
- package/rules/rego/lib/run-external-tool.mjs +53 -0
- package/rules/rego/main.json +1 -0
- package/rules/rego/main.mdc +20 -0
- package/rules/rego/opa_check/concern.json +7 -0
- package/rules/rego/opa_check/docs/main.md +32 -0
- package/rules/rego/opa_check/main.mjs +34 -0
- package/rules/rego/package_json/concern.json +10 -0
- package/rules/rego/package_json/package_json.mdc +12 -0
- package/rules/rego/package_json/package_json.rego +21 -0
- package/rules/rego/regal/concern.json +7 -0
- package/rules/rego/regal/docs/index.md +11 -0
- package/rules/rego/regal/docs/main.md +32 -0
- package/rules/rego/regal/main.mjs +34 -0
- package/rules/rego/tooling/concern.json +5 -0
- package/rules/rego/tooling/docs/index.md +11 -0
- package/rules/rego/tooling/docs/main.md +31 -0
- package/rules/rego/tooling/main.mjs +25 -0
- package/rules/rego/tooling/tooling.mdc +14 -0
- package/rules/rego/vscode_extensions/concern.json +11 -0
- package/rules/rego/vscode_extensions/docs/fix-vscode_extensions.md +24 -0
- package/rules/rego/vscode_extensions/docs/index.md +11 -0
- package/rules/rego/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/rego/vscode_extensions/template/extensions.json.snippet.json +1 -0
- package/rules/rego/vscode_extensions/vscode_extensions.mdc +11 -0
- package/rules/rego/vscode_extensions/vscode_extensions.rego +15 -0
- package/rules/rego/vscode_settings/concern.json +11 -0
- package/rules/rego/vscode_settings/template/settings.json.snippet.json +6 -0
- package/rules/rego/vscode_settings/vscode_settings.mdc +19 -0
- package/rules/rego/vscode_settings/vscode_settings.rego +30 -0
- package/rules/release/change.mjs +88 -0
- package/rules/release/docs/change.md +189 -0
- package/rules/release/docs/index.md +13 -0
- package/rules/release/docs/release.md +25 -0
- package/rules/release/lib/aggregate.mjs +82 -0
- package/rules/release/lib/change-file.mjs +116 -0
- package/rules/release/lib/docs/aggregate.md +250 -0
- package/rules/release/lib/docs/change-file.md +206 -0
- package/rules/release/lib/docs/fallback.md +207 -0
- package/rules/release/lib/docs/index.md +13 -0
- package/rules/release/lib/fallback.mjs +48 -0
- package/rules/release/main.json +1 -0
- package/rules/release/main.mdc +10 -0
- package/rules/release/release.mjs +220 -0
- package/rules/rust/applies/concern.json +4 -0
- package/rules/rust/applies/docs/index.md +11 -0
- package/rules/rust/applies/docs/main.md +30 -0
- package/rules/rust/applies/main.mjs +28 -0
- package/rules/rust/check/concern.json +7 -0
- package/rules/rust/check/docs/fix-check.md +30 -0
- package/rules/rust/check/docs/index.md +11 -0
- package/rules/rust/check/docs/main.md +37 -0
- package/rules/rust/check/fix-check.mjs +79 -0
- package/rules/rust/check/main.mjs +81 -0
- package/rules/rust/coverage/coverage.mdc +28 -0
- package/rules/rust/docs/index.md +11 -0
- package/rules/rust/lib/docs/has-cargo-toml.md +134 -0
- package/rules/rust/lib/docs/index.md +11 -0
- package/rules/rust/lib/has-cargo-toml.mjs +37 -0
- package/rules/rust/lint_rust_yml/concern.json +11 -0
- package/rules/rust/lint_rust_yml/lint_rust_yml.mdc +17 -0
- package/rules/rust/lint_rust_yml/lint_rust_yml.rego +79 -0
- package/rules/rust/lint_rust_yml/template/lint-rust.yml.snippet.yml +44 -0
- package/rules/rust/main.json +1 -0
- package/rules/rust/main.mdc +8 -0
- package/rules/rust/package_json/concern.json +10 -0
- package/rules/rust/package_json/package_json.mdc +12 -0
- package/rules/rust/package_json/package_json.rego +20 -0
- package/rules/rust/toolchain_cache/concern.json +5 -0
- package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +35 -0
- package/rules/rust/toolchain_cache/docs/index.md +12 -0
- package/rules/rust/toolchain_cache/docs/main.md +57 -0
- package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +117 -0
- package/rules/rust/toolchain_cache/main.mjs +177 -0
- package/rules/rust/toolchain_cache/toolchain_cache.mdc +23 -0
- package/rules/rust/vscode_extensions/concern.json +11 -0
- package/rules/rust/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/rust/vscode_extensions/docs/index.md +11 -0
- package/rules/rust/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/rust/vscode_extensions/template/extensions.json.snippet.json +1 -0
- package/rules/rust/vscode_extensions/vscode_extensions.mdc +9 -0
- package/rules/rust/vscode_extensions/vscode_extensions.rego +15 -0
- package/rules/security/docs/index.md +11 -0
- package/rules/security/lint_security_yml/concern.json +11 -0
- package/rules/security/lint_security_yml/lint_security_yml.mdc +7 -0
- package/rules/security/lint_security_yml/lint_security_yml.rego +33 -0
- package/rules/security/lint_security_yml/template/lint-security.yml.snippet.yml +31 -0
- package/rules/security/main.json +1 -0
- package/rules/security/main.mdc +15 -0
- package/rules/security/package_json/concern.json +9 -0
- package/rules/security/package_json/package_json.mdc +7 -0
- package/rules/security/package_json/package_json.rego +19 -0
- package/rules/security/package_json/template/package.json.deny.json +4 -0
- package/rules/security/sample_secret/concern.json +11 -0
- package/rules/security/sample_secret/docs/index.md +11 -0
- package/rules/security/sample_secret/docs/main.md +29 -0
- package/rules/security/sample_secret/main.mjs +80 -0
- package/rules/security/sample_secret/sample_secret.mdc +20 -0
- package/rules/security/scan/concern.json +6 -0
- package/rules/security/scan/docs/index.md +11 -0
- package/rules/security/scan/docs/main.md +32 -0
- package/rules/security/scan/main.mjs +48 -0
- package/rules/security/todo.MD +27 -0
- package/rules/security/trufflehog/concern.json +4 -0
- package/rules/security/trufflehog/docs/index.md +11 -0
- package/rules/security/trufflehog/docs/main.md +28 -0
- package/rules/security/trufflehog/main.mjs +45 -0
- package/rules/security/trufflehog/templates/trufflehog/.trufflehog-exclude.snippet.txt +6 -0
- package/rules/security/trufflehog/trufflehog.mdc +21 -0
- package/rules/style/docs/index.md +11 -0
- package/rules/style/lint/concern.json +7 -0
- package/rules/style/lint/docs/fix-lint.md +29 -0
- package/rules/style/lint/docs/index.md +11 -0
- package/rules/style/lint/docs/main.md +29 -0
- package/rules/style/lint/fix-lint.mjs +66 -0
- package/rules/style/lint/main.mjs +68 -0
- package/rules/style/lint_style_yml/concern.json +9 -0
- package/rules/style/lint_style_yml/lint_style_yml.mdc +13 -0
- package/rules/style/lint_style_yml/lint_style_yml.rego +38 -0
- package/rules/style/lint_style_yml/template/lint-style.yml.snippet.yml +39 -0
- package/rules/style/main.json +1 -0
- package/rules/style/main.mdc +13 -0
- package/rules/style/package_json/concern.json +9 -0
- package/rules/style/package_json/package_json.mdc +18 -0
- package/rules/style/package_json/package_json.rego +31 -0
- package/rules/style/package_json/template/package.json.snippet.json +5 -0
- package/rules/style/tooling/concern.json +14 -0
- package/rules/style/tooling/docs/fix-tooling.md +29 -0
- package/rules/style/tooling/docs/index.md +12 -0
- package/rules/style/tooling/docs/main.md +34 -0
- package/rules/style/tooling/fix-tooling.mjs +58 -0
- package/rules/style/tooling/main.mjs +78 -0
- package/rules/style/tooling/tooling.mdc +85 -0
- package/rules/style/vscode_extensions/concern.json +9 -0
- package/rules/style/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/style/vscode_extensions/docs/index.md +11 -0
- package/rules/style/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/style/vscode_extensions/template/extensions.json.snippet.json +1 -0
- package/rules/style/vscode_extensions/vscode_extensions.mdc +13 -0
- package/rules/style/vscode_extensions/vscode_extensions.rego +13 -0
- package/rules/style/vscode_settings/concern.json +9 -0
- package/rules/style/vscode_settings/template/settings.json.snippet.json +5 -0
- package/rules/style/vscode_settings/vscode_settings.mdc +19 -0
- package/rules/style/vscode_settings/vscode_settings.rego +15 -0
- package/rules/tauri/cargo_mutants_config/cargo_mutants_config.mdc +39 -0
- package/rules/tauri/cargo_mutants_config/concern.json +5 -0
- package/rules/tauri/cargo_mutants_config/docs/fix-cargo_mutants_config.md +30 -0
- package/rules/tauri/cargo_mutants_config/docs/index.md +12 -0
- package/rules/tauri/cargo_mutants_config/docs/main.md +30 -0
- package/rules/tauri/cargo_mutants_config/fix-cargo_mutants_config.mjs +53 -0
- package/rules/tauri/cargo_mutants_config/main.mjs +148 -0
- package/rules/tauri/core_test_isolation/concern.json +5 -0
- package/rules/tauri/core_test_isolation/core_test_isolation.mdc +43 -0
- package/rules/tauri/core_test_isolation/docs/index.md +9 -0
- package/rules/tauri/core_test_isolation/docs/main.md +36 -0
- package/rules/tauri/core_test_isolation/main.mjs +166 -0
- package/rules/tauri/docs/index.md +11 -0
- package/rules/tauri/linux_deps/concern.json +8 -0
- package/rules/tauri/linux_deps/docs/fix-linux_deps.md +29 -0
- package/rules/tauri/linux_deps/docs/index.md +10 -0
- package/rules/tauri/linux_deps/docs/main.md +36 -0
- package/rules/tauri/linux_deps/fix-linux_deps.mjs +89 -0
- package/rules/tauri/linux_deps/linux_deps.mdc +18 -0
- package/rules/tauri/linux_deps/main.mjs +100 -0
- package/rules/tauri/main.json +1 -0
- package/rules/tauri/main.mdc +86 -0
- package/rules/tauri/release/concern.json +8 -0
- package/rules/tauri/release/docs/fix-release.md +28 -0
- package/rules/tauri/release/docs/index.md +10 -0
- package/rules/tauri/release/docs/main.md +32 -0
- package/rules/tauri/release/fix-release.mjs +353 -0
- package/rules/tauri/release/main.mjs +315 -0
- package/rules/tauri/release/release.mdc +104 -0
- package/rules/tauri/tooling/concern.json +8 -0
- package/rules/tauri/tooling/docs/index.md +11 -0
- package/rules/tauri/tooling/docs/main.md +34 -0
- package/rules/tauri/tooling/main.mjs +94 -0
- package/rules/tauri/tooling/tooling.mdc +27 -0
- package/rules/tauri/updater/concern.json +14 -0
- package/rules/tauri/updater/docs/fix-updater.md +33 -0
- package/rules/tauri/updater/docs/index.md +10 -0
- package/rules/tauri/updater/docs/main.md +32 -0
- package/rules/tauri/updater/fix-updater.mjs +322 -0
- package/rules/tauri/updater/main.mjs +403 -0
- package/rules/tauri/updater/updater.mdc +90 -0
- package/rules/tauri/vscode_extensions/concern.json +9 -0
- package/rules/tauri/vscode_extensions/docs/fix-vscode_extensions.md +25 -0
- package/rules/tauri/vscode_extensions/docs/index.md +11 -0
- package/rules/tauri/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/tauri/vscode_extensions/vscode_extensions.mdc +23 -0
- package/rules/tauri/vscode_extensions/vscode_extensions.rego +26 -0
- package/rules/test/cargo_mutants_config/cargo_mutants_config.mdc +18 -0
- package/rules/test/cargo_mutants_config/concern.json +8 -0
- package/rules/test/cargo_mutants_config/data/cargo_mutants_config/mutants.toml.baseline +7 -0
- package/rules/test/cargo_mutants_config/docs/fix-cargo_mutants_config.md +31 -0
- package/rules/test/cargo_mutants_config/docs/index.md +12 -0
- package/rules/test/cargo_mutants_config/docs/main.md +36 -0
- package/rules/test/cargo_mutants_config/fix-cargo_mutants_config.mjs +49 -0
- package/rules/test/cargo_mutants_config/main.mjs +62 -0
- package/rules/test/docs/index.md +11 -0
- package/rules/test/location/concern.json +8 -0
- package/rules/test/location/docs/index.md +11 -0
- package/rules/test/location/docs/main.md +36 -0
- package/rules/test/location/location.mdc +52 -0
- package/rules/test/location/main.mjs +70 -0
- package/rules/test/main.json +1 -0
- package/rules/test/main.mdc +26 -0
- package/rules/test/no-bun-test-import/concern.json +7 -0
- package/rules/test/no-bun-test-import/docs/fix-no-bun-test-import.md +31 -0
- package/rules/test/no-bun-test-import/docs/index.md +10 -0
- package/rules/test/no-bun-test-import/docs/main.md +36 -0
- package/rules/test/no-bun-test-import/fix-no-bun-test-import.mjs +51 -0
- package/rules/test/no-bun-test-import/main.mjs +105 -0
- package/rules/test/no-bun-test-import/no-bun-test-import.mdc +9 -0
- package/rules/test/no-console-store-restore/concern.json +7 -0
- package/rules/test/no-console-store-restore/docs/index.md +11 -0
- package/rules/test/no-console-store-restore/docs/main.md +44 -0
- package/rules/test/no-console-store-restore/main.mjs +88 -0
- package/rules/test/no-console-store-restore/no-console-store-restore.mdc +11 -0
- package/rules/test/no-process-chdir/concern.json +7 -0
- package/rules/test/no-process-chdir/docs/index.md +11 -0
- package/rules/test/no-process-chdir/docs/main.md +32 -0
- package/rules/test/no-process-chdir/main.mjs +40 -0
- package/rules/test/no-process-chdir/no-process-chdir.mdc +15 -0
- package/rules/test/no-relative-fs-path/concern.json +7 -0
- package/rules/test/no-relative-fs-path/docs/index.md +11 -0
- package/rules/test/no-relative-fs-path/docs/main.md +34 -0
- package/rules/test/no-relative-fs-path/main.mjs +239 -0
- package/rules/test/no-relative-fs-path/no-relative-fs-path.mdc +22 -0
- package/rules/test/package_json/concern.json +11 -0
- package/rules/test/package_json/package_json.mdc +18 -0
- package/rules/test/package_json/package_json.rego +25 -0
- package/rules/test/package_json/template/package.json.contains.json +6 -0
- package/rules/test/sandbox-aware-test/concern.json +7 -0
- package/rules/test/sandbox-aware-test/docs/index.md +11 -0
- package/rules/test/sandbox-aware-test/docs/main.md +55 -0
- package/rules/test/sandbox-aware-test/main.mjs +89 -0
- package/rules/test/sandbox-aware-test/sandbox-aware-test.mdc +28 -0
- package/rules/test/stryker_config/concern.json +8 -0
- package/rules/test/stryker_config/data/stryker_config/docs/index.md +13 -0
- package/rules/test/stryker_config/data/stryker_config/docs/stryker-vue-macros-ignorer.md +31 -0
- package/rules/test/stryker_config/data/stryker_config/docs/stryker.config.baseline.md +31 -0
- package/rules/test/stryker_config/data/stryker_config/docs/stryker.config.vue.baseline.md +35 -0
- package/rules/test/stryker_config/data/stryker_config/stryker-vue-macros-ignorer.mjs +48 -0
- package/rules/test/stryker_config/data/stryker_config/stryker.config.baseline.mjs +18 -0
- package/rules/test/stryker_config/data/stryker_config/stryker.config.vue.baseline.mjs +23 -0
- package/rules/test/stryker_config/data/vitest_config/docs/index.md +11 -0
- package/rules/test/stryker_config/data/vitest_config/docs/vitest.config.baseline.md +35 -0
- package/rules/test/stryker_config/data/vitest_config/vitest.config.baseline.js +22 -0
- package/rules/test/stryker_config/docs/fix-stryker_config.md +42 -0
- package/rules/test/stryker_config/docs/index.md +12 -0
- package/rules/test/stryker_config/docs/main.md +38 -0
- package/rules/test/stryker_config/fix-stryker_config.mjs +76 -0
- package/rules/test/stryker_config/main.mjs +504 -0
- package/rules/test/stryker_config/stryker_config.mdc +26 -0
- package/rules/test/vitest-config-pool-forks/concern.json +7 -0
- package/rules/test/vitest-config-pool-forks/docs/index.md +11 -0
- package/rules/test/vitest-config-pool-forks/docs/main.md +42 -0
- package/rules/test/vitest-config-pool-forks/main.mjs +41 -0
- package/rules/test/vitest-config-pool-forks/vitest-config-pool-forks.mdc +34 -0
- package/rules/text/cspell/concern.json +9 -0
- package/rules/text/cspell/cspell.mdc +41 -0
- package/rules/text/cspell/cspell.rego +71 -0
- package/rules/text/cspell/docs/fix-cspell.md +36 -0
- package/rules/text/cspell/docs/index.md +11 -0
- package/rules/text/cspell/fix-cspell.mjs +115 -0
- package/rules/text/cspell/template/.cspell.json.contains.json +3 -0
- package/rules/text/cspell/template/.cspell.json.deny.json +5 -0
- package/rules/text/cspell/template/.cspell.json.snippet.json +15 -0
- package/rules/text/cspell-fix/concern.json +7 -0
- package/rules/text/cspell-fix/docs/fix-worker.md +38 -0
- package/rules/text/cspell-fix/docs/index.md +12 -0
- package/rules/text/cspell-fix/docs/main.md +32 -0
- package/rules/text/cspell-fix/fix-worker.mjs +73 -0
- package/rules/text/cspell-fix/main.mjs +185 -0
- package/rules/text/docs/index.md +11 -0
- package/rules/text/forbidden-prettier/concern.json +7 -0
- package/rules/text/forbidden-prettier/docs/index.md +11 -0
- package/rules/text/forbidden-prettier/docs/main.md +38 -0
- package/rules/text/forbidden-prettier/forbidden-prettier.mdc +14 -0
- package/rules/text/forbidden-prettier/main.mjs +56 -0
- package/rules/text/formatting/concern.json +17 -0
- package/rules/text/formatting/docs/index.md +11 -0
- package/rules/text/formatting/docs/main.md +39 -0
- package/rules/text/formatting/main.mjs +149 -0
- package/rules/text/lint_text/concern.json +8 -0
- package/rules/text/lint_text/lint_text.mdc +19 -0
- package/rules/text/lint_text/lint_text.rego +104 -0
- package/rules/text/lint_text/template/lint-text.yml.snippet.yml +61 -0
- package/rules/text/main.json +1 -0
- package/rules/text/main.mdc +23 -0
- package/rules/text/markdownlint/concern.json +12 -0
- package/rules/text/markdownlint/docs/fix-markdownlint.md +38 -0
- package/rules/text/markdownlint/docs/index.md +12 -0
- package/rules/text/markdownlint/docs/main.md +40 -0
- package/rules/text/markdownlint/fix-markdownlint.mjs +64 -0
- package/rules/text/markdownlint/main.mjs +55 -0
- package/rules/text/markdownlint/markdownlint.mdc +40 -0
- package/rules/text/markdownlint/markdownlint.rego +57 -0
- package/rules/text/markdownlint/template/.markdownlint-cli2.jsonc.snippet.jsonc +11 -0
- package/rules/text/oxfmt/concern.json +7 -0
- package/rules/text/oxfmt/docs/fix-oxfmt.md +28 -0
- package/rules/text/oxfmt/docs/main.md +27 -0
- package/rules/text/oxfmt/fix-oxfmt.mjs +52 -0
- package/rules/text/oxfmt/main.mjs +48 -0
- package/rules/text/oxfmt/oxfmt.mdc +11 -0
- package/rules/text/oxfmtrc/concern.json +9 -0
- package/rules/text/oxfmtrc/oxfmtrc.mdc +11 -0
- package/rules/text/oxfmtrc/oxfmtrc.rego +55 -0
- package/rules/text/oxfmtrc/template/.oxfmtrc.json.snippet.json +8 -0
- package/rules/text/package_json/concern.json +9 -0
- package/rules/text/package_json/package_json.mdc +35 -0
- package/rules/text/package_json/package_json.rego +66 -0
- package/rules/text/package_json/template/package.json.deny.json +15 -0
- package/rules/text/run-dotenv-linter/concern.json +7 -0
- package/rules/text/run-dotenv-linter/docs/fix-run-dotenv-linter.md +43 -0
- package/rules/text/run-dotenv-linter/docs/index.md +12 -0
- package/rules/text/run-dotenv-linter/docs/main.md +35 -0
- package/rules/text/run-dotenv-linter/fix-run-dotenv-linter.mjs +64 -0
- package/rules/text/run-dotenv-linter/main.mjs +122 -0
- package/rules/text/run-shellcheck/concern.json +7 -0
- package/rules/text/run-shellcheck/docs/fix-run-shellcheck.md +40 -0
- package/rules/text/run-shellcheck/docs/index.md +12 -0
- package/rules/text/run-shellcheck/docs/main.md +31 -0
- package/rules/text/run-shellcheck/fix-run-shellcheck.mjs +44 -0
- package/rules/text/run-shellcheck/main.mjs +245 -0
- package/rules/text/run-v8r/concern.json +7 -0
- package/rules/text/run-v8r/docs/index.md +11 -0
- package/rules/text/run-v8r/docs/main.md +40 -0
- package/rules/text/run-v8r/main.mjs +266 -0
- package/rules/text/vscode_extensions/concern.json +9 -0
- package/rules/text/vscode_extensions/docs/fix-vscode_extensions.md +36 -0
- package/rules/text/vscode_extensions/docs/index.md +11 -0
- package/rules/text/vscode_extensions/fix-vscode_extensions.mjs +1 -0
- package/rules/text/vscode_extensions/template/extensions.json.snippet.json +3 -0
- package/rules/text/vscode_extensions/vscode_extensions.mdc +13 -0
- package/rules/text/vscode_extensions/vscode_extensions.rego +12 -0
- package/rules/text/vscode_settings/concern.json +9 -0
- package/rules/text/vscode_settings/template/settings.json.snippet.json +9 -0
- package/rules/text/vscode_settings/vscode_settings.mdc +13 -0
- package/rules/text/vscode_settings/vscode_settings.rego +34 -0
- package/rules/tool-surface/docs/index.md +11 -0
- package/rules/tool-surface/main.json +6 -0
- package/rules/tool-surface/main.mdc +72 -0
- package/rules/vue/docs/index.md +11 -0
- package/rules/vue/lib/docs/index.md +11 -0
- package/rules/vue/lib/docs/vue-forbidden-imports.md +265 -0
- package/rules/vue/lib/vue-forbidden-imports.mjs +264 -0
- package/rules/vue/main.json +1 -0
- package/rules/vue/main.mdc +18 -0
- package/rules/vue/package_json/concern.json +9 -0
- package/rules/vue/package_json/package_json.mdc +30 -0
- package/rules/vue/package_json/package_json.rego +140 -0
- package/rules/vue/packages/concern.json +6 -0
- package/rules/vue/packages/docs/index.md +11 -0
- package/rules/vue/packages/docs/main.md +35 -0
- package/rules/vue/packages/main.mjs +575 -0
- package/rules/worktree/docs/index.md +11 -0
- package/rules/worktree/main.json +1 -0
- package/rules/worktree/main.mdc +100 -0
- package/rules/worktree/vscode_settings/concern.json +10 -0
- package/rules/worktree/vscode_settings/template/settings.json.snippet.json +8 -0
- package/rules/worktree/zed_settings/concern.json +10 -0
- package/rules/worktree/zed_settings/template/settings.json.snippet.json +12 -0
- package/schemas/any.json +4 -0
- package/schemas/concern.json +108 -0
- package/schemas/layers-config.json +38 -0
- package/schemas/n-rules.json +65 -0
- package/schemas/rule-meta.json +39 -0
- package/schemas/skill-meta.json +30 -0
- package/schemas/target.json +63 -0
- package/schemas/v8r-catalog.json +179 -0
- package/schemas/vendor/bunfig.json +616 -0
- package/schemas/vendor/cargo-mutants-config.json +158 -0
- package/schemas/vendor/cargo.json +9438 -0
- package/schemas/vendor/claude-code-settings.json +2742 -0
- package/schemas/vendor/codex-hooks.json +148 -0
- package/schemas/vendor/cspell.json +2427 -0
- package/schemas/vendor/github-action.json +695 -0
- package/schemas/vendor/github-workflow.json +2193 -0
- package/schemas/vendor/jsconfig.json +1252 -0
- package/schemas/vendor/jscpd.json +405 -0
- package/schemas/vendor/knip.json +915 -0
- package/schemas/vendor/mcp.json +26 -0
- package/schemas/vendor/mt-config.json +85 -0
- package/schemas/vendor/oxfmtrc.json +810 -0
- package/schemas/vendor/oxlintrc.json +18690 -0
- package/schemas/vendor/package.json +23798 -0
- package/schemas/vendor/prettierrc.json +433 -0
- package/schemas/vendor/quikrun.json +195 -0
- package/schemas/vendor/schema-catalog.json +62 -0
- package/schemas/vendor/tsconfig.json +1535 -0
- package/schemas/vendor/zizmor.json +489 -0
- package/scripts/auto-rules.mjs +444 -0
- package/scripts/auto-skills.mjs +95 -0
- package/scripts/build-agents-commands.mjs +91 -0
- package/scripts/cli-entry.mjs +34 -0
- package/scripts/dispatcher/docs/index.md +11 -0
- package/scripts/docs/auto-rules.md +34 -0
- package/scripts/docs/auto-skills.md +30 -0
- package/scripts/docs/build-agents-commands.md +37 -0
- package/scripts/docs/cli-entry.md +36 -0
- package/scripts/docs/ensure-n-rules-dev-dependencies.md +40 -0
- package/scripts/docs/hook.md +30 -0
- package/scripts/docs/index.md +22 -0
- package/scripts/docs/post-tool-use-check.md +27 -0
- package/scripts/docs/rename-yaml-extensions.md +40 -0
- package/scripts/docs/skills-cli.md +35 -0
- package/scripts/docs/smoke-check-imports.md +31 -0
- package/scripts/docs/sync-claude-config.md +84 -0
- package/scripts/docs/sync-setup-bun-deps-action.md +28 -0
- package/scripts/docs/update-blue-oak.md +28 -0
- package/scripts/docs/upgrade-n-rules-and-install.md +36 -0
- package/scripts/ensure-n-rules-dev-dependencies.mjs +217 -0
- package/scripts/hook.mjs +100 -0
- package/scripts/lib/adr/docs/index.md +12 -0
- package/scripts/lib/adr/docs/normalize-cli.md +36 -0
- package/scripts/lib/adr/docs/normalize-pipeline.md +45 -0
- package/scripts/lib/adr/normalize-cli.mjs +74 -0
- package/scripts/lib/adr/normalize-pipeline.mjs +701 -0
- package/scripts/lib/assert-project-root.mjs +77 -0
- package/scripts/lib/blue-oak.mjs +41 -0
- package/scripts/lib/changed-files.mjs +83 -0
- package/scripts/lib/check-reporter.mjs +27 -0
- package/scripts/lib/collect-test-files.mjs +48 -0
- package/scripts/lib/concern-meta.mjs +140 -0
- package/scripts/lib/diff-added-lines.mjs +86 -0
- package/scripts/lib/discover-check-rules-from-cursor.mjs +40 -0
- package/scripts/lib/discover-checkable-rules.mjs +49 -0
- package/scripts/lib/docs/assert-project-root.md +30 -0
- package/scripts/lib/docs/blue-oak.md +29 -0
- package/scripts/lib/docs/changed-files.md +32 -0
- package/scripts/lib/docs/check-reporter.md +179 -0
- package/scripts/lib/docs/collect-test-files.md +32 -0
- package/scripts/lib/docs/concern-meta.md +34 -0
- package/scripts/lib/docs/diff-added-lines.md +38 -0
- package/scripts/lib/docs/discover-check-rules-from-cursor.md +29 -0
- package/scripts/lib/docs/discover-checkable-rules.md +25 -0
- package/scripts/lib/docs/ensure-tool.md +258 -0
- package/scripts/lib/docs/generated-markdown.md +279 -0
- package/scripts/lib/docs/gha-workflow.md +38 -0
- package/scripts/lib/docs/index.md +40 -0
- package/scripts/lib/docs/inline-template-links.md +25 -0
- package/scripts/lib/docs/list-project-rules-mdc.md +27 -0
- package/scripts/lib/docs/list-rule-ids.md +25 -0
- package/scripts/lib/docs/load-cursor-config.md +154 -0
- package/scripts/lib/docs/mirror-parity.md +32 -0
- package/scripts/lib/docs/read-n-rules-config-lite.md +26 -0
- package/scripts/lib/docs/resolve-target-files.md +38 -0
- package/scripts/lib/docs/root-notice.md +29 -0
- package/scripts/lib/docs/rule-meta-helpers.md +38 -0
- package/scripts/lib/docs/rule-meta.md +29 -0
- package/scripts/lib/docs/rule-predicates.md +31 -0
- package/scripts/lib/docs/run-conftest-batch.md +30 -0
- package/scripts/lib/docs/run-lint-step.md +29 -0
- package/scripts/lib/docs/run-standard-lint.md +43 -0
- package/scripts/lib/docs/skill-meta.md +62 -0
- package/scripts/lib/docs/sync-gitignore-worktree.md +26 -0
- package/scripts/lib/docs/template.md +44 -0
- package/scripts/lib/docs/timing-summary.md +25 -0
- package/scripts/lib/docs/workspaces.md +34 -0
- package/scripts/lib/docs/worktree-notice.md +27 -0
- package/scripts/lib/ensure-tool.mjs +352 -0
- package/scripts/lib/fix/docs/index.md +11 -0
- package/scripts/lib/fix/docs/vscode-ext-add.md +33 -0
- package/scripts/lib/fix/vscode-ext-add.mjs +53 -0
- package/scripts/lib/generated-markdown.mjs +71 -0
- package/scripts/lib/gha-workflow.mjs +220 -0
- package/scripts/lib/inline-template-links.mjs +108 -0
- package/scripts/lib/lint-surface/codegen-opa-wrapper.mjs +30 -0
- package/scripts/lib/lint-surface/collateral-veto.mjs +55 -0
- package/scripts/lib/lint-surface/default-worker.mjs +67 -0
- package/scripts/lib/lint-surface/detect.mjs +169 -0
- package/scripts/lib/lint-surface/docs/codegen-opa-wrapper.md +30 -0
- package/scripts/lib/lint-surface/docs/collateral-veto.md +28 -0
- package/scripts/lib/lint-surface/docs/default-worker.md +32 -0
- package/scripts/lib/lint-surface/docs/detect.md +38 -0
- package/scripts/lib/lint-surface/docs/index.md +27 -0
- package/scripts/lib/lint-surface/docs/ladder.md +33 -0
- package/scripts/lib/lint-surface/docs/lint-lock.md +47 -0
- package/scripts/lib/lint-surface/docs/mt-run-node.md +37 -0
- package/scripts/lib/lint-surface/docs/mt-tail.md +41 -0
- package/scripts/lib/lint-surface/docs/policy-lint-adapter.md +44 -0
- package/scripts/lib/lint-surface/docs/policy-test-step.md +43 -0
- package/scripts/lib/lint-surface/docs/progress.md +28 -0
- package/scripts/lib/lint-surface/docs/render.md +29 -0
- package/scripts/lib/lint-surface/docs/run-detectors.md +32 -0
- package/scripts/lib/lint-surface/docs/run-fix.md +33 -0
- package/scripts/lib/lint-surface/docs/snapshot.md +30 -0
- package/scripts/lib/lint-surface/docs/tier-sampling-bench.md +40 -0
- package/scripts/lib/lint-surface/docs/tier-sampling-experiment.md +35 -0
- package/scripts/lib/lint-surface/docs/types.md +27 -0
- package/scripts/lib/lint-surface/docs/violation-reporter.md +32 -0
- package/scripts/lib/lint-surface/ladder.mjs +92 -0
- package/scripts/lib/lint-surface/lint-lock.mjs +247 -0
- package/scripts/lib/lint-surface/mt-run-node.mjs +206 -0
- package/scripts/lib/lint-surface/mt-tail.mjs +0 -0
- package/scripts/lib/lint-surface/policy-lint-adapter.mjs +101 -0
- package/scripts/lib/lint-surface/policy-test-step.mjs +149 -0
- package/scripts/lib/lint-surface/progress.mjs +198 -0
- package/scripts/lib/lint-surface/render.mjs +50 -0
- package/scripts/lib/lint-surface/run-detectors.mjs +314 -0
- package/scripts/lib/lint-surface/run-fix.mjs +732 -0
- package/scripts/lib/lint-surface/snapshot.mjs +83 -0
- package/scripts/lib/lint-surface/tier-sampling-bench.mjs +457 -0
- package/scripts/lib/lint-surface/tier-sampling-experiment.mjs +289 -0
- package/scripts/lib/lint-surface/types.mjs +150 -0
- package/scripts/lib/lint-surface/violation-reporter.mjs +46 -0
- package/scripts/lib/list-project-rules-mdc.mjs +22 -0
- package/scripts/lib/list-rule-ids.mjs +32 -0
- package/scripts/lib/load-cursor-config.mjs +58 -0
- package/scripts/lib/mirror-parity.mjs +62 -0
- package/scripts/lib/read-n-rules-config-lite.mjs +63 -0
- package/scripts/lib/resolve-target-files.mjs +103 -0
- package/scripts/lib/root-notice.mjs +67 -0
- package/scripts/lib/rule-meta-helpers.mjs +103 -0
- package/scripts/lib/rule-meta.mjs +66 -0
- package/scripts/lib/rule-predicates.mjs +114 -0
- package/scripts/lib/run-conftest-batch.mjs +124 -0
- package/scripts/lib/run-lint-step.mjs +38 -0
- package/scripts/lib/run-standard-lint.mjs +50 -0
- package/scripts/lib/skill-meta.mjs +90 -0
- package/scripts/lib/sync-gitignore-worktree.mjs +27 -0
- package/scripts/lib/template.mjs +315 -0
- package/scripts/lib/timing-summary.mjs +63 -0
- package/scripts/lib/workspaces.mjs +109 -0
- package/scripts/lib/worktree-notice.mjs +183 -0
- package/scripts/post-tool-use-check.mjs +82 -0
- package/scripts/rename-yaml-extensions.mjs +170 -0
- package/scripts/skills-cli.mjs +262 -0
- package/scripts/smoke-check-imports.mjs +66 -0
- package/scripts/sync-claude-config.mjs +692 -0
- package/scripts/sync-setup-bun-deps-action.mjs +36 -0
- package/scripts/update-blue-oak.mjs +50 -0
- package/scripts/upgrade-n-rules-and-install.mjs +264 -0
- package/scripts/utils/apply-to-files.mjs +36 -0
- package/scripts/utils/ast-extract.mjs +149 -0
- package/scripts/utils/ast-scan-utils.mjs +206 -0
- package/scripts/utils/docs/apply-to-files.md +38 -0
- package/scripts/utils/docs/ast-extract.md +30 -0
- package/scripts/utils/docs/ast-scan-utils.md +54 -0
- package/scripts/utils/docs/ensure-gitignore-entries.md +32 -0
- package/scripts/utils/docs/find-package-json-paths.md +30 -0
- package/scripts/utils/docs/index.md +23 -0
- package/scripts/utils/docs/lock-cache-dir.md +29 -0
- package/scripts/utils/docs/pass.md +29 -0
- package/scripts/utils/docs/resolve-cargo-manifest.md +27 -0
- package/scripts/utils/docs/resolve-cmd.md +33 -0
- package/scripts/utils/docs/resolve-js-root.md +26 -0
- package/scripts/utils/docs/test-helpers.md +30 -0
- package/scripts/utils/docs/walk-cache.md +31 -0
- package/scripts/utils/docs/walkDir.md +31 -0
- package/scripts/utils/docs/with-lock.md +30 -0
- package/scripts/utils/docs/worktree-fingerprint.md +31 -0
- package/scripts/utils/ensure-gitignore-entries.mjs +30 -0
- package/scripts/utils/find-package-json-paths.mjs +30 -0
- package/scripts/utils/lock-cache-dir.mjs +37 -0
- package/scripts/utils/pass.mjs +9 -0
- package/scripts/utils/resolve-cargo-manifest.mjs +62 -0
- package/scripts/utils/resolve-cmd.mjs +25 -0
- package/scripts/utils/resolve-js-root.mjs +61 -0
- package/scripts/utils/walk-cache.mjs +24 -0
- package/scripts/utils/walkDir.mjs +55 -0
- package/scripts/utils/with-lock.mjs +190 -0
- package/scripts/utils/worktree-fingerprint.mjs +33 -0
- package/skills/adr-normalize/SKILL.md +73 -0
- package/skills/adr-normalize/main.json +1 -0
- package/skills/brainstorming/SKILL.md +165 -0
- package/skills/brainstorming/main.json +1 -0
- package/skills/doc-aggregate/SKILL.md +121 -0
- package/skills/doc-aggregate/js/docs/index.md +11 -0
- package/skills/doc-aggregate/main.json +1 -0
- package/skills/doc-files/.changes/260612-0002.md +6 -0
- package/skills/doc-files/.changes/260612-0006.md +6 -0
- package/skills/doc-files/.changes/260612-0008.md +6 -0
- package/skills/doc-files/.changes/260612-0012.md +6 -0
- package/skills/doc-files/.changes/260612-0031.md +6 -0
- package/skills/doc-files/.changes/260612-0036.md +6 -0
- package/skills/doc-files/.changes/260612-0114.md +6 -0
- package/skills/doc-files/SKILL.md +86 -0
- package/skills/doc-files/main.json +1 -0
- package/skills/lint/SKILL.md +121 -0
- package/skills/lint/main.json +1 -0
- package/skills/llm-patch/SKILL.md +260 -0
- package/skills/llm-patch/main.json +1 -0
- package/skills/publish-telegram/SKILL.md +93 -0
- package/skills/publish-telegram/main.json +1 -0
- package/skills/taze/SKILL.md +114 -0
- package/skills/taze/js/diff.mjs +140 -0
- package/skills/taze/js/docs/diff.md +55 -0
- package/skills/taze/js/docs/index.md +11 -0
- package/skills/taze/main.json +1 -0
- package/types/bin/n-rules.d.ts +2 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: main.mjs
|
|
4
|
+
resource: npm/rules/doc-files/docgen-files-batch/main.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 6237a73f
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
issues: judge:inaccurate:0.99
|
|
10
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Огляд
|
|
14
|
+
|
|
15
|
+
Цей модуль керує повним циклом генерації документації. Він використовує функцію `selectTargets` для вибору цільових файлів та `purgeOrphanedDocs` для видалення посилань на відсутні файли. Для ініціалізації процесу застосовується `runDocFilesGenCli`, а пакетна генерація контролюється через `runGenerationBatch`. Після генерації метадані файлів оновлюються за допомогою `runDocFilesStampCli`, що додає хеш відповідного вихідного файлу. Усі операції виконуються з механізмом fail-safe, що перехоплює помилки та не кидає винятків назовні.
|
|
16
|
+
|
|
17
|
+
## Поведінка
|
|
18
|
+
|
|
19
|
+
Поведінка
|
|
20
|
+
selectTargets вибирає файли для генерації документації, які є застарілими або мають низьку якість, виключаючи ті, що вже мають потік (tier) `cloud-avg`. Рукописні доки (docPath існує без docgen-frontmatter, `foreign`) без `--overwrite` цілями не стають.
|
|
21
|
+
purgeOrphanedDocs видаляє вказівники на файли документації, для яких не існує відповідного вихідного файлу, і оновлює індекси директорій.
|
|
22
|
+
runDocFilesGenCli керує процесом генерації документації, видаляючи сирітських доків, визначаючи цілі та запускаючи пакетну генерацію; про пропущені рукописні (foreign) доки попереджає у stderr — тихого перезапису людського змісту немає, перезапис лише explicit `--overwrite`.
|
|
23
|
+
runGenerationBatch виконує генерацію документації для визначеного набору файлів, керуючи логікою циркут-брейкера при системних збоях; опційний `deadlineAt` (м'який дедлайн fix-pipeline) зупиняє батч перед стартом наступного файлу штатно — зроблене лишається на диску зі свіжими CRC, решту підбирає наступний прогін (перший файл стартує завжди).
|
|
24
|
+
generateDirIndex (пере)генерує `index.md` директорії docs/ як OKF Directory Index без H1 у тілі — top-level заголовком лишається frontmatter `title:`, тож MD025/single-title чистий; чужий `index.md` (дока source-файлу чи людський зміст без OKF-типу) не перезаписується.
|
|
25
|
+
runDocFilesStampCli оновлює метадані (frontmatter) наявних файлів документації, додаючи хеш вихідного файлу, без повторного запуску генерації.
|
|
26
|
+
|
|
27
|
+
## Публічний API
|
|
28
|
+
|
|
29
|
+
selectTargets — Визначає цілі для генерації документації: `default` — застарілі або погіршені доки, які ще не пройшли перерахунок CRC; `--overwrite` — всі доки. Погіршена дока отримує лише один повторний ретрай на версію джерела; після невдалого ретраю вона позначається як `retried: true` і більше не змінюється до оновлення джерела.
|
|
30
|
+
purgeOrphanedDocs — Видаляє доки, які втратили зв'язок із джерелом, та оновлює індекс.md. Якщо в каталозі docs залишається лише index.md або нічого, він очищається.
|
|
31
|
+
runDocFilesGenCli — Генерує документацію для доків, які є застарілими або відсутніми.
|
|
32
|
+
runGenerationBatch — Основний процес генерації: перевіряє локальний бекенд, послідовно генерує документацію для визначених цілей, застосовуючи захист від ланцюгових збоїв і м'який дедлайн (`deadlineAt`); також використовується для лінтінгу змінених файлів.
|
|
33
|
+
generateDirIndex — (Пере)генерує Directory Index (`index.md`) у docs/-директорії; детекція власного індексу — за frontmatter `type: Directory Index`, чужі index.md недоторкані.
|
|
34
|
+
runDocFilesStampCli — Автоматично додає або виправляє метадані (source + crc) у існуючих доках без залучення LLM. Цей процес використовується для міграції доків без CRC, зберігаючи при цьому інформацію про модель та якість з метаданих.
|
|
35
|
+
|
|
36
|
+
## Гарантії поведінки
|
|
37
|
+
|
|
38
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
/** @see ./docs/docgen-files-batch.md */
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readdirSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
rmdirSync,
|
|
8
|
+
statSync,
|
|
9
|
+
unlinkSync,
|
|
10
|
+
writeFileSync
|
|
11
|
+
} from 'node:fs'
|
|
12
|
+
import { spawnSync } from 'node:child_process'
|
|
13
|
+
import { basename, dirname, join, relative } from 'node:path'
|
|
14
|
+
|
|
15
|
+
import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
|
|
16
|
+
import { createProgressReporter } from '../../../scripts/lib/lint-surface/progress.mjs'
|
|
17
|
+
import { generateDoc, DEFAULT_LOCAL_MODEL } from '../docgen-gen/main.mjs'
|
|
18
|
+
import { crc32, stampDoc, readDocQuality, readDocModel, readDocTier, QUALITY_THRESHOLD } from '../docgen-crc/main.mjs'
|
|
19
|
+
import { resolveRoot, scanForDocFiles, scanOrphanedDocs } from '../docgen-scan/main.mjs'
|
|
20
|
+
|
|
21
|
+
/** Regex-класифікатори помилки генерації (module-scope, без ре-компіляції на виклик). */
|
|
22
|
+
const ERR_PERMANENT_RE = /prompt too long|pre-send guard|too long/i
|
|
23
|
+
const ERR_SYSTEMIC_RE = /registry:|session:|не знайдена|memory|enomem|connection refused|econnrefused/i
|
|
24
|
+
const ERR_TRANSIENT_RE = /timeout|etimedout/i
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Класифікує помилку генерації для batch-логіки (замінює `classifyOmlxError` після
|
|
28
|
+
* pi-міграції — помилки приходять як винятки з generateDoc/pi-one-shot):
|
|
29
|
+
* - `permanent` — pre-send guard «Prompt too long» → skip (не ретраїти);
|
|
30
|
+
* - `systemic` — модель/сервер/registry/RAM упали → circuit-breaker abort;
|
|
31
|
+
* - `transient` — таймаут (можна було б ретраїти);
|
|
32
|
+
* - `infra` — інше (рахуємо як помилку, але без abort).
|
|
33
|
+
* @param {string} msg повідомлення помилки
|
|
34
|
+
* @returns {'permanent'|'systemic'|'transient'|'infra'} клас
|
|
35
|
+
*/
|
|
36
|
+
function classifyDocgenError(msg) {
|
|
37
|
+
if (ERR_PERMANENT_RE.test(msg)) return 'permanent'
|
|
38
|
+
if (ERR_SYSTEMIC_RE.test(msg)) return 'systemic'
|
|
39
|
+
if (ERR_TRANSIENT_RE.test(msg)) return 'transient'
|
|
40
|
+
return 'infra'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Парсить `--limit N` / `--from N` / прапори режимів для дозапуску великого прогону.
|
|
45
|
+
* @param {string[]} argv аргументи
|
|
46
|
+
* @returns {{ from: number, limit: number, overwrite: boolean }} зріз і режими
|
|
47
|
+
*/
|
|
48
|
+
function parseGenArgs(argv) {
|
|
49
|
+
const num = (flag, dflt) => {
|
|
50
|
+
const i = argv.indexOf(flag)
|
|
51
|
+
return i !== -1 && argv[i + 1] ? Number(argv[i + 1]) || dflt : dflt
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
from: num('--from', 0),
|
|
55
|
+
limit: num('--limit', Infinity),
|
|
56
|
+
overwrite: argv.includes('--overwrite')
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Цілі генерації:
|
|
62
|
+
* - default → застарілі (stale) АБО degraded-доки, які ще не доретраювали при цьому CRC;
|
|
63
|
+
* - `--overwrite` → усі.
|
|
64
|
+
* Degraded-док отримує рівно ОДИН доретрай на версію джерела: після невдалого доретраю
|
|
65
|
+
* (лишився degraded) штампується `retried: true` і його більше не чіпають до зміни джерела
|
|
66
|
+
* (нова версія → CRC-mismatch → stale → лічильник скидається). Конвеєр сходиться без прапора.
|
|
67
|
+
* @param {string} root абсолютний корінь
|
|
68
|
+
* @param {Array<object>} all результат scanForDocFiles
|
|
69
|
+
* @param {{ overwrite: boolean }} mode режими
|
|
70
|
+
* @returns {Array<object>} відфільтровані цілі
|
|
71
|
+
*/
|
|
72
|
+
export function selectTargets(root, all, { overwrite }) {
|
|
73
|
+
if (overwrite) return all
|
|
74
|
+
return all.filter(f => {
|
|
75
|
+
if (f.stale) return true
|
|
76
|
+
const docAbs = join(root, f.docPath)
|
|
77
|
+
const { score } = readDocQuality(docAbs)
|
|
78
|
+
return score !== null && score < QUALITY_THRESHOLD && readDocTier(docAbs) !== 'cloud-avg'
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Текст-суфікс режиму для прогрес-рядка.
|
|
84
|
+
* @param {{ overwrite: boolean }} mode режими
|
|
85
|
+
* @returns {string} ` (--overwrite)` або порожній рядок
|
|
86
|
+
*/
|
|
87
|
+
function modeSuffix({ overwrite }) {
|
|
88
|
+
return overwrite ? ' (--overwrite)' : ''
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Форматує мілісекунди у секунди з одним знаком (`1234` → `1.2s`).
|
|
93
|
+
* @param {number} ms тривалість у мілісекундах
|
|
94
|
+
* @returns {string} напр. `1.2s`
|
|
95
|
+
*/
|
|
96
|
+
function fmtSeconds(ms) {
|
|
97
|
+
return `${(ms / 1000).toFixed(1)}s`
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Рядок таймінгу одного файлу: загальний час, час у LLM (і кількість викликів)
|
|
102
|
+
* та залишок — оркестрація (екстракт фактів, скоринг, парсинг, IO). Дає зрозуміти,
|
|
103
|
+
* скільки коштує сама модель проти JS-оркестрації.
|
|
104
|
+
* @param {{ ms: number, llmMs?: number, llmCalls?: number }} r результат generateDoc
|
|
105
|
+
* @returns {string} напр. `12.3s (llm 11.8s/7 calls, orch 0.5s)`
|
|
106
|
+
*/
|
|
107
|
+
function fmtTiming(r) {
|
|
108
|
+
const llmMs = r.llmMs ?? 0
|
|
109
|
+
return `${fmtSeconds(r.ms)} (llm ${fmtSeconds(llmMs)}/${r.llmCalls ?? 0} calls, orch ${fmtSeconds(r.ms - llmMs)})`
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Скільки systemic-збоїв підряд → негайний abort батчу (fail-fast, без cooldown). */
|
|
113
|
+
const SYSTEMIC_ABORT_STREAK = 3
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Чи настав м'який дедлайн батчу. Перший файл стартує завжди (done=0) — інакше
|
|
117
|
+
* прогін без жодного прогресу ніколи не зійдеться.
|
|
118
|
+
* @param {number|null|undefined} deadlineAt дедлайн (epoch ms) або null/undefined
|
|
119
|
+
* @param {number} done скільки файлів уже оброблено
|
|
120
|
+
* @returns {boolean} true — наступний файл не стартуємо
|
|
121
|
+
*/
|
|
122
|
+
function deadlineReached(deadlineAt, done) {
|
|
123
|
+
return Boolean(deadlineAt) && done > 0 && Date.now() >= deadlineAt
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Діагностика розміру джерела (для дослідження, що роздуває контекст):
|
|
128
|
+
* байти + груба оцінка токенів (~bytes/4). Без size-guard-гейта — лише вивід.
|
|
129
|
+
* @param {number} bytes розмір файлу в байтах
|
|
130
|
+
* @returns {string} напр. `12.3KB ~3.1k tok`
|
|
131
|
+
*/
|
|
132
|
+
function fmtSize(bytes) {
|
|
133
|
+
return `${(bytes / 1024).toFixed(1)}KB ~${(bytes / 4 / 1000).toFixed(1)}k tok`
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Генерує й штампує доку для одного файлу, оновлюючи лічильники й прогрес.
|
|
138
|
+
* Помилку класифікує (`classifyOmlxError`): `permanent` → skip (не «помилка для
|
|
139
|
+
* перегону»), `systemic`/`transient` → у `errors`. Повертає клас для циклу
|
|
140
|
+
* (circuit-breaker рахує systemic-підряд).
|
|
141
|
+
* Рядок результату складається цілком і друкується один раз через `emit` — у TTY
|
|
142
|
+
* він іде над прогрес-баром (multibar.log), тому часткові write-и на тому ж рядку
|
|
143
|
+
* неможливі.
|
|
144
|
+
* @param {object} file елемент scanForDocFiles
|
|
145
|
+
* @param {string} root абсолютний корінь
|
|
146
|
+
* @param {{ done: number, total: number }} progress позиція у прогресі
|
|
147
|
+
* @param {{ ok: number, degraded: number, err: number, errors: string[], skipped: string[] }} stats акумулятор
|
|
148
|
+
* @param {{ model?: string, tier?: string|null, emit?: (s: string) => void }} [opts] модель/тир для штампу; emit — логер рядка результату
|
|
149
|
+
* @returns {Promise<'ok'|'permanent'|'systemic'|'transient'>} результат для керування циклом
|
|
150
|
+
*/
|
|
151
|
+
async function generateOne(file, root, progress, stats, { model, tier, emit } = {}) {
|
|
152
|
+
const out = emit ?? (s => process.stdout.write(s))
|
|
153
|
+
const sourceAbs = join(root, file.sourcePath)
|
|
154
|
+
let size = 0
|
|
155
|
+
try {
|
|
156
|
+
size = statSync(sourceAbs).size
|
|
157
|
+
} catch {
|
|
158
|
+
// файл зник між скануванням і генерацією — лишаємо розмір 0
|
|
159
|
+
}
|
|
160
|
+
const prefix = ` [${progress.done}/${progress.total}] ${file.sourcePath} [${fmtSize(size)}] … `
|
|
161
|
+
try {
|
|
162
|
+
const docAbs = join(root, file.docPath)
|
|
163
|
+
// Варіант B: передаємо наявну доку, щоб зберегти захищену секцію «Призначення»
|
|
164
|
+
const existingMd = existsSync(docAbs) ? readFileSync(docAbs, 'utf8') : null
|
|
165
|
+
const result = await generateDoc(sourceAbs, { existingMd, model })
|
|
166
|
+
const crc = crc32(readFileSync(sourceAbs))
|
|
167
|
+
mkdirSync(dirname(docAbs), { recursive: true })
|
|
168
|
+
const quality =
|
|
169
|
+
result.score === null
|
|
170
|
+
? null
|
|
171
|
+
: { score: result.score, issues: result.degraded ? result.issues : [], judge: result.judge }
|
|
172
|
+
writeFileSync(docAbs, stampDoc(result.md, file.sourcePath, crc, quality, result.model, tier ?? null))
|
|
173
|
+
stats.ok++
|
|
174
|
+
if (result.degraded) {
|
|
175
|
+
stats.degraded++
|
|
176
|
+
out(`${prefix}⚠ degraded score=${result.score} crc=${crc} ${fmtTiming(result)}\n`)
|
|
177
|
+
} else {
|
|
178
|
+
out(`${prefix}✓ score=${result.score ?? '—'} crc=${crc} ${fmtTiming(result)}\n`)
|
|
179
|
+
}
|
|
180
|
+
return 'ok'
|
|
181
|
+
} catch (error) {
|
|
182
|
+
const cls = classifyDocgenError(error.message)
|
|
183
|
+
if (cls === 'permanent') {
|
|
184
|
+
stats.skipped.push(file.sourcePath)
|
|
185
|
+
out(`${prefix}⊘ skip (permanent): ${error.message}\n`)
|
|
186
|
+
} else {
|
|
187
|
+
stats.err++
|
|
188
|
+
stats.errors.push(file.sourcePath)
|
|
189
|
+
out(`${prefix}✗ ${cls}: ${error.message}\n`)
|
|
190
|
+
}
|
|
191
|
+
return cls
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Regex для витягу OKF-полів із frontmatter існуючої доки (швидкий, без YAML-парсера). */
|
|
196
|
+
const OKF_TITLE_RE = /^title: (.+)$/mu
|
|
197
|
+
const OKF_TYPE_RE = /^type: (.+)$/mu
|
|
198
|
+
const OKF_RESOURCE_RE = /^resource:[ \t]+(\S[^\n]*)$/mu
|
|
199
|
+
/** Суфікс `.md` для деривації заголовка з імені файлу. */
|
|
200
|
+
const MD_SUFFIX_RE = /\.md$/u
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Витягує тіло YAML-frontmatter (між першим `---\n` та наступним рядком `---`).
|
|
204
|
+
* Лінійний пошук по рядках без backtracking-regex.
|
|
205
|
+
* @param {string} md вміст markdown-файлу
|
|
206
|
+
* @returns {string} тіло frontmatter (без обгортаючих `---`) або `''` якщо frontmatter відсутній
|
|
207
|
+
*/
|
|
208
|
+
function extractFrontmatter(md) {
|
|
209
|
+
if (!md.startsWith('---\n')) return ''
|
|
210
|
+
const lines = md.slice(4).split('\n')
|
|
211
|
+
const closeIdx = lines.findIndex(line => line.startsWith('---'))
|
|
212
|
+
if (closeIdx === -1) return ''
|
|
213
|
+
return lines.slice(0, closeIdx).join('\n')
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Генерує/оновлює `index.md` у директорії `docs/` — OKF Directory Index із таблицею
|
|
218
|
+
* всіх наявних doc-файлів у цій директорії. Не зачіпає `index.md` при відсутності
|
|
219
|
+
* інших doc-файлів.
|
|
220
|
+
* @param {string} docsAbsDir абсолютний шлях директорії `docs/`
|
|
221
|
+
* @param {string} root абсолютний корінь проєкту
|
|
222
|
+
* @returns {void}
|
|
223
|
+
*/
|
|
224
|
+
export function generateDirIndex(docsAbsDir, root) {
|
|
225
|
+
const allMd = readdirSync(docsAbsDir)
|
|
226
|
+
.filter(f => f.endsWith('.md'))
|
|
227
|
+
.toSorted()
|
|
228
|
+
|
|
229
|
+
// Чужий index.md — не чіпаємо: дока source-файлу (`index.*` → type JS Module тощо)
|
|
230
|
+
// або людський зміст (без OKF-frontmatter взагалі). Перезаписуємо лише власний
|
|
231
|
+
// Directory Index (детекція за frontmatter `type:`, не за H1).
|
|
232
|
+
if (allMd.includes('index.md')) {
|
|
233
|
+
const existingFm = extractFrontmatter(readFileSync(join(docsAbsDir, 'index.md'), 'utf8'))
|
|
234
|
+
const existingType = existingFm.match(OKF_TYPE_RE)?.[1]?.trim() ?? ''
|
|
235
|
+
if (existingType !== 'Directory Index') return
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const files = allMd.filter(f => f !== 'index.md')
|
|
239
|
+
if (files.length === 0) return
|
|
240
|
+
|
|
241
|
+
const sourceDirRel = relative(root, dirname(docsAbsDir)) || '.'
|
|
242
|
+
|
|
243
|
+
const rows = files.map(f => {
|
|
244
|
+
const md = readFileSync(join(docsAbsDir, f), 'utf8')
|
|
245
|
+
const fm = extractFrontmatter(md)
|
|
246
|
+
const resource = fm.match(OKF_RESOURCE_RE)?.[1]?.trim()
|
|
247
|
+
const title = fm.match(OKF_TITLE_RE)?.[1]?.trim() ?? (resource ? basename(resource) : f.replace(MD_SUFFIX_RE, ''))
|
|
248
|
+
const type = fm.match(OKF_TYPE_RE)?.[1]?.trim() ?? 'Source File'
|
|
249
|
+
return `| [${title}](${f}) | ${type} |`
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
// Без H1: frontmatter `title:` вже є top-level заголовком для MD025 (single-title) —
|
|
253
|
+
// H1 у тілі давав `MD025 Multiple top-level headings` на кожному згенерованому індексі.
|
|
254
|
+
const content = `---
|
|
255
|
+
type: Directory Index
|
|
256
|
+
title: ${sourceDirRel}
|
|
257
|
+
resource: ${sourceDirRel}/
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
| Файл | Тип |
|
|
261
|
+
|---|---|
|
|
262
|
+
${rows.join('\n')}
|
|
263
|
+
`
|
|
264
|
+
const indexPath = join(docsAbsDir, 'index.md')
|
|
265
|
+
writeFileSync(indexPath, content)
|
|
266
|
+
spawnSync('oxfmt', [indexPath], { stdio: 'ignore' })
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Повідомлення про дострокову зупинку батчу: systemic-abort (середовище впало) або
|
|
271
|
+
* м'який дедлайн рунга fix-pipeline. В обох випадках зроблене лишилось на диску
|
|
272
|
+
* (свіжі CRC) — наступний прогін підбирає решту.
|
|
273
|
+
* @param {{ aborted: boolean, deadlineHit: boolean, done: number, total: number }} state стан зупинки
|
|
274
|
+
* @returns {void}
|
|
275
|
+
*/
|
|
276
|
+
function reportEarlyStop({ aborted, deadlineHit, done, total }) {
|
|
277
|
+
if (aborted) {
|
|
278
|
+
console.error(
|
|
279
|
+
`\n✗ doc-files: ${SYSTEMIC_ABORT_STREAK} systemic-збої підряд (omlx memory-guard / сервер) — abort на ${done}/${total}.\n Звільни RAM або перезапусти omlx і повтори — зроблене лишилось, решта підбереться за CRC.`
|
|
280
|
+
)
|
|
281
|
+
}
|
|
282
|
+
if (deadlineHit) {
|
|
283
|
+
console.log(
|
|
284
|
+
`\n⏸ doc-files: м'який дедлайн рунга — зупинка на ${done}/${total}; зроблене лишилось (свіжі CRC), решту підбере наступний rung/прогін.`
|
|
285
|
+
)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Підсумковий звіт прогону у stdout.
|
|
291
|
+
* @param {{ ok: number, degraded: number, err: number, errors: string[], skipped: string[] }} stats статистика
|
|
292
|
+
* @returns {void}
|
|
293
|
+
*/
|
|
294
|
+
function reportStats(stats) {
|
|
295
|
+
console.log(
|
|
296
|
+
`\n${'─'.repeat(50)}\n✓ OK: ${stats.ok} ⚠ degraded: ${stats.degraded} ✗ Err: ${stats.err} ⊘ Skip: ${stats.skipped.length}`
|
|
297
|
+
)
|
|
298
|
+
if (stats.errors.length > 0) {
|
|
299
|
+
console.log('Помилки:')
|
|
300
|
+
for (const e of stats.errors) console.log(` - ${e}`)
|
|
301
|
+
}
|
|
302
|
+
if (stats.skipped.length > 0) {
|
|
303
|
+
console.log('Пропущено (permanent — завеликий контекст / модель відсутня):')
|
|
304
|
+
for (const e of stats.skipped) console.log(` - ${e}`)
|
|
305
|
+
}
|
|
306
|
+
if (stats.degraded > 0) {
|
|
307
|
+
console.log('Degraded-доки автоматично доретраюються наступним `gen` (один раз на версію джерела).')
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Видаляє сирітські доки (source-файл не існує) і оновлює/прибирає index.md.
|
|
313
|
+
* Якщо після видалення в docs/-директорії лишились тільки index.md або нічого — очищує її.
|
|
314
|
+
* @param {string} root абсолютний корінь
|
|
315
|
+
* @returns {number} кількість видалених doc-файлів
|
|
316
|
+
*/
|
|
317
|
+
export function purgeOrphanedDocs(root) {
|
|
318
|
+
const orphans = scanOrphanedDocs(root)
|
|
319
|
+
if (orphans.length === 0) return 0
|
|
320
|
+
let deleted = 0
|
|
321
|
+
const docsDirs = new Set()
|
|
322
|
+
for (const docRel of orphans) {
|
|
323
|
+
try {
|
|
324
|
+
unlinkSync(join(root, docRel))
|
|
325
|
+
docsDirs.add(dirname(join(root, docRel)))
|
|
326
|
+
deleted++
|
|
327
|
+
} catch {
|
|
328
|
+
// race condition або вже видалено — ігноруємо
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
for (const docsAbsDir of docsDirs) {
|
|
332
|
+
if (!existsSync(docsAbsDir)) continue
|
|
333
|
+
const remaining = readdirSync(docsAbsDir)
|
|
334
|
+
const docFiles = remaining.filter(f => f.endsWith('.md') && f !== 'index.md')
|
|
335
|
+
if (docFiles.length === 0) {
|
|
336
|
+
// Лише index.md або порожня директорія — прибираємо повністю
|
|
337
|
+
const indexPath = join(docsAbsDir, 'index.md')
|
|
338
|
+
if (existsSync(indexPath)) unlinkSync(indexPath)
|
|
339
|
+
try {
|
|
340
|
+
rmdirSync(docsAbsDir)
|
|
341
|
+
} catch {
|
|
342
|
+
/* не порожня — пропускаємо */
|
|
343
|
+
}
|
|
344
|
+
} else {
|
|
345
|
+
generateDirIndex(docsAbsDir, root)
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return deleted
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* `doc-files gen` — згенерувати документацію для застарілих/відсутніх док.
|
|
353
|
+
* @param {string[]} argv аргументи після назви субкоманди
|
|
354
|
+
* @returns {Promise<number>} exit-код: 0 — без помилок; 1 — помилки/фейл preflight; 2 — systemic-abort
|
|
355
|
+
*/
|
|
356
|
+
export function runDocFilesGenCli(argv) {
|
|
357
|
+
const root = resolveRoot(argv)
|
|
358
|
+
const { from, limit, overwrite } = parseGenArgs(argv)
|
|
359
|
+
|
|
360
|
+
// Видаляємо orphan-доки до генерації (незалежно від наявності stale)
|
|
361
|
+
const deleted = purgeOrphanedDocs(root)
|
|
362
|
+
if (deleted > 0) {
|
|
363
|
+
console.log(`🗑 doc-files: видалено ${deleted} сирітських доки(ів)`)
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const all = scanForDocFiles(root)
|
|
367
|
+
// Рукописні доки (docPath існує без docgen:-frontmatter) — чужі: без --overwrite не
|
|
368
|
+
// чіпаємо і попереджаємо, щоб перезапис людського змісту не пройшов мовчки.
|
|
369
|
+
const foreign = all.filter(f => f.foreign)
|
|
370
|
+
if (foreign.length > 0 && !overwrite) {
|
|
371
|
+
console.warn(
|
|
372
|
+
`⚠ doc-files: ${foreign.length} рукописна(их) дока(и) без docgen-frontmatter — пропускаю (перезапис лише з --overwrite):`
|
|
373
|
+
)
|
|
374
|
+
for (const f of foreign) console.warn(` - ${f.docPath}`)
|
|
375
|
+
}
|
|
376
|
+
const targets = selectTargets(root, all, { overwrite }).slice(from, from + limit)
|
|
377
|
+
|
|
378
|
+
if (targets.length === 0) {
|
|
379
|
+
if (deleted === 0) {
|
|
380
|
+
console.log('✓ doc-files: усі файлові доки свіжі й не-degraded. Нічого генерувати.')
|
|
381
|
+
}
|
|
382
|
+
return 0
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
return runGenerationBatch(targets, root, {
|
|
386
|
+
headline: `📋 doc-files: до генерації ${targets.length} файл(ів)${modeSuffix({ overwrite })}`
|
|
387
|
+
})
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Спільне ядро генерації: preflight локального бекенда → послідовний прогін
|
|
392
|
+
* `targets` через `generateOne` з circuit-breaker'ом (K systemic-збоїв підряд →
|
|
393
|
+
* abort) → підсумковий звіт. Перевикористовують і батч-CLI (`runDocFilesGenCli`),
|
|
394
|
+
* і opportunistic lint-крок doc-files (scoped-набір змінених файлів).
|
|
395
|
+
*
|
|
396
|
+
* `deadlineAt` (epoch ms): м'який дедлайн fix-pipeline — перед стартом КОЖНОГО
|
|
397
|
+
* наступного файлу (перший стартує завжди) батч звіряється з дедлайном і, коли час
|
|
398
|
+
* вийшов, завершується штатно з частковим прогресом. Зроблене записано по одному
|
|
399
|
+
* файлу (durable, свіжий CRC) — наступний прогін підбирає решту за CRC.
|
|
400
|
+
* @param {Array<object>} targets елементи scanForDocFiles (sourcePath/docPath)
|
|
401
|
+
* @param {string} root абсолютний корінь
|
|
402
|
+
* @param {{ headline?: string, model?: string, tier?: string, deadlineAt?: number|null }} [opts] headline — рядок-шапка прогону у stdout; model/tier — override моделі і її типу (інакше DEFAULT_LOCAL_MODEL); deadlineAt — м'який дедлайн (epoch ms)
|
|
403
|
+
* @returns {Promise<number>} 0 — без помилок; 1 — фейл preflight або є помилки; 2 — systemic-abort
|
|
404
|
+
*/
|
|
405
|
+
export async function runGenerationBatch(targets, root, opts = {}) {
|
|
406
|
+
const { headline } = opts
|
|
407
|
+
if (!opts.model && !DEFAULT_LOCAL_MODEL) {
|
|
408
|
+
console.error('✗ doc-files: локальну модель не задано (N_LOCAL_MIN_MODEL)')
|
|
409
|
+
return 1
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (headline) console.log(headline)
|
|
413
|
+
const stats = { ok: 0, degraded: 0, err: 0, errors: [], skipped: [] }
|
|
414
|
+
|
|
415
|
+
// ProgressReporter (канон scripts.mdc): бар по файлах лише в TTY; не-TTY лишає
|
|
416
|
+
// поточні append-рядки [done/total] без дубльованого ⏱-зведення.
|
|
417
|
+
const isTTY = process.stdout.isTTY === true
|
|
418
|
+
const reporter = isTTY
|
|
419
|
+
? createProgressReporter({
|
|
420
|
+
total: targets.length,
|
|
421
|
+
log: s => process.stdout.write(s),
|
|
422
|
+
isTTY,
|
|
423
|
+
unitLabel: 'файлів',
|
|
424
|
+
withFixed: false
|
|
425
|
+
})
|
|
426
|
+
: null
|
|
427
|
+
const emit = reporter ? reporter.log : undefined
|
|
428
|
+
|
|
429
|
+
let done = 0
|
|
430
|
+
let systemicStreak = 0
|
|
431
|
+
let aborted = false
|
|
432
|
+
let deadlineHit = false
|
|
433
|
+
try {
|
|
434
|
+
for (const file of targets) {
|
|
435
|
+
// М'який дедлайн (fix-pipeline): не стартуємо наступний файл після дедлайну.
|
|
436
|
+
if (deadlineReached(opts.deadlineAt, done)) {
|
|
437
|
+
deadlineHit = true
|
|
438
|
+
break
|
|
439
|
+
}
|
|
440
|
+
done++
|
|
441
|
+
reporter?.concernStart(file.sourcePath)
|
|
442
|
+
const status = await generateOne(file, root, { done, total: targets.length }, stats, {
|
|
443
|
+
model: opts.model,
|
|
444
|
+
tier: opts.tier,
|
|
445
|
+
emit
|
|
446
|
+
})
|
|
447
|
+
reporter?.concernDone(file.sourcePath)
|
|
448
|
+
// Circuit-breaker: K systemic-збоїв підряд → негайний abort (середовище впало,
|
|
449
|
+
// решта файлів так само згорить). Будь-який не-systemic результат скидає лічильник.
|
|
450
|
+
if (status === 'systemic') {
|
|
451
|
+
if (++systemicStreak >= SYSTEMIC_ABORT_STREAK) {
|
|
452
|
+
aborted = true
|
|
453
|
+
break
|
|
454
|
+
}
|
|
455
|
+
} else {
|
|
456
|
+
systemicStreak = 0
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
} finally {
|
|
460
|
+
reporter?.stop()
|
|
461
|
+
}
|
|
462
|
+
reportEarlyStop({ aborted, deadlineHit, done, total: targets.length })
|
|
463
|
+
|
|
464
|
+
reportStats(stats)
|
|
465
|
+
|
|
466
|
+
// Оновлюємо index.md у кожній docs/-директорії, якої торкнувся цей батч
|
|
467
|
+
const docsDirs = new Set(targets.map(f => dirname(join(root, f.docPath))))
|
|
468
|
+
for (const docsAbsDir of docsDirs) {
|
|
469
|
+
if (existsSync(docsAbsDir)) generateDirIndex(docsAbsDir, root)
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (aborted) return 2
|
|
473
|
+
return stats.err > 0 ? 1 : 0
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* `doc-files stamp` — детерміновано (пере)штампувати frontmatter `source`+`crc`
|
|
478
|
+
* у НАЯВНИХ доках без виклику LLM. Для міграції док, які ще не мають CRC.
|
|
479
|
+
* Поля `model`, `tier` та якості (`score`/`issues`/`judgeModel`) при цьому зберігаються
|
|
480
|
+
* з наявного frontmatter.
|
|
481
|
+
* @param {string[]} argv аргументи після назви субкоманди
|
|
482
|
+
* @returns {number} exit-код: 0 — успіх
|
|
483
|
+
*/
|
|
484
|
+
export function runDocFilesStampCli(argv) {
|
|
485
|
+
const root = resolveRoot(argv)
|
|
486
|
+
let stamped = 0
|
|
487
|
+
for (const file of scanForDocFiles(root)) {
|
|
488
|
+
const docAbs = join(root, file.docPath)
|
|
489
|
+
if (!existsSync(docAbs)) continue
|
|
490
|
+
const sourceAbs = join(root, file.sourcePath)
|
|
491
|
+
const crc = crc32(readFileSync(sourceAbs))
|
|
492
|
+
const md = readFileSync(docAbs, 'utf8')
|
|
493
|
+
const { score, issues, judgeModel } = readDocQuality(docAbs)
|
|
494
|
+
const model = readDocModel(docAbs)
|
|
495
|
+
const tier = readDocTier(docAbs)
|
|
496
|
+
const quality = score === null ? null : { score, issues, ...(judgeModel && { judge: { model: judgeModel } }) }
|
|
497
|
+
writeFileSync(docAbs, stampDoc(md, file.sourcePath, crc, quality, model, tier))
|
|
498
|
+
stamped++
|
|
499
|
+
}
|
|
500
|
+
console.log(`✓ doc-files stamp: оновлено frontmatter у ${stamped} доці(ах).`)
|
|
501
|
+
|
|
502
|
+
// Після stamp — оновити index.md у всіх docs/-директоріях
|
|
503
|
+
const docsDirs = new Set(
|
|
504
|
+
scanForDocFiles(root)
|
|
505
|
+
.map(f => dirname(join(root, f.docPath)))
|
|
506
|
+
.filter(d => existsSync(d))
|
|
507
|
+
)
|
|
508
|
+
for (const docsAbsDir of docsDirs) generateDirIndex(docsAbsDir, root)
|
|
509
|
+
|
|
510
|
+
return 0
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
if (isRunAsCli(import.meta.url)) {
|
|
514
|
+
const [sub, ...rest] = process.argv.slice(2)
|
|
515
|
+
const argv = sub === 'gen' || sub === 'stamp' ? rest : process.argv.slice(2)
|
|
516
|
+
process.exitCode = sub === 'stamp' ? runDocFilesStampCli(argv) : await runDocFilesGenCli(argv)
|
|
517
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: main.mjs
|
|
4
|
+
resource: npm/rules/doc-files/docgen-gen/main.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: bef08f19
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Огляд
|
|
11
|
+
|
|
12
|
+
Огляд
|
|
13
|
+
Створює технічну документацію шляхом аналізу вихідного коду, генерації тексту, оцінки його якості та управління позиціонуванням захищеного блоку «Призначення» у фінальному документі. (abie.mdc)
|
|
14
|
+
|
|
15
|
+
Поведінка
|
|
16
|
+
splitProtected відокремлює захищений блок «Призначення» від основного вмісту документа, надаючи його тіло та текст без цього блоку.
|
|
17
|
+
insertProtected поміщає захищений блок «Призначення» одразу після основного заголовка документа, якщо надано його тіло.
|
|
18
|
+
scoreDoc оцінює згенерований документ за заданими критеріями, визначаючи його якість та реєструючи проблеми.
|
|
19
|
+
DEFAULT_LOCAL_MODEL встановлює модель, яку використовувати для генерації документа, якщо не вказано іншу.
|
|
20
|
+
generateDoc створює повний технічний документ з вихідного файлу, включаючи вихідну оцінку якості.
|
|
21
|
+
|
|
22
|
+
## Поведінка
|
|
23
|
+
|
|
24
|
+
splitProtected відокремлює захищений блок «Призначення» від основного вмісту документа, повертаючи його тіло та текст без цього блоку.
|
|
25
|
+
insertProtected розміщує захищений блок «Призначення» одразу після основного заголовка документа, якщо його тіло було надано.
|
|
26
|
+
scoreDoc оцінює згенерований документ за набором детермінованих правил (generic-огляд, коротка поведінка, галюцинації про кеш, витік службових імен, анкор-покриття, суржик) і реєструє коди проблем. Правило R8 — refusal/чат-філер («Я готовий писати…», «Надайте мені код…», через пре-гейт docgen-judge): форсує degraded незалежно від структурної оцінки, тож LLM-суддя на такому змісті не викликається; захищене людське «Призначення» з перевірки виключене.
|
|
27
|
+
DEFAULT_LOCAL_MODEL визначає модель за замовчуванням для генерації документа, якщо не вказано інше.
|
|
28
|
+
generateDoc створює повний технічний документ з вихідного файлу, включаючи детерміновану оцінку якості; для непідтримуваних структур (one-shot шлях) оцінка не застосовується, але refusal-пре-гейт діє і там — філер отримує score 0 і позначку degraded, щоб доретрай батчу підібрав файл.
|
|
29
|
+
|
|
30
|
+
## Публічний API
|
|
31
|
+
|
|
32
|
+
splitProtected — витягує тіло захищеної секції «Призначення» та повертає документ без неї.
|
|
33
|
+
insertProtected — повертає захищений блок у фіксовану позицію одразу після заголовка документа.
|
|
34
|
+
scoreDoc — детермінований скоринг документа (0 токенів) проти факт-листа: оцінка 0–100 і коди проблем.
|
|
35
|
+
DEFAULT_LOCAL_MODEL — модель генерації за замовчуванням (env-конфігурована; без неї preflight фейлить гучно).
|
|
36
|
+
generateDoc — головний вхід: джерело → md-дока з оцінкою якості, best-of-2 повтором і опційним семантичним суддею.
|
|
37
|
+
|
|
38
|
+
## Гарантії поведінки
|
|
39
|
+
|
|
40
|
+
- Кешує результати в межах одного прогону.
|