Skip to content

Modernize testing and CI: drop change-detector meta-tests, dedupe CI jobs - #404

Merged
yisding merged 6 commits into
mainfrom
claude/testing-ci-modernization-6mtn4c
Jul 8, 2026
Merged

Modernize testing and CI: drop change-detector meta-tests, dedupe CI jobs#404
yisding merged 6 commits into
mainfrom
claude/testing-ci-modernization-6mtn4c

Conversation

@yisding

@yisding yisding commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

Removes the layers of the test suite that asserted repository text rather than behavior (~4,200 lines), and consolidates the CI workflows so nothing runs twice per PR.

Tests removed (change detectors, tests-of-tests, plan-doc pins)

  • tests/test_ci_workflow.py (927 lines) — re-asserted the literal YAML of the workflows and the contents of plan/validation/tasks.md. The real security posture (SHA-pinned actions, persist-credentials: false, template injection, cache poisoning) is already enforced by zizmor + actionlint, which run in pre-commit and CI.
  • tests/test_source_hygiene.py (896 lines) — asserted the source text of other test files (exact asyncio.sleep( counts, required helper names) and planning markdown.
  • tests/test_module_size_ratchet.py — line-count ratchet with a shrink-only allowlist; ruff's C901/PLR0912/PLR0915 complexity gates remain.
  • tests/test_validation_plan.py plus 31 embedded test_validation_tasks_v* / test_*_plan_tracks_* detectors across 18 files (cli, contracts, observability, perf, dx-helpers, contributing, validation-markers) — each pinned backtick-quoted phrases inside plan/** markdown, so routine code changes forced edits to historical planning docs.
  • tests/validation/test_stress_uses_public_sampler.py — AST-parsed a sibling test file to police its imports.
  • Empty tests/regressions/ placeholder directory and the now-unused REQUIRED_BUILD_SOURCE_EXCLUDES constant (wheel/sdist contents are still checked directly by tests/cli/test_packaging.py).

Kept intact: every guard that protects a user-facing surface — docs routes and command hints, generated files (llms.txt, guard-command blocks), packaging/scaffold hygiene, marker lint, dependency policy, and the contract suites.

CI consolidation

  • One lint gate. The lint and pre-commit jobs duplicated each other (ruff check/format, Import Linter, and zizmor each ran twice per PR). lint now runs pre-commit run --all-files with no skips, so CI and the local hook grade the exact same surface. Note: if branch protection lists pre-commit as a required check, it should be updated to lint.
  • Right-sized PR matrix. Quick validation runs on 3.11 + 3.14 per PR; 3.12 keeps per-PR coverage through the coverage job (same test slice), and the nightly full-local job now runs the full 3.11–3.14 matrix under the thorough Hypothesis profile — so intermediate versions get deeper coverage than before, off the PR critical path.
  • Nightly dedupe. The nightly quick job was a strict subset of nightly full-local and already runs on every PR and in the release gate; removed.
  • Guard recipes in the justfile no longer reference the deleted plan test; all generated surfaces (CLAUDE.md, AGENTS.md, CONTRIBUTING.md, docs/validation.md, llms-full.txt, _guard_commands.py) regenerated via scripts/regen_guard_commands.py.

Net effect per PR: 4 fewer duplicated job-runs of lint tooling, 2 fewer quick-validation matrix legs, and a test suite that no longer fails when someone edits a planning doc, a comment, or a workflow without updating a mirror assertion.

Testing

  • Full serial uv run pytest5478 passed, 319 skipped in 4m06s.
  • uv run pre-commit run --all-files — all hooks pass (zizmor run offline locally due to sandbox network; clean, no findings).
  • just typecheck (gated mypy) — clean.
  • Guard suites for every regenerated surface (tests/docs, test_contributing.py, test_regen_guard_commands.py, test_llms_txt.py, packaging) plus all 18 trimmed test files — green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK

Summary by CodeRabbit

  • Bug Fixes
    • doctor --fix now creates the journal directory automatically when it doesn’t exist.
    • Validated “release mode” payloads now include the --release flag.
  • Tests
    • Nightly validation runs across a broader Python matrix with per-version isolated artifacts.
    • Quick slices/coverage now run with xdist (-n auto --dist loadscope).
    • Reduced brittle “plan vs implementation” contract checks by removing outdated assertions.
  • Documentation
    • Updated contributor guard commands and validation quick-check command lists to match current test lanes.
  • Chores
    • Streamlined CI gating: centralized lint via pre-commit and simplified typecheck execution.

claude added 2 commits July 8, 2026 14:51
Delete the test-suite layers that asserted repository *text* rather than
behavior:

- test_ci_workflow.py: 927 lines re-asserting the literal YAML of the
  workflows (SHA pins, persist-credentials, template shapes are already
  enforced by zizmor + actionlint in pre-commit) and the contents of
  plan/validation/tasks.md.
- test_source_hygiene.py: asserted the source text of other test files
  (exact asyncio.sleep counts, required helper names) and planning docs.
- test_module_size_ratchet.py: line-count ratchet; ruff C901/PLR0912/
  PLR0915 remain as the complexity gate.
- test_validation_plan.py and every embedded
  test_validation_tasks_v*/test_*_plan_tracks_* change detector: these
  pinned backtick-quoted phrases in plan/ markdown, turning every code
  change into a mandatory plan-doc edit.
- test_stress_uses_public_sampler.py: AST-parsed a sibling test to
  police its imports.
- tests/regressions/: empty placeholder directory.

Guards that protect user-facing surfaces (docs routes, command hints,
generated files, packaging hygiene, marker lint) are untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK
- Merge the duplicated lint + pre-commit jobs into a single pre-commit
  gate: ruff check/format, Import Linter, actionlint, zizmor, codespell,
  and whitespace hooks now run once, identically in CI and locally.
- Trim the per-PR quick-validation matrix to the oldest and newest
  supported Pythons (3.11/3.14); 3.12 keeps per-PR coverage via the
  coverage job, and the nightly full-local job now runs the full
  3.11-3.14 matrix under the thorough Hypothesis profile.
- Drop the nightly quick job: it was a strict subset of nightly
  full-local and already runs on every PR and in the release gate.
- Drop tests/test_validation_plan.py from the guard-contributing and
  guard-validation recipes and regenerate the guard command surfaces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5325b3ea-7655-4d28-85b2-23ba3633e0a6

📥 Commits

Reviewing files that changed from the base of the PR and between 58acead and b188824.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • CONTRIBUTING.md

📝 Walkthrough

Walkthrough

The PR consolidates CI and validation execution, updates guard-command docs and recipes, removes validation-plan cross-check tests, and applies typing and helper refactors across core, telephony, transport, and validation code.

Changes

CI, validation, and guard execution

Layer / File(s) Summary
CI and workflow flow
.github/workflows/ci.yml, .github/workflows/nightly-validation.yml, .github/workflows/release-validation.yml
Consolidates CI linting into pre-commit, narrows the quick matrix, runs coverage with xdist, expands nightly validation to a Python matrix, and installs pytest-xdist for release validation.
Validation runner and policy
src/easycat/validation/runner.py, tests/cli/test_validate_runner.py, tests/test_dependency_policy.py, justfile, pyproject.toml, CONTRIBUTING.md
Adds slice-specific pytest args for the quick validation slice, updates mypy gating to a whole-package just typecheck flow, and aligns runner/policy/docs with the xdist and strict-core changes.
Guard commands and docs
AGENTS.md, CLAUDE.md, CONTRIBUTING.md, docs/validation.md, llms-full.txt, justfile, src/easycat/cli/_guard_commands.py, tests/test_contributing.py, tests/test_validation_markers.py
Removes tests/test_validation_plan.py from guard-command pytest lists, updates the surrounding docs text, and replaces validation-plan parsing checks with marker and command-fallback assertions.

Plan-tracking test cleanup

Layer / File(s) Summary
CLI and contract plan checks
tests/cli/test_app.py, tests/cli/test_bundles.py, tests/cli/test_doctor.py, tests/cli/test_latency_*.py, tests/cli/test_templates.py, tests/cli/test_validate_*.py, tests/contracts/test_agent_bridge_contracts.py, tests/contracts/test_http_cassette_redaction.py, tests/contracts/test_provider_capability_report_model.py, tests/contracts/test_provider_surface_matrix.py, tests/contracts/test_ws_cassette_replay.py, tests/test_dx_helpers.py
Drops plan-tracking assertions across CLI, contract, and DX tests; adds the doctor journal-directory regression, the live validation release-flag assertion, and the HTTP/SSE cassette scope check.
Deleted test modules
tests/test_ci_workflow.py, tests/test_source_hygiene.py, tests/test_module_size_ratchet.py, tests/test_validation_plan.py, tests/validation/test_stress_uses_public_sampler.py
Removes standalone test modules that enforced workflow structure, source hygiene, line budgets, validation-plan parsing, and stress sampler usage.

Release artifact scaffold exemption

Layer / File(s) Summary
Scaffold template exemption
tests/_release_artifacts.py
Adds scaffold template marker handling so release artifact offender checks exempt scaffold template paths containing tests.

Core helpers and registries

Layer / File(s) Summary
Core helper typing
src/easycat/_logging.py, src/easycat/_observability.py, src/easycat/_provider_catalog.py, src/easycat/config/easy.py, src/easycat/echo_cancellation.py, src/easycat/noise_reduction.py, src/easycat/planning/provider_plan.py, src/easycat/vad/_base.py, src/easycat/strip_markdown.py, src/easycat/stt/base.py
Updates handler construction, metric guards, provider registry typing, config validation, validator return types, predicate narrowing, and internal state declarations.
CLI validate and debug helpers
src/easycat/cli/validate.py, src/easycat/cli/debug/bundles.py, src/easycat/cli/debug/replay.py, src/easycat/testing/contracts.py
Tightens stream typing in validate output, annotates debug payload dictionaries, and adds a provider-factory assertion in the testing contract helper.
Config, session, and server wiring
src/easycat/config/_telephony_wiring.py, src/easycat/server/auth.py, src/easycat/server/routes.py, src/easycat/server/voice_server.py, src/easycat/server/webrtc_routes.py, src/easycat/session/_session.py
Updates telephony wiring, websocket auth typing, server-state annotations, session attributes, and session registration casts.
STT and TTS registries
src/easycat/stt/factory.py, src/easycat/tts/factory.py, src/easycat/tts/_ws_base.py, src/easycat/tts/input.py
Switches provider registries to callable-based typing, adds the websocket-TTS config attribute, and widens the TTS input-policy parameter type.
Telephony and transports
src/easycat/telephony/outbound.py, src/easycat/telephony/screening.py, src/easycat/telephony/server.py, src/easycat/telephony/voicemail.py, src/easycat/transports/local.py, src/easycat/transports/twilio_media.py, src/easycat/transports/webrtc.py, src/easycat/transports/webtransport.py
Adds typed voicemail and screening aliases, refines TwiML handling, and adjusts local, Twilio, WebRTC, and WebTransport transport typing and event payload shapes.
Supervisor and validation utils
src/easycat/supervisor.py, src/easycat/validation/latency.py, src/easycat/validation/redaction.py, src/easycat/validation/runner.py
Changes frame forwarding to use prepared output, updates latency coercion helpers, guards redaction lookup on normalized keys, and threads xdist-aware validation execution through the runner.

Estimated code review effort: 4 (Complex) | ~60 minutes

Poem

I nibbled stale plan-pages, one by one,
Then danced through xdist when the lint was done.
Quick slices now sprint, nightly hops in rows,
While scaffold twigs stay safe where the template grows.
🐇 hop!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: removing meta-tests and consolidating CI jobs.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/testing-ci-modernization-6mtn4c

Warning

Tools execution failed with the following error:

Failed to run tools: Stream initialization permanently failed: 13 INTERNAL: Received RST_STREAM with code 2 (Internal server error)


Comment @coderabbitai help to get the list of available commands.

@yisding
yisding marked this pull request as ready for review July 8, 2026 14:56

@charliecreates charliecreates Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the latest changes, and I don’t have actionable feedback to address.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
CONTRIBUTING.md (1)

111-112: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Stale references to removed plan-tracking coverage.

guard-contributing and guard-validation no longer run tests/test_validation_plan.py (per the raw fallback changes at Line 77-78), but this table still describes them as protecting "plan current-state evidence" and "validation plan current state." Update this prose to match the new guard scope.

📝 Proposed fix
-| Contributor and validation guidance | `just guard-contributing` | `justfile` parity, agent guide command, source-layout, and architecture hints, validation lanes, docs-route hints, and plan current-state evidence |
-| Validation workflow, validation reference, or validate CLI behavior | `just guard-validation` | The `docs/validation.md` workflow, validation reference route hints, validation plan current state, validate CLI reports, JSON envelopes, latency options, and error handling |
+| Contributor and validation guidance | `just guard-contributing` | `justfile` parity, agent guide command, source-layout, and architecture hints, validation lanes, and docs-route hints |
+| Validation workflow, validation reference, or validate CLI behavior | `just guard-validation` | The `docs/validation.md` workflow, validation reference route hints, validate CLI reports, JSON envelopes, latency options, and error handling |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CONTRIBUTING.md` around lines 111 - 112, Update the CONTRIBUTING guidance
table so the descriptions for guard-contributing and guard-validation no longer
mention removed plan-tracking coverage. Adjust the prose to reflect the current
scope of the guard commands, using the existing guard names and the validation
workflow references, and remove any phrasing about “plan current-state evidence”
or “validation plan current state.”
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@CONTRIBUTING.md`:
- Around line 111-112: Update the CONTRIBUTING guidance table so the
descriptions for guard-contributing and guard-validation no longer mention
removed plan-tracking coverage. Adjust the prose to reflect the current scope of
the guard commands, using the existing guard names and the validation workflow
references, and remove any phrasing about “plan current-state evidence” or
“validation plan current state.”

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5405727b-77ad-4785-9f51-0ca157876b88

📥 Commits

Reviewing files that changed from the base of the PR and between cf2f656 and b652cc6.

📒 Files selected for processing (37)
  • .github/workflows/ci.yml
  • .github/workflows/nightly-validation.yml
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • docs/validation.md
  • justfile
  • llms-full.txt
  • src/easycat/cli/_guard_commands.py
  • tests/_release_artifacts.py
  • tests/cli/test_app.py
  • tests/cli/test_bundles.py
  • tests/cli/test_doctor.py
  • tests/cli/test_latency_baseline_budgets.py
  • tests/cli/test_latency_reliability_failures.py
  • tests/cli/test_latency_selectors_artifacts.py
  • tests/cli/test_templates.py
  • tests/cli/test_validate_live.py
  • tests/cli/test_validate_report_model.py
  • tests/cli/test_validate_runner.py
  • tests/contracts/test_agent_bridge_contracts.py
  • tests/contracts/test_http_cassette_redaction.py
  • tests/contracts/test_provider_capability_report_model.py
  • tests/contracts/test_provider_capability_reports.py
  • tests/contracts/test_provider_surface_matrix.py
  • tests/contracts/test_ws_cassette_replay.py
  • tests/observability/test_attributes.py
  • tests/perf/test_journal_benchmark_artifact.py
  • tests/regressions/.gitkeep
  • tests/test_ci_workflow.py
  • tests/test_contributing.py
  • tests/test_dx_helpers.py
  • tests/test_module_size_ratchet.py
  • tests/test_source_hygiene.py
  • tests/test_validation_markers.py
  • tests/test_validation_plan.py
  • tests/validation/test_stress_uses_public_sampler.py
💤 Files with no reviewable changes (26)
  • tests/cli/test_templates.py
  • tests/cli/test_bundles.py
  • tests/cli/test_validate_runner.py
  • tests/contracts/test_provider_capability_reports.py
  • tests/cli/test_latency_baseline_budgets.py
  • tests/validation/test_stress_uses_public_sampler.py
  • tests/test_validation_plan.py
  • tests/perf/test_journal_benchmark_artifact.py
  • tests/test_module_size_ratchet.py
  • tests/test_ci_workflow.py
  • tests/cli/test_validate_report_model.py
  • tests/cli/test_doctor.py
  • tests/contracts/test_ws_cassette_replay.py
  • tests/contracts/test_agent_bridge_contracts.py
  • tests/test_contributing.py
  • tests/test_source_hygiene.py
  • tests/cli/test_latency_selectors_artifacts.py
  • tests/contracts/test_provider_surface_matrix.py
  • tests/cli/test_app.py
  • tests/cli/test_validate_live.py
  • tests/contracts/test_provider_capability_report_model.py
  • tests/cli/test_latency_reliability_failures.py
  • tests/test_dx_helpers.py
  • tests/_release_artifacts.py
  • tests/observability/test_attributes.py
  • tests/contracts/test_http_cassette_redaction.py

@charliecreates charliecreates Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking feedback (1)
  1. Guard coverage descriptions still mention removed plan-tracking checks — CONTRIBUTING.md#L111-L112
    The raw guard command lists were updated to drop tests/test_validation_plan.py, but the “What it protects” column still says guard-contributing/guard-validation cover “plan current-state evidence” and “validation plan current state.” Updating those two phrases to match the current guard scope would keep the contributor guidance consistent.

If you want Charlie to apply this, reply with please fix 1.

claude added 2 commits July 8, 2026 15:06
- Run the quick validation slice with pytest-xdist (-n auto --dist
  loadscope), matching the flags just test-fast already uses for the
  same marker expression; locally the lane drops from ~4min serial to
  ~48s. Socket, stress, contracts, and latency lanes stay serial. The
  release venv installs pytest-xdist so the wheel-gated quick slice
  keeps working.
- Run the CI coverage job with the same xdist flags (pytest --cov is
  xdist-safe; matches just cov).
- Drop the advisory whole-repo mypy CI step: continue-on-error output
  that nothing gates on is spent compute. just typecheck-all remains
  for local/on-demand ratcheting.
- Skip the unnecessary dev sync in build-smoke (uv build resolves its
  backend in an isolated env).
- Update the CONTRIBUTING guard table and xdist-safety prose to match
  the current guard scope and parallel lanes (flagged by review bots).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 60-67: The advisory whole-repo mypy signal was removed from the CI
workflow, so confirm whether non-gated packages should still be type-checked
somewhere. Update the CI configuration around the mypy step and the related
`just typecheck`/`just typecheck-all` workflow so the intended coverage remains
available, either by restoring an advisory `continue-on-error` pass or by
documenting/moving that signal to a separate job such as nightly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5bbbd4f8-1159-4c43-949e-b43fe5676130

📥 Commits

Reviewing files that changed from the base of the PR and between b652cc6 and d75f9ad.

📒 Files selected for processing (6)
  • .github/workflows/ci.yml
  • .github/workflows/release-validation.yml
  • CONTRIBUTING.md
  • justfile
  • src/easycat/validation/runner.py
  • tests/cli/test_validate_runner.py

Comment thread .github/workflows/ci.yml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/nightly-validation.yml (1)

23-26: 🧹 Nitpick | 🔵 Trivial

Matrix expansion quadruples nightly full-local runner time.

Moving from a single 3.12 run to a 4-version matrix (fail-fast: false, 45-min timeout each) meaningfully increases nightly CI minutes. This appears intentional per the added rationale comment, but worth keeping in mind for runner budget/cost tracking.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/nightly-validation.yml around lines 23 - 26, The
nightly-validation workflow’s Python version matrix is expanding the full-local
job cost too much; adjust the strategy in the matrix job so it does not run all
four versions every night. Either reduce the python-version set to a single
representative version or split the broader matrix into a separate less-frequent
workflow, keeping the existing job structure and fail-fast behavior intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In @.github/workflows/nightly-validation.yml:
- Around line 23-26: The nightly-validation workflow’s Python version matrix is
expanding the full-local job cost too much; adjust the strategy in the matrix
job so it does not run all four versions every night. Either reduce the
python-version set to a single representative version or split the broader
matrix into a separate less-frequent workflow, keeping the existing job
structure and fail-fast behavior intact.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f243c3a0-bd82-4f46-ae68-9db46e3e0b16

📥 Commits

Reviewing files that changed from the base of the PR and between d75f9ad and 00022c5.

📒 Files selected for processing (2)
  • .github/workflows/nightly-validation.yml
  • tests/cli/test_templates.py

Fix all 85 real mypy errors outside the vendored FunASR runtime —
stale annotations (a 4-tuple list typed as 3-tuples in webrtc), str
locals that should carry Literal types (validation statuses, telephony
platform/result values, server state), lazily-imported optional module
handles inferred as object/Any|None, registry value types for the
provider factories, and declared-but-dynamic Session attributes. No
runtime behavior changes; a handful of casts state invariants that
existing runtime guards already establish, and no new type: ignore
comments were added.

The vendored vad/_funasr_runtime is excluded via a pyproject override
(hand-annotating vendored numeric code is churn without value).

With the count at zero, the advisory/gated split is gone: just
typecheck now runs mypy over the whole package and CI gates on it. The
former clean-core module list stays as a strict override
(check_untyped_defs, warn_unused_ignores) to keep ratcheting, and the
now-redundant typecheck-all recipe and mypy_gated_paths variable are
removed along with their sync guard.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CONTRIBUTING.md`:
- Around line 51-52: The Type gate row in CONTRIBUTING.md overstates coverage by
labeling `just typecheck` as “whole repo” while the referenced command `uv run
mypy src/easycat` only checks the package tree. Update the wording to match the
actual scope, or expand the `just typecheck` target/underlying command so it
באמת covers the full repository; use the `just typecheck` and `uv run mypy
src/easycat` entries as the anchors when editing the table.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3f6967d7-7bb9-47da-b12e-060cacb19672

📥 Commits

Reviewing files that changed from the base of the PR and between 00022c5 and 58acead.

📒 Files selected for processing (42)
  • .github/workflows/ci.yml
  • CONTRIBUTING.md
  • justfile
  • pyproject.toml
  • src/easycat/_logging.py
  • src/easycat/_observability.py
  • src/easycat/_provider_catalog.py
  • src/easycat/cli/debug/bundles.py
  • src/easycat/cli/debug/replay.py
  • src/easycat/cli/validate.py
  • src/easycat/config/_telephony_wiring.py
  • src/easycat/config/easy.py
  • src/easycat/echo_cancellation.py
  • src/easycat/noise_reduction.py
  • src/easycat/planning/provider_plan.py
  • src/easycat/server/auth.py
  • src/easycat/server/routes.py
  • src/easycat/server/voice_server.py
  • src/easycat/server/webrtc_routes.py
  • src/easycat/session/_session.py
  • src/easycat/strip_markdown.py
  • src/easycat/stt/base.py
  • src/easycat/stt/factory.py
  • src/easycat/supervisor.py
  • src/easycat/telephony/outbound.py
  • src/easycat/telephony/screening.py
  • src/easycat/telephony/server.py
  • src/easycat/telephony/voicemail.py
  • src/easycat/testing/contracts.py
  • src/easycat/transports/local.py
  • src/easycat/transports/twilio_media.py
  • src/easycat/transports/webrtc.py
  • src/easycat/transports/webtransport.py
  • src/easycat/tts/_ws_base.py
  • src/easycat/tts/factory.py
  • src/easycat/tts/input.py
  • src/easycat/vad/_base.py
  • src/easycat/validation/latency.py
  • src/easycat/validation/redaction.py
  • src/easycat/validation/runner.py
  • tests/test_contributing.py
  • tests/test_dependency_policy.py

Comment thread CONTRIBUTING.md Outdated
The gate runs mypy over src/easycat, not tests/ or scripts/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nj7UG2gQfxqau6c9RdyKKK
@yisding
yisding merged commit 38ca923 into main Jul 8, 2026
17 checks passed
@yisding
yisding deleted the claude/testing-ci-modernization-6mtn4c branch July 8, 2026 16:05
yisding pushed a commit that referenced this pull request Jul 8, 2026
Merge current main into the PR branch after #404 restructured the CI
workflows, re-pinning every setup-uv usage to v8.2.0. Resolves the
ci.yml / nightly-validation.yml conflicts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TNSNVmxYCC9vQmEfo2xHsa
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants