Skip to content

Reconcile doctor warning taxonomy and hosted scope - #1099

Merged
jeffhuber merged 4 commits into
mainfrom
codex/1064-doctor-taxonomy
Sep 21, 2026
Merged

jeffhuber merged 4 commits into
mainfrom
codex/1064-doctor-taxonomy

Conversation

@jeffhuber

Copy link
Copy Markdown
Contributor

Doctor reports now expose warn_status_total while preserving summary.warnings as the ordinary-warning category, so raw warn checks reconcile exactly with owner actions and promotion todos. Concise and advanced text call the categorized remainder “other warnings” when needed.

Hosted and orchestrator adoption runs now derive campaign provider readiness from the effective profile. Explicit --campaign keeps the campaign command’s full default provider set, explicit Devin readiness remains available, and the default reviewer-gate posture still reports missing selected local reviewer CLIs with a copyable hosted command first.

Validation:

  • pytest focused doctor output/campaign/auth/registry/observer suite: 125 passed, 16 subtests passed
  • targeted taxonomy and hosted-scope tests: 5 passed
  • ruff check .
  • scripts/privacy_scan.py
  • compileall, dependency compatibility, and package workflow guard
  • wheel/sdist build and twine check

Closes #1064

@jeffhuber jeffhuber added needs-claude-audit builder:codex Code Mower generated label labels Sep 21, 2026
@github-actions

github-actions Bot commented Sep 21, 2026

Copy link
Copy Markdown

Claude audit (merge-authority lane)

Head SHA: b4ad9adc1a604a3aa56b5c09194d9802c9b00611
Verdict: PASS
Review details remain in the local audit artifact.
Publication workflow: .github/workflows/local-audit-publication.yml at c38c137353e0d58ef60b66d47aebd2a73668ab62

@jeffhuber

Copy link
Copy Markdown
Contributor Author

Exact-head review of b4ad9adc1a604a3aa56b5c09194d9802c9b00611 found one P2.

src/code_mower/doctor_checks/adoption.py:1655-1661 still emits doctor.campaign.readiness WARN (“no release campaign provider is ready in this posture”) when every selected provider is posture-skipped or the effective profile selects none. runner.py:390-416 invokes the full campaign checker for ordinary adoption even without --campaign. Reproducing run_doctor against the repository config with profile recommended, adoption=True, and either hosted-builders or orchestrator-only still yields skipped local adapters plus that unselected campaign warning (and the optional cloud-upload campaign warning).

This preserves the misleading warning floor #1064 is meant to remove. Treat zero in-scope/ready-required campaign providers under non-campaign intent as skip/pass/omission, while keeping explicit --campaign behavior. Add full run_doctor hosted/orchestrator assertions that no unselected campaign warning remains. Focused review validation: 89 tests and 9 subtests passed; Ruff and privacy scan passed.

@jeffhuber

Copy link
Copy Markdown
Contributor Author

Re-review of exact head 1cf1c2a4d51950bb2e87cd454ad8e8abe3961edc confirms the prior hosted/orchestrator warning floor is fixed, but one P2 remains.

At src/code_mower/doctor_checks/adoption.py:1406-1410, observer skipping requires config-wide campaign_intent.reason == none. resolve_campaign_intent scans every configured lane rather than the effective provider scope. An unselected lane with a campaign adapter therefore prevents skipping even when providers=[] and campaign_requested=False, then emits cloud/storage/Board campaign checks plus doctor.campaign.readiness WARN while never checking that provider.

Repro: call check_adoption_campaign_readiness with an orchestrator-only posture, no providers, no campaign request, and config containing a Codex campaign_adapter_argv; the result reports configured campaign intent and “no release campaign provider is ready.” Intersect configured intent with in-scope providers, or let only explicit/active intent override the observer skip. Add an out-of-profile configured-adapter regression. Review validation otherwise passed: 124 tests, 18 subtests, Ruff, privacy.

@github-actions

Copy link
Copy Markdown

Claude audit unavailable

Head SHA: 1cf1c2a4d51950bb2e87cd454ad8e8abe3961edc
Verdict: UNKNOWN
No merge-authority verdict was published. The local artifact was quarantined, stale, or inconclusive. Check the local runner and requeue this audit.

