maintainability-agent 3.3.0__tar.gz → 3.4.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 (375) hide show
  1. {maintainability_agent-3.3.0/src/maintainability_agent.egg-info → maintainability_agent-3.4.0}/PKG-INFO +2 -2
  2. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/README.md +1 -1
  3. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/pyproject.toml +1 -1
  4. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0/src/maintainability_agent.egg-info}/PKG-INFO +2 -2
  5. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/__init__.py +1 -1
  6. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/config.py +1 -1
  7. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/metrics.py +60 -2
  8. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_operator_named_reads.py +128 -0
  9. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/LICENSE +0 -0
  10. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/setup.cfg +0 -0
  11. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_agent.egg-info/SOURCES.txt +0 -0
  12. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_agent.egg-info/dependency_links.txt +0 -0
  13. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_agent.egg-info/entry_points.txt +0 -0
  14. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_agent.egg-info/requires.txt +0 -0
  15. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_agent.egg-info/top_level.txt +0 -0
  16. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/__main__.py +0 -0
  17. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_adapters.py +0 -0
  18. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_analysis.py +0 -0
  19. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_analyzer_sections.py +0 -0
  20. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_anchor.py +0 -0
  21. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_arguments.py +0 -0
  22. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_aspects.py +0 -0
  23. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_assets/analyzer-catalog.json +0 -0
  24. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_assets/standard.md +0 -0
  25. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_attestation.py +0 -0
  26. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_backfill.py +0 -0
  27. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_bands.py +0 -0
  28. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_banner.py +0 -0
  29. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_built_ins.py +0 -0
  30. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_calibration.py +0 -0
  31. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_catalog.py +0 -0
  32. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_charts.py +0 -0
  33. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_cognitive.py +0 -0
  34. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_config_defaults.py +0 -0
  35. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_conformance.py +0 -0
  36. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_corroborate.py +0 -0
  37. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_coverage_notes.py +0 -0
  38. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_criteria_scope.py +0 -0
  39. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_delegated_pillar.py +0 -0
  40. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_derive.py +0 -0
  41. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_discovery.py +0 -0
  42. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_documents.py +0 -0
  43. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_economics.py +0 -0
  44. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_economics_view.py +0 -0
  45. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_environment.py +0 -0
  46. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_evidence_reader.py +0 -0
  47. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_evidence_view.py +0 -0
  48. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_finding_match.py +0 -0
  49. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_first_run.py +0 -0
  50. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_formula.py +0 -0
  51. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_gates.py +0 -0
  52. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_generic.py +0 -0
  53. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_grammar.py +0 -0
  54. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_grant_ledger.py +0 -0
  55. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_history_view.py +0 -0
  56. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_hostile_prompt.py +0 -0
  57. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_hotspots.py +0 -0
  58. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_html_report_sections.py +0 -0
  59. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_html_view.py +0 -0
  60. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_identity.py +0 -0
  61. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_in_loop.py +0 -0
  62. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_in_loop_view.py +0 -0
  63. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_jvm_adapters.py +0 -0
  64. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_markdown_sections.py +0 -0
  65. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_masking.py +0 -0
  66. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_audit.py +0 -0
  67. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_gate.py +0 -0
  68. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_grants.py +0 -0
  69. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_refusals.py +0 -0
  70. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_resources.py +0 -0
  71. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_mcp_setup.py +0 -0
  72. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_metric_adapters.py +0 -0
  73. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_metrics_types.py +0 -0
  74. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_operator_reads.py +0 -0
  75. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_pillars.py +0 -0
  76. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_practice.py +0 -0
  77. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_precommit.py +0 -0
  78. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_precommit_install.py +0 -0
  79. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_precommit_view.py +0 -0
  80. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_pressures.py +0 -0
  81. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_prompt_sections.py +0 -0
  82. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_c.py +0 -0
  83. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_cobol.py +0 -0
  84. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_core.py +0 -0
  85. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_cpp.py +0 -0
  86. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_csharp.py +0 -0
  87. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_fortran.py +0 -0
  88. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_go.py +0 -0
  89. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_java.py +0 -0
  90. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_js.py +0 -0
  91. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_php.py +0 -0
  92. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_ruby.py +0 -0
  93. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_rust.py +0 -0
  94. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ranges_swift.py +0 -0
  95. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ratchet.py +0 -0
  96. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_ratio_adapters.py +0 -0
  97. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_recurrence.py +0 -0
  98. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_run_comparison.py +0 -0
  99. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_runner.py +0 -0
  100. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_safe_write.py +0 -0
  101. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_scan_history.py +0 -0
  102. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_scan_view.py +0 -0
  103. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_second_source.py +0 -0
  104. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_selection.py +0 -0
  105. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_semantic.py +0 -0
  106. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_semantic_policy.py +0 -0
  107. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_semantic_ts.py +0 -0
  108. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_semantic_view.py +0 -0
  109. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_setup_errors.py +0 -0
  110. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_setup_persist.py +0 -0
  111. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/SKILL.md +0 -0
  112. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/agents/anthropic.yaml +0 -0
  113. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/agents/copilot.yaml +0 -0
  114. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/agents/openai.yaml +0 -0
  115. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/copilot/maintainability-agent.prompt.md +0 -0
  116. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_data/references/finding-taxonomy.md +0 -0
  117. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_skill_install.py +0 -0
  118. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_stored_grants.py +0 -0
  119. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_tdd_view.py +0 -0
  120. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_test_commands.py +0 -0
  121. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_test_execution.py +0 -0
  122. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_test_pairing.py +0 -0
  123. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_tokens.py +0 -0
  124. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_tool_adapters.py +0 -0
  125. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_trends.py +0 -0
  126. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_user_config.py +0 -0
  127. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_verdict_adapters.py +0 -0
  128. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_verification.py +0 -0
  129. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_work_order.py +0 -0
  130. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_work_order_view.py +0 -0
  131. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_work_order_weights.py +0 -0
  132. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/_xml.py +0 -0
  133. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/baseline.py +0 -0
  134. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/cli.py +0 -0
  135. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/deadcode.py +0 -0
  136. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/declarations.py +0 -0
  137. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/duplication.py +0 -0
  138. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/evidence.py +0 -0
  139. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/git_tools.py +0 -0
  140. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/history.py +0 -0
  141. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/idioms.py +0 -0
  142. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/instructions.py +0 -0
  143. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/mcp_server.py +0 -0
  144. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/prompts.py +0 -0
  145. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/renderers.py +0 -0
  146. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/report.py +0 -0
  147. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/sarif.py +0 -0
  148. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/scoring.py +0 -0
  149. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/similarity.py +0 -0
  150. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/src/maintainability_audit/source.py +0 -0
  151. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_acquisition_trust.py +0 -0
  152. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_adapter_docs.py +0 -0
  153. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_adapter_recordings.py +0 -0
  154. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_adapters.py +0 -0
  155. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_added_lines.py +0 -0
  156. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analysis_coverage.py +0 -0
  157. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analysis_execution.py +0 -0
  158. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_bridge.py +0 -0
  159. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_config_isolation.py +0 -0
  160. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_estimate_claims.py +0 -0
  161. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_pinning.py +0 -0
  162. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_primary_estimate.py +0 -0
  163. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_provenance.py +0 -0
  164. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_provenance_exclusions.py +0 -0
  165. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_scoring_path.py +0 -0
  166. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_spread_range.py +0 -0
  167. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_analyzer_xml_bounds.py +0 -0
  168. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_anchor_and_mode.py +0 -0
  169. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_anchor_disclosure.py +0 -0
  170. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_annotations_match_behaviour.py +0 -0
  171. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_anticipated_refusals.py +0 -0
  172. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_architecture.py +0 -0
  173. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_artifact_write_route_class.py +0 -0
  174. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_aspect_coverage.py +0 -0
  175. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_asset_snapshot_class.py +0 -0
  176. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_ast_reading_resolves_spellings.py +0 -0
  177. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_attestation.py +0 -0
  178. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_audit_components.py +0 -0
  179. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_authorization_freshness.py +0 -0
  180. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_authorship_gates.py +0 -0
  181. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_backfill.py +0 -0
  182. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_band_concealment_class.py +0 -0
  183. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_band_concealment_p3.py +0 -0
  184. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_band_pressures.py +0 -0
  185. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_bands.py +0 -0
  186. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_body_or_signature_class.py +0 -0
  187. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_c_declarations.py +0 -0
  188. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_calibration_corpus.py +0 -0
  189. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_calibration_drift.py +0 -0
  190. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_calibration_tooling.py +0 -0
  191. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_catalog_selection.py +0 -0
  192. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_catalog_tier_promise.py +0 -0
  193. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_chat_primary_docs.py +0 -0
  194. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_check_refuses_plus_only_fragments.py +0 -0
  195. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_checkstyle_adapter.py +0 -0
  196. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_checkstyle_catalog.py +0 -0
  197. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_child_sandbox.py +0 -0
  198. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_ci_history_recipe.py +0 -0
  199. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_ci_installs_the_analyzer_pool.py +0 -0
  200. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_claimed_languages.py +0 -0
  201. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_cli.py +0 -0
  202. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_clone_group_class.py +0 -0
  203. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_cobol_declarations.py +0 -0
  204. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_cognitive_complexity.py +0 -0
  205. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_cohort_statistics.py +0 -0
  206. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_concealment_properties.py +0 -0
  207. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_config_shape.py +0 -0
  208. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_consent_and_grant.py +0 -0
  209. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_consumer_migration.py +0 -0
  210. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_contract_claims.py +0 -0
  211. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_corroborate.py +0 -0
  212. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_coverage_by_language.py +0 -0
  213. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_cpp_declarations.py +0 -0
  214. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_criteria_completion.py +0 -0
  215. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_csharp_declarations.py +0 -0
  216. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_d15_composition.py +0 -0
  217. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_d15_goal_directed.py +0 -0
  218. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_dead_code.py +0 -0
  219. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declaration_criteria_scope.py +0 -0
  220. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declaration_edge_cases.py +0 -0
  221. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declaration_grading.py +0 -0
  222. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declaration_ranges.py +0 -0
  223. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declaration_source.py +0 -0
  224. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declarative_parsers.py +0 -0
  225. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declared_authorship.py +0 -0
  226. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_declared_imports.py +0 -0
  227. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_delegated_security_pillar.py +0 -0
  228. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_derivation_mix.py +0 -0
  229. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_determinism.py +0 -0
  230. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_dimension_ratchet.py +0 -0
  231. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_direct_runner_availability_class.py +0 -0
  232. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_discovery.py +0 -0
  233. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_doc_claims.py +0 -0
  234. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_docs_links.py +0 -0
  235. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_economic_context.py +0 -0
  236. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_empty_output_not_clean.py +0 -0
  237. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_empty_output_not_clean_adapters.py +0 -0
  238. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_environment_work_order.py +0 -0
  239. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_evidence_invariants.py +0 -0
  240. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_evidence_normalization.py +0 -0
  241. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_evidence_properties.py +0 -0
  242. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_exclusion_dialects.py +0 -0
  243. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_falsifier_standard.py +0 -0
  244. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_file_list_cap_class.py +0 -0
  245. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_finding_identity.py +0 -0
  246. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_first_run_elicitation.py +0 -0
  247. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_first_run_prompt.py +0 -0
  248. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_first_run_reelicitation.py +0 -0
  249. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_fix_breadth_window.py +0 -0
  250. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_fixed_form_fortran.py +0 -0
  251. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_format_ask.py +0 -0
  252. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_fortran_declarations.py +0 -0
  253. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_fortran_metrics.py +0 -0
  254. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_fortran_practice.py +0 -0
  255. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_git_argv.py +0 -0
  256. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_git_read_only.py +0 -0
  257. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_git_readonly_class.py +0 -0
  258. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_go_declarations.py +0 -0
  259. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_grammar_constructs.py +0 -0
  260. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_grammar_token_coverage.py +0 -0
  261. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_grant_only_user_tier.py +0 -0
  262. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_history.py +0 -0
  263. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_history_boundary.py +0 -0
  264. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_history_manifest.py +0 -0
  265. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_history_schema2.py +0 -0
  266. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_history_window.py +0 -0
  267. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_hostile_prompt.py +0 -0
  268. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_html_executive.py +0 -0
  269. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_html_section_parity_class.py +0 -0
  270. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_identity_docs.py +0 -0
  271. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_identity_resolution.py +0 -0
  272. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_idiom_divergence.py +0 -0
  273. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_in_loop_budgets.py +0 -0
  274. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_in_loop_check.py +0 -0
  275. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_installed_wheel_runtime.py +0 -0
  276. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_instruction_targets.py +0 -0
  277. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_java_range_guard.py +0 -0
  278. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_java_ranges.py +0 -0
  279. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_java_scored.py +0 -0
  280. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_java_wiring.py +0 -0
  281. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_js_complexity_operators.py +0 -0
  282. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_js_declarations.py +0 -0
  283. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_language_coverage.py +0 -0
  284. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_language_support_honesty.py +0 -0
  285. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_mcp_baseline_payload.py +0 -0
  286. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_mcp_format_contract.py +0 -0
  287. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_mcp_history.py +0 -0
  288. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_mcp_server.py +0 -0
  289. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_migration_1_0.py +0 -0
  290. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_near_duplicates.py +0 -0
  291. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_network_disclosure.py +0 -0
  292. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_one_setup_across_surfaces_class.py +0 -0
  293. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_operator_named_paths.py +0 -0
  294. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pairing_reads_imports.py +0 -0
  295. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pattern_budget.py +0 -0
  296. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_phase6_claims.py +0 -0
  297. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_php_declarations.py +0 -0
  298. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pillars_and_practice.py +0 -0
  299. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_platform_claim.py +0 -0
  300. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pmd_adapter.py +0 -0
  301. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pmd_audit_closures.py +0 -0
  302. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_policy_claims.py +0 -0
  303. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_pool_runs_by_config.py +0 -0
  304. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_population_floors.py +0 -0
  305. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_practice_nested_gates_class.py +0 -0
  306. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_precommit_staged.py +0 -0
  307. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_presentation_refusals.py +0 -0
  308. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_promises.py +0 -0
  309. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_prompt_escalation_once.py +0 -0
  310. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_prompt_honesty.py +0 -0
  311. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_prompt_location_escalation_class.py +0 -0
  312. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_prove_falsifiers.py +0 -0
  313. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_python_complexity.py +0 -0
  314. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_python_declarations.py +0 -0
  315. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_read_boundary.py +0 -0
  316. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_readme_claims.py +0 -0
  317. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_recurrence.py +0 -0
  318. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_release_needs_an_empty_ledger.py +0 -0
  319. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_release_plan.py +0 -0
  320. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_release_plan_status.py +0 -0
  321. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_report_remedy_copy.py +0 -0
  322. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_roles_recorded.py +0 -0
  323. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_root_grants.py +0 -0
  324. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_rubric_ignores_project_lint_config.py +0 -0
  325. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_ruby_declarations.py +0 -0
  326. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_run_comparison.py +0 -0
  327. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_runner.py +0 -0
  328. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_rust_declarations.py +0 -0
  329. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_sarif.py +0 -0
  330. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scan_history.py +0 -0
  331. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scan_scope.py +0 -0
  332. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scanner_unsafe_direction.py +0 -0
  333. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scanning.py +0 -0
  334. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_schema_fidelity.py +0 -0
  335. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scope_conformance.py +0 -0
  336. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_scoring_calibration.py +0 -0
  337. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_semantic_policy.py +0 -0
  338. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_setup_gate_completeness.py +0 -0
  339. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_setup_gate_independent_contract.py +0 -0
  340. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_setup_precondition.py +0 -0
  341. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_skill_install.py +0 -0
  342. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_sonar_resolve.py +0 -0
  343. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_source_index.py +0 -0
  344. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_spotbugs_adapter.py +0 -0
  345. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_spotbugs_catalog.py +0 -0
  346. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_stage8_contract.py +0 -0
  347. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_suite_isolation.py +0 -0
  348. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_swift_declarations.py +0 -0
  349. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_tdd_structure.py +0 -0
  350. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_terminal_asks_the_same_questions.py +0 -0
  351. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_test_commands.py +0 -0
  352. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_test_execution_class.py +0 -0
  353. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_three_presentations.py +0 -0
  354. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_tool_resolution.py +0 -0
  355. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_tree_cannot_opt_the_host_in.py +0 -0
  356. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_tree_chosen_spawn.py +0 -0
  357. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_tree_reads_use_the_primitive.py +0 -0
  358. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_trends.py +0 -0
  359. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_type_fields_not_functions_class.py +0 -0
  360. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_uat_falsifiers.py +0 -0
  361. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_unanchored_set_matches_corpus.py +0 -0
  362. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_unread_code.py +0 -0
  363. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_user_config_tier.py +0 -0
  364. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_verification_audit_closures.py +0 -0
  365. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_verified_grade.py +0 -0
  366. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_version_claim.py +0 -0
  367. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_wheel_contents.py +0 -0
  368. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_work_order.py +0 -0
  369. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_work_order_binds_to_this_interpreter.py +0 -0
  370. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_work_order_items.py +0 -0
  371. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_work_order_selection.py +0 -0
  372. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_workflow_supply_chain.py +0 -0
  373. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_write_boundary.py +0 -0
  374. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/tests/test_write_route_class.py +0 -0
  375. {maintainability_agent-3.3.0 → maintainability_agent-3.4.0}/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.3.0
