modwire 11.0.3__tar.gz → 11.1.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 (522) hide show
  1. {modwire-11.0.3 → modwire-11.1.0}/.dev/modwire.egg-info/SOURCES.txt +9 -7
  2. {modwire-11.0.3 → modwire-11.1.0}/Makefile +2 -2
  3. {modwire-11.0.3 → modwire-11.1.0}/PKG-INFO +23 -2
  4. {modwire-11.0.3 → modwire-11.1.0}/README.md +22 -1
  5. {modwire-11.0.3/tests/extraction/cache_benchmark → modwire-11.1.0/scripts/benchmarks/cache}/run.py +11 -5
  6. {modwire-11.0.3/tests/architecture/report_benchmark → modwire-11.1.0/scripts/benchmarks/report}/run.py +6 -3
  7. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/application.py +36 -6
  8. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/application.py +18 -17
  9. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_outcome.py +3 -1
  10. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_plan.py +3 -3
  11. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/facade.py +11 -8
  12. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/application.py +6 -6
  13. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/domain.py +3 -3
  14. modwire-11.1.0/src/modwire/cli/pipeline/models/source_observation.py +23 -0
  15. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/batch_source_reader.py +27 -14
  16. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_manifest.py +4 -0
  17. {modwire-11.0.3 → modwire-11.1.0}/tests/application/base_test.py +5 -0
  18. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_07_cache.py +5 -4
  19. modwire-11.1.0/tests/application/test_11_source_observation.py +114 -0
  20. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_06_happy_path.py +0 -24
  21. modwire-11.1.0/tests/cli/pipeline/test_07_report_commands.py +25 -0
  22. modwire-11.0.3/src/modwire/cli/pipeline/models/source_inventory.py +0 -11
  23. {modwire-11.0.3 → modwire-11.1.0}/.github/workflows/ci.yml +0 -0
  24. {modwire-11.0.3 → modwire-11.1.0}/.github/workflows/release.yml +0 -0
  25. {modwire-11.0.3 → modwire-11.1.0}/.gitignore +0 -0
  26. {modwire-11.0.3 → modwire-11.1.0}/AGENTS.md +0 -0
  27. {modwire-11.0.3 → modwire-11.1.0}/LICENSE +0 -0
  28. {modwire-11.0.3 → modwire-11.1.0}/MANIFEST.in +0 -0
  29. {modwire-11.0.3 → modwire-11.1.0}/pyproject.toml +0 -0
  30. {modwire-11.0.3/src/modwire → modwire-11.1.0/scripts/benchmarks/cache}/__init__.py +0 -0
  31. {modwire-11.0.3/tests/architecture/report_benchmark → modwire-11.1.0/scripts/benchmarks/cache}/benchmark_process_timeout.py +0 -0
  32. {modwire-11.0.3/src/modwire/architecture/boundaries → modwire-11.1.0/scripts/benchmarks/report}/__init__.py +0 -0
  33. {modwire-11.0.3/tests/extraction/cache_benchmark → modwire-11.1.0/scripts/benchmarks/report}/benchmark_process_timeout.py +0 -0
  34. {modwire-11.0.3 → modwire-11.1.0}/scripts/check_extractors.py +0 -0
  35. {modwire-11.0.3 → modwire-11.1.0}/scripts/generate_docs.py +0 -0
  36. {modwire-11.0.3 → modwire-11.1.0}/scripts/verify_consumer.py +0 -0
  37. {modwire-11.0.3 → modwire-11.1.0}/setup.cfg +0 -0
  38. {modwire-11.0.3 → modwire-11.1.0}/setup.py +0 -0
  39. {modwire-11.0.3/src/modwire/architecture → modwire-11.1.0/src/modwire}/__init__.py +0 -0
  40. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/__main__.py +0 -0
  41. {modwire-11.0.3/src/modwire/architecture/report/services → modwire-11.1.0/src/modwire/architecture}/__init__.py +0 -0
  42. {modwire-11.0.3/src/modwire/architecture/boundaries/models → modwire-11.1.0/src/modwire/architecture/boundaries}/__init__.py +0 -0
  43. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/application.py +0 -0
  44. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/domain.py +0 -0
  45. {modwire-11.0.3/src/modwire/architecture/boundaries/services → modwire-11.1.0/src/modwire/architecture/boundaries/models}/__init__.py +0 -0
  46. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/models/edge_rule_violation.py +0 -0
  47. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/models/flow_report.py +0 -0
  48. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/models/flow_violation.py +0 -0
  49. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/models/types.py +0 -0
  50. {modwire-11.0.3/src/modwire/architecture/config → modwire-11.1.0/src/modwire/architecture/boundaries/services}/__init__.py +0 -0
  51. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/services/backward_flow_analyzer.py +0 -0
  52. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/services/boundaries_flow_analyzer.py +0 -0
  53. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/services/module_boundary_analyzer.py +0 -0
  54. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/services/no_cycles_flow_analyzer.py +0 -0
  55. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/boundaries/services/no_reentry_flow_analyzer.py +0 -0
  56. {modwire-11.0.3/src/modwire/architecture/config/models → modwire-11.1.0/src/modwire/architecture/config}/__init__.py +0 -0
  57. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/application.py +0 -0
  58. {modwire-11.0.3/src/modwire/architecture/insights → modwire-11.1.0/src/modwire/architecture/config/models}/__init__.py +0 -0
  59. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/architecture_config.py +0 -0
  60. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/boundaries_config.py +0 -0
  61. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/boundary_rule.py +0 -0
  62. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/configuration_value.py +0 -0
  63. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/flow_realm.py +0 -0
  64. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/flow_rules.py +0 -0
  65. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/shape_config.py +0 -0
  66. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/shape_realm.py +0 -0
  67. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/shape_rules.py +0 -0
  68. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/config/models/tag_rule.py +0 -0
  69. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/facade.py +0 -0
  70. {modwire-11.0.3/src/modwire/architecture/insights/models → modwire-11.1.0/src/modwire/architecture/insights}/__init__.py +0 -0
  71. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/application.py +0 -0
  72. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/domain.py +0 -0
  73. {modwire-11.0.3/src/modwire/architecture/insights/services → modwire-11.1.0/src/modwire/architecture/insights/models}/__init__.py +0 -0
  74. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/callable_report_entry.py +0 -0
  75. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/callables_report.py +0 -0
  76. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/clusters_report.py +0 -0
  77. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/clusters_report_item.py +0 -0
  78. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/coherence_report.py +0 -0
  79. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/exports_report.py +0 -0
  80. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/exports_report_item.py +0 -0
  81. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/hotspots_report.py +0 -0
  82. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/hotspots_report_item.py +0 -0
  83. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/models/insight_report.py +0 -0
  84. {modwire-11.0.3/src/modwire/architecture/map → modwire-11.1.0/src/modwire/architecture/insights/services}/__init__.py +0 -0
  85. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/callables_reporter.py +0 -0
  86. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/clusters_reporter.py +0 -0
  87. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/coherence_reporter.py +0 -0
  88. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/exports_reporter.py +0 -0
  89. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/hotspots_reporter.py +0 -0
  90. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/insights/services/insight_report_field_map.py +0 -0
  91. {modwire-11.0.3/src/modwire/architecture/map/models → modwire-11.1.0/src/modwire/architecture/map}/__init__.py +0 -0
  92. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/application.py +0 -0
  93. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/domain.py +0 -0
  94. {modwire-11.0.3/src/modwire/architecture/map/services → modwire-11.1.0/src/modwire/architecture/map/models}/__init__.py +0 -0
  95. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/models/architecture_map.py +0 -0
  96. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/models/architecture_realm.py +0 -0
  97. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/models/tag_map.py +0 -0
  98. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/models/tag_match.py +0 -0
  99. {modwire-11.0.3/src/modwire/architecture/report → modwire-11.1.0/src/modwire/architecture/map/services}/__init__.py +0 -0
  100. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/services/architecture_map_loader.py +0 -0
  101. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/map/services/tag_matcher.py +0 -0
  102. {modwire-11.0.3/src/modwire/architecture/report/models → modwire-11.1.0/src/modwire/architecture/report}/__init__.py +0 -0
  103. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/application.py +0 -0
  104. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/domain.py +0 -0
  105. {modwire-11.0.3/src/modwire/architecture/shape → modwire-11.1.0/src/modwire/architecture/report/models}/__init__.py +0 -0
  106. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/architecture_group.py +0 -0
  107. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/map_report.py +0 -0
  108. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_catalog.py +0 -0
  109. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_descriptor.py +0 -0
  110. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_item.py +0 -0
  111. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_metadata.py +0 -0
  112. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_node.py +0 -0
  113. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/models/report_section.py +0 -0
  114. {modwire-11.0.3/src/modwire/cli → modwire-11.1.0/src/modwire/architecture/report/services}/__init__.py +0 -0
  115. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/report/services/map_report_collector.py +0 -0
  116. {modwire-11.0.3/src/modwire/architecture/shape/models → modwire-11.1.0/src/modwire/architecture/shape}/__init__.py +0 -0
  117. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/application.py +0 -0
  118. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/domain.py +0 -0
  119. {modwire-11.0.3/src/modwire/architecture/shape/services → modwire-11.1.0/src/modwire/architecture/shape/models}/__init__.py +0 -0
  120. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/models/shape_realm_architecture_map.py +0 -0
  121. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/models/shape_report.py +0 -0
  122. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/models/shape_violation.py +0 -0
  123. {modwire-11.0.3/src/modwire/cli/documentation → modwire-11.1.0/src/modwire/architecture/shape/services}/__init__.py +0 -0
  124. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/abstract_class_resolver.py +0 -0
  125. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/callable_resolver.py +0 -0
  126. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/class_resolver.py +0 -0
  127. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/file_resolver.py +0 -0
  128. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/import_resolver.py +0 -0
  129. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/property_resolver.py +0 -0
  130. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/signature_resolver.py +0 -0
  131. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/architecture/shape/services/symbol_resolver.py +0 -0
  132. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/autowiring.py +0 -0
  133. {modwire-11.0.3/src/modwire/cli/cache → modwire-11.1.0/src/modwire/cli}/__init__.py +0 -0
  134. {modwire-11.0.3/src/modwire/cli/cache/models → modwire-11.1.0/src/modwire/cli/cache}/__init__.py +0 -0
  135. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/domain.py +0 -0
  136. {modwire-11.0.3/src/modwire/cli/cache/services → modwire-11.1.0/src/modwire/cli/cache/models}/__init__.py +0 -0
  137. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_entry.py +0 -0
  138. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_key.py +0 -0
  139. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_kind.py +0 -0
  140. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_options.py +0 -0
  141. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_stage.py +0 -0
  142. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cache_storage_state.py +0 -0
  143. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/cached_result.py +0 -0
  144. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/models/source_cache_entry.py +0 -0
  145. {modwire-11.0.3/src/modwire/cli/resources/models → modwire-11.1.0/src/modwire/cli/cache/services}/__init__.py +0 -0
  146. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/services/cache_codec.py +0 -0
  147. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/services/cache_identity.py +0 -0
  148. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/cache/services/filesystem_cache_storage.py +0 -0
  149. {modwire-11.0.3/src/modwire/cli/documentation/services → modwire-11.1.0/src/modwire/cli/documentation}/__init__.py +0 -0
  150. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/documentation/application.py +0 -0
  151. {modwire-11.0.3/src/modwire/cli/initialization → modwire-11.1.0/src/modwire/cli/documentation/services}/__init__.py +0 -0
  152. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/documentation/services/documentation_generator.py +0 -0
  153. {modwire-11.0.3/src/modwire/cli/initialization/models → modwire-11.1.0/src/modwire/cli/initialization}/__init__.py +0 -0
  154. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/initialization/application.py +0 -0
  155. {modwire-11.0.3/src/modwire/cli/initialization/services → modwire-11.1.0/src/modwire/cli/initialization/models}/__init__.py +0 -0
  156. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/initialization/models/initialization_result.py +0 -0
  157. {modwire-11.0.3/src/modwire/cli/pipeline → modwire-11.1.0/src/modwire/cli/initialization/services}/__init__.py +0 -0
  158. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/initialization/services/initialization_service.py +0 -0
  159. {modwire-11.0.3/src/modwire/cli/pipeline/models → modwire-11.1.0/src/modwire/cli/pipeline}/__init__.py +0 -0
  160. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/batching/balanced_planner.py +0 -0
  161. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/batching/fixed_planner.py +0 -0
  162. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/batching/plan.py +0 -0
  163. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/batching/planner.py +0 -0
  164. {modwire-11.0.3/src/modwire/cli/pipeline/services → modwire-11.1.0/src/modwire/cli/pipeline/models}/__init__.py +0 -0
  165. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/command_name.py +0 -0
  166. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/command_request.py +0 -0
  167. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/extractor_batch_input.py +0 -0
  168. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/extractor_command_input.py +0 -0
  169. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/extractor_source_input.py +0 -0
  170. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/report_pipeline_context.py +0 -0
  171. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/models/source_entry.py +0 -0
  172. {modwire-11.0.3/src/modwire/cli/resources → modwire-11.1.0/src/modwire/cli/pipeline/services}/__init__.py +0 -0
  173. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/callables_insight.py +0 -0
  174. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/clusters_insight.py +0 -0
  175. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/coherence_insight.py +0 -0
  176. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/command_line.py +0 -0
  177. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/configuration_loader.py +0 -0
  178. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/extractor_command.py +0 -0
  179. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/flow_violations.py +0 -0
  180. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/hotspots_insight.py +0 -0
  181. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/map_tree.py +0 -0
  182. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/output_console.py +0 -0
  183. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/shape_violations.py +0 -0
  184. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/source_manifest_builder.py +0 -0
  185. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/success.py +0 -0
  186. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/unknown_files_warning.py +0 -0
  187. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/services/unused_exports_insight.py +0 -0
  188. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/transport/json_lines_output_reader.py +0 -0
  189. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/transport/json_output_reader.py +0 -0
  190. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/transport/output_reader.py +0 -0
  191. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/pipeline/transport/source_file_factory.py +0 -0
  192. {modwire-11.0.3/src/modwire/extraction/dependency → modwire-11.1.0/src/modwire/cli/resources}/__init__.py +0 -0
  193. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/application.py +0 -0
  194. {modwire-11.0.3/src/modwire/extraction → modwire-11.1.0/src/modwire/cli/resources/models}/__init__.py +0 -0
  195. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/models/defaults.py +0 -0
  196. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/models/init_asset.py +0 -0
  197. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/models/init_target_base.py +0 -0
  198. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/AGENTS.md +0 -0
  199. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/ARCHITECTURE.md +0 -0
  200. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/INDEX.md +0 -0
  201. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/MODWIRE.md +0 -0
  202. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/RULES.md +0 -0
  203. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/TESTING.md +0 -0
  204. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/WORKFLOW.md +0 -0
  205. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/cli/resources/templates/architecture.yaml +0 -0
  206. {modwire-11.0.3/src/modwire/extraction/extractors/php → modwire-11.1.0/src/modwire/extraction}/__init__.py +0 -0
  207. {modwire-11.0.3/src/modwire/extraction/dependency/services → modwire-11.1.0/src/modwire/extraction/dependency}/__init__.py +0 -0
  208. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/dependency/application.py +0 -0
  209. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/dependency/domain.py +0 -0
  210. {modwire-11.0.3/src/modwire/extraction/extractors → modwire-11.1.0/src/modwire/extraction/dependency/services}/__init__.py +0 -0
  211. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/dependency/services/graph_builder.py +0 -0
  212. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/dependency/services/import_identity_index.py +0 -0
  213. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/dependency/services/import_resolver.py +0 -0
  214. {modwire-11.0.3/src/modwire/extraction/extractors/models → modwire-11.1.0/src/modwire/extraction/extractors}/__init__.py +0 -0
  215. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/application.py +0 -0
  216. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/domain.py +0 -0
  217. {modwire-11.0.3/src/modwire/extraction/extractors/resources → modwire-11.1.0/src/modwire/extraction/extractors/models}/__init__.py +0 -0
  218. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/batch_config.py +0 -0
  219. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/batch_output_format.py +0 -0
  220. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/extraction_request.py +0 -0
  221. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/extractor_resource.py +0 -0
  222. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/extractor_runtime.py +0 -0
  223. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/parsed_source_batch.py +0 -0
  224. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/models/parsed_source_file.py +0 -0
  225. {modwire-11.0.3/src/modwire/extraction/extractors/python → modwire-11.1.0/src/modwire/extraction/extractors/php}/__init__.py +0 -0
  226. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/php/extractor.py +0 -0
  227. {modwire-11.0.3/src/modwire/extraction/extractors/typescript → modwire-11.1.0/src/modwire/extraction/extractors/python}/__init__.py +0 -0
  228. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/extractor.py +0 -0
  229. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/call_candidate.py +0 -0
  230. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/call_observation.py +0 -0
  231. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/call_reference.py +0 -0
  232. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/callable_candidate.py +0 -0
  233. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/class_candidate.py +0 -0
  234. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/export_candidate.py +0 -0
  235. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/function_candidate.py +0 -0
  236. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/import_candidate.py +0 -0
  237. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/inheritance_candidate.py +0 -0
  238. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/property_candidate.py +0 -0
  239. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/property_scope.py +0 -0
  240. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/source_context.py +0 -0
  241. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/source_observation.py +0 -0
  242. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/observations/value_candidate.py +0 -0
  243. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/pipeline/source_parser.py +0 -0
  244. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/classifier.py +0 -0
  245. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/constructor_rule.py +0 -0
  246. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/function_rule.py +0 -0
  247. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/instance_method_rule.py +0 -0
  248. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/static_method_rule.py +0 -0
  249. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/callables/type_method_rule.py +0 -0
  250. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/classifier.py +0 -0
  251. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/constructor_target_rule.py +0 -0
  252. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/dynamic_target_rule.py +0 -0
  253. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/instance_target_rule.py +0 -0
  254. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/local_target_rule.py +0 -0
  255. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/qualified_target_rule.py +0 -0
  256. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/reference_reader.py +0 -0
  257. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/calls/unresolved_target_rule.py +0 -0
  258. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/catalog.py +0 -0
  259. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/classes/abstract_rule.py +0 -0
  260. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/classes/classifier.py +0 -0
  261. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/classes/concrete_rule.py +0 -0
  262. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contribution.py +0 -0
  263. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/call_contributor.py +0 -0
  264. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/callable_contributor.py +0 -0
  265. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/class_contributor.py +0 -0
  266. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/export_contributor.py +0 -0
  267. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/function_contributor.py +0 -0
  268. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/import_contributor.py +0 -0
  269. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/inheritance_contributor.py +0 -0
  270. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/metric_contributor.py +0 -0
  271. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/property_contributor.py +0 -0
  272. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/contributors/value_contributor.py +0 -0
  273. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/exports/classifier.py +0 -0
  274. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/exports/explicit_rule.py +0 -0
  275. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/exports/implicit_rule.py +0 -0
  276. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/annotation_reader.py +0 -0
  277. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/assigned_value_reader.py +0 -0
  278. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/declaration_identity_factory.py +0 -0
  279. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/expression_reference_reader.py +0 -0
  280. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/import_path_policy.py +0 -0
  281. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/module_identity_policy.py +0 -0
  282. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/parameter_reader.py +0 -0
  283. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/type_alias_classifier.py +0 -0
  284. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/policies/visibility_policy.py +0 -0
  285. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/annotated_class_rule.py +0 -0
  286. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/annotated_instance_rule.py +0 -0
  287. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/assigned_class_rule.py +0 -0
  288. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/assigned_instance_rule.py +0 -0
  289. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/classifier.py +0 -0
  290. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/properties/decorated_method_rule.py +0 -0
  291. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/semantics/reader.py +0 -0
  292. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/call_contributor.py +0 -0
  293. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/callable_contributor.py +0 -0
  294. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/class_contributor.py +0 -0
  295. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/contribution.py +0 -0
  296. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/export_contributor.py +0 -0
  297. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/function_contributor.py +0 -0
  298. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/import_contributor.py +0 -0
  299. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/inheritance_contributor.py +0 -0
  300. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/metric_contributor.py +0 -0
  301. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/property_contributor.py +0 -0
  302. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/reader.py +0 -0
  303. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/source_facts/value_contributor.py +0 -0
  304. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/traversal/context.py +0 -0
  305. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/traversal/observation_reader.py +0 -0
  306. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/traversal/ordered_observation_visitor.py +0 -0
  307. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/python/traversal/traversal_role.py +0 -0
  308. {modwire-11.0.3/src/modwire/extraction/extractors/resources/python → modwire-11.1.0/src/modwire/extraction/extractors/resources}/__init__.py +0 -0
  309. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/build.php +0 -0
  310. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/build.py +0 -0
  311. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/composer.json +0 -0
  312. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/composer.lock +0 -0
  313. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/script.php +0 -0
  314. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/php/script.src.php +0 -0
  315. {modwire-11.0.3/src/modwire/implementation/manifest → modwire-11.1.0/src/modwire/extraction/extractors/resources/python}/__init__.py +0 -0
  316. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/python/script.py +0 -0
  317. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/build.mjs +0 -0
  318. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/build.py +0 -0
  319. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/package-lock.json +0 -0
  320. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/package.json +0 -0
  321. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/script.js +0 -0
  322. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/script.ts +0 -0
  323. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/resources/typescript/tsconfig.json +0 -0
  324. {modwire-11.0.3/src/modwire/implementation → modwire-11.1.0/src/modwire/extraction/extractors/typescript}/__init__.py +0 -0
  325. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/extractors/typescript/extractor.py +0 -0
  326. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/extraction/facade.py +0 -0
  327. {modwire-11.0.3/src/modwire/shared → modwire-11.1.0/src/modwire/implementation}/__init__.py +0 -0
  328. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/facade.py +0 -0
  329. {modwire-11.0.3/src/modwire/implementation/manifest/contracts → modwire-11.1.0/src/modwire/implementation/manifest}/__init__.py +0 -0
  330. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/application.py +0 -0
  331. {modwire-11.0.3/src/modwire/implementation/manifest/models → modwire-11.1.0/src/modwire/implementation/manifest/contracts}/__init__.py +0 -0
  332. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/contracts/manifest_compiler.py +0 -0
  333. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/contracts/manifest_serializer.py +0 -0
  334. {modwire-11.0.3/src/modwire/implementation/manifest/services → modwire-11.1.0/src/modwire/implementation/manifest/models}/__init__.py +0 -0
  335. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/implementation_manifest.py +0 -0
  336. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/implementation_manifest_document.py +0 -0
  337. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_annotation.py +0 -0
  338. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_annotation_role.py +0 -0
  339. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_attribute.py +0 -0
  340. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_callable.py +0 -0
  341. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_dependency.py +0 -0
  342. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_dependency_target_kind.py +0 -0
  343. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_format.py +0 -0
  344. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_inheritance.py +0 -0
  345. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_parameter.py +0 -0
  346. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_span.py +0 -0
  347. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_symbol.py +0 -0
  348. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/models/manifest_symbol_kind.py +0 -0
  349. {modwire-11.0.3/src/modwire/shared/code → modwire-11.1.0/src/modwire/implementation/manifest/services}/__init__.py +0 -0
  350. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/services/canonical_json_manifest_serializer.py +0 -0
  351. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/implementation/manifest/services/code_map_manifest_compiler.py +0 -0
  352. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/py.typed +0 -0
  353. {modwire-11.0.3/src/modwire/shared/values/models → modwire-11.1.0/src/modwire/shared}/__init__.py +0 -0
  354. {modwire-11.0.3/src/modwire/shared/code/models → modwire-11.1.0/src/modwire/shared/code}/__init__.py +0 -0
  355. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/application.py +0 -0
  356. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/domain.py +0 -0
  357. {modwire-11.0.3/src/modwire/shared/code/services → modwire-11.1.0/src/modwire/shared/code/models}/__init__.py +0 -0
  358. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/capability_coverage.py +0 -0
  359. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/capability_status.py +0 -0
  360. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/code_map.py +0 -0
  361. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/code_map_producer.py +0 -0
  362. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/code_package.py +0 -0
  363. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/declaration_family.py +0 -0
  364. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/declaration_identity.py +0 -0
  365. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/dependency_edge_result.py +0 -0
  366. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/dependency_graph.py +0 -0
  367. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/dependency_node_result.py +0 -0
  368. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/digest_algorithm.py +0 -0
  369. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/duplicate_identity_error.py +0 -0
  370. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/edge.py +0 -0
  371. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/extractor_descriptor.py +0 -0
  372. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/fact_capability.py +0 -0
  373. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/identity.py +0 -0
  374. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/identity_kind.py +0 -0
  375. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/import_crossing_type.py +0 -0
  376. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/node.py +0 -0
  377. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/node_kind.py +0 -0
  378. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/query_builder.py +0 -0
  379. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/query_types.py +0 -0
  380. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/queryable_code_map.py +0 -0
  381. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/runtime_observation.py +0 -0
  382. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/scan_policy.py +0 -0
  383. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_abstract_class.py +0 -0
  384. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_artifact.py +0 -0
  385. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_assigned_value.py +0 -0
  386. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_assigned_value_kind.py +0 -0
  387. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_call.py +0 -0
  388. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_call_resolution.py +0 -0
  389. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_callable.py +0 -0
  390. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_callable_kind.py +0 -0
  391. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_callable_symbol.py +0 -0
  392. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_class.py +0 -0
  393. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_class_method.py +0 -0
  394. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_class_property.py +0 -0
  395. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_dependency_resolution.py +0 -0
  396. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_export.py +0 -0
  397. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_export_kind.py +0 -0
  398. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_extraction.py +0 -0
  399. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_file.py +0 -0
  400. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_file_result.py +0 -0
  401. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_function.py +0 -0
  402. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_import.py +0 -0
  403. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_imported_symbol.py +0 -0
  404. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_inheritance.py +0 -0
  405. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_interface.py +0 -0
  406. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_item_result.py +0 -0
  407. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_manifest_identity.py +0 -0
  408. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_member_kind.py +0 -0
  409. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_parameter.py +0 -0
  410. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_parameter_kind.py +0 -0
  411. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_relation_kind.py +0 -0
  412. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_signature.py +0 -0
  413. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_signature_kind.py +0 -0
  414. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_symbol.py +0 -0
  415. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_type.py +0 -0
  416. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_value.py +0 -0
  417. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_value_declaration_kind.py +0 -0
  418. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_value_kind.py +0 -0
  419. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_value_scope.py +0 -0
  420. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/models/source_visibility.py +0 -0
  421. {modwire-11.0.3/src/modwire/shared/values → modwire-11.1.0/src/modwire/shared/code/services}/__init__.py +0 -0
  422. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/services/glob_path_matcher.py +0 -0
  423. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/services/identity_resolver.py +0 -0
  424. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/code/services/installed_package_version.py +0 -0
  425. {modwire-11.0.3/tests/architecture/report_benchmark → modwire-11.1.0/src/modwire/shared/values}/__init__.py +0 -0
  426. {modwire-11.0.3/tests → modwire-11.1.0/src/modwire/shared/values/models}/__init__.py +0 -0
  427. {modwire-11.0.3 → modwire-11.1.0}/src/modwire/shared/values/models/value_model.py +0 -0
  428. {modwire-11.0.3/tests/application → modwire-11.1.0/tests}/__init__.py +0 -0
  429. {modwire-11.0.3/tests/architecture → modwire-11.1.0/tests/application}/__init__.py +0 -0
  430. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_01_attacks.py +0 -0
  431. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_06_happy_path.py +0 -0
  432. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_08_implementation_manifest.py +0 -0
  433. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_09_source_manifest_identity.py +0 -0
  434. {modwire-11.0.3 → modwire-11.1.0}/tests/application/test_10_assigned_value_evidence.py +0 -0
  435. {modwire-11.0.3/tests/architecture/boundaries → modwire-11.1.0/tests/architecture}/__init__.py +0 -0
  436. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/base_test.py +0 -0
  437. {modwire-11.0.3/tests/architecture/config → modwire-11.1.0/tests/architecture/boundaries}/__init__.py +0 -0
  438. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/boundaries/base_test.py +0 -0
  439. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/boundaries/test_01_attacks.py +0 -0
  440. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/boundaries/test_02_invariants.py +0 -0
  441. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/boundaries/test_03_public_api.py +0 -0
  442. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/boundaries/test_04_paths.py +0 -0
  443. {modwire-11.0.3/tests/architecture/insights → modwire-11.1.0/tests/architecture/config}/__init__.py +0 -0
  444. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/config/test_01_attacks.py +0 -0
  445. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/config/test_02_invariants.py +0 -0
  446. {modwire-11.0.3/tests/architecture/map → modwire-11.1.0/tests/architecture/insights}/__init__.py +0 -0
  447. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/insights/base_test.py +0 -0
  448. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/insights/test_02_invariants.py +0 -0
  449. {modwire-11.0.3/tests/architecture/report → modwire-11.1.0/tests/architecture/map}/__init__.py +0 -0
  450. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/map/test_02_patterns.py +0 -0
  451. {modwire-11.0.3/tests/architecture/shape → modwire-11.1.0/tests/architecture/report}/__init__.py +0 -0
  452. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/report/test_02_invariants.py +0 -0
  453. {modwire-11.0.3/tests/cli → modwire-11.1.0/tests/architecture/shape}/__init__.py +0 -0
  454. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/shape/base_test.py +0 -0
  455. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/shape/test_01_limits.py +0 -0
  456. {modwire-11.0.3 → modwire-11.1.0}/tests/architecture/shape/test_02_invariants.py +0 -0
  457. {modwire-11.0.3/tests/cli/documentation → modwire-11.1.0/tests/cli}/__init__.py +0 -0
  458. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/base_test.py +0 -0
  459. {modwire-11.0.3/tests/cli/initialization → modwire-11.1.0/tests/cli/documentation}/__init__.py +0 -0
  460. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/documentation/test_02_invariants.py +0 -0
  461. {modwire-11.0.3/tests/cli/pipeline → modwire-11.1.0/tests/cli/initialization}/__init__.py +0 -0
  462. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/initialization/test_01_attacks.py +0 -0
  463. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/initialization/test_02_invariants.py +0 -0
  464. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/initialization/test_03_interruption.py +0 -0
  465. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/initialization/test_04_cleanup.py +0 -0
  466. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/initialization/test_05_recovery.py +0 -0
  467. {modwire-11.0.3/tests/extraction → modwire-11.1.0/tests/cli/pipeline}/__init__.py +0 -0
  468. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/base_test.py +0 -0
  469. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_01_attacks.py +0 -0
  470. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_02_invariants.py +0 -0
  471. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_03_interruption.py +0 -0
  472. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_04_command_transport.py +0 -0
  473. {modwire-11.0.3 → modwire-11.1.0}/tests/cli/pipeline/test_05_recovery.py +0 -0
  474. {modwire-11.0.3 → modwire-11.1.0}/tests/conftest.py +0 -0
  475. {modwire-11.0.3/tests/extraction/big_projects → modwire-11.1.0/tests/extraction}/__init__.py +0 -0
  476. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/base_test.py +0 -0
  477. {modwire-11.0.3/tests/extraction/cache_benchmark → modwire-11.1.0/tests/extraction/big_projects}/__init__.py +0 -0
  478. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/big_projects/project.py +0 -0
  479. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/big_projects/projects.json +0 -0
  480. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/big_projects/resolution_results.json +0 -0
  481. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/big_projects/results.json +0 -0
  482. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/big_projects/run.py +0 -0
  483. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/dependency/__init__.py +0 -0
  484. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/dependency/test_02_invariants.py +0 -0
  485. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/extractors/__init__.py +0 -0
  486. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/extractors/test_01_attacks.py +0 -0
  487. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/extractors/test_02_invariants.py +0 -0
  488. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/extractors/test_03_native_symbols.py +0 -0
  489. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/scan_benchmark/__init__.py +0 -0
  490. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/scan_benchmark/prepare.py +0 -0
  491. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/scan_benchmark/results.json +0 -0
  492. {modwire-11.0.3 → modwire-11.1.0}/tests/extraction/scan_benchmark/run.py +0 -0
  493. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/php/ignored/example_generated.php +0 -0
  494. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/php/src/example_application/example_actions/example_action.php +0 -0
  495. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/php/src/example_domain/example_model/example_record.php +0 -0
  496. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/php/src/example_domain/example_services/example_policy.php +0 -0
  497. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/php/src/example_interfaces/example_http/example_controller.php +0 -0
  498. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/python/ignored/example_generated.py +0 -0
  499. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/python/src/example_application/example_actions/example_action.py +0 -0
  500. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/python/src/example_domain/example_model/example_record.py +0 -0
  501. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/python/src/example_domain/example_services/example_policy.py +0 -0
  502. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/python/src/example_interfaces/example_http/example_controller.py +0 -0
  503. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/ignored/example_generated.ts +0 -0
  504. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_application/example_actions/example_action.ts +0 -0
  505. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_record.ts +0 -0
  506. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_model/example_view.tsx +0 -0
  507. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_audit.js +0 -0
  508. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_callables.ts +0 -0
  509. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_domain/example_services/example_policy.ts +0 -0
  510. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_controller.ts +0 -0
  511. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/languages/typescript/src/example_interfaces/example_http/example_view.jsx +0 -0
  512. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/syntax/php/example_shapes.php +0 -0
  513. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/syntax/python/example_shapes.py +0 -0
  514. {modwire-11.0.3 → modwire-11.1.0}/tests/fixtures/syntax/typescript/example_shapes.ts +0 -0
  515. {modwire-11.0.3 → modwire-11.1.0}/tests/shared/__init__.py +0 -0
  516. {modwire-11.0.3 → modwire-11.1.0}/tests/shared/code/__init__.py +0 -0
  517. {modwire-11.0.3 → modwire-11.1.0}/tests/shared/code/test_02_invariants.py +0 -0
  518. {modwire-11.0.3 → modwire-11.1.0}/tests/support/__init__.py +0 -0
  519. {modwire-11.0.3 → modwire-11.1.0}/tests/support/base_test.py +0 -0
  520. {modwire-11.0.3 → modwire-11.1.0}/tests/support/code_map.py +0 -0
  521. {modwire-11.0.3 → modwire-11.1.0}/tests/support/service_test.py +0 -0
  522. {modwire-11.0.3 → modwire-11.1.0}/uv.lock +0 -0
