Skip to content

feat(kanban): add human_review status + review/approve/reject tools and CLI - #30967

Closed
sahilm-ti wants to merge 2 commits into
NousResearch:mainfrom
sahilm-ti:feat/kanban-human-review
Closed

feat(kanban): add human_review status + review/approve/reject tools and CLI#30967
sahilm-ti wants to merge 2 commits into
NousResearch:mainfrom
sahilm-ti:feat/kanban-human-review

Conversation

@sahilm-ti

Copy link
Copy Markdown

What

Differentiates automated review (existing review status — dispatcher auto-spawns the sdlc-review agent) from human review (new human_review status — parked, waits for the human reviewer to approve / reject).

Also surfaces a CLI + tool API for manual transitions, so a worker can request review itself after opening a PR.

running ─► review ──[agent passes; merges PR]──► human_review ──[approve]──► done
                                                              ──[reject]───► ready
        ─► review ──[agent rejects]────────────────────────────────────────► ready

Changes

hermes_cli/kanban_db.py

  • human_review added to VALID_STATUSES.
  • New atomic CAS helpers: move_to_review, move_to_human_review, approve_task, reject_task. Each writes a dedicated audit event (review_requested / human_review_requested / approved / rejected) so the notifier and dashboard can render different glyphs per kind.
  • approve_task clears the failure counter, recomputes ready for dependents, and cleans up the workspace (mirrors complete_task).
  • reject_task flips status back to ready (not stuck running without a claim) and synthesises a closing run so the rejection rationale surfaces via the normal prior-runs path on the next worker's kanban_show.
  • dispatch_once skips human_review tasks: no auto-spawn. The gateway notifier path is the only thing that fires for them.

hermes_cli/kanban.py (CLI)

  • New subcommands: hermes kanban review, human-review, approve, reject. Pattern matches the existing block / unblock / complete subcommands.

tools/kanban_tools.py (worker tool surface)

  • kanban_review, kanban_human_review, kanban_approve, kanban_reject. Mirror the kanban_block / kanban_complete shape. Worker-ownership enforced on the worker-initiated transitions.

gateway/run.py (notifier)

  • TERMINAL_KINDS extended with the three new event kinds.
  • Renders ⏳ for human_review_requested, ✅ for approved, ↩ for rejected. All capped at NOTIFY_BLOCKED_REASON_MAX (1500 chars), consistent with the blocked-reason path.

Tests

  • tests/hermes_cli/test_kanban_human_review.py — 12 tests covering: status validity, each transition (success + rejection from wrong source status), CAS atomicity (approve_task is idempotent on the second call), and the dispatcher's hands-off behavior for human_review.
  • tests/gateway/test_kanban_notifier_human_review.py — 3 tests pinning the glyph + content of each new notifier message.

All 174 kanban + notifier tests pass locally. Ruff clean on all touched files.

Out of scope

  • The sdlc-review skill itself (already proposed in a separate config repo PR).
  • Updating orchestrator / worker / engineering-process skills to teach them the new flow (separate task).

Sahil Marwaha added 2 commits May 23, 2026 18:20
The kanban terminal-event notifier was hard-truncating payloads at
160-200 chars, which made blocked notifications routinely unactionable
— users couldn't see the question the worker was asking without
opening the dashboard.

Extract the caps as named module-level constants and bump them per
event kind:

- NOTIFY_BLOCKED_REASON_MAX     = 1500  (was 160; this is the one
                                         users actually answer)
- NOTIFY_DONE_SUMMARY_MAX       = 800   (was 200)
- NOTIFY_GAVE_UP_ERROR_MAX      = 600   (was 200)
- NOTIFY_DONE_RESULT_LEGACY_MAX = 400   (was 160; legacy task.result
                                         field, kept smaller because
                                         new code uses summary)

All caps stay under Discord/Slack's ~2000-char single-message ceiling
so the largest payload still fits in one chat message on the tightest
platform we target. Telegram (4096) has plenty of headroom.

Tests cover: blocked carries the full reason, blocked truncates at
the documented cap on overflow, done carries the extended summary,
gave_up carries the extended error, and the cap budget stays ordered
(blocked > done > error > legacy result) so a chatty done summary
can't crowd out a critical blocked reason.
…ions

Adds a second review-flavored status to differentiate automated review
(the existing 'review' column the dispatcher auto-claims with the
sdlc-review agent) from human review (parked, awaiting Sahil's decision).

Workflow:
    running -> review --[agent passes; merges PR]--> human_review
                                                       --[approve]--> done
                                                       --[reject]---> ready
            -> review --[agent rejects]----------------> ready

kanban_db.py
- 'human_review' added to VALID_STATUSES.
- New atomic helpers: move_to_review, move_to_human_review, approve_task,
  reject_task. Each does CAS on the expected source status and writes a
  dedicated audit event (review_requested / human_review_requested /
  approved / rejected) so the notifier and dashboard can render
  differently per kind. approve_task also clears the failure counter,
  recomputes ready for dependents, and cleans up the workspace
  (mirroring complete_task).
- dispatch_once skips human_review tasks: no auto-spawn. The gateway
  notifier subscription path is the only thing that fires for them.

CLI (hermes_cli/kanban.py)
- New subcommands: review / human-review / approve / reject. Pattern
  matches block/unblock/complete: positional task_id, optional reason
  with a comment+event audit trail.

Tool surface (tools/kanban_tools.py)
- kanban_review, kanban_human_review, kanban_approve, kanban_reject.
  Mirror kanban_block/kanban_complete shape. Worker-ownership enforced
  on the worker-initiated transitions (review, human_review).

Gateway notifier (gateway/run.py)
- TERMINAL_KINDS includes the three new event kinds.
- Renders ⏳ for human_review_requested, ✅ for approved, ↩ for
  rejected, all capped at NOTIFY_BLOCKED_REASON_MAX.

Tests
- tests/hermes_cli/test_kanban_human_review.py: 12 tests covering
  status validity, each transition, CAS atomicity, and dispatcher
  hands-off behavior.
- tests/gateway/test_kanban_notifier_human_review.py: 3 tests pinning
  the notifier glyph + content for each new event kind.

174 kanban + notifier tests pass; ruff clean on all touched files.
@daimon-nous daimon-nous Bot added type/feature New feature or request P3 Low — cosmetic, nice to have comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery comp/tools Tool registry, model_tools, toolsets labels May 23, 2026
@daimon-nous

daimon-nous Bot commented May 23, 2026

Copy link
Copy Markdown
Contributor

Implements #29171 (first-class waiting states for human/approval/review gates). Also addresses #29457 (task request for approval). Related to closed #27890 (awaiting_human_ops, earlier attempt).

@sahilm-ti

Copy link
Copy Markdown
Author

Closing — opened in error by a kanban worker. Will be reopened against sahilm-ti/hermes-agent (the personal fork). Hermes-agent PRs from this install should target the fork only, not upstream.

@sahilm-ti sahilm-ti closed this May 23, 2026
sahilm-ti pushed a commit to sahilm-ti/hermes-agent that referenced this pull request May 25, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.
sahilm-ti pushed a commit to sahilm-ti/hermes-agent that referenced this pull request May 25, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 25, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 25, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 28, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 28, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 28, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request May 29, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jun 3, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jun 5, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jun 15, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jun 17, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jun 22, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 3, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 9, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 10, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 11, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 13, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 15, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 17, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 21, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 23, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
sahilm-ti added a commit to sahilm-ti/hermes-agent that referenced this pull request Jul 28, 2026
Add the new 'human_review' status (introduced alongside the
kanban_review/approve/reject machinery) to the dashboard's column
list so cards in that state are actually visible on the board.

Backend: append "human_review" between "review" and "done" in
plugins/kanban/dashboard/plugin_api.py::BOARD_COLUMNS. The endpoint
already buckets tasks by status into BOARD_COLUMNS, so this is the
only Python change required.

Frontend (dist/index.js — there is no src/ tree, the bundled JS is
the canonical UI):
- COLUMN_ORDER: extended to the full status list (scheduled and
  review were also missing from the JS fallback). The render loop
  iterates board.columns from the API, so missing keys here would
  just degrade labels; aligning it with the backend keeps the
  frontend's hard-coded order honest.
- FALLBACK_COLUMN_LABEL / FALLBACK_COLUMN_HELP: added entries for
  scheduled, review, and human_review so the dashboard renders sane
  text when the i18n catalog has no key.
- COLUMN_DOT: added scheduled/review/human_review classes.

Style (dist/style.css): added .hermes-kanban-dot-scheduled,
.hermes-kanban-dot-review, .hermes-kanban-dot-human-review with
distinct colors so the new columns are visually distinguishable.

The Python human_review status itself ships on the
feat/kanban-human-review branch and PR NousResearch#30967; this change is a
no-op until that lands but is safe to merge independently — any
tasks ever set to status='human_review' will now have a home.

Co-authored-by: Sahil Marwaha <sahilm@triangleinvestments.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery comp/tools Tool registry, model_tools, toolsets P3 Low — cosmetic, nice to have type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant