gitgalaxy 2.0.9__tar.gz → 2.2.0__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 (174) hide show
  1. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/workflows/codeql.yml +3 -3
  2. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/workflows/deploy-docs.yml +2 -2
  3. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/workflows/publish.yml +2 -2
  4. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.gitignore +14 -0
  5. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/PKG-INFO +9 -8
  6. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/README.md +8 -7
  7. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/action.yml +1 -1
  8. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/aperture.py +42 -45
  9. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/detector.py +6 -1
  10. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/network_risk_sensor.py +20 -13
  11. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/galaxyscope.py +53 -6
  12. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/neural_auditor.py +1 -1
  13. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/signal_processor.py +6 -6
  14. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/llm_recorder.py +51 -37
  15. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/record_keeper.py +18 -14
  16. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/security/security_auditor.py +60 -18
  17. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/security/security_lens.py +52 -61
  18. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/language_lens.py +7 -0
  19. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/language_standards.py +598 -182
  20. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/README.md +3 -2
  21. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_compiler_forge.py +12 -1
  22. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_graveyard_finder.py +3 -3
  23. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_lexical_patcher.py +1 -1
  24. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_microservice_slicer.py +5 -4
  25. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_schema_forge.py +2 -1
  26. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_build_forge.py +6 -0
  27. gitgalaxy-2.2.0/gitgalaxy/tools/cobol_to_java/cobol_to_java_test_forge.py +104 -0
  28. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy.egg-info/PKG-INFO +9 -8
  29. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy.egg-info/SOURCES.txt +54 -2
  30. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/mkdocs.yml +141 -2
  31. gitgalaxy-2.2.0/tests/README.md +94 -0
  32. gitgalaxy-2.2.0/tests/cobol_mainframe/readme.md +70 -0
  33. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_agent_task_forge.py +117 -0
  34. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_compiler_forge.py +104 -0
  35. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_dag_architect.py +138 -0
  36. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_etl_unpacker.py +132 -0
  37. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_graveyard_finder.py +117 -0
  38. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_jcl_auditor.py +123 -0
  39. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_jcl_forge.py +127 -0
  40. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_lexical_patcher.py +87 -0
  41. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_microservice_slicer.py +111 -0
  42. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_refractor_controller.py +88 -0
  43. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_schema_forge.py +88 -0
  44. gitgalaxy-2.2.0/tests/cobol_mainframe/test_cobol_system_limits_reporter.py +105 -0
  45. gitgalaxy-2.2.0/tests/core_engine/readme.md +76 -0
  46. gitgalaxy-2.2.0/tests/core_engine/test_aperture.py +165 -0
  47. gitgalaxy-2.2.0/tests/core_engine/test_chronometer_timeout.py +73 -0
  48. gitgalaxy-2.2.0/tests/core_engine/test_detector.py +161 -0
  49. {gitgalaxy-2.0.9/tests → gitgalaxy-2.2.0/tests/core_engine}/test_galaxyscope.py +2 -2
  50. gitgalaxy-2.2.0/tests/core_engine/test_guidestar_lens.py +134 -0
  51. gitgalaxy-2.2.0/tests/core_engine/test_language_lens.py +48 -0
  52. gitgalaxy-2.2.0/tests/core_engine/test_language_standards_strict.py +191 -0
  53. gitgalaxy-2.2.0/tests/core_engine/test_prism.py +165 -0
  54. gitgalaxy-2.2.0/tests/core_engine/test_signal_processor.py +161 -0
  55. gitgalaxy-2.2.0/tests/core_engine/test_state_rehydrator.py +119 -0
  56. gitgalaxy-2.2.0/tests/core_engine/test_zero_dependency.py +85 -0
  57. gitgalaxy-2.2.0/tests/extraction/readme.md +72 -0
  58. gitgalaxy-2.2.0/tests/extraction/test_args_extraction_strict.py +289 -0
  59. gitgalaxy-2.2.0/tests/extraction/test_class_extraction_strict.py +329 -0
  60. gitgalaxy-2.2.0/tests/extraction/test_dependency_extraction_strict.py +462 -0
  61. gitgalaxy-2.2.0/tests/extraction/test_function_extraction_strict.py +472 -0
  62. gitgalaxy-2.2.0/tests/security_auditing/readme.md +45 -0
  63. gitgalaxy-2.2.0/tests/security_auditing/test_ai_appsec_sensor.py +105 -0
  64. gitgalaxy-2.2.0/tests/security_auditing/test_api_network_map.py +80 -0
  65. gitgalaxy-2.2.0/tests/security_auditing/test_binary_anomaly_detector.py +102 -0
  66. gitgalaxy-2.2.0/tests/security_auditing/test_dev_agent_firewall.py +137 -0
  67. gitgalaxy-2.2.0/tests/security_auditing/test_network_risk_sensor.py +148 -0
  68. gitgalaxy-2.2.0/tests/security_auditing/test_neural_auditor.py +107 -0
  69. gitgalaxy-2.2.0/tests/security_auditing/test_pii_leak_hunter.py +78 -0
  70. gitgalaxy-2.2.0/tests/security_auditing/test_redos_poison.py +113 -0
  71. gitgalaxy-2.2.0/tests/security_auditing/test_sbom_generator.py +101 -0
  72. gitgalaxy-2.2.0/tests/security_auditing/test_spectral_auditor.py +147 -0
  73. gitgalaxy-2.2.0/tests/security_auditing/test_supply_chain_firewall.py +93 -0
  74. gitgalaxy-2.2.0/tests/security_auditing/test_terabyte_log_scanner.py +127 -0
  75. gitgalaxy-2.2.0/tests/security_auditing/test_vault_sentinel.py +101 -0
  76. gitgalaxy-2.2.0/tests/tools_recorders/readme.md +36 -0
  77. gitgalaxy-2.2.0/tests/tools_recorders/test_agent_forge.py +60 -0
  78. gitgalaxy-2.2.0/tests/tools_recorders/test_batch_test_harness.py +102 -0
  79. gitgalaxy-2.2.0/tests/tools_recorders/test_decoder_forge.py +103 -0
  80. gitgalaxy-2.2.0/tests/tools_recorders/test_golden_forge.py +113 -0
  81. gitgalaxy-2.2.0/tests/tools_recorders/test_gpu_recorder.py +51 -0
  82. gitgalaxy-2.2.0/tests/tools_recorders/test_service_forge.py +60 -0
  83. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/ISSUE_TEMPLATE/parsing_discrepancy.yml +0 -0
  84. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/dependabot.yml +0 -0
  85. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/pull_request_template.md +0 -0
  86. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/.github/workflows/smoke-test.yml +0 -0
  87. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/CONTRIBUTING.md +0 -0
  88. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/LICENSE +0 -0
  89. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/MANIFEST.in +0 -0
  90. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/README.md +0 -0
  91. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/__init__.py +0 -0
  92. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/cobol_refractor_controller.py +0 -0
  93. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/cobol_to_java_controller.py +0 -0
  94. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/README.md +0 -0
  95. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/__init__.py +0 -0
  96. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/guidestar_lens.py +0 -0
  97. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/prism.py +0 -0
  98. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/core/state_rehydrator.py +0 -0
  99. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/README.md +0 -0
  100. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/__init__.py +0 -0
  101. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/chronometer.py +0 -0
  102. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/physics/spectral_auditor.py +0 -0
  103. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/README.md +0 -0
  104. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/__init__.py +0 -0
  105. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/audit_recorder.py +0 -0
  106. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/recorders/gpu_recorder.py +0 -0
  107. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/security/README.md +0 -0
  108. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/security/__init__.py +0 -0
  109. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/README.md +0 -0
  110. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/__init__.py +0 -0
  111. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/analysis_lens.py +0 -0
  112. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/gitgalaxy_config.py +0 -0
  113. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/standards/how_to_add_a_language.md +0 -0
  114. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/README.md +0 -0
  115. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/__init__.py +0 -0
  116. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/ai_guardrails/README.md +0 -0
  117. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/ai_guardrails/ai_appsec_sensor.py +0 -0
  118. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/ai_guardrails/dev_agent_firewall.py +0 -0
  119. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_agent_task_forge.py +0 -0
  120. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_dag_architect.py +0 -0
  121. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_etl_unpacker.py +0 -0
  122. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_jcl_auditor.py +0 -0
  123. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_jcl_forge.py +0 -0
  124. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_cobol/cobol_system_limits_reporter.py +0 -0
  125. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/README.md +0 -0
  126. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/batch_test_harness.py +0 -0
  127. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_agent_forge.py +0 -0
  128. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_api_contract_forge.py +0 -0
  129. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_decoder_forge.py +0 -0
  130. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_service_forge.py +0 -0
  131. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/cobol_to_java/cobol_to_java_spring_forge.py +0 -0
  132. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/compliance/README.md +0 -0
  133. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/compliance/sbom_generator.py +0 -0
  134. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/network_auditing/README.md +0 -0
  135. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/network_auditing/full_api_network_map.py +0 -0
  136. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/supply_chain_security/README.md +0 -0
  137. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/supply_chain_security/binary_anomaly_detector.py +0 -0
  138. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/supply_chain_security/supply_chain_firewall.py +0 -0
  139. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/supply_chain_security/vault_sentinel.py +0 -0
  140. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/terabyte_log_scanning/README.md +0 -0
  141. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/terabyte_log_scanning/pii_leak_hunter.py +0 -0
  142. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy/tools/terabyte_log_scanning/terabyte_log_scanner.py +0 -0
  143. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy.egg-info/dependency_links.txt +0 -0
  144. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy.egg-info/entry_points.txt +0 -0
  145. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/gitgalaxy.egg-info/top_level.txt +0 -0
  146. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/pyproject.toml +0 -0
  147. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/setup.cfg +0 -0
  148. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/.gitattributes +0 -0
  149. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/.gitignore +0 -0
  150. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/LICENSE +0 -0
  151. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/Makefile +0 -0
  152. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/README.md +0 -0
  153. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/bufio.go +0 -0
  154. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/bufio_test.go +0 -0
  155. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/example_test.go +0 -0
  156. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/export_test.go +0 -0
  157. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/net_test.go +0 -0
  158. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/scan.go +0 -0
  159. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/bufio/scan_test.go +0 -0
  160. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/config.py +0 -0
  161. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/convert_em.F +0 -0
  162. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/dnn_converters.cpp +0 -0
  163. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/dnn_converters.hpp +0 -0
  164. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/insert_pinyin_to_db.py +0 -0
  165. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/iwubi.py +0 -0
  166. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/iwubi.svg +0 -0
  167. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/iwubi.xml +0 -0
  168. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/logconfig.py +0 -0
  169. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/logconfig.yaml +0 -0
  170. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/pinyin_simp.dict.csv +0 -0
  171. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/screenshot/add.png +0 -0
  172. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/screenshot/iwubi.gif +0 -0
  173. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/screenshot/set_ibus.png +0 -0
  174. {gitgalaxy-2.0.9 → gitgalaxy-2.2.0}/tests/fixtures/iwubi_frankenstein_test/wubi-jidian86.db +0 -0
