These were skipUnless(lark-oapi), and lark-oapi is in no CI lane, so they ran
nowhere. They are mis-gated, not dead: the adapter logic around the SDK is
ours. Restored ungated with a fake of the lazily imported lark-oapi request
builders (the external boundary) and of _tenant_get_request, so they run on
every lane. Sabotage-checked against the adapter (red when hydration skips
on env ids, and when a failed Typing removal still stacks CrossMark).
- test_hydrated_bot_identity_wins_over_stale_env_values
guards: /bot/v3/info runs even with FEISHU_BOT_* set and the hydrated identity wins (#16993)
- test_bot_sender_name_is_fetched_via_basic_batch_and_cached
guards: bot names resolve via bots/basic_batch with repeated bot_ids and are cached
- test_human_sender_name_is_fetched_from_contact_api_and_cached
guards: human names resolve via the contact API (open_id id-type) and are cached
- test_processing_success_removes_typing_and_adds_nothing
- test_processing_failure_swaps_typing_for_cross_mark
- test_processing_failure_skips_cross_mark_when_typing_removal_fails
guard: the Typing -> (nothing | CrossMark) processing-reaction lifecycle, no contradictory badges