maintainability-agent 3.7.4__tar.gz → 3.7.6__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.7.4/src/maintainability_agent.egg-info → maintainability_agent-3.7.6}/PKG-INFO +4 -4
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/README.md +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/pyproject.toml +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6/src/maintainability_agent.egg-info}/PKG-INFO +4 -4
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_agent.egg-info/SOURCES.txt +1 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/__init__.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_analysis.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_anchor.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_backfill.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_cognitive.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_economics.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_first_run.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_html_view.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_in_loop.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_in_loop_view.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_markdown_sections.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_audit.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_setup.py +2 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_pressures.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_prompt_sections.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_core.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_js.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_runner.py +4 -4
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_safe_write.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_security_delegate.py +10 -4
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_semantic_ts.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_verification.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_work_order.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/baseline.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/cli.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/config.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/duplication.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/instructions.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_artifact_write_route_class.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_authorship_gates.py +31 -45
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_body_or_signature_class.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_chat_leads_with_the_work_order.py +5 -5
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_chat_primary_docs.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_child_sandbox.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_ci_installs_the_analyzer_pool.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_claimed_languages.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_d15_composition.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_d15_goal_directed.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_demo_tree.py +6 -6
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_direct_runner_availability_class.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_every_surface_says_what_the_run_found.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_first_run_elicitation.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_html_executive.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_html_section_parity_class.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_in_loop_budgets.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_mcp_format_contract.py +2 -2
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_mcp_server.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_migration_1_0.py +1 -1
- maintainability_agent-3.7.6/tests/test_mutation_recorded.py +79 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_one_setup_across_surfaces_class.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_platform_claim.py +3 -4
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_precommit_staged.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_presentation_refusals.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_prove_falsifiers.py +3 -3
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_readme_claims.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_security_findings_keep_their_handoff.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_security_pillar_runs_and_shows.py +6 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_semantic_findings_stay_inside_the_audited_files.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_skill_install.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_spotbugs_adapter.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_stage8_contract.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_uat_falsifiers.py +2 -9
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_withheld_work_keeps_its_boundary.py +1 -1
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_written_record.py +9 -11
- maintainability_agent-3.7.4/tests/test_declared_authorship.py +0 -65
- maintainability_agent-3.7.4/tests/test_roles_recorded.py +0 -169
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/LICENSE +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/setup.cfg +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_agent.egg-info/dependency_links.txt +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_agent.egg-info/entry_points.txt +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_agent.egg-info/requires.txt +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_agent.egg-info/top_level.txt +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/__main__.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_analyzer_sections.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_arguments.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_aspects.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_assets/analyzer-catalog.json +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_assets/standard.md +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_attestation.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_bands.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_banner.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_built_ins.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_calibration.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_catalog.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_charts.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_config_defaults.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_conformance.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_corroborate.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_coverage_notes.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_criteria_scope.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_delegated_pillar.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_derive.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_discovery.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_documents.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_economics_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_environment.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_evidence_reader.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_evidence_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_finding_match.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_formula.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_gates.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_generic.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_grammar.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_grant_ledger.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_history_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_hostile_prompt.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_hotspots.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_html_report_sections.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_identity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_jvm_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_masking.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_gate.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_grants.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_refusals.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_resources.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_metric_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_metrics_types.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_operator_reads.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_pillars.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_practice.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_precommit.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_precommit_install.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_precommit_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_c.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_cobol.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_cpp.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_csharp.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_fortran.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_go.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_java.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_php.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_ruby.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_rust.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_swift.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ratchet.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ratio_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_recurrence.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_run_comparison.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_scan_history.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_scan_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_second_source.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_security_work_order.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_selection.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_semantic.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_semantic_policy.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_semantic_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_setup_errors.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_setup_persist.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/SKILL.md +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/agents/anthropic.yaml +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/agents/copilot.yaml +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/agents/openai.yaml +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/copilot/maintainability-agent.prompt.md +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_data/references/finding-taxonomy.md +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_skill_install.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_stored_grants.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_tdd_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_test_commands.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_test_execution.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_test_pairing.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_tokens.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_tool_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_trends.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_user_config.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_verdict_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_work_order_view.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_work_order_weights.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_xml.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/deadcode.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/evidence.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/git_tools.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/history.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/idioms.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/mcp_server.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/metrics.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/prompts.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/renderers.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/report.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/sarif.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/scoring.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/similarity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/source.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_acquisition_trust.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_adapter_docs.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_adapter_recordings.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_added_lines.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analysis_coverage.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analysis_execution.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_bridge.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_config_isolation.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_estimate_claims.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_pinning.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_primary_estimate.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_provenance.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_provenance_exclusions.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_scoring_path.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_spread_range.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_analyzer_xml_bounds.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_anchor_and_mode.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_anchor_caveat_and_counts_follow_the_run.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_anchor_disclosure.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_annotations_match_behaviour.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_anticipated_refusals.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_architecture.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_aspect_coverage.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_asset_snapshot_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_ast_reading_resolves_spellings.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_attestation.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_audit_components.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_authorization_freshness.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_backfill.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_band_concealment_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_band_concealment_p3.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_band_pressures.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_bands.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_build_output_is_not_the_repositorys_code.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_c_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_calibration_corpus.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_calibration_drift.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_calibration_tooling.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_catalog_selection.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_catalog_tier_promise.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_check_refuses_plus_only_fragments.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_checkstyle_adapter.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_checkstyle_catalog.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_ci_history_recipe.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_cli.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_clone_group_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_cobol_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_cognitive_complexity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_cohort_statistics.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_concealment_properties.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_config_shape.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_consent_and_grant.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_consumer_migration.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_contract_claims.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_corroborate.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_coverage_by_language.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_cpp_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_criteria_completion.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_csharp_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_dead_code.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declaration_criteria_scope.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declaration_edge_cases.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declaration_grading.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declaration_ranges.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declaration_source.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declarative_parsers.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_declared_imports.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_delegated_security_pillar.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_derivation_mix.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_determinism.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_dimension_ratchet.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_discovery.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_doc_claims.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_docs_links.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_economic_context.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_empty_output_not_clean.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_empty_output_not_clean_adapters.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_environment_work_order.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_evidence_invariants.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_evidence_normalization.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_evidence_properties.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_example_config_opens_claimed_languages.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_exclusion_dialects.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_exposure_never_outranks_band.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_falsifier_standard.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_file_list_cap_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_finding_identity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_first_run_prompt.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_first_run_reelicitation.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_fix_breadth_window.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_fixed_form_fortran.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_format_ask.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_fortran_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_fortran_metrics.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_fortran_practice.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_git_argv.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_git_read_only.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_git_readonly_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_go_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_grammar_constructs.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_grammar_token_coverage.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_grant_only_user_tier.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_history.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_history_boundary.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_history_manifest.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_history_schema2.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_history_window.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_hostile_prompt.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_identity_docs.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_identity_resolution.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_idiom_divergence.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_in_loop_check.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_installed_wheel_runtime.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_instruction_targets.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_java_range_guard.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_java_ranges.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_java_scored.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_java_wiring.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_js_complexity_operators.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_js_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_language_coverage.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_language_support_honesty.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_mcp_baseline_payload.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_mcp_history.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_mcp_start_failure_names_what_is_installed.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_near_duplicates.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_network_disclosure.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_operator_named_paths.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_operator_named_reads.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pairing_reads_imports.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pattern_budget.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_phase6_claims.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_php_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pillars_and_practice.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pmd_adapter.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pmd_audit_closures.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_policy_claims.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_pool_runs_by_config.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_population_floors.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_practice_nested_gates_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_promises.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_prompt_does_not_issue_rates_when_unscored.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_prompt_escalation_once.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_prompt_honesty.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_prompt_location_escalation_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_python_complexity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_python_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_read_boundary.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_recurrence.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_release_needs_an_empty_ledger.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_release_plan.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_release_plan_status.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_report_remedy_copy.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_root_grants.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_rubric_ignores_project_lint_config.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_ruby_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_run_comparison.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_runner.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_rust_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_sarif.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scan_history.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scan_scope.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scanner_unsafe_direction.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scanning.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_schema_fidelity.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scope_conformance.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_scoring_calibration.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_security_delegate_versions_agree.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_semantic_policy.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_setup_gate_completeness.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_setup_gate_independent_contract.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_setup_precondition.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_sonar_resolve.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_source_index.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_spotbugs_catalog.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_stdout_outputs.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_suite_isolation.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_swift_declarations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_tdd_structure.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_terminal_asks_the_same_questions.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_test_commands.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_test_execution_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_three_presentations.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_tool_resolution.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_tree_cannot_opt_the_host_in.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_tree_chosen_spawn.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_tree_reads_use_the_primitive.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_trends.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_type_fields_not_functions_class.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_unanchored_set_matches_corpus.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_unread_code.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_user_config_tier.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_verification_audit_closures.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_verified_grade.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_version_claim.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_wheel_contents.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_work_items_state_their_own_finding.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_work_order.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_work_order_binds_to_this_interpreter.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_work_order_items.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_work_order_selection.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_workflow_supply_chain.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_write_boundary.py +0 -0
- {maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_write_route_class.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: maintainability-agent
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.6
|
|
4
4
|
Summary: Maintainability gate and AI remediation prompt generator for CI.
|
|
5
5
|
Author: Marshall Guillory
|
|
6
6
|
License: MIT
|
|
@@ -46,7 +46,7 @@ Dynamic: license-file
|
|
|
46
46
|
**A deterministic, offline maintainability audit whose output is a _bounded
|
|
47
47
|
work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
|
|
48
48
|
says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
|
|
49
|
-
Version **3.7.
|
|
49
|
+
Version **3.7.6**.
|
|
50
50
|
|
|
51
51
|
**Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
|
|
52
52
|
COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
|
|
@@ -84,11 +84,11 @@ you what it could not measure.
|
|
|
84
84
|
installed alongside rather than as a dependency, so the two tools release
|
|
85
85
|
independently. Without it the report says the security pillar was not measured
|
|
86
86
|
and gives this command. Its scanners decide what it can grade — see
|
|
87
|
-
[machine setup](docs/machine-setup.md#
|
|
87
|
+
[machine setup](docs/machine-setup.md#3-toolchain) for which to install, and
|
|
88
88
|
don't add its `[mcp]` extra to this environment (it pins `mcp<2`).
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
pip install 'secure-code-agent>=0.12.
|
|
91
|
+
pip install 'secure-code-agent>=0.12.2'
|
|
92
92
|
brew install gitleaks osv-scanner semgrep checkov # its scanners; pip install bandit
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -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.7.
|
|
8
|
+
Version **3.7.6**.
|
|
9
9
|
|
|
10
10
|
**Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
|
|
11
11
|
COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
|
|
@@ -43,11 +43,11 @@ you what it could not measure.
|
|
|
43
43
|
installed alongside rather than as a dependency, so the two tools release
|
|
44
44
|
independently. Without it the report says the security pillar was not measured
|
|
45
45
|
and gives this command. Its scanners decide what it can grade — see
|
|
46
|
-
[machine setup](docs/machine-setup.md#
|
|
46
|
+
[machine setup](docs/machine-setup.md#3-toolchain) for which to install, and
|
|
47
47
|
don't add its `[mcp]` extra to this environment (it pins `mcp<2`).
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
pip install 'secure-code-agent>=0.12.
|
|
50
|
+
pip install 'secure-code-agent>=0.12.2'
|
|
51
51
|
brew install gitleaks osv-scanner semgrep checkov # its scanners; pip install bandit
|
|
52
52
|
```
|
|
53
53
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "maintainability-agent"
|
|
7
|
-
version = "3.7.
|
|
7
|
+
version = "3.7.6"
|
|
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.7.
|
|
3
|
+
Version: 3.7.6
|
|
4
4
|
Summary: Maintainability gate and AI remediation prompt generator for CI.
|
|
5
5
|
Author: Marshall Guillory
|
|
6
6
|
License: MIT
|
|
@@ -46,7 +46,7 @@ Dynamic: license-file
|
|
|
46
46
|
**A deterministic, offline maintainability audit whose output is a _bounded
|
|
47
47
|
work order_ for an AI coding agent** — a copy-paste prompt, per finding, that
|
|
48
48
|
says *fix exactly these and refactor nothing else*. Chat-primary; CLI for CI.
|
|
49
|
-
Version **3.7.
|
|
49
|
+
Version **3.7.6**.
|
|
50
50
|
|
|
51
51
|
**Languages parsed:** Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift,
|
|
52
52
|
COBOL, Fortran (free-form *and* fixed-form), and the JS/TS/HTML family — each
|
|
@@ -84,11 +84,11 @@ you what it could not measure.
|
|
|
84
84
|
installed alongside rather than as a dependency, so the two tools release
|
|
85
85
|
independently. Without it the report says the security pillar was not measured
|
|
86
86
|
and gives this command. Its scanners decide what it can grade — see
|
|
87
|
-
[machine setup](docs/machine-setup.md#
|
|
87
|
+
[machine setup](docs/machine-setup.md#3-toolchain) for which to install, and
|
|
88
88
|
don't add its `[mcp]` extra to this environment (it pins `mcp<2`).
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
pip install 'secure-code-agent>=0.12.
|
|
91
|
+
pip install 'secure-code-agent>=0.12.2'
|
|
92
92
|
brew install gitleaks osv-scanner semgrep checkov # its scanners; pip install bandit
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -224,7 +224,6 @@ tests/test_declaration_grading.py
|
|
|
224
224
|
tests/test_declaration_ranges.py
|
|
225
225
|
tests/test_declaration_source.py
|
|
226
226
|
tests/test_declarative_parsers.py
|
|
227
|
-
tests/test_declared_authorship.py
|
|
228
227
|
tests/test_declared_imports.py
|
|
229
228
|
tests/test_delegated_security_pillar.py
|
|
230
229
|
tests/test_demo_tree.py
|
|
@@ -294,6 +293,7 @@ tests/test_mcp_history.py
|
|
|
294
293
|
tests/test_mcp_server.py
|
|
295
294
|
tests/test_mcp_start_failure_names_what_is_installed.py
|
|
296
295
|
tests/test_migration_1_0.py
|
|
296
|
+
tests/test_mutation_recorded.py
|
|
297
297
|
tests/test_near_duplicates.py
|
|
298
298
|
tests/test_network_disclosure.py
|
|
299
299
|
tests/test_one_setup_across_surfaces_class.py
|
|
@@ -328,7 +328,6 @@ tests/test_release_needs_an_empty_ledger.py
|
|
|
328
328
|
tests/test_release_plan.py
|
|
329
329
|
tests/test_release_plan_status.py
|
|
330
330
|
tests/test_report_remedy_copy.py
|
|
331
|
-
tests/test_roles_recorded.py
|
|
332
331
|
tests/test_root_grants.py
|
|
333
332
|
tests/test_rubric_ignores_project_lint_config.py
|
|
334
333
|
tests/test_ruby_declarations.py
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_analysis.py
RENAMED
|
@@ -77,7 +77,7 @@ class ToolCoverage:
|
|
|
77
77
|
# True when the language inventory (not a probe, not a spawn)
|
|
78
78
|
# decided this tool had nothing to read — the selection-stage fact
|
|
79
79
|
# D15 requires to be visible as selection, not only as a coverage
|
|
80
|
-
# outcome (
|
|
80
|
+
# outcome (audit of `43c0d13`, H1).
|
|
81
81
|
inventory_filtered: bool = False
|
|
82
82
|
# The catalog languages this tool reads, in the catalog's vocabulary.
|
|
83
83
|
# Carried on the record because coverage is claimed per language: a
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_anchor.py
RENAMED
|
@@ -16,7 +16,7 @@ obsolete again at the next one.
|
|
|
16
16
|
What is *not* policy is silence about it where the grade is read. The
|
|
17
17
|
report carried `score.reference` and the note said the corpus spanned
|
|
18
18
|
"every language this scanner parses" — which was true when it was written
|
|
19
|
-
and false from 2.4.0 onward, for three releases.
|
|
19
|
+
and false from 2.4.0 onward, for three releases. An audit on
|
|
20
20
|
2026-09-04 named it as the second instance of a shape this project had
|
|
21
21
|
already shipped once: a limit disclosed only in JSON is disclosed nowhere
|
|
22
22
|
that matters.
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_backfill.py
RENAMED
|
@@ -62,7 +62,7 @@ def _git(root: Path, *args: str) -> str:
|
|
|
62
62
|
# tree instead -- and backfill's `worktree add` re-hashes
|
|
63
63
|
# content, which is exactly what runs a `clean` filter. `run_git`
|
|
64
64
|
# got this; this spawner, living outside `git_tools`, did not
|
|
65
|
-
# (
|
|
65
|
+
# (audit of `e88b429`; the D92 sweep only read `git_tools.py`).
|
|
66
66
|
["git", *READ_ONLY_GIT_CONFIG, *_attr_tree_config(root),
|
|
67
67
|
"-C", str(root), *args],
|
|
68
68
|
capture_output=True, text=True, check=False,
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_cognitive.py
RENAMED
|
@@ -216,7 +216,7 @@ def cobol_cognitive(lines: list[str]) -> int:
|
|
|
216
216
|
no `PROCEDURE DIVISION` — so re-masking blanked the whole thing and
|
|
217
217
|
every COBOL paragraph in production scored exactly 0, including deeply
|
|
218
218
|
nested ones. The souvenir test passed throughout because it called this
|
|
219
|
-
with a whole file. Found by
|
|
219
|
+
with a whole file. Found by an audit on 2026-09-04.
|
|
220
220
|
"""
|
|
221
221
|
masked = lines
|
|
222
222
|
score = 0
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_economics.py
RENAMED
|
@@ -172,7 +172,7 @@ def _affected_changes_per_year(report: dict[str, Any]) -> tuple[float, str]:
|
|
|
172
172
|
# Once per file, not once per row. A file with several work-order
|
|
173
173
|
# items -- a long function and dead code in the same module --
|
|
174
174
|
# has one churn history, and summing it per row multiplied that
|
|
175
|
-
# file's yearly changes by its finding count (
|
|
175
|
+
# file's yearly changes by its finding count (audit of `e88b429`).
|
|
176
176
|
touched = sum(churn.get(path, 0) for path in {item.get("path") or "" for item in items})
|
|
177
177
|
if touched:
|
|
178
178
|
return float(touched), (
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_first_run.py
RENAMED
|
@@ -44,7 +44,7 @@ def maybe_prompt_first_run(root: Path, explicit_config: str | None) -> None:
|
|
|
44
44
|
"chat-path twin"). The CLI had drifted to a depth/license-only subset
|
|
45
45
|
that never answered pool execution, so the mere existence of the file
|
|
46
46
|
it wrote defaulted the pool on and marked setup complete for a
|
|
47
|
-
decision nobody made (
|
|
47
|
+
decision nobody made (audit of `63ab820`). Asking `run_pool` and
|
|
48
48
|
`record_scan_history` here, and persisting through `apply_answers`,
|
|
49
49
|
makes a repository configured at a terminal identical to one
|
|
50
50
|
configured in chat.
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_html_view.py
RENAMED
|
@@ -143,7 +143,7 @@ def _comparable_tail(records: list[Any]) -> list[Any]:
|
|
|
143
143
|
The HTML skin walked every stored record instead, so a first-vs-last
|
|
144
144
|
estimate straddling a break read as "Improving across N scans" when
|
|
145
145
|
the two numbers were produced by different instruments and cannot be
|
|
146
|
-
compared at all (
|
|
146
|
+
compared at all (audit of `e88b429`). Restricting to the last segment
|
|
147
147
|
puts the HTML skin on the same comparability rule as the others.
|
|
148
148
|
"""
|
|
149
149
|
from ._scan_history import segments
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_in_loop.py
RENAMED
|
@@ -174,7 +174,7 @@ def _breaches_for(metric: Any, thresholds: dict[str, int]) -> list[dict[str, Any
|
|
|
174
174
|
version subtracted `max_function_lines` from the line count whatever
|
|
175
175
|
had failed. A short, complex function then rendered as "-71 over" —
|
|
176
176
|
a negative overage of a budget it was comfortably inside, printed for
|
|
177
|
-
a breach that was real (
|
|
177
|
+
a breach that was real (found by audit). A figure has to be about the
|
|
178
178
|
thing that failed or it is worse than no figure.
|
|
179
179
|
"""
|
|
180
180
|
lines_limit, _ = _budget_for(metric.kind, thresholds)
|
|
@@ -102,7 +102,7 @@ def check_json(result: dict[str, Any]) -> str:
|
|
|
102
102
|
# Read from the result, never written as a constant. A
|
|
103
103
|
# literal `False` here says "not scored" whatever the check
|
|
104
104
|
# actually did, so the field would keep reassuring a caller
|
|
105
|
-
# through the exact bug it exists to disclose (
|
|
105
|
+
# through the exact bug it exists to disclose (found by audit).
|
|
106
106
|
"scored": result["scored"],
|
|
107
107
|
"scored_reason": result["scored_reason"],
|
|
108
108
|
},
|
|
@@ -93,7 +93,7 @@ def render_history_markdown(report: dict[str, Any]) -> list[str]:
|
|
|
93
93
|
# complete" with nothing about the window at all, while the
|
|
94
94
|
# scoring layer had already marked every history rate
|
|
95
95
|
# not-applicable. P8: the report states what examined each value
|
|
96
|
-
# (D56, reopened
|
|
96
|
+
# (D56, reopened).
|
|
97
97
|
return [
|
|
98
98
|
"### History",
|
|
99
99
|
"",
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_audit.py
RENAMED
|
@@ -136,7 +136,7 @@ def authorize_config(config_path: str | None, root: Path) -> str | None:
|
|
|
136
136
|
So the two doors onto one rule disagreed: `repository_path` refused
|
|
137
137
|
`link/…` and this returned the target. The baseline seam below
|
|
138
138
|
already carries a comment recording this same escape being found and
|
|
139
|
-
closed *there*; this door was never revisited (
|
|
139
|
+
closed *there*; this door was never revisited (audit of `673e667`).
|
|
140
140
|
"""
|
|
141
141
|
if config_path is None:
|
|
142
142
|
return None
|
|
@@ -375,7 +375,7 @@ def _baseline_workflow(report: dict[str, Any], root: Path,
|
|
|
375
375
|
# resolves and this then bounded the resolved path, so an inward
|
|
376
376
|
# `.maintainability -> src` symlink kept the target inside the root and
|
|
377
377
|
# the write landed in source -- the D34 escape history refused and
|
|
378
|
-
# baseline did not (
|
|
378
|
+
# baseline did not (audit of `e88b429`). `repository_path` refuses a
|
|
379
379
|
# symlink anywhere on the route and keeps the same boundary check.
|
|
380
380
|
target = repository_path(root, baseline_path, str(DEFAULT_BASELINE_PATH))
|
|
381
381
|
if write:
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_mcp_setup.py
RENAMED
|
@@ -341,9 +341,8 @@ def setup_schema(root: Path | None = None):
|
|
|
341
341
|
"""The elicitation model for whichever stage this repository is in.
|
|
342
342
|
|
|
343
343
|
Two stages, because the three labor rates are only wanted by
|
|
344
|
-
someone who said yes to the gate. Asking them of everyone
|
|
345
|
-
|
|
346
|
-
answer to the gate is "skip".
|
|
344
|
+
someone who said yes to the gate. Asking them of everyone was broken
|
|
345
|
+
logic: the default answer to the gate is "skip".
|
|
347
346
|
"""
|
|
348
347
|
if root is not None and economics_bounds_pending(root):
|
|
349
348
|
return _schema_for(economics_bound_questions())
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_pressures.py
RENAMED
|
@@ -99,7 +99,7 @@ def _banded(banded_state: object, population: float | None,
|
|
|
99
99
|
# refinement that can only *add* pressure over the count rate (a
|
|
100
100
|
# warn at complexity 12 is worse than a plain warn), so falling
|
|
101
101
|
# back to the count rate when the band is withheld only improved
|
|
102
|
-
# the score -- the P3 hole
|
|
102
|
+
# the score -- the P3 hole the `e88b429` audit named. Dropping the
|
|
103
103
|
# dimension is no better: averaging over the rest can still improve
|
|
104
104
|
# the estimate when the withheld dimension was worse than its
|
|
105
105
|
# peers. `SEVERE` is the only value that cannot improve any
|
|
@@ -437,7 +437,7 @@ def prompt_focus_sections(report: dict[str, Any]) -> list[str]:
|
|
|
437
437
|
# Risk findings honour the same escalation as the hotspots and large
|
|
438
438
|
# files above: a design-review candidate is announced as withheld in
|
|
439
439
|
# the escalation note, so listing it here too presented it twice and
|
|
440
|
-
# contradicted that note (P5,
|
|
440
|
+
# contradicted that note (P5, audit of `e88b429`). The rule was
|
|
441
441
|
# enforced on every focus category except this one.
|
|
442
442
|
risk_ids = risk_identities(report)
|
|
443
443
|
risks = [
|
|
@@ -141,7 +141,7 @@ def _is_bare_signature(masked: list[str], start: int, end: int) -> bool:
|
|
|
141
141
|
"""A declaration that terminates without opening a body or an arrow
|
|
142
142
|
value: `declare function f(): void;`, a TS overload signature, an
|
|
143
143
|
abstract method. No body to measure, so counting one mints a member
|
|
144
|
-
with no code behind it (
|
|
144
|
+
with no code behind it (audit of `63ab820`). A real function/method
|
|
145
145
|
opens a block `{`; an expression member carries `=>`; neither, closed
|
|
146
146
|
on `;`, is signature only. `f() {}` and `g = () => x;` still count.
|
|
147
147
|
"""
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_ranges_js.py
RENAMED
|
@@ -75,8 +75,8 @@ _PROPERTY_RE = re.compile(
|
|
|
75
75
|
# field of type T; a value would need `name = ...`, so `name: (...) => X`
|
|
76
76
|
# can only be a function-type annotation, with X a return type and no
|
|
77
77
|
# body. D93 skipped these inside `interface`/`type` blocks but not inside
|
|
78
|
-
# a class, so class fields still minted a declaration population (
|
|
79
|
-
# e88b429
|
|
78
|
+
# a class, so class fields still minted a declaration population (audit
|
|
79
|
+
# of `e88b429`). The `;` terminator and the absence of a block `{` after
|
|
80
80
|
# the arrow are what tell an annotation from a real arrow-valued property
|
|
81
81
|
# (`onSave: (a) => { ... }`), which keeps its body and stays counted.
|
|
82
82
|
_FUNCTION_TYPE_ANNOTATION_RE = re.compile(
|
|
@@ -142,7 +142,7 @@ def _is_method(tail: str, match: re.Match[str]) -> bool:
|
|
|
142
142
|
|
|
143
143
|
When the paren closes on the line, a real method opens a body brace
|
|
144
144
|
after it -- run-on (`f(x) {`) or single-line (`f(x) { return x }`). A
|
|
145
|
-
trailing-`{` test missed the single-line one (
|
|
145
|
+
trailing-`{` test missed the single-line one (audit of `63ab820`); a
|
|
146
146
|
call (`foo(x);`) or a signature (`foo(): T;`) has no brace and stays out.
|
|
147
147
|
"""
|
|
148
148
|
trimmed = tail.rstrip()
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_runner.py
RENAMED
|
@@ -218,9 +218,9 @@ def analyzer_env() -> dict[str, str]:
|
|
|
218
218
|
# `registry=https://evil/` silently redirects that fetch. Forcing
|
|
219
219
|
# the registry through the environment -- which npm ranks above a
|
|
220
220
|
# project `.npmrc` -- pins it to the value the user configured for
|
|
221
|
-
# themselves, read below where the tree cannot vote.
|
|
222
|
-
#
|
|
223
|
-
#
|
|
221
|
+
# themselves, read below where the tree cannot vote. Decided
|
|
222
|
+
# 2026-08-29: let the user pull tools, do not let the tree pick the
|
|
223
|
+
# source.
|
|
224
224
|
env["npm_config_registry"] = registry
|
|
225
225
|
return env
|
|
226
226
|
|
|
@@ -301,7 +301,7 @@ def _probe(slug: str, argv: tuple[str, ...]) -> ToolResult:
|
|
|
301
301
|
#: a pin that changes with a tool's colour choices, not its version. The
|
|
302
302
|
#: determinism suite stripped these before comparing, which hid that the
|
|
303
303
|
#: stored value carried them; stripping at capture makes the recorded pin
|
|
304
|
-
#: the version and nothing else (
|
|
304
|
+
#: the version and nothing else (audit of `e88b429`).
|
|
305
305
|
_ANSI_ESCAPE = re.compile(r"\x1b\[[0-?]*[ -/]*[@-~]")
|
|
306
306
|
|
|
307
307
|
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_safe_write.py
RENAMED
|
@@ -102,7 +102,7 @@ def write_artifact(
|
|
|
102
102
|
tree. So when the named path falls within the grant the write goes
|
|
103
103
|
through ``write_bounded`` and inherits the lexical route refusal --
|
|
104
104
|
``.maintainability -> src`` on both ``/var`` and ``/private/var``
|
|
105
|
-
spellings of the same macOS path (
|
|
105
|
+
spellings of the same macOS path (audit of `63ab820`; the earlier
|
|
106
106
|
``write_bounded(target.parent, target)`` bound the check to the
|
|
107
107
|
symlink itself and checked nothing). A path outside the grant is on
|
|
108
108
|
ground the audited tree does not control; only the final component
|
|
@@ -117,7 +117,7 @@ def write_artifact(
|
|
|
117
117
|
grant_real = os.path.realpath(grant_root)
|
|
118
118
|
# Membership is decided on the *real* path so a ``/var`` spelling of
|
|
119
119
|
# the target and a ``/private/var`` spelling of the grant name the
|
|
120
|
-
# same tree (
|
|
120
|
+
# same tree (audit of `63ab820`). In-tree, the write is bound to the
|
|
121
121
|
# grant and inherits its lexical route refusal (the ``.maintainability
|
|
122
122
|
# -> src`` link the real path erased); out-of-tree, it is bound to the
|
|
123
123
|
# operator's own directory -- ground the audited tree cannot plant a
|
|
@@ -213,7 +213,7 @@ def _stage_and_replace(target: Path, body: str) -> Path:
|
|
|
213
213
|
The staging name is unique per call. A fixed `.{name}.incoming` was
|
|
214
214
|
guessable, and the audited tree could plant that exact file: `O_EXCL`
|
|
215
215
|
then raised `FileExistsError` and took the write primitive down with a
|
|
216
|
-
crash the tree chose the timing of (
|
|
216
|
+
crash the tree chose the timing of (audit of `e88b429`). `mkstemp`
|
|
217
217
|
creates an exclusive file under a random name in the same directory,
|
|
218
218
|
so nothing the tree pre-places can collide with it, and it still lands
|
|
219
219
|
on the same filesystem for an atomic `os.replace`.
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
tool wrote `security-pillar.json` and this one read it if it happened to be
|
|
6
6
|
there. Nothing ran it, so every audit that did not follow a manual or CI run
|
|
7
7
|
of the other tool reported the pillar as unmeasured — including every audit
|
|
8
|
-
through the chat door, which cannot run it at all. Decided 2026-09-13
|
|
9
|
-
|
|
8
|
+
through the chat door, which cannot run it at all. Decided 2026-09-13: the
|
|
9
|
+
pillar is complete, so the audit runs it.
|
|
10
10
|
|
|
11
11
|
**What the child writes.** Every report `secure-code-agent` can produce is
|
|
12
12
|
redirected into a temporary directory this process owns: the Markdown and
|
|
@@ -55,9 +55,15 @@ from ._runner import Invocation, Outcome, run
|
|
|
55
55
|
#: whichever release is installed, when it falls in this range, and says so
|
|
56
56
|
#: when it does not. The ceiling is the next major: within 0.x the pillar
|
|
57
57
|
#: document is versioned by its own `schema_version`, which the reader checks.
|
|
58
|
-
|
|
58
|
+
#:
|
|
59
|
+
#: **The floor is 0.12.2, not the first release with this contract (D182).**
|
|
60
|
+
#: 0.12.1 writes the same schema v2 document, and matches `.scignore.yaml`
|
|
61
|
+
#: `paths:` globs against absolute finding paths. This audit always hands it an
|
|
62
|
+
#: absolute root, so under 0.12.1 every reviewed `paths:` suppression is ignored
|
|
63
|
+
#: and its finding counts as live in the pillar every skin shows (D179).
|
|
64
|
+
SUPPORTED_FLOOR = (0, 12, 2)
|
|
59
65
|
SUPPORTED_CEILING = (1,)
|
|
60
|
-
REQUIREMENT = "secure-code-agent>=0.12.
|
|
66
|
+
REQUIREMENT = "secure-code-agent>=0.12.2,<1"
|
|
61
67
|
|
|
62
68
|
#: How long the child may run before the pillar is reported as unmeasured.
|
|
63
69
|
DEFAULT_TIMEOUT_SECONDS = 300
|
|
@@ -86,7 +86,7 @@ def local_tsc_analysis(root: Path) -> dict[str, Any] | None:
|
|
|
86
86
|
*unknown*, not clean: a config error (FAILED, exit 3+) or a findings
|
|
87
87
|
exit with an empty body (NOT_WORKING) both leave `stdout` empty, and
|
|
88
88
|
reading that as a violation-free type check is the absence-as-a-pass
|
|
89
|
-
the class ADR 001 forbids (
|
|
89
|
+
the class ADR 001 forbids (audit of `63ab820`). Only a usable run
|
|
90
90
|
counts; a RAN with no output is the real "compiled, no type errors".
|
|
91
91
|
CLI output carries no boundary facts, so `typed_boundaries` is empty.
|
|
92
92
|
"""
|
|
@@ -91,7 +91,7 @@ DEFAULT_V1_REQUIRED: frozenset[str] = frozenset({
|
|
|
91
91
|
# The 3.2 band pressures. Score-bearing: the band matrix prices a
|
|
92
92
|
# complexity-12 warn above a plain warn, so it can only add pressure
|
|
93
93
|
# over the count rate. Withholding one therefore only improves the
|
|
94
|
-
# score -- the P3 hole
|
|
94
|
+
# score -- the P3 hole the `e88b429` audit named -- so an absent band
|
|
95
95
|
# withholds the grade rather than quietly falling back to the coarser
|
|
96
96
|
# count rate. `_pressures._banded` no longer prices an Unknown band at
|
|
97
97
|
# the count rate for the same reason.
|
|
@@ -107,7 +107,7 @@ DEFAULT_V1_REQUIRED: frozenset[str] = frozenset({
|
|
|
107
107
|
#
|
|
108
108
|
# The four 3.2 band pressures used to live here, on the reasoning that a
|
|
109
109
|
# missing band predated the wiring and the count-rate fallback was a
|
|
110
|
-
# coarser-but-verifiable number.
|
|
110
|
+
# coarser-but-verifiable number. The `e88b429` audit showed that was a
|
|
111
111
|
# P3 hole: the band can only add pressure over the count rate, so
|
|
112
112
|
# withholding it only ever improved the score, and this list kept the
|
|
113
113
|
# concealment sweep from ever noticing. They are now required (above).
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/_work_order.py
RENAMED
|
@@ -251,7 +251,7 @@ def _items_from_idioms(report: dict[str, Any]) -> list[dict[str, Any]]:
|
|
|
251
251
|
|
|
252
252
|
|
|
253
253
|
def _locate(finding: dict[str, Any]) -> tuple[str | None, int | None]:
|
|
254
|
-
"""Path/line; a duplicate block carries only `locations`, which the old path/line read dropped (
|
|
254
|
+
"""Path/line; a duplicate block carries only `locations`, which the old path/line read dropped (audit of `e88b429`)."""
|
|
255
255
|
path = finding.get("path") or finding.get("first_path")
|
|
256
256
|
line = finding.get("line") or finding.get("first_line") or finding.get("start_line")
|
|
257
257
|
if path is None and (locs := finding.get("locations")):
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/baseline.py
RENAMED
|
@@ -133,7 +133,7 @@ def write_baseline(path: str, report: dict[str, Any]) -> None:
|
|
|
133
133
|
# baseline's own parent directory: `write_bounded(target.parent, ...)`
|
|
134
134
|
# bound the symlink check to the symlink itself and so checked
|
|
135
135
|
# nothing, which is how `.maintainability -> src` still redirected the
|
|
136
|
-
# baseline into source (
|
|
136
|
+
# baseline into source (audit of `63ab820`). `write_artifact` keeps
|
|
137
137
|
# the predating contract that a baseline may live outside the tree —
|
|
138
138
|
# a path outside the grant is written on the operator's own ground —
|
|
139
139
|
# while a path inside the grant inherits the lexical route refusal,
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/cli.py
RENAMED
|
@@ -112,7 +112,7 @@ def write_outputs(args: argparse.Namespace, report: dict, rendered: str) -> None
|
|
|
112
112
|
# Every rendered output the operator asks for is a product-artifact
|
|
113
113
|
# write: a raw `Path(name).write_text` followed the tree's symlink
|
|
114
114
|
# into source, so each goes through `write_artifact`, bound to the
|
|
115
|
-
# repository the report was taken in (
|
|
115
|
+
# repository the report was taken in (audit of `63ab820`).
|
|
116
116
|
root = Path(report["root"])
|
|
117
117
|
if args.output:
|
|
118
118
|
_emit(root, args.output, rendered + "\n")
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/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.7.
|
|
23
|
+
VERSION = "3.7.6"
|
|
24
24
|
|
|
25
25
|
PROJECT_URL = "https://github.com/marshallguillory86/maintainability-agent"
|
|
26
26
|
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/src/maintainability_audit/duplication.py
RENAMED
|
@@ -58,7 +58,7 @@ def duplicate_blocks(
|
|
|
58
58
|
# The index into this filtered list is not a source line: reporting
|
|
59
59
|
# `idx + 1` pointed a reader at the Nth non-comment line, not line N
|
|
60
60
|
# of the file, so every duplicate location was off by however many
|
|
61
|
-
# comments and blanks preceded it (
|
|
61
|
+
# comments and blanks preceded it (audit of `e88b429`).
|
|
62
62
|
useful = [
|
|
63
63
|
(number, line)
|
|
64
64
|
for number, line in enumerate(lines, start=1)
|
|
@@ -142,7 +142,7 @@ def write_instruction_pack(
|
|
|
142
142
|
# Each instruction file is a product-artifact write: `output_dir`
|
|
143
143
|
# comes from a person (`--instructions-output-dir`), so the write is
|
|
144
144
|
# bound to that directory and refuses a symlinked route the audited
|
|
145
|
-
# tree could plant beneath it (
|
|
145
|
+
# tree could plant beneath it (audit of `63ab820`).
|
|
146
146
|
from ._safe_write import write_artifact
|
|
147
147
|
|
|
148
148
|
written: list[str] = []
|
{maintainability_agent-3.7.4 → maintainability_agent-3.7.6}/tests/test_artifact_write_route_class.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Class A (
|
|
1
|
+
"""Class A (audit of `63ab820`): every product-artifact write refuses a route the
|
|
2
2
|
audited tree could redirect, on both ``/var`` and ``/private/var`` spellings,
|
|
3
3
|
and refuses to truncate a file that is not one of ours.
|
|
4
4
|
|