@@ -13,6 +13,12 @@ uv.lock
13
13
  scripts/check_extractors.py
14
14
  scripts/generate_docs.py
15
15
  scripts/verify_consumer.py
16
+ scripts/benchmarks/cache/__init__.py
17
+ scripts/benchmarks/cache/benchmark_process_timeout.py
18
+ scripts/benchmarks/cache/run.py
19
+ scripts/benchmarks/report/__init__.py
20
+ scripts/benchmarks/report/benchmark_process_timeout.py
21
+ scripts/benchmarks/report/run.py
16
22
  src/modwire/__init__.py
17
23
  src/modwire/__main__.py
18
24
  src/modwire/application.py
@@ -154,7 +160,7 @@ src/modwire/cli/pipeline/models/extractor_command_input.py
154
160
  src/modwire/cli/pipeline/models/extractor_source_input.py
155
161
  src/modwire/cli/pipeline/models/report_pipeline_context.py
156
162
  src/modwire/cli/pipeline/models/source_entry.py
157
- src/modwire/cli/pipeline/models/source_inventory.py
163
+ src/modwire/cli/pipeline/models/source_observation.py
158
164
  src/modwire/cli/pipeline/services/__init__.py
159
165
  src/modwire/cli/pipeline/services/batch_source_reader.py