3
+ Version: 3.4.0
4
4
  Summary: Maintainability gate and AI remediation prompt generator for CI.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  **A deterministic, offline maintainability audit whose output is a _bounded
46
46
  work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
47
47
  says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
48
- Version **3.3.0**.
48
+ Version **3.4.0**.
49
49
 
50
50
  **Planned, not shipped:** the audit tool will become `maintainability-audit`;
51
51
  a new `maintainability-agent` companion will run it and automate human-selected
@@ -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.3.0**.
8
+ Version **3.4.0**.
9
9
 
10
10
  **Planned, not shipped:** the audit tool will become `maintainability-audit`;
11
11
  a new `maintainability-agent` companion will run it and automate human-selected
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "maintainability-agent"
7
- version = "3.3.0"
7
+ version = "3.4.0"
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.3.0
3
+ Version: 3.4.0
4
4
  Summary: Maintainability gate and AI remediation prompt generator for CI.
5
5
  Author: Marshall Guillory
6
6
  License: MIT
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  **A deterministic, offline maintainability audit whose output is a _bounded
46
46
  work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
47
47
  says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
48
- Version **3.3.0**.
48
+ Version **3.4.0**.
49
49
 
50
50
  **Planned, not shipped:** the audit tool will become `maintainability-audit`;