@jeffhuber

Copy link
Copy Markdown
Contributor Author

Exact-head review of 03619e2960704b909d655d54850fb5b9cdf4d2c5 confirms both prior P2s are fixed: ordinary hosted/orchestrator adoption no longer creates the unselected campaign warning floor, and configured intent is now scoped to effective providers. One adjacent P2 remains.

At src/code_mower/doctor_checks/adoption.py:39-47, _CAMPAIGN_PROVIDER_CHECK_NAMES omits doctor.campaign.transport. The observer skip decision at lines 1407-1411 can therefore classify campaign readiness as out of scope even when a selected hosted provider just emitted an actionable transport warning.

Concrete reproduction: call check_adoption_campaign_readiness with adoption_posture="hosted-builders", providers=["devin"], an enabled Devin lane, repo_slug="owner/repo", valid DEVIN_API_KEY/DEVIN_ORG_ID, and no repository transport allowlist. The exact head emits doctor.campaign.transport WARN with owner_action=true and dispatch_blockers=["installation"], then emits doctor.campaign.readiness SKIP saying readiness is out of scope and returns before storage/cloud/Board checks. Those verdicts conflict for the selected provider and hide its actionable state from the aggregate readiness result.

Include transport in the provider-check set (or derive the skip decision from every selected provider readiness check) and add a hosted transport-only regression asserting the aggregate readiness is not SKIP.

Review validation: 124 tests and 18 subtests passed across the focused doctor output/campaign/auth/registry suite; Ruff and privacy scan passed. No edits were made.

@github-actions

Copy link
Copy Markdown

Claude audit unavailable

Head SHA: 03619e2960704b909d655d54850fb5b9cdf4d2c5
Verdict: UNKNOWN
No merge-authority verdict was published. The local artifact was quarantined, stale, or inconclusive. Check the local runner and requeue this audit.

@jeffhuber

Copy link
Copy Markdown
Contributor Author

Exact-head Codex audit of bea1feab89d072faa93919f1858a8f3149b69477: PASS.

No P0/P1/P2 findings remain. I verified the three prior scope defects at this exact head:

  • ordinary hosted/orchestrator adoption suppresses campaign storage, cloud-upload, and Board checks when all selected provider checks are posture-skipped and no campaign intent exists;
  • configured campaign intent is intersected with the effective provider set, so an adapter on an unselected lane cannot reintroduce the warning floor;
  • doctor.campaign.transport participates in provider aggregation, so an actionable hosted transport failure yields aggregate doctor.campaign.readiness WARN rather than the contradictory out-of-scope SKIP.

The warning taxonomy preserves summary.warnings as ordinary warnings, adds warn_status_total, and reconciles the partition raw = warnings + owner_actions + promotion_todos in both report and group summaries. Concise and advanced output call the categorized remainder “other warnings” when applicable. The default reviewer-gate path continues to check selected local reviewer lanes, while the posture hint leads with the hosted command.

Review validation:

  • 125 focused doctor output/campaign/auth/registry tests passed, plus 18 subtests;
  • 49 adjacent GitHub/posture/supervised-pilot tests passed;
  • the CLI-first test_internal_package_seams_keep_cli_first_surface release-hygiene test passed;
  • Ruff, privacy scan, and git diff --check passed.

No edits were made.

@github-actions

github-actions Bot commented Sep 21, 2026

Copy link
Copy Markdown

Claude audit (merge-authority lane)

Head SHA: bea1feab89d072faa93919f1858a8f3149b69477
Verdict: PASS
Review details remain in the local audit artifact.
Publication workflow: .github/workflows/local-audit-publication.yml at c38c137353e0d58ef60b66d47aebd2a73668ab62

@jeffhuber
jeffhuber marked this pull request as ready for review September 21, 2026 08:16
@jeffhuber
jeffhuber merged commit 052d494 into main Sep 21, 2026
22 checks passed
@jeffhuber
jeffhuber deleted the codex/1064-doctor-taxonomy branch September 21, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

builder:codex Code Mower generated label claude-audit-done

Projects

None yet

Development

Successfully merging this pull request may close these issues.

v1.6.0: reconcile doctor warning taxonomy and hosted-posture scope

1 participant