160
166
  src/modwire/cli/pipeline/services/callables_insight.py
@@ -422,6 +428,7 @@ tests/application/test_07_cache.py
422
428
  tests/application/test_08_implementation_manifest.py
423
429
  tests/application/test_09_source_manifest_identity.py
424
430
  tests/application/test_10_assigned_value_evidence.py
431
+ tests/application/test_11_source_observation.py
425
432
  tests/architecture/__init__.py
426
433
  tests/architecture/base_test.py
427
434
  tests/architecture/boundaries/__init__.py
@@ -440,9 +447,6 @@ tests/architecture/map/__init__.py
440
447
  tests/architecture/map/test_02_patterns.py
441
448
  tests/architecture/report/__init__.py
442
449
  tests/architecture/report/test_02_invariants.py
443
- tests/architecture/report_benchmark/__init__.py
444
- tests/architecture/report_benchmark/benchmark_process_timeout.py
445
- tests/architecture/report_benchmark/run.py
446
450
  tests/architecture/shape/__init__.py
447
451
  tests/architecture/shape/base_test.py
448
452
  tests/architecture/shape/test_01_limits.py
@@ -465,6 +469,7 @@ tests/cli/pipeline/test_03_interruption.py
465
469
  tests/cli/pipeline/test_04_command_transport.py
