maintainability-agent 3.0.1__tar.gz → 3.0.2__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.
- {maintainability_agent-3.0.1/src/maintainability_agent.egg-info → maintainability_agent-3.0.2}/PKG-INFO +2 -2
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/README.md +1 -1
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/pyproject.toml +1 -1
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2/src/maintainability_agent.egg-info}/PKG-INFO +2 -2
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_agent.egg-info/SOURCES.txt +1 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/__init__.py +1 -1
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_runner.py +31 -4
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/config.py +1 -1
- maintainability_agent-3.0.2/tests/test_tool_resolution.py +166 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/LICENSE +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/setup.cfg +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_agent.egg-info/dependency_links.txt +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_agent.egg-info/entry_points.txt +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_agent.egg-info/requires.txt +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_agent.egg-info/top_level.txt +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/__main__.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_analysis.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_analyzer_sections.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_anchor.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_arguments.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_aspects.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_assets/analyzer-catalog.json +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_assets/standard.md +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_attestation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_backfill.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_bands.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_banner.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_built_ins.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_calibration.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_catalog.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_charts.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_cognitive.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_config_defaults.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_conformance.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_corroborate.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_coverage_notes.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_criteria_scope.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_derive.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_discovery.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_documents.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_economics.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_economics_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_environment.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_evidence_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_finding_match.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_first_run.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_formula.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_gates.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_generic.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_grant_ledger.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_history_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_hostile_prompt.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_hotspots.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_html_report_sections.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_html_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_identity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_in_loop.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_in_loop_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_jvm_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_markdown_sections.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_masking.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_audit.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_gate.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_grants.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_refusals.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_resources.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_setup.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_metric_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_metrics_types.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_operator_reads.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_pillars.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_practice.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_precommit.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_precommit_install.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_precommit_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_pressures.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_c.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_cobol.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_core.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_cpp.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_csharp.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_fortran.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_go.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_java.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_js.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_php.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_ruby.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_rust.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_swift.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ratchet.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_recurrence.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_run_comparison.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_safe_write.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_scan_history.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_scan_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_second_source.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_selection.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_semantic.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_semantic_policy.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_semantic_ts.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_semantic_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_setup_errors.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_setup_persist.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/SKILL.md +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/agents/anthropic.yaml +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/agents/copilot.yaml +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/agents/openai.yaml +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/copilot/maintainability-agent.prompt.md +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_data/references/finding-taxonomy.md +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_skill_install.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_stored_grants.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_tdd_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_test_commands.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_test_execution.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_test_pairing.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_tokens.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_tool_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_trends.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_user_config.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_verdict_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_verification.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_work_order.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_work_order_view.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_work_order_weights.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_xml.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/baseline.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/cli.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/deadcode.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/duplication.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/evidence.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/git_tools.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/history.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/idioms.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/instructions.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/mcp_server.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/metrics.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/prompts.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/renderers.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/report.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/sarif.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/scoring.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/similarity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/source.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_acquisition_trust.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_adapter_docs.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_adapter_recordings.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_added_lines.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analysis_coverage.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analysis_execution.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_bridge.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_config_isolation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_estimate_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_pinning.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_primary_estimate.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_provenance.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_provenance_exclusions.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_scoring_path.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_spread_range.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_analyzer_xml_bounds.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_anchor_and_mode.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_anchor_disclosure.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_annotations_match_behaviour.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_anticipated_refusals.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_architecture.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_artifact_write_route_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_aspect_coverage.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_asset_snapshot_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_ast_reading_resolves_spellings.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_attestation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_audit_components.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_authorization_freshness.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_authorship_gates.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_backfill.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_band_concealment_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_band_concealment_p3.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_band_pressures.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_bands.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_body_or_signature_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_c_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_calibration_corpus.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_calibration_drift.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_calibration_tooling.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_catalog_selection.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_catalog_tier_promise.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_chat_primary_docs.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_checkstyle_adapter.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_checkstyle_catalog.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_ci_history_recipe.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_ci_installs_the_analyzer_pool.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_claimed_languages.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_cli.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_clone_group_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_cobol_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_cognitive_complexity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_cohort_statistics.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_concealment_properties.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_config_shape.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_consent_and_grant.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_consumer_migration.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_contract_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_corroborate.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_coverage_by_language.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_cpp_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_criteria_completion.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_csharp_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_d15_composition.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_d15_goal_directed.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_dead_code.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declaration_criteria_scope.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declaration_edge_cases.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declaration_grading.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declaration_ranges.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declaration_source.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declared_authorship.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_declared_imports.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_derivation_mix.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_determinism.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_dimension_ratchet.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_direct_runner_availability_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_discovery.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_doc_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_docs_links.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_economic_context.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_empty_output_not_clean.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_empty_output_not_clean_adapters.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_environment_work_order.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_evidence_invariants.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_evidence_normalization.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_evidence_properties.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_exclusion_dialects.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_falsifier_standard.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_file_list_cap_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_finding_identity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_first_run_elicitation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_first_run_prompt.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_first_run_reelicitation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_fix_breadth_window.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_fixed_form_fortran.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_format_ask.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_fortran_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_fortran_metrics.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_fortran_practice.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_git_argv.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_git_read_only.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_git_readonly_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_go_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_grammar_constructs.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_grammar_token_coverage.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_grant_only_user_tier.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_history.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_history_boundary.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_history_manifest.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_history_schema2.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_history_window.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_hostile_prompt.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_html_executive.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_html_section_parity_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_identity_docs.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_identity_resolution.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_idiom_divergence.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_in_loop_budgets.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_in_loop_check.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_installed_wheel_runtime.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_instruction_targets.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_java_range_guard.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_java_ranges.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_java_scored.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_java_wiring.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_js_complexity_operators.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_js_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_language_coverage.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_language_support_honesty.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_mcp_baseline_payload.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_mcp_history.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_mcp_server.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_migration_1_0.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_near_duplicates.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_network_disclosure.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_one_setup_across_surfaces_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_operator_named_paths.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_operator_named_reads.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_pattern_budget.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_phase6_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_php_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_pillars_and_practice.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_platform_claim.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_pmd_adapter.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_pmd_audit_closures.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_policy_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_pool_runs_by_config.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_population_floors.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_practice_nested_gates_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_precommit_staged.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_presentation_refusals.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_promises.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_prompt_escalation_once.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_prompt_honesty.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_prompt_location_escalation_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_prove_falsifiers.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_python_complexity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_python_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_read_boundary.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_readme_claims.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_recurrence.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_release_plan.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_release_plan_status.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_report_remedy_copy.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_roles_recorded.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_root_grants.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_rubric_ignores_project_lint_config.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_ruby_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_run_comparison.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_runner.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_rust_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_sarif.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scan_history.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scan_scope.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scanner_unsafe_direction.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scanning.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_schema_fidelity.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scope_conformance.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_scoring_calibration.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_semantic_policy.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_setup_gate_completeness.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_setup_gate_independent_contract.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_setup_precondition.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_skill_install.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_sonar_resolve.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_source_index.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_spotbugs_adapter.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_spotbugs_catalog.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_stage8_contract.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_suite_isolation.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_swift_declarations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_tdd_structure.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_test_commands.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_test_execution_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_three_presentations.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_tree_chosen_spawn.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_trends.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_type_fields_not_functions_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_uat_falsifiers.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_unread_code.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_user_config_tier.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_verification_audit_closures.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_verified_grade.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_version_claim.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_wheel_contents.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_work_order.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_work_order_items.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_work_order_selection.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_workflow_supply_chain.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_write_boundary.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/tests/test_write_route_class.py +0 -0
- {maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/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.0.
|
|
3
|
+
Version: 3.0.2
|
|
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.0.
|
|
48
|
+
Version **3.0.2**.
|
|
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.0.
|
|
8
|
+
Version **3.0.2**.
|
|
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.0.
|
|
7
|
+
version = "3.0.2"
|
|
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.0.
|
|
3
|
+
Version: 3.0.2
|
|
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.0.
|
|
48
|
+
Version **3.0.2**.
|
|
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
|
|
@@ -336,6 +336,7 @@ tests/test_tdd_structure.py
|
|
|
336
336
|
tests/test_test_commands.py
|
|
337
337
|
tests/test_test_execution_class.py
|
|
338
338
|
tests/test_three_presentations.py
|
|
339
|
+
tests/test_tool_resolution.py
|
|
339
340
|
tests/test_tree_chosen_spawn.py
|
|
340
341
|
tests/test_trends.py
|
|
341
342
|
tests/test_type_fields_not_functions_class.py
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_runner.py
RENAMED
|
@@ -32,8 +32,10 @@ import re
|
|
|
32
32
|
import shutil
|
|
33
33
|
import subprocess
|
|
34
34
|
import sys
|
|
35
|
+
import sysconfig
|
|
35
36
|
import tempfile
|
|
36
37
|
import time
|
|
38
|
+
from contextlib import suppress
|
|
37
39
|
from dataclasses import dataclass, field
|
|
38
40
|
from enum import StrEnum
|
|
39
41
|
from pathlib import Path
|
|
@@ -137,13 +139,38 @@ def locate(executable: str) -> str | None:
|
|
|
137
139
|
`maintainability-audit --analyzers` finds almost nothing and reports
|
|
138
140
|
an honest but useless "not installed" for every one of them.
|
|
139
141
|
"""
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
for directory in _agent_script_dirs():
|
|
143
|
+
candidate = directory / executable
|
|
144
|
+
if candidate.is_file():
|
|
145
|
+
return str(candidate)
|
|
144
146
|
return shutil.which(executable)
|
|
145
147
|
|
|
146
148
|
|
|
149
|
+
def _agent_script_dirs() -> tuple[Path, ...]:
|
|
150
|
+
"""Where this interpreter's console scripts land, in precedence order.
|
|
151
|
+
|
|
152
|
+
Two directories, because `pip install lizard` writes to a different
|
|
153
|
+
one depending on whether the agent lives in a virtualenv. In a venv
|
|
154
|
+
it is the interpreter's own `bin`. On a **system** Python it is the
|
|
155
|
+
per-user scripts directory, because the framework directory is not
|
|
156
|
+
writable and pip falls back to `--user` — on macOS that is
|
|
157
|
+
`~/Library/Python/3.11/bin`, which is not on the default `PATH`.
|
|
158
|
+
|
|
159
|
+
Searching only the first was D142. A user followed the environment
|
|
160
|
+
work order's own instruction, ran `pip install lizard`, and the next
|
|
161
|
+
audit still reported it "not installed or not on PATH" — because it
|
|
162
|
+
was installed exactly where neither this function nor `PATH` looked.
|
|
163
|
+
The whole Python pool went missing that way on the MCP surface, so
|
|
164
|
+
`declarations` fell to the built-in tier while the report's own
|
|
165
|
+
remedy could not fix it.
|
|
166
|
+
"""
|
|
167
|
+
directories = [Path(sys.executable).parent]
|
|
168
|
+
with suppress(Exception):
|
|
169
|
+
scheme = sysconfig.get_preferred_scheme("user")
|
|
170
|
+
directories.append(Path(sysconfig.get_path("scripts", scheme=scheme)))
|
|
171
|
+
return tuple(directories)
|
|
172
|
+
|
|
173
|
+
|
|
147
174
|
# Variables that make an interpreter or a linter load code from
|
|
148
175
|
# somewhere the operator did not choose. `PYTHONPATH` and `NODE_PATH`
|
|
149
176
|
# put a directory on an import path; `PYTHONSTARTUP` names a file
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/config.py
RENAMED
|
@@ -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.0.
|
|
23
|
+
VERSION = "3.0.2"
|
|
24
24
|
|
|
25
25
|
PROJECT_URL = "https://github.com/marshallguillory86/maintainability-agent"
|
|
26
26
|
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"""Finding a tool the operator installed the way we told them to — D142.
|
|
2
|
+
|
|
3
|
+
`locate` searched the interpreter's own `bin` and then `PATH`. That is
|
|
4
|
+
correct for a virtualenv, where `pip install lizard` writes beside the
|
|
5
|
+
interpreter. It is wrong for a **system** Python: the framework
|
|
6
|
+
directory is not writable, pip falls back to `--user`, and the console
|
|
7
|
+
script lands in the per-user scripts directory — on macOS
|
|
8
|
+
`~/Library/Python/3.11/bin`, which is on neither list and not on the
|
|
9
|
+
default `PATH`.
|
|
10
|
+
|
|
11
|
+
So the environment work order told an operator to run `pip install
|
|
12
|
+
lizard`, they ran it, and the next audit still reported the tool "not
|
|
13
|
+
installed or not on PATH". The remedy the product prescribes could not
|
|
14
|
+
fix the problem the product reports.
|
|
15
|
+
|
|
16
|
+
Found by running the audit against this repository through the MCP
|
|
17
|
+
server, the surface product intent calls primary. Nine analyzers were
|
|
18
|
+
invisible — the whole Python pool, `lizard` and `complexipy` among them
|
|
19
|
+
— so `declarations` fell to the built-in tier. The scan still passed its
|
|
20
|
+
gate and reported a **better** grade than the same scan with the pool
|
|
21
|
+
visible: B against C. A fallback that scores higher than the truth is
|
|
22
|
+
the worst direction for a silent failure, because nothing in the result
|
|
23
|
+
asks to be looked at.
|
|
24
|
+
"""
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import stat
|
|
28
|
+
import sysconfig
|
|
29
|
+
from pathlib import Path
|
|
30
|
+
from types import SimpleNamespace
|
|
31
|
+
|
|
32
|
+
import pytest
|
|
33
|
+
|
|
34
|
+
from maintainability_audit import _runner
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _fake_tool(directory: Path, name: str) -> Path:
|
|
38
|
+
directory.mkdir(parents=True, exist_ok=True)
|
|
39
|
+
script = directory / name
|
|
40
|
+
script.write_text("#!/bin/sh\nexit 0\n", encoding="utf-8")
|
|
41
|
+
script.chmod(script.stat().st_mode | stat.S_IEXEC)
|
|
42
|
+
return script
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@pytest.fixture
|
|
46
|
+
def isolated(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
|
|
47
|
+
"""Point every place `locate` looks at an empty directory.
|
|
48
|
+
|
|
49
|
+
Each test then puts the tool in exactly one of them, so what is being
|
|
50
|
+
asserted is the lookup and not the machine. Without this the tests
|
|
51
|
+
passed here and failed in CI: the runner installs the analyzer pool
|
|
52
|
+
beside its interpreter, so `own_bin` answered first and the fixture
|
|
53
|
+
directories were never reached. A test that agrees with the
|
|
54
|
+
environment it happens to run in cannot say which directory the code
|
|
55
|
+
actually searched.
|
|
56
|
+
"""
|
|
57
|
+
own_bin = tmp_path / "interpreter" / "bin"
|
|
58
|
+
user_scripts = tmp_path / "user-base" / "bin"
|
|
59
|
+
on_path = tmp_path / "opt" / "bin"
|
|
60
|
+
for directory in (own_bin, user_scripts, on_path):
|
|
61
|
+
directory.mkdir(parents=True, exist_ok=True)
|
|
62
|
+
|
|
63
|
+
monkeypatch.setattr(_runner.sys, "executable", str(own_bin / "python3"))
|
|
64
|
+
monkeypatch.setenv("PATH", str(on_path))
|
|
65
|
+
monkeypatch.setattr(
|
|
66
|
+
sysconfig, "get_path",
|
|
67
|
+
lambda name, scheme=None, **kw: (
|
|
68
|
+
str(user_scripts) if name == "scripts" else sysconfig.get_paths()[name]
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
return SimpleNamespace(own_bin=own_bin, user_scripts=user_scripts, on_path=on_path)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_a_tool_in_the_user_scripts_directory_is_found(isolated) -> None:
|
|
75
|
+
"""The case `pip install <tool>` actually produces on a system Python.
|
|
76
|
+
|
|
77
|
+
Neither beside the interpreter nor on `PATH`, because that is
|
|
78
|
+
precisely the combination that made the whole Python pool invisible
|
|
79
|
+
on the MCP surface.
|
|
80
|
+
"""
|
|
81
|
+
_fake_tool(isolated.user_scripts, "lizard")
|
|
82
|
+
|
|
83
|
+
found = _runner.locate("lizard")
|
|
84
|
+
|
|
85
|
+
assert found is not None, (
|
|
86
|
+
"a tool installed by `pip install lizard` on a system Python was not "
|
|
87
|
+
"found; that is where pip puts it and it is on neither the "
|
|
88
|
+
"interpreter's bin nor PATH"
|
|
89
|
+
)
|
|
90
|
+
assert Path(found) == isolated.user_scripts / "lizard"
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def test_the_interpreters_own_bin_still_wins(isolated) -> None:
|
|
94
|
+
"""Covers existing behaviour: the venv co-install keeps precedence.
|
|
95
|
+
|
|
96
|
+
It passes at the base — own-bin was already searched first — and is
|
|
97
|
+
here because the D142 fix appends a second directory. Appending it
|
|
98
|
+
ahead of `own_bin` would silently prefer a stale user-site copy over
|
|
99
|
+
the pinned one shipped beside the agent, which is the version-drift
|
|
100
|
+
the analyzer pinning exists to prevent.
|
|
101
|
+
"""
|
|
102
|
+
_fake_tool(isolated.own_bin, "lizard")
|
|
103
|
+
_fake_tool(isolated.user_scripts, "lizard")
|
|
104
|
+
|
|
105
|
+
assert Path(_runner.locate("lizard")) == isolated.own_bin / "lizard"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def test_path_is_still_searched_when_neither_script_dir_has_it(isolated) -> None:
|
|
109
|
+
"""Covers existing behaviour: `PATH` remains the last resort.
|
|
110
|
+
|
|
111
|
+
Passes at the base. It is here because the fix changed the shape of
|
|
112
|
+
the lookup from two steps to a loop plus a fallback, and dropping the
|
|
113
|
+
fallback would strand every tool an operator installed with homebrew
|
|
114
|
+
or a system package manager — `jscpd` and `pmd` on this machine.
|
|
115
|
+
"""
|
|
116
|
+
_fake_tool(isolated.on_path, "pmd")
|
|
117
|
+
|
|
118
|
+
assert Path(_runner.locate("pmd")) == isolated.on_path / "pmd"
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def test_a_missing_tool_is_still_reported_missing(isolated) -> None:
|
|
122
|
+
"""Covers existing behaviour: absence is still absence.
|
|
123
|
+
|
|
124
|
+
Passes at the base, and pins the direction the fix must not move.
|
|
125
|
+
Widening the search until something is always found would turn "not
|
|
126
|
+
installed" into a false positive, which is worse than the defect —
|
|
127
|
+
the work order would name a tool that cannot run.
|
|
128
|
+
"""
|
|
129
|
+
assert _runner.locate("a-tool-that-does-not-exist") is None
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def test_a_broken_user_scheme_does_not_break_resolution(
|
|
133
|
+
isolated, monkeypatch: pytest.MonkeyPatch
|
|
134
|
+
) -> None:
|
|
135
|
+
"""Covers existing behaviour: `PATH` resolution survives sysconfig.
|
|
136
|
+
|
|
137
|
+
`get_preferred_scheme("user")` is interpreter-dependent and can raise
|
|
138
|
+
on an unusual install. It is wrapped, because a tool the operator has
|
|
139
|
+
on `PATH` must not become unfindable due to a lookup that exists only
|
|
140
|
+
to find a *different* directory.
|
|
141
|
+
"""
|
|
142
|
+
_fake_tool(isolated.on_path, "radon")
|
|
143
|
+
|
|
144
|
+
def explode(*_args: object, **_kwargs: object) -> str:
|
|
145
|
+
raise KeyError("no such scheme")
|
|
146
|
+
|
|
147
|
+
monkeypatch.setattr(sysconfig, "get_preferred_scheme", explode)
|
|
148
|
+
|
|
149
|
+
assert Path(_runner.locate("radon")) == isolated.on_path / "radon"
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def test_the_agents_script_dirs_are_real_directories_not_guesses() -> None:
|
|
153
|
+
"""Whatever is searched must come from this interpreter, not a list.
|
|
154
|
+
|
|
155
|
+
A hardcoded `~/Library/Python/3.11/bin` would be right on one machine
|
|
156
|
+
and wrong on every other Python version and platform. Both entries
|
|
157
|
+
are derived: one from `sys.executable`, one from `sysconfig`.
|
|
158
|
+
"""
|
|
159
|
+
directories = _runner._agent_script_dirs()
|
|
160
|
+
|
|
161
|
+
assert directories, "no script directory is searched at all"
|
|
162
|
+
assert directories[0] == Path(_runner.sys.executable).parent
|
|
163
|
+
assert all(isinstance(d, Path) for d in directories)
|
|
164
|
+
assert len(set(directories)) == len(directories), (
|
|
165
|
+
f"the same directory is searched twice: {directories}"
|
|
166
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/__main__.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_adapters.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_analysis.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_anchor.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_arguments.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_aspects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_backfill.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_bands.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_banner.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_built_ins.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_catalog.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_charts.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_cognitive.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_derive.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_discovery.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_documents.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_economics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_first_run.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_formula.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_gates.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_generic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_hotspots.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_html_view.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_identity.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_in_loop.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_masking.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_audit.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_gate.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_grants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_mcp_setup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_pillars.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_practice.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_precommit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_pressures.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_c.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_cpp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_go.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_js.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ranges_php.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_ratchet.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_recurrence.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_safe_write.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_scan_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_selection.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_semantic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_tdd_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_tokens.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_trends.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_work_order.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/_xml.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/baseline.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/cli.py
RENAMED
|
File without changes
|
{maintainability_agent-3.0.1 → maintainability_agent-3.0.2}/src/maintainability_audit/deadcode.py
RENAMED
|
File without changes
|