Skip to content

Broken task: UIBroken tasks in the web UI - #828

Open
thatux wants to merge 5 commits into
hashtopolis:masterfrom
thatux:broken-task-ui
Open

thatux wants to merge 5 commits into
hashtopolis:masterfrom
thatux:broken-task-ui

Conversation

@thatux

@thatux thatux commented Sep 25, 2026

Copy link
Copy Markdown

Depends on the server PR
hashtopolis/server#2509 (issue #884), which adds the
isBroken/brokenReason aggregates and the broken-task config this UI reads.

Broken is a task state, so it lives with the tasks, not on a separate page.

Changes

  • Task list: a red skull (faSkullCrossbones) in the status cell for a
    broken wrapper, and a Clear row action.
  • Task edit page: a banner with the reason (the agent error from
    brokenReason), and a Mark not broken button. Editing the command also
    clears it (server side).
  • Clearing (row action or button) resolves the BrokenTask via the
    brokentasks endpoint and deletes it; gated on task update.
  • Config: brokenTaskThreshold, brokenAgentThreshold, brokenErrorWindow
    exposed in the config UI.
  • API client regenerated for the new aggregates. No separate page.

Testing

npx ng build --configuration development   # clean
eslint on the changed files                # clean

A broken task is a task state, so it belongs where tasks are already listed,
not on a separate page. The task list shows a red skull in the status cell for
a broken task (from the isBroken aggregate), the edit page shows a banner with
the reason (isBroken plus brokenReason), and a row action clears the broken
state by deleting the BrokenTask. Regenerates the API client for the new
aggregates.
@thatux thatux changed the title Broken task UIBroken tasks in the web UI Broken task: UIBroken tasks in the web UI Sep 25, 2026
Review fixes for the broken-task UI:

- markNotBroken now catches failures on both the lookup and the delete and shows
  an error message, matching the Clear row action instead of failing silently.
- Align the Broken Error Window tooltip with the server config description.
- Revert two unrelated reformatting hunks (a stray blank line in the header menu
  builder and a resplit renderTaskLink signature) that were not part of this
  change.
The supertask row already carries the skull (its wrapper is broken when any
subtask is), but the subtask list in the supertask modal rendered only each
subtask's run status. Request the task isBroken aggregate for the subtasks and
flag a broken subtask with the same red skull the top-level list uses, so the
failing subtask reads at a glance while the others keep running.
…dable

- Move the "Mark not broken" button to the right of the reason, vertically
  centered, as a green filled button with a healing icon (matching the Clear
  Broken Task row action).
- Add a hover tooltip hinting the attack command likely needs changing to
  repair the task.
- Clamp a long broken reason to two lines with an ellipsis and let the operator
  click or key it to expand the full error; keyboard accessible (role, tabindex,
  enter/space).
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