Skip to content

feat(kanban): reply to a blocked task and resume it - #21

Merged
Its-My-Work merged 1 commit into
mainfrom
feat/resume-blocked-task
Sep 22, 2026
Merged

Its-My-Work merged 1 commit into
mainfrom
feat/resume-blocked-task

Conversation

@Its-My-Work

Copy link
Copy Markdown
Owner

Follow-up to #20 (blocked status). Answers the design question: since ask_user
(synchronous, 5-min timeout) is deliberately withheld from unattended Kanban
tasks, how does a human "unblock" one after reading why it stopped?

What this adds

A blocked card gets a ▶ Reply & resume action. It:

  1. Prompts for a short reply (blank = just retry).
  2. Appends it to the task's notes — never overwrites, so the original block
    reason stays visible in history.
  3. Moves the card to todo.

No new backend endpoint — reuses PUT /api/tasks/:id (already tested in #20) and
the existing prompt-builder's ---\nУточнення: block, so the resumed run
--resumes the same Claude session and receives the reply as fresh context on
top of exactly where it left off (including its own explanation for stopping).

Testing

  • Extended test/kanban-run-badges.test.js: the button only renders for
    status==='blocked', the function targets the real PUT endpoint, appends
    (not replaces) notes, and a cancelled prompt sends nothing.
  • test/i18n-completeness.test.js covers the 5 new i18n keys across all 5
    languages (no untranslated prompt() literal, cross-language parity).
  • Full npm test: 70/70 files green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y2ZSHUdJHqVsvSNQ5ZeQ3f

Follow-up to the blocked-status work: ask_user (synchronous, 5-min timeout)
is deliberately not wired into unattended Kanban tasks — it would hold a
worker slot hostage waiting for someone who may not be watching. But once a
human DOES see why a task is blocked, there was no way back onto the board
except editing the card by hand and guessing what to change.

Blocked cards now get a "Reply & resume" action: prompts for a short reply
(or none, to just retry), appends it to the task's notes (not a replacement —
the original blocked reason stays in history), and moves the card to 'todo'.
Nothing new on the backend — this rides the existing PUT /api/tasks/:id and
the prompt builder's own '---\nУточнення:' block, so the resumed run
--resumes the same session and reads the reply as fresh context on top of
wherever it left off.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2ZSHUdJHqVsvSNQ5ZeQ3f
@Its-My-Work
Its-My-Work merged commit dd349a6 into main Sep 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant