diffsense 2.2.12__tar.gz → 2.2.13__tar.gz

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.
Files changed (151) hide show
  1. {diffsense-2.2.12/diffsense.egg-info → diffsense-2.2.13}/PKG-INFO +1 -1
  2. diffsense-2.2.13/config/absolute/concurrency.yaml +22 -0
  3. diffsense-2.2.13/config/absolute/security.yaml +24 -0
  4. diffsense-2.2.13/config/absolute/stability.yaml +15 -0
  5. diffsense-2.2.13/config/rules/cpp/exception_noexcept.yaml +8 -0
  6. diffsense-2.2.13/config/rules/cpp/exception_swallowed.yaml +8 -0
  7. diffsense-2.2.13/config/rules/cpp/maintenance_magic_number.yaml +8 -0
  8. diffsense-2.2.13/config/rules/cpp/null_dereference.yaml +8 -0
  9. diffsense-2.2.13/config/rules/cpp/performance_inefficient_copy.yaml +8 -0
  10. diffsense-2.2.13/config/rules/cpp/performance_unbounded_vector.yaml +8 -0
  11. diffsense-2.2.13/config/rules/cpp/resource_leak.yaml +8 -0
  12. diffsense-2.2.13/config/rules/cpp/resource_memory_leak.yaml +8 -0
  13. diffsense-2.2.13/config/rules/cpp/resource_raw_pointer.yaml +8 -0
  14. diffsense-2.2.13/config/rules/cpp/runtime_data_race.yaml +8 -0
  15. diffsense-2.2.13/config/rules/cpp/runtime_uninitialized.yaml +8 -0
  16. diffsense-2.2.13/config/rules/cpp/security_buffer_overflow.yaml +8 -0
  17. diffsense-2.2.13/config/rules/cpp/security_command_injection.yaml +8 -0
  18. diffsense-2.2.13/config/rules/cpp/security_hardcoded_secret.yaml +8 -0
  19. diffsense-2.2.13/config/rules/cpp/security_integer_overflow.yaml +8 -0
  20. diffsense-2.2.13/config/rules/cpp/security_sql_injection.yaml +8 -0
  21. diffsense-2.2.13/config/rules/cpp/security_unsafe_cast.yaml +8 -0
  22. diffsense-2.2.13/config/rules/go/exception_error_ignored.yaml +8 -0
  23. diffsense-2.2.13/config/rules/go/null_nil_dereference.yaml +8 -0
  24. diffsense-2.2.13/config/rules/go/resource_channel_leak.yaml +8 -0
  25. diffsense-2.2.13/config/rules/go/resource_defer_misuse.yaml +8 -0
  26. diffsense-2.2.13/config/rules/go/resource_goroutine_leak.yaml +8 -0
  27. diffsense-2.2.13/config/rules/go/runtime_goroutine_in_loop.yaml +8 -0
  28. diffsense-2.2.13/config/rules/go/runtime_panic_added.yaml +8 -0
  29. diffsense-2.2.13/config/rules/go/runtime_race_condition.yaml +8 -0
  30. diffsense-2.2.13/config/rules/go/security_command_injection.yaml +8 -0
  31. diffsense-2.2.13/config/rules/go/security_hardcoded_secret.yaml +9 -0
  32. diffsense-2.2.13/config/rules/go/security_http_vulnerability.yaml +8 -0
  33. diffsense-2.2.13/config/rules/go/security_path_traversal.yaml +8 -0
  34. diffsense-2.2.13/config/rules/go/security_sql_injection.yaml +8 -0
  35. diffsense-2.2.13/config/rules/go/security_unsafe_usage.yaml +8 -0
  36. diffsense-2.2.13/config/rules/javascript/exception_promise_reject.yaml +8 -0
  37. diffsense-2.2.13/config/rules/javascript/maintenance_debug_code.yaml +8 -0
  38. diffsense-2.2.13/config/rules/javascript/maintenance_debugger.yaml +8 -0
  39. diffsense-2.2.13/config/rules/javascript/maintenance_deprecated_api.yaml +8 -0
  40. diffsense-2.2.13/config/rules/javascript/null_type_assertion.yaml +8 -0
  41. diffsense-2.2.13/config/rules/javascript/performance_dynamic_import.yaml +8 -0
  42. diffsense-2.2.13/config/rules/javascript/performance_regex_dos.yaml +8 -0
  43. diffsense-2.2.13/config/rules/javascript/security_code_injection.yaml +8 -0
  44. diffsense-2.2.13/config/rules/javascript/security_command_injection.yaml +8 -0
  45. diffsense-2.2.13/config/rules/javascript/security_hardcoded_secret.yaml +8 -0
  46. diffsense-2.2.13/config/rules/javascript/security_open_redirect.yaml +8 -0
  47. diffsense-2.2.13/config/rules/javascript/security_prototype_pollution.yaml +8 -0
  48. diffsense-2.2.13/config/rules/javascript/security_sensitive_storage.yaml +8 -0
  49. diffsense-2.2.13/config/rules/javascript/security_xss.yaml +8 -0
  50. diffsense-2.2.13/config/rules/python/exception_swallowed.yaml +8 -0
  51. diffsense-2.2.13/config/rules/python/exception_too_generic.yaml +8 -0
  52. diffsense-2.2.13/config/rules/python/maintenance_debug_code.yaml +8 -0
  53. diffsense-2.2.13/config/rules/python/null_none_check.yaml +8 -0
  54. diffsense-2.2.13/config/rules/python/null_type_confusion.yaml +8 -0
  55. diffsense-2.2.13/config/rules/python/performance_inefficient_loop.yaml +8 -0
  56. diffsense-2.2.13/config/rules/python/performance_memory.yaml +8 -0
  57. diffsense-2.2.13/config/rules/python/resource_file_leak.yaml +8 -0
  58. diffsense-2.2.13/config/rules/python/runtime_mutable_default.yaml +8 -0
  59. diffsense-2.2.13/config/rules/python/security_code_injection.yaml +8 -0
  60. diffsense-2.2.13/config/rules/python/security_command_injection.yaml +8 -0
  61. diffsense-2.2.13/config/rules/python/security_hardcoded_secret.yaml +8 -0
  62. diffsense-2.2.13/config/rules/python/security_path_traversal.yaml +8 -0
  63. diffsense-2.2.13/config/rules/python/security_sensitive_import.yaml +8 -0
  64. diffsense-2.2.13/config/rules/python/security_sql_injection.yaml +8 -0
  65. diffsense-2.2.13/config/rules/python/security_weak_crypto.yaml +8 -0
  66. diffsense-2.2.13/config/rules/typescript/exception_promise_reject.yaml +8 -0
  67. diffsense-2.2.13/config/rules/typescript/maintenance_debugger.yaml +8 -0
  68. diffsense-2.2.13/config/rules/typescript/security_command_injection.yaml +8 -0
  69. diffsense-2.2.13/config/rules/typescript/security_hardcoded_secret.yaml +9 -0
  70. diffsense-2.2.13/config/rules/typescript/security_prototype_pollution.yaml +8 -0
  71. diffsense-2.2.13/config/rules/typescript/security_xss.yaml +8 -0
  72. {diffsense-2.2.12 → diffsense-2.2.13}/core/__init__.py +1 -2
  73. {diffsense-2.2.12 → diffsense-2.2.13/diffsense.egg-info}/PKG-INFO +1 -1
  74. diffsense-2.2.13/diffsense.egg-info/SOURCES.txt +148 -0
  75. diffsense-2.2.13/diffsense_mcp/_imports.py +61 -0
  76. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense_mcp/server.py +26 -13
  77. {diffsense-2.2.12 → diffsense-2.2.13}/pyproject.toml +2 -2
  78. diffsense-2.2.12/diffsense.egg-info/SOURCES.txt +0 -77
  79. {diffsense-2.2.12 → diffsense-2.2.13}/LICENSE +0 -0
  80. {diffsense-2.2.12 → diffsense-2.2.13}/README.md +0 -0
  81. {diffsense-2.2.12 → diffsense-2.2.13}/adapters/__init__.py +0 -0
  82. {diffsense-2.2.12 → diffsense-2.2.13}/adapters/base.py +0 -0
  83. {diffsense-2.2.12 → diffsense-2.2.13}/adapters/github_adapter.py +0 -0
  84. {diffsense-2.2.12 → diffsense-2.2.13}/adapters/gitlab_adapter.py +0 -0
  85. {diffsense-2.2.12 → diffsense-2.2.13}/adapters/local_adapter.py +0 -0
  86. {diffsense-2.2.12 → diffsense-2.2.13}/banner.py +0 -0
  87. {diffsense-2.2.12 → diffsense-2.2.13}/cli.py +0 -0
  88. {diffsense-2.2.12 → diffsense-2.2.13}/config/__init__.py +0 -0
  89. {diffsense-2.2.12 → diffsense-2.2.13}/config/rules.yaml +0 -0
  90. {diffsense-2.2.12 → diffsense-2.2.13}/core/ast_detector.py +0 -0
  91. {diffsense-2.2.12 → diffsense-2.2.13}/core/change.py +0 -0
  92. {diffsense-2.2.12 → diffsense-2.2.13}/core/composer.py +0 -0
  93. {diffsense-2.2.12 → diffsense-2.2.13}/core/evaluator.py +0 -0
  94. {diffsense-2.2.12 → diffsense-2.2.13}/core/ignore_manager.py +0 -0
  95. {diffsense-2.2.12 → diffsense-2.2.13}/core/knowledge.py +0 -0
  96. {diffsense-2.2.12 → diffsense-2.2.13}/core/parser.py +0 -0
  97. {diffsense-2.2.12 → diffsense-2.2.13}/core/parser_manager.py +0 -0
  98. {diffsense-2.2.12 → diffsense-2.2.13}/core/quality_manager.py +0 -0
  99. {diffsense-2.2.12 → diffsense-2.2.13}/core/renderer.py +0 -0
  100. {diffsense-2.2.12 → diffsense-2.2.13}/core/rule_base.py +0 -0
  101. {diffsense-2.2.12 → diffsense-2.2.13}/core/rule_runtime.py +0 -0
  102. {diffsense-2.2.12 → diffsense-2.2.13}/core/rules.py +0 -0
  103. {diffsense-2.2.12 → diffsense-2.2.13}/core/run_config.py +0 -0
  104. {diffsense-2.2.12 → diffsense-2.2.13}/core/semantic_diff.py +0 -0
  105. {diffsense-2.2.12 → diffsense-2.2.13}/core/signal_model.py +0 -0
  106. {diffsense-2.2.12 → diffsense-2.2.13}/core/signals_registry.py +0 -0
  107. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense.egg-info/dependency_links.txt +0 -0
  108. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense.egg-info/entry_points.txt +0 -0
  109. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense.egg-info/requires.txt +0 -0
  110. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense.egg-info/top_level.txt +0 -0
  111. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense_mcp/__init__.py +0 -0
  112. {diffsense-2.2.12 → diffsense-2.2.13}/diffsense_mcp/launcher.py +0 -0
  113. {diffsense-2.2.12 → diffsense-2.2.13}/governance/lifecycle.py +0 -0
  114. {diffsense-2.2.12 → diffsense-2.2.13}/main.py +0 -0
  115. {diffsense-2.2.12 → diffsense-2.2.13}/rules/__init__.py +0 -0
  116. {diffsense-2.2.12 → diffsense-2.2.13}/rules/api_compatibility.py +0 -0
  117. {diffsense-2.2.12 → diffsense-2.2.13}/rules/collection_handling.py +0 -0
  118. {diffsense-2.2.12 → diffsense-2.2.13}/rules/concurrency.py +0 -0
  119. {diffsense-2.2.12 → diffsense-2.2.13}/rules/concurrency_adapter.py +0 -0
  120. {diffsense-2.2.12 → diffsense-2.2.13}/rules/cross_language_adapter.py +0 -0
  121. {diffsense-2.2.12 → diffsense-2.2.13}/rules/exception_handling.py +0 -0
  122. {diffsense-2.2.12 → diffsense-2.2.13}/rules/go_rules.py +0 -0
  123. {diffsense-2.2.12 → diffsense-2.2.13}/rules/null_safety.py +0 -0
  124. {diffsense-2.2.12 → diffsense-2.2.13}/rules/resource_management.py +0 -0
  125. {diffsense-2.2.12 → diffsense-2.2.13}/rules/yaml_adapter.py +0 -0
  126. {diffsense-2.2.12 → diffsense-2.2.13}/run_audit.py +0 -0
  127. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/cpp_adapter.py +0 -0
  128. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/go_adapter.py +0 -0
  129. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/java_adapter.py +0 -0
  130. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/javascript_adapter.py +0 -0
  131. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/language_adapter.py +0 -0
  132. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/python_adapter.py +0 -0
  133. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/rule.py +0 -0
  134. {diffsense-2.2.12 → diffsense-2.2.13}/sdk/signal.py +0 -0
  135. {diffsense-2.2.12 → diffsense-2.2.13}/setup.cfg +0 -0
  136. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_adaptive_scheduling.py +0 -0
  137. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_cache_and_scheduling.py +0 -0
  138. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_critical_removal.py +0 -0
  139. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_entry_point_rules.py +0 -0
  140. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_go_cve_rules.py +0 -0
  141. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_inline_ignore.py +0 -0
  142. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_lifecycle.py +0 -0
  143. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_p0_concurrency.py +0 -0
  144. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_profile.py +0 -0
  145. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_regression.py +0 -0
  146. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_repo_ignore.py +0 -0
  147. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_rule_metadata.py +0 -0
  148. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_rules_directory.py +0 -0
  149. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_semantic_regression.py +0 -0
  150. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_signal_consistency.py +0 -0
  151. {diffsense-2.2.12 → diffsense-2.2.13}/tests/test_type_downgrade.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsense
3
- Version: 2.2.12
3
+ Version: 2.2.13
4
4
  Summary: MR/PR risk audit: semantic diff + rule engine. Run in CI as image or pip.
5
5
  License: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -0,0 +1,22 @@
1
+ rules:
2
+ - id: absolute.concurrency.new_thread
3
+ rule_type: absolute
4
+ is_blocking: true
5
+ match: 'new\s+Thread\(.*\)'
6
+ severity: high
7
+ impact: runtime
8
+ rationale: "Using 'new Thread()' bypasses managed thread pools, risking resource exhaustion."
9
+
10
+ - id: absolute.concurrency.fixed_threadpool_1
11
+ rule_type: absolute
12
+ match: 'Executors\.newFixedThreadPool\(1\)'
13
+ severity: medium
14
+ impact: runtime
15
+ rationale: "FixedThreadPool(1) can lead to request queuing and latency spikes under load."
16
+
17
+ - id: absolute.concurrency.sleep_long
18
+ rule_type: absolute
19
+ match: 'Thread\.sleep\(\d{4,}\)'
20
+ severity: high
21
+ impact: runtime
22
+ rationale: "Thread.sleep() for more than 1s detected. Potential for blocking I/O or deadlock."
@@ -0,0 +1,24 @@
1
+ rules:
2
+ - id: absolute.security.sql_injection
3
+ rule_type: absolute
4
+ is_blocking: true
5
+ match: 'SELECT\s+.*\s+FROM\s+.*\s+WHERE\s+.*\s+\+\s+\w+'
6
+ severity: critical
7
+ impact: security
8
+ rationale: "SQL concatenation detected. Risk of SQL Injection. Use PreparedStatement instead."
9
+
10
+ - id: absolute.security.plaintext_token
11
+ rule_type: absolute
12
+ is_blocking: true
13
+ case_insensitive: true
14
+ match: '(token|password|secret|key)\s*=\s*["''][a-zA-Z0-9_\-]{16,}["'']'
15
+ severity: critical
16
+ impact: security
17
+ rationale: "Potential plaintext secret/token hardcoded in source code."
18
+
19
+ - id: absolute.security.http_url
20
+ rule_type: absolute
21
+ match: 'http://[a-zA-Z0-9\.\-]+'
22
+ severity: high
23
+ impact: security
24
+ rationale: "Plain HTTP URL detected. Use HTTPS for secure communication."
@@ -0,0 +1,15 @@
1
+ rules:
2
+ - id: absolute.stability.catch_exception
3
+ rule_type: absolute
4
+ match: 'catch\s*\(\s*Exception\s+\w+\s*\)'
5
+ severity: medium
6
+ impact: maintenance
7
+ rationale: "Catching 'Exception' may hide critical runtime errors (e.g., NullPointerException)."
8
+
9
+ - id: absolute.stability.optional_get
10
+ rule_type: absolute
11
+ match: '\.get\(\)'
12
+ file: "**.java"
13
+ severity: high
14
+ impact: runtime
15
+ rationale: "Using Optional.get() without isPresent() check can cause NoSuchElementException."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.exception.noexcept
3
+ language: cpp
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: 'noexcept'
8
+ rationale: "noexcept"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.exception.swallowed
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: 'catch\(\)'
8
+ rationale: "Empty catch"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.maintenance.magic_number
3
+ language: cpp
4
+ severity: low
5
+ impact: maintenance
6
+ file: "**/*.cpp"
7
+ match: '1000'
8
+ rationale: "Magic number"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.null.dereference
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: '->'
8
+ rationale: "Null deref"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.performance.inefficient_copy
3
+ language: cpp
4
+ severity: low
5
+ impact: performance
6
+ file: "**/*.cpp"
7
+ match: 'push_back'
8
+ rationale: "Inefficient copy"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.performance.unbounded_vector
3
+ language: cpp
4
+ severity: low
5
+ impact: performance
6
+ file: "**/*.cpp"
7
+ match: 'push_back'
8
+ rationale: "Unbounded vector"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.resource.leak
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: 'fopen'
8
+ rationale: "Resource leak"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.resource.memory_leak
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: '\bnew\b'
8
+ rationale: "Memory leak"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.resource.raw_pointer
3
+ language: cpp
4
+ severity: medium
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'int\*'
8
+ rationale: "Raw pointer"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.runtime.data_race
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: 'std::'
8
+ rationale: "Data race"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.runtime.uninitialized
3
+ language: cpp
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.cpp"
7
+ match: 'int x;'
8
+ rationale: "Uninitialized"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.buffer_overflow
3
+ language: cpp
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'strcpy'
8
+ rationale: "Buffer overflow"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.command_injection
3
+ language: cpp
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'system\('
8
+ rationale: "Command injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.hardcoded_secret
3
+ language: cpp
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'password'
8
+ rationale: "Hardcoded secret"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.integer_overflow
3
+ language: cpp
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: '\+\+'
8
+ rationale: "Integer overflow"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.sql_injection
3
+ language: cpp
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'execute\('
8
+ rationale: "SQL injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: cpp.security.unsafe_cast
3
+ language: cpp
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.cpp"
7
+ match: 'reinterpret_cast'
8
+ rationale: "Unsafe cast"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: exception.error_ignored
3
+ language: go
4
+ severity: medium
5
+ impact: maintenance
6
+ file: "**/*.go"
7
+ match: '_\s*=\s*\w+\s*\([^)]*\)'
8
+ rationale: "Error result is discarded in Go code; silent failures can hide operational issues and data corruption."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: null.nil_dereference
3
+ language: go
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: '\*\s*\w+|\w+\s*\.\s*\w+\s*\('
8
+ rationale: "Potential nil dereference pattern introduced; verify pointer and receiver nil checks near call site."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: resource.channel_leak
3
+ language: go
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: 'make\s*\(\s*chan|chan\s+\w+\s*='
8
+ rationale: "Channel allocation introduced; verify close semantics and ownership to avoid goroutine blocking or leaks."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: resource.defer_misuse
3
+ language: go
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: 'for\s*\{[\s\S]{0,200}\bdefer\s+|defer\s+\w+\s*\(\s*\w+\s*[+\-*/]'
8
+ rationale: "Defer in loop or defer with eager-evaluated expressions may cause resource retention and delayed release."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: resource.goroutine_leak
3
+ language: go
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: '\bgo\s+\w+\.?\w*\s*\('
8
+ rationale: "Goroutine started without clear lifecycle constraints may leak and accumulate runtime pressure."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: go.runtime.goroutine_in_loop
3
+ language: go
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: 'for\s*\{[\s\S]{0,200}\bgo\s+\w'
8
+ rationale: "Goroutine launched inside loop may create unbounded concurrency; add backpressure or worker-pool controls."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: go.runtime.panic_added
3
+ language: go
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: '\bpanic\s*\('
8
+ rationale: "panic() added in Go code; ensure panic is not used for recoverable errors in request paths."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: runtime.race_condition
3
+ language: go
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.go"
7
+ match: '\bgo\s+\w+|\bmap\[|\bslice\b|\bchan\b'
8
+ rationale: "Concurrent access patterns introduced without explicit synchronization can cause race conditions."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: go.security.command_injection
3
+ language: go
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.go"
7
+ match: 'exec\.Command\('
8
+ rationale: "Command execution introduced in Go code; verify user input is sanitized to avoid command injection."
@@ -0,0 +1,9 @@
1
+ rules:
2
+ - id: go.security.hardcoded_secret
3
+ language: go
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.go"
7
+ case_insensitive: true
8
+ match: '(password|passwd|secret|token|api[_-]?key)\s*[:=]\s*"[^"]{8,}"'
9
+ rationale: "Hardcoded secrets detected in Go source; move credentials to environment variables or secret managers."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: security.http_vulnerability
3
+ language: go
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.go"
7
+ match: 'http\.(Get|Post)\s*\([^)]*\+|http\.ListenAndServe\s*\('
8
+ rationale: "HTTP flow with path concatenation or direct ListenAndServe exposure may introduce security vulnerabilities."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: go.security.path_traversal
3
+ language: go
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.go"
7
+ match: '(?:os\.Open|os\.ReadFile|ioutil\.ReadFile)\([^)]*\+'
8
+ rationale: "File path concatenation with external input can lead to path traversal; use filepath.Clean and strict allowlists."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: go.security.sql_injection
3
+ language: go
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.go"
7
+ match: 'fmt\.Sprintf\(\s*"(?:SELECT|INSERT|UPDATE|DELETE)\b'
8
+ rationale: "Dynamic SQL composition via fmt.Sprintf in Go introduces SQL injection risk; use parameterized queries."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: security.unsafe_usage
3
+ language: go
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.go"
7
+ match: '\bunsafe\.(Pointer|Sizeof|Alignof|Offsetof)\s*\('
8
+ rationale: "Unsafe package usage bypasses type and memory safety guarantees; review pointer arithmetic and casting carefully."
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.exception.promise_reject
3
+ language: javascript
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.js"
7
+ match: '\.reject\('
8
+ rationale: "Promise reject"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.maintenance.debug_code
3
+ language: javascript
4
+ severity: low
5
+ impact: maintenance
6
+ file: "**/*.js"
7
+ match: 'console.log'
8
+ rationale: "Debug code"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.maintenance.debugger
3
+ language: javascript
4
+ severity: low
5
+ impact: maintenance
6
+ file: "**/*.js"
7
+ match: 'debugger'
8
+ rationale: "Debugger"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.maintenance.deprecated_api
3
+ language: javascript
4
+ severity: low
5
+ impact: maintenance
6
+ file: "**/*.js"
7
+ match: 'defineGetter'
8
+ rationale: "Deprecated API"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.null.type_assertion
3
+ language: javascript
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.js"
7
+ match: ' as '
8
+ rationale: "Type assertion"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.performance.dynamic_import
3
+ language: javascript
4
+ severity: low
5
+ impact: performance
6
+ file: "**/*.js"
7
+ match: 'import\('
8
+ rationale: "Dynamic import"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.performance.regex_dos
3
+ language: javascript
4
+ severity: medium
5
+ impact: performance
6
+ file: "**/*.js"
7
+ match: '/.**/'
8
+ rationale: "ReDoS"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.code_injection
3
+ language: javascript
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'eval\('
8
+ rationale: "Code injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.command_injection
3
+ language: javascript
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'exec\('
8
+ rationale: "Command injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.hardcoded_secret
3
+ language: javascript
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'password'
8
+ rationale: "Hardcoded secret"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.open_redirect
3
+ language: javascript
4
+ severity: medium
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'location='
8
+ rationale: "Open redirect"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.prototype_pollution
3
+ language: javascript
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: '__proto__'
8
+ rationale: "Prototype pollution"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.sensitive_storage
3
+ language: javascript
4
+ severity: medium
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'localStorage'
8
+ rationale: "Sensitive storage"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: javascript.security.xss
3
+ language: javascript
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.js"
7
+ match: 'innerHTML'
8
+ rationale: "XSS"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.exception.swallowed
3
+ language: python
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.py"
7
+ match: 'except:'
8
+ rationale: "Exception swallowed"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.exception.too_generic
3
+ language: python
4
+ severity: medium
5
+ impact: maintenance
6
+ file: "**/*.py"
7
+ match: 'except Exception'
8
+ rationale: "Broad exception"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.maintenance.debug_code
3
+ language: python
4
+ severity: low
5
+ impact: maintenance
6
+ file: "**/*.py"
7
+ match: 'print\('
8
+ rationale: "Debug code"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.null.none_check
3
+ language: python
4
+ severity: high
5
+ impact: runtime
6
+ file: "**/*.py"
7
+ match: '\.\w+\('
8
+ rationale: "Null check"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.null.type_confusion
3
+ language: python
4
+ severity: medium
5
+ impact: runtime
6
+ file: "**/*.py"
7
+ match: 'cast\('
8
+ rationale: "Type confusion"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.performance.inefficient_loop
3
+ language: python
4
+ severity: low
5
+ impact: performance
6
+ file: "**/*.py"
7
+ match: 'for.*range'
8
+ rationale: "Inefficient loop"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.performance.memory
3
+ language: python
4
+ severity: medium
5
+ impact: performance
6
+ file: "**/*.py"
7
+ match: '\.read\(\)'
8
+ rationale: "Memory issue"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.resource.file_leak
3
+ language: python
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.py"
7
+ match: 'open\('
8
+ rationale: "File leak"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.runtime.mutable_default
3
+ language: python
4
+ severity: high
5
+ impact: maintenance
6
+ file: "**/*.py"
7
+ match: 'def.*='
8
+ rationale: "Mutable default"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.security.code_injection
3
+ language: python
4
+ severity: high
5
+ impact: security
6
+ file: "**/*.py"
7
+ match: 'eval\('
8
+ rationale: "Code injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.security.command_injection
3
+ language: python
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.py"
7
+ match: 'os.system'
8
+ rationale: "Command injection"
@@ -0,0 +1,8 @@
1
+ rules:
2
+ - id: python.security.hardcoded_secret
3
+ language: python
4
+ severity: critical
5
+ impact: security
6
+ file: "**/*.py"
7
+ match: 'password'
8
+ rationale: "Hardcoded credentials"