From 95edca3e1ce4b38ad00d3d10a29d68dc8c2757a4 Mon Sep 17 00:00:00 2001 From: Tim Stranske Date: Mon, 24 Aug 2026 19:06:29 -0500 Subject: [PATCH 1/4] fix(ci): let coverage guard use payload-only Gate runs --- .github/workflows/maint-coverage-guard.yml | 12 ++++---- tests/test_coverage_guard_config.py | 35 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 tests/test_coverage_guard_config.py diff --git a/.github/workflows/maint-coverage-guard.yml b/.github/workflows/maint-coverage-guard.yml index 5e42e15..224c1d6 100644 --- a/.github/workflows/maint-coverage-guard.yml +++ b/.github/workflows/maint-coverage-guard.yml @@ -181,11 +181,10 @@ jobs: ['success', 'neutral'].includes(run.conclusion || ''), ); const runsToProbe = successfulRuns.slice(0, 10); - const requiredCoverageArtifactNames = new Set([ - 'gate-coverage-trend', - 'gate-coverage-trend-history', - 'gate-coverage', - ]); + // The payload is the only input every successful Gate run produces. Trend artifacts + // are best-effort enrichment: their download steps continue on error and the guard + // already omits their CLI arguments when they are absent. + const requiredCoverageArtifactNames = new Set(['gate-coverage']); let candidate = null; for (const run of runsToProbe) { let artifacts = []; @@ -240,8 +239,7 @@ jobs: core.warning( [ 'Unable to locate a recent successful Gate workflow run with required', - 'coverage artifacts: gate-coverage-trend, gate-coverage-trend-history,', - 'gate-coverage.', + 'coverage payload artifact: gate-coverage.', ].join(' '), ); core.setOutput('run_id', ''); diff --git a/tests/test_coverage_guard_config.py b/tests/test_coverage_guard_config.py new file mode 100644 index 0000000..153a7be --- /dev/null +++ b/tests/test_coverage_guard_config.py @@ -0,0 +1,35 @@ +"""Regression checks for the Gate-to-coverage-guard artifact contract.""" + +from __future__ import annotations + +import re + +import paths + + +WORKFLOW = paths.REPO_ROOT / ".github" / "workflows" / "maint-coverage-guard.yml" + + +def test_coverage_guard_requires_only_the_gate_payload(): + """Optional trend downloads must not disqualify an otherwise usable Gate payload.""" + workflow = WORKFLOW.read_text(encoding="utf-8") + match = re.search( + r"const requiredCoverageArtifactNames = new Set\((.*?)\);", + workflow, + re.S, + ) + assert match, "coverage-guard artifact discovery set is missing" + + required = set(re.findall(r"'([^']+)'", match.group(1))) + assert required == {"gate-coverage"}, ( + "the coverage payload is mandatory; trend/history artifacts are best-effort inputs " + "handled by the guard runner when present" + ) + + for step_name, artifact in ( + ("Download coverage trend artifact", "gate-coverage-trend"), + ("Download coverage trend history artifact", "gate-coverage-trend-history"), + ): + block = workflow.split(f"- name: {step_name}", 1)[1].split("\n - name:", 1)[0] + assert f"name: {artifact}" in block, f"{step_name} no longer requests {artifact}" + assert "continue-on-error: true" in block, f"{artifact} must remain optional" From e24bae78fb540254807502c945b188a4c1d41adb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 00:14:22 +0000 Subject: [PATCH 2/4] chore(codex-autofix): apply updates (PR #115) --- src/UNKNOWN.egg-info/PKG-INFO | 3 + src/UNKNOWN.egg-info/SOURCES.txt | 140 ++++++++++++++++++++++ src/UNKNOWN.egg-info/dependency_links.txt | 1 + src/UNKNOWN.egg-info/top_level.txt | 99 +++++++++++++++ 4 files changed, 243 insertions(+) create mode 100644 src/UNKNOWN.egg-info/PKG-INFO create mode 100644 src/UNKNOWN.egg-info/SOURCES.txt create mode 100644 src/UNKNOWN.egg-info/dependency_links.txt create mode 100644 src/UNKNOWN.egg-info/top_level.txt diff --git a/src/UNKNOWN.egg-info/PKG-INFO b/src/UNKNOWN.egg-info/PKG-INFO new file mode 100644 index 0000000..56e188d --- /dev/null +++ b/src/UNKNOWN.egg-info/PKG-INFO @@ -0,0 +1,3 @@ +Metadata-Version: 2.4 +Name: UNKNOWN +Version: 0.0.0 diff --git a/src/UNKNOWN.egg-info/SOURCES.txt b/src/UNKNOWN.egg-info/SOURCES.txt new file mode 100644 index 0000000..5311489 --- /dev/null +++ b/src/UNKNOWN.egg-info/SOURCES.txt @@ -0,0 +1,140 @@ +README.md +pyproject.toml +src/adapters.py +src/adversarial.py +src/agent_auth_check.py +src/backlog.py +src/cadence_registry.py +src/capabilities.py +src/capability_activation_audit.py +src/capability_admission.py +src/capability_advisor.py +src/capability_compiler.py +src/capability_effectiveness.py +src/capability_firing_monitor.py +src/capability_ir.py +src/capability_lifecycle.py +src/capability_matcher_proposals.py +src/capability_opportunity.py +src/capability_outcome_bridge.py +src/capability_propensity.py +src/capability_recurrence_check.py +src/capability_targets.py +src/capacity.py +src/ccusage_reconcile.py +src/claims.py +src/codemod_lane.py +src/completion_event_adapter.py +src/consumer_sync_artifact_ingest.py +src/consumer_sync_shadow.py +src/cross_repo_lane.py +src/dispatcher.py +src/dry_seam_audit.py +src/durability_sweep.py +src/env_prereq.py +src/epic_lane.py +src/evidence_acquisition.py +src/evidence_schema.py +src/execution_profiles.py +src/exp_abcd.py +src/experiment_recovery.py +src/exploration_backfill.py +src/exploration_collection.py +src/exploration_evidence_plan.py +src/exploration_review.py +src/feature_scan.py +src/features.py +src/feedback.py +src/frontend_verify.py +src/gh_capacity.py +src/human_calibration.py +src/improvement_log.py +src/issue_quality.py +src/issue_readiness.py +src/judge_reliability.py +src/keepalive_evidence.py +src/keepalive_outcomes.py +src/keepalive_shadow.py +src/keepalive_supervisor.py +src/langsmith_direct.py +src/langsmith_fetch.py +src/langsmith_pull.py +src/ledger_reconcile.py +src/local_verify.py +src/mcp_server.py +src/merge_guard.py +src/model_profile_trial.py +src/model_profile_trial_bridge.py +src/objective_anchor.py +src/observability_dashboard.py +src/outcomes.py +src/partitioned_review.py +src/paths.py +src/pattern_miner.py +src/periodic_report.py +src/provision.py +src/range_lane_rollout.py +src/redirect_apply.py +src/redirect_plan.py +src/redirect_policy.py +src/redirect_shadow.py +src/redirect_sweep.py +src/relearn_report.py +src/repo_knowledge.py +src/research_scheduler.py +src/research_subjects.py +src/roles.py +src/router.py +src/runner_effect_bridge.py +src/runtime_ac.py +src/runtime_ac_flow_monitor.py +src/runtime_ac_gate.py +src/runtime_ac_panel.py +src/strategy_experiment.py +src/switch_review.py +src/synthesis_promotion.py +src/testgen_gate.py +src/testgen_lane.py +src/tick.py +src/ux_review.py +src/verify.py +src/watch.py +src/UNKNOWN.egg-info/PKG-INFO +src/UNKNOWN.egg-info/SOURCES.txt +src/UNKNOWN.egg-info/dependency_links.txt +src/UNKNOWN.egg-info/top_level.txt +tests/test_capabilities.py +tests/test_capability_admission.py +tests/test_capability_causal_core.py +tests/test_capability_epic.py +tests/test_capability_lifecycle_e2e.py +tests/test_capability_set_coverage.py +tests/test_capacity_profiles.py +tests/test_checks_reported.py +tests/test_ci_gate_config.py +tests/test_completion_events.py +tests/test_consumer_sync_artifact_ingest.py +tests/test_consumer_sync_shadow.py +tests/test_coverage_guard_config.py +tests/test_evidence_contract_compiler.py +tests/test_experiment_arm_identity.py +tests/test_feedback_model_provenance.py +tests/test_improvement_log.py +tests/test_model_profile_trial.py +tests/test_model_profile_trial_bridge.py +tests/test_model_tier_resolution.py +tests/test_observability_activation.py +tests/test_partitioned_review.py +tests/test_pattern_miner.py +tests/test_playbook_compiler.py +tests/test_repo_artifact_hygiene.py +tests/test_research_control.py +tests/test_role_compiler.py +tests/test_roles_lineage.py +tests/test_runner_effect_bridge.py +tests/test_runtime_ac_flow_monitor.py +tests/test_skill_compiler.py +tests/test_synthesis_promotion.py +tests/test_ux_review.py +tests/test_verify_coverage_mode.py +tests/test_workflow_compiler.py \ No newline at end of file diff --git a/src/UNKNOWN.egg-info/dependency_links.txt b/src/UNKNOWN.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/UNKNOWN.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/UNKNOWN.egg-info/top_level.txt b/src/UNKNOWN.egg-info/top_level.txt new file mode 100644 index 0000000..42bbbc5 --- /dev/null +++ b/src/UNKNOWN.egg-info/top_level.txt @@ -0,0 +1,99 @@ +adapters +adversarial +agent_auth_check +backlog +cadence_registry +capabilities +capability_activation_audit +capability_admission +capability_advisor +capability_compiler +capability_effectiveness +capability_firing_monitor +capability_ir +capability_lifecycle +capability_matcher_proposals +capability_opportunity +capability_outcome_bridge +capability_propensity +capability_recurrence_check +capability_targets +capacity +ccusage_reconcile +claims +codemod_lane +completion_event_adapter +consumer_sync_artifact_ingest +consumer_sync_shadow +cross_repo_lane +dispatcher +dry_seam_audit +durability_sweep +env_prereq +epic_lane +evidence_acquisition +evidence_schema +execution_profiles +exp_abcd +experiment_recovery +exploration_backfill +exploration_collection +exploration_evidence_plan +exploration_review +feature_scan +features +feedback +frontend_verify +gh_capacity +human_calibration +improvement_log +issue_quality +issue_readiness +judge_reliability +keepalive_evidence +keepalive_outcomes +keepalive_shadow +keepalive_supervisor +langsmith_direct +langsmith_fetch +langsmith_pull +ledger_reconcile +local_verify +mcp_server +merge_guard +model_profile_trial +model_profile_trial_bridge +objective_anchor +observability_dashboard +outcomes +partitioned_review +paths +pattern_miner +periodic_report +provision +range_lane_rollout +redirect_apply +redirect_plan +redirect_policy +redirect_shadow +redirect_sweep +relearn_report +repo_knowledge +research_scheduler +research_subjects +roles +router +runner_effect_bridge +runtime_ac +runtime_ac_flow_monitor +runtime_ac_gate +runtime_ac_panel +strategy_experiment +switch_review +synthesis_promotion +testgen_gate +testgen_lane +tick +ux_review +verify +watch From 5ef8bafdf799367f744f6d95ea2e405031f6874e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Aug 2026 00:22:54 +0000 Subject: [PATCH 3/4] chore(autofix): formatting/lint --- tests/test_coverage_guard_config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_coverage_guard_config.py b/tests/test_coverage_guard_config.py index 153a7be..e435d34 100644 --- a/tests/test_coverage_guard_config.py +++ b/tests/test_coverage_guard_config.py @@ -6,7 +6,6 @@ import paths - WORKFLOW = paths.REPO_ROOT / ".github" / "workflows" / "maint-coverage-guard.yml" From 9e729dda6bfc43aeb629c9c9f7b8a322957313a7 Mon Sep 17 00:00:00 2001 From: Tim Stranske Date: Mon, 24 Aug 2026 19:26:38 -0500 Subject: [PATCH 4/4] fix(hygiene): ignore generated package metadata --- .gitignore | 1 + src/UNKNOWN.egg-info/PKG-INFO | 3 - src/UNKNOWN.egg-info/SOURCES.txt | 140 ---------------------- src/UNKNOWN.egg-info/dependency_links.txt | 1 - src/UNKNOWN.egg-info/top_level.txt | 99 --------------- tests/test_repo_artifact_hygiene.py | 13 ++ 6 files changed, 14 insertions(+), 243 deletions(-) delete mode 100644 src/UNKNOWN.egg-info/PKG-INFO delete mode 100644 src/UNKNOWN.egg-info/SOURCES.txt delete mode 100644 src/UNKNOWN.egg-info/dependency_links.txt delete mode 100644 src/UNKNOWN.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index 718dbac..dabc0a6 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,7 @@ Audits/ # --- python / tooling noise --- __pycache__/ *.py[cod] +*.egg-info/ .venv/ venv/ .pytest_cache/ diff --git a/src/UNKNOWN.egg-info/PKG-INFO b/src/UNKNOWN.egg-info/PKG-INFO deleted file mode 100644 index 56e188d..0000000 --- a/src/UNKNOWN.egg-info/PKG-INFO +++ /dev/null @@ -1,3 +0,0 @@ -Metadata-Version: 2.4 -Name: UNKNOWN -Version: 0.0.0 diff --git a/src/UNKNOWN.egg-info/SOURCES.txt b/src/UNKNOWN.egg-info/SOURCES.txt deleted file mode 100644 index 5311489..0000000 --- a/src/UNKNOWN.egg-info/SOURCES.txt +++ /dev/null @@ -1,140 +0,0 @@ -README.md -pyproject.toml -src/adapters.py -src/adversarial.py -src/agent_auth_check.py -src/backlog.py -src/cadence_registry.py -src/capabilities.py -src/capability_activation_audit.py -src/capability_admission.py -src/capability_advisor.py -src/capability_compiler.py -src/capability_effectiveness.py -src/capability_firing_monitor.py -src/capability_ir.py -src/capability_lifecycle.py -src/capability_matcher_proposals.py -src/capability_opportunity.py -src/capability_outcome_bridge.py -src/capability_propensity.py -src/capability_recurrence_check.py -src/capability_targets.py -src/capacity.py -src/ccusage_reconcile.py -src/claims.py -src/codemod_lane.py -src/completion_event_adapter.py -src/consumer_sync_artifact_ingest.py -src/consumer_sync_shadow.py -src/cross_repo_lane.py -src/dispatcher.py -src/dry_seam_audit.py -src/durability_sweep.py -src/env_prereq.py -src/epic_lane.py -src/evidence_acquisition.py -src/evidence_schema.py -src/execution_profiles.py -src/exp_abcd.py -src/experiment_recovery.py -src/exploration_backfill.py -src/exploration_collection.py -src/exploration_evidence_plan.py -src/exploration_review.py -src/feature_scan.py -src/features.py -src/feedback.py -src/frontend_verify.py -src/gh_capacity.py -src/human_calibration.py -src/improvement_log.py -src/issue_quality.py -src/issue_readiness.py -src/judge_reliability.py -src/keepalive_evidence.py -src/keepalive_outcomes.py -src/keepalive_shadow.py -src/keepalive_supervisor.py -src/langsmith_direct.py -src/langsmith_fetch.py -src/langsmith_pull.py -src/ledger_reconcile.py -src/local_verify.py -src/mcp_server.py -src/merge_guard.py -src/model_profile_trial.py -src/model_profile_trial_bridge.py -src/objective_anchor.py -src/observability_dashboard.py -src/outcomes.py -src/partitioned_review.py -src/paths.py -src/pattern_miner.py -src/periodic_report.py -src/provision.py -src/range_lane_rollout.py -src/redirect_apply.py -src/redirect_plan.py -src/redirect_policy.py -src/redirect_shadow.py -src/redirect_sweep.py -src/relearn_report.py -src/repo_knowledge.py -src/research_scheduler.py -src/research_subjects.py -src/roles.py -src/router.py -src/runner_effect_bridge.py -src/runtime_ac.py -src/runtime_ac_flow_monitor.py -src/runtime_ac_gate.py -src/runtime_ac_panel.py -src/strategy_experiment.py -src/switch_review.py -src/synthesis_promotion.py -src/testgen_gate.py -src/testgen_lane.py -src/tick.py -src/ux_review.py -src/verify.py -src/watch.py -src/UNKNOWN.egg-info/PKG-INFO -src/UNKNOWN.egg-info/SOURCES.txt -src/UNKNOWN.egg-info/dependency_links.txt -src/UNKNOWN.egg-info/top_level.txt -tests/test_capabilities.py -tests/test_capability_admission.py -tests/test_capability_causal_core.py -tests/test_capability_epic.py -tests/test_capability_lifecycle_e2e.py -tests/test_capability_set_coverage.py -tests/test_capacity_profiles.py -tests/test_checks_reported.py -tests/test_ci_gate_config.py -tests/test_completion_events.py -tests/test_consumer_sync_artifact_ingest.py -tests/test_consumer_sync_shadow.py -tests/test_coverage_guard_config.py -tests/test_evidence_contract_compiler.py -tests/test_experiment_arm_identity.py -tests/test_feedback_model_provenance.py -tests/test_improvement_log.py -tests/test_model_profile_trial.py -tests/test_model_profile_trial_bridge.py -tests/test_model_tier_resolution.py -tests/test_observability_activation.py -tests/test_partitioned_review.py -tests/test_pattern_miner.py -tests/test_playbook_compiler.py -tests/test_repo_artifact_hygiene.py -tests/test_research_control.py -tests/test_role_compiler.py -tests/test_roles_lineage.py -tests/test_runner_effect_bridge.py -tests/test_runtime_ac_flow_monitor.py -tests/test_skill_compiler.py -tests/test_synthesis_promotion.py -tests/test_ux_review.py -tests/test_verify_coverage_mode.py -tests/test_workflow_compiler.py \ No newline at end of file diff --git a/src/UNKNOWN.egg-info/dependency_links.txt b/src/UNKNOWN.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/src/UNKNOWN.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/UNKNOWN.egg-info/top_level.txt b/src/UNKNOWN.egg-info/top_level.txt deleted file mode 100644 index 42bbbc5..0000000 --- a/src/UNKNOWN.egg-info/top_level.txt +++ /dev/null @@ -1,99 +0,0 @@ -adapters -adversarial -agent_auth_check -backlog -cadence_registry -capabilities -capability_activation_audit -capability_admission -capability_advisor -capability_compiler -capability_effectiveness -capability_firing_monitor -capability_ir -capability_lifecycle -capability_matcher_proposals -capability_opportunity -capability_outcome_bridge -capability_propensity -capability_recurrence_check -capability_targets -capacity -ccusage_reconcile -claims -codemod_lane -completion_event_adapter -consumer_sync_artifact_ingest -consumer_sync_shadow -cross_repo_lane -dispatcher -dry_seam_audit -durability_sweep -env_prereq -epic_lane -evidence_acquisition -evidence_schema -execution_profiles -exp_abcd -experiment_recovery -exploration_backfill -exploration_collection -exploration_evidence_plan -exploration_review -feature_scan -features -feedback -frontend_verify -gh_capacity -human_calibration -improvement_log -issue_quality -issue_readiness -judge_reliability -keepalive_evidence -keepalive_outcomes -keepalive_shadow -keepalive_supervisor -langsmith_direct -langsmith_fetch -langsmith_pull -ledger_reconcile -local_verify -mcp_server -merge_guard -model_profile_trial -model_profile_trial_bridge -objective_anchor -observability_dashboard -outcomes -partitioned_review -paths -pattern_miner -periodic_report -provision -range_lane_rollout -redirect_apply -redirect_plan -redirect_policy -redirect_shadow -redirect_sweep -relearn_report -repo_knowledge -research_scheduler -research_subjects -roles -router -runner_effect_bridge -runtime_ac -runtime_ac_flow_monitor -runtime_ac_gate -runtime_ac_panel -strategy_experiment -switch_review -synthesis_promotion -testgen_gate -testgen_lane -tick -ux_review -verify -watch diff --git a/tests/test_repo_artifact_hygiene.py b/tests/test_repo_artifact_hygiene.py index e8f5db5..218fe31 100644 --- a/tests/test_repo_artifact_hygiene.py +++ b/tests/test_repo_artifact_hygiene.py @@ -135,6 +135,19 @@ def test_no_emitted_artifact_is_tracked(): ) +def test_generated_package_metadata_is_ignored_and_untracked(): + """Packaging metadata generated by autofix must not become a source-tree change.""" + require_git() + artifact = "src/UNKNOWN.egg-info/PKG-INFO" + assert is_ignored(artifact), f"{artifact} is not ignored" + proc = git("ls-files", "--", "*.egg-info/*") + assert proc.returncode == 0, f"git ls-files failed: {proc.stderr.strip()}" + assert not proc.stdout.strip(), ( + "generated package metadata is tracked; remove it from the index and keep *.egg-info/ " + "in .gitignore so autofix cannot add it to unrelated pull requests" + ) + + @pytest.mark.parametrize("path", MUST_STAY_COMMITTABLE) def test_sources_and_docs_are_not_swallowed(path: str): require_git()