Drawing idea prompt
3,435 exported references; the caption's id is the index drawn, so the catalog's sort order is the contract. Scenarios authored locally - QA has none
/ideiadesenho/drawingidea/ideadibujo- v1 scenarios
- —
- Ported
- 3
- Green
- 5
- Failing
- —
3,435 exported references; the caption's id is the index drawn, so the catalog's sort order is the contract. Scenarios authored locally - QA has none
Miscellaneous.py:137-143What it does
/ideiadesenho (also /drawingidea, /ideadibujo) replies with a random
photo out of a 3,435-picture reference collection, captioned with the
reference's id and a reminder not to trace it without credit.
Behaviour that must not change
The id in the caption is the picture's position in the collection, not a name it carries — there is no command to look one up, in v1 or here, and its only use is a person quoting the number. That only works while the collection keeps its order, so v2 stores the references in the same alphabetical order the old bucket listed them in, and a test fails if that order ever changes. It is the same guarantee v1 offered and no more: deleting one picture renumbers everything after it, then as now.
It answers to the utility switch, not the fun one — a group with utility turned off is told so rather than ignored.
How to verify it
qa/features/x_drawing_idea.feature — the three spellings, the utility gate
and a collection that was never loaded; run with python scripts/cb.py test.
By hand in the sandbox: /drawingidea in a group and check the caption's id
against the picture you get for the same id twice.
Media distortion
branch chain on the reply path, carve + ffmpeg in cb-worker behind a real semaphore (D3) with per-call temp dirs (D4); v1's video/GIF arms are unreachable and stay disabled; seam carving over numpy replaces ImageMagick liquid_rescale - see docs/contracts/x_distortion.md; QA authored (12 scenarios)
Fortune cookie
animated GIF + locale-random fortune line from sorte.txt (locales.lines) plus six lucky numbers, one per tens-decade; fun-gated with v1's fun_off reply. v1's time.sleep(3) between sending the animation and deleting it blocked the whole process, so the delete-then-answer tail now runs as a background asyncio.Task (complaint.py's _schedule_tail idiom) instead, keeping v1's exact user-visible order without holding the reply path open. QA authored, not ported