@@ -24,10 +24,10 @@ jobs:
24
24
 
25
25
  steps:
26
26
  - name: Checkout repository
27
- uses: actions/checkout@v4
27
+ uses: actions/checkout@v6
28
28
 
29
29
  - name: Initialize CodeQL
30
- uses: github/codeql-action/init@v3
30
+ uses: github/codeql-action/init@v4
31
31
  with:
32
32
  languages: ${{ matrix.language }}
33
33
  # If you have specific queries you want to run, you can specify them here.
@@ -35,6 +35,6 @@ jobs:
35
35
  queries: security-extended,security-and-quality
36
36
 
37
37
  - name: Perform CodeQL Analysis
38
- uses: github/codeql-action/analyze@v3
38
+ uses: github/codeql-action/analyze@v4
39
39
  with:
40
40
  category: "/language:${{matrix.language}}"
@@ -15,7 +15,7 @@ jobs:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
17
  - name: Checkout Repository
18
- uses: actions/checkout@v4
18
+ uses: actions/checkout@v6
19
19
  with:
20
20
  fetch-depth: 0 # Required for git info/history (like last updated timestamps)
21
21
 
@@ -25,7 +25,7 @@ jobs:
25
25
  git config user.email 41898282+github-actions[bot]@users.noreply.github.com
