gitgalaxy 2.3.43__tar.gz → 2.4.1__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 (187) hide show
  1. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/PKG-INFO +1 -1
  2. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/aperture.py +117 -88
  3. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/PKG-INFO +1 -1
  4. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/scm_version.json +2 -2
  5. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_aperture.py +2 -2
  6. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.flake8 +0 -0
  7. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.galaxyscope.yaml +0 -0
  8. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/CODEOWNERS +0 -0
  9. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/ISSUE_TEMPLATE/parsing_discrepancy.yml +0 -0
  10. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/dependabot.yml +0 -0
  11. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/pull_request_template.md +0 -0
  12. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/codeql.yml +0 -0
  13. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/deploy-docs.yml +0 -0
  14. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/gitgalaxy-artifacts.yml +0 -0
  15. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/gitgalaxy-audit.yml +0 -0
  16. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/gitgalaxy.yml +0 -0
  17. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/golden-crucible.yml +0 -0
  18. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/muninn.yml +0 -0
  19. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/publish.yml +0 -0
  20. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.github/workflows/smoke-test.yml +0 -0
  21. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.gitignore +0 -0
  22. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/.gitlab-ci.yml +0 -0
  23. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/CONTRIBUTING.md +0 -0
  24. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/LICENSE +0 -0
  25. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/MANIFEST.in +0 -0
  26. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/README.md +0 -0
  27. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/SECURITY.md +0 -0
  28. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/action.yml +0 -0
  29. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/azure-pipelines.yml +0 -0
  30. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/bitbucket-pipelines.yml +0 -0
  31. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/README.md +0 -0
  32. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/__init__.py +0 -0
  33. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/cobol_refractor_controller.py +0 -0
  34. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/cobol_to_java_controller.py +0 -0
  35. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/README.md +0 -0
  36. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/__init__.py +0 -0
  37. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/detector.py +0 -0
  38. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/guidestar_lens.py +0 -0
  39. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/network_risk_sensor.py +0 -0
  40. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/prism.py +0 -0
  41. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/spatial_mapper.py +0 -0
  42. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/core/state_rehydrator.py +0 -0
  43. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/galaxyscope.py +0 -0
  44. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/licensing.py +0 -0
  45. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/README.md +0 -0
  46. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/__init__.py +0 -0
  47. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/chronometer.py +0 -0
  48. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/signal_processor.py +0 -0
  49. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/statistical_auditor.py +0 -0
  50. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/metrics/tensor_scanner.py +0 -0
  51. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/README.md +0 -0
  52. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/__init__.py +0 -0
  53. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/audit_recorder.py +0 -0
  54. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/gpu_recorder.py +0 -0
  55. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/llm_recorder.py +0 -0
  56. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/record_keeper.py +0 -0
  57. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/sarif_recorder.py +0 -0
  58. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/recorders/sbom_recorder.py +0 -0
  59. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/requirements.txt +0 -0
  60. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/security/README.md +0 -0
  61. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/security/__init__.py +0 -0
  62. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/security/manifest_parser.py +0 -0
  63. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/security/security_auditor.py +0 -0
  64. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/security/security_lens.py +0 -0
  65. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/README.md +0 -0
  66. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/__init__.py +0 -0
  67. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/analysis_lens.py +0 -0
  68. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/gitgalaxy_config.py +0 -0
  69. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/how_to_add_a_language.md +0 -0
  70. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/language_lens.py +0 -0
  71. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/standards/language_standards.py +0 -0
  72. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/README.md +0 -0
  73. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/__init__.py +0 -0
  74. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/ai_guardrails/README.md +0 -0
  75. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/ai_guardrails/ai_appsec_sensor.py +0 -0
  76. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/ai_guardrails/dev_agent_firewall.py +0 -0
  77. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/README.md +0 -0
  78. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_agent_task_forge.py +0 -0
  79. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_compiler_forge.py +0 -0
  80. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_dag_architect.py +0 -0
  81. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_etl_unpacker.py +0 -0
  82. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_graveyard_finder.py +0 -0
  83. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_jcl_auditor.py +0 -0
  84. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_jcl_forge.py +0 -0
  85. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_lexical_patcher.py +0 -0
  86. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_microservice_slicer.py +0 -0
  87. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_schema_forge.py +0 -0
  88. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_cobol/cobol_system_limits_reporter.py +0 -0
  89. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/README.md +0 -0
  90. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/batch_test_harness.py +0 -0
  91. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_agent_forge.py +0 -0
  92. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_api_contract_forge.py +0 -0
  93. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_build_forge.py +0 -0
  94. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_decoder_forge.py +0 -0
  95. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_service_forge.py +0 -0
  96. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_spring_forge.py +0 -0
  97. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/cobol_to_java/cobol_to_java_test_forge.py +0 -0
  98. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/network_auditing/README.md +0 -0
  99. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/network_auditing/full_api_network_map.py +0 -0
  100. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/supply_chain_security/README.md +0 -0
  101. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/supply_chain_security/binary_anomaly_detector.py +0 -0
  102. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/supply_chain_security/supply_chain_firewall.py +0 -0
  103. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/supply_chain_security/vault_sentinel.py +0 -0
  104. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/terabyte_log_scanning/README.md +0 -0
  105. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/terabyte_log_scanning/pii_leak_hunter.py +0 -0
  106. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy/tools/terabyte_log_scanning/terabyte_log_scanner.py +0 -0
  107. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/SOURCES.txt +0 -0
  108. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/dependency_links.txt +0 -0
  109. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/entry_points.txt +0 -0
  110. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/requires.txt +0 -0
  111. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/scm_file_list.json +0 -0
  112. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/gitgalaxy.egg-info/top_level.txt +0 -0
  113. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/github-action-readme.md +0 -0
  114. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/mkdocs.yml +0 -0
  115. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/muninn.yml +0 -0
  116. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/pyproject.toml +0 -0
  117. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/setup.cfg +0 -0
  118. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/azure/azure-pipelines.yml +0 -0
  119. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/bitbucket/bitbucket-pipelines.yml +0 -0
  120. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/bitbucket/bitbucket_insights.py +0 -0
  121. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/github/gitgalaxy-pipeline.yml +0 -0
  122. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/gitlab/scan.yml +0 -0
  123. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/templates/scan.yml +0 -0
  124. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/README.md +0 -0
  125. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/readme.md +0 -0
  126. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_agent_task_forge.py +0 -0
  127. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_compiler_forge.py +0 -0
  128. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_dag_architect.py +0 -0
  129. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_etl_unpacker.py +0 -0
  130. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_graveyard_finder.py +0 -0
  131. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_jcl_auditor.py +0 -0
  132. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_jcl_forge.py +0 -0
  133. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_lexical_patcher.py +0 -0
  134. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_microservice_slicer.py +0 -0
  135. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_refractor_controller.py +0 -0
  136. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_schema_forge.py +0 -0
  137. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/cobol_mainframe/test_cobol_system_limits_reporter.py +0 -0
  138. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/readme.md +0 -0
  139. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_chronometer.py +0 -0
  140. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_chronometer_timeout.py +0 -0
  141. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_delta_scanner.py +0 -0
  142. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_detector.py +0 -0
  143. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_galaxyscope.py +0 -0
  144. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_guidestar_lens.py +0 -0
  145. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_language_lens.py +0 -0
  146. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_language_standards_strict.py +0 -0
  147. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_licensing.py +0 -0
  148. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_manifest_parser.py +0 -0
  149. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_prism.py +0 -0
  150. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_signal_processor.py +0 -0
  151. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_state_rehydrator.py +0 -0
  152. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/core_engine/test_zero_dependency.py +0 -0
  153. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/extraction/readme.md +0 -0
  154. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/extraction/test_args_extraction_strict.py +0 -0
  155. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/extraction/test_class_extraction_strict.py +0 -0
  156. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/extraction/test_dependency_extraction_strict.py +0 -0
  157. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/extraction/test_function_extraction_strict.py +0 -0
  158. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/golden_diff.py +0 -0
  159. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/golden_master_audit.json +0 -0
  160. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/golden_master_zero_dep_audit.json +0 -0
  161. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/readme.md +0 -0
  162. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_ai_appsec_sensor.py +0 -0
  163. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_api_network_map.py +0 -0
  164. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_binary_anomaly_detector.py +0 -0
  165. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_dev_agent_firewall.py +0 -0
  166. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_network_risk_sensor.py +0 -0
  167. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_pii_leak_hunter.py +0 -0
  168. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_redos_poison.py +0 -0
  169. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_security_auditor.py +0 -0
  170. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_security_lens.py +0 -0
  171. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_statistical_auditor.py +0 -0
  172. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_supply_chain_firewall.py +0 -0
  173. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_tensor_auditor.py +0 -0
  174. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_terabyte_log_scanner.py +0 -0
  175. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/security_auditing/test_vault_sentinel.py +0 -0
  176. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/readme.md +0 -0
  177. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_agent_forge.py +0 -0
  178. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_audit_recorder.py +0 -0
  179. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_batch_test_harness.py +0 -0
  180. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_decoder_forge.py +0 -0
  181. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_golden_forge.py +0 -0
  182. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_gpu_recorder.py +0 -0
  183. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_llm_recorder.py +0 -0
  184. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_record_keeper.py +0 -0
  185. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_sbom_generator.py +0 -0
  186. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/tests/tools_recorders/test_service_forge.py +0 -0
  187. {gitgalaxy-2.3.43 → gitgalaxy-2.4.1}/zizmor.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitgalaxy
3
- Version: 2.3.43
3
+ Version: 2.4.1
4
4
  Summary: An AST-free, LLM-free zero-trust static analysis engine for mapping architectural risk, securing CI/CD pipelines, and modernizing legacy monoliths.
5
5
  Author: Joe Esquibel
6
6
  Project-URL: Homepage, https://gitgalaxy.io
@@ -122,12 +122,13 @@ class ApertureFilter:
122
122
 
123
123
  def evaluate_path_integrity(self, file_path: Union[str, Path], has_intent: bool = False) -> Tuple[bool, int, str]:
124
124
  """
125
- [PHASE 0 ENTRY POINT]
125
+ [GATE 1: Perimeter Gating (Zero-I/O Path Evaluation)]
126
126
  Performs high-speed path analysis to build the initial File Census.
127
127
 
128
128
  DEFENSIVE DESIGN: We determine if a file is physically valid based on OS metadata
129
- *before* any disk I/O (file opening/reading) occurs. This prevents OS-level locks
130
- and drastically reduces Memory/CPU overhead on large monolithic repositories.
129
+ *before* any disk I/O (file opening/reading) occurs. All operations here are fast
130
+ string matching to prevent unnecessary disk reads and drastically reduce Memory/CPU
131
+ overhead on large monolithic repositories.
131
132
  """
