<!-- Written per the the-loop:writing skill. -->
Tasks: a Slack kickoff offers Do or Start, not Start alone
Four tasks, all in this repository and all small. The renderer comes first, because the two call sites render through it. The docs come last. Every code task is red → green: the test is written first and fails, then the code makes it pass.
Task list
- [x] 1. Renderer: a Do button and the description lines
slack.py:COMMAND_BUTTONSgains"do": "Do". NewKICKOFF_COMMANDS = ("do", "start")andCOMMAND_DESCRIPTIONS(fixed words,doandstartonly), both in__all__.render_reply_blocksinserts a description section (*<Label>* — <line>, one per rendered command that has a description, in button order) between the text section and the actions block.- Depends on: none
- Requirements: R1.1, R1.2, R1.4, R1.5
- Test: T1 —
tests/test_channels_buttons.py(two commands give text, then descriptions, then[Do, Start]; one command gives one line; none gives text only;executehas no line; the tables agree) (red→green)
- [x] 2. Call sites: every kickoff path offers both
inbound._open_work_itemandcommands._create_verb:command_buttons_for("start")→command_buttons_for(*KICKOFF_COMMANDS), and their comments updated.- Depends on: 1
- Requirements: R1.1, R1.3, R1.4
- Test: T2 —
tests/test_channels_integration.py(the existing kickoff reply test now expects[do, start]),tests/test_channels_commands.py(/the-loop new),tests/test_channels_kickoff_picker.py(the picker's opened reply) (red→green)
- [x] 3. Scenarios: pressing Do, a disabled keyword, the abuse cases
- Integration tests with Gherkin docstrings and
Requirement:links: pressing Do records an unmarkedthe-loop dothatparse_commandreads asdo, and the reply is edited naming "Do";routing.control.keywords.do: ""renders Start alone; an unlisted member's Do press records and edits nothing; a crafted non-keyword value on the Doaction_idarms nothing; nocontrol.commandgrant means no buttons at all. - Depends on: 2
- Requirements: R1.4, R2.1, R2.3, R2.4, abuse 1, 2, 4
- Test: T2 + T8 —
tests/test_channels_integration.py -k "do_press or do_button"
- Integration tests with Gherkin docstrings and
- [x] 4. Docs and visual evidence
docs/capabilities/channels.md: the rendering bullet (Execute / Start / Do, each with its line on the kickoff reply) and the kickoff and/the-loop newbullets, plus a history row for issue-529. The "Opened … Start button" wording indocs/guides/ README, if any exists, is updated too.- Screenshots of
design/kickoff-reply.htmlin light and dark. - Depends on: 3
- Requirements: all (docs ship with the change)
- Test: T5 + T12 — the screenshots;
uv run pre-commit run --all-files