26
26
 
27
27
  - name: Set up Python
28
- uses: actions/setup-python@v5
28
+ uses: actions/setup-python@v6
29
29
  with:
30
30
  python-version: 3.x
31
31
 
@@ -21,12 +21,12 @@ jobs:
21
21
 
22
22
  steps:
23
23
  - name: Checkout repository
24
- uses: actions/checkout@v4
24
+ uses: actions/checkout@v6
25
25
  with:
26
26
  fetch-depth: 0 # <--- ADD THIS so it downloads your Git tags!
27
27
 
28
28
  - name: Set up Python
29
- uses: actions/setup-python@v5
29
+ uses: actions/setup-python@v6
30
30
  with:
31
31
  python-version: "3.10"
32
32
 
@@ -71,3 +71,17 @@ site/museum/
71
71
  museum/
72
72
  updated_results_expanded_story/
73
73
  updated_results_2/
74
+ gitgalaxy/README gitgalaxy.md
75
+ gitgalaxy/core/README core.md
76
+ gitgalaxy/physics/README physics.md
77
+ gitgalaxy/recorders/README recorder.md
78
+ gitgalaxy/security/README security.md
79
+ gitgalaxy/standards/README standards.md
80
+ gitgalaxy/tools/README tools.md
81
+ gitgalaxy/tools/ai_guardrails/README ai.md
82
+ gitgalaxy/tools/cobol_to_cobol/README c2c.md
83
+ gitgalaxy/tools/cobol_to_java/README c2j.md
84
+ gitgalaxy/tools/compliance/README sbom.md
85
+ gitgalaxy/tools/network_auditing/README network.md
86
+ gitgalaxy/tools/supply_chain_security/README supply_chain.md
87
+ gitgalaxy/tools/terabyte_log_scanning/README terabyte.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitgalaxy
3
- Version: 2.0.9
3
+ Version: 2.2.0
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
@@ -173,15 +173,20 @@ Unindexed, tactical log analysis operating at 0.07 GB/sec. It streams massive da
173
173
  ### [AI Agent Guardrails & Codebase Protection](gitgalaxy/tools/ai_guardrails/)
174
174
  Specialized keyword sensors protecting both your application and your codebase. The AppSec Sensor detects weaponized LLM features (RCE funnels, exfiltration risks), while the Dev Agent Firewall evaluates token mass and blast radius to restrict autonomous coding agents from modifying dangerous over context token-draining files. Helps identify which files need to be chunked to reduce context overload.
175
175
 
176
- ## Local Browser-Based 3D Codebase Visualization
176
+ ## Local Browser-Based 3D Codebase Visualization
177
177
 
178
178
  If you prefer visual analytics, we've built a non-numerical dashboard where each file represents a star, sized and colored according to specific risk metrics.
179
179
 
