maintainability-agent 3.6.2__tar.gz → 3.6.3__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 (385) hide show
  1. {maintainability_agent-3.6.2/src/maintainability_agent.egg-info → maintainability_agent-3.6.3}/PKG-INFO +2 -2
  2. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/README.md +1 -1
  3. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/pyproject.toml +1 -1
  4. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3/src/maintainability_agent.egg-info}/PKG-INFO +2 -2
  5. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_agent.egg-info/SOURCES.txt +1 -0
  6. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/__init__.py +1 -1
  7. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_discovery.py +37 -2
  8. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/config.py +1 -1
  9. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/git_tools.py +30 -0
  10. maintainability_agent-3.6.3/tests/test_build_output_is_not_the_repositorys_code.py +165 -0
  11. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/LICENSE +0 -0
  12. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/setup.cfg +0 -0
  13. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_agent.egg-info/dependency_links.txt +0 -0
  14. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_agent.egg-info/entry_points.txt +0 -0
  15. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_agent.egg-info/requires.txt +0 -0
  16. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_agent.egg-info/top_level.txt +0 -0
  17. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/__main__.py +0 -0
  18. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_adapters.py +0 -0
  19. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_analysis.py +0 -0
  20. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_analyzer_sections.py +0 -0
  21. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_anchor.py +0 -0
  22. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_arguments.py +0 -0
  23. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_aspects.py +0 -0
  24. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_assets/analyzer-catalog.json +0 -0
  25. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_assets/standard.md +0 -0
  26. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_attestation.py +0 -0
  27. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_backfill.py +0 -0
  28. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_bands.py +0 -0
  29. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_banner.py +0 -0
  30. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_built_ins.py +0 -0
  31. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_calibration.py +0 -0
  32. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_catalog.py +0 -0
  33. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_charts.py +0 -0
  34. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_cognitive.py +0 -0
  35. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_config_defaults.py +0 -0
  36. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_conformance.py +0 -0
  37. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_corroborate.py +0 -0
  38. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_coverage_notes.py +0 -0
  39. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_criteria_scope.py +0 -0
  40. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_delegated_pillar.py +0 -0
  41. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_derive.py +0 -0
  42. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_documents.py +0 -0
  43. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_economics.py +0 -0
  44. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_economics_view.py +0 -0
  45. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_environment.py +0 -0
  46. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_evidence_reader.py +0 -0
  47. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_evidence_view.py +0 -0
  48. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_finding_match.py +0 -0
  49. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_first_run.py +0 -0
  50. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_formula.py +0 -0
  51. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_gates.py +0 -0
  52. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_generic.py +0 -0
  53. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_grammar.py +0 -0
  54. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_grant_ledger.py +0 -0
  55. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_history_view.py +0 -0
  56. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_hostile_prompt.py +0 -0
  57. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_hotspots.py +0 -0
  58. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_html_report_sections.py +0 -0
  59. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_html_view.py +0 -0
  60. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_identity.py +0 -0
  61. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_in_loop.py +0 -0
  62. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_in_loop_view.py +0 -0
  63. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_jvm_adapters.py +0 -0
  64. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_markdown_sections.py +0 -0
  65. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_masking.py +0 -0
  66. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_audit.py +0 -0
  67. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_gate.py +0 -0
  68. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_grants.py +0 -0
  69. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_refusals.py +0 -0
  70. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_resources.py +0 -0
  71. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_mcp_setup.py +0 -0
  72. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_metric_adapters.py +0 -0
  73. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_metrics_types.py +0 -0
  74. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_operator_reads.py +0 -0
  75. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_pillars.py +0 -0
  76. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_practice.py +0 -0
  77. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_precommit.py +0 -0
  78. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_precommit_install.py +0 -0
  79. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_precommit_view.py +0 -0
  80. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_pressures.py +0 -0
  81. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_prompt_sections.py +0 -0
  82. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_c.py +0 -0
  83. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_cobol.py +0 -0
  84. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_core.py +0 -0
  85. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_cpp.py +0 -0
  86. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_csharp.py +0 -0
  87. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_fortran.py +0 -0
  88. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_go.py +0 -0
  89. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_java.py +0 -0
  90. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_js.py +0 -0
  91. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_php.py +0 -0
  92. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_ruby.py +0 -0
  93. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_rust.py +0 -0
  94. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ranges_swift.py +0 -0
  95. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ratchet.py +0 -0
  96. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_ratio_adapters.py +0 -0
  97. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_recurrence.py +0 -0
  98. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_run_comparison.py +0 -0
  99. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_runner.py +0 -0
  100. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_safe_write.py +0 -0
  101. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_scan_history.py +0 -0
  102. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_scan_view.py +0 -0
  103. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_second_source.py +0 -0
  104. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_selection.py +0 -0
  105. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_semantic.py +0 -0
  106. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_semantic_policy.py +0 -0
  107. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_semantic_ts.py +0 -0
  108. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_semantic_view.py +0 -0
  109. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_setup_errors.py +0 -0
  110. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_setup_persist.py +0 -0
  111. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/SKILL.md +0 -0
  112. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/agents/anthropic.yaml +0 -0
  113. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/agents/copilot.yaml +0 -0
  114. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/agents/openai.yaml +0 -0
  115. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/copilot/maintainability-agent.prompt.md +0 -0
  116. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_data/references/finding-taxonomy.md +0 -0
  117. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_skill_install.py +0 -0
  118. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_stored_grants.py +0 -0
  119. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_tdd_view.py +0 -0
  120. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_test_commands.py +0 -0
  121. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_test_execution.py +0 -0
  122. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_test_pairing.py +0 -0
  123. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_tokens.py +0 -0
  124. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_tool_adapters.py +0 -0
  125. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_trends.py +0 -0
  126. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_user_config.py +0 -0
  127. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_verdict_adapters.py +0 -0
  128. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_verification.py +0 -0
  129. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_work_order.py +0 -0
  130. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_work_order_view.py +0 -0
  131. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_work_order_weights.py +0 -0
  132. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/_xml.py +0 -0
  133. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/baseline.py +0 -0
  134. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/cli.py +0 -0
  135. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/deadcode.py +0 -0
  136. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/declarations.py +0 -0
  137. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/duplication.py +0 -0
  138. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/evidence.py +0 -0
  139. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/history.py +0 -0
  140. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/idioms.py +0 -0
  141. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/instructions.py +0 -0
  142. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/mcp_server.py +0 -0
  143. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/metrics.py +0 -0
  144. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/prompts.py +0 -0
  145. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/renderers.py +0 -0
  146. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/report.py +0 -0
  147. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/sarif.py +0 -0
  148. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/scoring.py +0 -0
  149. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/similarity.py +0 -0
  150. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/src/maintainability_audit/source.py +0 -0
  151. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_acquisition_trust.py +0 -0
  152. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_adapter_docs.py +0 -0
  153. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_adapter_recordings.py +0 -0
  154. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_adapters.py +0 -0
  155. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_added_lines.py +0 -0
  156. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analysis_coverage.py +0 -0
  157. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analysis_execution.py +0 -0
  158. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_bridge.py +0 -0
  159. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_config_isolation.py +0 -0
  160. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_estimate_claims.py +0 -0
  161. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_pinning.py +0 -0
  162. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_primary_estimate.py +0 -0
  163. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_provenance.py +0 -0
  164. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_provenance_exclusions.py +0 -0
  165. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_scoring_path.py +0 -0
  166. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_spread_range.py +0 -0
  167. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_analyzer_xml_bounds.py +0 -0
  168. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_anchor_and_mode.py +0 -0
  169. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_anchor_caveat_and_counts_follow_the_run.py +0 -0
  170. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_anchor_disclosure.py +0 -0
  171. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_annotations_match_behaviour.py +0 -0
  172. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_anticipated_refusals.py +0 -0
  173. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_architecture.py +0 -0
  174. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_artifact_write_route_class.py +0 -0
  175. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_aspect_coverage.py +0 -0
  176. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_asset_snapshot_class.py +0 -0
  177. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_ast_reading_resolves_spellings.py +0 -0
  178. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_attestation.py +0 -0
  179. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_audit_components.py +0 -0
  180. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_authorization_freshness.py +0 -0
  181. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_authorship_gates.py +0 -0
  182. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_backfill.py +0 -0
  183. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_band_concealment_class.py +0 -0
  184. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_band_concealment_p3.py +0 -0
  185. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_band_pressures.py +0 -0
  186. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_bands.py +0 -0
  187. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_body_or_signature_class.py +0 -0
  188. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_c_declarations.py +0 -0
  189. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_calibration_corpus.py +0 -0
  190. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_calibration_drift.py +0 -0
  191. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_calibration_tooling.py +0 -0
  192. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_catalog_selection.py +0 -0
  193. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_catalog_tier_promise.py +0 -0
  194. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_chat_leads_with_the_work_order.py +0 -0
  195. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_chat_primary_docs.py +0 -0
  196. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_check_refuses_plus_only_fragments.py +0 -0
  197. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_checkstyle_adapter.py +0 -0
  198. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_checkstyle_catalog.py +0 -0
  199. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_child_sandbox.py +0 -0
  200. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_ci_history_recipe.py +0 -0
  201. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_ci_installs_the_analyzer_pool.py +0 -0
  202. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_claimed_languages.py +0 -0
  203. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_cli.py +0 -0
  204. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_clone_group_class.py +0 -0
  205. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_cobol_declarations.py +0 -0
  206. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_cognitive_complexity.py +0 -0
  207. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_cohort_statistics.py +0 -0
  208. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_concealment_properties.py +0 -0
  209. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_config_shape.py +0 -0
  210. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_consent_and_grant.py +0 -0
  211. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_consumer_migration.py +0 -0
  212. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_contract_claims.py +0 -0
  213. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_corroborate.py +0 -0
  214. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_coverage_by_language.py +0 -0
  215. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_cpp_declarations.py +0 -0
  216. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_criteria_completion.py +0 -0
  217. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_csharp_declarations.py +0 -0
  218. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_d15_composition.py +0 -0
  219. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_d15_goal_directed.py +0 -0
  220. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_dead_code.py +0 -0
  221. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declaration_criteria_scope.py +0 -0
  222. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declaration_edge_cases.py +0 -0
  223. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declaration_grading.py +0 -0
  224. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declaration_ranges.py +0 -0
  225. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declaration_source.py +0 -0
  226. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declarative_parsers.py +0 -0
  227. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declared_authorship.py +0 -0
  228. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_declared_imports.py +0 -0
  229. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_delegated_security_pillar.py +0 -0
  230. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_demo_tree.py +0 -0
  231. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_derivation_mix.py +0 -0
  232. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_determinism.py +0 -0
  233. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_dimension_ratchet.py +0 -0
  234. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_direct_runner_availability_class.py +0 -0
  235. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_discovery.py +0 -0
  236. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_doc_claims.py +0 -0
  237. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_docs_links.py +0 -0
  238. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_economic_context.py +0 -0
  239. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_empty_output_not_clean.py +0 -0
  240. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_empty_output_not_clean_adapters.py +0 -0
  241. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_environment_work_order.py +0 -0
  242. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_every_surface_says_what_the_run_found.py +0 -0
  243. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_evidence_invariants.py +0 -0
  244. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_evidence_normalization.py +0 -0
  245. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_evidence_properties.py +0 -0
  246. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_example_config_opens_claimed_languages.py +0 -0
  247. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_exclusion_dialects.py +0 -0
  248. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_exposure_never_outranks_band.py +0 -0
  249. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_falsifier_standard.py +0 -0
  250. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_file_list_cap_class.py +0 -0
  251. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_finding_identity.py +0 -0
  252. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_first_run_elicitation.py +0 -0
  253. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_first_run_prompt.py +0 -0
  254. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_first_run_reelicitation.py +0 -0
  255. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_fix_breadth_window.py +0 -0
  256. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_fixed_form_fortran.py +0 -0
  257. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_format_ask.py +0 -0
  258. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_fortran_declarations.py +0 -0
  259. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_fortran_metrics.py +0 -0
  260. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_fortran_practice.py +0 -0
  261. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_git_argv.py +0 -0
  262. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_git_read_only.py +0 -0
  263. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_git_readonly_class.py +0 -0
  264. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_go_declarations.py +0 -0
  265. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_grammar_constructs.py +0 -0
  266. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_grammar_token_coverage.py +0 -0
  267. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_grant_only_user_tier.py +0 -0
  268. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_history.py +0 -0
  269. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_history_boundary.py +0 -0
  270. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_history_manifest.py +0 -0
  271. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_history_schema2.py +0 -0
  272. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_history_window.py +0 -0
  273. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_hostile_prompt.py +0 -0
  274. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_html_executive.py +0 -0
  275. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_html_section_parity_class.py +0 -0
  276. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_identity_docs.py +0 -0
  277. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_identity_resolution.py +0 -0
  278. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_idiom_divergence.py +0 -0
  279. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_in_loop_budgets.py +0 -0
  280. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_in_loop_check.py +0 -0
  281. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_installed_wheel_runtime.py +0 -0
  282. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_instruction_targets.py +0 -0
  283. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_java_range_guard.py +0 -0
  284. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_java_ranges.py +0 -0
  285. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_java_scored.py +0 -0
  286. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_java_wiring.py +0 -0
  287. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_js_complexity_operators.py +0 -0
  288. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_js_declarations.py +0 -0
  289. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_language_coverage.py +0 -0
  290. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_language_support_honesty.py +0 -0
  291. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_mcp_baseline_payload.py +0 -0
  292. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_mcp_format_contract.py +0 -0
  293. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_mcp_history.py +0 -0
  294. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_mcp_server.py +0 -0
  295. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_migration_1_0.py +0 -0
  296. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_near_duplicates.py +0 -0
  297. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_network_disclosure.py +0 -0
  298. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_one_setup_across_surfaces_class.py +0 -0
  299. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_operator_named_paths.py +0 -0
  300. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_operator_named_reads.py +0 -0
  301. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pairing_reads_imports.py +0 -0
  302. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pattern_budget.py +0 -0
  303. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_phase6_claims.py +0 -0
  304. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_php_declarations.py +0 -0
  305. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pillars_and_practice.py +0 -0
  306. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_platform_claim.py +0 -0
  307. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pmd_adapter.py +0 -0
  308. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pmd_audit_closures.py +0 -0
  309. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_policy_claims.py +0 -0
  310. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_pool_runs_by_config.py +0 -0
  311. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_population_floors.py +0 -0
  312. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_practice_nested_gates_class.py +0 -0
  313. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_precommit_staged.py +0 -0
  314. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_presentation_refusals.py +0 -0
  315. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_promises.py +0 -0
  316. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_prompt_does_not_issue_rates_when_unscored.py +0 -0
  317. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_prompt_escalation_once.py +0 -0
  318. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_prompt_honesty.py +0 -0
  319. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_prompt_location_escalation_class.py +0 -0
  320. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_prove_falsifiers.py +0 -0
  321. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_python_complexity.py +0 -0
  322. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_python_declarations.py +0 -0
  323. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_read_boundary.py +0 -0
  324. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_readme_claims.py +0 -0
  325. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_recurrence.py +0 -0
  326. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_release_needs_an_empty_ledger.py +0 -0
  327. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_release_plan.py +0 -0
  328. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_release_plan_status.py +0 -0
  329. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_report_remedy_copy.py +0 -0
  330. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_roles_recorded.py +0 -0
  331. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_root_grants.py +0 -0
  332. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_rubric_ignores_project_lint_config.py +0 -0
  333. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_ruby_declarations.py +0 -0
  334. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_run_comparison.py +0 -0
  335. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_runner.py +0 -0
  336. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_rust_declarations.py +0 -0
  337. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_sarif.py +0 -0
  338. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scan_history.py +0 -0
  339. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scan_scope.py +0 -0
  340. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scanner_unsafe_direction.py +0 -0
  341. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scanning.py +0 -0
  342. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_schema_fidelity.py +0 -0
  343. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scope_conformance.py +0 -0
  344. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_scoring_calibration.py +0 -0
  345. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_semantic_policy.py +0 -0
  346. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_setup_gate_completeness.py +0 -0
  347. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_setup_gate_independent_contract.py +0 -0
  348. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_setup_precondition.py +0 -0
  349. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_skill_install.py +0 -0
  350. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_sonar_resolve.py +0 -0
  351. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_source_index.py +0 -0
  352. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_spotbugs_adapter.py +0 -0
  353. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_spotbugs_catalog.py +0 -0
  354. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_stage8_contract.py +0 -0
  355. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_stdout_outputs.py +0 -0
  356. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_suite_isolation.py +0 -0
  357. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_swift_declarations.py +0 -0
  358. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_tdd_structure.py +0 -0
  359. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_terminal_asks_the_same_questions.py +0 -0
  360. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_test_commands.py +0 -0
  361. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_test_execution_class.py +0 -0
  362. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_three_presentations.py +0 -0
  363. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_tool_resolution.py +0 -0
  364. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_tree_cannot_opt_the_host_in.py +0 -0
  365. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_tree_chosen_spawn.py +0 -0
  366. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_tree_reads_use_the_primitive.py +0 -0
  367. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_trends.py +0 -0
  368. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_type_fields_not_functions_class.py +0 -0
  369. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_uat_falsifiers.py +0 -0
  370. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_unanchored_set_matches_corpus.py +0 -0
  371. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_unread_code.py +0 -0
  372. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_user_config_tier.py +0 -0
  373. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_verification_audit_closures.py +0 -0
  374. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_verified_grade.py +0 -0
  375. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_version_claim.py +0 -0
  376. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_wheel_contents.py +0 -0
  377. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_work_items_state_their_own_finding.py +0 -0
  378. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_work_order.py +0 -0
  379. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_work_order_binds_to_this_interpreter.py +0 -0
  380. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_work_order_items.py +0 -0
  381. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_work_order_selection.py +0 -0
  382. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_workflow_supply_chain.py +0 -0
  383. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_write_boundary.py +0 -0
  384. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_write_route_class.py +0 -0
  385. {maintainability_agent-3.6.2 → maintainability_agent-3.6.3}/tests/test_written_record.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maintainability-agent
