@sun-asterisk/sunlint 1.3.39 → 1.3.41
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/config/rules/rules-registry-generated.json +134 -108
- package/core/rule-selection-service.js +11 -0
- package/docs/GENERATED_FILES_QUICK_REFERENCE.md +96 -0
- package/docs/GENERATED_FILE_HANDLING_SUMMARY.md +152 -0
- package/docs/skills/CREATE_NEW_DART_RULE.md +161 -14
- package/origin-rules/dart-en.md +151 -163
- package/package.json +2 -1
- package/rules/dart/D002_dispose_resources/config.json +25 -0
- package/rules/dart/D003_prefer_widgets_over_methods/config.json +14 -0
- package/rules/dart/D004_avoid_shrinkwrap_listview/config.json +13 -0
- package/rules/dart/D005_limit_widget_nesting/config.json +13 -0
- package/rules/dart/D006_prefer_extracting_large_callbacks/config.json +25 -0
- package/rules/dart/D007_prefer_init_first_dispose_last/config.json +10 -0
- package/rules/dart/D008_avoid_long_functions/config.json +12 -0
- package/rules/dart/D009_limit_function_parameters/config.json +13 -0
- package/rules/dart/D010_limit_cyclomatic_complexity/config.json +12 -0
- package/rules/dart/D011_prefer_named_parameters/config.json +12 -0
- package/rules/dart/D012_prefer_named_boolean_parameters/config.json +9 -0
- package/rules/dart/D013_single_public_class/config.json +10 -0
- package/rules/dart/D014_unsafe_collection_access/config.json +10 -0
- package/rules/dart/D015_copywith_all_parameters/config.json +9 -0
- package/rules/dart/D016_project_should_have_tests/config.json +24 -0
- package/rules/dart/D017_pubspec_dependencies_review/config.json +23 -0
- package/rules/dart/D018_remove_commented_code/config.json +13 -0
- package/rules/dart/D019_avoid_single_child_multi_child_widget/config.json +21 -0
- package/rules/dart/D020_limit_if_else_branches/config.json +12 -0
- package/rules/dart/D021_avoid_negated_boolean_checks/config.json +14 -0
- package/rules/dart/D022_use_setstate_correctly/config.json +14 -0
- package/rules/dart/D023_avoid_unnecessary_method_overrides/config.json +13 -0
- package/rules/dart/D024_avoid_unnecessary_stateful_widget/config.json +9 -0
- package/rules/dart/D025_avoid_nested_conditional_expressions/config.json +9 -0
- package/skill-assets/sunlint-code-quality/AGENTS.md +80 -0
- package/skill-assets/sunlint-code-quality/SKILL.md +176 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C006-verb-noun-functions.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C013-no-dead-code.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C014-dependency-injection.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C017-no-constructor-logic.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C018-generic-errors.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C019-error-log-level.md +29 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C020-no-unused-imports.md +30 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C022-no-unused-variables.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C023-no-duplicate-names.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C024-centralize-constants.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C029-catch-log-root-cause.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C030-custom-error-classes.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C033-separate-data-access.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C035-error-context-logging.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C041-no-hardcoded-secrets.md +25 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C042-boolean-naming.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C052-controller-parsing.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C060-superclass-logic.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/C067-no-hardcoded-config.md +24 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S003-open-redirect.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S004-no-log-credentials.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S005-server-authorization.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S006-default-credentials.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S007-output-encoding.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S009-approved-crypto.md +37 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S010-csprng.md +32 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S011-encrypted-client-hello.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S012-secrets-management.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S013-tls-connections.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S016-no-sensitive-query-string.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S017-parameterized-queries.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S019-email-input-sanitization.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S020-eval-code-execution.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S022-context-escaping.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S023-dynamic-js-encoding.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S025-server-validation.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S026-tls-encryption.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S027-mtls-validation.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S028-upload-limits.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S029-csrf-protection.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S030-directory-browsing.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S031-secure-cookie-flag.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S032-httponly-cookie.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S033-samesite-cookie.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S034-host-prefix-cookie.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S035-app-hostnames.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S036-internal-file-paths.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S037-anti-cache-headers.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S039-tls-certificate-validation.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S041-logout-invalidation.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S042-long-lived-sessions.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S044-critical-changes-reauth.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S045-brute-force-protection.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S047-oauth-csrf-protection.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S048-oauth-redirect-validation.md +37 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S049-auth-code-expiry.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S050-token-entropy.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S051-password-length.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S052-otp-entropy.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S053-generic-error-messages.md +32 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S054-no-default-admin.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S055-content-type-validation.md +44 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S056-log-injection.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S057-synchronized-time.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/csharp/S058-ssrf-protection.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/go/C006-verb-noun-functions.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/go/C013-no-dead-code.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/go/C014-dependency-injection.md +85 -0
- package/skill-assets/sunlint-code-quality/rules/go/C017-no-constructor-logic.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/go/C018-generic-errors.md +63 -0
- package/skill-assets/sunlint-code-quality/rules/go/C019-error-log-level.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/go/C020-no-unused-imports.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/go/C022-no-unused-variables.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/go/C023-no-duplicate-names.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/go/C024-centralize-constants.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/go/C029-catch-log-root-cause.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/go/C030-custom-error-classes.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/go/C033-separate-data-access.md +68 -0
- package/skill-assets/sunlint-code-quality/rules/go/C035-error-context-logging.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/go/C041-no-hardcoded-secrets.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/go/C042-boolean-naming.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/go/C052-controller-parsing.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/go/C060-superclass-logic.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/go/C067-no-hardcoded-config.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/go/S003-open-redirect.md +80 -0
- package/skill-assets/sunlint-code-quality/rules/go/S004-no-log-credentials.md +66 -0
- package/skill-assets/sunlint-code-quality/rules/go/S005-server-authorization.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/go/S006-default-credentials.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/go/S007-output-encoding.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/go/S009-approved-crypto.md +63 -0
- package/skill-assets/sunlint-code-quality/rules/go/S010-csprng.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/go/S011-encrypted-client-hello.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/go/S012-secrets-management.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/go/S013-tls-connections.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/go/S016-no-sensitive-query-string.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/go/S017-parameterized-queries.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/go/S019-email-input-sanitization.md +44 -0
- package/skill-assets/sunlint-code-quality/rules/go/S020-eval-code-execution.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/go/S022-context-escaping.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/go/S023-dynamic-js-encoding.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/go/S025-server-validation.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/go/S026-tls-encryption.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/go/S027-mtls-validation.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/go/S028-upload-limits.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/go/S029-csrf-protection.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/go/S030-directory-browsing.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/go/S031-secure-cookie-flag.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/go/S032-httponly-cookie.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/go/S033-samesite-cookie.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/go/S034-host-prefix-cookie.md +44 -0
- package/skill-assets/sunlint-code-quality/rules/go/S035-app-hostnames.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/go/S036-internal-file-paths.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/go/S037-anti-cache-headers.md +43 -0
- package/skill-assets/sunlint-code-quality/rules/go/S039-tls-certificate-validation.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/go/S041-logout-invalidation.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/go/S042-long-lived-sessions.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/go/S044-critical-changes-reauth.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/go/S045-brute-force-protection.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/go/S047-oauth-csrf-protection.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/go/S048-oauth-redirect-validation.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/go/S049-auth-code-expiry.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/go/S050-token-entropy.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/go/S051-password-length.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/go/S052-otp-entropy.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/go/S053-generic-error-messages.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/go/S054-no-default-admin.md +43 -0
- package/skill-assets/sunlint-code-quality/rules/go/S055-content-type-validation.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/go/S056-log-injection.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/go/S057-synchronized-time.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/go/S058-ssrf-protection.md +70 -0
- package/skill-assets/sunlint-code-quality/rules/java/C006-verb-noun-functions.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/C013-no-dead-code.md +175 -0
- package/skill-assets/sunlint-code-quality/rules/java/C014-dependency-injection.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/java/C017-no-constructor-logic.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/java/C018-generic-errors.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/java/C019-error-log-level.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/java/C020-no-unused-imports.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/java/C022-no-unused-variables.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/java/C023-no-duplicate-names.md +37 -0
- package/skill-assets/sunlint-code-quality/rules/java/C024-centralize-constants.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/C029-catch-log-root-cause.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/java/C030-custom-error-classes.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/java/C033-separate-data-access.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/java/C035-error-context-logging.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/C041-no-hardcoded-secrets.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/java/C042-boolean-naming.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/java/C052-controller-parsing.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/java/C060-superclass-logic.md +32 -0
- package/skill-assets/sunlint-code-quality/rules/java/C067-no-hardcoded-config.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/java/S003-open-redirect.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/S004-no-log-credentials.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/S005-server-authorization.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/java/S006-default-credentials.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/java/S007-output-encoding.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/java/S009-approved-crypto.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/java/S010-csprng.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/S011-encrypted-client-hello.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/java/S012-secrets-management.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/java/S013-tls-connections.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/java/S016-no-sensitive-query-string.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/S017-parameterized-queries.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/java/S019-email-input-sanitization.md +32 -0
- package/skill-assets/sunlint-code-quality/rules/java/S020-eval-code-execution.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/java/S022-context-escaping.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/java/S023-dynamic-js-encoding.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/java/S025-server-validation.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/java/S026-tls-encryption.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/java/S027-mtls-validation.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/java/S028-upload-limits.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/java/S029-csrf-protection.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/java/S030-directory-browsing.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/S031-secure-cookie-flag.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/S032-httponly-cookie.md +31 -0
- package/skill-assets/sunlint-code-quality/rules/java/S033-samesite-cookie.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/java/S034-host-prefix-cookie.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/java/S035-app-hostnames.md +23 -0
- package/skill-assets/sunlint-code-quality/rules/java/S036-internal-file-paths.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/java/S037-anti-cache-headers.md +37 -0
- package/skill-assets/sunlint-code-quality/rules/java/S039-tls-certificate-validation.md +43 -0
- package/skill-assets/sunlint-code-quality/rules/java/S041-logout-invalidation.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/java/S042-long-lived-sessions.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/S044-critical-changes-reauth.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/java/S045-brute-force-protection.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/S047-oauth-csrf-protection.md +33 -0
- package/skill-assets/sunlint-code-quality/rules/java/S048-oauth-redirect-validation.md +25 -0
- package/skill-assets/sunlint-code-quality/rules/java/S049-auth-code-expiry.md +23 -0
- package/skill-assets/sunlint-code-quality/rules/java/S050-token-entropy.md +20 -0
- package/skill-assets/sunlint-code-quality/rules/java/S051-password-length.md +20 -0
- package/skill-assets/sunlint-code-quality/rules/java/S052-otp-entropy.md +23 -0
- package/skill-assets/sunlint-code-quality/rules/java/S053-generic-error-messages.md +21 -0
- package/skill-assets/sunlint-code-quality/rules/java/S054-no-default-admin.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/java/S055-content-type-validation.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/java/S056-log-injection.md +38 -0
- package/skill-assets/sunlint-code-quality/rules/java/S057-synchronized-time.md +35 -0
- package/skill-assets/sunlint-code-quality/rules/java/S058-ssrf-protection.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C006-verb-noun-functions.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C013-no-dead-code.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C014-dependency-injection.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C017-no-constructor-logic.md +68 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C018-generic-errors.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C019-error-log-level.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C020-no-unused-imports.md +44 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C022-no-unused-variables.md +39 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C023-no-duplicate-names.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C024-centralize-constants.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C029-catch-log-root-cause.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C030-custom-error-classes.md +72 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C033-separate-data-access.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C035-error-context-logging.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C041-no-hardcoded-secrets.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C042-boolean-naming.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C052-controller-parsing.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C060-superclass-logic.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/C067-no-hardcoded-config.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S003-open-redirect.md +66 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S004-no-log-credentials.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S005-server-authorization.md +75 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S006-default-credentials.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S007-output-encoding.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S009-approved-crypto.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S010-csprng.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S011-encrypted-client-hello.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S012-secrets-management.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S013-tls-connections.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S016-no-sensitive-query-string.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S017-parameterized-queries.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S019-email-input-sanitization.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S020-eval-code-execution.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S022-context-escaping.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S023-dynamic-js-encoding.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S025-server-validation.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S026-tls-encryption.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S027-mtls-validation.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S028-upload-limits.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S029-csrf-protection.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S030-directory-browsing.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S031-secure-cookie-flag.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S032-httponly-cookie.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S033-samesite-cookie.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S034-host-prefix-cookie.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S035-app-hostnames.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S036-internal-file-paths.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S037-anti-cache-headers.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S039-tls-certificate-validation.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S041-logout-invalidation.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S042-long-lived-sessions.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S044-critical-changes-reauth.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S045-brute-force-protection.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S047-oauth-csrf-protection.md +74 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S048-oauth-redirect-validation.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S049-auth-code-expiry.md +70 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S050-token-entropy.md +65 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S051-password-length.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S052-otp-entropy.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S053-generic-error-messages.md +66 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S054-no-default-admin.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S055-content-type-validation.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S056-log-injection.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S057-synchronized-time.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/kotlin/S058-ssrf-protection.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/php/C006-verb-noun-functions.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/php/C013-no-dead-code.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/php/C014-dependency-injection.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/php/C017-no-constructor-logic.md +68 -0
- package/skill-assets/sunlint-code-quality/rules/php/C018-generic-errors.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/php/C019-error-log-level.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/C020-no-unused-imports.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/php/C022-no-unused-variables.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/php/C023-no-duplicate-names.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/php/C024-centralize-constants.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/php/C029-catch-log-root-cause.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/php/C030-custom-error-classes.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/php/C033-separate-data-access.md +79 -0
- package/skill-assets/sunlint-code-quality/rules/php/C035-error-context-logging.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/C041-no-hardcoded-secrets.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/php/C042-boolean-naming.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/php/C052-controller-parsing.md +66 -0
- package/skill-assets/sunlint-code-quality/rules/php/C060-superclass-logic.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/C067-no-hardcoded-config.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/php/S003-open-redirect.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/php/S004-no-log-credentials.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/php/S005-server-authorization.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/php/S006-default-credentials.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/php/S007-output-encoding.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/php/S009-approved-crypto.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/php/S010-csprng.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/php/S011-encrypted-client-hello.md +41 -0
- package/skill-assets/sunlint-code-quality/rules/php/S012-secrets-management.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/php/S013-tls-connections.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/php/S016-no-sensitive-query-string.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/php/S017-parameterized-queries.md +44 -0
- package/skill-assets/sunlint-code-quality/rules/php/S019-email-input-sanitization.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/S020-eval-code-execution.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/php/S022-context-escaping.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/php/S023-dynamic-js-encoding.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/php/S025-server-validation.md +63 -0
- package/skill-assets/sunlint-code-quality/rules/php/S026-tls-encryption.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/php/S027-mtls-validation.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/php/S028-upload-limits.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/php/S029-csrf-protection.md +65 -0
- package/skill-assets/sunlint-code-quality/rules/php/S030-directory-browsing.md +40 -0
- package/skill-assets/sunlint-code-quality/rules/php/S031-secure-cookie-flag.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/php/S032-httponly-cookie.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/S033-samesite-cookie.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/php/S034-host-prefix-cookie.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/php/S035-app-hostnames.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/php/S036-internal-file-paths.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/php/S037-anti-cache-headers.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/php/S039-tls-certificate-validation.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/S041-logout-invalidation.md +63 -0
- package/skill-assets/sunlint-code-quality/rules/php/S042-long-lived-sessions.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/php/S044-critical-changes-reauth.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/php/S045-brute-force-protection.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/php/S047-oauth-csrf-protection.md +72 -0
- package/skill-assets/sunlint-code-quality/rules/php/S048-oauth-redirect-validation.md +54 -0
- package/skill-assets/sunlint-code-quality/rules/php/S049-auth-code-expiry.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/php/S050-token-entropy.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/php/S051-password-length.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/php/S052-otp-entropy.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/php/S053-generic-error-messages.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/php/S054-no-default-admin.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/php/S055-content-type-validation.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/php/S056-log-injection.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/php/S057-synchronized-time.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/php/S058-ssrf-protection.md +65 -0
- package/skill-assets/sunlint-code-quality/rules/python/C006-verb-noun-functions.md +30 -0
- package/skill-assets/sunlint-code-quality/rules/python/C013-no-dead-code.md +24 -0
- package/skill-assets/sunlint-code-quality/rules/python/C014-dependency-injection.md +68 -0
- package/skill-assets/sunlint-code-quality/rules/python/C017-no-constructor-logic.md +30 -0
- package/skill-assets/sunlint-code-quality/rules/python/C018-generic-errors.md +25 -0
- package/skill-assets/sunlint-code-quality/rules/python/C019-error-log-level.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/python/C020-no-unused-imports.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/python/C022-no-unused-variables.md +24 -0
- package/skill-assets/sunlint-code-quality/rules/python/C023-no-duplicate-names.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/python/C024-centralize-constants.md +27 -0
- package/skill-assets/sunlint-code-quality/rules/python/C029-catch-log-root-cause.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/python/C030-custom-error-classes.md +28 -0
- package/skill-assets/sunlint-code-quality/rules/python/C033-separate-data-access.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/python/C035-error-context-logging.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/python/C041-no-hardcoded-secrets.md +23 -0
- package/skill-assets/sunlint-code-quality/rules/python/C042-boolean-naming.md +24 -0
- package/skill-assets/sunlint-code-quality/rules/python/C052-controller-parsing.md +34 -0
- package/skill-assets/sunlint-code-quality/rules/python/C060-superclass-logic.md +26 -0
- package/skill-assets/sunlint-code-quality/rules/python/C067-no-hardcoded-config.md +22 -0
- package/skill-assets/sunlint-code-quality/rules/python/S003-open-redirect.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S004-no-log-credentials.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S005-server-authorization.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S006-default-credentials.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S007-output-encoding.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S009-approved-crypto.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S010-csprng.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S011-encrypted-client-hello.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S012-secrets-management.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S013-tls-connections.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S016-no-sensitive-query-string.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S017-parameterized-queries.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/python/S019-email-input-sanitization.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S020-eval-code-execution.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/python/S022-context-escaping.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S023-dynamic-js-encoding.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S025-server-validation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S026-tls-encryption.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S027-mtls-validation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S028-upload-limits.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S029-csrf-protection.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S030-directory-browsing.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S031-secure-cookie-flag.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S032-httponly-cookie.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S033-samesite-cookie.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S034-host-prefix-cookie.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S035-app-hostnames.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S036-internal-file-paths.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/python/S037-anti-cache-headers.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S039-tls-certificate-validation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S041-logout-invalidation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S042-long-lived-sessions.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S044-critical-changes-reauth.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S045-brute-force-protection.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S047-oauth-csrf-protection.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S048-oauth-redirect-validation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S049-auth-code-expiry.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S050-token-entropy.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S051-password-length.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S052-otp-entropy.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S053-generic-error-messages.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S054-no-default-admin.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S055-content-type-validation.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S056-log-injection.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S057-synchronized-time.md +16 -0
- package/skill-assets/sunlint-code-quality/rules/python/S058-ssrf-protection.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C006-verb-noun-functions.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C013-no-dead-code.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C014-dependency-injection.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C017-no-constructor-logic.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C018-generic-errors.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C019-error-log-level.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C020-no-unused-imports.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C022-no-unused-variables.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C023-no-duplicate-names.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C024-centralize-constants.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C029-catch-log-root-cause.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C030-custom-error-classes.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C033-separate-data-access.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C035-error-context-logging.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C041-no-hardcoded-secrets.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C042-boolean-naming.md +42 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C052-controller-parsing.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C060-superclass-logic.md +67 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/C067-no-hardcoded-config.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S003-open-redirect.md +76 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S004-no-log-credentials.md +71 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S005-server-authorization.md +68 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S006-default-credentials.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S007-output-encoding.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S009-approved-crypto.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S010-csprng.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S011-encrypted-client-hello.md +45 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S012-secrets-management.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S013-tls-connections.md +70 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S016-no-sensitive-query-string.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S017-parameterized-queries.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S019-email-input-sanitization.md +56 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S020-eval-code-execution.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S022-context-escaping.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S023-dynamic-js-encoding.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S025-server-validation.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S026-tls-encryption.md +47 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S027-mtls-validation.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S028-upload-limits.md +65 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S029-csrf-protection.md +62 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S030-directory-browsing.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S031-secure-cookie-flag.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S032-httponly-cookie.md +36 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S033-samesite-cookie.md +46 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S034-host-prefix-cookie.md +50 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S035-app-hostnames.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S036-internal-file-paths.md +53 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S037-anti-cache-headers.md +52 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S039-tls-certificate-validation.md +51 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S041-logout-invalidation.md +58 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S042-long-lived-sessions.md +55 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S044-critical-changes-reauth.md +69 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S045-brute-force-protection.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S047-oauth-csrf-protection.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S048-oauth-redirect-validation.md +59 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S049-auth-code-expiry.md +73 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S050-token-entropy.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S051-password-length.md +60 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S052-otp-entropy.md +49 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S053-generic-error-messages.md +61 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S054-no-default-admin.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S055-content-type-validation.md +64 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S056-log-injection.md +48 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S057-synchronized-time.md +57 -0
- package/skill-assets/sunlint-code-quality/rules/typescript/S058-ssrf-protection.md +63 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D011",
|
|
3
|
+
"name": "Prefer Named Parameters",
|
|
4
|
+
"description": "Functions with more than 3 parameters and adjacent parameters of the same type should use named parameters",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["parameters", "naming", "readability", "maintainability"],
|
|
9
|
+
"config": {
|
|
10
|
+
"minParameterCount": 3
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D012",
|
|
3
|
+
"name": "Prefer Named Boolean Parameters",
|
|
4
|
+
"description": "Boolean parameters should be named or use separate functions for better readability",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["parameters", "boolean", "readability", "maintainability"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D013",
|
|
3
|
+
"name": "Prefer a Single Public Class Per File",
|
|
4
|
+
"description": "Each file should contain only one public class to improve code organization and maintainability",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["dart", "organization", "maintainability"],
|
|
9
|
+
"config": {}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D014",
|
|
3
|
+
"name": "Avoid Unsafe Collection Access",
|
|
4
|
+
"description": "Always check collection empty or length before using first, last, single, or elementAt",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["dart", "safety", "collections", "runtime-error"],
|
|
9
|
+
"config": {}
|
|
10
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D015",
|
|
3
|
+
"name": "Ensure copyWith includes all constructor parameters",
|
|
4
|
+
"description": "When a class has a copyWith method, it should include all constructor parameters to ensure complete object copying",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["dart", "immutability", "data-class", "best-practice"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D016",
|
|
3
|
+
"name": "Project Should Have Tests",
|
|
4
|
+
"description": "Ensure the project has a test directory with test files to maintain code quality and prevent regressions",
|
|
5
|
+
"severity": "warning",
|
|
6
|
+
"category": "dart",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["testing", "best-practices", "code-quality"],
|
|
9
|
+
"analysisMethod": "dart-only",
|
|
10
|
+
"dartAnalyzer": {
|
|
11
|
+
"class": "D016ProjectShouldHaveTestsAnalyzer",
|
|
12
|
+
"file": "D016_project_should_have_tests.dart"
|
|
13
|
+
},
|
|
14
|
+
"detection": {
|
|
15
|
+
"targetDirectories": ["test", "test/"],
|
|
16
|
+
"requiredFiles": ["*_test.dart"],
|
|
17
|
+
"minTestFiles": 1
|
|
18
|
+
},
|
|
19
|
+
"config": {
|
|
20
|
+
"minTestFiles": 1,
|
|
21
|
+
"testDirectories": ["test", "integration_test"],
|
|
22
|
+
"testFilePattern": "_test\\.dart$"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D017",
|
|
3
|
+
"name": "Pubspec Dependencies Should Be Reviewed Regularly",
|
|
4
|
+
"description": "Dependencies in pubspec.yaml should be reviewed and updated regularly to ensure security patches and bug fixes are applied",
|
|
5
|
+
"severity": "warning",
|
|
6
|
+
"category": "dart",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["dependencies", "maintenance", "security", "best-practices"],
|
|
9
|
+
"analysisMethod": "dart-only",
|
|
10
|
+
"dartAnalyzer": {
|
|
11
|
+
"class": "D017PubspecDependenciesReviewAnalyzer",
|
|
12
|
+
"file": "D017_pubspec_dependencies_review.dart"
|
|
13
|
+
},
|
|
14
|
+
"detection": {
|
|
15
|
+
"targetFiles": ["pubspec.yaml", "pubspec.lock"],
|
|
16
|
+
"checkLastModified": true
|
|
17
|
+
},
|
|
18
|
+
"config": {
|
|
19
|
+
"maxMonthsWithoutReview": 4,
|
|
20
|
+
"ignoreDevDependencies": false,
|
|
21
|
+
"checkLockFile": true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D018",
|
|
3
|
+
"name": "Remove Commented-Out Code",
|
|
4
|
+
"description": "Remove commented-out code instead of leaving it in the source. Use version control to track history.",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["code-quality", "maintainability", "clean-code"],
|
|
9
|
+
"config": {
|
|
10
|
+
"minLines": 2,
|
|
11
|
+
"ignoreDocComments": true
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D019",
|
|
3
|
+
"name": "Avoid Single Child in Multi-Child Widget",
|
|
4
|
+
"description": "Multi-child widgets (Column, Row, Wrap, etc.) should not have only a single child",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["flutter", "performance", "widget", "optimization"],
|
|
9
|
+
"config": {
|
|
10
|
+
"multiChildWidgets": [
|
|
11
|
+
"Column",
|
|
12
|
+
"Row",
|
|
13
|
+
"Wrap",
|
|
14
|
+
"Stack",
|
|
15
|
+
"Flex",
|
|
16
|
+
"ListView",
|
|
17
|
+
"GridView",
|
|
18
|
+
"CustomScrollView"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D020",
|
|
3
|
+
"name": "Limit If/Else Branches",
|
|
4
|
+
"description": "Limit the number of if/else branches to improve readability and maintainability",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["complexity", "maintainability", "readability", "branching"],
|
|
9
|
+
"config": {
|
|
10
|
+
"maxBranches": 3
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D021",
|
|
3
|
+
"name": "Avoid Negated Boolean Checks",
|
|
4
|
+
"description": "Avoid inverted or negated boolean checks to improve code readability",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["readability", "boolean", "condition"],
|
|
9
|
+
"config": {
|
|
10
|
+
"checkDoubleNegation": true,
|
|
11
|
+
"checkNegatedBooleans": true,
|
|
12
|
+
"checkInvertedConditions": true
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D022",
|
|
3
|
+
"name": "Use setState Correctly",
|
|
4
|
+
"description": "Ensure setState is used correctly in StatefulWidget without common anti-patterns",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["flutter", "state-management", "performance"],
|
|
9
|
+
"config": {
|
|
10
|
+
"checkMultipleCalls": true,
|
|
11
|
+
"checkNestedCalls": true,
|
|
12
|
+
"checkInBuildMethod": true
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D023",
|
|
3
|
+
"name": "Avoid Unnecessary Method Overrides",
|
|
4
|
+
"description": "Methods that only call super with the same parameters are unnecessary and should be removed",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["dart", "code-quality", "maintainability"],
|
|
9
|
+
"config": {
|
|
10
|
+
"checkLifecycleMethods": true,
|
|
11
|
+
"allowedMethods": []
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D024",
|
|
3
|
+
"name": "Avoid Unnecessary StatefulWidget",
|
|
4
|
+
"description": "StatefulWidget should only be used when state is needed. If no state is used, convert to StatelessWidget",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["flutter", "widget", "performance", "state"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "D025",
|
|
3
|
+
"name": "Avoid Nested Conditional Expressions",
|
|
4
|
+
"description": "Nested conditional expressions (ternary operators) reduce code readability and should be avoided",
|
|
5
|
+
"category": "dart",
|
|
6
|
+
"severity": "warning",
|
|
7
|
+
"languages": ["dart"],
|
|
8
|
+
"tags": ["readability", "maintainability", "complexity"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# SunLint Code Quality Standards
|
|
2
|
+
|
|
3
|
+
> **AI Agent Directive**: Follow these rules when writing/reviewing code. For detailed examples, read rule files in `rules/` directory.
|
|
4
|
+
|
|
5
|
+
## Skill Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
sunlint-code-quality/
|
|
9
|
+
├── SKILL.md # Full skill documentation with priorities
|
|
10
|
+
├── AGENTS.md # This file - language-agnostic quick reference
|
|
11
|
+
└── rules/ # Detailed rule files (language-specific versions installed)
|
|
12
|
+
├── S017-*.md
|
|
13
|
+
└── C029-*.md
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## How to Use This Skill
|
|
17
|
+
|
|
18
|
+
1. **Identify Relevant Rules**: Check the priority categories below to find rules applicable to your current task (e.g., Auth, Security, Error Handling).
|
|
19
|
+
2. **Read Rule Details**: Use `view_file` to read the specific `rules/{RULE_ID}-*.md` file for detailed implementation guidelines and code examples in your target language.
|
|
20
|
+
3. **Apply Patterns**: Implement the patterns described in the rule file, adapting them to the language you are working in.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Critical Rules (Never Violate)
|
|
25
|
+
|
|
26
|
+
### Security - Injection Prevention
|
|
27
|
+
|
|
28
|
+
| Rule | Action |
|
|
29
|
+
|------|--------|
|
|
30
|
+
| `S017` | Use parameterized queries - no SQL/NoSQL concatenation |
|
|
31
|
+
| `S020` | No dynamic code execution (e.g. `eval`, `Function`, `Assembly.Load`) |
|
|
32
|
+
| `S025` | Validate ALL client input server-side |
|
|
33
|
+
| `S007` | Encode output before interpreter use |
|
|
34
|
+
|
|
35
|
+
### Security - Authentication
|
|
36
|
+
|
|
37
|
+
| Rule | Action |
|
|
38
|
+
|------|--------|
|
|
39
|
+
| `S005` | Server-side authorization at service layer |
|
|
40
|
+
| `S006` | No default credentials (admin, root) |
|
|
41
|
+
| `S012` | Use secrets management (env vars, vaults) |
|
|
42
|
+
| `S026` | TLS 1.2+ mandatory for all connections |
|
|
43
|
+
| `S036` | File paths from internal data only |
|
|
44
|
+
|
|
45
|
+
### Code Quality - Error Handling
|
|
46
|
+
|
|
47
|
+
| Rule | Action |
|
|
48
|
+
|------|--------|
|
|
49
|
+
| `C029` | Exception/Catch blocks MUST log error with context |
|
|
50
|
+
| `C030` | Use custom error/exception classes |
|
|
51
|
+
| `C018` | Do not throw generic errors/exceptions |
|
|
52
|
+
| `C035` | Include requestId, entityId in error logs |
|
|
53
|
+
|
|
54
|
+
### Code Quality - Structure
|
|
55
|
+
|
|
56
|
+
| Rule | Action |
|
|
57
|
+
|------|--------|
|
|
58
|
+
| `C014` | Dependency Injection for testability |
|
|
59
|
+
| `C017` | No business logic in constructors |
|
|
60
|
+
| `C006` | Function/Method names: `Verb-Noun` pattern |
|
|
61
|
+
| `C013` | No dead code, unused imports/variables |
|
|
62
|
+
| `C041` | No hardcoded secrets in repository |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Rule File Lookup
|
|
67
|
+
|
|
68
|
+
Detailed rule files are located in the `rules/` directory.
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
rules/{RULE_ID}-{slug}.md
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Examples:**
|
|
75
|
+
- `rules/S017-parameterized-queries.md`
|
|
76
|
+
- `rules/C029-catch-log-root-cause.md`
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
**Version**: 2.3 | **Total Rules**: 65 | **Maintainer**: Sun* Engineering Excellence
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sunlint-code-quality
|
|
3
|
+
description: Code quality and security guidelines from Sun* Engineering Excellence. This skill should be used when writing, reviewing, or refactoring code to ensure security and quality compliance. Triggers on tasks involving authentication, data validation, error handling, or security-sensitive operations.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: sun-asterisk
|
|
7
|
+
version: "2.4.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# SunLint Code Quality & Security Standards
|
|
11
|
+
|
|
12
|
+
Comprehensive code quality and security optimization guide for all projects, maintained by Sun* Engineering Excellence team. Contains **65 rules** across **6 priority categories**, organized by impact to guide automated code review and generation.
|
|
13
|
+
|
|
14
|
+
## When to Apply
|
|
15
|
+
|
|
16
|
+
Reference these guidelines when:
|
|
17
|
+
- Writing new code in any language (PHP, Python + PySpark, TypeScript, C#, Java, Go, Kotlin, etc.)
|
|
18
|
+
- Implementing authentication, authorization, or session management
|
|
19
|
+
- Handling user input, file uploads, or external data
|
|
20
|
+
- Reviewing code for security vulnerabilities
|
|
21
|
+
- Implementing error handling and logging
|
|
22
|
+
- Refactoring existing codebase for quality improvements
|
|
23
|
+
|
|
24
|
+
## Rule Categories by Priority
|
|
25
|
+
|
|
26
|
+
| Priority | Category | Impact | Rule Count | Prefix |
|
|
27
|
+
|----------|----------|--------|------------|--------|
|
|
28
|
+
| 1 | Security - Injection Prevention | **CRITICAL** | 10 | `S0xx` |
|
|
29
|
+
| 2 | Security - Authentication & Sessions | **CRITICAL** | 12 | `S0xx` |
|
|
30
|
+
| 3 | Common - Error Handling & Code Quality | **CRITICAL** | 19 | `C0xx` |
|
|
31
|
+
| 4 | Security - Cryptography & TLS | **HIGH** | 8 | `S0xx` |
|
|
32
|
+
| 5 | Security - Data Protection | **HIGH** | 10 | `S0xx` |
|
|
33
|
+
| 6 | Security - Logging & Monitoring | **MEDIUM** | 6 | `S0xx` |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Quick Reference
|
|
38
|
+
|
|
39
|
+
### 1. Security - Injection Prevention (CRITICAL)
|
|
40
|
+
|
|
41
|
+
These rules prevent the most dangerous vulnerabilities. **Never violate these rules.**
|
|
42
|
+
|
|
43
|
+
- `S017-parameterized-queries` - Always use parameterized queries, never concatenate SQL
|
|
44
|
+
- `S020-eval-code-execution` - Avoid eval() or dynamic code execution
|
|
45
|
+
- `S025-server-validation` - Always validate client data server-side
|
|
46
|
+
- `S007-output-encoding` - Output encoding before interpreter use
|
|
47
|
+
- `S022-context-escaping` - Escape data by output context (HTML, JS, URL)
|
|
48
|
+
- `S023-dynamic-js-encoding` - Output encoding for dynamic JS/JSON
|
|
49
|
+
- `S019-email-input-sanitization` - Sanitize input before sending emails
|
|
50
|
+
- `S055-content-type-validation` - Validate Content-Type in REST services
|
|
51
|
+
- `S056-log-injection` - Protect against Log Injection
|
|
52
|
+
- `S058-ssrf-protection` - Protect against SSRF attacks
|
|
53
|
+
|
|
54
|
+
### 2. Security - Authentication & Sessions (CRITICAL)
|
|
55
|
+
|
|
56
|
+
These rules protect user accounts and session integrity. **Mandatory for all auth flows.**
|
|
57
|
+
|
|
58
|
+
- `S005-server-authorization` - Enforce authorization at trusted service layer only
|
|
59
|
+
- `S006-default-credentials` - Never use default credentials (admin/admin, root/root)
|
|
60
|
+
- `S012-secrets-management` - Use secrets management for backend secrets
|
|
61
|
+
- `S041-logout-invalidation` - Invalidate session on logout
|
|
62
|
+
- `S042-long-lived-sessions` - Re-authenticate for long-lived sessions
|
|
63
|
+
- `S044-critical-changes-reauth` - Re-authenticate before critical changes
|
|
64
|
+
- `S045-brute-force-protection` - Implement brute-force protection
|
|
65
|
+
- `S047-oauth-csrf-protection` - Protect OAuth code flow vs CSRF
|
|
66
|
+
- `S048-oauth-redirect-validation` - Validate OAuth redirect URIs exactly
|
|
67
|
+
- `S049-auth-code-expiry` - Authentication codes must expire quickly
|
|
68
|
+
- `S003-open-redirect` - URL redirects must be in allow list
|
|
69
|
+
- `S029-csrf-protection` - Apply CSRF protection
|
|
70
|
+
|
|
71
|
+
### 3. Common - Error Handling & Code Quality (CRITICAL)
|
|
72
|
+
|
|
73
|
+
These rules ensure robust error handling and maintainable code. **Mandatory for all code.**
|
|
74
|
+
|
|
75
|
+
#### Error Handling
|
|
76
|
+
- `C029-catch-log-root-cause` - All catch blocks must log root cause with context
|
|
77
|
+
- `C030-custom-error-classes` - Use custom error classes, not generic Error/Exception
|
|
78
|
+
- `C035-error-context-logging` - Log all relevant context on errors
|
|
79
|
+
- `C018-generic-errors` - Do not throw generic errors
|
|
80
|
+
- `C019-error-log-level` - Do not use error log level for non-critical issues
|
|
81
|
+
|
|
82
|
+
#### Code Structure
|
|
83
|
+
- `C014-dependency-injection` - Use Dependency Injection for testability
|
|
84
|
+
- `C017-no-constructor-logic` - No business logic in constructors
|
|
85
|
+
- `C033-separate-data-access` - Separate processing and data access layers
|
|
86
|
+
- `C052-controller-parsing` - Separate parsing from controllers
|
|
87
|
+
- `C060-superclass-logic` - Do not ignore superclass logic
|
|
88
|
+
- `C024-centralize-constants` - Centralize constants in config files
|
|
89
|
+
- `C067-no-hardcoded-config` - Do not hardcode configuration values
|
|
90
|
+
|
|
91
|
+
#### Naming & Style
|
|
92
|
+
- `C006-verb-noun-functions` - Function names: verb-noun pattern (getUserById)
|
|
93
|
+
- `C013-no-dead-code` - Do not commit dead code
|
|
94
|
+
- `C020-no-unused-imports` - Do not import unused modules
|
|
95
|
+
- `C022-no-unused-variables` - Do not leave unused variables
|
|
96
|
+
- `C023-no-duplicate-names` - No duplicate variable names in scope
|
|
97
|
+
- `C042-boolean-naming` - Boolean names: is/has/should prefix
|
|
98
|
+
- `C041-no-hardcoded-secrets` - No hardcoded secrets in repo
|
|
99
|
+
|
|
100
|
+
### 4. Security - Cryptography & TLS (HIGH)
|
|
101
|
+
|
|
102
|
+
These rules ensure secure data transmission and storage.
|
|
103
|
+
|
|
104
|
+
- `S009-approved-crypto` - Use only approved crypto algorithms (no MD5, SHA1)
|
|
105
|
+
- `S010-csprng` - Use CSPRNG for security purposes (not Math.random())
|
|
106
|
+
- `S013-tls-connections` - Always use TLS for all connections
|
|
107
|
+
- `S026-tls-encryption` - TLS encryption mandatory for all connections
|
|
108
|
+
- `S027-mtls-validation` - Validate mTLS certificates before auth
|
|
109
|
+
- `S039-tls-certificate-validation` - TLS clients must validate server certificates
|
|
110
|
+
- `S050-token-entropy` - Reference tokens: 128-bit entropy CSPRNG
|
|
111
|
+
- `S011-encrypted-client-hello` - Enable Encrypted Client Hello (ECH)
|
|
112
|
+
|
|
113
|
+
### 5. Security - Data Protection (HIGH)
|
|
114
|
+
|
|
115
|
+
These rules protect sensitive data from exposure.
|
|
116
|
+
|
|
117
|
+
- `S004-no-log-credentials` - Do not log credentials/tokens
|
|
118
|
+
- `S016-no-sensitive-query-string` - Do not pass sensitive data in query string
|
|
119
|
+
- `S036-internal-file-paths` - Use internal data for file paths, strict validation
|
|
120
|
+
- `S028-upload-limits` - Limit upload file size and count
|
|
121
|
+
- `S030-directory-browsing` - Disable directory browsing
|
|
122
|
+
- `S031-secure-cookie-flag` - Set Secure flag on session cookies
|
|
123
|
+
- `S032-httponly-cookie` - Set HttpOnly on session cookies
|
|
124
|
+
- `S033-samesite-cookie` - Set SameSite on session cookies
|
|
125
|
+
- `S034-host-prefix-cookie` - Use __Host- prefix for cookies
|
|
126
|
+
- `S035-app-hostnames` - Host apps on different hostnames
|
|
127
|
+
- `S037-anti-cache-headers` - Set anti-cache headers for sensitive pages
|
|
128
|
+
|
|
129
|
+
### 6. Security - Logging & Monitoring (MEDIUM)
|
|
130
|
+
|
|
131
|
+
These rules ensure proper security monitoring.
|
|
132
|
+
|
|
133
|
+
- `S051-password-length` - Support 12-64 char passwords
|
|
134
|
+
- `S052-otp-entropy` - OTPs must have 20-bit entropy minimum
|
|
135
|
+
- `S053-generic-error-messages` - Return generic error messages to users
|
|
136
|
+
- `S054-no-default-admin` - Avoid default admin/root accounts
|
|
137
|
+
- `S057-synchronized-time` - Use synchronized time (UTC) in logs
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## How to Use
|
|
142
|
+
|
|
143
|
+
Read individual rule files for detailed explanations and code examples. Rules are organized by language in the `rules/` directory:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
rules/python/S017-parameterized-queries.md
|
|
147
|
+
rules/typescript/S017-parameterized-queries.md
|
|
148
|
+
rules/csharp/S017-parameterized-queries.md
|
|
149
|
+
rules/kotlin/S017-parameterized-queries.md
|
|
150
|
+
rules/java/S017-parameterized-queries.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Each rule file contains:
|
|
154
|
+
- YAML frontmatter with title, impact, and tags
|
|
155
|
+
- Brief explanation of why it matters
|
|
156
|
+
- Incorrect code example with explanation
|
|
157
|
+
- Correct code example with explanation
|
|
158
|
+
- Tools for enforcement
|
|
159
|
+
|
|
160
|
+
## Full Compiled Document
|
|
161
|
+
|
|
162
|
+
For the complete guide with all rules expanded: `AGENTS.md`
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Priority Legend
|
|
167
|
+
|
|
168
|
+
| Level | Description | Action Required |
|
|
169
|
+
|-------|-------------|-----------------|
|
|
170
|
+
| **CRITICAL** | Security vulnerabilities OR code quality issues that lead to bugs/maintenance problems | Must fix immediately, block deployment |
|
|
171
|
+
| **HIGH** | Security issues that weaken defenses | Fix before production release |
|
|
172
|
+
| **MEDIUM** | Quality issues affecting maintainability | Fix when touching related code |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
**Last Updated**: January 2026 | **Version**: 2.3 | **Maintainer**: Sun* Engineering Excellence
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Use PascalCase For Methods
|
|
3
|
+
impact: LOW
|
|
4
|
+
impactDescription: ensures consistent codebase style
|
|
5
|
+
tags: naming, style, convention, quality, csharp
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Use PascalCase For Methods
|
|
9
|
+
|
|
10
|
+
C# convention dictates PascalCase for method names, unlike camelCase in JavaScript/Java.
|
|
11
|
+
|
|
12
|
+
**Incorrect (camelCase):**
|
|
13
|
+
|
|
14
|
+
```csharp
|
|
15
|
+
public void calculateTotal()
|
|
16
|
+
{
|
|
17
|
+
// ...
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Correct (PascalCase):**
|
|
22
|
+
|
|
23
|
+
```csharp
|
|
24
|
+
public void CalculateTotal()
|
|
25
|
+
{
|
|
26
|
+
// ...
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Async methods should end with Async
|
|
30
|
+
public async Task<User> GetUserAsync(int id)
|
|
31
|
+
{
|
|
32
|
+
// ...
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Tools:** StyleCop, Roslyn Analyzers
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Do Not Commit Dead Code
|
|
3
|
+
impact: LOW
|
|
4
|
+
impactDescription: keeps codebase clean and readable
|
|
5
|
+
tags: cleanup, maintenance, quality, csharp
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Do Not Commit Dead Code
|
|
9
|
+
|
|
10
|
+
Commented-out code and unused private methods clutter the codebase and rot over time.
|
|
11
|
+
|
|
12
|
+
**Incorrect (commented code):**
|
|
13
|
+
|
|
14
|
+
```csharp
|
|
15
|
+
public void Process()
|
|
16
|
+
{
|
|
17
|
+
// var oldLogic = new LegacyProcessor();
|
|
18
|
+
// oldLogic.Run();
|
|
19
|
+
|
|
20
|
+
var newLogic = new Processor();
|
|
21
|
+
newLogic.Run();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Unused private method
|
|
25
|
+
private void UnusedHelper() { }
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Correct (clean):**
|
|
29
|
+
|
|
30
|
+
```csharp
|
|
31
|
+
public void Process()
|
|
32
|
+
{
|
|
33
|
+
var newLogic = new Processor();
|
|
34
|
+
newLogic.Run();
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Tools:** Roslyn Analyzers (IDE0051), SonarQube
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Use Dependency Injection
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: ensures testability and loose coupling
|
|
5
|
+
tags: architecture, di, testing, quality, csharp
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Use Dependency Injection
|
|
9
|
+
|
|
10
|
+
Hard dependencies make code hard to test and maintain. Use Constructor Injection.
|
|
11
|
+
|
|
12
|
+
**Incorrect (creating dependencies):**
|
|
13
|
+
|
|
14
|
+
```csharp
|
|
15
|
+
public class OrderService
|
|
16
|
+
{
|
|
17
|
+
private readonly Database _db;
|
|
18
|
+
|
|
19
|
+
public OrderService()
|
|
20
|
+
{
|
|
21
|
+
_db = new Database("connection_string"); // Hard dependency
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Correct (injecting dependencies):**
|
|
27
|
+
|
|
28
|
+
```csharp
|
|
29
|
+
public class OrderService
|
|
30
|
+
{
|
|
31
|
+
private readonly IDatabase _db;
|
|
32
|
+
|
|
33
|
+
// Explicit dependencies in constructor
|
|
34
|
+
public OrderService(IDatabase db)
|
|
35
|
+
{
|
|
36
|
+
_db = db;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Registration in Startup.cs / Program.cs
|
|
41
|
+
builder.Services.AddScoped<IDatabase, SqlDatabase>();
|
|
42
|
+
builder.Services.AddScoped<OrderService>();
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Tools:** Roslyn Analyzers, Manual Review
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: No Business Logic In Constructors
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: ensures predictable object initialization
|
|
5
|
+
tags: constructor, initialization, side-effects, patterns, quality, csharp
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## No Business Logic In Constructors
|
|
9
|
+
|
|
10
|
+
Constructors should only assign fields. Complex logic, I/O, or API calls in constructors cause side effects and make testing impossible.
|
|
11
|
+
|
|
12
|
+
**Incorrect (logic in ctor):**
|
|
13
|
+
|
|
14
|
+
```csharp
|
|
15
|
+
public class UserService
|
|
16
|
+
{
|
|
17
|
+
public UserService()
|
|
18
|
+
{
|
|
19
|
+
// BAD: I/O in constructor
|
|
20
|
+
var config = File.ReadAllText("config.json");
|
|
21
|
+
ConnectToDatabase();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Correct (factory or init):**
|
|
27
|
+
|
|
28
|
+
```csharp
|
|
29
|
+
public class UserService
|
|
30
|
+
{
|
|
31
|
+
private readonly IConfiguration _config;
|
|
32
|
+
|
|
33
|
+
public UserService(IConfiguration config)
|
|
34
|
+
{
|
|
35
|
+
_config = config; // Assignment only
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public async Task InitializeAsync()
|
|
39
|
+
{
|
|
40
|
+
// Complex init logic here
|
|
41
|
+
await ConnectToDatabaseAsync();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Tools:** SonarQube, Manual Review
|