466
470
  tests/cli/pipeline/test_05_recovery.py
467
471
  tests/cli/pipeline/test_06_happy_path.py
472
+ tests/cli/pipeline/test_07_report_commands.py
468
473
  tests/extraction/__init__.py
469
474
  tests/extraction/base_test.py
470
475
  tests/extraction/big_projects/__init__.py
@@ -473,9 +478,6 @@ tests/extraction/big_projects/projects.json
473
478
  tests/extraction/big_projects/resolution_results.json
474
479
  tests/extraction/big_projects/results.json
475
480
  tests/extraction/big_projects/run.py
476
- tests/extraction/cache_benchmark/__init__.py
477
- tests/extraction/cache_benchmark/benchmark_process_timeout.py
478
- tests/extraction/cache_benchmark/run.py
479
481
  tests/extraction/dependency/__init__.py
480
482
  tests/extraction/dependency/test_02_invariants.py
481
483
  tests/extraction/extractors/__init__.py
@@ -36,10 +36,10 @@ scan-benchmark:
36
36
  uv run python -m tests.extraction.scan_benchmark.run --root .dev/benchmarks/scan-project --language "$(SCAN_BENCHMARK_LANGUAGE)" --excluded-pattern 'example_excluded/**'
37
37
 
38
38
  cache-benchmark:
