I read this as a surgical test-repair task - I’ll inspect the Python/debugging guidance and the target module’s real seams, then update only that test file and run the requested focused verification.


The target is a large existing Python test module with async scheduling seams; I’m mapping the named stale clusters against current production APIs before making the single allowed edit.


Runtime evidence confirms 12 stale-test failures and 3 product-owned failures. I’m now applying only the named contract updates: structural prompt assertions, generation-card publication, dynamic Telegram import patching, worker-owned feedback expectations, valid durable schedule fixtures, and exact async reply/callback signatures.


The repaired clusters now reach their intended runtime seams; the remaining weekly fixture issue was a stale untyped report stub, now replaced with the real finalized summary type and deterministic event-store adapters. I’m starting full-module and static verification.


I read this as completed surgical test repair - I’ll report the changes and remaining product-owned failure.

Updated only `tests/gateway/test_telegram_physique_checkin.py`:

- Replaced prompt prose pin with state/button/callback invariants.
- Updated completion coverage to generation-card publication.
- Patched the actual Telegram import seam for keyboard markup.
- Moved finalized-feedback expectation to the worker boundary.
- Repaired six schedule fixtures with valid schedules, finalized weekly data, durable fences, and event-based synchronization.
- Fixed adaptive `reply_text` async fixture and topic-59 call signature.

Verification:

- Repaired tests: **89 passed**
- Full module: **89 passed, 1 product-owned failure**
  - Trainer bridge: profile `WizardService` lacks `start_trainer_session`.
- Ruff: passed
- Compile: passed
- Type check: 16 inherited diagnostics; baseline had 17, so no new diagnostics.
- `git diff --check`: passed
- No commit created.

Self-review: changes are test-only, preserve coverage, add no sleeps/polling or prose assertions, and introduce no type escape hatches. The existing module is oversized at 2,299 pure LOC; splitting it was outside the exclusive repair scope.