132
133
  path_obj = Path(file_path)
133
134
  normalized_path = path_obj.as_posix()
@@ -143,14 +144,14 @@ class ApertureFilter:
143
144
  except OSError:
144
145
  size_bytes = 0
145
146
 
146
- # --- TIER 0.1: THE SECRETS RADAR ---
147
+ # --- Gate 1.1: Credential Exposure Radar ---
147
148
  if path_obj.name in self.config.get("SECRETS_EXACT", set()) or ext.lower() in self.config.get(
148
149
  "SECRETS_EXTENSIONS", set()
149
150
  ):
150
151
  reason = f"CRITICAL LEAK (Exposed Secret: '{path_obj.name}')"
151
152
  return False, size_bytes, reason
152
153
 
153
- # --- TIER 0.2: THE NEURAL AUDITOR SHUNT (Model Weights) ---
154
+ # --- Gate 1.2: Model Weight Shunt ---
154
155
  AI_MODEL_EXTS = {
155
156
  ".safetensors",
156
157
  ".gguf",
@@ -167,7 +168,7 @@ class ApertureFilter:
167
168
  self.logger.info(f"NEURAL SHUNT: Routing {path_obj.name} away from standard regex engines.")
168
169
  return False, size_bytes, reason
169
170
 
170
- # --- TIER 0.5: THE ABSOLUTE EXTENSION SHIELD ---
171
+ # --- Gate 1.3: Explicit Extension Firewall ---
171
172
  if ext.lower() in self.ignored_extensions and ext.lower() not in self.whitelisted_extensions:
172
173
  reason = f"Blocked (Explicitly Denied Extension: '{ext}')"
173
174
  return False, size_bytes, reason
@@ -177,12 +178,12 @@ class ApertureFilter:
177
178
  if active_intent:
178
179
  self._intent_cache.add(normalized_path)
179
180
 
180
- # --- TIER 1: CHECK EXPLICIT IGNORE RULES (.gitignore, node_modules, etc) ---
181
+ # --- Gate 1.4: Ecosystem Ignore Resolver (.gitignore, node_modules, etc.) ---
181
182
  if not self._check_ignore_rules(relative_path, has_intent=active_intent):
182
183
  reason = "Blocked (System Exclusion, Hidden Directory, or Dynamic Ignored Dir)"
183
184
  return False, size_bytes, reason
184
185
 
185
- # --- TIER 2: VALIDATE AGAINST SUPPORTED REGISTRY ---
186
+ # --- Gate 1.5: Language Registry Validation ---
186
187
  if active_intent:
187
188
  return True, size_bytes, "Passed (GuideStar Intent Lock)"
188
189
 
@@ -202,7 +203,7 @@ class ApertureFilter:
202
203
  has_intent: bool = False,
203
204
  ) -> FilterResult:
204
205
  """
205
- [PHASE 1 ENTRY POINT]
206
+ [GATE 2: Physical Mass Gating (OS Metadata)]
206
207
  The final Content Gate. Validates the physical matter of the artifact
207
208
  to ensure it is not binary, minified, or auto-generated debris.
208
209
  """
@@ -227,9 +228,10 @@ class ApertureFilter:
227
228
  stats = path_obj.stat()
228
229
  result["size_bytes"] = stats.st_size
229
230
 
230
- # --- TIER 0: RESOURCE GUARDING (Hard Limits) ---
231
- # DEFENSIVE DESIGN: A hard 10MB limit prevents a single massive log or SQL dump
232
- # from consuming all available RAM and triggering an OOM kill from the OS.
231
+ # --- Gate 2.1: Mass Saturation Limit ---
232
+ # DEFENSIVE DESIGN: Uses os.stat to check file size before allocating RAM.
233
+ # A hard 10MB limit prevents a single massive log or SQL dump from consuming
234
+ # all available RAM and triggering an OOM kill from the OS.
233
235
  max_mb = self.config.get("MAX_FILE_SIZE_MB", 10)
234
236
  if stats.st_size > (max_mb * 1024 * 1024):
235
237
  result.update(
@@ -240,7 +242,7 @@ class ApertureFilter:
240
242
  )
241
243
  return result
242
244
 
243
- # --- TIER 1 & 2: PATH VALIDATION ---
245
+ # --- Gate 1 & 2 Execution: PATH VALIDATION ---
244
246
  is_valid, size_bytes, reason = self.evaluate_path_integrity(path_obj, has_intent=active_intent)
245
247
 
246
248
  if not is_valid:
@@ -259,7 +261,7 @@ class ApertureFilter:
259
261
  )
260
262
  return result
261
263
 
262
- # --- TIER 3 & 4: CONTENT VALIDATION ---
264
+ # --- CONTENT VALIDATION ---
263
265
  if content is None:
264
266
  result["reason"] = "Protocol Violation: Missing content buffer"
265
267
  return result
@@ -292,13 +294,20 @@ class ApertureFilter:
292
294
  "loc": 0,
293
295
  }
294
296
 
295
- # Split lines early so we can use LOC for all heuristics
296
- lines_list = content.splitlines()
297
- report["loc"] = len(lines_list)
298
-
299
- # --- TIER 3: OPAQUE BINARY DETECTION ---
297
+ # ==============================================================================
298
+ # Gate 3: Raw Buffer Gating (C-Backed String Operations)
299
+ # DEFENSIVE DESIGN: Allocating a massive array of strings via splitlines() is an
300
+ # O(N) memory operation that will crash the worker if the file is a 50MB compiled binary.
301
+ # We delay line splitting and use highly optimized C-backed string methods first.
302
+ # ==============================================================================
303
+
304
+ # Fast line count estimation using C-backed count
305
+ loc = content.count("\n") + 1
306
+ report["loc"] = loc
307
+
308
+ # --- Gate 3.1: Opaque Binary Sensor ---
300
309
  # DEFENSIVE DESIGN: Checking for a null byte is the fastest, most reliable
