@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,375 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Архітектурна документація продукту — Markdown як джерело істини; рекомендований стек arc42 + Diátaxis + ADR (MADR v4, формат описаний у правилі `adr`) + C4 як набір нотацій; гібридна модель manual + autogen-зон, що регенеруються з accepted ADR; Zed + marksman LSP як viewer без site-generator-а, portable subset (CommonMark + GFM + Mermaid + KaTeX), collapsible engineer-блоки через нативний `<details>`; рекомендоване VSCode-розширення `arr.marksman` для контрибʼюторів поза Zed; `.marksman.toml` авто-створюється у корені проєкту з canonical baseline
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
version: '3.2'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Архітектурна документація проєкту живе у Markdown поряд із кодом — це **джерело істини**, з якого LLM-агент і людина читають намір системи перед будь-якою зміною коду. Правила нижче — не оформлення, а робочий процес: який стек використовуємо, як зберігаємо рішення, як автоматично перегенеровуємо проекції з ADR і як рендеримо для змішаної аудиторії (менеджери + інженери + ops). Формат самих ADR-файлів — MADR v4.0.0 minimal — описаний у правилі **`adr`** (`npm/rules/adr/adr.mdc`).
|
|
8
|
+
|
|
9
|
+
## Markdown як джерело істини
|
|
10
|
+
|
|
11
|
+
Уся ключова інформація про проєкт — архітектура, рішення (ADR), тести й документація — зберігається у `.md`/`.mdc`-файлах і є **офіційним джерелом істини**. Це єдиний спосіб тримати знання разом із кодом — версійно, в одному PR і доступно для агентів. Якщо щось важливе про систему існує лише у Confluence/Notion/месенджері — для проєкту цього **немає**.
|
|
12
|
+
|
|
13
|
+
## Специфікація як джерело істини (Spec-as-Source)
|
|
14
|
+
|
|
15
|
+
У AI-native розробці первинним артефактом, який підтримують інженери, є **специфікація**, а не кодова база. Код — похідний артефакт, «будівельне риштування», яке агент генерує, верифікує або повністю відновлює зі специфікації. Якщо поведінка системи має змінитися — **спочатку оновлюємо специфікацію (arc42-розділ, ADR, опис компонента), і лише потім** агент генерує відповідний код. Зворотний порядок («код вже написаний, доку напишемо потім») перетворює специфікацію на декорацію.
|
|
16
|
+
|
|
17
|
+
## Тест на повне відтворення (Rebuild Test)
|
|
18
|
+
|
|
19
|
+
Документація вважається повною лише тоді, коли проходить бінарний тест: якщо видалити теку `src/`, відкрити нову LLM-сесію з чистим контекстом і дати агенту доступ лише до `.md`-файлів — агент має **відтворити робочу кодову базу**. Архітектурні збої (агент не знає структуру тек), інтеграційні (неописані міжсервісні контракти), падіння юніт-тестів (неописана бізнес-логіка) — це не «складність задачі», а **прогалини документації**, які треба заповнити у тому ж PR.
|
|
20
|
+
|
|
21
|
+
## Ефективність токенів і чистий Markdown
|
|
22
|
+
|
|
23
|
+
Вікно контексту LLM обмежене, а якість міркування деградує в міру його заповнення (ефект «Lost in the Middle»). Тому документація **очищається від HTML-розмітки, CSS-класів, навігаційних обгорток** і всього, що не несе семантичного навантаження. Чистий Markdown замість HTML економить 80–90 % токенів (≈16 000 → 1 600 на сторінку), що прямо впливає на точність згенерованого коду і знижує вартість API. Жодних `<div>`/`<span>`/класів у тілі `.md`/`.mdc`. Єдиний виняток — HTML-коментарі-маркери AUTOGEN-зон, які не рендеряться у viewer і несуть службову інформацію для генератора (`<!-- AUTOGEN:start ... -->`).
|
|
24
|
+
|
|
25
|
+
## Контекстна незалежність розділів
|
|
26
|
+
|
|
27
|
+
RAG витягує **фрагменти**, не цілі документи. Тому кожен розділ має сенс **без сусіднього тексту**. Заборонено: «як було згадано вище», «ця змінна», «попередній метод», «той самий сервіс». Замість цього — щоразу явно повторюємо назву сутності: «автентифікація OAuth 2.0», «функція `calculateTotal()`», «контейнер `api-gateway`». Коли агент отримає лише цей фрагмент, у нього має бути повний словник для коректної генерації.
|
|
28
|
+
|
|
29
|
+
## Docs-as-Code
|
|
30
|
+
|
|
31
|
+
Документація живе у Git поруч із кодом, проходить **той самий Code Review**, версіонується і автоматично перевіряється у CI (лінтери Markdown, валідатори посилань, `npx @7n/rules fix`). Биті посилання й документація, що «не компілюється», — **блокуючий баг**, не косметика.
|
|
32
|
+
|
|
33
|
+
## Трасування як документація недетермінованої поведінки
|
|
34
|
+
|
|
35
|
+
Для компонентів, де рішення приймає нейромережа або складна евристика, класичної форми «вхід X → вихід Y» **недостатньо** — поведінка недетермінована. Джерелом істини стає **пайплайн логування й трасування**: які інструменти використав агент, який контекст мав, чому ухвалив це рішення. У описі компонента такого типу — посилання на дашборд/storage трасувань обов'язкове нарівні з посиланнями на тести.
|
|
36
|
+
|
|
37
|
+
## Рекомендований стек
|
|
38
|
+
|
|
39
|
+
Беремо **завжди**:
|
|
40
|
+
|
|
41
|
+
- **arc42** — скелет документа архітектури. 12 розділів із природним розподілом аудиторій: 1-3 (Introduction, Constraints, Context) — менеджерська проза, 5-9 (Building Blocks, Runtime, Deployment, Crosscutting, Decisions) — інженерні. Розділ 9 «Architecture Decisions» — індекс ADR.
|
|
42
|
+
- **Diátaxis** — мета-структура сайту документації: tutorials / how-to / reference / explanation. arc42 живе в `explanation/`. Для більшості продуктів tutorials опціональні; реально потрібні explanation + reference + how-to.
|
|
43
|
+
- **ADR (MADR v4.0.0 minimal)** — append-only event log архітектурних рішень. Формат, фази capture/normalize, Stop-hook автоматика описані у правилі **`adr`**. Clean ADR-файл — `docs/adr/<slug>.md` без frontmatter, з англомовними MADR-заголовками і `**Status:** Accepted` / `**Date:** YYYY-MM-DD` рядками. Це єдине джерело правди для регенерації проекцій.
|
|
44
|
+
- **C4 model** — як набір нотацій для діаграм усередині arc42: контекстна (C4 рівень 1) і контейнерна (рівень 2) у `explanation/architecture.md`, компонентна (рівень 3) — на сторінках компонентів. Не самостійна метамодель, а інструмент візуалізації.
|
|
45
|
+
|
|
46
|
+
Доповнюємо **під domain**:
|
|
47
|
+
|
|
48
|
+
- **DDD Context Maps** — коли є >1 bounded context (типово для multi-agent: agents, orchestration, memory, tooling). Одна Mermaid-діаграма в `explanation/architecture.md`, ховається під `<details><summary><strong>Engineer:</strong> Context Map</summary>`.
|
|
49
|
+
- **EventModeling** — для event-driven систем (агентські pipeline, CQRS, Event Sourcing). Структура: trigger → command → event → read model. Читається менеджером як наратив, інженером — як креслення.
|
|
50
|
+
- **Business Capability Map** — верхньорівневий manager-overview. Autogen через семантичну класифікацію accepted ADR за тематикою.
|
|
51
|
+
- **Wardley Map** — стратегічний артефакт для board/інвесторів. Manual, не autogen. Квартальне оновлення. Живе в `explanation/strategy.md`.
|
|
52
|
+
|
|
53
|
+
**Не використовуємо** для product docs:
|
|
54
|
+
|
|
55
|
+
- 4+1 View Model, Viewpoints & Perspectives — academic/enterprise, дублюють arc42.
|
|
56
|
+
- ISO/IEC/IEEE 42010 — мета-стандарт без шаблонів.
|
|
57
|
+
- UML повністю — беремо точково Mermaid (Sequence, Component, Deployment) всередині arc42.
|
|
58
|
+
- Service Blueprint, Value Stream Mapping, JTBD, Impact Mapping, User Story Mapping — planning/UX інструменти, не docs.
|
|
59
|
+
- EventStorming, Domain Storytelling — workshop-формати; артефакт з них конвертується в EventModeling або Context Map.
|
|
60
|
+
|
|
61
|
+
## Структура репозиторію
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
docs/
|
|
65
|
+
├── adr/
|
|
66
|
+
│ ├── <slug>.md # clean ADR-и (MADR v4 minimal, без frontmatter)
|
|
67
|
+
│ ├── YYMMDD-HHMM-<sid>.md # drafts (frontmatter session:/captured:/transcript:)
|
|
68
|
+
│ └── index.md # autogen — список accepted ADR за датою
|
|
69
|
+
├── explanation/ # Diátaxis: чому і що
|
|
70
|
+
│ ├── overview.md # Capability Map (autogen)
|
|
71
|
+
│ ├── architecture.md # arc42 + Context Map + EventModeling + C4 діаграми
|
|
72
|
+
│ ├── strategy.md # Wardley Map (MANUAL)
|
|
73
|
+
│ └── components/ # сторінки на компонент
|
|
74
|
+
├── reference/ # API, конфіги, схеми
|
|
75
|
+
├── how-to/ # runbooks, інтеграції
|
|
76
|
+
├── snapshots/ # періодичні зрізи
|
|
77
|
+
└── .docgen/
|
|
78
|
+
├── config.yaml
|
|
79
|
+
├── prompts/ # системні промпти LLM
|
|
80
|
+
└── manifest.json # реєстр зон, ADR-slug → зони
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Інших місць для архітектурних схем у репозиторії немає: розпорошення по підтеках сервісів ламає навігацію «від системи вглиб» і робить агентський аналіз перед зміною дорожчим. Структуру drafts і clean ADR у `docs/adr/` створює і підтримує автоматика правила **`adr`** — окремий формат тут не визначаємо.
|
|
84
|
+
|
|
85
|
+
## ADR як вхід проекцій
|
|
86
|
+
|
|
87
|
+
Регенератор працює **тільки з clean ADR** (`docs/adr/<slug>.md`, без frontmatter, з рядком `**Status:** Accepted`). Drafts (`YYMMDD-HHMM-*.md`) ігноруються — їх перетворить у clean ADR `normalize-decisions.sh` із правила `adr`.
|
|
88
|
+
|
|
89
|
+
Поля, які регенератор читає з clean ADR:
|
|
90
|
+
|
|
91
|
+
- **Slug** — ім'я файлу без `.md`, використовується як ідентифікатор у маркерах і `manifest.json`.
|
|
92
|
+
- **Status** — рядок `**Status:** Accepted` у тілі. ADR з іншим статусом (або без рядка) у проекції не потрапляє.
|
|
93
|
+
- **Date** — рядок `**Date:** YYYY-MM-DD`, для впорядкування і відображення у проекції.
|
|
94
|
+
- **Heading H1** — перший `#`-заголовок, як назва рішення.
|
|
95
|
+
- **Розділи MADR** — `## Context and Problem Statement`, `## Considered Options`, `## Decision Outcome`, `### Consequences`, `## More Information`. Для проекції зазвичай беруться Decision Outcome + Consequences.
|
|
96
|
+
- **`## Update YYYY-MM-DD`** — appended-секції у тому ж файлі. Враховуються як еволюція рішення в хронологічному порядку.
|
|
97
|
+
|
|
98
|
+
**Маршрутизація ADR → зони** робиться двома способами:
|
|
99
|
+
|
|
100
|
+
1. **Explicit** — у самій AUTOGEN-зоні в атрибуті `sources` перелічені slug-и: `sources="ланцюжок-запуску-abie,npm-publish-flow"`. Це єдиний робочий механізм у MADR v4 minimal (frontmatter `affects:` поля немає).
|
|
101
|
+
2. **Discovery** — семантичний індекс: ембеддинги розділів `## Context and Problem Statement` + `## Decision Outcome` кожного ADR; зона декларує тематику, регенератор підтягує top-K релевантних slug-ів. Використовується для оглядових проекцій (`overview.md`, Capability Map).
|
|
102
|
+
|
|
103
|
+
## Документація як derived state від ADR
|
|
104
|
+
|
|
105
|
+
Документація = **derived state** від ADR. Інженер ніколи не редагує autogen-тексти вручну — тільки через ADR. Якщо потрібно щось виправити в проекції — це означає, що або є accepted ADR, який треба еволюціонувати через `## Update YYYY-MM-DD` (механіка з правила `adr`), або є некоректний промпт у `docs/.docgen/prompts/`, або взагалі потрібен новий ADR.
|
|
106
|
+
|
|
107
|
+
## Гібрид manual + autogen
|
|
108
|
+
|
|
109
|
+
Реальні проєкти мають legacy docs, написані до появи ADR. Розв'язок — **зони** через HTML-коментарі (виживають у Markdown, не рендеряться у жодному MD viewer — ні в Zed built-in preview, ні на GitHub, ні в будь-якому майбутньому site-generator-і):
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
# User Service
|
|
113
|
+
|
|
114
|
+
User Service відповідає за автентифікацію та профілі.
|
|
115
|
+
*Цей абзац — manual, LLM не чіпає.*
|
|
116
|
+
|
|
117
|
+
<!-- AUTOGEN:start id="user-service-decisions" hash="sha256:a1b2c3..." sources="ланцюжок-запуску-abie,npm-publish-flow,oidc-pkce-flow" -->
|
|
118
|
+
## Ключові рішення
|
|
119
|
+
|
|
120
|
+
Сервіс працює на Bun runtime [npm-publish-flow]. Автентифікація — OIDC з PKCE
|
|
121
|
+
[oidc-pkce-flow]. Запуск організовано через [ланцюжок-запуску-abie].
|
|
122
|
+
<!-- AUTOGEN:end id="user-service-decisions" -->
|
|
123
|
+
|
|
124
|
+
## Історичний контекст
|
|
125
|
+
Сервіс виник у 2023 як частина моноліту...
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Типи зон:
|
|
129
|
+
|
|
130
|
+
- **`AUTOGEN`** — повністю від ADR, регенерується з нуля. Hash перевіряється строго.
|
|
131
|
+
- **`MANUAL`** (default — усе поза маркерами) — LLM не торкається. Опційно явні маркери `<!-- MANUAL:start id="..." -->` для документації наміру.
|
|
132
|
+
- **`MERGED`** — LLM отримує існуючий manual + ADR, робить узгоджене оновлення. Найризикованіший, на старті уникати.
|
|
133
|
+
|
|
134
|
+
**Backfill legacy:** поступово витягуйте архітектурні знання з manual-текстів у retroactive ADR. Не одразу — тільки коли торкаєтесь області. Природна еволюція: manual → новий accepted ADR (через звичайний capture-flow) → manual замінюється AUTOGEN-зоною з посиланням на slug.
|
|
135
|
+
|
|
136
|
+
## Manifest з інвертованим індексом
|
|
137
|
+
|
|
138
|
+
`docs/.docgen/manifest.json`:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"zones": {
|
|
143
|
+
"user-service-decisions": {
|
|
144
|
+
"file": "explanation/components/user-service.md",
|
|
145
|
+
"sources": ["ланцюжок-запуску-abie", "npm-publish-flow", "oidc-pkce-flow"],
|
|
146
|
+
"content_hash": "sha256:...",
|
|
147
|
+
"generated_at": "2026-05-17T10:32:00Z",
|
|
148
|
+
"generator_version": "v3"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"adr_index": {
|
|
152
|
+
"ланцюжок-запуску-abie": {
|
|
153
|
+
"affects_zones": ["user-service-decisions", "startup-overview"],
|
|
154
|
+
"status": "Accepted",
|
|
155
|
+
"date": "2026-04-12",
|
|
156
|
+
"updates": ["2026-05-03"]
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Інвертований індекс `adr_index` критичний: коли accepted ADR отримує `## Update YYYY-MM-DD`, регенератор миттєво знає, які зони ререндерити без сканування всіх файлів. Hash зони захищає від тихої перезаписки ручних правок: якщо вміст у файлі не збігається з hash у manifest — генератор зупиняється і вимагає рішення людини.
|
|
163
|
+
|
|
164
|
+
## Цикл оновлення
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
1. Інженер/менеджер читає docs/
|
|
168
|
+
2. Просить LLM: «хочу змінити X»
|
|
169
|
+
3. LLM:
|
|
170
|
+
a. знаходить релевантні clean ADR (за slug у sources зон + семантичним пошуком)
|
|
171
|
+
b. формулює draft-рішення (буде підхоплене capture-decisions.sh як ADR-чернетка)
|
|
172
|
+
c. показує impact: які зони зміняться після прийняття
|
|
173
|
+
4. Після завершення сесії capture-decisions.sh пише draft у docs/adr/
|
|
174
|
+
5. Коли поріг ADR_NORMALIZE_THRESHOLD досягнуто (або /n-adr-normalize вручну):
|
|
175
|
+
normalize-decisions.sh перетворює draft → clean ADR <slug>.md з **Status:** Accepted
|
|
176
|
+
6. Регенератор:
|
|
177
|
+
a. читає clean ADR з **Status:** Accepted (інші ігнорує)
|
|
178
|
+
b. для кожної AUTOGEN-зони збирає relevant ADR (sources= + discovery)
|
|
179
|
+
c. перевіряє hash зони — якщо контент != hash, STOP (хтось редагував вручну)
|
|
180
|
+
d. викликає LLM з промптом проекції
|
|
181
|
+
e. замінює вміст між маркерами, оновлює hash і adr_index у manifest
|
|
182
|
+
7. Валідатор (детермінований, без LLM)
|
|
183
|
+
8. Git commit з ADR + regenerated docs
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Full rebuild vs incremental:**
|
|
187
|
+
|
|
188
|
+
- **Full rebuild** (рекомендовано на старті): LLM отримує всі clean ADR зі `**Status:** Accepted` + шаблон — видає документ з нуля. Zero drift.
|
|
189
|
+
- **Incremental**: LLM отримує поточний doc + новий ADR (або `## Update`) — видає diff. Дешевше, але дрейф накопичується.
|
|
190
|
+
- **Компроміс**: incremental + періодичний full rebuild (раз на місяць або після N нових ADR).
|
|
191
|
+
|
|
192
|
+
## Viewer/editor: Zed + marksman LSP
|
|
193
|
+
|
|
194
|
+
Окремого site-generator-а **немає** — каталог `docs/` сам є інтерфейсом читання. Інженер відкриває `.md`-файл у Zed і одразу бачить рендер через built-in preview (`cmd+shift+m`). Між сторінками рухається через **`marksman`** LSP: `cmd+click` по `[link](file.md)` і `[[wiki-link]]`, автокомпліт заголовків, find-references, refactor-перейменування заголовків з оновленням посилань у всьому `docs/`.
|
|
195
|
+
|
|
196
|
+
`~/.config/zed/settings.json`:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"languages": {
|
|
201
|
+
"Markdown": {
|
|
202
|
+
"language_servers": ["marksman"],
|
|
203
|
+
"soft_wrap": "editor_width"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Деталі конфігурації `.marksman.toml` та VSCode-альтернативи — у відповідних секціях нижче.
|
|
210
|
+
|
|
211
|
+
**Portable-only синтаксис.** Усе, що пишемо в `docs/`, обмежене **CommonMark + GFM + Mermaid у fenced code (` ```mermaid `) + KaTeX (`$...$`) + нативний HTML5 `<details>`**. Заборонено:
|
|
212
|
+
|
|
213
|
+
- pymdownx admonitions (`!!! note`, `??? engineer`, `=== "tab"`)
|
|
214
|
+
- VitePress containers (`::: tip`, `::: details`)
|
|
215
|
+
- MDX/Astro-компоненти (`<MyComponent />`)
|
|
216
|
+
- Hugo shortcodes (`{{< youtube id >}}`)
|
|
217
|
+
- AsciiDoc-вкраплення, RST-директиви
|
|
218
|
+
|
|
219
|
+
Усе вище не рендериться у Zed built-in preview і ламає головний принцип: **«відкрив файл = побачив фінальний вигляд»**. Обмеження **forward-compatible**: portable subset рендериться у GitHub, MkDocs, VitePress, Antora — підключення збирача в майбутньому не потребує переписування контенту.
|
|
220
|
+
|
|
221
|
+
## Collapsible-блоки для змішаної аудиторії
|
|
222
|
+
|
|
223
|
+
Менеджер читає прозу зверху, інженер розгортає деталі. Реалізація — нативний HTML5 `<details>` / `<summary>`, що рендериться **скрізь**: Zed preview, GitHub, будь-який майбутній збирач. Жодних розширень парсера не треба.
|
|
224
|
+
|
|
225
|
+
```markdown
|
|
226
|
+
User Service автентифікує користувачів і керує профілями.
|
|
227
|
+
Підтримуємо OIDC-логін та email/password.
|
|
228
|
+
|
|
229
|
+
<details>
|
|
230
|
+
<summary><strong>Engineer:</strong> Технічна реалізація автентифікації</summary>
|
|
231
|
+
|
|
232
|
+
OIDC-сервер на Fastify з PKCE flow [oidc-pkce-flow].
|
|
233
|
+
Refresh-токени з rotation, TTL 30 днів, Redis storage.
|
|
234
|
+
|
|
235
|
+
</details>
|
|
236
|
+
|
|
237
|
+
Профілі зберігаються в основній БД, кешуються в Redis на 5 хв.
|
|
238
|
+
|
|
239
|
+
<details>
|
|
240
|
+
<summary><strong>Ops:</strong> Деталі кешу та інвалідації</summary>
|
|
241
|
+
|
|
242
|
+
Cache key: `user:profile:{userId}:v2`.
|
|
243
|
+
Інвалідація — NATS подія `user.profile.updated` [user-profile-events].
|
|
244
|
+
|
|
245
|
+
</details>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Конвенція маркера у `<summary>`:** перше слово — аудиторія з фіксованого словника (`Engineer:`, `Ops:`, `Security:`, `Manager:`), далі — описова назва. Це дає валідатору детермінований regex для перевірок типу «жоден `Engineer:`-блок не з'являється в manager-only проекціях».
|
|
249
|
+
|
|
250
|
+
**Технічні нюанси `<details>`:**
|
|
251
|
+
|
|
252
|
+
- порожній рядок до `<details>` і після `<summary>` обов'язковий — інакше Markdown-парсер не активує блочний рендер усередині
|
|
253
|
+
- за замовчуванням блок згорнутий; `<details open>` — розгорнутий
|
|
254
|
+
- візуальна типізація аудиторій робиться **через текст `<summary>`**, не через CSS — у Zed preview кастомні стилі недоступні
|
|
255
|
+
- `<details>` ≠ HTML-обгортка з правила «жодних `<div>`/`<span>`»: це **семантичний** HTML5-елемент, а не презентаційний; його token-cost мізерний
|
|
256
|
+
|
|
257
|
+
## Промпт для LLM-проекцій
|
|
258
|
+
|
|
259
|
+
Тримати у `docs/.docgen/prompts/projection.md` як артефакт першого класу — версіонується, ревʼюється, тестується на golden-наборі ADR. Скелет:
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
Ти пишеш документацію для змішаної аудиторії (менеджери + інженери).
|
|
263
|
+
|
|
264
|
+
Структура кожної секції:
|
|
265
|
+
1. 2-4 речення прози рівня менеджера: що це робить, яку цінність дає,
|
|
266
|
+
як пов'язано з іншими частинами продукту. Без технологій, версій, коду.
|
|
267
|
+
|
|
268
|
+
2. Технічні деталі — тільки всередині блоків:
|
|
269
|
+
<details>
|
|
270
|
+
<summary><strong>Engineer:</strong> Описова назва блоку</summary>
|
|
271
|
+
|
|
272
|
+
Код, конфіги, версії, посилання на ADR.
|
|
273
|
+
|
|
274
|
+
</details>
|
|
275
|
+
|
|
276
|
+
3. Operational деталі:
|
|
277
|
+
<details>
|
|
278
|
+
<summary><strong>Ops:</strong> Що моніторити та як реагувати</summary>
|
|
279
|
+
|
|
280
|
+
Метрики, алерти, runbook-кроки.
|
|
281
|
+
|
|
282
|
+
</details>
|
|
283
|
+
|
|
284
|
+
Правила:
|
|
285
|
+
- Якщо прибрати всі <details>-блоки, текст лишається зв'язним менеджерським документом.
|
|
286
|
+
- Перше слово у <summary> — аудиторія з фіксованого словника
|
|
287
|
+
(Engineer:/Ops:/Security:/Manager:), далі — описова назва
|
|
288
|
+
(наприклад «<strong>Engineer:</strong> Чому Percona, а не MariaDB»).
|
|
289
|
+
- Порожній рядок до і після вмісту <details> обов'язковий.
|
|
290
|
+
- Кожен факт з ADR маркуй [<slug>] всередині <details>-блоку — slug це ім'я clean ADR
|
|
291
|
+
без розширення (наприклад `[ланцюжок-запуску-abie]`).
|
|
292
|
+
- НЕ виходь за межі <!-- AUTOGEN:start --> ... <!-- AUTOGEN:end -->.
|
|
293
|
+
- ADR без рядка `**Status:** Accepted` ігноруй.
|
|
294
|
+
- Якщо в ADR є `## Update YYYY-MM-DD` секції — враховуй найсвіжіший стан рішення,
|
|
295
|
+
старі формулювання вважай застарілими.
|
|
296
|
+
- Заборонені framework-specific synaxes: !!! note, ??? engineer, ::: tip,
|
|
297
|
+
MDX-компоненти, Hugo shortcodes — тільки CommonMark + GFM + Mermaid + <details>.
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Типові поломки LLM і захист
|
|
301
|
+
|
|
302
|
+
| Проблема | Захист |
|
|
303
|
+
| ---------------------------- | ----------------------------------------------------------------------------------------- |
|
|
304
|
+
| Галюцинація деталей | Правило `[<slug>]` маркера + post-gen linter, що перевіряє існування `docs/adr/<slug>.md` |
|
|
305
|
+
| Втрата `## Update`-еволюції | Pre-process: збирати всі `## Update YYYY-MM-DD` у ADR, передавати у промпт як патчі |
|
|
306
|
+
| Дрейф термінології | `docs/glossary.md` як перший вхід у кожен промпт |
|
|
307
|
+
| Перенасичення контексту | Двостадійна генерація: спочатку summary кожного ADR (кеш), потім проекція |
|
|
308
|
+
| Inconsistency між проекціями | Cross-projection validator порівнює факти між документами |
|
|
309
|
+
|
|
310
|
+
## Валідатор (обов'язково)
|
|
311
|
+
|
|
312
|
+
Окремий детермінований прохід після регенерації, **без LLM**. Bun-скрипт на ~100-200 рядків, запускається як pre-commit hook:
|
|
313
|
+
|
|
314
|
+
- Усі `[<slug>]` посилання вказують на існуючі файли `docs/adr/<slug>.md` із рядком `**Status:** Accepted`
|
|
315
|
+
- Усі `AUTOGEN:start` мають парний `AUTOGEN:end` з тим самим `id`
|
|
316
|
+
- Hash у `manifest.json` відповідає фактичному контенту зон
|
|
317
|
+
- Жоден `<details>`-блок з `<summary>` що починається на `Engineer:` / `Ops:` / `Security:` не з'являється в manager-only проекціях
|
|
318
|
+
- Кожен `<details>` має оточуючі порожні рядки (інакше `<summary>`-вміст рендериться як plain HTML, не collapsible)
|
|
319
|
+
- У `docs/` немає заборонених framework-specific конструкцій: `!!! note`, `???`, `::: tip`, `::: details`, MDX-теги `<[A-Z][a-zA-Z]*`, Hugo shortcodes `{{<`
|
|
320
|
+
- Усі inter-doc посилання працюють для `marksman` LSP (відносні шляхи `[text](./other.md)` або `[[wiki-link]]`, не absolute URLs усередині `docs/`)
|
|
321
|
+
- Якщо в зоні згадано компонент — він є в `docs/glossary.md`
|
|
322
|
+
- ADR без `**Status:** Accepted` не потрапили у проекцію
|
|
323
|
+
|
|
324
|
+
Без валідатора накопичується тихий дрейф: посилання гниють, hash розходиться з контентом, термінологія дрейфує.
|
|
325
|
+
|
|
326
|
+
## Аналіз перед зміною
|
|
327
|
+
|
|
328
|
+
Перш ніж вносити зміни в код, агент **читає відповідні docs**: контекст, контейнери, компоненти тієї ділянки, до якої входить редагований код, плюс accepted ADR за тематикою області (`docs/adr/<slug>.md` зі `**Status:** Accepted`). Без цього кроку легко зламати приховані залежності між сервісами або «загубити» зовнішню інтеграцію, описану в `explanation/architecture.md`.
|
|
329
|
+
|
|
330
|
+
## Оновлення синхронно зі змінами
|
|
331
|
+
|
|
332
|
+
Кожна зміна, що впливає на архітектуру — нова інтеграція, новий компонент, перейменування, зміна напрямку залежності, видалення сервісу — **супроводжується новим ADR (або `## Update YYYY-MM-DD` у наявному) і регенерацією проекцій у тому ж PR**. Документація не оновлюється «потім» окремою задачею: розсинхрон між кодом і моделлю — найчастіша причина, чому архітектурні документи перестають читати. Capture/normalize flow з правила `adr` забезпечує саму появу ADR — регенерацію проекцій ініціює окремий hook (наприклад, post-merge або `/regen-docs`).
|
|
333
|
+
|
|
334
|
+
## Зв'язок із ADR
|
|
335
|
+
|
|
336
|
+
ADR (`docs/adr/<slug>.md`) — джерело правди для autogen-проекцій. Маршрутизація «ADR → зони, на які впливає» виконується через `sources="<slug>,<slug>"` атрибут у самій AUTOGEN-зоні та через семантичний discovery (ембеддинги розділів `## Context and Problem Statement` + `## Decision Outcome`). Поля `affects.components` у frontmatter немає за визначенням MADR v4 minimal — маршрутизація навмисно винесена у зону, а не вшита в ADR, щоб ADR лишався читабельним як автономний документ.
|
|
337
|
+
|
|
338
|
+
## Зв'язок із тестами
|
|
339
|
+
|
|
340
|
+
Кожен опис компонента в `explanation/components/<name>.md` має **посилання на відповідні тести** — інтеграційні, e2e або юніт залежно від рівня. Так перехід «компонент → як його перевіряємо» займає один клік, а не пошук по репозиторію. Для агентських компонентів додаткове посилання на storage трасувань — нарівні з тестами, бо без них недетермінована поведінка непідтверджена.
|
|
341
|
+
|
|
342
|
+
## Зв'язок із документацією
|
|
343
|
+
|
|
344
|
+
Архітектурні артефакти — частина **користувацької документації**, а не закритий артефакт для команди. Контекстна діаграма (C4 рівень 1) і контейнерна (рівень 2) живуть там, де читач шукає вступ у проєкт — у `explanation/architecture.md`, не у відокремленій теці «for-architects». Нативний `<details>`-блок дає collapsible-вигляд у будь-якому MD-viewer (Zed built-in preview, GitHub web UI, потенційний майбутній site-generator) без залежності від конкретного фреймворку — менеджер бачить прозу, інженер розгортає деталі.
|
|
345
|
+
|
|
346
|
+
## Зв'язок із `.cursor/rules`
|
|
347
|
+
|
|
348
|
+
`.cursor/rules/*.mdc` — джерело правди для **операційних правил** проєкту: як запускати лінт і тести, як оформлювати CHANGELOG, як версіонувати модулі, які прапорці передавати інструментам тощо. Архітектурна документація у `docs/` **не дублює** ці правила і не переказує їх своїми словами. Дублікат миттєво розходиться з оригіналом, ламає механіку automatic-перевірок (`npx @7n/rules fix`/`check`) і вимагає двох правок при кожній зміні — одна з них неминуче пропускається.
|
|
349
|
+
|
|
350
|
+
Замість дублювання — **відсилка** на конкретне правило через його ім'я у бектиках: «див. правило **`changelog`**», «див. **`n-lint`**», «деталі формату — у правилі **`adr`**». Відсилка веде читача (людину чи LLM-агента) до єдиного джерела істини; коли правило еволюціонує, документація лишається коректною без правки. Якщо `.cursor/rule` потребує доповнення або уточнення — оновлюй сам `.mdc`, а не копіюй його зміст у `docs/`.
|
|
351
|
+
|
|
352
|
+
## Інструменти
|
|
353
|
+
|
|
354
|
+
- **Claude Code** як runner — slash-команда `/regen-docs` або post-commit hook на зміни `docs/adr/**`
|
|
355
|
+
- **capture-decisions.sh** + **normalize-decisions.sh** — Stop-hooks створення ADR (керує правило `adr`)
|
|
356
|
+
- **gray-matter** на Bun — лише для парсингу draft frontmatter; clean ADR парситься regexp по `**Status:**` / `**Date:**`
|
|
357
|
+
- **Zed** як viewer/editor — built-in MD preview (`cmd+shift+m`) рендерить кожен файл без site-generator-а; `<details>` для collapsible-блоків
|
|
358
|
+
- **marksman** LSP як шар навігації — `cmd+click` по `[text](file.md)`/`[[wiki-link]]`, find-references, refactor-перейменування заголовків
|
|
359
|
+
- **Mermaid** для C4-діаграм, EventModeling, Context Maps — рендериться у Zed preview напряму з ` ```mermaid ` fenced code, без розширень
|
|
360
|
+
- **KaTeX** (опційно) — інлайн-математика `$...$` для метрик/формул; рендериться у Zed preview
|
|
361
|
+
- Site-generator (MkDocs Material / VitePress / Antora) — **не використовується**; portable subset гарантує, що його можна підключити пізніше без переписування контенту
|
|
362
|
+
|
|
363
|
+
## Query mode як бонус
|
|
364
|
+
|
|
365
|
+
Поверх проекцій — інтерактивний RAG над clean ADR. Інженер питає: «чому ми обрали Percona замість MariaDB?». LLM шукає по semantic index `Context and Problem Statement + Decision Outcome`, повертає `docs/adr/<slug>.md` з прямою цитатою. Корпус малий (десятки-сотні clean ADR після normalize) і структурований (фіксовані MADR-заголовки) — дешево й точно, без галюцинацій.
|
|
366
|
+
|
|
367
|
+
## Швидкий gate через conftest
|
|
368
|
+
|
|
369
|
+
Rego-перевірки, що запускаються через `conftest` у фазі `check`:
|
|
370
|
+
|
|
371
|
+
| Пакет | Що перевіряє |
|
|
372
|
+
| --------------------------- | -------------------------------------------------------------------- |
|
|
373
|
+
| `ci4.vscode_extensions` | `.vscode/extensions.json` містить `arr.marksman` у `recommendations` |
|
|
374
|
+
|
|
375
|
+
- [extensions.json.snippet.json](./vscode_extensions/template/extensions.json.snippet.json)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Workspace-маркер marksman LSP. У корені репо робить весь монорепо одним
|
|
2
|
+
# marksman-workspace — README.md і docs/ перехресно навігуються через
|
|
3
|
+
# [text](file.md) і [[wiki-link]]. Файли .mdc не індексуються — marksman
|
|
4
|
+
# дивиться лише на розширення нижче.
|
|
5
|
+
#
|
|
6
|
+
# Створюється правилом ci4 (npx @nitra/cursor fix ci4) із canonical baseline.
|
|
7
|
+
# Ручні правки не перетираються: повторні прогони ідемпотентні (no-op).
|
|
8
|
+
|
|
9
|
+
[core]
|
|
10
|
+
markdown.file_extensions = ["md", "markdown"]
|
|
11
|
+
|
|
12
|
+
# GitHub-Flavored Markdown (таблиці, todo, alerts, math) — наш portable subset.
|
|
13
|
+
markdown.glfm = true
|
|
14
|
+
|
|
15
|
+
[completion]
|
|
16
|
+
# Стиль резолву [[wiki-link]]:
|
|
17
|
+
# "file-stem" → [[oidc-pkce-flow]] резолвиться у docs/adr/oidc-pkce-flow.md
|
|
18
|
+
# "title-slug-ref" → резолв за slugified H1 заголовком
|
|
19
|
+
# Беремо file-stem: ADR-slug == ім'я файла, стабільний ідентифікатор у
|
|
20
|
+
# AUTOGEN sources, manifest, валідаторі. Заголовок може мінятися — посилання
|
|
21
|
+
# не ламається.
|
|
22
|
+
wiki.style = "file-stem"
|
|
23
|
+
|
|
24
|
+
[code_action]
|
|
25
|
+
# Code action "Insert/Update TOC" — корисно для довгих arc42-сторінок
|
|
26
|
+
# (architecture.md з 12 розділами).
|
|
27
|
+
toc.enable = true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: fix-marksman_config.mjs
|
|
4
|
+
resource: npm/rules/ci4/marksman_config/fix-marksman_config.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 39e3c9a4
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
tier: local-min
|
|
9
|
+
score: 100
|
|
10
|
+
issues: judge:inaccurate:0.99
|
|
11
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Огляд
|
|
15
|
+
|
|
16
|
+
Файл забезпечує наявність конфігурації Marksman у робочому середовищі, автоматично копіюючи канонічний базовий файл `.marksman.toml` без використання LLM, якщо конфігурація відсутня. Функція `patterns` надає набір правил для подальшого автоматичного виправлення (ci4.mdc).
|
|
17
|
+
|
|
18
|
+
## Поведінка
|
|
19
|
+
|
|
20
|
+
1. Визначається набір правил `patterns` для автоматичного виправлення конфігурації Marksman.
|
|
21
|
+
2. Перевіряється, чи відсутня конфігурація Marksman.
|
|
22
|
+
3. Якщо конфігурація відсутня, створюється файл конфігурації Marksman за допомогою копіювання канонічного базового файлу `ci4.mdc` у робочу директорію.
|
|
23
|
+
4. Фіксується, що файл конфігурації був створений із канонічного базового файлу `ci4.mdc`.
|
|
24
|
+
|
|
25
|
+
## Гарантії поведінки
|
|
26
|
+
|
|
27
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: main.mjs
|
|
4
|
+
resource: npm/rules/ci4/marksman_config/main.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: c34fa8be
|
|
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
|
+
Оновлений текст секції «overview» (як вимагається, без попередньої преамбули та згідно з інструкціями):
|
|
16
|
+
|
|
17
|
+
Це файловий модуль відповідає за забезпечення певної функціональної області системи. Він виконує аналіз даних у межах визначених логічних кордонів. У своїй поведінці він обов'язково включає маркери повідомлень згідно з `ci4.mdc`.
|
|
18
|
+
|
|
19
|
+
## Поведінка
|
|
20
|
+
|
|
21
|
+
1. Викликається функція main.
|
|
22
|
+
2. Перевіряється наявність канонічного baseline-файлу у шляху, відносно розташування поточного файлу.
|
|
23
|
+
3. Якщо baseline-файл не знайдено, видається повідомлення про помилку (ci4.mdc) та процес завершується з відповідним кодом виходу.
|
|
24
|
+
4. Перевіряється наявність цільового файлу .marksman.toml у корені проєкту.
|
|
25
|
+
5. Якщо цільовий файл існує, видається повідомлення про успіх, і процес завершується з кодом виходу 0.
|
|
26
|
+
6. Якщо цільовий файл не існує, канонічний baseline-файл копіюється у цільовий файл .marksman.toml у корені проєкту, і видається повідомлення про успіх (ci4.mdc).
|
|
27
|
+
|
|
28
|
+
## Гарантії поведінки
|
|
29
|
+
|
|
30
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T0-autofix для `ci4/marksman_config` — копіює canonical baseline `.marksman.toml` без LLM.
|
|
3
|
+
*/
|
|
4
|
+
import { copyFile } from 'node:fs/promises'
|
|
5
|
+
import { join } from 'node:path'
|
|
6
|
+
|
|
7
|
+
import { MARKSMAN_BASELINE_PATH, MARKSMAN_TARGET_FILENAME } from './main.mjs'
|
|
8
|
+
|
|
9
|
+
/** @type {import('../../../scripts/lib/lint-surface/types.mjs').T0Pattern[]} */
|
|
10
|
+
export const patterns = [
|
|
11
|
+
{
|
|
12
|
+
id: 'ci4-marksman-config-missing',
|
|
13
|
+
test: violations => violations.some(v => v.data?.kind === 'marksman-config-missing'),
|
|
14
|
+
apply: async (_violations, ctx) => {
|
|
15
|
+
const target = join(ctx.cwd, MARKSMAN_TARGET_FILENAME)
|
|
16
|
+
ctx.recordWrite?.(target)
|
|
17
|
+
await copyFile(MARKSMAN_BASELINE_PATH, target)
|
|
18
|
+
return {
|
|
19
|
+
touchedFiles: [target],
|
|
20
|
+
message: `${MARKSMAN_TARGET_FILENAME} створено з canonical baseline (ci4.mdc)`
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** @see ./docs/marksman_config.md */
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
|
+
import { dirname, join, relative } from 'node:path'
|
|
4
|
+
import { fileURLToPath } from 'node:url'
|
|
5
|
+
|
|
6
|
+
import { createViolationReporter } from '../../../scripts/lib/lint-surface/violation-reporter.mjs'
|
|
7
|
+
|
|
8
|
+
const HERE = dirname(fileURLToPath(import.meta.url))
|
|
9
|
+
export const MARKSMAN_BASELINE_PATH = join(HERE, 'data', 'marksman_config', 'marksman.baseline.toml')
|
|
10
|
+
export const MARKSMAN_TARGET_FILENAME = '.marksman.toml'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Перевіряє наявність `.marksman.toml` у корені; сигналить копіювання canonical baseline.
|
|
14
|
+
* @param {import('../../../scripts/lib/lint-surface/types.mjs').LintContext} ctx контекст лінту (cwd, репортер).
|
|
15
|
+
* @returns {import('../../../scripts/lib/lint-surface/types.mjs').LintResult} результат перевірки з pass/fail.
|
|
16
|
+
*/
|
|
17
|
+
export function lint(ctx) {
|
|
18
|
+
const cwd = ctx.cwd
|
|
19
|
+
const reporter = createViolationReporter(ctx)
|
|
20
|
+
|
|
21
|
+
if (!existsSync(MARKSMAN_BASELINE_PATH)) {
|
|
22
|
+
reporter.fail(`canonical baseline не знайдено (${MARKSMAN_BASELINE_PATH}) — перевстанови @7n/rules`)
|
|
23
|
+
return reporter.result()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const target = join(cwd, MARKSMAN_TARGET_FILENAME)
|
|
27
|
+
if (existsSync(target)) {
|
|
28
|
+
reporter.pass(`${MARKSMAN_TARGET_FILENAME} існує (${relative(cwd, target)})`)
|
|
29
|
+
return reporter.result()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
reporter.fail(`${MARKSMAN_TARGET_FILENAME} відсутній — T0 скопіює canonical baseline (ci4.mdc)`, {
|
|
33
|
+
reason: 'marksman-config-missing',
|
|
34
|
+
file: MARKSMAN_TARGET_FILENAME,
|
|
35
|
+
data: { kind: 'marksman-config-missing' }
|
|
36
|
+
})
|
|
37
|
+
return reporter.result()
|
|
38
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## Конфіг marksman LSP (`.marksman.toml`)
|
|
2
|
+
|
|
3
|
+
Правило перевіряє наявність `.marksman.toml` у корені проєкту. Якщо файл відсутній — автоматично створює його з canonical baseline, що постачається разом із пакетом (`js/data/marksman_config/marksman.baseline.toml`). Повторні прогони ідемпотентні: існуючий файл не перетирається, ручні правки зберігаються.
|
|
4
|
+
|
|
5
|
+
### Baseline-конфіг
|
|
6
|
+
|
|
7
|
+
Canonical baseline ([data/marksman_config/marksman.baseline.toml](./data/marksman_config/marksman.baseline.toml)) містить такі налаштування:
|
|
8
|
+
|
|
9
|
+
```toml
|
|
10
|
+
[core]
|
|
11
|
+
markdown.file_extensions = ["md", "markdown"]
|
|
12
|
+
markdown.glfm = true # GitHub-Flavored Markdown (таблиці, todo, alerts)
|
|
13
|
+
|
|
14
|
+
[completion]
|
|
15
|
+
wiki.style = "file-stem" # [[oidc-pkce-flow]] → docs/adr/oidc-pkce-flow.md
|
|
16
|
+
|
|
17
|
+
[code_action]
|
|
18
|
+
toc.enable = true # «Insert/Update TOC» для довгих arc42-сторінок
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Чому `file-stem`?** ADR-slug збігається з іменем файлу — стабільний ідентифікатор у AUTOGEN `sources`, `manifest.json` і валідаторі. Якщо заголовок ADR змінюється, посилання `[[wiki-link]]` не ламається. Без явного конфіга marksman використовує `title-slug-ref` і вимкнений GLFM — частина задокументованої навігації працювала б інакше.
|
|
22
|
+
|
|
23
|
+
### Поведінка перевірки
|
|
24
|
+
|
|
25
|
+
| Стан | Результат |
|
|
26
|
+
| ----------------------------- | -------------------------------------------------- |
|
|
27
|
+
| baseline-файл пакета відсутній | `fail` — перевстанови `@7n/rules` |
|
|
28
|
+
| `.marksman.toml` вже існує | `pass` — файл не чіпається |
|
|
29
|
+
| `.marksman.toml` відсутній | створює файл з baseline, `pass` |
|
|
30
|
+
|
|
31
|
+
Перевірка запускається як `check`-поверхня; `lint`-поверхні правило не має.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: fix-vscode_extensions.mjs
|
|
4
|
+
resource: npm/rules/ci4/vscode_extensions/fix-vscode_extensions.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 3353fe17
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
tier: local-min
|
|
9
|
+
score: 100
|
|
10
|
+
issues: best-of-2:retry-won,judge:inaccurate:0.98
|
|
11
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Огляд
|
|
15
|
+
|
|
16
|
+
Файл відповідає за ініціалізацію процесу корекції розширень VS Code. Він виконує корекцію, використовуючи визначені у `../../../scripts/lib/fix/vscode-ext-add.mjs` шаблони.
|
|
17
|
+
|
|
18
|
+
## Поведінка
|
|
19
|
+
|
|
20
|
+
1. Ініціалізує логіку для корекції VS Code розширень.
|
|
21
|
+
2. Використовує шаблони, визначені у `../../../scripts/lib/fix/vscode-ext-add.mjs`, для виконання корекції.
|
|
22
|
+
|
|
23
|
+
## Гарантії поведінки
|
|
24
|
+
|
|
25
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|