3
- Version: 3.6.2
3
+ Version: 3.6.3
4
4
  Summary: Maintainability gate and AI remediation prompt generator for CI.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -46,7 +46,7 @@ Dynamic: license-file
46
46
  **A deterministic, offline maintainability audit whose output is a _bounded
47
47
  work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
48
48
  says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
49
- Version **3.6.2**.
49
+ Version **3.6.3**.
50
50
 
51
51
  **Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
52
52
  COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
@@ -5,7 +5,7 @@
5
5
  **A deterministic, offline maintainability audit whose output is a _bounded
6
6
  work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
7
7
  says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
8
- Version **3.6.2**.
8
+ Version **3.6.3**.
9
9
 
10
10
  **Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
11
11
  COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "maintainability-agent"
7
- version = "3.6.2"
7
+ version = "3.6.3"
8
8
  description = "Maintainability gate and AI remediation prompt generator for CI."
9
9
  readme = "README.md"
10
10
  # 3.11, not 3.10. `_discovery`, `_pillars` and `_runner` all import
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maintainability-agent
3
- Version: 3.6.2
3
+ Version: 3.6.3
4
4
  Summary: Maintainability gate and AI remediation prompt generator for CI.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -46,7 +46,7 @@ Dynamic: license-file
46
46
  **A deterministic, offline maintainability audit whose output is a _bounded
47
47
  work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
48
48
  says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
49
- Version **3.6.2**.
49
+ Version **3.6.3**.
50
50
 
51
51
  **Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
52
52
  COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
@@ -182,6 +182,7 @@ tests/test_band_concealment_p3.py
182
182
  tests/test_band_pressures.py
183
183
  tests/test_bands.py
184
184
  tests/test_body_or_signature_class.py
185
+ tests/test_build_output_is_not_the_repositorys_code.py
185
186
  tests/test_c_declarations.py
186
187
  tests/test_calibration_corpus.py
187
188
  tests/test_calibration_drift.py
@@ -1,3 +1,3 @@
1
1
  """Maintainability Audit CI."""
2
2
 
3
- __version__ = "3.6.2"
3
+ __version__ = "3.6.3"
@@ -222,8 +222,31 @@ def _text_of(path: Path) -> str:
222
222
  return "\n".join(read_source_file(path))
223
223
 
224
224
 
225
+ #: The evidence recorded for a path the repository ignores and git does not
226
+ #: track (D175), so a reader can see why it left the scored population.
227
+ IGNORED_BUILD_OUTPUT_EVIDENCE = (
228
+ "untracked, and excluded by this repository's .gitignore "
229
+ "(git ls-files --others --ignored)"
230
+ )
231
+
232
+
233
+ def _ignored_build_output(root: Path) -> dict[str, str]:
234
+ """Untracked paths the repository's `.gitignore` excludes (D175).
235
+
236
+ A Maven build copied jsoup's test resources into `target/test-classes`,
237
+ and the next audit scored 29 more files — one a failing file — as the
238
+ team's own. The same commit scored one way before a build and another
239
+ after it. `target/` is not added to a list of names: ADR 010 §1 forbids
240
+ that, and the next build tool will choose another word. The repository
241
+ already says which paths are not its source.
242
+ """
243
+ from .git_tools import ignored_untracked_paths
244
+
245
+ return dict.fromkeys(ignored_untracked_paths(root), IGNORED_BUILD_OUTPUT_EVIDENCE)
246
+
247
+
225
248
  def _generated_directories(root: Path, excludes: tuple[str, ...]) -> dict[str, str]:
226
- """Directories a `package.json` script deletes and rebuilds."""
249
+ """Directories a `package.json` script deletes and rebuilds, then ignored build output."""
227
250
  found: dict[str, str] = {}
228
251
  for manifest in root.rglob("package.json"):
229
252
  relative = manifest.relative_to(root).as_posix()
@@ -237,6 +260,10 @@ def _generated_directories(root: Path, excludes: tuple[str, ...]) -> dict[str, s
237
260
  f"deleted and rebuilt by `{name}` in {relative}: "
238
261
  f"`{str(command)[:60]}`",
239
262
  )
263
+ # A manifest's own statement about a directory is the more specific
264
+ # evidence, so it wins where both apply.
265
+ for path, evidence in _ignored_build_output(root).items():
266
+ found.setdefault(path, evidence)
240
267
  return found
241
268
 
242
269
 
@@ -458,10 +485,18 @@ def discover(root: Path, config: dict[str, Any]) -> Inventory:
458
485
  inventory.directories = _directory_provenance(
459
486
  vendored_dirs, generated_dirs, asset_dirs)
460
487
  seen_directories: set[tuple[str, str]] = set()
488
+ # What the scanner reads, beyond source code: a generated or vendored
489
+ # tree's HTML, XML and JSON are scored too unless classified here (D175).
490
+ read = set((config.get("paths") or {}).get("include_extensions", ()))
491
+ not_ours_dirs = (*generated_dirs, *vendored_dirs)
461
492
  for path in sorted(root.rglob("*")):