301
- # heuristic to identify compiled binaries or images masquerading as text files.
310
+ # heuristic to identify compiled binaries masquerading as text files.
302
311
  if "\x00" in content:
303
312
  report.update(
304
313
  {
@@ -309,121 +318,81 @@ class ApertureFilter:
309
318
  )
310
319
  return report
311
320
 
312
- # --- TIER 3.1: THE MONOLITH AMALGAMATION SHIELD ---
321
+ # --- Gate 3.2: Monolith Amalgamation Shield ---
313
322
  # DEFENSIVE DESIGN: 30,000+ lines in a single file is usually an amalgamation (e.g. sqlite3.c).
314
323
  # Standard Structural Signature extractors suffer from Catastrophic Backtracking on files of this magnitude.
315
- if report["loc"] > 30000:
324
+ if loc > 30000:
316
325
  report.update(
317
326
  {
318
327
  "valid": False,
319
328
  "classification": "oversized_minified",
320
- "reason": f"Blocked (Monolithic Amalgamation: {report['loc']} LOC exceeds safe regex boundaries)",
329
+ "reason": f"Blocked (Monolithic Amalgamation: {loc} LOC exceeds safe regex boundaries)",
321
330
  }
322
331
  )
323
332
  return report
324
333
 
325
- # --- TIER 3.5: AUTO-GEN DOC SHIELD ---
326
334
  low_path = rel_path.lower()
327
- if low_path.endswith((".html", ".htm", ".xml")):
328
- head_sample = "\n".join(lines_list[:100])
329
- if self.doc_generator_pattern.search(head_sample):
330
- parent_dir = str(Path(rel_path).parent)
331
- if parent_dir != ".":
332
- self.dynamic_ignore_dirs.add(parent_dir)
333
- self.logger.debug(f"Dynamic Ignore: Directory '{parent_dir}' flagged as Auto-Generated Docs.")
334
-
335
- report.update(
336
- {
337
- "valid": False,
338
- "classification": "generated_noise",
339
- "reason": "Blocked (Machine-Generated Documentation Signature)",
340
- }
341
- )
342
- return report
343
335
 
344
- # --- TIER 3.6: MACHINE-GENERATED SOURCE SHIELD ---
345
- head_sample = "\n".join(lines_list[:100])
346
- if self.machine_gen_pattern.search(head_sample):
347
- if not has_intent or report["loc"] > 1000:
348
- report.update(
349
- {
350
- "valid": False,
351
- "classification": "generated_noise",
352
- "reason": f"Blocked (Machine-Generated Source Code Signature: {report['loc']} LOC)",
353
- }
354
- )
355
- return report
356
-
357
- # --- TIER 3.7: LEXICAL MONOTONY SHIELD (Generated Code) ---
358
- if report["loc"] > 2000 and not has_intent and not low_path.endswith((".cpy", ".cbl", ".cob")):
359
- sample_lines = lines_list[:500]
360
- meaningful_lines = [l for l in sample_lines if l.strip()]
361
-
362
- if len(meaningful_lines) > 100:
363
- indent_counts = {}
364
- for l in meaningful_lines:
365
- indent = len(l) - len(l.lstrip())
366
- indent_counts[indent] = indent_counts.get(indent, 0) + 1
367
-
368
- max_indent_freq = max(indent_counts.values())
369
- if (max_indent_freq / len(meaningful_lines)) > 0.85:
370
- report.update(
371
- {
372
- "valid": False,
373
- "classification": "generated_noise",
374
- "reason": f"Blocked (Lexical Monotony: High structural repetition detected in {report['loc']} LOC)",
375
- }
376
- )
377
- return report
378
-
379
- # --- TIER 3.8: DECLARATIVE & VECTOR DATA SHIELD ---
336
+ # --- Gate 3.3: Static Asset Bloat Deflector ---
337
+ # DEFENSIVE DESIGN: Static Assets contain zero executable payload. If they exceed
338
+ # a few thousand lines, they are data dumps, not configuration files.
380
339
  if low_path.endswith((".yml", ".yaml", ".json", ".xml", ".svg", ".sql", ".csv", ".tsv")):
381
- if report["loc"] > 2500:
340
+ if loc > 2500:
382
341
  report.update(
383
342
  {
384
343
  "valid": False,
385
344
  "classification": "generated_noise",
386
- "reason": f"Blocked (Massive Declarative/Vector Blob: {report['loc']} LOC)",
345
+ "reason": f"Blocked (Massive Static Asset Blob: {loc} LOC)",
387
346
  }
388
347
  )
389
348
  return report
390
- elif not has_intent and report["loc"] > 1000:
349
+ elif not has_intent and loc > 1000:
391
350
  report.update(
392
351
  {
393
352
  "valid": False,
394
353
  "classification": "generated_noise",
395
- "reason": f"Blocked (Declarative Data Blob without Intent: {report['loc']} LOC)",
354
+ "reason": f"Blocked (Static Asset Blob without Intent: {loc} LOC)",
396
355
  }
397
356
  )
398
357
  return report
399
358
 
400
- # --- TIER 3.9: TEST DATA & ARRAY SHIELD ---
359
+ # --- Gate 3.4: Embedded Matrix Shield ---
401
360
  # DEFENSIVE DESIGN: Massive comma-separated arrays or hex blobs (like embedded images
402
361
  # inside C++ headers) contain 0 executable payload, but will completely stall a structural parser.
403
- if report["loc"] > 500:
362
+ if loc > 500:
404
363
  hex_count = content.count("0x") + content.count("0X")
405
- if hex_count > report["loc"]:
364
+ if hex_count > loc:
406
365
  report.update(
407
366
  {
408
367
  "valid": False,
409
368
  "classification": "binary_payload",
410
- "reason": f"Blocked (Embedded Hex Payload: {hex_count} hex tokens in {report['loc']} LOC)",
369
+ "reason": f"Blocked (Embedded Hex Payload: {hex_count} hex tokens in {loc} LOC)",
411
370
  }
412
371
  )
413
372
  return report
414
373
 
415
374
  comma_count = content.count(",")
416
- if comma_count > (report["loc"] * 3):
375
+ if comma_count > (loc * 3):
417
376
  report.update(
418
377
  {
419
378
  "valid": False,
420
379
  "classification": "binary_payload",
421
- "reason": f"Blocked (Embedded Array/Matrix Payload: {comma_count} commas in {report['loc']} LOC)",
380
+ "reason": f"Blocked (Embedded Array/Matrix Payload: {comma_count} commas in {loc} LOC)",
422
381
  }
423
382
  )
424
383
  return report
425
384
 
426
- # --- TIER 4: MINIFICATION & SATURATION GATE ---
385
+ # ==============================================================================
386
+ # Gate 4: Header & Signature Gating (Shallow Regex)
387
+ # DEFENSIVE DESIGN: The file has survived the binary and mass structural checks.
388
+ # It is now safe to allocate memory for the line array. We slice the file into
389
+ # lines, but limit expensive regex operations to the first 100 lines (the header).
390
+ # ==============================================================================
391
+ lines_list = content.splitlines()
392
+
393
+ # --- Gate 4.1: Minification & Saturation Gate ---
394
+ # DEFENSIVE DESIGN: Code minifiers remove newlines, creating ultra-long strings
395
+ # that cause regex engines to hang (ReDoS). We check the first 100 lines for length.
427
396
  max_line = self.config.get("MAX_LINE_LENGTH", 500)
428
397
  is_prose = low_path.endswith((".md", ".markdown", ".txt", ".json", ".csv", ".rst", ".sql", ".svg"))
429
398
 
@@ -438,6 +407,66 @@ class ApertureFilter:
438
407
  )