39
- uv run python -m tests.extraction.cache_benchmark.run --root "$(CACHE_BENCHMARK_ROOT)" --language "$(CACHE_BENCHMARK_LANGUAGE)" --cache-directory .dev/benchmarks/cache --incremental-source "$(CACHE_BENCHMARK_SOURCE)" --replacement-source "$(CACHE_BENCHMARK_REPLACEMENT)"
39
+ uv run python -m scripts.benchmarks.cache.run --root "$(CACHE_BENCHMARK_ROOT)" --language "$(CACHE_BENCHMARK_LANGUAGE)" --cache-directory .dev/benchmarks/cache --incremental-source "$(CACHE_BENCHMARK_SOURCE)" --replacement-source "$(CACHE_BENCHMARK_REPLACEMENT)"
40
40
 
41
41
  report-benchmark:
42
- uv run python -m tests.architecture.report_benchmark.run --root "$(REPORT_BENCHMARK_ROOT)" --language "$(REPORT_BENCHMARK_LANGUAGE)" --cache-directory "$(REPORT_BENCHMARK_CACHE)" --cache-namespace "$(REPORT_BENCHMARK_NAMESPACE)"
42
+ uv run python -m scripts.benchmarks.report.run --root "$(REPORT_BENCHMARK_ROOT)" --language "$(REPORT_BENCHMARK_LANGUAGE)" --cache-directory "$(REPORT_BENCHMARK_CACHE)" --cache-namespace "$(REPORT_BENCHMARK_NAMESPACE)"
43
43
 
44
44
  docs-check:
45
45
  uv run python scripts/generate_docs.py --check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modwire
3
- Version: 11.0.3
3
+ Version: 11.1.0
4
4
  Summary: Code extraction, architecture analysis and the Modwire CLI.
5
5
  Author: Tomasz Szpak
6
6
  License-Expression: MIT
@@ -80,6 +80,10 @@ Return a code map with content-addressed source and complete-source-set reuse.
80
80
 
81
81
  Return a code map and public outcomes for extraction and complete-map reuse.
82
82
 
83
+ ### `generate_map_cached_from_observation_with_diagnostics`
84
+
85
+ Return a cached code map derived from the exact supplied source observation.
86
+
83
87
  ### `generate_queryable_map_cached`
84
88
 
85
89
  Return a queryable code map with content-addressed persistent reuse.
@@ -88,6 +92,14 @@ Return a queryable code map with content-addressed persistent reuse.
88
92
 
89
93
  Return a queryable code map and public outcomes for every applicable cache stage.
90
94
 
95
+ ### `generate_queryable_map_cached_from_observation_with_diagnostics`
96
+
97
+ Return a queryable cached map derived from the exact supplied source observation.
98
+
99
+ ### `observe_sources`
100
+
101
+ Observe one complete immutable canonical source inventory without parsing source.
102
+
91
103
  ### `source_manifest_identity`
92
104
 
93
105
  Observe the current canonical source-manifest identity without parsing source.
@@ -140,7 +152,8 @@ Extraction counts describe current source records. An exact code-map hit
140
152
  reports its digest-backed source-set entries as extraction hits without loading
141
153
  individual source payloads. Code-map and report counts describe one entry.
142
154
  Invalidated entries are also misses. Diagnostics include the configured
143
- namespace but never cache keys, source identities, or content.
155
+ namespace but never cache keys, source identities, or content. The reuse flag
156
+ states whether the exact supplied source observation drove the cache operation.
144
157
 
145
158
  ## `CachedResult`
146
159
 
@@ -174,6 +187,14 @@ Kinds of class-property assignment evidence published by extractors.
174
187
 
175
188
  Canonical identity of one observed source manifest.
176
189
 
190
+ ## `SourceObservation`
191
+
192
+ Immutable canonical source inventory reusable by identity and cached map operations.
193
+
194
+ ### `identity`
195
+
196
+ Return the canonical public identity of this observed source manifest.
197
+
177
198
  ## `SourceMemberKind`
178
199
 
179
200
  Ownership kind for a declared class or type member.
@@ -52,6 +52,10 @@ Return a code map with content-addressed source and complete-source-set reuse.
52
52
 
53
53
  Return a code map and public outcomes for extraction and complete-map reuse.
54
54
 
55
+ ### `generate_map_cached_from_observation_with_diagnostics`
56
+
57
+ Return a cached code map derived from the exact supplied source observation.
58
+
55
59
  ### `generate_queryable_map_cached`
56
60
 
57
61
  Return a queryable code map with content-addressed persistent reuse.
@@ -60,6 +64,14 @@ Return a queryable code map with content-addressed persistent reuse.
60
64
 
61
65
  Return a queryable code map and public outcomes for every applicable cache stage.
62
66
 
67
+ ### `generate_queryable_map_cached_from_observation_with_diagnostics`
68
+
69
+ Return a queryable cached map derived from the exact supplied source observation.
70
+
71
+ ### `observe_sources`
72
+
73
+ Observe one complete immutable canonical source inventory without parsing source.
74
+
63
75
  ### `source_manifest_identity`
64
76
 
65
77
  Observe the current canonical source-manifest identity without parsing source.
@@ -112,7 +124,8 @@ Extraction counts describe current source records. An exact code-map hit
112
124
  reports its digest-backed source-set entries as extraction hits without loading
113
125
  individual source payloads. Code-map and report counts describe one entry.
114
126
  Invalidated entries are also misses. Diagnostics include the configured
115
- namespace but never cache keys, source identities, or content.
127
+ namespace but never cache keys, source identities, or content. The reuse flag
128
+ states whether the exact supplied source observation drove the cache operation.
116
129
 
117
130
  ## `CachedResult`
118
131
 
@@ -146,6 +159,14 @@ Kinds of class-property assignment evidence published by extractors.
146
159
 
147
160
  Canonical identity of one observed source manifest.
148
161
 
162
+ ## `SourceObservation`
163
+
164
+ Immutable canonical source inventory reusable by identity and cached map operations.
165
+
166
+ ### `identity`
167
+
168
+ Return the canonical public identity of this observed source manifest.
169
+
149
170
  ## `SourceMemberKind`
150
171
 
151
172
  Ownership kind for a declared class or type member.
@@ -132,7 +132,10 @@ class CacheBenchmark:
132
132
 
133
133
  total_started = time.perf_counter()
134
134
  cold_plan, measurement["cold_inventory"] = self._phase(
135
- repetition, "cold", "inventory", lambda: application.cli.prepare_cache(request, policy)
135
+ repetition,
136
+ "cold",
137
+ "inventory",
138
+ lambda: application.cli.prepare_cache(application.cli.observe(request, policy)),
136
139
  )
137
140
  cold_cached_map, measurement["cold_code_map_loading"] = self._phase(
138
141
  repetition,
@@ -146,7 +149,7 @@ class CacheBenchmark:
146
149
  repetition,
147
150
  "cold",
148
151
  "source_loading",
149
- lambda: application.cli.cached_sources(request, cold_plan, options),
152
+ lambda: application.cli.cached_sources(cold_plan, options),
150
153
  )
151
154
  _, measurement["cold_source_set_maintenance"] = self._phase(
152
155
  repetition,
@@ -177,7 +180,10 @@ class CacheBenchmark:
177
180
 
178
181
  total_started = time.perf_counter()
179
182
  warm_plan, measurement["warm_inventory"] = self._phase(
180
- repetition, "warm", "inventory", lambda: application.cli.prepare_cache(request, policy)
183
+ repetition,
184
+ "warm",
185
+ "inventory",
186
+ lambda: application.cli.prepare_cache(application.cli.observe(request, policy)),
181
187
  )
182
188
  warm_cached_map, measurement["warm_code_map_loading"] = self._phase(
183
189
  repetition,
@@ -206,7 +212,7 @@ class CacheBenchmark:
206
212
  repetition,
207
213
  "incremental",
208
214
  "inventory",
209
- lambda: application.cli.prepare_cache(request, policy),
215
+ lambda: application.cli.prepare_cache(application.cli.observe(request, policy)),
210
216
  )
211
217
  incremental_cached_map, measurement["incremental_code_map_loading"] = self._phase(
212
218
  repetition,
@@ -220,7 +226,7 @@ class CacheBenchmark:
220
226
  repetition,
221
227
  "incremental",
222
228
  "source_loading",
223
- lambda: application.cli.cached_sources(request, incremental_plan, options),
229
+ lambda: application.cli.cached_sources(incremental_plan, options),
224
230
  )
225
231
  _, measurement["incremental_source_set_maintenance"] = self._phase(
226
232
  repetition,
@@ -107,7 +107,7 @@ class ReportBenchmark:
107
107
  cleanup_reserve = min(1.0, max_process_seconds * 0.1)
108
108
  supervisor_seconds = max_process_seconds - cleanup_reserve
109
109
  if Path(sys.argv[0]).resolve() == Path(__file__).resolve():
110
- entrypoint = [sys.executable, "-m", "tests.architecture.report_benchmark.run"]
110
+ entrypoint = [sys.executable, "-m", "scripts.benchmarks.report.run"]
111
111
  else:
112
112
  entrypoint = [sys.executable, sys.argv[0]]
113
113
  command = [*entrypoint, *sys.argv[1:], "--worker"]
@@ -228,7 +228,10 @@ class ReportBenchmark:
228
228
  cache_file = self.code_map_cache_file
229
229
  if cache_file is None:
230
230
  plan, measurement["inventory"] = self._phase(
231
- repetition, "map", "inventory", lambda: application.cli.prepare_cache(request, policy)
231
+ repetition,
232
+ "map",
233
+ "inventory",
234
+ lambda: application.cli.prepare_cache(application.cli.observe(request, policy)),
232
235
  )
233
236
  cached_map, measurement["code_map_loading"] = self._phase(
234
237
  repetition, "map", "code_map_loading", lambda: application.cli.cached_code_map(plan, options)
@@ -240,7 +243,7 @@ class ReportBenchmark:
240
243
  repetition,
241
244
  "map",
242
245
  "extraction_loading",
243
- lambda: application.cli.cached_sources(request, plan, options),
246
+ lambda: application.cli.cached_sources(plan, options),
244
247
  )
245
248
  _, measurement["source_set_maintenance"] = self._phase(
246
249
  repetition,
@@ -15,6 +15,7 @@ from .cli.cache.models.cache_outcome import CacheOutcome
15
15
  from .cli.cache.models.cache_stage import CacheStage
16
16
  from .cli.cache.models.cached_result import CachedResult
17
17
  from .cli.facade import CliFacade
18
+ from .cli.pipeline.models.source_observation import SourceObservation
18
19
  from .extraction.facade import ExtractionFacade
19
20
  from .implementation.facade import ImplementationFacade
20
21
  from .implementation.manifest.models.implementation_manifest import ImplementationManifest
@@ -57,6 +58,7 @@ __all__ = [
57
58
  "SourceAssignedValueKind",
58
59
  "SourceMemberKind",
59
60
  "SourceManifestIdentity",
61
+ "SourceObservation",
60
62
  "SourceRelationKind",
61
63
  ]
62
64
 
@@ -157,8 +159,18 @@ class ModwireApplication:
157
159
  ) -> CachedResult[CodeMap]:
158
160
  """Return a code map and public outcomes for extraction and complete-map reuse."""
159
161
 
160
- request = self.extraction.request(language, str(root))
161
- plan = self.cli.prepare_cache(request, policy)
162
+ observation = self.observe_sources(language, root, policy)
163
+ cached = self.generate_map_cached_from_observation_with_diagnostics(observation, options)
164
+ outcomes = tuple(outcome.model_copy(update={"source_observation_reused": False}) for outcome in cached.outcomes)
165
+ return CachedResult(value=cached.value, outcomes=outcomes)
166
+
167
+ def generate_map_cached_from_observation_with_diagnostics(
168
+ self, observation: SourceObservation, options: CacheOptions
169
+ ) -> CachedResult[CodeMap]:
170
+ """Return a cached code map derived from the exact supplied source observation."""
171
+
172
+ request = observation.request
173
+ plan = self.cli.prepare_cache(observation)
162
174
  cached = self.cli.cached_code_map(plan, options)
163
175
  outcome = cached.outcome(CacheStage.CODE_MAP)
164
176
  if cached.value is not None:
@@ -171,14 +183,18 @@ class ModwireApplication:
171
183
  ),
172
184
  )