462
- if not path.is_file() or path.suffix not in KNOWN_SOURCE_SUFFIXES:
493
+ if not path.is_file():
463
494
  continue
464
495
  relative = path.relative_to(root).as_posix()
496
+ if path.suffix not in KNOWN_SOURCE_SUFFIXES and not (
497
+ path.suffix in read and any(_under(relative, owner) for owner in not_ours_dirs)
498
+ ):
499
+ continue
465
500
  if is_excluded(relative, list(excludes)):
466
501
  continue
467
502
  verdict, evidence, owner = _classify(
@@ -20,7 +20,7 @@ from ._operator_reads import (
20
20
  # still the door every caller comes through.
21
21
  __all__ = ["DEFAULT_CONFIG", "DEFAULT_IDIOM_GROUPS", "PROJECT_URL", "VERSION"]
22
22
 
23
- VERSION = "3.6.2"
23
+ VERSION = "3.6.3"
24
24
 
25
25
  PROJECT_URL = "https://github.com/marshallguillory86/maintainability-agent"
26
26
 
@@ -231,6 +231,36 @@ def probe_git(args: list[str], cwd: Path) -> str:
231
231
  return ""
232
232
 
233
233
 
234
+ def ignored_untracked_paths(root: Path) -> set[str]:
235
+ """Paths the repository's own `.gitignore` files exclude and git does not track (D175).
236
+
237
+ A build writes `target/`, `out/` or `bin/` into the working tree, and the
238
+ repository's `.gitignore` is where it says those are not its source.
239
+ That is evidence the repository provides, so ADR 010 can act on it where
240
+ a list of directory names cannot.
241
+
242
+ Only the per-directory `.gitignore` files are read. `--exclude-standard`
243
+ would also honour `.git/info/exclude` and the user's `core.excludesFile`,
244
+ which differ by machine — the same commit would then score differently
245
+ on two laptops (P1). A tracked file matched by an ignore rule is not
246
+ listed, because git tracks it, and an untracked file that is *not*
247
+ ignored stays in: that is uncommitted work, which D56 keeps visible.
248
+
249
+ Directories come back with a trailing slash, which is stripped. A tree
250
+ git cannot read — not a repository, git absent — yields nothing, which
251
+ is the absence of evidence rather than a verdict.
252
+ """
253
+ try:
254
+ output = run_git(
255
+ ["ls-files", "--others", "--ignored",
256
+ "--exclude-per-directory=.gitignore", "--directory", "-z"],
257
+ root, strip=False,
258
+ )
259
+ except GitCommandFailed:
260
+ return set()
261
+ return {entry.rstrip("/") for entry in output.split("\0") if entry.strip("/")}
262
+
263
+
234
264
  def changed_paths(root: Path, revspec: str) -> set[str]:
235
265
  """Paths touched by `revspec`, as forward-slash relative strings.
236
266
 
@@ -0,0 +1,165 @@
1
+ """A build does not change what an audit scores (D175).
2
+
3
+ A Maven build copied jsoup's test resources into `target/test-classes`, and
4
+ the next audit scored 29 more files — one of them a failing file — as the
5
+ team's own. The same commit scored one way before `mvn test` and another
6
+ after it, which is P1 failing on the working tree rather than on the code.
7
+
8
+ ADR 010 §1 forbids the obvious fix: `target/` on a list of names is the
9
+ `ggml/` mistake again, waiting for the next build tool to pick another word.
10
+ The repository already says which paths are not its source: its own
11
+ `.gitignore`, for paths git does not track.
12
+
13
+ The claim: **every file the scanner reads, placed in an untracked path the
14
+ repository ignores, leaves the scored population and is counted** — and
15
+ nothing else does. The population is every suffix in the shipped
16
+ `include_extensions`, so HTML, XML and JSON are covered along with source.
17
+ """
18
+ from __future__ import annotations
19
+
20
+ import subprocess
21
+ from pathlib import Path
22
+ from typing import Any
23
+
24
+
25
+ def _git(repo: Path, *args: str) -> None:
26
+ subprocess.run(["git", "-C", str(repo), *args], check=True, capture_output=True)
27
+
28
+
29
+ def _config() -> dict[str, Any]:
30
+ from maintainability_audit.config import load_config
31
+
32
+ return load_config(None)
33
+
34
+
35
+ def _failing_file(path: Path, config: dict[str, Any]) -> None:
36
+ """A file the scanner reads and grades as failing, whatever its suffix."""
37
+ path.parent.mkdir(parents=True, exist_ok=True)
38
+ lines = int(config["thresholds"]["max_file_lines"]) + 5
39
+ path.write_text("".join(f"line {number}\n" for number in range(lines)), encoding="utf-8")
40
+
41
+
42
+ def _repo(tmp_path: Path) -> Path:
43
+ repo = tmp_path / "repo"
44
+ (repo / "src").mkdir(parents=True)
45
+ (repo / "src" / "app.py").write_text("def run():\n return 1\n", encoding="utf-8")
46
+ (repo / ".gitignore").write_text("out/\n", encoding="utf-8")
47
+ _git(repo, "init", "-q")
48
+ _git(repo, "add", ".")
49
+ return repo
50
+
51
+
52
+ def _scored(report: dict[str, Any]) -> dict[str, Any]:
53
+ summary = report["summary"]
54
+ return {
55
+ "files_scanned": summary["files_scanned"],
56
+ "file_failures": summary["file_failures"],
57
+ "function_failures": summary["function_failures"],
58
+ "failing_paths": sorted(item["path"] for item in report["largest_files"]
59
+ if item["status"] == "fail"),
60
+ }
61
+
62
+
63
+ def _suffixes(config: dict[str, Any]) -> list[str]:
64
+ suffixes = sorted(set(config["paths"]["include_extensions"]))
65
+ assert suffixes, "the shipped config reads no suffixes; this sweep would pass vacuously"
66
+ return suffixes
67
+
68
+
69
+ def test_ignored_untracked_build_output_leaves_the_score_and_is_counted(tmp_path) -> None:
70
+ from maintainability_audit.report import build_report
71
+
72
+ config = _config()
73
+ repo = _repo(tmp_path)
74
+ before = _scored(build_report(repo, config, run_analyzers=False))
75
+
76
+ suffixes = _suffixes(config)
77
+ for index, suffix in enumerate(suffixes):
78
+ _failing_file(repo / "out" / "classes" / f"artifact{index}{suffix}", config)
79
+ after = build_report(repo, config, run_analyzers=False)
80
+
81
+ assert _scored(after) == before, (
82
+ "ignored, untracked build output changed the scored population: "
83
+ f"before={before} after={_scored(after)}"
84
+ )
85
+ assert after["summary"]["generated_files"] == len(suffixes), (
86
+ f"{len(suffixes)} build-output files left the score but "
87
+ f"{after['summary']['generated_files']} were counted"
88
+ )
89
+ owners = {entry["path"]: entry["evidence"] for entry in after["summary"]["classifications"]}
90
+ assert "out" in owners and ".gitignore" in owners["out"], owners
91
+
92
+
93
+ def test_a_tracked_file_under_an_ignore_rule_is_still_scored(tmp_path) -> None:
94
+ """Git tracking it is the repository saying it is source, whatever the rule matches.
95
+
96
+ Covers existing behaviour: before D175 nothing read the ignore rules, so a
97
+ force-added file was scored then too. It guards the fix against treating
98
+ a pattern match as the verdict.
99
+ """
100
+ from maintainability_audit.report import build_report
101
+
102
+ config = _config()
103
+ repo = _repo(tmp_path)
104
+ _failing_file(repo / "out" / "Kept.java", config)
105
+ _git(repo, "add", "-f", "out/Kept.java")
106
+ report = build_report(repo, config, run_analyzers=False)
107
+ assert "out/Kept.java" in _scored(report)["failing_paths"]
108
+
109
+
110
+ def test_an_untracked_file_nothing_ignores_is_still_scored(tmp_path) -> None:
111
+ """Uncommitted work stays visible (D56); only ignored paths leave.
112
+
113
+ Covers existing behaviour: untracked files were scored before D175, and
114
+ this pins that the fix keys on the ignore rule, not on being untracked.
115
+ """
116
+ from maintainability_audit.report import build_report
117
+
118
+ config = _config()
119
+ repo = _repo(tmp_path)
120
+ _failing_file(repo / "src" / "draft.py", config)
121
+ report = build_report(repo, config, run_analyzers=False)
122
+ assert "src/draft.py" in _scored(report)["failing_paths"]
123
+
124
+
125
+ def test_a_personal_global_ignore_file_does_not_change_the_score(tmp_path, monkeypatch) -> None:
126
+ """Only the repository's own `.gitignore` decides — never one machine's (P1).
127
+
128
+ `--exclude-standard` would read the user's `core.excludesFile`, so two
129
+ laptops with different global ignores would score one commit differently.
130
+
131
+ Covers existing behaviour: before D175 no ignore file was read, global or
132
+ not; this guards the fix against reading the wrong one.
133
+ """
134
+ from maintainability_audit.report import build_report
135
+
136
+ config = _config()
137
+ repo = _repo(tmp_path)
138
+ _failing_file(repo / "src" / "personal.py", config)
139
+ global_ignore = tmp_path / "global-ignore"
140
+ global_ignore.write_text("personal.py\n", encoding="utf-8")
141
+ global_config = tmp_path / "global-gitconfig"
142
+ global_config.write_text(f"[core]\n\texcludesFile = {global_ignore}\n", encoding="utf-8")
143
+ monkeypatch.setenv("GIT_CONFIG_GLOBAL", str(global_config))
144
+
145
+ report = build_report(repo, config, run_analyzers=False)
146
+ assert "src/personal.py" in _scored(report)["failing_paths"], (
147
+ "a path ignored only by this machine's global excludes left the score"
148
+ )
149
+
150
+
151
+ def test_a_tree_git_cannot_read_is_scored_as_it_always_was(tmp_path) -> None:
152
+ """No repository, no evidence: nothing leaves.
153
+
154
+ Covers existing behaviour: a non-git tree had no ignore evidence before
155
+ D175 either; this guards that a failing git query is not read as a verdict.
156
+ """
157
+ from maintainability_audit.report import build_report
158
+
159
+ config = _config()
160
+ tree = tmp_path / "tree"
161
+ (tree / "src").mkdir(parents=True)
162
+ (tree / ".gitignore").write_text("out/\n", encoding="utf-8")
163
+ _failing_file(tree / "out" / "artifact.html", config)
164
+ report = build_report(tree, config, run_analyzers=False)
165
+ assert "out/artifact.html" in _scored(report)["failing_paths"]