439
408
  return report
440
409
 
410
+ head_sample = "\n".join(lines_list[:100])
411
+
412
+ # --- Gate 4.2: Auto-Generated Documentation Shield ---
413
+ if low_path.endswith((".html", ".htm", ".xml")):
414
+ if self.doc_generator_pattern.search(head_sample):
415
+ parent_dir = str(Path(rel_path).parent)
416
+ if parent_dir != ".":
417
+ self.dynamic_ignore_dirs.add(parent_dir)
418
+ self.logger.debug(f"Dynamic Ignore: Directory '{parent_dir}' flagged as Auto-Generated Docs.")
419
+
420
+ report.update(
421
+ {
422
+ "valid": False,
423
+ "classification": "generated_noise",
424
+ "reason": "Blocked (Machine-Generated Documentation Signature)",
425
+ }
426
+ )
427
+ return report
428
+
429
+ # --- Gate 4.3: Machine-Generated Source Sensor ---
430
+ if self.machine_gen_pattern.search(head_sample):
431
+ if not has_intent or loc > 1000:
432
+ report.update(
433
+ {
434
+ "valid": False,
435
+ "classification": "generated_noise",
436
+ "reason": f"Blocked (Machine-Generated Source Code Signature: {loc} LOC)",
437
+ }
438
+ )
439
+ return report
440
+
441
+ # ==============================================================================
442
+ # Gate 5: Deep Structural Gating (Python Iteration)
443
+ # DEFENSIVE DESIGN: This calculates indentation frequencies to detect highly repetitive,
444
+ # machine-generated code. Because it requires a Python `for` loop and string stripping,
445
+ # it is the most computationally expensive check and sits at the absolute bottom of the funnel.
446
+ # ==============================================================================
447
+
448
+ # --- Gate 5.1: Lexical Monotony Sensor ---
449
+ if loc > 2000 and not has_intent and not low_path.endswith((".cpy", ".cbl", ".cob")):
450
+ sample_lines = lines_list[:500]
451
+ meaningful_lines = [l for l in sample_lines if l.strip()]
452
+
453
+ if len(meaningful_lines) > 100:
454
+ indent_counts = {}
455
+ for l in meaningful_lines:
456
+ indent = len(l) - len(l.lstrip())
457
+ indent_counts[indent] = indent_counts.get(indent, 0) + 1
458
+
459
+ max_indent_freq = max(indent_counts.values())
460
+ if (max_indent_freq / len(meaningful_lines)) > 0.85:
461
+ report.update(
462
+ {
463
+ "valid": False,
464
+ "classification": "generated_noise",
465
+ "reason": f"Blocked (Lexical Monotony: High structural repetition detected in {loc} LOC)",
466
+ }
467
+ )
468
+ return report
469
+
441
470
  return report