180
180
  Simply drag and drop your generated `your_repo_GPU_galaxy.json` file (or a `.zip` of your raw repository) directly into [GitGalaxy.io](https://gitgalaxy.io/). All rendering and scanning happens entirely in your browser's local memory.
181
181
 
182
- ![GitGalaxy 3D structural mapping of API exposure and state flux risks in the Apollo 11 legacy codebase](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/apollo-11_state_flux.png)
182
+ ### 🔭 Watch GitGalaxy in Action
183
183
 
184
- ![GitGalaxy native SQLite3 database schema for AST-free enterprise codebase mapping and cybersecurity auditing](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/sqlite_overview.png)
184
+ **Mapping 3.2 Million Lines of C++ in 11 Seconds | OpenCV** [![OpenCV Demo](https://img.youtube.com/vi/3ScQCSUBdZw/maxresdefault.jpg)](https://youtu.be/3ScQCSUBdZw)
185
+
186
+ **Visualizing Architectural Risk | Ruby on Rails** [![Ruby on Rails Demo](https://img.youtube.com/vi/3ScQCSUBdZw/maxresdefault.jpg)](https://youtu.be/3ScQCSUBdZw)
187
+ *(Note: Replace the video IDs in this link with your actual Rails video ID)*
188
+
189
+ ![GitGalaxy Meta Visualizer 3D star map rendering complex software repository structures and K-means clustering archetypes in the browser](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/metavisualizer.png)
185
190
 
186
191
  ## Zero-Trust Data Security
187
192
 
@@ -191,10 +196,6 @@ Your code never leaves your machine. GitGalaxy performs 100% of its scanning and
191
196
  * **Ephemeral Memory Processing:** Repositories are unpacked into a volatile memory buffer (RAM) and are automatically purged when the browser tab is closed.
192
197
  * **Privacy-by-Design:** Even when using the web-based viewer, the data remains behind the user's firewall at all times.
193
198
 
194
- ![GitGalaxy interactive WebGPU data HUD displaying real-time software architecture metrics, forensic analysis, and file-level risk telemetry](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/data_hud.png)
195
-
196
- ![GitGalaxy Meta Visualizer 3D star map rendering complex software repository structures and K-means clustering archetypes in the browser](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/metavisualizer.png)
197
-
198
199
  ## License & Copyright
199
200
 
200
201
  Copyright (c) 2026 Joe Esquibel
@@ -150,15 +150,20 @@ Unindexed, tactical log analysis operating at 0.07 GB/sec. It streams massive da
150
150
  ### [AI Agent Guardrails & Codebase Protection](gitgalaxy/tools/ai_guardrails/)
151
151
  Specialized keyword sensors protecting both your application and your codebase. The AppSec Sensor detects weaponized LLM features (RCE funnels, exfiltration risks), while the Dev Agent Firewall evaluates token mass and blast radius to restrict autonomous coding agents from modifying dangerous over context token-draining files. Helps identify which files need to be chunked to reduce context overload.
152
152
 
153
- ## Local Browser-Based 3D Codebase Visualization
153
+ ## Local Browser-Based 3D Codebase Visualization
154
154
 
155
155
  If you prefer visual analytics, we've built a non-numerical dashboard where each file represents a star, sized and colored according to specific risk metrics.
156
156
 
157
157
  Simply drag and drop your generated `your_repo_GPU_galaxy.json` file (or a `.zip` of your raw repository) directly into [GitGalaxy.io](https://gitgalaxy.io/). All rendering and scanning happens entirely in your browser's local memory.
158
158
 
159
- ![GitGalaxy 3D structural mapping of API exposure and state flux risks in the Apollo 11 legacy codebase](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/apollo-11_state_flux.png)
159
+ ### 🔭 Watch GitGalaxy in Action
160
160
 
161
- ![GitGalaxy native SQLite3 database schema for AST-free enterprise codebase mapping and cybersecurity auditing](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/sqlite_overview.png)
161
+ **Mapping 3.2 Million Lines of C++ in 11 Seconds | OpenCV** [![OpenCV Demo](https://img.youtube.com/vi/3ScQCSUBdZw/maxresdefault.jpg)](https://youtu.be/3ScQCSUBdZw)
162
+
163
+ **Visualizing Architectural Risk | Ruby on Rails** [![Ruby on Rails Demo](https://img.youtube.com/vi/3ScQCSUBdZw/maxresdefault.jpg)](https://youtu.be/3ScQCSUBdZw)
164
+ *(Note: Replace the video IDs in this link with your actual Rails video ID)*
165
+
166
+ ![GitGalaxy Meta Visualizer 3D star map rendering complex software repository structures and K-means clustering archetypes in the browser](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/metavisualizer.png)
162
167
 
163
168
  ## Zero-Trust Data Security
164
169
 
@@ -168,10 +173,6 @@ Your code never leaves your machine. GitGalaxy performs 100% of its scanning and
168
173
  * **Ephemeral Memory Processing:** Repositories are unpacked into a volatile memory buffer (RAM) and are automatically purged when the browser tab is closed.
169
174
  * **Privacy-by-Design:** Even when using the web-based viewer, the data remains behind the user's firewall at all times.
170
175
 
171
- ![GitGalaxy interactive WebGPU data HUD displaying real-time software architecture metrics, forensic analysis, and file-level risk telemetry](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/data_hud.png)
172
-
173
- ![GitGalaxy Meta Visualizer 3D star map rendering complex software repository structures and K-means clustering archetypes in the browser](https://raw.githubusercontent.com/squid-protocol/gitgalaxy/main/docs/wiki/assets/metavisualizer.png)
174
-
175
176
  ## License & Copyright
176
177
 
177
178
  Copyright (c) 2026 Joe Esquibel
@@ -32,7 +32,7 @@ runs:
32
32
  using: "composite"
33
33
  steps:
34
34
  - name: Set up Python
35
- uses: actions/setup-python@v5
35
+ uses: actions/setup-python@v6
36
36
  with:
37
37
  python-version: '3.10'
38
38
 
@@ -16,7 +16,7 @@ from typing import Dict, Any, Set, Optional, TypedDict, Union, List, Tuple
16
16
 
17
17
  # ==============================================================================
18
18
  # GitGalaxy Phase 0.1: Ingestion & Filtering (The Solar Shield)
19
- # Strategy: v6.3.0 (Heuristic Optics, Intent Overrides & Stateful Caching)
19
+ # Strategy: v6.3.1 (Monolith Ceilings, Array Shields & Intent Overrides)
20
20
  # Architecture: Lead Shield -> Path Gate -> Intent Gate -> Content Gate
21
21
  # ==============================================================================
22
22
 
@@ -148,11 +148,6 @@ class ApertureFilter:
148
148
  if path_obj.name in self.config.get("SECRETS_EXACT", set()) or \
149
149
  ext.lower() in self.config.get("SECRETS_EXTENSIONS", set()):
150
150
  reason = f"CRITICAL LEAK (Exposed Secret: '{path_obj.name}')"
151
-
152
- # Muted logger to prevent UI overlap; spokes now handle their own alerts
153
- # self.logger.critical(f"🛡️ SECURITY BREACH: {reason} at {relative_path}")
154
-
155
- # THE FIX: Return False so it drops into Dark Matter for the Supernova Injection
156
151
  return False, size_bytes, reason
157
152
 
158
153
  # --- TIER 0.2: THE NEURAL AUDITOR SHUNT (Model Weights) ---
@@ -160,7 +155,6 @@ class ApertureFilter:
160
155
  if ext.lower() in AI_MODEL_EXTS:
161
156
  reason = f"AI MODEL WEIGHTS (Bypassing Standard Logic: '{ext}')"
162
157
  self.logger.info(f"🧠 NEURAL AUDITOR SHUNT: Routing {path_obj.name} away from regex engines.")
163
- # Return False to drop into Dark Matter, bypassing the memory-crashing I/O read
164
158
  return False, size_bytes, reason
165
159
 
166
160
  # --- TIER 0.5: THE ABSOLUTE EXTENSION SHIELD ---
@@ -235,8 +229,6 @@ class ApertureFilter:
235
229
  return result
236
230
 
237
231
  # --- THE SHUNT: Content Bypass for Secrets ---
238
- # If the path gate tagged this as a secret, skip the hex/binary
239
- # content checks so it doesn't accidentally get dropped.
240
232
  if reason and "CRITICAL LEAK" in reason:
241
233
  result.update({
242
234
  "is_in_scope": True,
@@ -269,7 +261,7 @@ class ApertureFilter:
269
261
 
270
262
  def _check_artifact_integrity(self, content: str, rel_path: str, has_intent: bool = False) -> Dict[str, Any]:
271
263
  """
272
- Deep-scans the content buffer for corruption, binary data,
264
+ Deep-scans the content buffer for corruption, binary data, arrays,
273
265
  or documentation generator signatures.
274
266
  """
275
267
  report = {"valid": True, "band": self.bands.get("VISIBLE", "source_code"), "reason": None, "loc": 0}
@@ -286,6 +278,17 @@ class ApertureFilter:
286
278
  "reason": "Blocked (Binary Format Detected)"
287
279
  })
288
280
  return report
281
+
282
+ # --- TIER 3.1: THE MONOLITH AMALGAMATION SHIELD ---
283
+ # 30,000+ lines in a single file is an amalgamation (e.g. sqlite3.c) or massive test array.
284
+ # It will saturate and choke the standard regex engine. Override Intent.
285
+ if report["loc"] > 30000:
286
+ report.update({
287
+ "valid": False,
288
+ "band": self.bands.get("INFRARED", "saturated"),
289
+ "reason": f"Blocked (Monolithic Amalgamation: {report['loc']} LOC exceeds safe regex boundaries)"
290
+ })
291
+ return report
289
292
 
290
293
  # --- TIER 3.5: THE AUTO-GEN DOC SHIELD ---
291
294
  low_path = rel_path.lower()
@@ -305,9 +308,6 @@ class ApertureFilter:
305
308
  return report
306
309
 
307
310
  # --- TIER 3.6: THE MACHINE-GENERATED SOURCE SHIELD ---
308
- # THE FIX: We now evaluate the machine-gen shield for ALL files.
309
- # If a file has a VIP pass (has_intent) but is an unreadable monolith (>1000 lines),
310
- # we strip its VIP status and banish it to Dark Matter as procedural debris.
311
311
  head_sample = "\n".join(lines_list[:100])
312
312
  if self.machine_gen_shield.search(head_sample):
313
313
  if not has_intent or report["loc"] > 1000:
@@ -319,8 +319,6 @@ class ApertureFilter:
319
319
  return report
320
320
 
321
321
  # --- TIER 3.7: THE LEXICAL MONOTONY SHIELD (Generated Code) ---
322
- # Detects massive generated boilerplate by checking structural entropy
323
- # EXEMPTION: COBOL Data Divisions and Copybooks are naturally highly repetitive.
324
322
  if report["loc"] > 2000 and not has_intent and not low_path.endswith(('.cpy', '.cbl', '.cob')):
325
323
  sample_lines = lines_list[:500]
326
324
  meaningful_lines = [l for l in sample_lines if l.strip()]
@@ -340,50 +338,52 @@ class ApertureFilter:
340
338
  })
341
339
  return report
342
340
 
343
- # --- TIER 3.8: THE DECLARATIVE DATA SHIELD ---
344
- if low_path.endswith(('.yml', '.yaml', '.json', '.xml')):
345
- if report["loc"] > 1000 and not has_intent:
341
+ # --- TIER 3.8: THE DECLARATIVE & VECTOR DATA SHIELD ---
342
+ if low_path.endswith(('.yml', '.yaml', '.json', '.xml', '.svg', '.sql', '.csv', '.tsv')):
343
+ # If the file is massive, absolutely drop it. Even if Git tracks it.
344
+ if report["loc"] > 2500:
345
+ report.update({
346
+ "valid": False,
347
+ "band": self.bands.get("RADIO", "radio_noise"),
348
+ "reason": f"Blocked (Massive Declarative/Vector Blob: {report['loc']} LOC)"
349
+ })
350
+ return report
351
+ elif not has_intent and report["loc"] > 1000:
346
352
  report.update({
347
353
  "valid": False,
348
354
  "band": self.bands.get("RADIO", "radio_noise"),
349
- "reason": f"Blocked (Declarative Data Blob: {report['loc']} lines exceed 1000-line logic threshold)"
355
+ "reason": f"Blocked (Declarative Data Blob without Intent: {report['loc']} LOC)"
350
356
  })
351
357
  return report
352
358
 
353
- # --- TIER 3.9: THE EMBEDDED DATA / HEX ARRAY SHIELD ---
354
- # Drops massive test vectors, crypto keys, or images compiled into C headers.
355
- # THE FIX: Removed 'has_intent'. Absolute structural density overrides VIP folder status.
356
- if report["loc"] > 250:
359
+ # --- TIER 3.9: THE TEST DATA & ARRAY SHIELD ---
360
+ # Drops massive test vectors, crypto keys, or arrays compiled into headers/tests.
361
+ if report["loc"] > 500:
362
+ # Check 1: Hex Arrays
357
363
  hex_count = content.count('0x') + content.count('0X')
358
-
359
- # Scenario A: High Absolute Hex Density.
360
- # Catches files where hex values are densely packed on single lines,
361
- # even if interleaved with verbose C-struct initializations.
362
364
  if hex_count > report["loc"]:
363
365
  report.update({
364
366
  "valid": False,
365
367
  "band": self.bands.get("MICROWAVE", "binary_debris"),
366
- "reason": f"Blocked (Embedded Data Payload: {hex_count} hex tokens in {report['loc']} LOC)"
368
+ "reason": f"Blocked (Embedded Hex Payload: {hex_count} hex tokens in {report['loc']} LOC)"
367
369
  })
368
370
  return report
369
371
 
370
- # Scenario B: Vertical Array formatting.
371
- # Catches files where hex values are spread out 1-per-line.
372
- if hex_count > (report["loc"] * 0.2):
373
- hex_lines = sum(1 for l in lines_list if ('0x' in l or '0X' in l) and ',' in l)
374
- if (hex_lines / report["loc"]) > 0.25:
375
- report.update({
376
- "valid": False,
377
- "band": self.bands.get("MICROWAVE", "binary_debris"),
378
- "reason": f"Blocked (Embedded Data Payload: >25% of {report['loc']} LOC is hex arrays)"
379
- })
380
- return report
372
+ # Check 2: Massive Data Arrays (Comma Density)
373
+ # If there are more than 3 commas per line on average in a massive file, it's a data array/matrix.
374
+ comma_count = content.count(',')
375
+ if comma_count > (report["loc"] * 3):
376
+ report.update({
377
+ "valid": False,
378
+ "band": self.bands.get("MICROWAVE", "binary_debris"),
379
+ "reason": f"Blocked (Embedded Array/Matrix Payload: {comma_count} commas in {report['loc']} LOC)"
380
+ })
381
+ return report
381
382
 
382
383
  # --- TIER 4: INFRARED GATE (Minification & Saturation) ---
383
384
  max_line = self.config.get("MAX_LINE_LENGTH", 500)
384
385
 
385
- # Prose and documentation often have long unbroken strings (URLs, paragraphs)
386
- is_prose = low_path.endswith(('.md', '.markdown', '.txt', '.json', '.csv', '.rst'))
386
+ is_prose = low_path.endswith(('.md', '.markdown', '.txt', '.json', '.csv', '.rst', '.sql', '.svg'))
387
387
 
388
388
  for i, line in enumerate(lines_list[:100]):
389
389
  if len(line) > max_line and not is_prose:
@@ -432,7 +432,6 @@ class ApertureFilter:
432
432
  return False
433
433
 
434
434
  # 4. Standard Iterative Gitignore Logic (The Fix)
435
- # Bypasses the massive OR Regex bottleneck
436
435
  for pattern in self.ignore_patterns:
437
436
  if pattern.endswith('/'):
438
437
  if any(fnmatch.fnmatch(p + '/', pattern) for p in parts):
@@ -453,11 +452,9 @@ class ApertureFilter:
453
452
  with ignore_file.open('r', encoding='utf-8') as f:
454
453
  for line in f:
455
454
  l = line.strip()
456
- # Ignore comments and empty lines
457
455
  if l and not l.startswith('#'):
458
456
  patterns.append(l)
459
457
  except Exception as e:
460
458
  self.logger.warning(f"Failed to parse .gitignore: {e}")
461
459
 
462
- return patterns
463
-
460
+ return patterns
@@ -348,7 +348,9 @@ class LogicSplicer:
348
348
  safe_lines = []
349
349
  for line in code_stream.split('\n'):
350
350
  if len(line) > 1500:
351
- safe_lines.append(' ' * len(line))
351
+ # Preserve indentation and inject a single safe char so it isn't counted as a blank line
352
+ indent = len(line) - len(line.lstrip())
353
+ safe_lines.append(' ' * indent + 'x' + ' ' * (len(line) - indent - 1))
352
354
  else:
353
355
  safe_lines.append(line)
354
356
  code_stream = '\n'.join(safe_lines)
@@ -478,6 +480,9 @@ class LogicSplicer:
478
480
  result_payload["regex_telemetry"] = regex_telemetry
479
481
  return result_payload
480
482
 
483
+ except TimeoutError:
484
+ # Let the Hardware Guillotine drop cleanly to the Worker thread!
485
+ raise
481
486
  except Exception as e:
482
487
  self.logger.error(f"Catastrophic failure during structural splicing: {e}", exc_info=True)
483
488
  return {
@@ -92,14 +92,16 @@ class NetworkRiskSensor:
92
92
  # PageRank determines the absolute "Load-Bearing" gravity of a file
93
93
  try:
94
94
  pagerank = nx.pagerank(G, weight='weight')
95
- # NEW: Calculate Choke Points (Betweenness) and Ripple Effect (Closeness)
96
- # Note: We limit betweenness to a sample (k=50) if the graph is massive (>5k nodes) to keep it O(N) fast.
97
- k_val = min(len(G.nodes()), 50) if len(G.nodes()) > 5000 else None
95
+
96
+ # THE FIX: Drop the exact threshold from 5000 down to 500.
97
+ # Force a maximum sample size of 100 nodes for anything larger.
98
+ k_val = min(len(G.nodes()), 100) if len(G.nodes()) > 500 else None
98
99
  betweenness = nx.betweenness_centrality(G, k=k_val, weight='weight')
99
100
 
100
- # Put a hard ceiling on Closeness Centrality to prevent the O(N^2) trap
101
- if len(G.nodes()) > 5000:
102
- self.logger.warning("Graph too massive for Closeness Centrality. Bypassing.")
101
+ # THE FIX: Closeness Centrality has no built-in sampling.
102
+ # Drop the bypass threshold from 5000 to 1500 to prevent minute-long hangs.
103
+ if len(G.nodes()) > 1500:
104
+ self.logger.warning("Graph too massive for exact Closeness Centrality. Bypassing.")
103
105
  closeness = {n: 0.0 for n in G.nodes()}
104
106
  else:
105
107
  closeness = nx.closeness_centrality(G)
@@ -194,7 +196,12 @@ class NetworkRiskSensor:
194
196
  self.logger.warning("Graph too massive for Modularity. Bypassing.")
195
197
  macro_metrics["modularity"] = 0.0
196
198
  else:
197
- communities = community.greedy_modularity_communities(U)
199
+ # THE FIX: Attempt Louvain (blazing fast), fallback to Greedy (slow)
200
+ try:
201
+ communities = community.louvain_communities(U)
202
+ except AttributeError:
203
+ communities = community.greedy_modularity_communities(U)
204
+
198
205
  macro_metrics["modularity"] = round(community.modularity(U, communities), 4)
199
206
  except Exception: pass
200
207
 
@@ -275,16 +282,16 @@ class NetworkRiskSensor:
275
282
 
276
283
  if "telemetry" not in s: s["telemetry"] = {}
277
284
  s["telemetry"]["network_metrics"] = {
278
- "pagerank_score": None,
279
- "normalized_blast_radius": None,
280
- "betweenness_score": None,
281
- "closeness_score": None,
285
+ "pagerank_score": 0.0,
286
+ "normalized_blast_radius": 0.0,
287
+ "betweenness_score": 0.0,
288
+ "closeness_score": 0.0,
282
289
  "in_degree": in_d,
283
290
  "out_degree": out_d,
284
291
  "producer_ratio": round(producer_ratio, 3),
285
292
  "ecosystem_role": ecosystem_role,
286
- "systemic_threat_vector": None,
287
- "is_algorithmic_bottleneck": None
293
+ "systemic_threat_vector": [],
294
+ "is_algorithmic_bottleneck": False
288
295
  }
289
296
  s["telemetry"]["popularity"] = in_d
290
297
 
@@ -371,20 +371,38 @@ def _process_file_worker(rel_path: str) -> Dict[str, Any]:
371
371
  if is_file_profiling: phase_times["5.5_Security_Lens"] = time.perf_counter() - t_security
372
372
  # ----------------------------------------------------
373
373
 
374
- # Phase 6: Raw Imports
374
+ # Phase 6: Raw Imports & Named Tokens
375
375
  t_imports = time.perf_counter()
376
376
  raw_imports = set()
377
+ named_tokens = set() # <--- NEW: Initialize token tracker
378
+
377
379
  if not is_inert:
380
+ # 1. Extract raw file dependencies
378
381
  import_regex = lang_defs.get(lang_id, {}).get("rules", {}).get("_dependency_capture")
379
382
  if import_regex:
380
383
  try:
381
384
  for match in import_regex.finditer(content_buffer):
382
- # Grab the first non-empty capture group (the actual dependency name)
383
385
  extracted_path = next((g for g in match.groups() if g), None)
384
386
  if extracted_path:
385
387
  raw_imports.add(extracted_path)
386
388
  except Exception:
387
389
  pass
390
+
391
+ # 2. ---> NEW: Extract Named Imports (TS/JS/Python) <---
392
+ try:
393
+ # Captures 'import { a, b }' and 'from x import a, b'
394
+ import_blocks = re.findall(r'(?:import\s+\{([^}]+)\}|from\s+[\w.]+\s+import\s+([^({\n]+))', content_buffer)
395
+ for block in import_blocks:
396
+ for match in block:
397
+ if match:
398
+ # Split by comma, handle 'as' aliases
399
+ for token in match.split(','):
400
+ clean_token = token.split(' as ')[0].strip()
401
+ if clean_token:
402
+ named_tokens.add(clean_token)
403
+ except Exception:
404
+ pass
405
+
388
406
  if is_file_profiling: phase_times["6_Import_Regex"] = time.perf_counter() - t_imports
389
407
 
390
408
  # Phase 7: Tokenization & Census
@@ -429,7 +447,8 @@ def _process_file_worker(rel_path: str) -> Dict[str, Any]:
429
447
  "prior_lock": has_prior,
430
448
  "coding_loc": refraction["coding_loc"],
431
449
  "doc_loc": refraction["doc_loc"],
432
- "raw_imports": list(raw_imports),
450
+ "raw_imports": list(raw_imports),
451
+ "named_tokens": list(named_tokens), # <--- NEW: Send tokens to Orchestrator
433
452
  "popularity_hits": popularity_hits,
434
453
  "regex_telemetry": logic_data.pop("regex_telemetry", {}) if is_profiling else {}
435
454
  }
@@ -660,11 +679,11 @@ class Orchestrator:
660
679
  "zero_dependency_mode": (not HAS_NETWORKX or not HAS_TIKTOKEN or not ML_AVAILABLE)
661
680
  }
662
681
 
663
- if "singularity" not in summary:
664
- summary["singularity"] = {}
682
+ if "unparsable_files" not in summary:
683
+ summary["unparsable_files"] = {}
665
684
 
666
685
  # Pass the array into the function, and merge the results directly
667
- summary["singularity"].update(self._summarize_anomalies(total_unparsable))
686
+ summary["unparsable_files"].update(self._summarize_anomalies(total_unparsable))
668
687
 
669
688
  # --- PURE OUTPUT ROUTER ---
670
689
  # Respect the exact path provided, just ensure the parent folder exists
@@ -1247,6 +1266,15 @@ class Orchestrator:
1247
1266
  # --- NEW: CALCULATE THE GLOBAL TEST UMBRELLA ---
1248
1267
  total_loc = 0
1249
1268
  test_loc = 0
1269
+
1270
+ # ==============================================================
1271
+ # ---> NEW: BUILD GLOBAL TOKEN TRACKER <---
1272
+ # ==============================================================
1273
+ self.used_tokens = set()
1274
+ for meta in self.cryolink.values():
1275
+ self.used_tokens.update(meta.get("named_tokens", []))
1276
+ # ==============================================================
1277
+
1250
1278
  for rel_path, meta in self.cryolink.items():
1251
1279
  loc = meta.get("coding_loc", 0)
1252
1280
  total_loc += loc
@@ -1273,6 +1301,25 @@ class Orchestrator:
1273
1301
  meta["metadata"]["folder_dominant_lang"] = folder_dominant_langs.get(folder, meta.get("lang_id", "unknown"))
1274
1302
  # -----------------------------------------------------------------
1275
1303
 
1304
+ # =================================================================
1305
+ # ---> THE NETWORK GRAVITY FIX <---
1306
+ # If the file is imported by the ecosystem, its "orphans" are actually its API.
1307
+ # =================================================================
1308
+ popularity = self.popularity_scores.get(rel_path, 0)
1309
+ if popularity > 0 and "equations" in meta:
1310
+ orphans = meta["equations"].get("design_slop_orphans", 0)
1311
+ if orphans > 0:
1312
+ # 1. Convert the dead weight into API Exposure
1313
+ meta["equations"]["api"] = meta["equations"].get("api", 0) + orphans
1314
+ # 2. Wipe the Technical Debt
1315
+ meta["equations"]["design_slop_orphans"] = 0
1316
+
1317
+ # 3. Heal the function metadata
1318
+ for func in meta.get("functions", []):
1319
+ if func.get("usage_status") == 1:
1320
+ func["usage_status"] = 0
1321
+ # =================================================================
1322
+
1276
1323
  meta["temporal_telemetry"] = self.chronometer.get_temporal_signals(rel_path)
1277
1324
  meta["authors"] = meta["temporal_telemetry"].get("authors", {})
1278
1325
  stem = Path(rel_path).stem.lower()
@@ -57,7 +57,7 @@ class NeuralAuditor:
57
57
 
58
58
  # 3. Extract Metadata
59
59
  metadata = header.get('__metadata__', {})
60
- architecture = metadata.get('format', metadata.get('architecture', 'Unknown Transformer'))
60
+ architecture = metadata.get('architecture', metadata.get('format', 'Unknown Transformer'))
61
61
 
62
62
  # 4. Calculate Parameters (Sum of the product of all tensor shapes)
63
63
  total_params = 0
@@ -837,13 +837,13 @@ class SignalProcessor:
837
837
  # ---> N-DIMENSIONAL AI NETWORK POSTURE <---
838
838
  if ai_files:
839
839
  # Find the most heavily relied-upon AI node in the graph
840
- ai_files.sort(key=lambda x: x.get("telemetry", {}).get("network_metrics", {}).get("pagerank_score", 0.0), reverse=True)
840
+ ai_files.sort(key=lambda x: x.get("telemetry", {}).get("network_metrics", {}).get("pagerank_score") or 0.0, reverse=True)
841
841
  primary_ai_node = ai_files[0]
842
842
  net_mets = primary_ai_node.get("telemetry", {}).get("network_metrics", {})
843
843
 
844
844
  role = net_mets.get("ecosystem_role", "Unknown")
845
- pr = net_mets.get("normalized_blast_radius", 0.0)
846
- btw = net_mets.get("betweenness_score", 0.0)
845
+ pr = net_mets.get("normalized_blast_radius") or 0.0
846
+ btw = net_mets.get("betweenness_score") or 0.0
847
847
 
848
848
  ai_topology["insights"].append(f"Structural Posture: The primary AI integration acts as a '{role}' within the repository.")
849
849
 
@@ -1675,9 +1675,9 @@ class SignalProcessor:
1675
1675
  rv = file_data.get("risk_vector", [])
1676
1676
  p = file_data.get("path", "")
1677
1677
 
1678
- btw = net.get("betweenness_score", 0.0)
1679
- close = net.get("closeness_score", 0.0)
1680
- pr = net.get("normalized_blast_radius", 0.0)
1678
+ btw = net.get("betweenness_score") or 0.0
1679
+ close = net.get("closeness_score") or 0.0
1680
+ pr = net.get("normalized_blast_radius") or 0.0
1681
1681
 
1682
1682
  flux_risk = rv[flux_idx] if flux_idx >= 0 and len(rv) > flux_idx else 0.0
1683
1683
  err_risk = rv[err_idx] if err_idx >= 0 and len(rv) > err_idx else 0.0