maintainability-agent 2.4.0__tar.gz → 2.4.1__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-2.4.0/src/maintainability_agent.egg-info → maintainability_agent-2.4.1}/PKG-INFO +43 -5
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/README.md +42 -4
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/pyproject.toml +1 -1
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1/src/maintainability_agent.egg-info}/PKG-INFO +43 -5
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_agent.egg-info/SOURCES.txt +1 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/__init__.py +1 -1
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_config_defaults.py +1 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/config.py +1 -1
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_claimed_languages.py +18 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_mcp_server.py +8 -6
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_population_floors.py +30 -0
- maintainability_agent-2.4.1/tests/test_suite_isolation.py +139 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/LICENSE +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/setup.cfg +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_agent.egg-info/dependency_links.txt +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_agent.egg-info/entry_points.txt +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_agent.egg-info/requires.txt +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_agent.egg-info/top_level.txt +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/__main__.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_analysis.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_aspects.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_assets/analyzer-catalog.json +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_assets/standard.md +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_attestation.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_backfill.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_bands.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_built_ins.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_calibration.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_catalog.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_charts.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_cognitive.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_conformance.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_corroborate.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_coverage_notes.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_derive.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_discovery.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_documents.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_economics.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_economics_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_environment.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_evidence_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_finding_match.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_first_run.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_formula.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_gates.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_generic.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_grant_ledger.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_history_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_hostile_prompt.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_hotspots.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_html_report_sections.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_html_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_identity.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_jvm_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_markdown_sections.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_masking.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_audit.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_gate.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_grants.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_refusals.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_resources.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_setup.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_metric_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_metrics_types.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_pillars.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_practice.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_pressures.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_c.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_core.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_cpp.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_csharp.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_fortran.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_java.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_js.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ranges_swift.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_ratchet.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_recurrence.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_runner.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_safe_write.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_scan_history.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_scan_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_second_source.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_selection.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_semantic.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_semantic_policy.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_semantic_ts.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_semantic_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_setup_errors.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_setup_persist.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/SKILL.md +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/agents/anthropic.yaml +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/agents/copilot.yaml +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/agents/openai.yaml +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/copilot/maintainability-agent.prompt.md +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_data/references/finding-taxonomy.md +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_skill_install.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_stored_grants.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_tdd_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_test_execution.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_test_pairing.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_tokens.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_tool_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_trends.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_user_config.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_verdict_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_verification.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_work_order.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_work_order_view.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_work_order_weights.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_xml.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/baseline.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/cli.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/deadcode.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/duplication.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/evidence.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/git_tools.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/history.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/idioms.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/instructions.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/mcp_server.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/metrics.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/prompts.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/renderers.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/report.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/sarif.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/scoring.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/similarity.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/source.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_acquisition_trust.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_adapter_docs.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_adapter_recordings.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_added_lines.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analysis_coverage.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analysis_execution.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_bridge.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_config_isolation.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_estimate_claims.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_pinning.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_primary_estimate.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_provenance.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_provenance_exclusions.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_scoring_path.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_spread_range.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_analyzer_xml_bounds.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_annotations_match_behaviour.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_anticipated_refusals.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_architecture.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_artifact_write_route_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_aspect_coverage.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_asset_snapshot_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_ast_reading_resolves_spellings.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_attestation.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_audit_components.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_authorization_freshness.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_authorship_gates.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_backfill.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_band_concealment_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_band_concealment_p3.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_band_pressures.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_bands.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_body_or_signature_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_c_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_calibration_corpus.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_calibration_drift.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_calibration_tooling.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_catalog_selection.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_catalog_tier_promise.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_chat_primary_docs.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_checkstyle_adapter.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_checkstyle_catalog.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_ci_history_recipe.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_ci_installs_the_analyzer_pool.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_cli.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_clone_group_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_cognitive_complexity.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_cohort_statistics.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_concealment_properties.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_config_shape.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_consent_and_grant.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_consumer_migration.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_contract_claims.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_corroborate.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_coverage_by_language.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_cpp_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_csharp_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_d15_composition.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_d15_goal_directed.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_dead_code.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declaration_edge_cases.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declaration_grading.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declaration_ranges.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declaration_source.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declared_authorship.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_declared_imports.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_derivation_mix.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_determinism.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_dimension_ratchet.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_direct_runner_availability_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_discovery.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_doc_claims.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_docs_links.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_economic_context.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_empty_output_not_clean.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_empty_output_not_clean_adapters.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_environment_work_order.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_evidence_invariants.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_evidence_normalization.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_evidence_properties.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_exclusion_dialects.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_falsifier_standard.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_file_list_cap_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_finding_identity.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_first_run_elicitation.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_first_run_prompt.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_first_run_reelicitation.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_fix_breadth_window.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_fixed_form_fortran.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_format_ask.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_fortran_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_fortran_metrics.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_fortran_practice.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_git_argv.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_git_read_only.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_git_readonly_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_grant_only_user_tier.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_history.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_history_boundary.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_history_manifest.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_history_schema2.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_history_window.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_hostile_prompt.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_html_executive.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_html_section_parity_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_identity_docs.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_identity_resolution.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_idiom_divergence.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_installed_wheel_runtime.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_instruction_targets.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_java_range_guard.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_java_ranges.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_java_scored.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_java_wiring.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_js_complexity_operators.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_js_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_language_coverage.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_mcp_baseline_payload.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_mcp_history.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_migration_1_0.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_near_duplicates.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_network_disclosure.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_one_setup_across_surfaces_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_pattern_budget.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_phase6_claims.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_pillars_and_practice.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_platform_claim.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_pmd_adapter.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_pmd_audit_closures.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_pool_runs_by_config.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_practice_nested_gates_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_presentation_refusals.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_promises.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_prompt_escalation_once.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_prompt_honesty.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_prompt_location_escalation_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_prove_falsifiers.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_python_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_read_boundary.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_readme_claims.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_recurrence.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_release_plan.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_release_plan_status.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_report_remedy_copy.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_roles_recorded.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_root_grants.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_rubric_ignores_project_lint_config.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_runner.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_sarif.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_scan_history.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_scan_scope.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_scanning.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_schema_fidelity.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_scope_conformance.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_scoring_calibration.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_semantic_policy.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_setup_gate_completeness.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_setup_gate_independent_contract.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_setup_precondition.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_skill_install.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_source_index.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_spotbugs_adapter.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_spotbugs_catalog.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_stage8_contract.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_swift_declarations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_tdd_structure.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_test_execution_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_three_presentations.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_trends.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_type_fields_not_functions_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_uat_falsifiers.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_unread_code.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_user_config_tier.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_verification_audit_closures.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_verified_grade.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_version_claim.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_wheel_contents.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_work_order.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_work_order_items.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_work_order_selection.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_workflow_supply_chain.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_write_boundary.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_write_route_class.py +0 -0
- {maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/tests/test_written_record.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: maintainability-agent
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: Maintainability gate and AI remediation prompt generator for CI.
|
|
5
5
|
Author: Marshall Guillory
|
|
6
6
|
License: MIT
|
|
@@ -44,7 +44,7 @@ Dynamic: license-file
|
|
|
44
44
|
**A deterministic, offline maintainability audit whose output is a _bounded
|
|
45
45
|
work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
|
|
46
46
|
says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
|
|
47
|
-
Version **2.4.
|
|
47
|
+
Version **2.4.1**.
|
|
48
48
|
|
|
49
49
|
**Languages parsed:** Python, Java, C, C++, C#, Swift, Fortran (free-form
|
|
50
50
|
*and* fixed-form), and the JS/TS family — each by a scanner written for it, and
|
|
@@ -124,9 +124,12 @@ the independent check on their own work, so a platform that generates code and
|
|
|
124
124
|
grades it is producing a self-assessment — a property of the arrangement, not a
|
|
125
125
|
criticism of any one of them. This writes nothing and runs no model, which is
|
|
126
126
|
what lets its verdict be evidence ([the principle](docs/philosophy.md#principles)).
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
Since 2.1.0 the work order is also **checked**: `--conformance` compares the
|
|
128
|
+
returned diff against the paths the report named, `--fail-on-regression`
|
|
129
|
+
ratchets the dimension scores, and `--attestation-output` composes them into one
|
|
130
|
+
record ([how that hole was closed](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)).
|
|
131
|
+
The limit, stated in the same breath: those checks read the diff's **shape**,
|
|
132
|
+
never its correctness — whether the change works is not a claim this tool makes.
|
|
130
133
|
|
|
131
134
|
One pre-registered experiment has tested the bounded prompt.
|
|
132
135
|
Generic prompting made 2 of 6 repositories worse; bounded prompting made 1 of 6 worse and improved 5 of 6, under this tool's own finding count.
|
|
@@ -217,6 +220,41 @@ withheld estimate. For PR work, add `--changed-only main...HEAD` to audit the
|
|
|
217
220
|
diff; on a change too small to support a rate, the estimate and grade are
|
|
218
221
|
withheld and the scope is named as the reason.
|
|
219
222
|
|
|
223
|
+
### Checking that the agent did the work
|
|
224
|
+
|
|
225
|
+
The work order tells an agent to fix exactly these findings and refactor nothing
|
|
226
|
+
else. These flags check that the diff that came back obeyed it — read the
|
|
227
|
+
diff's _shape_, not its correctness:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
maintainability-agent \
|
|
231
|
+
--config maintainability-agent.json \
|
|
232
|
+
--conformance main...HEAD \
|
|
233
|
+
--fail-on-out-of-scope \
|
|
234
|
+
--fail-on-regression \
|
|
235
|
+
--attestation-output maintainability-attestation.md
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
- **`--conformance <revspec>`** compares the diff against the paths the report
|
|
239
|
+
named, and answers two questions separately: did it **stay in scope**, and did
|
|
240
|
+
it **silence nothing**. They stay separate because a change can obey the work
|
|
241
|
+
order and still add a `# noqa` to a finding inside it. A test added for a fix
|
|
242
|
+
stays in scope even though the work order never named the test file.
|
|
243
|
+
- **`--fail-on-out-of-scope`** turns that into a CI failure.
|
|
244
|
+
- **`--fail-on-regression`** ratchets the _dimension_ scores against scan
|
|
245
|
+
history, catching a change that improves one dimension while silently
|
|
246
|
+
regressing another. It has three outcomes, not two — held, regressed, and
|
|
247
|
+
**not comparable**, because two scans taken under different calibration cannot
|
|
248
|
+
be differenced.
|
|
249
|
+
- **`--attestation-output`** writes the three into one per-change record: what
|
|
250
|
+
was measured, what the agent was told to change, whether it stayed inside the
|
|
251
|
+
work order, and what moved. It is reproducible and **not signed** — nothing
|
|
252
|
+
here holds a key, and the document says so in its own text. A check nobody ran
|
|
253
|
+
renders as _not asked_, never as passed.
|
|
254
|
+
|
|
255
|
+
The [roadmap](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)
|
|
256
|
+
has the history of why this was the hole under the product's central claim.
|
|
257
|
+
|
|
220
258
|
## What it analyzes
|
|
221
259
|
|
|
222
260
|
The deterministic scanner reads code from your repo (no LLM calls) and produces
|
|
@@ -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 **2.4.
|
|
8
|
+
Version **2.4.1**.
|
|
9
9
|
|
|
10
10
|
**Languages parsed:** Python, Java, C, C++, C#, Swift, Fortran (free-form
|
|
11
11
|
*and* fixed-form), and the JS/TS family — each by a scanner written for it, and
|
|
@@ -85,9 +85,12 @@ the independent check on their own work, so a platform that generates code and
|
|
|
85
85
|
grades it is producing a self-assessment — a property of the arrangement, not a
|
|
86
86
|
criticism of any one of them. This writes nothing and runs no model, which is
|
|
87
87
|
what lets its verdict be evidence ([the principle](docs/philosophy.md#principles)).
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
Since 2.1.0 the work order is also **checked**: `--conformance` compares the
|
|
89
|
+
returned diff against the paths the report named, `--fail-on-regression`
|
|
90
|
+
ratchets the dimension scores, and `--attestation-output` composes them into one
|
|
91
|
+
record ([how that hole was closed](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)).
|
|
92
|
+
The limit, stated in the same breath: those checks read the diff's **shape**,
|
|
93
|
+
never its correctness — whether the change works is not a claim this tool makes.
|
|
91
94
|
|
|
92
95
|
One pre-registered experiment has tested the bounded prompt.
|
|
93
96
|
Generic prompting made 2 of 6 repositories worse; bounded prompting made 1 of 6 worse and improved 5 of 6, under this tool's own finding count.
|
|
@@ -178,6 +181,41 @@ withheld estimate. For PR work, add `--changed-only main...HEAD` to audit the
|
|
|
178
181
|
diff; on a change too small to support a rate, the estimate and grade are
|
|
179
182
|
withheld and the scope is named as the reason.
|
|
180
183
|
|
|
184
|
+
### Checking that the agent did the work
|
|
185
|
+
|
|
186
|
+
The work order tells an agent to fix exactly these findings and refactor nothing
|
|
187
|
+
else. These flags check that the diff that came back obeyed it — read the
|
|
188
|
+
diff's _shape_, not its correctness:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
maintainability-agent \
|
|
192
|
+
--config maintainability-agent.json \
|
|
193
|
+
--conformance main...HEAD \
|
|
194
|
+
--fail-on-out-of-scope \
|
|
195
|
+
--fail-on-regression \
|
|
196
|
+
--attestation-output maintainability-attestation.md
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
- **`--conformance <revspec>`** compares the diff against the paths the report
|
|
200
|
+
named, and answers two questions separately: did it **stay in scope**, and did
|
|
201
|
+
it **silence nothing**. They stay separate because a change can obey the work
|
|
202
|
+
order and still add a `# noqa` to a finding inside it. A test added for a fix
|
|
203
|
+
stays in scope even though the work order never named the test file.
|
|
204
|
+
- **`--fail-on-out-of-scope`** turns that into a CI failure.
|
|
205
|
+
- **`--fail-on-regression`** ratchets the _dimension_ scores against scan
|
|
206
|
+
history, catching a change that improves one dimension while silently
|
|
207
|
+
regressing another. It has three outcomes, not two — held, regressed, and
|
|
208
|
+
**not comparable**, because two scans taken under different calibration cannot
|
|
209
|
+
be differenced.
|
|
210
|
+
- **`--attestation-output`** writes the three into one per-change record: what
|
|
211
|
+
was measured, what the agent was told to change, whether it stayed inside the
|
|
212
|
+
work order, and what moved. It is reproducible and **not signed** — nothing
|
|
213
|
+
here holds a key, and the document says so in its own text. A check nobody ran
|
|
214
|
+
renders as _not asked_, never as passed.
|
|
215
|
+
|
|
216
|
+
The [roadmap](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)
|
|
217
|
+
has the history of why this was the hole under the product's central claim.
|
|
218
|
+
|
|
181
219
|
## What it analyzes
|
|
182
220
|
|
|
183
221
|
The deterministic scanner reads code from your repo (no LLM calls) and produces
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "maintainability-agent"
|
|
7
|
-
version = "2.4.
|
|
7
|
+
version = "2.4.1"
|
|
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: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: Maintainability gate and AI remediation prompt generator for CI.
|
|
5
5
|
Author: Marshall Guillory
|
|
6
6
|
License: MIT
|
|
@@ -44,7 +44,7 @@ Dynamic: license-file
|
|
|
44
44
|
**A deterministic, offline maintainability audit whose output is a _bounded
|
|
45
45
|
work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
|
|
46
46
|
says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
|
|
47
|
-
Version **2.4.
|
|
47
|
+
Version **2.4.1**.
|
|
48
48
|
|
|
49
49
|
**Languages parsed:** Python, Java, C, C++, C#, Swift, Fortran (free-form
|
|
50
50
|
*and* fixed-form), and the JS/TS family — each by a scanner written for it, and
|
|
@@ -124,9 +124,12 @@ the independent check on their own work, so a platform that generates code and
|
|
|
124
124
|
grades it is producing a self-assessment — a property of the arrangement, not a
|
|
125
125
|
criticism of any one of them. This writes nothing and runs no model, which is
|
|
126
126
|
what lets its verdict be evidence ([the principle](docs/philosophy.md#principles)).
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
Since 2.1.0 the work order is also **checked**: `--conformance` compares the
|
|
128
|
+
returned diff against the paths the report named, `--fail-on-regression`
|
|
129
|
+
ratchets the dimension scores, and `--attestation-output` composes them into one
|
|
130
|
+
record ([how that hole was closed](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)).
|
|
131
|
+
The limit, stated in the same breath: those checks read the diff's **shape**,
|
|
132
|
+
never its correctness — whether the change works is not a claim this tool makes.
|
|
130
133
|
|
|
131
134
|
One pre-registered experiment has tested the bounded prompt.
|
|
132
135
|
Generic prompting made 2 of 6 repositories worse; bounded prompting made 1 of 6 worse and improved 5 of 6, under this tool's own finding count.
|
|
@@ -217,6 +220,41 @@ withheld estimate. For PR work, add `--changed-only main...HEAD` to audit the
|
|
|
217
220
|
diff; on a change too small to support a rate, the estimate and grade are
|
|
218
221
|
withheld and the scope is named as the reason.
|
|
219
222
|
|
|
223
|
+
### Checking that the agent did the work
|
|
224
|
+
|
|
225
|
+
The work order tells an agent to fix exactly these findings and refactor nothing
|
|
226
|
+
else. These flags check that the diff that came back obeyed it — read the
|
|
227
|
+
diff's _shape_, not its correctness:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
maintainability-agent \
|
|
231
|
+
--config maintainability-agent.json \
|
|
232
|
+
--conformance main...HEAD \
|
|
233
|
+
--fail-on-out-of-scope \
|
|
234
|
+
--fail-on-regression \
|
|
235
|
+
--attestation-output maintainability-attestation.md
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
- **`--conformance <revspec>`** compares the diff against the paths the report
|
|
239
|
+
named, and answers two questions separately: did it **stay in scope**, and did
|
|
240
|
+
it **silence nothing**. They stay separate because a change can obey the work
|
|
241
|
+
order and still add a `# noqa` to a finding inside it. A test added for a fix
|
|
242
|
+
stays in scope even though the work order never named the test file.
|
|
243
|
+
- **`--fail-on-out-of-scope`** turns that into a CI failure.
|
|
244
|
+
- **`--fail-on-regression`** ratchets the _dimension_ scores against scan
|
|
245
|
+
history, catching a change that improves one dimension while silently
|
|
246
|
+
regressing another. It has three outcomes, not two — held, regressed, and
|
|
247
|
+
**not comparable**, because two scans taken under different calibration cannot
|
|
248
|
+
be differenced.
|
|
249
|
+
- **`--attestation-output`** writes the three into one per-change record: what
|
|
250
|
+
was measured, what the agent was told to change, whether it stayed inside the
|
|
251
|
+
work order, and what moved. It is reproducible and **not signed** — nothing
|
|
252
|
+
here holds a key, and the document says so in its own text. A check nobody ran
|
|
253
|
+
renders as _not asked_, never as passed.
|
|
254
|
+
|
|
255
|
+
The [roadmap](docs/roadmap.md#the-remediation-hole-closed-in-210-through-230)
|
|
256
|
+
has the history of why this was the hole under the product's central claim.
|
|
257
|
+
|
|
220
258
|
## What it analyzes
|
|
221
259
|
|
|
222
260
|
The deterministic scanner reads code from your repo (no LLM calls) and produces
|
|
@@ -290,6 +290,7 @@ tests/test_source_index.py
|
|
|
290
290
|
tests/test_spotbugs_adapter.py
|
|
291
291
|
tests/test_spotbugs_catalog.py
|
|
292
292
|
tests/test_stage8_contract.py
|
|
293
|
+
tests/test_suite_isolation.py
|
|
293
294
|
tests/test_swift_declarations.py
|
|
294
295
|
tests/test_tdd_structure.py
|
|
295
296
|
tests/test_test_execution_class.py
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/config.py
RENAMED
|
@@ -11,7 +11,7 @@ from ._config_defaults import DEFAULT_CONFIG, DEFAULT_IDIOM_GROUPS
|
|
|
11
11
|
# still the door every caller comes through.
|
|
12
12
|
__all__ = ["DEFAULT_CONFIG", "DEFAULT_IDIOM_GROUPS", "PROJECT_URL", "VERSION"]
|
|
13
13
|
|
|
14
|
-
VERSION = "2.4.
|
|
14
|
+
VERSION = "2.4.1"
|
|
15
15
|
|
|
16
16
|
PROJECT_URL = "https://github.com/marshallguillory86/maintainability-agent"
|
|
17
17
|
|
|
@@ -89,6 +89,24 @@ def test_every_scanned_source_suffix_can_be_read_by_something() -> None:
|
|
|
89
89
|
"population would be a number nobody measured"
|
|
90
90
|
)
|
|
91
91
|
|
|
92
|
+
# The other direction, which was missing and cost 2.4.0 its language.
|
|
93
|
+
# Swift shipped in `DECLARATION_SUFFIXES`, in `SCANNERS`, in the README
|
|
94
|
+
# table and in `language-support.md` — and not in the default
|
|
95
|
+
# `include_extensions`, so no `.swift` file was ever opened. The scanner
|
|
96
|
+
# was correct, tested, documented, and unreachable: an audit of a Swift
|
|
97
|
+
# repository found zero Swift files and withheld its rates, which is
|
|
98
|
+
# indistinguishable from not supporting the language at all.
|
|
99
|
+
#
|
|
100
|
+
# Caught by a corpus run reporting `vapor/vapor` as three files, not by
|
|
101
|
+
# any test, because every test that could have caught it exercised the
|
|
102
|
+
# scanner directly rather than through the configuration a user gets.
|
|
103
|
+
unopened = sorted(DECLARATION_SUFFIXES - included)
|
|
104
|
+
assert not unopened, (
|
|
105
|
+
f"{unopened} are parsed but absent from the default "
|
|
106
|
+
"include_extensions, so no such file is ever opened; the language "
|
|
107
|
+
"is claimed and unreachable"
|
|
108
|
+
)
|
|
109
|
+
|
|
92
110
|
|
|
93
111
|
# One sample of real source per claimed language, by suffix. This was a
|
|
94
112
|
# chain of nested conditionals until 1.4.0, when the fifth language took
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import json
|
|
7
|
-
import os
|
|
8
7
|
import subprocess
|
|
9
8
|
import sys
|
|
10
9
|
from pathlib import Path
|
|
@@ -159,12 +158,15 @@ def test_a_client_sees_the_two_tools_and_can_call_one(tmp_path: Path) -> None:
|
|
|
159
158
|
def _child_import_path() -> str:
|
|
160
159
|
"""This process's own import path, for the child to inherit.
|
|
161
160
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
161
|
+
The MCP SDK spawns with a scrubbed environment rather than an
|
|
162
|
+
inherited one, so this seam needs the value passed explicitly even
|
|
163
|
+
though `conftest` now puts it in `os.environ` for every other child.
|
|
164
|
+
It is the same value, from the same place, for the same reason —
|
|
165
|
+
`conftest.child_import_path` carries the full account.
|
|
166
166
|
"""
|
|
167
|
-
|
|
167
|
+
from conftest import child_import_path
|
|
168
|
+
|
|
169
|
+
return child_import_path()
|
|
168
170
|
|
|
169
171
|
|
|
170
172
|
def test_real_stdio_process_initializes_and_reports_its_boundary(tmp_path: Path) -> None:
|
|
@@ -44,6 +44,36 @@ pytestmark = pytest.mark.usefixtures("real_population_floors")
|
|
|
44
44
|
CORPUS = Path(__file__).resolve().parent.parent / "tools" / "calibration" / "corpus.json"
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
def test_the_shipped_floors_are_the_corpus_minima() -> None:
|
|
48
|
+
"""The suite lifts the floors; this pins what it lifted.
|
|
49
|
+
|
|
50
|
+
Without it, a floor could be raised above a calibration member's
|
|
51
|
+
population and no test would notice, because every other test runs
|
|
52
|
+
with the floors disabled.
|
|
53
|
+
|
|
54
|
+
It lived in `conftest.py` and was therefore never collected — pytest
|
|
55
|
+
loads a conftest as a plugin, not as a test module — so for as long as
|
|
56
|
+
it existed it asserted nothing. It is compared against
|
|
57
|
+
`conftest.SHIPPED_FLOORS`, captured at import before any fixture
|
|
58
|
+
touches the table, rather than against the live module attribute this
|
|
59
|
+
file's own `real_population_floors` fixture restores.
|
|
60
|
+
|
|
61
|
+
Covers existing behaviour: the floors and the corpus it checks them
|
|
62
|
+
against are both older than this change, which only moves the
|
|
63
|
+
assertion somewhere pytest will run it. It cannot fail at the base
|
|
64
|
+
for the plainest possible reason — at the base it is not collected,
|
|
65
|
+
so there is nothing there to fail.
|
|
66
|
+
"""
|
|
67
|
+
from conftest import SHIPPED_FLOORS
|
|
68
|
+
|
|
69
|
+
repos = json.loads(CORPUS.read_text(encoding="utf-8"))["repos"]
|
|
70
|
+
assert SHIPPED_FLOORS["files_scanned"] <= min(r["source_files"] for r in repos)
|
|
71
|
+
assert SHIPPED_FLOORS["declarations_scanned"] <= min(r["declarations"] for r in repos)
|
|
72
|
+
assert all(value > 0 for value in SHIPPED_FLOORS.values()), (
|
|
73
|
+
"a zero floor ships nothing; the hello-world A+ comes straight back"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
47
77
|
def _repo(tmp_path: Path, files: int, decls_per_file: int = 1) -> Path:
|
|
48
78
|
root = tmp_path / "r"
|
|
49
79
|
root.mkdir(parents=True)
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""The suite's own isolation, tested where the tests actually run.
|
|
2
|
+
|
|
3
|
+
Every assertion here is about the harness rather than the product: that a
|
|
4
|
+
fixture repository cannot read the developer's git configuration, and that
|
|
5
|
+
a spawned subprocess imports the same package this process did. Both are
|
|
6
|
+
properties of `conftest.py`, and both were *written* in `conftest.py` —
|
|
7
|
+
where pytest never collected them, because a conftest is a plugin module
|
|
8
|
+
and not a test module. `python_files` defaults to `test_*.py` and
|
|
9
|
+
`*_test.py`; `conftest.py` matches neither.
|
|
10
|
+
|
|
11
|
+
So the guard for the git-isolation fixture, with its careful docstring
|
|
12
|
+
about how the first attempt at that fix had been too narrow, had never
|
|
13
|
+
run once. It is the failure mode this project keeps meeting in new
|
|
14
|
+
costumes — a check narrower than the promise, a guard that reads one
|
|
15
|
+
direction, an assertion nothing executes — and the cheapest of the three
|
|
16
|
+
to miss, because a test that is never collected cannot go red.
|
|
17
|
+
|
|
18
|
+
`test_the_isolation_guards_are_collected` below is the guard on the
|
|
19
|
+
guards: it fails if these move back somewhere pytest will not look.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import os
|
|
25
|
+
import subprocess
|
|
26
|
+
import sys
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
DEVELOPER_HOME = Path(os.path.expanduser("~")).resolve()
|
|
30
|
+
"""Captured at import, which is before the session fixture moves `HOME`.
|
|
31
|
+
|
|
32
|
+
Reading it later would return the fixture's temporary home and the leak
|
|
33
|
+
check below would compare against the wrong string — passing always, which
|
|
34
|
+
is the same defect as not being collected.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_no_git_in_this_suite_reads_developer_configuration(tmp_path: Path) -> None:
|
|
39
|
+
"""The isolation holds, for any setting rather than a listed few.
|
|
40
|
+
|
|
41
|
+
Asserting on the *origin* of every setting is what makes this a guard
|
|
42
|
+
against the class. A test that only checked `commit.gpgsign` would pass
|
|
43
|
+
while `init.templateDir` was still installing hooks — which is precisely
|
|
44
|
+
how the first attempt at that fix was wrong.
|
|
45
|
+
"""
|
|
46
|
+
repo = tmp_path / "probe"
|
|
47
|
+
repo.mkdir()
|
|
48
|
+
subprocess.run(["git", "init", "-q"], cwd=repo, check=True)
|
|
49
|
+
|
|
50
|
+
origins = subprocess.run(
|
|
51
|
+
["git", "config", "--list", "--show-origin"],
|
|
52
|
+
cwd=repo, text=True, capture_output=True, check=True,
|
|
53
|
+
).stdout
|
|
54
|
+
leaked = [line for line in origins.splitlines() if str(DEVELOPER_HOME) in line]
|
|
55
|
+
assert not leaked, f"developer configuration reached a fixture git: {leaked}"
|
|
56
|
+
|
|
57
|
+
hooks = repo / ".git" / "hooks"
|
|
58
|
+
installed = [entry.name for entry in hooks.iterdir() if entry.suffix != ".sample"]
|
|
59
|
+
assert not installed, (
|
|
60
|
+
f"init.templateDir installed hooks into a fixture repository: {installed}"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Not "unset": `_git_never_maintains_the_fixtures` sets these to false
|
|
64
|
+
# unconditionally. The requirement is that a fixture never *tries* to
|
|
65
|
+
# sign, whichever layer delivers that.
|
|
66
|
+
for setting in ("commit.gpgsign", "tag.gpgsign"):
|
|
67
|
+
value = subprocess.run(
|
|
68
|
+
["git", "config", "--get", setting],
|
|
69
|
+
cwd=repo, text=True, capture_output=True, check=False,
|
|
70
|
+
).stdout.strip()
|
|
71
|
+
assert value in ("", "false"), (
|
|
72
|
+
f"a fixture repository would attempt to sign: {setting}={value}"
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_a_spawned_child_imports_the_same_package_this_process_did() -> None:
|
|
77
|
+
"""Parent and child agree on which copy is under test.
|
|
78
|
+
|
|
79
|
+
The suite makes assertions about CLI behaviour by spawning
|
|
80
|
+
`python -m maintainability_audit`. Those assertions are only about this
|
|
81
|
+
working tree if the child resolves the same package the test process
|
|
82
|
+
imported, and for a while nothing checked that:
|
|
83
|
+
|
|
84
|
+
- Where the package is installed with `pip install --user`, the `HOME`
|
|
85
|
+
move in `conftest` deleted the child's route to it entirely. Tests
|
|
86
|
+
failed with `No module named maintainability_audit` — a message that
|
|
87
|
+
names imports, in tests whose subject is not imports, on a laptop
|
|
88
|
+
while CI stayed green because a virtualenv's site-packages is not
|
|
89
|
+
`HOME`-derived.
|
|
90
|
+
- The quieter half is that a child could instead have found a
|
|
91
|
+
*different* copy — a stale wheel, an older `pip install` — and
|
|
92
|
+
passed. Every subprocess assertion would then have described a build
|
|
93
|
+
the rest of the suite never measured.
|
|
94
|
+
|
|
95
|
+
Comparing the resolved file rather than the version catches both: two
|
|
96
|
+
copies of the same version are still two copies.
|
|
97
|
+
"""
|
|
98
|
+
child = subprocess.run(
|
|
99
|
+
[sys.executable, "-c",
|
|
100
|
+
"import maintainability_audit as m; print(m.__file__)"],
|
|
101
|
+
text=True, capture_output=True, check=False,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
assert child.returncode == 0, (
|
|
105
|
+
"a spawned child could not import the package under test:\n"
|
|
106
|
+
f"{child.stderr}"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
import maintainability_audit
|
|
110
|
+
|
|
111
|
+
assert Path(child.stdout.strip()) == Path(maintainability_audit.__file__), (
|
|
112
|
+
"a spawned subprocess imported a different copy of the package than "
|
|
113
|
+
f"this test process: child {child.stdout.strip()!r}, parent "
|
|
114
|
+
f"{maintainability_audit.__file__!r}"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def test_the_isolation_guards_are_collected() -> None:
|
|
119
|
+
"""No isolation guard may live where pytest does not collect it.
|
|
120
|
+
|
|
121
|
+
The guard on the guards, and the reason this file exists. Both tests
|
|
122
|
+
above sat in `conftest.py` and never ran; the suite was green for
|
|
123
|
+
months with its own harness unverified. Asserting that `conftest.py`
|
|
124
|
+
defines no `test_`-prefixed function encodes the rule rather than the
|
|
125
|
+
instance, so the next one written in the convenient place fails loudly
|
|
126
|
+
instead of silently never running.
|
|
127
|
+
"""
|
|
128
|
+
conftest = Path(__file__).with_name("conftest.py").read_text()
|
|
129
|
+
stranded = [
|
|
130
|
+
line.split("(")[0].removeprefix("def ").strip()
|
|
131
|
+
for line in conftest.splitlines()
|
|
132
|
+
if line.startswith("def test_")
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
assert not stranded, (
|
|
136
|
+
f"{stranded} are defined in conftest.py, which pytest loads as a "
|
|
137
|
+
"plugin and never collects as a test module, so they cannot fail. "
|
|
138
|
+
"Move them into a test_*.py file."
|
|
139
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/__main__.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_adapters.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_analysis.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_aspects.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_backfill.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_bands.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_built_ins.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_catalog.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_charts.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_cognitive.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_derive.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_discovery.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_documents.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_economics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_first_run.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_formula.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_gates.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_generic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_hotspots.py
RENAMED
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_html_view.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_identity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_masking.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_audit.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_gate.py
RENAMED
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_grants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{maintainability_agent-2.4.0 → maintainability_agent-2.4.1}/src/maintainability_audit/_mcp_setup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|