51
51
  a new `maintainability-agent` companion will run it and automate human-selected
@@ -1,3 +1,3 @@
1
1
  """Maintainability Audit CI."""
2
2
 
3
- __version__ = "3.3.0"
3
+ __version__ = "3.4.0"
@@ -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.3.0"
23
+ VERSION = "3.4.0"
24
24
 
25
25
  PROJECT_URL = "https://github.com/marshallguillory86/maintainability-agent"
26
26
 
@@ -27,12 +27,70 @@ from .declarations import DECLARATION_SUFFIXES, detect_functions
27
27
  from .source import SourceIndex, index_or_new
28
28
 
29
29
 
30
+ def _directory_matches(normalized: str, bare: str) -> bool:
31
+ """Whether a trailing-slash pattern names a directory on this path.
32
+
33
+ Matched against each **directory** component and each rooted prefix
34
+ of them, so `build/` catches `a/b/build/x.o` and
35
+ `tools/validation/reports/` catches its own file. The final
36
+ component is excluded: the trailing slash says directory, and
37
+ `*.egg-info/` must not match a *file* called `notes.egg-info`.
38
+
39
+ Globbed through `fnmatch` rather than compared as text, which is the
40
+ half D156's first fix left undone. `**/dir/` was one spelling of a
41
+ wider defect: **any** directory pattern holding a glob matched
42
+ nothing. The literal branch cannot see `*.egg-info/`, `fnmatch` on
43
+ the whole path needs a trailing slash no path has, and the
44
+ containment branch is skipped for patterns with glob characters.
45
+
46
+ Found by turning the producer's own lesson on this repository. They
47
+ reported a liveness test that iterated only half its population and
48
+ called it structural; sweeping MA's 35 configured patterns the same
49
+ way found `*.egg-info/` matching nothing while
50
+ `src/maintainability_agent.egg-info/` sat in the tree being scanned.
51
+ """
52
+ directories = normalized.split("/")[:-1]
53
+ for index, component in enumerate(directories):
54
+ if fnmatch.fnmatch(component, bare):
55
+ return True
56
+ if fnmatch.fnmatch("/".join(directories[:index + 1]), bare):
57
+ return True
58
+ return normalized == bare
59
+
60
+
30
61
  def is_excluded(rel: str, patterns: list[str]) -> bool:
31
62
  normalized = rel.replace("\\", "/").replace(os.sep, "/")
32
63
  for raw_pattern in patterns:
33
64
  pattern = raw_pattern.replace("\\", "/")
34
- if pattern.endswith("/") and (normalized == pattern[:-1] or normalized.startswith(pattern)):
35
- return True
65
+ # `**/dir/` is the gitignore spelling for "this directory at any
66
+ # depth", and it matched **nothing** — at any depth, including
67
+ # the one it names. The directory branch below compares against
68
+ # the literal prefix, `fnmatch` needs a trailing slash the path
69
+ # never has, and the containment branch is skipped because the
70
+ # pattern holds glob characters. So it read as intent, never
71
+ # errored, and silently scanned what it was written to exclude.
72
+ #
73
+ # The bare `dir/` spelling has always matched at any depth via
74
+ # the containment branch, so the two spellings of one intent
75
+ # differed by everything. Stripping the prefix makes them agree;
76
+ # a file pattern like `**/*.min.js` already worked and is
77
+ # unaffected, because `*` matches a separator here.
78
+ #
79
+ # Only the **directory** form. A file pattern like
80
+ # `**/generated/*.py` already matches through `fnmatch`, where
81
+ # `*` crosses separators, and stripping its prefix would anchor
82
+ # it to the root — which this project's own exclude test caught
83
+ # within a minute of the first attempt.
84
+ #
85
+ # Reported by the `secure-code-agent` session, which found the
86
+ # identical defect in its own matcher — `.pyc` files had been
87
+ # scanned as source for its entire life (D156).
88
+ if pattern.startswith("**/") and pattern.endswith("/"):
89
+ pattern = pattern[3:]
90
+ if pattern.endswith("/"):
91
+ if _directory_matches(normalized, pattern[:-1]):
92
+ return True
93
+ continue
36
94
  if fnmatch.fnmatch(normalized, pattern) or fnmatch.fnmatch(Path(normalized).name, pattern):
