Skip to content

BACK-208/401/419/423/467/473-505 — Wiki, i18n, Gantt, Editor, Statistics & Board Enhancements#669

Open
kuwork wants to merge 45 commits into
MrLesk:mainfrom
kuwork:tasks/combined-208-505
Open

BACK-208/401/419/423/467/473-505 — Wiki, i18n, Gantt, Editor, Statistics & Board Enhancements#669
kuwork wants to merge 45 commits into
MrLesk:mainfrom
kuwork:tasks/combined-208-505

Conversation

@kuwork

@kuwork kuwork commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

BACK-208/401/419/423/467/473-505 — Wiki, i18n, Gantt, Editor, Statistics & Board Enhancements

Summary

This PR consolidates a large batch of features, improvements, and bug fixes developed across multiple branches. It covers significant enhancements to the Web UI (i18n, Gantt views, Kanban, editor capabilities), a full Wiki system for the web interface, date/time management improvements across CLI/TUI/Web/MCP, project health & statistics, and numerous bug fixes.

Previously opened as separate PRs:


Web UI — Internationalization (i18n)

BACK-478 — Add Web UI i18n support (English, Japanese, Chinese Simplified/Traditional)

  • src/web/contexts/I18nContext.tsx: React context for locale state management with config-driven initialization via apiClient.fetchConfig()
  • src/web/hooks/useI18n.ts: convenience hook exposing the t translation dictionary
  • src/web/locales/index.ts: locale registry and dictionary loader supporting en, ja, zh-CN, zh-TW
  • src/web/locales/types.ts: recursive TranslationDict type derived from the English source dictionary
  • src/web/locales/en.ts, ja.ts, zh-CN.ts, zh-TW.ts: full translation dictionaries covering all 30+ UI components
  • src/web/App.tsx & src/web/main.tsx: integrate I18nProvider and sync locale from backlog/config.yml
  • src/web/components/*.tsx: replace all hardcoded UI strings with t.* translations across Board, TaskDetailsModal, MilestonesPage, Settings, WikiDetail, CleanupModal, etc.
  • src/core/backlog.ts, src/types/index.ts, src/file-system/operations.ts: add locale field to BacklogConfig and persist it to config file
  • src/test/assets.test.ts: update test expectations for i18n-related changes
image

Web UI — Documentation & Task Editing

BACK-479 — Add full documentation editing with path autocomplete for references and documentation

  • src/file-system/operations.ts: add listProjectFiles() (secure directory listing with path traversal containment check) and searchProjectFiles() (recursive project file search excluding node_modules, .git, dist, build, .backlog, .locks)
  • src/server/index.ts: add GET /api/list-files and GET /api/search-files endpoints; support documentation array in task update payload
  • src/web/lib/api.ts: add fetchListFiles() and fetchSearchFiles() client methods
  • src/web/components/PathAutocomplete.tsx: new reusable path autocomplete component with keyboard navigation (arrow keys + Enter), directory traversal, URL detection, debounced server search, and click-outside dismissal
  • src/web/components/TaskDetailsModal.tsx: replace read-only documentation display with fully editable list; add inline add/remove for documentation items; replace plain text inputs with PathAutocomplete for both references and documentation fields
  • src/test/filesystem.test.ts: add tests for file listing and search (path traversal rejection, missing directory handling)
image image

BACK-419 — Add Web UI demote-to-draft action

  • src/server/index.ts: add POST /api/tasks/:id/demote endpoint with handleDemoteTask() leveraging core.demoteTask(); broadcast both tasks-updated and drafts-updated WebSocket events to refresh all clients
  • src/web/components/TaskDetailsModal.tsx: add "Demote to Draft" button in preview mode with keyboard shortcut D (when not in an input); integrate with i18n translation strings
  • src/web/lib/api.ts: add demoteTask(id) client API method
  • src/web/locales/en.ts, ja.ts, zh-CN.ts, zh-TW.ts: add demote-related translation keys
  • src/test/server-demote-endpoint.test.ts: add endpoint tests covering success, task not found, and lock conflict (409) scenarios
image

BACK-423 — Add folder grouping for docs in Web UI

  • src/types/index.ts: add DocsTreeNode type for recursive docs folder tree structure
  • src/file-system/operations.ts: add getDocsTree() (filesystem walk including empty directories) and createDocsFolder() (with path traversal containment check)
  • src/server/index.ts: add GET /api/docs/tree and POST /api/docs/folder endpoints
  • src/web/lib/api.ts: add fetchDocsTree() and createDocsFolder() client methods
  • src/web/App.tsx: load docsTree in parallel with other data and pass through component tree
  • src/web/components/Layout.tsx: forward docsTree prop to SideNavigation
  • src/web/components/SideNavigation.tsx: replace flat document list with recursive DocTreeItem component; add DocActionDropdown per-folder menu (create file / create folder); add expand/collapse with localStorage persistence; fix vertical alignment of dropdown trigger buttons; remove rename option from Wiki section header dropdown
  • src/web/components/DocumentationDetail.tsx: support ?path query parameter on /documentation/new to pre-fill target folder

getDocsTree() walks the filesystem directly instead of deriving from the docs array so that empty folders are visible and can be created before any document exists inside them. Documents do not need a standalone rename action in the sidebar because saveDocument() already handles title changes by renaming the file automatically.


Web UI — Wiki System

BACK-473 — Add wiki section to web UI with file tree navigation

  • src/types/index.ts: add WikiTreeNode and WikiPage types
  • src/file-system/operations.ts: implement getWikiTree() (recursive directory walker skipping wiki_output/) and readWikiPage() (secure path resolution with containment check + frontmatter parsing)
  • src/server/index.ts: add GET /api/wiki/tree and GET /api/wiki/* handlers (multi-segment path via decodeURIComponent, matching existing /assets/* pattern)
  • src/web/lib/api.ts: add fetchWikiTree() and fetchWikiPage(path) client methods
  • src/web/App.tsx: register /wiki and /wiki/* routes
  • src/web/components/SideNavigation.tsx: add collapsible wiki file tree section below Documents with chevron toggle, wiki icon, item count, and recursive WikiTreeItem rendering
  • src/web/components/WikiDetail.tsx: create read-only markdown viewer reusing MermaidMarkdown + MDEditor preview with dark mode support, YAML frontmatter extraction for page header
  • src/test/filesystem.test.ts: add tests for wiki tree building and wiki page reading (path traversal rejection, missing file handling)
image PixPin_2026-05-10_00-32-14

BACK-474 — Add backlog wiki install <agent> CLI command

  • src/cli.ts: register wiki command group with install <agent> subcommand (--force, --dry-run options)
  • src/commands/wiki-install.ts: core implementation with agent alias mapping (claude.claude/skills/, codex.codex/skills/, agents.agents/skills/), symlink architecture with fallback to direct copy on Windows, overwrite protection, and SKILL.md frontmatter parsing for summary output
  • scripts/embed-wiki-skill.ts: build-time script scanning .codex/skills/llm-wiki-for-backlog/ and generating src/skills/embedded/llm-wiki-for-backlog.ts
  • src/skills/embedded/llm-wiki-for-backlog.ts: generated embedded skill files map for compiled binary availability
  • src/completions/helper.ts: add agent argument completions (claude, codex, agents)
  • src/guidelines/agent-guidelines.md: add new command reference
  • src/test/wiki-install.test.ts: 12 unit tests covering resolveAgent, installWikiSkill, dry-run, force overwrite, symlink handling, and result formatting

BACK-477 — Add wiki online editing, file change monitoring, folder-based page creation, and labels support

  • src/file-system/operations.ts: add saveWikiPage() (writes content/title/labels frontmatter, sets updated_date), createWikiPage() (creates files with title, created_date, optional labels), createWikiFolder() (pure empty folders), renameWikiItem() (file/folder rename with path traversal checks)
  • src/core/content-store.ts: add createWikiWatcher() — recursive fs.watch() on backlog/wiki/, broadcasts "tasks" notification → WebSocket "tasks-updated" → live UI refresh
  • src/server/index.ts: add PUT /api/wiki/* (update page), POST /api/wiki (create page/folder), PATCH /api/wiki/* (rename item)
  • src/web/lib/api.ts: add updateWikiPage(), createWikiPage(), createWikiFolder(), renameWikiItem() client methods
  • src/web/App.tsx: integrate wikiTree into global state; loadAllData() fetches wiki tree in parallel with tasks/docs/decisions
  • src/web/components/WikiDetail.tsx: inline editing with Edit/Save/Cancel lifecycle; large title input + PasteAwareMDEditor; hasChanges tracking (content / title / labels); labels displayed as badges in view mode, editable via ChipInput in edit mode
  • src/web/components/SideNavigation.tsx: props-driven wiki tree; hover-reveal WikiActionDropdown on folders/files/root header; "Create file", "Create folder", "Rename" actions; folder file count; auto-navigation after create/rename
  • Frontmatter: title + created_date on creation, updated_date on every save; labels array replaces single type field for flexible categorization (consistent with task labels)
image image

BACK-481 — Add wiki to web search

  • src/cli.ts: add --wiki flag to search command
  • src/core/content-store.ts: add wiki content to search index updates
  • src/core/search-service.ts: include wiki pages in search results with proper scoring
  • src/file-system/operations.ts: add searchWikiPages() for full-text search within wiki content
  • src/server/index.ts: expose wiki search via existing search endpoint
  • src/types/index.ts: add wiki result types to search response union
  • src/web/components/SideNavigation.tsx: highlight wiki search results
  • src/web/utils/search-command-query.ts: update search query parsing to support wiki scope

BACK-482 — Fix wikilink and Markdown relative link preview in wiki pages

  • src/file-system/operations.ts: add resolveWikiPath() with path traversal containment and relative path resolution
  • src/server/index.ts: add GET /api/wiki/resolve endpoint for path resolution
  • src/test/resolve-wiki-path.test.ts: 57 lines covering relative link resolution and path traversal rejection
  • src/web/components/WikiDetail.tsx: rewrite link click handler to intercept [[wikilink]] and relative [text](path.md) links, resolve server-side, and navigate via React Router without full page reload

BACK-488 — Fix wiki pasted images not moved to paste directory on save

  • src/web/components/WikiDetail.tsx: on save, scan content for temp asset URLs, call the existing asset promotion API, and rewrite URLs from .temp/ to paste/ before persisting the markdown
  • Ensures images pasted into wiki editors are promoted from .temp/ to permanent storage on save, matching the behavior of task and document editors

Web UI — Editor & Paste Enhancements

BACK-208 — Add paste-as-markdown support in Web UI

Implements automatic conversion of rich text content to Markdown when pasting into task and document editors in the Web UI. Users can now seamlessly paste content from Word, Google Docs, web pages, and other sources while maintaining proper Markdown formatting. Delivered in two phases:

Phase 1 — Text, Tables, Lists, Formatting: A new PasteAwareMDEditor wrapper intercepts onPaste events, detects rich-text HTML on the clipboard, cleans Word-specific garbage, and converts to Markdown via Turndown with GFM support.

Phase 2 — Images: Pasted images (screenshots, HTML <img> tags, data URIs) are extracted, uploaded to backlog/assets/.temp/, and promoted to permanent storage on save. This avoids orphaned images and base64 bloat that would cause textarea lag.

Also includes three bugfixes (2026-05-09) for Excel table paste not converting to Markdown, Excel paste losing screenshot images, and Word file:// image references.

  • src/core/assets.ts: AssetManager with upload, promote, cleanup, and downloadImage security rules (SSRF protection, redirect limits, size limits, content-type validation)
  • src/server/index.ts: POST /api/assets/upload, POST /api/assets/promote, POST /api/assets/download-image handlers
  • src/web/components/PasteAwareMDEditor.tsx: paste interception wrapper for MDEditor
  • src/web/components/TaskDetailsModal.tsx & DocumentationDetail.tsx: integrate PasteAwareMDEditor
  • src/web/utils/paste-as-markdown.ts: HTML → Markdown conversion with Word/Excel cleanup, image extraction, base64 handling, remote image download
  • src/test/assets.test.ts & src/test/server-upload-promote.test.ts: automated tests for asset lifecycle and security rules

BACK-475 — Add Word (docx) upload to enable image extraction for pasted Word content

Allow users to upload Word documents (.docx) directly into the Web UI editor. The backend extracts text and images, converting them to Markdown with proper image references.

The existing paste-as-markdown feature (BACK-208) cannot extract images from pasted Word content because browser clipboard APIs don't expose embedded images as extractable blobs. By supporting direct .docx file upload, mammoth can read the docx archive and extract embedded images to the temp assets directory.

  • Backend (src/core/docx-converter.ts): New module using mammoth to convert .docx → HTML. Embedded images are extracted via mammoth's convertImage callback and uploaded to backlog/assets/.temp/ via AssetManager.
  • Backend (src/server/index.ts): New POST /api/docx/convert endpoint. Accepts multipart/form-data, validates .docx extension, returns { html, images, messages }.
  • Frontend (src/web/components/PasteAwareMDEditor.tsx): Added Word upload button to editor toolbar (extraCommands), drag-and-drop support, and a hidden file picker. Uploads file to backend, then runs cleanHtml + Turndown in the browser to produce Markdown.
  • Frontend (src/web/utils/paste-as-markdown.ts): Extracted cleanHtml as an exported async function with a new keepMedia option. This allows the docx upload path to preserve server-side extracted images while the paste path continues to filter invalid local images.
  • Frontend (src/web/lib/api.ts): Added convertDocx() API client method.
  • Tests (src/test/server-docx-convert.test.ts): Integration tests for the conversion endpoint (validation, conversion, image extraction to temp directory).
  • Dependencies: Added mammoth for docx parsing.

BACK-476 — Fix inline code HTML escaping in markdown renderer

Fixes double HTML-entity encoding inside inline code and fenced code blocks across all views that use the MermaidMarkdown renderer (wiki, task details, documentation, decisions, and file previews).

The sanitizeMarkdownSource helper was escaping < to &lt; indiscriminately across the entire markdown source. Because code regions are already rendered verbatim by the Markdown engine, this caused users to see &lt;id&gt; instead of <id> inside inline code like `<id>`.

The fix collects protected ranges for fenced code blocks and inline code spans before running the < escape replacement, skipping any match that falls inside a code region.

  • src/web/components/MermaidMarkdown.tsx: add protected-range logic for code blocks and inline code

BACK-467 — Add local file preview with syntax highlighting and line numbers

  • src/file-system/operations.ts: add readFilePreview() with configurable line limit, safe path resolution, and MIME type detection
  • src/server/index.ts: add GET /api/files/preview endpoint
  • src/web/components/FilePreviewModal.tsx: new modal with syntax-highlighted code display, line numbers, and dark mode support
  • src/web/components/MermaidMarkdown.tsx: intercept local file links and open preview modal instead of navigating away
  • src/web/components/TaskDetailsModal.tsx: integrate file preview for reference links
  • src/test/filesystem.test.ts: tests for preview path traversal rejection and line limiting

Web UI — Board, Kanban & Gantt

BACK-480 — Fix WebUI milestone page search fuzzy matching false positives

  • src/web/components/MilestonesPage.tsx: introduce three-tier search strategy — exact ID match → substring match (title/id contains query) → Fuse fuzzy search with threshold: 0.35; this eliminates false positives on short queries; fix unassigned section to show all search results instead of filtering out completed tasks during active search
  • src/test/web-milestones-page-search.test.tsx: update tests for new three-tier search behavior
  • src/test/web-milestones-page-unassigned-filter.test.tsx: adjust unassigned filter tests for search-active display behavior

BACK-484 — Web UI sort optimization

  • src/web/components/MilestonesPage.tsx: optimize sort indicator rendering and reduce re-renders during drag-and-drop
  • src/web/components/TaskColumn.tsx: virtualized sort handling with stable identity keys
  • src/web/components/TaskList.tsx: deduplicate sort callbacks
  • src/test/web-task-column-sort.test.tsx: update tests for optimized sort behavior

BACK-491 — Add Smart Gantt View

  • src/web/components/GanttView.tsx: new interactive Gantt chart with zoom (day/week/month/quarter/year), drag-to-scroll, today marker, dependency arrows, and dark mode
  • src/web/components/SideNavigation.tsx: add Gantt navigation entry with icon
  • src/web/App.tsx: register /gantt route
  • src/web/locales/*.ts: add Gantt-related translation keys

BACK-492 — Add actualStart and actualEnd fields for tasks with auto-population on status change

  • src/types/index.ts: add actualStart and actualEnd optional date fields to Task
  • src/core/backlog.ts: auto-populate actualStart on first non-todo status change; auto-populate actualEnd on completion
  • src/utils/status.ts: add status transition hooks for date auto-population
  • src/web/components/TaskDetailsModal.tsx: display and edit actual dates
  • src/cli.ts & src/commands/task-wizard.ts: support actual dates in CLI create/edit
  • src/mcp/tools/tasks/handlers.ts: expose actual dates in MCP
  • src/test/markdown.test.ts: test round-trip serialization of actual dates

BACK-493 — Add actualStart and actualEnd support for milestones

  • src/types/index.ts: add actualStart and actualEnd to Milestone
  • src/core/backlog.ts: milestone CRUD supports actual dates
  • src/cli.ts: milestone commands accept --actual-start and --actual-end
  • src/mcp/tools/milestones/handlers.ts & schemas.ts: MCP milestone tools support actual dates
  • src/web/components/MilestonesPage.tsx: display and edit milestone actual dates
  • src/server/index.ts: milestone update endpoint accepts actual dates
  • src/test/mcp-milestones.test.ts: update MCP tests for new fields

BACK-494 — Fix task edit modal keyboard shortcuts interfering with title input

  • src/web/utils/keyboard.ts: new helper to detect when focus is inside an input/textarea/contenteditable
  • src/web/utils/keyboard.test.ts: 42 lines of unit tests for focus detection
  • src/web/components/TaskDetailsModal.tsx: guard all modal-level keyboard shortcuts (Esc, S, D, etc.) with !isEditingText() check

BACK-495 — Implement tracking Gantt view with plan vs actual comparison

  • src/web/components/GanttView.tsx: add tracking mode showing planned bars alongside actual bars; color-coded overdue/at-risk/completed states; plan-actual delta tooltips
  • src/web/locales/*.ts: add tracking Gantt translation keys
  • Milestone/task actual dates feed into tracking visualization

BACK-496 — Fix subtask grouping under parent task for ID sorting across all views

  • src/utils/task-sorting.ts: new shared sort utility ensuring subtasks are visually grouped under their parent when sorting by ID
  • src/web/components/GanttView.tsx, MilestonesPage.tsx, TaskColumn.tsx, TaskList.tsx: replace inline sort with shared utility
  • src/test/task-sorting.test.ts: 73 lines of tests covering subtask grouping edge cases

BACK-498 — Auto-populate actualStart and actualEnd on task creation

  • src/core/backlog.ts: when creating a task with status already set (e.g. via wizard), immediately populate actualStart and/or actualEnd based on the initial status
  • Prevents missing actual dates for tasks created directly in "in-progress" or "completed" state

BACK-499 — Fix sidebar collapse button overlapping resize handle

  • src/web/components/SideNavigation.tsx: adjust z-index and padding so the collapse chevron no longer overlaps the resize drag handle
  • Improves usability on narrow viewports

BACK-500 — Kanban label color customization and card label overflow

  • src/types/index.ts: add labelColors map to config
  • src/file-system/operations.ts: persist label color preferences
  • src/web/components/LabelFilterDropdown.tsx: color picker with preset palette and custom hex input
  • src/web/components/TaskCard.tsx: respect custom label colors; truncate overflowing labels with +N overflow indicator
  • src/web/utils/labelColors.ts: new utility for color contrast calculation and palette management
  • src/test/web-task-list-labels-menu.test.tsx: update label menu tests for color customization

BACK-501 — Task detail label input needs dropdown with fuzzy filter

  • src/web/components/ChipInput.tsx: major refactor — add dropdown menu with fuzzy search (fuse.js), keyboard navigation, create-on-enter for new labels
  • src/web/components/TaskDetailsModal.tsx: replace plain text label input with new ChipInput
  • Improves label discoverability and reduces typos

BACK-504 — Fix kanban drag-and-drop column sort reset and cross-column drop positioning

  • src/web/components/Board.tsx: preserve column sort order during re-renders
  • src/web/components/TaskColumn.tsx: fix drop index calculation when dragging across columns; prevent sort reset on task update
  • src/web/styles/style.css: add drop-target visual indicator
  • src/core/assets.ts & src/file-system/operations.ts: minor type fixes exposed by stricter TS checks
drag

BACK-505 — Add drill-down navigation for task dependencies in Web UI

  • src/web/App.tsx: add /task/:id standalone route for direct task navigation
  • src/web/components/DependencyInput.tsx: add click-to-navigate on dependency chips
  • src/web/components/TaskDetailsModal.tsx: add "Open in Full View" link; render dependency tasks as clickable cards
  • src/web/components/Modal.tsx: support nested modal stacking for dependency drill-down
  • Users can now click any dependency to open its details, and continue drilling down through the dependency graph
drill-down

CLI, TUI, MCP & Core — Date/Time & Project Health

BACK-401 — Add dueDate, plannedStart, and plannedEnd support for tasks and milestones across CLI, TUI, Web, and MCP

  • src/types/index.ts: add dueDate, plannedStart, plannedEnd optional fields to Task and Milestone
  • src/core/backlog.ts: CRUD operations support new date fields
  • src/cli.ts & src/commands/task-wizard.ts: CLI create/edit commands accept --due-date, --planned-start, --planned-end
  • src/mcp/tools/tasks/handlers.ts & milestones/handlers.ts: MCP tools expose new date fields
  • src/mcp/tools/milestones/schemas.ts: update Zod schemas for milestone date fields
  • src/web/components/TaskDetailsModal.tsx & MilestonesPage.tsx: date pickers for all new fields
  • src/markdown/parser.ts & serializer.ts: round-trip markdown serialization of new date fields
  • src/test/markdown.test.ts: 95 lines covering date field serialization
  • src/guidelines/agent-guidelines.md: update agent guidelines with new date field documentation

BACK-487 — Fix SSL network error not gracefully handled in GitOperations.fetch

  • src/git/operations.ts: wrap fetch() in try/catch; map SSL errors to GitError with user-friendly message
  • src/test/git.test.ts: 32 lines testing SSL error handling
  • Prevents CLI from crashing with unhandled exceptions when network SSL certificates are invalid or missing

BACK-489 — Refactor project health indicators to support at-risk, overdue, and stale categories with dueDate awareness

  • src/core/statistics.ts: add calculateHealth() with at-risk (dueDate approaching), overdue (past dueDate), and stale (no activity) categories
  • src/web/components/Statistics.tsx: new health dashboard with color-coded cards and trend sparklines
  • src/web/components/TaskCard.tsx: add health indicator dot to task cards
  • src/web/locales/*.ts: add health category translations
  • src/test/statistics.test.ts: 128 lines covering health calculation edge cases
image

BACK-490 — Add CLI overview command for project-level task statistics

  • src/commands/overview.ts: new backlog overview command with --watch, --format, and --output options
  • src/ui/overview-tui.ts: interactive TUI for real-time project statistics
  • src/core/statistics.ts: add getProjectOverview() aggregating task counts by status, health, milestone, and label
  • src/test/stats-command.test.ts: 195 lines of CLI overview tests
  • src/guidelines/agent-guidelines.md: document new command for agents

BACK-497 — Fix inconsistent timezone handling between CLI and web UI

  • src/utils/date-utc.ts: new shared utility for UTC-normalized date parsing, formatting, and comparison
  • src/board.ts, src/core/backlog.ts, src/core/statistics.ts, src/core/task-loader.ts: migrate all date operations to date-utc helpers
  • src/web/components/CleanupModal.tsx, DraftsList.tsx, GanttView.tsx: web UI uses same UTC logic
  • src/web/utils/date-display.ts: remove duplicated local date formatting; delegate to shared utility
  • Eliminates off-by-one-day bugs when server and client are in different timezones

BACK-502 — Sync llm-wiki-for-backlog SKILL.md updates to embedded code

  • src/skills/embedded/llm-wiki-for-backlog.ts: regenerate embedded skill files to match latest .codex/skills/llm-wiki-for-backlog/SKILL.md
  • Includes updated ingestion rules, wikilink format constraints, and git-aware incremental ingestion guidance
  • scripts/embed-wiki-skill.ts: build-time script ensures embedded copy stays in sync

BACK-503 — Task completion in the last year

  • src/core/statistics.ts: add getCompletionTrend() for year-over-year and rolling-12-month completion analytics
  • src/server/index.ts: add GET /api/statistics/completion-trend endpoint
  • src/web/components/Statistics.tsx: new chart section showing monthly completion bars and year comparison
  • src/web/lib/api.ts: add fetchCompletionTrend() client method
  • src/web/locales/*.ts: add completion trend translations
  • src/test/statistics.test.ts: add tests for trend calculation with partial-year data

Web UI — Layout & Navigation

BACK-483 — Sidebar resize and search type dropdown

  • src/web/components/SideNavigation.tsx: add drag-to-resize handle with localStorage width persistence; add search type dropdown (task / doc / wiki / all)
  • src/web/components/WikiDetail.tsx: sidebar width responsive to resize
  • src/web/lib/api.ts: add search scope parameter
  • src/web/utils/urlHelpers.ts: new URL helpers for search state serialization

Task Checklist

  • All corresponding tasks exist in backlog/tasks/
  • All tasks have clear acceptance criteria
  • Implementation plans added where applicable
  • All acceptance criteria are marked as completed

Testing

  • bun test — full suite passes
  • bunx tsc --noEmit — clean
  • bun run check . — clean (Biome format + lint)
  • Individual test coverage:
    • src/test/assets.test.ts
    • src/test/server-upload-promote.test.ts
    • src/test/server-docx-convert.test.ts
    • src/test/filesystem.test.ts
    • src/test/wiki-install.test.ts
    • src/test/markdown.test.ts
    • src/test/mcp-milestones.test.ts
    • src/test/statistics.test.ts
    • src/test/stats-command.test.ts
    • src/test/task-sorting.test.ts
    • src/test/web-milestones-page-search.test.tsx
    • src/test/web-milestones-page-unassigned-filter.test.tsx
    • src/test/web-task-column-sort.test.tsx
    • src/test/web-task-list-labels-menu.test.tsx
    • src/test/resolve-wiki-path.test.ts
    • src/test/git.test.ts
    • src/test/server-demote-endpoint.test.ts
    • src/test/keyboard.test.ts (via src/web/utils/keyboard.test.ts)

Related Tasks

Closes:

  • BACK-208
  • BACK-401
  • BACK-419
  • BACK-423
  • BACK-467
  • BACK-473
  • BACK-474
  • BACK-475
  • BACK-476
  • BACK-477
  • BACK-478
  • BACK-479
  • BACK-480
  • BACK-481
  • BACK-482
  • BACK-483
  • BACK-484
  • BACK-485
  • BACK-486
  • BACK-487
  • BACK-488
  • BACK-489
  • BACK-490
  • BACK-491
  • BACK-492
  • BACK-493
  • BACK-494
  • BACK-495
  • BACK-496
  • BACK-497
  • BACK-498
  • BACK-499
  • BACK-500
  • BACK-501
  • BACK-502
  • BACK-503
  • BACK-504
  • BACK-505

kuwork added 30 commits May 9, 2026 23:38
(cherry picked from commit cdf34a9318650ab731ec0e2755158bd24fc7e914)
- Add .codex/skills/llm-wiki-for-backlog/ as the canonical skill source directory
  (SKILL.md, usermanual-writing-guide.md, merge.py)
- Add CRITICAL wikilink format rules: index.md tables must use [[path/to/file]]
  instead of standard Markdown links [text](path.md)
- Include wrong/correct examples for internal wiki page links
- Update AGENTS.md wiki guidelines with the same wikilink constraints
- Regenerate src/skills/embedded/llm-wiki-for-backlog.ts (3 files embedded)
…elated sections

(cherry picked from commit be8994d4715c77ad1f089bfae901de72ecd006c0)
…ning files display the file count on the right.
…s and milestones across CLI, TUI, Web, and MCP
…rdue, and stale categories with dueDate awareness
kuwork added 13 commits June 2, 2026 11:18
* wiki-fixed: (44 commits)
  BACK-505 - Add drill-down navigation for task dependencies in Web UI
  BACK-504 - Fix kanban drag-and-drop column sort reset and cross-column drop positioning
  BACK-503 - Task completion in the last year
  BACK-502 - Sync llm-wiki-for-backlog SKILL.md updates to embedded code
  BACK-501 - Task detail label input needs dropdown with fuzzy filter
  BACK-500 - Kanban label color customization and card label overflow
  BACK-499 - Fix sidebar collapse button overlapping resize handle
  BACK-498 - Auto-populate actualStart and actualEnd on task creation
  BACK-497 - Fix inconsistent timezone handling between CLI and web UI
  BACK-496 - Fix subtask grouping under parent task for ID sorting across all views
  BACK-495 - Implement tracking Gantt view with plan vs actual comparison
  BACK-493 - Add actualStart and actualEnd support for milestones
  BACK-494 - Fix task edit modal keyboard shortcuts interfering with title input
  BACK-492 - Add actualStart and actualEnd fields for tasks with auto-population on status change
  BACK-491 -  Add Smart Gantt View
  Fix Task Time Problem
  BACK-490 - Add CLI overview command for project-level task statistics
  BACK-489 - Refactor project health indicators to support at-risk, overdue, and stale categories with dueDate awareness
  BACK-488 - Fix wiki pasted images not moved to paste directory on save
  BACK-401 - Add dueDate, plannedStart, and plannedEnd support for tasks and milestones across CLI, TUI, Web, and MCP
  ...

# Conflicts:
#	bun.lock
@kuwork

kuwork commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

Hey @MrLesk ,please take a look and merge. This is a big change, but I've referenced ideas from other forks. I think it's necessary — please accept it.

@MrLesk

MrLesk commented Jun 2, 2026

Copy link
Copy Markdown
Owner

Hey @kuwork. Thank you for the PR but I can't review a single PR that touches so many things at once.

Please split them into single PRs that have a clear scope so that I can understand your intent in each of them.

@kuwork

kuwork commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

@MrLesk Thanks for your feedback. As required, I created a task for each change. Every task already has a detailed description and the changes I made, and the PR also includes a demo. Splitting them into multiple PRs would unfortunately create more work for us. I hope we can keep it as one PR if possible. After all, I've really put a lot of effort into making these functional improvements.

@kuwork kuwork mentioned this pull request Jun 2, 2026
@MrLesk

MrLesk commented Jun 2, 2026

Copy link
Copy Markdown
Owner

I totally understand the effort that you put into it and I am happy to review the PRs once they are split.

I need to be able to verify the code that builds each task and right now it would be impossible for me to understand what code paths belong to each of the tasks.

I hope you can understand.

@kuwork

kuwork commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

@MrLesk I‘m Sorry, I understand your concern. But splitting would still create many dependent PRs and baseline issues — that would create a lot of extra merging work. I really don't want to split it. You could use SourceTree to quickly check the file changes — temporarily merging or cherry-picking intermediate commits would let you review them. But my suggestion is to directly verify whether the final code meets the purpose description and changes for each task.

@MrLesk

MrLesk commented Jun 2, 2026

Copy link
Copy Markdown
Owner

There are good reasons why it is not recommended to create such big PRs.

The main purpose of PRs is to review the quality of the code and catch bugs. Also if there are architectural decisions that are not consistent with the codebase, I can give you feedback on a narrowly scoped PR. Here I simply can't.

I won't be able to review this PR as it is. Thanks for understanding

@MrLesk

MrLesk commented Jun 9, 2026

Copy link
Copy Markdown
Owner

Hi @kuwork — following up on the discussion above: this PR has now been split into a stack of nine scoped PRs so each area can be reviewed properly.

None of your work was lost, and you remain the git author of every commit. All 44 commits were rebased onto current main as-is — the changes stay attributed to you in git history, on each PR, and in your contribution graph once they merge.

The stack (each PR builds on the previous one):

A few small adjustments were needed to fit the code onto current main (mainly overlaps with the recently merged task comments feature and type-check fixes) — each one is documented transparently in the corresponding PR description.

The PRs are drafts while review proceeds; each will be reviewed individually and some slices will likely need changes before they can merge. If you'd like to address review feedback yourself, you can open PRs from your fork targeting the corresponding pr669/N-* branch.

Thanks again for the substantial work that went into this.

— Alex's agent

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.

2 participants