173
185
  else:
174
- sources = self.cli.cached_sources(request, plan, options)
186
+ sources = self.cli.cached_sources(plan, options)
175
187
  self.cli.maintain_source_set(plan, options)
176
188
  code_map = self.extraction.generate_map(request, sources.value)
177
189
  self.cli.store_code_map(plan, code_map, options)
178
190
  outcome = outcome.model_copy(update={"computed": 1, "stored": 1})
179
191
  extraction_outcomes = sources.outcomes
180
192
  self.cli.maintain_cache(options)
181
- return CachedResult(value=code_map, outcomes=(*extraction_outcomes, outcome))
193
+ outcomes = tuple(
194
+ cache_outcome.model_copy(update={"source_observation_reused": True})
195
+ for cache_outcome in (*extraction_outcomes, outcome)
196
+ )
197
+ return CachedResult(value=code_map, outcomes=outcomes)
182
198
 
183
199
  def generate_queryable_map_cached(
184
200
  self, language: str, root: str, policy: ScanPolicy, options: CacheOptions
@@ -195,11 +211,24 @@ class ModwireApplication:
195
211
  cached = self.generate_map_cached_with_diagnostics(language, root, policy, options)
196
212
  return CachedResult(value=QueryableCodeMap(code_map=cached.value), outcomes=cached.outcomes)
197
213
 
214
+ def generate_queryable_map_cached_from_observation_with_diagnostics(
215
+ self, observation: SourceObservation, options: CacheOptions
216
+ ) -> CachedResult[QueryableCodeMap]:
217
+ """Return a queryable cached map derived from the exact supplied source observation."""
218
+
219
+ cached = self.generate_map_cached_from_observation_with_diagnostics(observation, options)
220
+ return CachedResult(value=QueryableCodeMap(code_map=cached.value), outcomes=cached.outcomes)
221
+
222
+ def observe_sources(self, language: str, root: str, policy: ScanPolicy) -> SourceObservation:
223
+ """Observe one complete immutable canonical source inventory without parsing source."""
224
+
225
+ request = self.extraction.request(language, str(root))
226
+ return self.cli.observe(request, policy)
227
+
198
228
  def source_manifest_identity(self, language: str, root: str, policy: ScanPolicy) -> SourceManifestIdentity:
199
229
  """Observe the current canonical source-manifest identity without parsing source."""
200
230
 
201
- request = self.extraction.request(language, str(root))
202
- return self.cli.source_manifest_identity(request, policy)
231
+ return self.observe_sources(language, root, policy).identity()
203
232
 
204
233
  def implementation_manifest(self, code_map: CodeMap, format: ManifestFormat) -> ImplementationManifestDocument:
205
234
  """Publish a deterministic, provenance-bearing implementation manifest."""
@@ -246,6 +275,7 @@ class ModwireApplication:
246
275
  SourceAssignedValue,
247
276
  SourceAssignedValueKind,
248
277
  SourceManifestIdentity,
278
+ SourceObservation,
249
279
  SourceMemberKind,
250
280
  SourceRelationKind,
251
281
  ImplementationManifest,
@@ -16,6 +16,7 @@ from ...shared.code.models.scan_policy import ScanPolicy
16
16
  from ...shared.code.models.source_extraction import SourceExtraction
17
17
  from ...shared.code.models.source_file import SourceFile
18
18
  from ..pipeline.domain import SourceReader
19
+ from ..pipeline.models.source_observation import SourceObservation
19
20
  from .domain import CacheStorage
20
21
  from .models.cache_key import CacheKey
21
22
  from .models.cache_options import CacheOptions
@@ -43,26 +44,26 @@ class CacheApplication:
43
44
  self.reader.ensure_available(request.runtime)
44
45
  return self.reader.extract_source(request, policy)
45
46
 
46
- def prepare(self, request: ExtractionRequest, policy: ScanPolicy) -> CachePlan:
47
- self.reader.ensure_available(request.runtime)
48
- inventory = self.reader.inventory(request, policy)
47
+ def prepare(self, observation: SourceObservation) -> CachePlan:
48
+ request = observation.request
49
+ policy = observation.manifest.policy
49
50
  sources = tuple(
50
51
  SourceCacheEntry(
51
52
  entry=entry,
52
- key=self.identity.source(request, policy, inventory.manifest.runtime, entry),
53
+ key=self.identity.source(request, policy, observation.manifest.runtime, entry),
53
54
  )
54
- for entry in inventory.entries
55
+ for entry in observation.entries
55
56
  )
56
57
  return CachePlan(
57
58
  language=request.runtime.descriptor.language,
58
- inventory=inventory,
59
+ observation=observation,
59
60
  sources=sources,
60
- source_set=self.identity.source_set(request, inventory.manifest, sources),
61
+ source_set=self.identity.source_set(request, observation.manifest, sources),
61
62
  )
62
63
 
63
- def sources(
64
- self, request: ExtractionRequest, plan: CachePlan, options: CacheOptions
65
- ) -> CachedResult[SourceExtraction]:
64
+ def sources(self, plan: CachePlan, options: CacheOptions) -> CachedResult[SourceExtraction]:
65
+ observation = plan.observation
66
+ request = observation.request
66
67
  payloads = self.storage.read_many(options, tuple(source.key for source in plan.sources))
67
68
  files: dict[FileId, SourceFile] = {}
68
69
  misses: list[FileId] = []
@@ -86,9 +87,9 @@ class CacheApplication:
86
87
  misses.append(source.entry.source_id)
87
88
  self.storage.delete_many(options, tuple(invalid_keys))
88
89
 
89
- if misses or not plan.inventory.entries:
90
+ if misses or not observation.entries:
90
91
  self.reader.ensure_available(request.runtime)
91
- extracted = self.reader.extract_entries(request, plan.inventory, tuple(misses))
92
+ extracted = self.reader.extract_entries(observation, tuple(misses))
92
93
  writes: list[tuple[CacheKey, bytes]] = []
93
94
  for source_id in misses:
94
95
  source_file = extracted.get(source_id)
@@ -110,10 +111,10 @@ class CacheApplication:
110
111
  extraction = SourceExtraction(
111
112
  files=ordered_files,
112
113
  modules=modules,
113
- manifest=plan.inventory.manifest,
114
- files_found=plan.inventory.files_found,
115
- files_excluded=plan.inventory.files_excluded,
116
- directories_pruned=plan.inventory.directories_pruned,
114
+ manifest=observation.manifest,
115
+ files_found=observation.files_found,
116
+ files_excluded=observation.files_excluded,
117
+ directories_pruned=observation.directories_pruned,
117
118
  )
118
119
  return CachedResult(
119
120
  value=extraction,
@@ -142,7 +143,7 @@ class CacheApplication:
142
143
  cached_value, cached_invalidated = self._read(options, key)
143
144
  try:
144
145
  value = CodeMap.model_validate(cached_value)
145
- if value.extraction.manifest != plan.inventory.manifest:
146
+ if value.extraction.manifest != plan.observation.manifest:
146
147
  raise ValueError("Cached code map provenance does not match the current source manifest.")
147
148
  outcome = CacheOutcome(stage=CacheStage.CODE_MAP, namespace=options.namespace, hits=1)
148
149
  except (TypeError, ValueError, ValidationError):
@@ -11,7 +11,8 @@ class CacheOutcome(ValueModel):
11
11
  reports its digest-backed source-set entries as extraction hits without loading
12
12
  individual source payloads. Code-map and report counts describe one entry.
13
13
  Invalidated entries are also misses. Diagnostics include the configured
14
- namespace but never cache keys, source identities, or content.
14
+ namespace but never cache keys, source identities, or content. The reuse flag
15
+ states whether the exact supplied source observation drove the cache operation.
15
16
  """
16
17
 
17
18
  stage: CacheStage
@@ -21,6 +22,7 @@ class CacheOutcome(ValueModel):
21
22
  invalidated: int = 0
22
23
  computed: int = 0
23
24
  stored: int = 0
25
+ source_observation_reused: bool = False
24
26
 
25
27
  @field_validator("namespace")
26
28
  @classmethod
@@ -1,18 +1,18 @@
1
1
  from ....shared.values.models.value_model import ValueModel
2
- from ...pipeline.models.source_inventory import SourceInventory
2
+ from ...pipeline.models.source_observation import SourceObservation
3
3
  from .cache_key import CacheKey
4
4
  from .source_cache_entry import SourceCacheEntry
5
5
 
6
6
 
7
7
  class CachePlan(ValueModel):
8
8
  language: str
9
- inventory: SourceInventory
9
+ observation: SourceObservation
10
10
  sources: tuple[SourceCacheEntry, ...]
11
11
  source_set: CacheKey
12
12
 
13
13
  def source_set_value(self) -> dict[str, object]:
14
14
  return {
15
- "source_manifest": self.inventory.manifest.digest,
15
+ "source_manifest": self.observation.manifest.digest,
16
16
  "sources": [
17
17
  {
18
18
  "relative_path": source.entry.relative_path,
@@ -25,6 +25,7 @@ from .pipeline.application import PipelineApplication
25
25
  from .pipeline.models.command_name import CommandName
26
26
  from .pipeline.models.command_request import CommandRequest
27
27
  from .pipeline.models.extractor_command_input import ExtractorCommandInput
28
+ from .pipeline.models.source_observation import SourceObservation
28
29
 
29
30
 
30
31
  @injectable
@@ -52,19 +53,20 @@ class CliFacade:
52
53
  def extract(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceExtraction:
53
54
  return self.pipeline.extract(request, policy)
54
55
 
56
+ def observe(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceObservation:
57
+ return self.pipeline.observe(request, policy)
58
+
55
59
  def source_manifest_identity(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceManifestIdentity:
56
60
  return self.pipeline.source_manifest_identity(request, policy)
57
61
 
58
62
  def has_source_files(self, request: ExtractionRequest, policy: ScanPolicy) -> bool:
59
63
  return self.pipeline.has_source_files(request, policy)
60
64
 
61
- def prepare_cache(self, request: ExtractionRequest, policy: ScanPolicy) -> CachePlan:
62
- return self.cache.prepare(request, policy)
65
+ def prepare_cache(self, observation: SourceObservation) -> CachePlan:
66
+ return self.cache.prepare(observation)
63
67
 
64
- def cached_sources(
65
- self, request: ExtractionRequest, plan: CachePlan, options: CacheOptions
66
- ) -> CachedResult[SourceExtraction]:
67
- return self.cache.sources(request, plan, options)
68
+ def cached_sources(self, plan: CachePlan, options: CacheOptions) -> CachedResult[SourceExtraction]:
69
+ return self.cache.sources(plan, options)
68
70
 
69
71
  def maintain_source_set(self, plan: CachePlan, options: CacheOptions) -> bool:
70
72
  return self.cache.maintain_source_set(plan, options)
@@ -148,10 +150,11 @@ class CliFacade:
148
150
  extraction = self.extract(extraction_request, policy)
149
151
  code_map = self.extraction.generate_queryable_map(extraction_request, extraction)
150
152
  return self.render(self.architecture.analyze(code_map, config), request.summary)
151
- plan = self.prepare_cache(extraction_request, policy)
153
+ observation = self.observe(extraction_request, policy)
154
+ plan = self.prepare_cache(observation)
152
155
  cached_code_map = self.cached_code_map(plan, cache_options).value
153
156
  if cached_code_map is None:
154
- extraction = self.cached_sources(extraction_request, plan, cache_options).value
157
+ extraction = self.cached_sources(plan, cache_options).value
155
158
  self.maintain_source_set(plan, cache_options)
156
159
  cached_code_map = self.extraction.generate_map(extraction_request, extraction)
157
160
  self.store_code_map(plan, cached_code_map, cache_options)
@@ -14,6 +14,7 @@ from .domain import ReportPipelineStep, SourceReader
14
14
  from .models.command_request import CommandRequest
15
15
  from .models.extractor_command_input import ExtractorCommandInput
16
16
  from .models.report_pipeline_context import ReportPipelineContext
17
+ from .models.source_observation import SourceObservation
17
18
  from .services.command_line import CommandLine
18
19
  from .services.configuration_loader import ConfigurationLoader
19
20
  from .services.extractor_command import ExtractorCommand
@@ -38,13 +39,12 @@ class PipelineApplication:
38
39
  self.reader.ensure_available(request.runtime)
39
40
  return self.reader.extract_source(request, policy)
40
41
 
41
- def source_manifest_identity(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceManifestIdentity:
42
+ def observe(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceObservation:
42
43
  self.reader.ensure_available(request.runtime)
43
- manifest = self.reader.inventory(request, policy).manifest
44
- return SourceManifestIdentity(
45
- digest_algorithm=manifest.digest_algorithm,
46
- digest=manifest.digest,
47
- )
44
+ return self.reader.observe(request, policy)
45
+
46
+ def source_manifest_identity(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceManifestIdentity:
47
+ return self.observe(request, policy).identity()
48
48
 
49
49
  def has_source_files(self, request: ExtractionRequest, policy: ScanPolicy) -> bool:
50
50
  self.reader.ensure_available(request.runtime)
@@ -7,7 +7,7 @@ from ...shared.code.models.scan_policy import ScanPolicy
7
7
  from ...shared.code.models.source_extraction import SourceExtraction
8
8
  from ...shared.code.models.source_file import SourceFile
9
9
  from .models.report_pipeline_context import ReportPipelineContext
10
- from .models.source_inventory import SourceInventory
10
+ from .models.source_observation import SourceObservation
11
11
 
12
12
 
13
13
  class ReportPipelineStep(ABC):
@@ -28,12 +28,12 @@ class SourceReader(ABC):
28
28
  raise NotImplementedError
29
29
 
30
30
  @abstractmethod
31
- def inventory(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceInventory:
31
+ def observe(self, request: ExtractionRequest, policy: ScanPolicy) -> SourceObservation:
32
32
  raise NotImplementedError
33
33
 
34
34
  @abstractmethod
35
35
  def extract_entries(
36
- self, request: ExtractionRequest, inventory: SourceInventory, source_ids: tuple[FileId, ...]
36
+ self, observation: SourceObservation, source_ids: tuple[FileId, ...]
37
37
  ) -> dict[FileId, SourceFile]:
38
38
  raise NotImplementedError
39
39
 
@@ -0,0 +1,23 @@
1
+ from pydantic import Field
2
+
3
+ from ....extraction.extractors.models.extraction_request import ExtractionRequest
4
+ from ....shared.code.models.source_manifest import SourceManifest
5
+ from ....shared.code.models.source_manifest_identity import SourceManifestIdentity
6
+ from ....shared.values.models.value_model import ValueModel
7
+ from .source_entry import SourceEntry
8
+
9
+
10
+ class SourceObservation(ValueModel):
11
+ """Immutable canonical source inventory reusable by identity and cached map operations."""
12
+
13
+ request: ExtractionRequest
14
+ entries: tuple[SourceEntry, ...]
15
+ files_found: int = Field(ge=0)
16
+ files_excluded: int = Field(ge=0)
17
+ directories_pruned: int = Field(ge=0)
18
+ manifest: SourceManifest
19
+
20
+ def identity(self) -> SourceManifestIdentity:
21
+ """Return the canonical public identity of this observed source manifest."""
22
+
23
+ return self.manifest.identity()