37
95
  return True
38
96
  if not any(char in pattern for char in "*?[]") and f"/{pattern.rstrip('/')}/" in f"/{normalized}/":
@@ -468,3 +468,131 @@ def test_what_is_validated_is_what_is_read(tmp_path: Path) -> None:
468
468
  read_operator_file(target)
469
469
  finally:
470
470
  target.unlink()
471
+
472
+
473
+ def test_both_spellings_of_a_directory_exclude_agree_at_every_depth() -> None:
474
+ """`**/dir/` and `dir/` are one intent, so they must be one behaviour.
475
+
476
+ `**/dir/` matched **nothing** — at any depth, including the one it
477
+ names. The directory branch compares against the literal prefix,
478
+ `fnmatch` needs a trailing slash the path never has, and the
479
+ containment branch is skipped because the pattern holds glob
480
+ characters. It read as intent, never errored, and silently scanned
481
+ what it was written to exclude.
482
+
483
+ An inert exclude has no symptom of its own. The only sign is
484
+ findings you believed you had excluded, which is why this is asserted
485
+ over depths rather than on one example: the bug was uniform, so a
486
+ single case could have passed against a matcher that only handled
487
+ the depth it was written at.
488
+
489
+ Reported by the `secure-code-agent` session, which found the
490
+ identical defect in its own matcher (D156).
491
+ """
492
+ from maintainability_audit.metrics import is_excluded
493
+
494
+ for depth in range(4):
495
+ prefix = "/".join(f"d{n}" for n in range(depth))
496
+ path = f"{prefix}/__pycache__/x.pyc" if prefix else "__pycache__/x.pyc"
497
+ assert is_excluded(path, ["__pycache__/"]), f"bare spelling missed {path}"
498
+ assert is_excluded(path, ["**/__pycache__/"]), f"**/ spelling missed {path}"
499
+
500
+
501
+ def test_the_file_form_of_a_double_star_pattern_still_matches() -> None:
502
+ """Only the directory form is rewritten; file patterns are untouched.
503
+
504
+ The first fix stripped `**/` from every pattern, which anchored
505
+ `**/generated/*.py` to the repository root and stopped it matching
506
+ `src/generated/client.py`. `test_exclude_patterns_use_glob_and_normalized_separators`
507
+ caught it — a file pattern already works through `fnmatch`, where
508
+ `*` crosses separators, so it needed no help and resented the help
509
+ it got.
510
+
511
+ Covers existing behaviour: this passed at the base, because file
512
+ patterns were never broken. It guards the fix's blast radius rather
513
+ than the defect, which is why it is not cited as D156's falsifier.
514
+ """
515
+ from maintainability_audit.metrics import is_excluded
516
+
517
+ assert is_excluded("src/generated/client.py", ["**/generated/*.py"])
518
+ assert is_excluded("a/b.min.js", ["**/*.min.js"])
519
+ assert not is_excluded("src/app.py", ["**/generated/*.py"])
520
+
521
+
522
+ def test_a_directory_exclude_does_not_swallow_a_similar_name() -> None:
523
+ """Widening the matcher must not turn an exclude into a prefix match.
524
+
525
+ Covers existing behaviour: the matcher never swallowed a similar
526
+ name, so this passes at the base. It bounds the fix — a wider
527
+ matcher could have started excluding `pycache_notes.py` — and bounds
528
+ are not falsifiers.
529
+ """
530
+ from maintainability_audit.metrics import is_excluded
531
+
532
+ for pattern in ("__pycache__/", "**/__pycache__/"):
533
+ assert not is_excluded("src/pycache_notes.py", [pattern])
534
+ assert not is_excluded("src/my__pycache__helper.py", [pattern])
535
+ assert not is_excluded("src/app.py", [pattern])
536
+
537
+
538
+ def test_a_globbed_directory_pattern_is_not_inert() -> None:
539
+ """`*.egg-info/` is a directory pattern holding a glob, and it matched
540
+ nothing.
541
+
542
+ D156's first fix handled one spelling — `**/dir/` — and left the
543
+ class. Any directory pattern with a glob in it fell through all
544
+ three branches: the literal branch cannot see a `*`, `fnmatch` on
545
+ the whole path needs a trailing slash no path has, and the
546
+ containment branch is skipped precisely because the pattern holds
547
+ glob characters.
548
+
549
+ This repository's own config carried `*.egg-info/` while
550
+ `src/maintainability_agent.egg-info/` sat in the tree being scanned.
551
+ """
552
+ from maintainability_audit.metrics import is_excluded
553
+
554
+ assert is_excluded("src/maintainability_agent.egg-info/PKG-INFO", ["*.egg-info/"])
555
+ assert is_excluded("pkg.egg-info/SOURCES.txt", ["*.egg-info/"])
556
+ # The trailing slash says directory, so a *file* with that suffix stays.
557
+ assert not is_excluded("src/notes.egg-info", ["*.egg-info/"])
558
+
559
+
560
+ def test_every_configured_exclude_pattern_matches_something() -> None:
561
+ """A liveness sweep over this repository's whole exclude set.
562
+
563
+ The `secure-code-agent` session reported a liveness test of its own
564
+ that iterated only the directory half of its patterns — "half a
565
+ structural rule, which is the kind that reads as covered". Turning
566
+ that lesson on MA's config is what found `*.egg-info/` dead.
567
+
568
+ Asserted over every pattern rather than a sample, because an inert
569
+ exclude has no symptom of its own: it never errors, and the only
570
+ evidence is findings in files the operator believed were excluded.
571
+
572
+ Patterns are checked against paths constructed *from the pattern
573
+ itself*, so this stays true as the config changes and does not
574
+ depend on which generated artifacts happen to exist today.
575
+ """
576
+ import json
577
+
578
+ from maintainability_audit.metrics import is_excluded
579
+
580
+ patterns = json.loads(
581
+ (ROOT / "maintainability-agent.json").read_text(encoding="utf-8")
582
+ )["paths"]["exclude_patterns"]
583
+ assert patterns, "no exclude patterns configured; this sweep would be vacuous"
584
+
585
+ dead = []
586
+ for pattern in patterns:
587
+ bare = pattern.replace("**/", "").rstrip("/")
588
+ if pattern.endswith("/"):
589
+ probes = [f"{bare}/f.py".replace("*", "x"), f"deep/{bare}/f.py".replace("*", "x")]
590
+ else:
591
+ probes = [bare.replace("*", "x"), f"deep/{bare.replace('*', 'x')}"]
592
+ if not any(is_excluded(probe, [pattern]) for probe in probes):
593
+ dead.append(pattern)
594
+
595
+ assert not dead, (
596
+ "these configured exclude patterns match nothing and silently scan "
597
+ f"what they name: {dead}"
598
+ )