442
471
 
443
472
  def _check_ignore_rules(self, rel_path: str, has_intent: bool = False) -> bool:
@@ -502,4 +531,4 @@ class ApertureFilter:
502
531
  except Exception as e:
503
532
  self.logger.warning(f"Failed to parse .gitignore: {e}")
504
533
 
505
- return patterns
534
+ return patterns
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitgalaxy
3
- Version: 2.3.43
3
+ Version: 2.4.1
4
4
  Summary: An AST-free, LLM-free zero-trust static analysis engine for mapping architectural risk, securing CI/CD pipelines, and modernizing legacy monoliths.
5
5
  Author: Joe Esquibel
6
6
  Project-URL: Homepage, https://gitgalaxy.io
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "2.3.43",
2
+ "tag": "2.4.1",
3
3
  "distance": 0,
4
- "node": "g8cfa3b24c9b2f199858980084154d88a6a318317",
4
+ "node": "g1a59a19447653f572119910fd345bac9c52c4acc",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-07-17"
@@ -280,7 +280,7 @@ def test_aperture_declarative_blob_shield(filter_engine, tmp_path):
280
280
 
281
281
  res1 = filter_engine.is_in_scope(json_file, content=content_1500, has_intent=False)
282
282
  assert res1["is_in_scope"] is False
283
- assert "Declarative Data Blob without Intent" in res1["reason"]
283
+ assert "Static Asset Blob without Intent" in res1["reason"]
284
284
 
285
285
  # 2. Over 2500 LOC, WITH Intent -> Still Blocked (Absolute Cap)
286
286
  content_3000 = "{\n" + ' "key": "value",\n' * 3000 + "}"
@@ -288,7 +288,7 @@ def test_aperture_declarative_blob_shield(filter_engine, tmp_path):
288
288
 
289
289
  res2 = filter_engine.is_in_scope(json_file, content=content_3000, has_intent=True)
290
290
  assert res2["is_in_scope"] is False
291
- assert "Massive Declarative/Vector Blob" in res2["reason"]
291
+ assert "Massive Static Asset Blob" in res2["reason"]
292
292
 
293
293
 
294
294
  # ==============================================================================
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes