feat(kanban): modal create-task dialog, editable board project directory, comment workflow hint (#66333)

Community feedback (@LSanapalli on X): the inline task-creation form is
cramped inside a ~280px column with no way to resize; board-level
workspace defaults can't be changed after board creation; and users
believe they must block a task, comment, then unblock just to talk to
a worker.

- Create-task dialog: replace the inline column form with a centered
  modal (reuses hermes-kanban-dialog chrome, 36rem wide) with labeled
  fields for title, assignee, priority, skills, workspace kind/path,
  goal mode, and parent task. Same request shape; Enter/Escape behavior
  preserved; submit disabled until a title is present.
- Board settings dialog: new Settings button in the board switcher opens
  a modal to edit display name, description, and the board-level default
  project directory (default_workdir). PATCH /boards/:slug now accepts
  default_workdir (validated absolute existing dir; empty string clears;
  omitted leaves unchanged) and returns the recomputed
  default_workspace_kind so task-creation defaults follow immediately.
- Comment workflow hint: the task drawer's comment box now explains that
  comments land on the thread immediately and reach the worker on its
  next run/kanban_show() — no block/unblock dance needed — with a fuller
  tooltip for when blocking IS the right tool.
- i18n: new keys optional in the kanban namespace with English fallbacks
  in the bundle (established pattern; avoids churning 17 locale files).
- Docs: dashboard section updated for the dialog + Settings button.
This commit is contained in:
Teknium 2026-07-17 07:23:54 -07:00 committed by GitHub
parent 71252f0dcb
commit e4f87557b9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 483 additions and 163 deletions

View file

@ -828,5 +828,25 @@ export const en: Translations = {
"workspace path (optional, derived from assignee if blank)",
logTruncated: "(showing last 100 KB — full log at ",
logAt: ")",
newTaskTitle: "New task — {column}",
taskTitleLabel: "Title",
assigneeLabel: "Assignee",
assigneeLabelHint: "(blank = dispatcher picks)",
skillsLabel: "Skills",
skillsLabelHint: "(optional, comma-separated)",
parentLabel: "Parent task",
parentLabelHint: "(child stays blocked until the parent is done)",
create: "Create",
boardSettings: "Settings",
boardSettingsTitle:
"Board settings — name, description, and the default project directory new tasks inherit",
boardSettingsTitleFor: "Board settings — {name}",
projectDirectoryOverrideHint:
"New tasks inherit this as their workspace default; each task can still override it in the create dialog.",
saving: "Saving…",
commentHint:
"Comments reach the worker on its next run or kanban_show() — no need to block the task first.",
commentHintTitle:
"Comments are the channel for talking to a task's worker. They land on the thread immediately — no need to block the task first. A running worker picks the thread up on its next kanban_show() or respawn; blocking is only for when you want the worker to STOP and wait for your input.",
},
};

View file

@ -826,5 +826,25 @@ export interface Translations {
workspacePathOptional: string;
logTruncated: string;
logAt: string;
// Optional keys added with the modal create-task dialog, board-settings
// dialog, and comment workflow hint. Non-English locales fall back to
// the English literal in the plugin bundle until translated, so these
// are optional to avoid churning every locale file.
newTaskTitle?: string;
taskTitleLabel?: string;
assigneeLabel?: string;
assigneeLabelHint?: string;
skillsLabel?: string;
skillsLabelHint?: string;
parentLabel?: string;
parentLabelHint?: string;
create?: string;
boardSettings?: string;
boardSettingsTitle?: string;
boardSettingsTitleFor?: string;
projectDirectoryOverrideHint?: string;
saving?: string;
commentHint?: string;
commentHintTitle?: string;
};
}