Skip to content

release: v0.51.32 — Release I (2-PR batch: #1943 lineage segment expand + #1965 kanban modal)#1971

Merged
nesquena-hermes merged 6 commits into
masterfrom
stage-327
May 9, 2026
Merged

release: v0.51.32 — Release I (2-PR batch: #1943 lineage segment expand + #1965 kanban modal)#1971
nesquena-hermes merged 6 commits into
masterfrom
stage-327

Conversation

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Release I (v0.51.32) — 2-PR contributor batch + kanban modal

Stage-327 absorbs 2 ready-to-ship PRs, both with prior independent approvals:

What ships

Added (1 PR)

  • feat: expand collapsed session lineage segments #1943 by @dso2ng — Expand collapsed session lineage segments. Click handler on the existing "N segments" badge surfaces the materialized _lineage_segments list as expandable rows. Auto-expands when active session is one of the hidden segments. Backend-projected count-only rows still render as the passive badge (no behavior change). Frontend-only — no new endpoints. @aronprins APPROVED.

Fixed (1 PR)

Pre-release verification

Gate Result
Full pytest (HERMES_HOME isolated) 5042 passed, 0 failed (153.02s)
Net new tests +14 (12 lineage + 2 kanban regression)
JS syntax (node -c on 3 modified files) Clean
Conflict-marker scan Clean
Silent-revert check (merge-base) All files stage>=contributor on both PRs
Opus advisor (5 asks) SHIP-AS-IS
Independent reviews nesquena APPROVED on #1965, aronprins APPROVED on #1943

Opus advisor verdict — verbatim

Final call: SHIP-AS-IS. Both PRs cleared all 5 asks. Specifically:

Ask Outcome
1. modal lifecycle No leak. ESC works, listener cleanly unbound on submit-401.
2. lineage state on switch Persists correctly, mirrors _expandedChildSessionKeys pattern.
3. composer-draft race Disjoint state, brief mis-states the timing — no race.
4. i18n parity Math is 11×8 + 2×10 = 108. zh-Hant kanban gap is pre-existing.
5. other blockers None found.

Follow-up items filed (non-blocking)

Three small post-ship improvements Opus surfaced; will track as separate issues:

  1. zh-Hant kanban i18n backfillkanban_no_comments and kanban_no_runs were already absent from the two zh-Hant locale blocks pre-fix(kanban): header '+' button opens create-task modal (#1964) #1965 (English fallback works). Worth a small PR to align.
  2. test_kanban_modal_locale_parity — analogous to feat: expand collapsed session lineage segments #1943's test_lineage_segment_locale_keys_are_defined_for_sidebar_locales. Asserts i18n.count("kanban_title:") >= i18n.count("kanban_no_comments:") on master to catch future kanban-key locale drift.
  3. Modal focus-trap — no Tab focus-trap inside .kanban-modal-overlay. Affects both the new task modal AND the existing create-board modal. A11y improvement.

What's NOT in this release

Closes: #1964

🤖 Generated with Claude Code

Co-authored-by: dso2ng dso2ng@users.noreply.github.com

dso2ng and others added 6 commits May 9, 2026 09:49
The Kanban sidebar panel's header '+' button (#kanbanNewTaskBtn) was
wired straight to createKanbanTask(), which reads the inline
#kanbanNewTaskTitle input and silently returns when empty. The inline
input lives below five rows of filters (search, assignee, tenant,
archived/mine toggles, stats, bulk-action bar) and is typically off-screen
on first panel open, so the header button looked dead — clicking it with
no title typed did nothing visible (no modal, no scroll, no focus shift,
no toast).

Now the header '+' opens #kanbanTaskModal — a centered overlay with the
same .kanban-modal-overlay shell the existing create-board modal uses,
so the two flows look and behave identically (centered card, dim
backdrop, ESC closes, click-on-backdrop closes). The modal exposes the
fields the backend already accepts at /api/kanban/tasks: Title, Description,
Status (Triage/Todo/Ready), Priority, Assignee (datalist suggestions from
the active board), Tenant (datalist).

UX details:
- Title is required; submit-with-empty shows a properly styled red error
- Title field auto-focuses on open
- ESC closes the modal; backdrop click closes; Enter on simple inputs
  submits, Enter in the description textarea inserts a newline
- Submit POSTs only the fields the user filled in (no forced empty strings)
  and auto-opens the new task's detail view
- Submit button disables while posting to prevent double-submit
- Inline quick-add (Enter on #kanbanNewTaskTitle) is preserved as a
  power-user shortcut

Side effect: .kanban-modal-error styling improved (proper red alert with
border + tinted background) so the existing create-board modal benefits
from the same polish for free.

i18n: 11 new keys added across all 8 supported locales (en, ja, ru, es,
de, zh, pt, ko).

Tests: tests/test_kanban_ui_static.py::test_kanban_new_task_header_button_opens_modal
covers the modal markup, button wiring, ESC/Enter handling, datalist
population, submit behavior, and inline-quick-add fallthrough.

Verified end-to-end in the browser on an isolated test env (port 8789):
created a board from scratch, opened the modal via header '+',
submitted with title/description/status/priority/assignee/tenant filled in,
moved the task through statuses (Triage → Todo → Ready → Blocked → Archived),
added a comment, verified Cancel + ESC + backdrop-click all close cleanly,
verified validation error rendering, verified inline quick-add still works.

Closes #1964
@nesquena-hermes nesquena-hermes merged commit ba535e0 into master May 9, 2026
3 checks passed
@nesquena-hermes nesquena-hermes deleted the stage-327 branch May 9, 2026 20:03
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.

bug(kanban): header '+' button is dead — silently returns when inline input is empty

2 participants