Age guess (agify.io)
GET agify.io?name=, timeout+Breaker per doomlist.py's pattern; fun-gated with v1's fun_off reply. Argument comes from ParsedCommand.args rather than v1's replace-chain, which crashed on a lone trailing space; an agify timeout/error/malformed body/open breaker answers the same not_know text as count == 0, since v1 never handles that case at all (silence). QA authored, not ported
/idade/age/edad- v1 scenarios
- —
- Ported
- 5
- Green
- 7
- Failing
- —
GET agify.io?name=, timeout+Breaker per doomlist.py's pattern; fun-gated with v1's fun_off reply. Argument comes from ParsedCommand.args rather than v1's replace-chain, which crashed on a lone trailing space; an agify timeout/error/malformed body/open breaker answers the same not_know text as count == 0, since v1 never handles that case at all (silence). QA authored, not ported
Miscellaneous.py:185-202What it does
Behaviour that must not change
How to verify it
Ship two members
landed the member registry (cb_core/members.py) it needs; QA's single-tagged-user scenario describes behaviour v1 never had - see docs/contracts/fun_ship.md
Conversational AI replies
langchain provider behind the router, tenant budget cap, v1's per-user streak on a new cache.bump_clamped primitive, per-group rate limit; QA authored, not ported (7 scenarios) - see docs/contracts/x_conversational_ai.md