Skip to content

feat(extension): complete VS Code extension with kanban board interface#997

Merged
Crunchyman-ralph merged 62 commits intoeyaltoledano:nextfrom
DavidMaliglowka:chore/create.scaffolding.for.vscode.extension
Aug 1, 2025
Merged

feat(extension): complete VS Code extension with kanban board interface#997
Crunchyman-ralph merged 62 commits intoeyaltoledano:nextfrom
DavidMaliglowka:chore/create.scaffolding.for.vscode.extension

Conversation

@DavidMaliglowka
Copy link
Contributor

@DavidMaliglowka DavidMaliglowka commented Jul 17, 2025

Description

This PR implements a complete VS Code extension that provides a visual Kanban board interface for Task Master projects. Building on the scaffolding from PR #989, this delivers a production-ready extension with React-based UI, MCP integration for real-time synchronization, and professional CI/CD workflows for marketplace publishing.

Type of Change

  • New feature
  • Breaking change
  • Documentation update

Testing

  • I have tested this locally
  • All existing tests pass
  • I have added tests for new functionality

Changeset

  • I have created a changeset (or this change doesn't need one)

Additional Notes

  • Complete VS Code extension with React-based kanban board UI
  • MCP integration for real-time Task Master synchronization
  • Professional CI/CD workflows for marketplace publishing
  • Comprehensive configuration system with user preferences
  • ShadCN UI components with VS Code theme integration
  • Drag-and-drop task management with status transitions
  • AI-powered task features via MCP protocol
  • Robust error handling and connection management
  • Multi-registry publishing (VS Code Marketplace + Open VSX)

BREAKING CHANGE: Extension requires publisher setup and marketplace keys

Publisher and extension naming decisions required:

  • Update publisher field from placeholder 'DavidMaliglowka'
  • Choose unique extension name (currently 'taskr-kanban')
  • Select appropriate extension icon
  • Configure CI secrets (VSCE_PAT, OVSX_PAT) for publishing

See apps/extension/docs/ for detailed setup instructions

Summary by CodeRabbit

  • New Features

    • Added TaskMaster AI VS Code extension with interactive Kanban board, drag-and-drop task management, AI-driven task editing, and real-time synchronization.
    • Introduced rich task details including subtasks, dependencies, complexity scores, and priority badges.
    • Implemented configuration UI for TaskMaster settings and integrated MCP server connectivity with robust connection management.
    • Added sidebar webview and main panel webview with command palette integration.
    • Enabled multi-tag support with tag switching and isolated workflows.
    • Included detailed error handling, notifications, and user recovery actions.
    • Introduced comprehensive React UI components including badges, buttons, cards, collapsibles, dropdown menus, labels, scroll areas, separators, and kanban boards with drag-and-drop.
    • Added webview and sidebar entry points with state management, error boundaries, and toast notifications.
    • Implemented background caching, polling strategies, and adaptive polling for performance optimization.
    • Provided task repository with caching and event notifications.
    • Added detailed task metadata sidebar and task editing modal.
    • Integrated configuration management with validation, import/export, and persistence.
    • Added connection manager with health monitoring and automatic reconnection.
    • Included logging utilities for extension and webview environments.
  • Documentation

    • Added extensive README, changelog, development guides, CI/CD setup, and usage instructions.
    • Provided detailed extension development and packaging documentation.
    • Added in-extension documentation for configuration and development workflows.
  • Style

    • Developed comprehensive React UI components with Tailwind CSS and VS Code theming integration for consistent, accessible design.
    • Styled webview with custom scrollbar, theme integration, and responsive layouts.
  • Tests

    • Added initial extension test suite.
  • Chores

    • Established GitHub Actions workflows for CI, build, packaging, and automated publishing to VS Code Marketplace and Open VSX Registry.
    • Added scripts for automated tagging and release management.
    • Updated configuration files, ignore rules, and versioning workflows for streamlined development.
    • Implemented caching, polling strategies, and logging utilities to improve performance and diagnostics.
    • Configured TypeScript and linter settings for modern development standards.
    • Added build scripts using esbuild for extension and webviews with watch mode support.

github-actions bot and others added 18 commits July 14, 2025 11:28
* fix: prevent CLAUDE.md overwrite by using imports

- Copy Task Master instructions to .taskmaster/CLAUDE.md
- Add import section to user's CLAUDE.md instead of overwriting
- Preserve existing user content
- Clean removal of Task Master content on uninstall

Closes eyaltoledano#929

* chore: add changeset for Claude import fix
…edano#968)

* feat: add task master (tm) custom slash commands

Add comprehensive task management system integration via custom slash commands.
Includes commands for:
- Project initialization and setup
- Task parsing from PRD documents
- Task creation, update, and removal
- Subtask management
- Dependency tracking and validation
- Complexity analysis and task expansion
- Project status and reporting
- Workflow automation

This provides a complete task management workflow directly within Claude Code.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: add changeset

---------

Co-authored-by: neno-is-ooo <204701868+neno-is-ooo@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
* chore: create extension scaffolding

* chore: fix workspace for changeset

* chore: fix package-lock
…ano#980)

* add .mcp.json with claude profile

* add changeset

* update changeset

* update test
…oledano#978)

* feat: complete Groq provider integration and add Kimi K2 model

- Add missing getRequiredApiKeyName() method to GroqProvider class
- Register GroqProvider in ai-services-unified.js PROVIDERS object
- Add Groq API key handling to config-manager.js (isApiKeySet and getMcpApiKeyStatus)
- Add GROQ_API_KEY to env.example with format hint
- Add moonshotai/kimi-k2-instruct model to Groq provider ($1/$3 per 1M tokens, 16k max)
- Fix import sorting for linting compliance
- Add GroqProvider mock to ai-services-unified tests

Fixes missing implementation pieces that prevented Groq provider from working.

* chore: improve changeset

---------

Co-authored-by: Ben Vargas <ben@example.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
…#973)

* Amp profile + tests

* generatlize to Agent instead of Claude Code to support any agent

* add changeset

* unnecessary tab formatting

* fix exports

* fix formatting
…#972)

* add OLLAMA_API_KEY

* add missing API keys

* add changeset

* update keys and fix OpenAI comment

* chore: create extension scaffolding (eyaltoledano#989)

* chore: create extension scaffolding

* chore: fix workspace for changeset

* chore: fix package-lock

* feat(profiles): Add MCP configuration to Claude Code rules (eyaltoledano#980)

* add .mcp.json with claude profile

* add changeset

* update changeset

* update test

* fix: show command no longer requires complexity report to exist (eyaltoledano#979)

Co-authored-by: Ben Vargas <ben@example.com>

* feat: complete Groq provider integration and add Kimi K2 model (eyaltoledano#978)

* feat: complete Groq provider integration and add Kimi K2 model

- Add missing getRequiredApiKeyName() method to GroqProvider class
- Register GroqProvider in ai-services-unified.js PROVIDERS object
- Add Groq API key handling to config-manager.js (isApiKeySet and getMcpApiKeyStatus)
- Add GROQ_API_KEY to env.example with format hint
- Add moonshotai/kimi-k2-instruct model to Groq provider ($1/$3 per 1M tokens, 16k max)
- Fix import sorting for linting compliance
- Add GroqProvider mock to ai-services-unified tests

Fixes missing implementation pieces that prevented Groq provider from working.

* chore: improve changeset

---------

Co-authored-by: Ben Vargas <ben@example.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>

* docs: Auto-update and format models.md

* feat: Add Amp rule profile with AGENT.md and MCP config (eyaltoledano#973)

* Amp profile + tests

* generatlize to Agent instead of Claude Code to support any agent

* add changeset

* unnecessary tab formatting

* fix exports

* fix formatting

* feat: Add Zed editor rule profile with agent rules and MCP config (eyaltoledano#974)

* zed profile

* add changeset

* update changeset

---------

Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: Ben Vargas <ben@vargas.com>
Co-authored-by: Ben Vargas <ben@example.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…ledano#970)

* add opencode to profile lists

* add opencode profile / modify mcp config after add

* add changeset

* not necessary; main config being updated

* add issue link

* add/fix tests

* fix url and docsUrl

* update test for new urls

* fix formatting

* update/fix tests
* chore: add coderabbit configuration

* chore: fix coderabbit config

* chore: improve coderabbit config

* chore: more coderabbit reviews

* chore: remove all defaults
- Complete VS Code extension with React-based kanban board UI
- MCP integration for real-time Task Master synchronization
- Professional CI/CD workflows for marketplace publishing
- Comprehensive configuration system with user preferences
- ShadCN UI components with VS Code theme integration
- Drag-and-drop task management with status transitions
- AI-powered task features via MCP protocol
- Robust error handling and connection management
- Multi-registry publishing (VS Code Marketplace + Open VSX)
- Security audit completed with hardcoded paths removed

BREAKING CHANGE: Extension requires publisher setup and marketplace keys

Publisher and extension naming decisions required:
- Update publisher field from placeholder 'DavidMaliglowka'
- Choose unique extension name (currently 'taskr-kanban')
- Select appropriate extension icon
- Configure CI secrets (VSCE_PAT, OVSX_PAT) for publishing

See apps/extension/docs/ for detailed setup instructions
- Format all extension files according to project standards
- Add changeset for VS Code extension implementation
- Update package-lock.json dependencies
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 17, 2025

Walkthrough

This change introduces a comprehensive VS Code extension for TaskMaster AI, including its core logic, UI components, webview application, configuration, error handling, caching, and supporting infrastructure. The update adds the entire extension source, build scripts, packaging, CI/CD workflows, documentation, and related configuration files. All code, assets, and documentation necessary for building, testing, and releasing the extension are included.

Changes

Cohort / File(s) Change Summary
CI/CD Workflows
.github/workflows/extension-ci.yml, .github/workflows/extension-release.yml, .github/workflows/release.yml, .github/scripts/release.sh, .github/scripts/tag-extension.mjs
Adds GitHub Actions workflows for CI, release, and extension publishing, including scripts for tagging and release automation.
Extension Packaging & Build
apps/extension/package.json, apps/extension/package.publish.json, apps/extension/package.mjs, apps/extension/esbuild.js, apps/extension/tsconfig.json, apps/extension/.vscodeignore, apps/extension/components.json
Introduces extension manifests, build scripts, TypeScript config, and packaging logic for clean VSIX builds.
Extension Documentation
apps/extension/README.md, apps/extension/CHANGELOG.md, apps/extension/LICENSE, apps/extension/docs/extension-CI-setup.md, apps/extension/docs/extension-development-guide.md
Adds comprehensive documentation: README, changelog, license, CI/CD setup, and development guide.
Extension Assets & Ignore Rules
apps/extension/vsix-build/, .gitignore
Adds ignore rules for build/test artifacts and specifies packaging exclusions/inclusions.
Extension Core Logic
apps/extension/src/extension.ts, apps/extension/src/services/*, apps/extension/src/utils/*
Implements extension activation/deactivation, core services (config, polling, error handling, webview, sidebar), connection and event management, logger, and utility modules.
TaskMaster API & Caching
apps/extension/src/utils/task-master-api/*
Adds the main TaskMaster API wrapper, MCP client, cache manager, data transformers, and type definitions for robust backend integration.
UI Components – Shared & Task Details
apps/extension/src/components/*
Introduces reusable UI components (button, badge, card, breadcrumb, collapsible, dropdown, etc.), Kanban board UI, and detailed task management views (details, subtasks, AI actions, priority, metadata).
Webview Application – Core & Providers
apps/extension/src/webview/App.tsx, apps/extension/src/webview/AppContent.tsx, apps/extension/src/webview/index.tsx, apps/extension/src/webview/sidebar.tsx, apps/extension/src/webview/contexts/VSCodeContext.tsx, apps/extension/src/webview/providers/QueryProvider.tsx, apps/extension/src/webview/constants/index.ts, apps/extension/src/webview/types/index.ts, apps/extension/src/webview/reducers/appReducer.ts
Implements the main webview application, context providers, state management, constants, and type definitions.
Webview Components – Kanban & UI
apps/extension/src/webview/components/*
Adds Kanban board, task card, task edit modal, tag dropdown, empty state, polling status, error boundary, toast notifications, sidebar view, and other UI components.
Webview Hooks & Utilities
apps/extension/src/webview/hooks/*, apps/extension/src/webview/utils/*
Provides React hooks for VS Code messaging, task queries, webview height, and utilities for toast notifications and logging.
Webview Styles
apps/extension/src/webview/index.css
Adds TailwindCSS-based stylesheet integrating VS Code theme variables and custom Kanban UI styles.
Test Suite
apps/extension/src/test/extension.test.ts
Adds a basic test suite for extension testing setup.
Monorepo Root & Lint Config
package.json, .changeset/pre.json, .changeset/sour-pans-beam.md, biome.json
Updates workspace configuration, linter settings, and adds changeset release notes.

Sequence Diagram(s)

sequenceDiagram
    participant VSCode as VS Code Host
    participant Extension as TaskMaster Extension
    participant Webview as Kanban Webview
    participant MCP as MCP Server

    VSCode->>Extension: Activate extension
    Extension->>MCP: Connect to MCP server
    MCP-->>Extension: Connection status
    Extension->>VSCode: Register commands, webview, sidebar
    VSCode->>Webview: Open Kanban webview
    Webview->>Extension: Post "ready" message
    Extension->>MCP: Fetch tasks
    MCP-->>Extension: Tasks data
    Extension-->>Webview: Send tasks data
    Webview->>User: Display Kanban board
    User->>Webview: Drag task to new status
    Webview->>Extension: Update task status
    Extension->>MCP: Update task
    MCP-->>Extension: Update result
    Extension-->>Webview: Confirm update
    Webview->>User: Update UI

    Note over Extension,Webview: Similar flows for config, AI actions, subtasks, etc.
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

  • Complexity: Extensive new codebase for a complete VS Code extension, including core logic, UI, webview, API integration, error handling, caching, configuration, documentation, build, and CI/CD.
  • Volume: Dozens of new files across multiple domains (backend, frontend, infra).
  • Scope: Requires review of extension architecture, security (webview, command registration), API integration, UI/UX, error handling, performance (caching, polling), and release automation.
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@changeset-bot
Copy link

changeset-bot bot commented Jul 17, 2025

🦋 Changeset detected

Latest commit: 0345d5a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
extension Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 95

🔭 Outside diff range comments (1)
apps/extension/docs/extension-CI-setup.md (1)

194-195: Update marketplace URL placeholders

The VS Code Marketplace and Open VSX Registry URLs contain [TBD] placeholders that need to be replaced with the actual extension identifier.

Comment on lines 1 to 4
---
"task-master-ai": patch
---
Complete VS Code extension with React-based kanban board UI. MCP integration for real-time Task Master synchronization. Professional CI/CD workflows for marketplace publishing No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

❓ Verification inconclusive

Changeset version bump may be too low & summary a bit long

  1. Rolling out a brand-new feature usually warrants at least a minor bump, not a patch.
  2. Changeset summaries should be a single, imperative sentence. Example:
-"task-master-ai": patch
+ "task-master-ai": minor
...
-Complete VS Code extension with React-based kanban board UI. MCP integration for real-time Task Master synchronization. Professional CI/CD workflows for marketplace publishing
+Add VS Code extension with React kanban UI, real-time MCP sync, and CI/CD publishing

Please verify the semantic versioning impact before merge.


Update changeset to a minor bump and concise summary

The .changeset/upset-places-take.md file should be updated as follows:

  • Bump the version to minor for this new feature.
  • Replace the multi-sentence summary with a single, imperative sentence.
---
-"task-master-ai": patch
+"task-master-ai": minor
---
-Complete VS Code extension with React-based kanban board UI. MCP integration for real-time Task Master synchronization. Professional CI/CD workflows for marketplace publishing
+Add VS Code extension with React-based kanban board UI, real-time MCP sync, and CI/CD publishing workflows
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
---
"task-master-ai": patch
---
Complete VS Code extension with React-based kanban board UI. MCP integration for real-time Task Master synchronization. Professional CI/CD workflows for marketplace publishing
---
"task-master-ai": minor
---
Add VS Code extension with React-based kanban board UI, real-time MCP sync, and CI/CD publishing workflows
🤖 Prompt for AI Agents
In the .changeset/upset-places-take.md file at lines 1 to 4, change the version
bump from "patch" to "minor" to reflect the new feature addition. Also, replace
the current multi-sentence summary with a concise, single imperative sentence
that clearly describes the update.

Comment on lines +4 to +6
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Pass arguments with spread for marginal perf & clarity

clsx expects variadic params; passing the array still works but adds an unnecessary wrapper.

-export function cn(...inputs: ClassValue[]) {
-	return twMerge(clsx(inputs));
+export function cn(...inputs: ClassValue[]) {
+	return twMerge(clsx(...inputs));
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(...inputs));
}
🤖 Prompt for AI Agents
In apps/extension/src/lib/utils.ts around lines 4 to 6, the function cn passes
the inputs array directly to clsx, but clsx expects variadic arguments. Fix this
by spreading the inputs array when calling clsx, changing clsx(inputs) to
clsx(...inputs) for better performance and clarity.

Comment on lines +1 to +2
import { type ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Import style may break on older clsx versions

clsx ≤1.x exposes a default export; named import works only in v2+. If consumers might still be on v1, fall back to default import to avoid TS/esbuild interop edge-cases.

-import { type ClassValue, clsx } from 'clsx';
+import clsx, { type ClassValue } from 'clsx';
🤖 Prompt for AI Agents
In apps/extension/src/lib/utils.ts at lines 1 to 2, the import of `clsx` uses
named imports which only work in clsx version 2 and above. To maintain
compatibility with older clsx versions (1.x) that use a default export, change
the import to use a default import for `clsx` instead of named imports. Adjust
the import statement to import `clsx` as the default export to avoid TypeScript
and esbuild interop issues.

Comment on lines +8 to +15
suite('Extension Test Suite', () => {
vscode.window.showInformationMessage('Start all tests.');

test('Sample test', () => {
assert.strictEqual(-1, [1, 2, 3].indexOf(5));
assert.strictEqual(-1, [1, 2, 3].indexOf(0));
});
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Expand test coverage to include actual extension functionality.

This test suite only contains a placeholder test that doesn't verify any extension functionality. For a comprehensive extension with Kanban board interface, MCP integration, and complex UI components, you should add tests for:

  • Extension activation/deactivation
  • Webview creation and communication
  • MCP client functionality
  • Configuration management
  • Task operations

Consider adding tests like:

test('Extension activates successfully', async () => {
  // Test extension activation
});

test('Webview panel creation', async () => {
  // Test webview panel creation and communication
});

test('MCP client connection', async () => {
  // Test MCP client functionality
});
🤖 Prompt for AI Agents
In apps/extension/src/test/extension.test.ts around lines 8 to 15, the current
test suite only contains a placeholder test and does not cover any real
extension functionality. To fix this, expand the test coverage by adding tests
for extension activation and deactivation, webview panel creation and
communication, MCP client functionality, configuration management, and task
operations. Implement specific test cases such as verifying successful extension
activation, ensuring webview panels are created and communicate correctly, and
validating MCP client connections.

Comment on lines +65 to +66
const fs = require('fs');
const path = require('path');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Replace dynamic require with ES module imports

Using require() in TypeScript/ES modules is not recommended. Import these modules at the top of the file.

Add at the top of the file:

 import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
 import { Client } from '@modelcontextprotocol/sdk/client/index.js';
 import * as vscode from 'vscode';
+import * as fs from 'fs';
+import * as path from 'path';

Remove lines 65-66:

-			const fs = require('fs');
-			const path = require('path');
🤖 Prompt for AI Agents
In apps/extension/src/utils/mcpClient.ts at lines 65-66, replace the dynamic
require calls for 'fs' and 'path' with static ES module imports by adding import
statements for these modules at the top of the file and then remove the require
statements from lines 65-66.

*/
export async function readTaskFileData(
taskId: string,
tagName: string = 'master'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove redundant type annotation

The type annotation for the default parameter is redundant.

-	tagName: string = 'master'
+	tagName = 'master'
🧰 Tools
🪛 Biome (1.9.4)

[error] 39-39: This type annotation is trivially inferred from its initialization.

Safe fix: Remove the type annotation.

(lint/style/noInferrableTypes)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskFileReader.ts at line 39, remove the redundant
type annotation for the default parameter 'tagName'. Since the default value
'master' is a string, TypeScript can infer the type automatically, so just keep
the assignment without explicitly specifying ': string'.

Comment on lines 43 to 45
if (typeof window !== 'undefined' && (window as any).vscode) {
// Use VS Code API to read the file
const vscode = (window as any).vscode;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Define proper types for VS Code API

Replace any with a proper interface for the VS Code API.

+interface VSCodeAPI {
+  postMessage: (message: any) => void;
+}
+
+declare global {
+  interface Window {
+    vscode?: VSCodeAPI;
+  }
+}
+
 		// Check if we're in a VS Code webview context
-		if (typeof window !== 'undefined' && (window as any).vscode) {
+		if (typeof window !== 'undefined' && window.vscode) {
 			// Use VS Code API to read the file
-			const vscode = (window as any).vscode;
+			const vscode = window.vscode;
🧰 Tools
🪛 Biome (1.9.4)

[error] 43-43: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)


[error] 45-45: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskFileReader.ts around lines 43 to 45, the VS Code
API is currently typed as 'any', which lacks type safety. Define a proper
TypeScript interface representing the VS Code API methods and properties you
use, then replace the 'any' type with this interface to ensure better type
checking and code clarity.

@@ -0,0 +1,382 @@
import * as vscode from 'vscode';
import { MCPClientManager, MCPConfig, MCPServerStatus } from './mcpClient';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Use import type for type-only imports

Some imports are only used as types and should use import type.

-import { MCPClientManager, MCPConfig, MCPServerStatus } from './mcpClient';
+import { MCPClientManager } from './mcpClient';
+import type { MCPConfig, MCPServerStatus } from './mcpClient';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { MCPClientManager, MCPConfig, MCPServerStatus } from './mcpClient';
import { MCPClientManager } from './mcpClient';
import type { MCPConfig, MCPServerStatus } from './mcpClient';
🧰 Tools
🪛 Biome (1.9.4)

[error] 2-2: Some named imports are only used as types.

This import is only used as a type.

This import is only used as a type.

Importing the types with import type ensures that they are removed by the compilers and avoids loading unnecessary modules.
Safe fix: Add inline type keywords.

(lint/style/useImportType)

🤖 Prompt for AI Agents
In apps/extension/src/utils/connectionManager.ts at line 2, the imports
MCPConfig and MCPServerStatus are used only as types. Change their import
statements to use `import type` to optimize the code by clearly indicating these
are type-only imports, while keeping MCPClientManager as a regular import if it
is used as a value.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines 301 to 304
const backoffMs = Math.min(
this.reconnectBackoffMs * Math.pow(2, this.reconnectAttempts - 1),
this.maxBackoffMs
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Use ** operator instead of Math.pow

Use the modern exponentiation operator for cleaner code.

 		const backoffMs = Math.min(
-			this.reconnectBackoffMs * Math.pow(2, this.reconnectAttempts - 1),
+			this.reconnectBackoffMs * (2 ** (this.reconnectAttempts - 1)),
 			this.maxBackoffMs
 		);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const backoffMs = Math.min(
this.reconnectBackoffMs * Math.pow(2, this.reconnectAttempts - 1),
this.maxBackoffMs
);
const backoffMs = Math.min(
this.reconnectBackoffMs * (2 ** (this.reconnectAttempts - 1)),
this.maxBackoffMs
);
🧰 Tools
🪛 Biome (1.9.4)

[error] 302-302: Use the '**' operator instead of 'Math.pow'.

Unsafe fix: Use the '**' operator instead of 'Math.pow'.

(lint/style/useExponentiationOperator)

🤖 Prompt for AI Agents
In apps/extension/src/utils/connectionManager.ts around lines 301 to 304,
replace the use of Math.pow for exponentiation with the modern ** operator to
simplify and clean up the code. Specifically, change Math.pow(2,
this.reconnectAttempts - 1) to 2 ** (this.reconnectAttempts - 1).

Comment on lines +4 to +8
export interface ConnectionEvent {
type: 'connected' | 'disconnected' | 'error' | 'reconnecting';
timestamp: Date;
data?: any;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace 'any' with proper types

Define specific types for the event data instead of using any.

 export interface ConnectionEvent {
 	type: 'connected' | 'disconnected' | 'error' | 'reconnecting';
 	timestamp: Date;
-	data?: any;
+	data?: {
+		error?: string;
+		[key: string]: unknown;
+	};
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export interface ConnectionEvent {
type: 'connected' | 'disconnected' | 'error' | 'reconnecting';
timestamp: Date;
data?: any;
}
export interface ConnectionEvent {
type: 'connected' | 'disconnected' | 'error' | 'reconnecting';
timestamp: Date;
data?: {
error?: string;
[key: string]: unknown;
};
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 7-7: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/connectionManager.ts around lines 4 to 8, the
ConnectionEvent interface uses 'any' for the data property, which reduces type
safety. Replace 'any' with specific types that correspond to each event type,
for example, define a union type or separate interfaces for the data property
based on the event type to ensure proper typing and better code clarity.

Comment on lines 1041 to 1042
/>
</div>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove autoFocus for better accessibility

The autoFocus attribute can be disruptive for screen reader users and keyboard navigation.

-						disabled={isSubmittingSubtask}
-						autoFocus
+						disabled={isSubmittingSubtask}

Consider using useEffect with a ref to focus the input after mount if needed:

const titleInputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
  if (isAddingSubtask) {
    titleInputRef.current?.focus();
  }
}, [isAddingSubtask]);
🧰 Tools
🪛 Biome (1.9.4)

[error] 1041-1042: Avoid the autoFocus attribute.

Unsafe fix: Remove the autoFocus attribute.

(lint/a11y/noAutofocus)

🤖 Prompt for AI Agents
In apps/extension/src/components/TaskDetailsView.tsx around lines 1041 to 1042,
remove the autoFocus attribute from the input element to improve accessibility
for screen reader users and keyboard navigation. Instead, create a ref for the
input using useRef, then use useEffect to focus the input programmatically when
the isAddingSubtask state changes, ensuring focus is set only after the
component mounts and when needed.

Comment on lines 1158 to 1163
key={subtask.id}
className="flex items-center gap-3 p-3 rounded-md border border-textSeparator-foreground hover:border-vscode-border/70 transition-colors cursor-pointer"
onClick={() => onNavigateToTask(subtaskId)}
>
<div
className="w-4 h-4 rounded-full flex items-center justify-center"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Add keyboard support for clickable elements

The subtask div has onClick but no keyboard event handler, making it inaccessible for keyboard users.

 <div
 	key={subtask.id}
 	className="flex items-center gap-3 p-3 rounded-md border border-textSeparator-foreground hover:border-vscode-border/70 transition-colors cursor-pointer"
 	onClick={() => onNavigateToTask(subtaskId)}
+	onKeyDown={(e) => {
+		if (e.key === 'Enter' || e.key === ' ') {
+			e.preventDefault();
+			onNavigateToTask(subtaskId);
+		}
+	}}
+	role="button"
+	tabIndex={0}
 >
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
key={subtask.id}
className="flex items-center gap-3 p-3 rounded-md border border-textSeparator-foreground hover:border-vscode-border/70 transition-colors cursor-pointer"
onClick={() => onNavigateToTask(subtaskId)}
>
<div
className="w-4 h-4 rounded-full flex items-center justify-center"
<div
key={subtask.id}
className="flex items-center gap-3 p-3 rounded-md border border-textSeparator-foreground hover:border-vscode-border/70 transition-colors cursor-pointer"
onClick={() => onNavigateToTask(subtaskId)}
onKeyDown={(e) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
onNavigateToTask(subtaskId);
}
}}
role="button"
tabIndex={0}
>
<div
className="w-4 h-4 rounded-full flex items-center justify-center"
>
{/* …rest of subtask item… */}
🧰 Tools
🪛 Biome (1.9.4)

[error] 1158-1163: Enforce to have the onClick mouse event with the onKeyUp, the onKeyDown, or the onKeyPress keyboard event.

Actions triggered using mouse events should have corresponding keyboard events to account for keyboard-only navigation.

(lint/a11y/useKeyWithClickEvents)

🤖 Prompt for AI Agents
In apps/extension/src/components/TaskDetailsView.tsx around lines 1158 to 1163,
the div representing a subtask has an onClick handler but lacks keyboard event
handlers, making it inaccessible to keyboard users. Add keyboard event support
by handling keyDown events for Enter and Space keys to trigger the same
onNavigateToTask function. Also, ensure the div has a tabIndex of 0 to make it
focusable via keyboard navigation.

Comment on lines 66 to 71
export interface TaskMasterApiResponse<T = any> {
success: boolean;
data?: T;
error?: string;
requestDuration?: number;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type with a generic type parameter

Using any disables TypeScript's type checking. Consider making the interface generic instead.

-export interface TaskMasterApiResponse<T = any> {
+export interface TaskMasterApiResponse<T = unknown> {
 	success: boolean;
 	data?: T;
 	error?: string;
 	requestDuration?: number;
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export interface TaskMasterApiResponse<T = any> {
success: boolean;
data?: T;
error?: string;
requestDuration?: number;
}
export interface TaskMasterApiResponse<T = unknown> {
success: boolean;
data?: T;
error?: string;
requestDuration?: number;
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 66-66: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskMasterApi.ts around lines 66 to 71, the
TaskMasterApiResponse interface uses the `any` type for its generic parameter,
which disables type checking. Replace the `any` type with a generic type
parameter `T` by declaring the interface as `TaskMasterApiResponse<T>`, and use
`T` for the `data` property type to enable proper type checking and flexibility.

Comment on lines 1096 to 1119
private validateAndNormalizeString(
value: any,
defaultValue: string | undefined,
fieldName: string
): string | undefined {
if (value === null || value === undefined) {
return defaultValue;
}

if (typeof value !== 'string') {
console.warn(
`TaskMasterApi: ${fieldName} is not a string, converting:`,
value
);
return String(value).trim() || defaultValue;
}

const trimmed = value.trim();
if (trimmed === '' && defaultValue !== undefined) {
return defaultValue;
}

return trimmed || defaultValue;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in validateAndNormalizeString method

 private validateAndNormalizeString(
-	value: any,
+	value: unknown,
 	defaultValue: string | undefined,
 	fieldName: string
 ): string | undefined {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private validateAndNormalizeString(
value: any,
defaultValue: string | undefined,
fieldName: string
): string | undefined {
if (value === null || value === undefined) {
return defaultValue;
}
if (typeof value !== 'string') {
console.warn(
`TaskMasterApi: ${fieldName} is not a string, converting:`,
value
);
return String(value).trim() || defaultValue;
}
const trimmed = value.trim();
if (trimmed === '' && defaultValue !== undefined) {
return defaultValue;
}
return trimmed || defaultValue;
}
private validateAndNormalizeString(
- value: any,
+ value: unknown,
defaultValue: string | undefined,
fieldName: string
): string | undefined {
if (value === null || value === undefined) {
return defaultValue;
}
if (typeof value !== 'string') {
console.warn(
`TaskMasterApi: ${fieldName} is not a string, converting:`,
value
);
return String(value).trim() || defaultValue;
}
const trimmed = value.trim();
if (trimmed === '' && defaultValue !== undefined) {
return defaultValue;
}
return trimmed || defaultValue;
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 1097-1098: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskMasterApi.ts around lines 1096 to 1119, the
validateAndNormalizeString method uses the `any` type for the `value` parameter,
which reduces type safety. Replace the `any` type with a more specific union
type such as `string | number | null | undefined` to better reflect the expected
input types and improve type checking while preserving the existing logic.

Comment on lines 754 to 763
private scheduleRelatedDataPrefetch(key: string, data: any): void {
// This is a simple implementation - in a more sophisticated system,
// we might prefetch related tasks, subtasks, or dependency data
if (key.includes('get_tasks') && Array.isArray(data)) {
console.log(
`TaskMasterApi: Scheduled prefetch for ${data.length} tasks related to ${key}`
);
// Future enhancement: prefetch individual task details, related dependencies, etc.
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in scheduleRelatedDataPrefetch method

-private scheduleRelatedDataPrefetch(key: string, data: any): void {
+private scheduleRelatedDataPrefetch(key: string, data: unknown): void {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private scheduleRelatedDataPrefetch(key: string, data: any): void {
// This is a simple implementation - in a more sophisticated system,
// we might prefetch related tasks, subtasks, or dependency data
if (key.includes('get_tasks') && Array.isArray(data)) {
console.log(
`TaskMasterApi: Scheduled prefetch for ${data.length} tasks related to ${key}`
);
// Future enhancement: prefetch individual task details, related dependencies, etc.
}
}
private scheduleRelatedDataPrefetch(key: string, data: unknown): void {
// This is a simple implementation - in a more sophisticated system,
// we might prefetch related tasks, subtasks, or dependency data
if (key.includes('get_tasks') && Array.isArray(data)) {
console.log(
`TaskMasterApi: Scheduled prefetch for ${data.length} tasks related to ${key}`
);
// Future enhancement: prefetch individual task details, related dependencies, etc.
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 754-754: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskMasterApi.ts around lines 754 to 763, the
scheduleRelatedDataPrefetch method uses the `any` type for the data parameter,
which reduces type safety. Replace the `any` type with a more specific type that
accurately represents the expected structure of the data, such as an array of
task objects or a defined interface representing task data. Update the method
signature accordingly to improve type checking and code clarity.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines 686 to 720
private setCache(
key: string,
data: any,
options?: { ttl?: number; tags?: string[] }
): void {
const now = Date.now();
const dataSize = this.estimateDataSize(data);

// Create cache entry
const entry: CacheEntry = {
data,
timestamp: now,
accessCount: 1,
lastAccessed: now,
size: dataSize,
ttl: options?.ttl,
tags: options?.tags || [key.split('_')[0]] // Default tag based on key prefix
};

// Check if we need to evict entries (LRU strategy)
const maxSize = this.config.cache?.maxSize || 100;
if (this.cache.size >= maxSize) {
this.evictLRUEntries(Math.max(1, Math.floor(maxSize * 0.1))); // Evict 10% of max size
}

this.cache.set(key, entry);
console.log(
`TaskMasterApi: Cached data for ${key} (size: ${dataSize} bytes, TTL: ${entry.ttl || this.config.cacheDuration}ms)`
);

// Trigger prefetch if enabled
if (this.config.cache?.enablePrefetch) {
this.scheduleRelatedDataPrefetch(key, data);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in setCache method

The data parameter should have a proper type instead of any.

 private setCache(
 	key: string,
-	data: any,
+	data: unknown,
 	options?: { ttl?: number; tags?: string[] }
 ): void {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private setCache(
key: string,
data: any,
options?: { ttl?: number; tags?: string[] }
): void {
const now = Date.now();
const dataSize = this.estimateDataSize(data);
// Create cache entry
const entry: CacheEntry = {
data,
timestamp: now,
accessCount: 1,
lastAccessed: now,
size: dataSize,
ttl: options?.ttl,
tags: options?.tags || [key.split('_')[0]] // Default tag based on key prefix
};
// Check if we need to evict entries (LRU strategy)
const maxSize = this.config.cache?.maxSize || 100;
if (this.cache.size >= maxSize) {
this.evictLRUEntries(Math.max(1, Math.floor(maxSize * 0.1))); // Evict 10% of max size
}
this.cache.set(key, entry);
console.log(
`TaskMasterApi: Cached data for ${key} (size: ${dataSize} bytes, TTL: ${entry.ttl || this.config.cacheDuration}ms)`
);
// Trigger prefetch if enabled
if (this.config.cache?.enablePrefetch) {
this.scheduleRelatedDataPrefetch(key, data);
}
}
private setCache(
key: string,
data: unknown,
options?: { ttl?: number; tags?: string[] }
): void {
const now = Date.now();
const dataSize = this.estimateDataSize(data);
// Create cache entry
const entry: CacheEntry = {
data,
timestamp: now,
accessCount: 1,
lastAccessed: now,
size: dataSize,
ttl: options?.ttl,
tags: options?.tags || [key.split('_')[0]] // Default tag based on key prefix
};
// Check if we need to evict entries (LRU strategy)
const maxSize = this.config.cache?.maxSize || 100;
if (this.cache.size >= maxSize) {
this.evictLRUEntries(Math.max(1, Math.floor(maxSize * 0.1))); // Evict 10% of max size
}
this.cache.set(key, entry);
console.log(
`TaskMasterApi: Cached data for ${key} (size: ${dataSize} bytes, TTL: ${entry.ttl || this.config.cacheDuration}ms)`
);
// Trigger prefetch if enabled
if (this.config.cache?.enablePrefetch) {
this.scheduleRelatedDataPrefetch(key, data);
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 688-688: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/taskMasterApi.ts between lines 686 and 720, the
setCache method uses the `any` type for the `data` parameter, which reduces type
safety. Replace `any` with a more specific type that accurately represents the
expected data structure or use a generic type parameter to allow flexibility
while maintaining type safety. Update the method signature and related code
accordingly to reflect this change.

Comment on lines 240 to 255
export class UIRenderingError extends TaskMasterError {
constructor(
message: string,
code: string = 'UI_RENDERING_FAILED',
context?: Record<string, any>
) {
super(
message,
code,
ErrorCategory.UI_RENDERING,
ErrorSeverity.LOW,
context,
'Try closing and reopening the Kanban board.'
);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove unnecessary type annotations and replace any types

 constructor(
 	message: string,
-	code: string = 'UI_RENDERING_FAILED',
-	context?: Record<string, any>
+	code = 'UI_RENDERING_FAILED',
+	context?: Record<string, unknown>
 ) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export class UIRenderingError extends TaskMasterError {
constructor(
message: string,
code: string = 'UI_RENDERING_FAILED',
context?: Record<string, any>
) {
super(
message,
code,
ErrorCategory.UI_RENDERING,
ErrorSeverity.LOW,
context,
'Try closing and reopening the Kanban board.'
);
}
}
export class UIRenderingError extends TaskMasterError {
constructor(
message: string,
code = 'UI_RENDERING_FAILED',
context?: Record<string, unknown>
) {
super(
message,
code,
ErrorCategory.UI_RENDERING,
ErrorSeverity.LOW,
context,
'Try closing and reopening the Kanban board.'
);
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 243-243: This type annotation is trivially inferred from its initialization.

Safe fix: Remove the type annotation.

(lint/style/noInferrableTypes)


[error] 244-244: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts between lines 240 and 255, remove
the explicit type annotation on the constructor parameters where it is
unnecessary, and replace the use of 'any' in the context parameter with a more
specific or safer type such as 'unknown' or a defined interface to improve type
safety and clarity.

Comment on lines 306 to 333
async handleError(
error: Error | TaskMasterError,
context?: Record<string, any>
): Promise<void> {
const errorDetails = this.createErrorDetails(error, context);
const logEntry = this.logError(errorDetails);

// Notify listeners
this.notifyErrorListeners(errorDetails);

// Show user notification based on severity
await this.showUserNotification(errorDetails);

// Attempt recovery if available
if (errorDetails.recovery?.automatic && errorDetails.recovery.action) {
try {
await errorDetails.recovery.action();
this.markErrorResolved(logEntry.id);
} catch (recoveryError) {
console.error('Error recovery failed:', recoveryError);
logEntry.attempts++;
logEntry.lastAttempt = new Date();
}
}

// Log to console with appropriate level
this.logToConsole(errorDetails);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in handleError method

 async handleError(
 	error: Error | TaskMasterError,
-	context?: Record<string, any>
+	context?: Record<string, unknown>
 ): Promise<void> {
🧰 Tools
🪛 Biome (1.9.4)

[error] 308-308: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts around lines 306 to 333, the
handleError method uses the generic type 'any' for the context parameter, which
reduces type safety. Replace 'any' with a more specific type that accurately
represents the expected shape of the context object, such as a defined interface
or Record<string, unknown>, to improve type checking and maintainability.

Comment on lines +337 to +366
*/
async handleCriticalError(
error: Error | TaskMasterError,
context?: Record<string, any>
): Promise<void> {
const errorDetails = this.createErrorDetails(error, context);
errorDetails.severity = ErrorSeverity.CRITICAL;

await this.handleError(error, context);

// Show critical error dialog
const action = await vscode.window.showErrorMessage(
`Critical Error in Task Master: ${errorDetails.message}`,
'View Details',
'Report Issue',
'Restart Extension'
);

switch (action) {
case 'View Details':
await this.showErrorDetails(errorDetails);
break;
case 'Report Issue':
await this.openIssueReport(errorDetails);
break;
case 'Restart Extension':
await vscode.commands.executeCommand('workbench.action.reloadWindow');
break;
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in handleCriticalError method

 async handleCriticalError(
 	error: Error | TaskMasterError,
-	context?: Record<string, any>
+	context?: Record<string, unknown>
 ): Promise<void> {
🧰 Tools
🪛 Biome (1.9.4)

[error] 340-340: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts between lines 337 and 366, the
handleCriticalError method uses the generic 'any' type for the context
parameter. Replace 'any' with a more specific type that accurately represents
the expected shape of the context object, such as a defined interface or
Record<string, unknown>, to improve type safety and clarity.

Comment on lines 169 to 189
constructor(
message: string,
code: string = 'MCP_CONNECTION_FAILED',
context?: Record<string, any>,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(
message,
code,
ErrorCategory.MCP_CONNECTION,
ErrorSeverity.HIGH,
context,
'Check your Task Master configuration and ensure the MCP server is accessible.',
recovery
);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove unnecessary type annotations and replace any types

Type annotations for default string values are unnecessary, and any should be replaced.

 constructor(
 	message: string,
-	code: string = 'MCP_CONNECTION_FAILED',
-	context?: Record<string, any>,
+	code = 'MCP_CONNECTION_FAILED',
+	context?: Record<string, unknown>,
 	recovery?: {
 		automatic: boolean;
 		action?: () => Promise<void>;
 		description?: string;
 	}
 ) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
constructor(
message: string,
code: string = 'MCP_CONNECTION_FAILED',
context?: Record<string, any>,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(
message,
code,
ErrorCategory.MCP_CONNECTION,
ErrorSeverity.HIGH,
context,
'Check your Task Master configuration and ensure the MCP server is accessible.',
recovery
);
}
}
constructor(
message: string,
code = 'MCP_CONNECTION_FAILED',
context?: Record<string, unknown>,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(
message,
code,
ErrorCategory.MCP_CONNECTION,
ErrorSeverity.HIGH,
context,
'Check your Task Master configuration and ensure the MCP server is accessible.',
recovery
);
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 171-171: This type annotation is trivially inferred from its initialization.

Safe fix: Remove the type annotation.

(lint/style/noInferrableTypes)


[error] 172-172: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts around lines 169 to 189, remove the
explicit type annotation for the default string parameter 'code' since
TypeScript can infer it, and replace the 'any' type in the 'context' parameter
with a more specific type or a generic placeholder to avoid using 'any'. Adjust
the constructor signature accordingly to improve type safety and clarity.

Comment on lines +426 to +448
private createErrorDetails(
error: Error | TaskMasterError,
context?: Record<string, any>
): ErrorDetails {
if (error instanceof TaskMasterError) {
const details = error.toErrorDetails();
if (context) {
details.context = { ...details.context, ...context };
}
return details;
}

// Handle standard Error objects
return {
code: 'UNKNOWN_ERROR',
message: error.message || 'An unknown error occurred',
category: ErrorCategory.INTERNAL,
severity: ErrorSeverity.MEDIUM,
timestamp: new Date(),
context: { ...context, errorName: error.name },
stack: error.stack
};
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in createErrorDetails method

 private createErrorDetails(
 	error: Error | TaskMasterError,
-	context?: Record<string, any>
+	context?: Record<string, unknown>
 ): ErrorDetails {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private createErrorDetails(
error: Error | TaskMasterError,
context?: Record<string, any>
): ErrorDetails {
if (error instanceof TaskMasterError) {
const details = error.toErrorDetails();
if (context) {
details.context = { ...details.context, ...context };
}
return details;
}
// Handle standard Error objects
return {
code: 'UNKNOWN_ERROR',
message: error.message || 'An unknown error occurred',
category: ErrorCategory.INTERNAL,
severity: ErrorSeverity.MEDIUM,
timestamp: new Date(),
context: { ...context, errorName: error.name },
stack: error.stack
};
}
private createErrorDetails(
error: Error | TaskMasterError,
context?: Record<string, unknown>
): ErrorDetails {
if (error instanceof TaskMasterError) {
const details = error.toErrorDetails();
if (context) {
details.context = { ...details.context, ...context };
}
return details;
}
// Handle standard Error objects
return {
code: 'UNKNOWN_ERROR',
message: error.message || 'An unknown error occurred',
category: ErrorCategory.INTERNAL,
severity: ErrorSeverity.MEDIUM,
timestamp: new Date(),
context: { ...context, errorName: error.name },
stack: error.stack
};
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 428-428: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts around lines 426 to 448, the
createErrorDetails method uses the type 'any' for the context parameter. Replace
'any' with a more specific type such as Record<string, unknown> or a defined
interface that accurately represents the expected shape of the context object to
improve type safety and clarity.

Comment on lines +121 to +143
constructor(
message: string,
code: string,
category: ErrorCategory,
severity: ErrorSeverity = ErrorSeverity.MEDIUM,
context?: Record<string, any>,
userAction?: string,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(message);
this.name = this.constructor.name;
this.code = code;
this.category = category;
this.severity = severity;
this.timestamp = new Date();
this.context = context;
this.userAction = userAction;
this.recovery = recovery;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Replace any type in TaskMasterError constructor

 constructor(
 	message: string,
 	code: string,
 	category: ErrorCategory,
 	severity: ErrorSeverity = ErrorSeverity.MEDIUM,
-	context?: Record<string, any>,
+	context?: Record<string, unknown>,
 	userAction?: string,
 	recovery?: {
 		automatic: boolean;
 		action?: () => Promise<void>;
 		description?: string;
 	}
 ) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
constructor(
message: string,
code: string,
category: ErrorCategory,
severity: ErrorSeverity = ErrorSeverity.MEDIUM,
context?: Record<string, any>,
userAction?: string,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(message);
this.name = this.constructor.name;
this.code = code;
this.category = category;
this.severity = severity;
this.timestamp = new Date();
this.context = context;
this.userAction = userAction;
this.recovery = recovery;
constructor(
message: string,
code: string,
category: ErrorCategory,
severity: ErrorSeverity = ErrorSeverity.MEDIUM,
- context?: Record<string, any>,
+ context?: Record<string, unknown>,
userAction?: string,
recovery?: {
automatic: boolean;
action?: () => Promise<void>;
description?: string;
}
) {
super(message);
this.name = this.constructor.name;
this.code = code;
this.category = category;
this.severity = severity;
this.timestamp = new Date();
this.context = context;
this.userAction = userAction;
this.recovery = recovery;
🧰 Tools
🪛 Biome (1.9.4)

[error] 126-126: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts around lines 121 to 143, the
constructor uses the type `any` for the `context` parameter, which reduces type
safety. Replace `Record<string, any>` with a more specific or generic type
parameter to improve type safety, such as `Record<string, unknown>`, or define a
proper interface for the context object if possible.

Comment on lines +645 to +691
private setupGlobalErrorHandlers(): void {
// Handle unhandled promise rejections
process.on('unhandledRejection', (reason, promise) => {
// Create a concrete error class for internal errors
class InternalError extends TaskMasterError {
constructor(
message: string,
code: string,
severity: ErrorSeverity,
context?: Record<string, any>
) {
super(message, code, ErrorCategory.INTERNAL, severity, context);
}
}

const error = new InternalError(
'Unhandled Promise Rejection',
'UNHANDLED_REJECTION',
ErrorSeverity.HIGH,
{ reason: String(reason), promise: String(promise) }
);
this.handleError(error);
});

// Handle uncaught exceptions
process.on('uncaughtException', (error) => {
// Create a concrete error class for internal errors
class InternalError extends TaskMasterError {
constructor(
message: string,
code: string,
severity: ErrorSeverity,
context?: Record<string, any>
) {
super(message, code, ErrorCategory.INTERNAL, severity, context);
}
}

const taskMasterError = new InternalError(
'Uncaught Exception',
'UNCAUGHT_EXCEPTION',
ErrorSeverity.CRITICAL,
{ originalError: error.message, stack: error.stack }
);
this.handleCriticalError(taskMasterError);
});
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Refactor to avoid nested class definitions and replace any types

Creating classes inside methods is unusual and can impact performance. Consider defining them at the module level.

+// Define at module level
+class InternalError extends TaskMasterError {
+	constructor(
+		message: string,
+		code: string,
+		severity: ErrorSeverity,
+		context?: Record<string, unknown>
+	) {
+		super(message, code, ErrorCategory.INTERNAL, severity, context);
+	}
+}
+
 private setupGlobalErrorHandlers(): void {
 	// Handle unhandled promise rejections
 	process.on('unhandledRejection', (reason, promise) => {
-		// Create a concrete error class for internal errors
-		class InternalError extends TaskMasterError {
-			constructor(
-				message: string,
-				code: string,
-				severity: ErrorSeverity,
-				context?: Record<string, any>
-			) {
-				super(message, code, ErrorCategory.INTERNAL, severity, context);
-			}
-		}
-
 		const error = new InternalError(
 			'Unhandled Promise Rejection',
 			'UNHANDLED_REJECTION',
 			ErrorSeverity.HIGH,
 			{ reason: String(reason), promise: String(promise) }
 		);
 		this.handleError(error);
 	});

 	// Handle uncaught exceptions
 	process.on('uncaughtException', (error) => {
-		// Create a concrete error class for internal errors
-		class InternalError extends TaskMasterError {
-			constructor(
-				message: string,
-				code: string,
-				severity: ErrorSeverity,
-				context?: Record<string, any>
-			) {
-				super(message, code, ErrorCategory.INTERNAL, severity, context);
-			}
-		}
-
 		const taskMasterError = new InternalError(
 			'Uncaught Exception',
 			'UNCAUGHT_EXCEPTION',
 			ErrorSeverity.CRITICAL,
 			{ originalError: error.message, stack: error.stack }
 		);
 		this.handleCriticalError(taskMasterError);
 	});
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
private setupGlobalErrorHandlers(): void {
// Handle unhandled promise rejections
process.on('unhandledRejection', (reason, promise) => {
// Create a concrete error class for internal errors
class InternalError extends TaskMasterError {
constructor(
message: string,
code: string,
severity: ErrorSeverity,
context?: Record<string, any>
) {
super(message, code, ErrorCategory.INTERNAL, severity, context);
}
}
const error = new InternalError(
'Unhandled Promise Rejection',
'UNHANDLED_REJECTION',
ErrorSeverity.HIGH,
{ reason: String(reason), promise: String(promise) }
);
this.handleError(error);
});
// Handle uncaught exceptions
process.on('uncaughtException', (error) => {
// Create a concrete error class for internal errors
class InternalError extends TaskMasterError {
constructor(
message: string,
code: string,
severity: ErrorSeverity,
context?: Record<string, any>
) {
super(message, code, ErrorCategory.INTERNAL, severity, context);
}
}
const taskMasterError = new InternalError(
'Uncaught Exception',
'UNCAUGHT_EXCEPTION',
ErrorSeverity.CRITICAL,
{ originalError: error.message, stack: error.stack }
);
this.handleCriticalError(taskMasterError);
});
}
// Define at module level
class InternalError extends TaskMasterError {
constructor(
message: string,
code: string,
severity: ErrorSeverity,
context?: Record<string, unknown>
) {
super(message, code, ErrorCategory.INTERNAL, severity, context);
}
}
private setupGlobalErrorHandlers(): void {
// Handle unhandled promise rejections
process.on('unhandledRejection', (reason, promise) => {
const error = new InternalError(
'Unhandled Promise Rejection',
'UNHANDLED_REJECTION',
ErrorSeverity.HIGH,
{ reason: String(reason), promise: String(promise) }
);
this.handleError(error);
});
// Handle uncaught exceptions
process.on('uncaughtException', (error) => {
const taskMasterError = new InternalError(
'Uncaught Exception',
'UNCAUGHT_EXCEPTION',
ErrorSeverity.CRITICAL,
{ originalError: error.message, stack: error.stack }
);
this.handleCriticalError(taskMasterError);
});
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 654-654: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)


[error] 677-677: Unexpected any. Specify a different type.

any disables many type checking rules. Its use should be avoided.

(lint/suspicious/noExplicitAny)

🤖 Prompt for AI Agents
In apps/extension/src/utils/errorHandler.ts between lines 645 and 691, the
InternalError class is defined inside the setupGlobalErrorHandlers method twice,
which is inefficient and unusual. Refactor by moving the InternalError class
definition outside the method to the module level, so it is defined once and
reused. Also, ensure to replace any usage of 'any' types with more specific
types if present in the class or method signatures.

@Crunchyman-ralph
Copy link
Collaborator

For reference, need an automated CI for this:
changesets/changesets#1297

- Fixed InternalError class definition in errorHandler.ts
- Updated extension configuration and CI workflows
- Improved error handling and type safety
- Enhanced build and release automation
- Updated documentation and changelogs

Addresses review feedback on PR eyaltoledano#997
@DavidMaliglowka
Copy link
Contributor Author

For reference, need an automated CI for this: changesets/changesets#1297

Just added

Resolved conflicts:
- Added kiro profile to all relevant files
- Updated package.json version to 0.22.0-rc.0
- Integrated extension functionality with latest codebase
- Resolved CHANGELOG.md and documentation conflicts
- Fixed profile exports and test files

This merge brings the VS Code extension up to date with the latest
Task Master features including Kiro IDE integration.
github-actions bot and others added 2 commits August 1, 2025 01:21
* Version Packages

* chore: fix release 0.22

todo: fix CI

* chore: run format

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
…-specific detection (eyaltoledano#1049)

Removes the default empty array value from the complexity report option to properly detect when tags are explicitly provided vs when no tags are provided, fixing the expand --all command behavior with tagged tasks.

Co-authored-by: Ben Vargas <ben@example.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
.changeset/sour-pans-beam.md (1)

1-43: Replace verbose marketing copy with a concise, imperative changeset summary

A changeset should include a single, user-facing sentence in imperative mood—no full feature list or marketing paragraphs—to keep the generated CHANGELOG.md clean.

Example fix in .changeset/sour-pans-beam.md:

@@ .changeset/sour-pans-beam.md
 ---
 "extension": minor
 ---

-🎉 **Introducing TaskMaster Extension!** 
-
-We’re thrilled to launch the first version of our Code extension… (full feature list)
+Introduce TaskMaster VS Code extension with Kanban board and drag-and-drop task management

• Keep the front-matter key as "extension" to match its package.json in the monorepo (the VS Code marketplace manifest in package.publish.json uses a different name and isn’t targeted by Changesets).
• Write the summary in imperative mood, one line, user-facing.

♻️ Duplicate comments (1)
.changeset/fix-tag-complexity-detection.md (1)

4-5: Remove leading blank line & keep summary on same line as required by Changesets front-matter

The summary must immediately follow the second --- without an intervening blank line.
Same issue was raised previously. Please trim the blank line and keep the one-line summary.

 ---
 "task-master-ai": patch
 ---
-
-Fix tag-specific complexity report detection in expand command
+Fix tag-specific complexity-report detection in `expand` command
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2af26e8 and 739d861.

📒 Files selected for processing (2)
  • .changeset/fix-tag-complexity-detection.md (1 hunks)
  • .changeset/sour-pans-beam.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.changeset/*.md

📄 CodeRabbit Inference Engine (.cursor/rules/changeset.mdc)

.changeset/*.md: When running npm run changeset or npx changeset add, provide a concise summary of the changes for the CHANGELOG.md in imperative mood, typically a single line, and not a detailed Git commit message.
The changeset summary should be user-facing, describing what changed in the released version that is relevant to users or consumers of the package.
Do not use your detailed Git commit message body as the changeset summary.

Files:

  • .changeset/fix-tag-complexity-detection.md
  • .changeset/sour-pans-beam.md
.changeset/*

📄 CodeRabbit Inference Engine (.cursor/rules/new_features.mdc)

Create appropriate changesets for new features, use semantic versioning, include tagged system information in release notes, and document breaking changes if any.

Files:

  • .changeset/fix-tag-complexity-detection.md
  • .changeset/sour-pans-beam.md
🧠 Learnings (33)
📓 Common learnings
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Monitor code review comments for continuous improvement
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Monitor code review comments, track common development questions, update rules after major refactors, add links to relevant documentation, and cross-reference related rules.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.613Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Extract tasks from PRD documents using AI, create them in the current tag context (defaulting to 'master'), provide clear prompts to guide AI task generation, and validate/clean up AI-generated tasks.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request titles must follow the format: Task <ID>: <Task Title>
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master add-task` to add a new task to tasks.json using AI.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use consistent formatting for task files, include all task properties in text files, and format dependencies with status indicators.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Generate task files with `task-master generate` after updating tasks.json.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Describes the high-level architecture of the Task Master CLI application, including the new tagged task lists system (architecture.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Use the Taskmaster command set (`task-master` CLI or MCP tools) for all task management operations: listing, expanding, updating, tagging, and status changes.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Tasks must be organized into separate contexts (tags) within tasks.json, using the tagged format: {"master": {"tasks": [...]}, "feature-branch": {"tasks": [...]}}. Legacy format {"tasks": [...]} must be silently migrated to the tagged format on first use.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guide for using Task Master to manage task-driven development workflows with tagged task lists support (dev_workflow.mdc).
📚 Learning: todo comments about adding tag support to internal functions like readcomplexityreport are obsolete ...
Learnt from: mm-parthy
PR: eyaltoledano/claude-task-master#943
File: scripts/modules/task-manager/list-tasks.js:0-0
Timestamp: 2025-07-18T08:29:52.384Z
Learning: TODO comments about adding tag support to internal functions like readComplexityReport are obsolete in the boundary-first tag resolution pattern because report paths are already resolved at the CLI command boundary layer before reaching these functions.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: commands such as `analyze-complexity`, `expand-task`, `update-task`, and `add-task` should consider ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/context_gathering.mdc:0-0
Timestamp: 2025-07-18T17:09:13.815Z
Learning: Commands such as `analyze-complexity`, `expand-task`, `update-task`, and `add-task` should consider adopting the context gathering pattern for improved AI-powered assistance.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to scripts/modules/task-manager.js : use ai to generate detailed subtasks within the current...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use AI to generate detailed subtasks within the current tag context, considering complexity analysis for subtask counts and ensuring proper IDs for newly created subtasks.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: use `task-master complexity-report` to display the task complexity analysis report in a formatted, e...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master complexity-report` to display the task complexity analysis report in a formatted, easy-to-read way.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: for tasks with complexity analysis, use `node scripts/dev.js expand --id=`. otherwise, use `node...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: For tasks with complexity analysis, use `node scripts/dev.js expand --id=<id>`. Otherwise, use `node scripts/dev.js expand --id=<id> --subtasks=<number>`.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to scripts/modules/*.js : default to current tag when not specified, support explicit tag se...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Default to current tag when not specified, support explicit tag selection in advanced features, validate tag existence before operations, and provide clear messaging about tag context.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to scripts/modules/task-manager.js : generate task files from the current tag context, inclu...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Generate task files from the current tag context, include tag information in generated files, and do not mix tasks from different tags in file generation.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to scripts/modules/utils.js : use tag resolution functions for all task data access, provide...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/utilities.mdc:0-0
Timestamp: 2025-07-18T17:18:17.759Z
Learning: Applies to scripts/modules/utils.js : Use tag resolution functions for all task data access, provide backward compatibility with legacy format, and default to 'master' tag when no tag is specified.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: when breaking down complex tasks, use the `expand_task` command with appropriate flags (`--force`, `...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: When breaking down complex tasks, use the `expand_task` command with appropriate flags (`--force`, `--research`, `--num`, `--prompt`) and review generated subtasks for accuracy.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to scripts/modules/task-manager.js : use tag resolution functions to maintain backward compa...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use tag resolution functions to maintain backward compatibility, returning legacy format to core functions and not exposing the tagged structure to existing core logic.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: applies to .changeset/*.md : when running `npm run changeset` or `npx changeset add`, provide a conc...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .changeset/*.md : When running `npm run changeset` or `npx changeset add`, provide a concise summary of the changes for the `CHANGELOG.md` in imperative mood, typically a single line, and not a detailed Git commit message.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: for changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1035
File: .changeset/quiet-rabbits-bathe.md:5-10
Timestamp: 2025-07-23T16:03:42.784Z
Learning: For changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project intentionally omits punctuation to make the generated changelog feel more natural.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: do not add a changeset for trivial chores such as very minor code cleanup, adding comments that don'...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Do not add a changeset for trivial chores such as very minor code cleanup, adding comments that don't clarify behavior, or typo fixes in non-user-facing code or internal docs.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: guidelines for integrating new features into the task master cli with tagged system considerations (...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
  • .changeset/sour-pans-beam.md
📚 Learning: applies to .changeset/*.md : do not use your detailed git commit message body as the changeset summa...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .changeset/*.md : Do not use your detailed Git commit message body as the changeset summary.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: every pull request containing new features, bug fixes, breaking changes, performance improvements, s...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: test commits should be separated and use the format: test(task-x): add comprehensive tests for [feat...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Test commits should be separated and use the format: test(task-X): Add comprehensive tests for [feature], with a detailed body

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: pull request descriptions must use the provided template, including task overview, subtasks complete...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: break down complex tasks using `task-master expand --id=` with appropriate flags....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Break down complex tasks using `task-master expand --id=<id>` with appropriate flags.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: use the taskmaster command set (`task-master` cli or mcp tools) for all task management operations: ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Use the Taskmaster command set (`task-master` CLI or MCP tools) for all task management operations: listing, expanding, updating, tagging, and status changes.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
  • .changeset/sour-pans-beam.md
📚 Learning: analyze task complexity with `task-master analyze-complexity --research` before breaking down tasks....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Analyze task complexity with `task-master analyze-complexity --research` before breaking down tasks.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: when breaking down complex tasks in taskmaster, use the `expand_task` command with appropriate flags...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:02.683Z
Learning: When breaking down complex tasks in Taskmaster, use the `expand_task` command with appropriate flags (`--num`, `--research`, `--force`, `--prompt`) and review generated subtasks for accuracy.

Applied to files:

  • .changeset/fix-tag-complexity-detection.md
📚 Learning: guide for using task master to manage task-driven development workflows with tagged task lists suppo...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guide for using Task Master to manage task-driven development workflows with tagged task lists support (dev_workflow.mdc).

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: describes the high-level architecture of the task master cli application, including the new tagged t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Describes the high-level architecture of the Task Master CLI application, including the new tagged task lists system (architecture.mdc).

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: applies to scripts/modules/task-manager.js : tasks must be organized into separate contexts (tags) w...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Tasks must be organized into separate contexts (tags) within tasks.json, using the tagged format: {"master": {"tasks": [...]}, "feature-branch": {"tasks": [...]}}. Legacy format {"tasks": [...]} must be silently migrated to the tagged format on first use.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: applies to tasks.json : use the `tasks.json` file (generated by taskmaster) to store the project's t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to tasks.json : Use the `tasks.json` file (generated by Taskmaster) to store the project's task list, including tags and task structures.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: in the eyaltoledano/claude-task-master repository, the vs code extension uses a 3-file packaging sys...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.613Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: use `task-master add-task` to add a new task to tasks.json using ai....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master add-task` to add a new task to tasks.json using AI.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: organize tasks into tags (contexts) such as 'master', 'feature-branch', or 'v2.0' in taskmaster to i...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Organize tasks into tags (contexts) such as 'master', 'feature-branch', or 'v2.0' in Taskmaster to isolate workstreams and prevent conflicts.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: for prd-driven feature development, create a dedicated tag, draft a prd in `.taskmaster/docs/`, pars...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: for cli usage, install taskmaster globally with `npm install -g task-master-ai` or use locally via `...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For CLI usage, install Taskmaster globally with `npm install -g task-master-ai` or use locally via `npx task-master-ai ...`.

Applied to files:

  • .changeset/sour-pans-beam.md
📚 Learning: use `task-master list` to view current tasks, their status, and ids at the start of coding sessions....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master list` to view current tasks, their status, and IDs at the start of coding sessions.

Applied to files:

  • .changeset/sour-pans-beam.md
🪛 LanguageTool
.changeset/fix-tag-complexity-detection.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...c complexity report detection in expand command The expand command now correctly finds a...

(QB_NEW_EN_OTHER)


[style] ~7-~7: Consider a different adverb to strengthen your wording.
Context: ... in a tag context. Previously, it would always look for the generic `task-complexity-r...

(ALWAYS_CONSTANTLY)

.changeset/sour-pans-beam.md

[grammar] ~5-~5: Use correct spacing
Context: ... minor --- 🎉 Introducing TaskMaster Extension! We're thrilled to launch the first versi...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~9-~9: Use correct spacing
Context: ...ge your development workflow. ## ✨ Key Features ### 📋 Visual Task Management - **Kanban Boa...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~17-~17: There might be a mistake here.
Context: ...lessly switch between different project contexts/tags - Isolated Workflows: Keep differen...

(QB_NEW_EN_OTHER)


[grammar] ~18-~18: There might be a mistake here.
Context: ...erent features or experiments organized separately ### 🤖 AI-Powered Task Updates - **Smart Upd...

(QB_NEW_EN_OTHER)


[style] ~42-~42: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1994 characters long)
Context: ...y. Your workflow has never looked better! 🚀

(EN_EXCESSIVE_EXCLAMATION)

🪛 markdownlint-cli2 (0.17.2)
.changeset/fix-tag-complexity-detection.md

5-5: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)


7-7: Files should end with a single newline character

(MD047, single-trailing-newline)

.changeset/sour-pans-beam.md

5-5: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)


5-5: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)


11-11: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


12-12: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


16-16: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


17-17: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


20-20: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


21-21: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


24-24: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


25-25: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


29-29: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


30-30: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


34-34: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


Fix tag-specific complexity report detection in expand command

The expand command now correctly finds and uses tag-specific complexity reports (e.g., `task-complexity-report_feature-xyz.json`) when operating in a tag context. Previously, it would always look for the generic `task-complexity-report.json` file due to a default value in the CLI option definition. No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Ensure file ends with a single newline

Markdown-lint (MD047) flags missing trailing newline. Append exactly one newline character at EOF.

🧰 Tools
🪛 LanguageTool

[style] ~7-~7: Consider a different adverb to strengthen your wording.
Context: ... in a tag context. Previously, it would always look for the generic `task-complexity-r...

(ALWAYS_CONSTANTLY)

🪛 markdownlint-cli2 (0.17.2)

7-7: Files should end with a single newline character

(MD047, single-trailing-newline)

🤖 Prompt for AI Agents
In the file .changeset/fix-tag-complexity-detection.md at line 7, the file is
missing a trailing newline at the end. Add exactly one newline character at the
end of the file to comply with markdown-lint rule MD047.

Crunchyman-ralph and others added 5 commits August 1, 2025 11:03
…ity report if it is missing, instead of showing an error. (eyaltoledano#1043)

* feat: fix CLI UI error when trying to display non-existent complexity report

* chore: fix git issue

* chore: run format

* Update .changeset/thick-squids-attend.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update .changeset/thick-squids-attend.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update .changeset/thick-squids-attend.md

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Version Packages

* chore: fix release 0.22

todo: fix CI

* chore: run format

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
.github/workflows/extension-ci.yml (1)

140-144: Remove superfluous blank line at EOF

YAMLlint warns about the extra empty line (Line 144). Drop it to keep the workflow tidy.

   retention-days: 30
-
♻️ Duplicate comments (8)
.github/workflows/version.yml (1)

52-62: Trim trailing space & add newline-at-EOF

Line 62 ends with a stray space and the file misses the customary newline, both flagged by YAMLlint.

   VSCE_PAT: ${{ secrets.VSCE_PAT }}
-  OVSX_PAT: ${{ secrets.OVSX_PAT }}␠
+  OVSX_PAT: ${{ secrets.OVSX_PAT }}
+
.github/workflows/extension-release.yml (3)

20-20: Use structured concurrency object
Same advice as earlier – raw ${{ github.ref }} contains slashes and risks group collisions.


165-195: steps.create_release is undefined – add an id

The upload-asset step still references steps.create_release, but the “Create GitHub Release” step has no id. Add id: create_release (or change the reference).


181-183: Replace [TBD] marketplace URLs before shipping

Place-holders will fail marketplace validation and mislead users.

apps/extension/package.json (4)

1-9: Missing license and questionable "private": true flag

These points were raised previously and remain unresolved.


12-13: Invalid marketplace categories

"AI", "Visualization" and "Education" are not accepted by vsce.


13-14: activationEvents block is still absent

vsce package will reject the extension without it.


235-236: watch script not Windows-safe

Using & breaks on Windows shells; switch to npm-run-all --parallel.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4c135b2 and 033ac2d.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • .github/workflows/extension-ci.yml (1 hunks)
  • .github/workflows/extension-release.yml (1 hunks)
  • .github/workflows/version.yml (1 hunks)
  • .gitignore (1 hunks)
  • apps/extension/package.json (1 hunks)
🧰 Additional context used
🧠 Learnings (65)
📓 Common learnings
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Monitor code review comments for continuous improvement
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Monitor code review comments, track common development questions, update rules after major refactors, add links to relevant documentation, and cross-reference related rules.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.613Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Extract tasks from PRD documents using AI, create them in the current tag context (defaulting to 'master'), provide clear prompts to guide AI task generation, and validate/clean up AI-generated tasks.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request titles must follow the format: Task <ID>: <Task Title>
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Use the Taskmaster command set (`task-master` CLI or MCP tools) for all task management operations: listing, expanding, updating, tagging, and status changes.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Comprehensive reference for Taskmaster MCP tools and CLI commands with tagged task lists information (taskmaster.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guide for using Task Master to manage task-driven development workflows with tagged task lists support (dev_workflow.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Describes the high-level architecture of the Task Master CLI application, including the new tagged task lists system (architecture.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use consistent formatting for task files, include all task properties in text files, and format dependencies with status indicators.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master add-task` to add a new task to tasks.json using AI.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Tasks must be organized into separate contexts (tags) within tasks.json, using the tagged format: {"master": {"tasks": [...]}, "feature-branch": {"tasks": [...]}}. Legacy format {"tasks": [...]} must be silently migrated to the tagged format on first use.
📚 Learning: applies to .cursor/rules/** : do not add a changeset for changes only to files within `.cursor/rules...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .cursor/rules/** : Do not add a changeset for changes only to files within `.cursor/rules/` that solely guide internal development practices for this specific repository.

Applied to files:

  • .gitignore
  • .github/workflows/extension-ci.yml
📚 Learning: applies to **/*.test.js : do not modify real task files (tasks.json) during tests....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Do not modify real task files (tasks.json) during tests.

Applied to files:

  • .gitignore
  • apps/extension/package.json
📚 Learning: do not add a changeset for local configuration changes, such as updates to personal editor settings ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Do not add a changeset for local configuration changes, such as updates to personal editor settings or local `.env` files.

Applied to files:

  • .gitignore
📚 Learning: applies to **/*.test.js : do not use real ai client initialization logic in tests; create test-speci...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Do not use real AI client initialization logic in tests; create test-specific paths that bypass client initialization.

Applied to files:

  • .gitignore
📚 Learning: applies to **/*.test.js : do not import real ai service clients in tests; create fully mocked versio...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Do not import real AI service clients in tests; create fully mocked versions that return predictable responses.

Applied to files:

  • .gitignore
📚 Learning: in the eyaltoledano/claude-task-master repository, the vs code extension uses a 3-file packaging sys...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.613Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.

Applied to files:

  • .gitignore
  • .github/workflows/version.yml
  • .github/workflows/extension-release.yml
  • .github/workflows/extension-ci.yml
  • apps/extension/package.json
📚 Learning: applies to tests/{unit,integration,e2e,fixtures}/**/*.js : test files must be organized as follows: ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/architecture.mdc:0-0
Timestamp: 2025-07-18T17:07:39.336Z
Learning: Applies to tests/{unit,integration,e2e,fixtures}/**/*.js : Test files must be organized as follows: unit tests in tests/unit/, integration tests in tests/integration/, end-to-end tests in tests/e2e/, and test fixtures in tests/fixtures/.

Applied to files:

  • .gitignore
📚 Learning: applies to **/*.test.js : use test-specific file paths (e.g., 'test-tasks.json') for all file operat...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Use test-specific file paths (e.g., 'test-tasks.json') for all file operations in tests.

Applied to files:

  • .gitignore
📚 Learning: applies to **/*.{test,spec}.{js,ts,jsx,tsx} : create a test file if needed and ensure all tests pass...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Applies to **/*.{test,spec}.{js,ts,jsx,tsx} : Create a test file if needed and ensure all tests pass before completing a task

Applied to files:

  • .gitignore
  • .github/workflows/extension-release.yml
  • .github/workflows/extension-ci.yml
  • apps/extension/package.json
📚 Learning: applies to **/*.test.js : use different file paths for each test to avoid test interdependence....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Use different file paths for each test to avoid test interdependence.

Applied to files:

  • .gitignore
📚 Learning: applies to **/*.test.js : verify file operations use the correct paths in expect statements....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Verify file operations use the correct paths in expect statements.

Applied to files:

  • .gitignore
  • .github/workflows/extension-release.yml
  • .github/workflows/extension-ci.yml
📚 Learning: applies to **/*.test.js : maintain test fixtures separate from test logic....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Maintain test fixtures separate from test logic.

Applied to files:

  • .gitignore
  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/unit/*.js : each module should have a corresponding unit test file in tests/unit/ t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/architecture.mdc:0-0
Timestamp: 2025-07-18T17:07:39.336Z
Learning: Applies to tests/unit/*.js : Each module should have a corresponding unit test file in tests/unit/ that reflects the module structure (one test file per module).

Applied to files:

  • .gitignore
📚 Learning: applies to scripts/modules/*.js : use consistent file naming conventions: 'task_${id.tostring().pads...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Use consistent file naming conventions: 'task_${id.toString().padStart(3, '0')}.txt', use path.join for composing file paths, and use appropriate file extensions (.txt for tasks, .json for data).

Applied to files:

  • .gitignore
  • .github/workflows/extension-release.yml
  • apps/extension/package.json
📚 Learning: guidelines for using changesets (npm run changeset) to manage versioning and changelogs (changeset.m...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for using Changesets (npm run changeset) to manage versioning and changelogs (changeset.mdc).

Applied to files:

  • .github/workflows/version.yml
  • .github/workflows/extension-release.yml
📚 Learning: applies to .changeset/* : create appropriate changesets for new features, use semantic versioning, i...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to .changeset/* : Create appropriate changesets for new features, use semantic versioning, include tagged system information in release notes, and document breaking changes if any.

Applied to files:

  • .github/workflows/version.yml
📚 Learning: every pull request containing new features, bug fixes, breaking changes, performance improvements, s...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.

Applied to files:

  • .github/workflows/version.yml
  • .github/workflows/extension-release.yml
  • .github/workflows/extension-ci.yml
📚 Learning: applies to .changeset/*.md : when running `npm run changeset` or `npx changeset add`, provide a conc...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .changeset/*.md : When running `npm run changeset` or `npx changeset add`, provide a concise summary of the changes for the `CHANGELOG.md` in imperative mood, typically a single line, and not a detailed Git commit message.

Applied to files:

  • .github/workflows/version.yml
  • apps/extension/package.json
📚 Learning: for changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1035
File: .changeset/quiet-rabbits-bathe.md:5-10
Timestamp: 2025-07-23T16:03:42.784Z
Learning: For changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project intentionally omits punctuation to make the generated changelog feel more natural.

Applied to files:

  • .github/workflows/version.yml
  • .github/workflows/extension-release.yml
📚 Learning: coderabbit configuration files like .coderabbit.yaml are internal development tooling that affect th...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#992
File: .coderabbit.yaml:1-169
Timestamp: 2025-07-16T16:06:07.169Z
Learning: CodeRabbit configuration files like .coderabbit.yaml are internal development tooling that affect the review process but don't impact end users, so changesets are not required for these configuration additions.

Applied to files:

  • .github/workflows/version.yml
📚 Learning: always stage and commit the generated `.changeset/*.md` file along with your relevant code changes....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Always stage and commit the generated `.changeset/*.md` file along with your relevant code changes.

Applied to files:

  • .github/workflows/version.yml
📚 Learning: pull request titles must follow the format: task : ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request titles must follow the format: Task <ID>: <Task Title>

Applied to files:

  • .github/workflows/version.yml
📚 Learning: do not add a changeset for trivial chores such as very minor code cleanup, adding comments that don'...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Do not add a changeset for trivial chores such as very minor code cleanup, adding comments that don't clarify behavior, or typo fixes in non-user-facing code or internal docs.

Applied to files:

  • .github/workflows/version.yml
📚 Learning: pull request descriptions must use the provided template, including task overview, subtasks complete...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks

Applied to files:

  • .github/workflows/version.yml
📚 Learning: applies to scripts/modules/task-manager.js : use consistent formatting for task files, include all t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use consistent formatting for task files, include all task properties in text files, and format dependencies with status indicators.

Applied to files:

  • .github/workflows/extension-release.yml
  • .github/workflows/extension-ci.yml
  • apps/extension/package.json
📚 Learning: applies to scripts/modules/commands.js : use path.join() to construct file paths, follow established...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-18T17:08:48.695Z
Learning: Applies to scripts/modules/commands.js : Use path.join() to construct file paths, follow established naming conventions (like task_001.txt), check file existence before deletion, and handle file deletion errors gracefully.

Applied to files:

  • .github/workflows/extension-release.yml
  • apps/extension/package.json
📚 Learning: update references to external docs...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Update references to external docs

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: applies to mcp-server/src/core/direct-functions/*.js : use path.join() instead of string concatenati...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/mcp.mdc:0-0
Timestamp: 2025-07-18T17:11:36.732Z
Learning: Applies to mcp-server/src/core/direct-functions/*.js : Use path.join() instead of string concatenation for file paths, and follow established file naming conventions (e.g., 'task_001.txt') in direct functions.

Applied to files:

  • .github/workflows/extension-release.yml
  • apps/extension/package.json
📚 Learning: applies to scripts/modules/commands.js : use consistent patterns for option naming and help text in ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/commands.js : Use consistent patterns for option naming and help text in CLI commands.

Applied to files:

  • .github/workflows/extension-release.yml
  • apps/extension/package.json
📚 Learning: when resolving code conflicts, use standard git conflict resolution commands and ensure all conflict...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: When resolving code conflicts, use standard Git conflict resolution commands and ensure all conflicts are resolved before continuing

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: test commits should be separated and use the format: test(task-x): add comprehensive tests for [feat...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Test commits should be separated and use the format: test(task-X): Add comprehensive tests for [feature], with a detailed body

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : mock console output and verify correct format...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Mock console output and verify correct formatting in UI function tests. Use flexible assertions like toContain() or toMatch() for formatted output.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: when tests are added or modified, commit them separately with a descriptive message...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: When tests are added or modified, commit them separately with a descriptive message

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : use sample task fixtures for consistent test ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Use sample task fixtures for consistent test data, mock file system operations, and test both success and error paths for task operations.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: guidelines for implementing and maintaining tests for task master cli (tests.mdc)....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for implementing and maintaining tests for Task Master CLI (tests.mdc).

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : explicitly handle all options, including defa...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Explicitly handle all options, including defaults and shorthand flags (e.g., -p for --prompt), and include null/undefined checks in test implementations for parameters that might be optional.

Applied to files:

  • .github/workflows/extension-ci.yml
  • apps/extension/package.json
📚 Learning: document breaking changes...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Document breaking changes

Applied to files:

  • apps/extension/package.json
📚 Learning: when implementation differs significantly from planned approach, call `node scripts/dev.js update --...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: When implementation differs significantly from planned approach, call `node scripts/dev.js update --from=<futureTaskId> --prompt="<explanation>"` to update tasks.json.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager.js : tasks must be organized into separate contexts (tags) w...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Tasks must be organized into separate contexts (tags) within tasks.json, using the tagged format: {"master": {"tasks": [...]}, "feature-branch": {"tasks": [...]}}. Legacy format {"tasks": [...]} must be silently migrated to the tagged format on first use.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to tasks.json : use the `tasks.json` file (generated by taskmaster) to store the project's t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to tasks.json : Use the `tasks.json` file (generated by Taskmaster) to store the project's task list, including tags and task structures.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to .taskmaster/config.json : store taskmaster configuration settings (ai model selections, p...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:02.683Z
Learning: Applies to .taskmaster/config.json : Store Taskmaster configuration settings (AI model selections, parameters, logging level, default subtasks/priority, project name, tag management) in `.taskmaster/config.json` in the project root. Do not configure these via environment variables.

Applied to files:

  • apps/extension/package.json
📚 Learning: generate task files with `task-master generate` after updating tasks.json....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Generate task files with `task-master generate` after updating tasks.json.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to .taskmaster/config.json : do not manually edit `.taskmaster/config.json` unless you are c...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to .taskmaster/config.json : Do not manually edit `.taskmaster/config.json` unless you are certain of the changes; use the `task-master models` command or `models` MCP tool for configuration.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/dependency-manager.js : remove references to non-existent tasks during va...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dependencies.mdc:0-0
Timestamp: 2025-07-18T17:09:45.690Z
Learning: Applies to scripts/modules/dependency-manager.js : Remove references to non-existent tasks during validation

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/* : every command that reads or writes tasks.json must be tag-aware...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tags.mdc:0-0
Timestamp: 2025-07-18T17:13:30.188Z
Learning: Applies to scripts/modules/* : Every command that reads or writes tasks.json must be tag-aware

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager/*.js : files in scripts/modules/task-manager/ should each ha...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/architecture.mdc:0-0
Timestamp: 2025-07-18T17:07:39.336Z
Learning: Applies to scripts/modules/task-manager/*.js : Files in scripts/modules/task-manager/ should each handle a specific action related to task management (e.g., add-task.js, expand-task.js), supporting the tagged task lists system and backward compatibility.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager.js : each task object must include all required properties (...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Each task object must include all required properties (id, title, description, status, dependencies, priority, details, testStrategy, subtasks) and provide default values for optional properties. Extra properties not in the standard schema must not be added.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/commands.js : suggest non-destructive alternatives when appropriate, expl...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-18T17:08:48.695Z
Learning: Applies to scripts/modules/commands.js : Suggest non-destructive alternatives when appropriate, explain the difference between deletion and status changes, and include examples of alternative commands.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/commands.js : suggest non-destructive alternatives when appropriate, expl...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-31T22:07:49.701Z
Learning: Applies to scripts/modules/commands.js : Suggest non-destructive alternatives when appropriate, explaining the difference between deletion and status changes, and include examples of alternative commands.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/ai-services.js : features that use ai models belong in 'scripts/modules/a...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/ai-services.js : Features that use AI models belong in 'scripts/modules/ai-services.js'.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/commands.js : follow established naming conventions for task files, such ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-31T22:07:49.701Z
Learning: Applies to scripts/modules/commands.js : Follow established naming conventions for task files, such as task_001.txt.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to mcp-server/src/tools/*.js : use camelcase with tool suffix for tool registration function...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/mcp.mdc:0-0
Timestamp: 2025-07-18T17:11:36.732Z
Learning: Applies to mcp-server/src/tools/*.js : Use camelCase with Tool suffix for tool registration functions in mcp-server/src/tools/.

Applied to files:

  • apps/extension/package.json
📚 Learning: in the eyaltoledano/claude-task-master repository, the mcp server code in mcp-server/src/ is part of...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1002
File: .changeset/puny-friends-give.md:2-3
Timestamp: 2025-07-17T21:33:57.585Z
Learning: In the eyaltoledano/claude-task-master repository, the MCP server code in mcp-server/src/ is part of the main "task-master-ai" package, not a separate "mcp-server" package. When creating changesets for MCP server changes, use "task-master-ai" as the package name.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager/**/*.js : do not call ai-specific getters (like `getmainmode...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/utilities.mdc:0-0
Timestamp: 2025-07-18T17:18:17.759Z
Learning: Applies to scripts/modules/task-manager/**/*.js : Do not call AI-specific getters (like `getMainModelId`, `getMainMaxTokens`) from core logic functions in `scripts/modules/task-manager/*`; instead, pass the `role` to the unified AI service.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager.js : the default tag 'master' must be used for all existing ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : The default tag 'master' must be used for all existing and new tasks unless otherwise specified.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager.js : subtasks must use consistent properties, maintain simpl...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Subtasks must use consistent properties, maintain simple numeric IDs unique within the parent task, and must not duplicate parent task properties.

Applied to files:

  • apps/extension/package.json
📚 Learning: use `task-master fix-dependencies` to find and fix all invalid dependencies in tasks.json and task f...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master fix-dependencies` to find and fix all invalid dependencies in tasks.json and task files.

Applied to files:

  • apps/extension/package.json
📚 Learning: monitor code review comments, track common development questions, update rules after major refactors...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Monitor code review comments, track common development questions, update rules after major refactors, add links to relevant documentation, and cross-reference related rules.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/task-manager.js : extract tasks from prd documents using ai, create them ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Extract tasks from PRD documents using AI, create them in the current tag context (defaulting to 'master'), provide clear prompts to guide AI task generation, and validate/clean up AI-generated tasks.

Applied to files:

  • apps/extension/package.json
📚 Learning: guidelines for integrating new features into the task master cli with tagged system considerations (...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).

Applied to files:

  • apps/extension/package.json
📚 Learning: in the claude task master system, core task-manager functions are designed with fallback mechanisms ...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#943
File: scripts/modules/task-manager/move-task.js:24-24
Timestamp: 2025-07-18T05:38:17.352Z
Learning: In the Claude Task Master system, core task-manager functions are designed with fallback mechanisms for missing projectRoot parameters using the pattern `const projectRoot = providedProjectRoot || findProjectRoot();`. The readJSON and writeJSON functions have default parameters (projectRoot = null, tag = null) and handle missing parameters gracefully. Adding strict validation to these core functions would break the established flexible architecture pattern.

Applied to files:

  • apps/extension/package.json
📚 Learning: for prd-driven feature development, create a dedicated tag, draft a prd in `.taskmaster/docs/`, pars...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.

Applied to files:

  • apps/extension/package.json
📚 Learning: start new projects by running `task-master init` or `node scripts/dev.js parse-prd --input=
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Start new projects by running `task-master init` or `node scripts/dev.js parse-prd --input=<prd-file.txt>` to generate the initial tasks.json.

Applied to files:

  • apps/extension/package.json
📚 Learning: applies to scripts/modules/**/*.test.js : test cli and mcp interfaces with real task data, verify en...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/**/*.test.js : Test CLI and MCP interfaces with real task data, verify end-to-end workflows across tag contexts, and test error scenarios and recovery in integration tests.

Applied to files:

  • apps/extension/package.json
🪛 YAMLlint (1.37.1)
.github/workflows/version.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 62-62: no new line character at the end of file

(new-line-at-end-of-file)


[error] 62-62: trailing spaces

(trailing-spaces)

.github/workflows/extension-ci.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 143-143: too many blank lines (1 > 0)

(empty-lines)

🪛 actionlint (1.7.7)
.github/workflows/extension-release.yml

192-192: property "create_release" is not defined in object type {vsix-info: {conclusion: string; outcome: string; outputs: {string => string}}}

(expression)

Comment on lines +90 to +96

# VS Code extension test files
.vscode-test/
apps/extension/.vscode-test/

# apps/extension
apps/extension/vsix-build/ No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Add terminal newline & avoid overlapping ignore patterns

The added ignore block lacks a terminating newline and duplicates the existing .vscode-test/ rule at Line 92.
Keeping a final newline and collapsing identical patterns avoids spurious diff noise.

 # VS Code extension test files
 .vscode-test/
-apps/extension/.vscode-test/
-
-# apps/extension
-apps/extension/vsix-build/
+apps/extension/.vscode-test/
+
+# apps/extension
+apps/extension/vsix-build/
+

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In the .gitignore file around lines 90 to 96, remove the duplicate .vscode-test/
ignore pattern to avoid redundancy and add a newline at the end of the file to
ensure proper formatting and prevent spurious diff noise.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (7)
.github/workflows/extension-release.yml (3)

11-11: Use explicit concurrency object for better clarity.

The simple concurrency string works but an explicit object format is clearer and safer.

-concurrency: extension-release-${{ github.ref }}
+concurrency:
+  group: extension-release-${{ github.ref }}
+  cancel-in-progress: true

137-137: Fix trailing spaces and add newline at end of file.

The file has formatting issues including trailing spaces and missing newline at the end.

Apply these formatting fixes:

  • Remove trailing spaces from line 101
  • Add a newline at the end of the file

92-116: Fix missing step ID for create-release action.

The upload-release-asset step references steps.create_release.outputs.upload_url but the create-release step lacks an id, causing the reference to be undefined and the workflow to fail.

       - name: Create GitHub Release
+        id: create_release
         uses: actions/create-release@v1
.github/workflows/extension-ci.yml (1)

143-143: Remove extra blank line at end of file.

There's an unnecessary blank line at the end of the file that should be removed for consistency.

           retention-days: 30
-
apps/extension/package.publish.json (3)

6-6: Placeholder publisher ID still present.
Same issue previously flagged – replace "Hamster" with your registered publisher handle.


11-43: Keyword list remains excessively broad – prune to avoid marketplace rejection.


131-137: Duplicate timeout properties create ambiguity (taskmaster.mcp.requestTimeoutMs vs taskmaster.performance.requestTimeoutMs).

Also applies to: 185-191

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 033ac2d and 1cad8fb.

⛔ Files ignored due to path filters (1)
  • apps/extension/assets/icon.png is excluded by !**/*.png
📒 Files selected for processing (6)
  • .github/scripts/release.sh (1 hunks)
  • .github/scripts/tag-extension.mjs (1 hunks)
  • .github/workflows/extension-ci.yml (1 hunks)
  • .github/workflows/extension-release.yml (1 hunks)
  • .github/workflows/release.yml (2 hunks)
  • apps/extension/package.publish.json (1 hunks)
🧰 Additional context used
🧠 Learnings (71)
📓 Common learnings
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Monitor code review comments for continuous improvement
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Monitor code review comments, track common development questions, update rules after major refactors, add links to relevant documentation, and cross-reference related rules.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.638Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Extract tasks from PRD documents using AI, create them in the current tag context (defaulting to 'master'), provide clear prompts to guide AI task generation, and validate/clean up AI-generated tasks.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request titles must follow the format: Task <ID>: <Task Title>
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master add-task` to add a new task to tasks.json using AI.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use consistent formatting for task files, include all task properties in text files, and format dependencies with status indicators.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating AI usage telemetry across Task Master (telemetry.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Generate task files with `task-master generate` after updating tasks.json.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Describes the high-level architecture of the Task Master CLI application, including the new tagged task lists system (architecture.mdc).
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Use the Taskmaster command set (`task-master` CLI or MCP tools) for all task management operations: listing, expanding, updating, tagging, and status changes.
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use AI to generate detailed subtasks within the current tag context, considering complexity analysis for subtask counts and ensuring proper IDs for newly created subtasks.
📚 Learning: guidelines for using changesets (npm run changeset) to manage versioning and changelogs (changeset.m...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for using Changesets (npm run changeset) to manage versioning and changelogs (changeset.mdc).

Applied to files:

  • .github/workflows/release.yml
  • .github/scripts/release.sh
  • .github/workflows/extension-release.yml
📚 Learning: applies to scripts/modules/*.js : default to current tag when not specified, support explicit tag se...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Default to current tag when not specified, support explicit tag selection in advanced features, validate tag existence before operations, and provide clear messaging about tag context.

Applied to files:

  • .github/scripts/release.sh
  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/*.js : ensure new features work with existing projects seamlessly, suppor...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Ensure new features work with existing projects seamlessly, supporting both legacy and tagged task data formats, and support silent migration during feature usage.

Applied to files:

  • .github/scripts/release.sh
  • .github/scripts/tag-extension.mjs
📚 Learning: applies to .changeset/*.md : when running `npm run changeset` or `npx changeset add`, provide a conc...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .changeset/*.md : When running `npm run changeset` or `npx changeset add`, provide a concise summary of the changes for the `CHANGELOG.md` in imperative mood, typically a single line, and not a detailed Git commit message.

Applied to files:

  • .github/scripts/release.sh
📚 Learning: applies to scripts/modules/* : every command that reads or writes tasks.json must be tag-aware...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tags.mdc:0-0
Timestamp: 2025-07-18T17:13:30.188Z
Learning: Applies to scripts/modules/* : Every command that reads or writes tasks.json must be tag-aware

Applied to files:

  • .github/scripts/release.sh
  • .github/scripts/tag-extension.mjs
📚 Learning: applies to .changeset/* : create appropriate changesets for new features, use semantic versioning, i...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to .changeset/* : Create appropriate changesets for new features, use semantic versioning, include tagged system information in release notes, and document breaking changes if any.

Applied to files:

  • .github/scripts/release.sh
📚 Learning: applies to scripts/modules/commands.js : implement version checking to notify users of available upd...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-31T22:07:49.716Z
Learning: Applies to scripts/modules/commands.js : Implement version checking to notify users of available updates, use non-blocking version checks, and display update notifications after command completion.

Applied to files:

  • .github/scripts/release.sh
  • .github/workflows/extension-release.yml
📚 Learning: applies to scripts/modules/commands.js : all new user-facing commands should be added to 'scripts/mo...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/commands.js : All new user-facing commands should be added to 'scripts/modules/commands.js'.

Applied to files:

  • .github/scripts/release.sh
📚 Learning: applies to scripts/modules/*.js : ensure new features trigger migration when needed, handle migratio...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Ensure new features trigger migration when needed, handle migration errors gracefully, test feature behavior with pre-migration projects, and do not assume projects are already migrated.

Applied to files:

  • .github/scripts/release.sh
📚 Learning: in the eyaltoledano/claude-task-master repository, the vs code extension uses a 3-file packaging sys...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/package.publish.json:2-8
Timestamp: 2025-07-31T20:49:04.638Z
Learning: In the eyaltoledano/claude-task-master repository, the VS Code extension uses a 3-file packaging system where package.json (with name "extension") is for development within the monorepo, while package.publish.json (with name "task-master-hamster") contains the clean manifest for VS Code marketplace publishing. The different names are intentional and serve distinct purposes in the build and publishing workflow.

Applied to files:

  • .github/scripts/release.sh
  • .github/scripts/tag-extension.mjs
  • .github/workflows/extension-ci.yml
  • .github/workflows/extension-release.yml
  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/utils.js : use tag resolution functions for all task data access, provide...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/utilities.mdc:0-0
Timestamp: 2025-07-18T17:18:17.759Z
Learning: Applies to scripts/modules/utils.js : Use tag resolution functions for all task data access, provide backward compatibility with legacy format, and default to 'master' tag when no tag is specified.

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/task-manager.js : use tag resolution functions to maintain backward compa...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use tag resolution functions to maintain backward compatibility, returning legacy format to core functions and not exposing the tagged structure to existing core logic.

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/task-manager.js : generate task files from the current tag context, inclu...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Generate task files from the current tag context, include tag information in generated files, and do not mix tasks from different tags in file generation.

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/*.js : when implementing core logic for new features, do so in 'scripts/m...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : When implementing core logic for new features, do so in 'scripts/modules/' before CLI or MCP interfaces, and design functions to work with both legacy and tagged data formats using tag resolution functions.

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/* : do not hard-code tag resolution (e.g., const tag = options.tag || 'ma...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tags.mdc:0-0
Timestamp: 2025-07-18T17:13:30.188Z
Learning: Applies to scripts/modules/* : Do not hard-code tag resolution (e.g., const tag = options.tag || 'master';); always use getCurrentTag

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/* : all command files must import getcurrenttag from utils.js...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tags.mdc:0-0
Timestamp: 2025-07-18T17:13:30.188Z
Learning: Applies to scripts/modules/* : All command files must import getCurrentTag from utils.js

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to **/*.{test,spec}.{js,ts,jsx,tsx} : create a test file if needed and ensure all tests pass...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Applies to **/*.{test,spec}.{js,ts,jsx,tsx} : Create a test file if needed and ensure all tests pass before completing a task

Applied to files:

  • .github/scripts/tag-extension.mjs
  • .github/workflows/extension-ci.yml
  • .github/workflows/extension-release.yml
📚 Learning: applies to scripts/modules/**/*.test.js : test core logic independently with both data formats, mock...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/**/*.test.js : Test core logic independently with both data formats, mock file system operations, test tag resolution behavior, and verify migration compatibility in unit tests.

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: applies to scripts/modules/* : all commands must resolve the tag using the pattern: options.tag || g...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tags.mdc:0-0
Timestamp: 2025-07-18T17:13:30.188Z
Learning: Applies to scripts/modules/* : All commands must resolve the tag using the pattern: options.tag || getCurrentTag(projectRoot) || 'master'

Applied to files:

  • .github/scripts/tag-extension.mjs
📚 Learning: every pull request containing new features, bug fixes, breaking changes, performance improvements, s...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Every pull request containing new features, bug fixes, breaking changes, performance improvements, significant refactoring, user-facing documentation updates, dependency updates, or impactful build/tooling changes should include a changeset file.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to .cursor/rules/** : do not add a changeset for changes only to files within `.cursor/rules...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/changeset.mdc:0-0
Timestamp: 2025-07-18T17:07:53.100Z
Learning: Applies to .cursor/rules/** : Do not add a changeset for changes only to files within `.cursor/rules/` that solely guide internal development practices for this specific repository.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: test commits should be separated and use the format: test(task-x): add comprehensive tests for [feat...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Test commits should be separated and use the format: test(task-X): Add comprehensive tests for [feature], with a detailed body

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to scripts/modules/task-manager.js : use consistent formatting for task files, include all t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Use consistent formatting for task files, include all task properties in text files, and format dependencies with status indicators.

Applied to files:

  • .github/workflows/extension-ci.yml
  • .github/workflows/extension-release.yml
  • apps/extension/package.publish.json
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : mock console output and verify correct format...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Mock console output and verify correct formatting in UI function tests. Use flexible assertions like toContain() or toMatch() for formatted output.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: when tests are added or modified, commit them separately with a descriptive message...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: When tests are added or modified, commit them separately with a descriptive message

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : use sample task fixtures for consistent test ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Use sample task fixtures for consistent test data, mock file system operations, and test both success and error paths for task operations.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to **/*.test.js : maintain test fixtures separate from test logic....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Maintain test fixtures separate from test logic.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: guidelines for implementing and maintaining tests for task master cli (tests.mdc)....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for implementing and maintaining tests for Task Master CLI (tests.mdc).

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to tests/{unit,integration,e2e}/**/*.test.js : explicitly handle all options, including defa...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to tests/{unit,integration,e2e}/**/*.test.js : Explicitly handle all options, including defaults and shorthand flags (e.g., -p for --prompt), and include null/undefined checks in test implementations for parameters that might be optional.

Applied to files:

  • .github/workflows/extension-ci.yml
📚 Learning: applies to **/*.test.js : verify file operations use the correct paths in expect statements....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-07-18T17:16:13.793Z
Learning: Applies to **/*.test.js : Verify file operations use the correct paths in expect statements.

Applied to files:

  • .github/workflows/extension-ci.yml
  • .github/workflows/extension-release.yml
📚 Learning: applies to scripts/modules/*.js : use consistent file naming conventions: 'task_${id.tostring().pads...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/*.js : Use consistent file naming conventions: 'task_${id.toString().padStart(3, '0')}.txt', use path.join for composing file paths, and use appropriate file extensions (.txt for tasks, .json for data).

Applied to files:

  • .github/workflows/extension-release.yml
  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/commands.js : use path.join() to construct file paths, follow established...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/commands.mdc:0-0
Timestamp: 2025-07-18T17:08:48.695Z
Learning: Applies to scripts/modules/commands.js : Use path.join() to construct file paths, follow established naming conventions (like task_001.txt), check file existence before deletion, and handle file deletion errors gracefully.

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: for changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1035
File: .changeset/quiet-rabbits-bathe.md:5-10
Timestamp: 2025-07-23T16:03:42.784Z
Learning: For changeset files (.changeset/*.md), avoid suggesting punctuation for bullet points as the project intentionally omits punctuation to make the generated changelog feel more natural.

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: update references to external docs...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Update references to external docs

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: applies to mcp-server/src/core/direct-functions/*.js : use path.join() instead of string concatenati...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/mcp.mdc:0-0
Timestamp: 2025-07-18T17:11:36.732Z
Learning: Applies to mcp-server/src/core/direct-functions/*.js : Use path.join() instead of string concatenation for file paths, and follow established file naming conventions (e.g., 'task_001.txt') in direct functions.

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: applies to scripts/modules/commands.js : use consistent patterns for option naming and help text in ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/new_features.mdc:0-0
Timestamp: 2025-07-18T17:12:57.903Z
Learning: Applies to scripts/modules/commands.js : Use consistent patterns for option naming and help text in CLI commands.

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: when resolving code conflicts, use standard git conflict resolution commands and ensure all conflict...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: When resolving code conflicts, use standard Git conflict resolution commands and ensure all conflicts are resolved before continuing

Applied to files:

  • .github/workflows/extension-release.yml
📚 Learning: use `task-master add-task` to add a new task to tasks.json using ai....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master add-task` to add a new task to tasks.json using AI.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to tasks.json : use the `tasks.json` file (generated by taskmaster) to store the project's t...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to tasks.json : Use the `tasks.json` file (generated by Taskmaster) to store the project's task list, including tags and task structures.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : store taskmaster configuration settings (ai model selections, p...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:02.683Z
Learning: Applies to .taskmaster/config.json : Store Taskmaster configuration settings (AI model selections, parameters, logging level, default subtasks/priority, project name, tag management) in `.taskmaster/config.json` in the project root. Do not configure these via environment variables.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: in the eyaltoledano/claude-task-master repository, the mcp server code in mcp-server/src/ is part of...
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1002
File: .changeset/puny-friends-give.md:2-3
Timestamp: 2025-07-17T21:33:57.585Z
Learning: In the eyaltoledano/claude-task-master repository, the MCP server code in mcp-server/src/ is part of the main "task-master-ai" package, not a separate "mcp-server" package. When creating changesets for MCP server changes, use "task-master-ai" as the package name.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: generate task files with `task-master generate` after updating tasks.json....
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Generate task files with `task-master generate` after updating tasks.json.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : store taskmaster configuration settings (ai model selections, p...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to .taskmaster/config.json : Store Taskmaster configuration settings (AI model selections, parameters, logging level, default subtasks/priority, project name, etc.) in the `.taskmaster/config.json` file located in the project root directory. Do not configure non-API key settings via environment variables.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: guidelines for integrating new features into the task master cli with tagged system considerations (...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/glossary.mdc:0-0
Timestamp: 2025-07-18T17:10:53.657Z
Learning: Guidelines for integrating new features into the Task Master CLI with tagged system considerations (new_features.mdc).

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : do not manually edit `.taskmaster/config.json` unless you are c...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: Applies to .taskmaster/config.json : Do not manually edit `.taskmaster/config.json` unless you are certain of the changes; use the `task-master models` command or `models` MCP tool for configuration.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .cursor/mcp.json.example : add the new provider_api_key with its placeholder to the env s...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/ai_providers.mdc:0-0
Timestamp: 2025-07-18T17:06:04.909Z
Learning: Applies to .cursor/mcp.json.example : Add the new PROVIDER_API_KEY with its placeholder to the env section for taskmaster-ai in .cursor/mcp.json.example.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: when implementation differs significantly from planned approach, call `node scripts/dev.js update --...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: When implementation differs significantly from planned approach, call `node scripts/dev.js update --from=<futureTaskId> --prompt="<explanation>"` to update tasks.json.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager.js : subtasks must use consistent properties, maintain simpl...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Subtasks must use consistent properties, maintain simple numeric IDs unique within the parent task, and must not duplicate parent task properties.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager.js : the default tag 'master' must be used for all existing ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : The default tag 'master' must be used for all existing and new tasks unless otherwise specified.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager/**/*.js : do not call ai-specific getters (like `getmainmode...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/utilities.mdc:0-0
Timestamp: 2025-07-18T17:18:17.759Z
Learning: Applies to scripts/modules/task-manager/**/*.js : Do not call AI-specific getters (like `getMainModelId`, `getMainMaxTokens`) from core logic functions in `scripts/modules/task-manager/*`; instead, pass the `role` to the unified AI service.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: use `task-master fix-dependencies` to find and fix all invalid dependencies in tasks.json and task f...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master fix-dependencies` to find and fix all invalid dependencies in tasks.json and task files.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: use `task-master validate-dependencies` to check for and identify invalid dependencies in tasks.json...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use `task-master validate-dependencies` to check for and identify invalid dependencies in tasks.json and task files.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager.js : tasks must be organized into separate contexts (tags) w...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Tasks must be organized into separate contexts (tags) within tasks.json, using the tagged format: {"master": {"tasks": [...]}, "feature-branch": {"tasks": [...]}}. Legacy format {"tasks": [...]} must be silently migrated to the tagged format on first use.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: monitor code review comments, track common development questions, update rules after major refactors...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Monitor code review comments, track common development questions, update rules after major refactors, add links to relevant documentation, and cross-reference related rules.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: monitor code review comments for continuous improvement...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Monitor code review comments for continuous improvement

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: add new rules when code reviews repeatedly mention the same feedback...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Add new rules when code reviews repeatedly mention the same feedback

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: pull request descriptions must use the provided template, including task overview, subtasks complete...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request descriptions must use the provided template, including Task Overview, Subtasks Completed, Implementation Details, Testing, Breaking Changes, and Related Tasks

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager.js : extract tasks from prd documents using ai, create them ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Extract tasks from PRD documents using AI, create them in the current tag context (defaulting to 'master'), provide clear prompts to guide AI task generation, and validate/clean up AI-generated tasks.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: add new rules when a new technology or pattern is used in 3+ files, common bugs could be prevented, ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Add new rules when a new technology or pattern is used in 3+ files, common bugs could be prevented, code reviews repeatedly mention the same feedback, or new security/performance patterns emerge.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: track common development questions for continuous improvement...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/self_improve.mdc:0-0
Timestamp: 2025-07-18T17:13:11.229Z
Learning: Track common development questions for continuous improvement

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: for prd-driven feature development, create a dedicated tag, draft a prd in `.taskmaster/docs/`, pars...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/dev_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:12.881Z
Learning: For PRD-driven feature development, create a dedicated tag, draft a PRD in `.taskmaster/docs/`, parse it into tasks, and add a high-level reference in the master tag.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : do not manually edit the .taskmaster/config.json file; always u...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/taskmaster.mdc:0-0
Timestamp: 2025-07-31T22:08:16.039Z
Learning: Applies to .taskmaster/config.json : Do not manually edit the .taskmaster/config.json file; always use the provided CLI or MCP tools for configuration changes.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : do not manually edit the .taskmaster/config.json file. use the ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/taskmaster.mdc:0-0
Timestamp: 2025-07-31T22:08:16.039Z
Learning: Applies to .taskmaster/config.json : Do not manually edit the .taskmaster/config.json file. Use the included commands either in the MCP or CLI format as needed. Always prioritize MCP tools when available and use the CLI as a fallback.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager/*.js : do not fetch ai-specific parameters (model id, max to...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/ai_services.mdc:0-0
Timestamp: 2025-07-18T17:06:57.833Z
Learning: Applies to scripts/modules/task-manager/*.js : Do not fetch AI-specific parameters (model ID, max tokens, temp) using `config-manager.js` getters for the AI call. Pass the `role` instead.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to .taskmaster/config.json : all other taskmaster settings (model choice, max tokens, temper...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/taskmaster.mdc:0-0
Timestamp: 2025-07-31T22:08:16.039Z
Learning: Applies to .taskmaster/config.json : All other Taskmaster settings (model choice, max tokens, temperature, log level, custom endpoints) are managed in .taskmaster/config.json via the task-master models command or models MCP tool.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager/*.js : do not initialize ai clients (anthropic, perplexity, ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/ai_services.mdc:0-0
Timestamp: 2025-07-18T17:06:57.833Z
Learning: Applies to scripts/modules/task-manager/*.js : Do not initialize AI clients (Anthropic, Perplexity, etc.) directly within core logic (`task-manager/`) or MCP direct functions.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager/*.js : do not implement fallback or retry logic outside `ai-...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/ai_services.mdc:0-0
Timestamp: 2025-07-18T17:06:57.833Z
Learning: Applies to scripts/modules/task-manager/*.js : Do not implement fallback or retry logic outside `ai-services-unified.js`.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: pull request titles must follow the format: task : ...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/git_workflow.mdc:0-0
Timestamp: 2025-07-18T17:10:31.810Z
Learning: Pull Request titles must follow the format: Task <ID>: <Task Title>

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: import task master's development workflow commands and guidelines, treat as if import is in the main...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-31T22:07:14.034Z
Learning: Import Task Master's development workflow commands and guidelines, treat as if import is in the main CLAUDE.md file.

Applied to files:

  • apps/extension/package.publish.json
📚 Learning: applies to scripts/modules/task-manager.js : each task object must include all required properties (...
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/tasks.mdc:0-0
Timestamp: 2025-07-18T17:14:29.399Z
Learning: Applies to scripts/modules/task-manager.js : Each task object must include all required properties (id, title, description, status, dependencies, priority, details, testStrategy, subtasks) and provide default values for optional properties. Extra properties not in the standard schema must not be added.

Applied to files:

  • apps/extension/package.publish.json
🪛 YAMLlint (1.37.1)
.github/workflows/extension-ci.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 143-143: too many blank lines (1 > 0)

(empty-lines)

.github/workflows/extension-release.yml

[warning] 3-3: truthy value should be one of [false, true]

(truthy)


[error] 101-101: trailing spaces

(trailing-spaces)


[error] 137-137: no new line character at the end of file

(new-line-at-end-of-file)

🪛 actionlint (1.7.7)
.github/workflows/extension-release.yml

113-113: property "create_release" is not defined in object type {vsix-info: {conclusion: string; outcome: string; outputs: {string => string}}}

(expression)

🔇 Additional comments (7)
.github/workflows/release.yml (2)

9-12: LGTM - Appropriate permissions for release workflow.

The explicit permissions configuration is well-defined and follows security best practices by granting only the necessary permissions for the release workflow operations.


47-47: LGTM - Custom release script provides better control.

The change from npm run release to a custom shell script enables more sophisticated release automation, particularly for coordinating extension tagging with changeset publishing.

.github/scripts/release.sh (1)

1-15: LGTM - Well-structured release automation script.

The script follows good practices with proper error handling, clear documentation, and a logical flow that prevents changeset from attempting to publish the private extension package by tagging it first.

.github/scripts/tag-extension.mjs (3)

1-10: LGTM - Clean ES modules setup.

The imports use the recommended node: prefix for built-in modules and properly handle the ES modules equivalent of __dirname.


11-33: LGTM - Robust file reading with proper error handling.

The file reading logic properly handles both extension and root package.json files with clear error messages and appropriate failure handling.


35-77: LGTM - Comprehensive tag management with proper validation.

The script effectively validates required fields, checks for existing tags, and handles Git operations with appropriate error handling. The tag format ${pkg.name}@${pkg.version} is consistent with standard versioning practices.

.github/workflows/extension-ci.yml (1)

1-142: LGTM - Well-structured CI workflow with efficient design.

The workflow demonstrates good practices with:

  • Path-based filtering for efficient triggers
  • Proper job dependencies and caching strategy
  • Separation of concerns across setup, typecheck, and build jobs
  • Comprehensive build verification and artifact upload

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (14)
apps/extension/src/components/TaskDetails/DetailsSection.tsx (2)

9-149: Replace custom markdown parser with standard library to eliminate duplication.

This custom markdown parsing implementation duplicates similar logic found elsewhere in the codebase and should be replaced with a proper markdown library like react-markdown for better maintainability, security, and feature completeness.


168-168: Improve CSS class name generation for robustness.

The current string manipulation for generating CSS class names is fragile and doesn't handle special characters or edge cases properly. Consider using a utility function for safe class name generation.

apps/extension/src/components/ConfigView.tsx (1)

69-85: Consider moving static configuration outside component.

The modelLabels object is static and could be moved outside the component to avoid recreation on every render.

+const modelLabels = {
+	main: {
+		label: 'Main Model',
+		icon: '🤖',
+		description: 'Primary model for task generation'
+	},
+	research: {
+		label: 'Research Model',
+		icon: '🔍',
+		description: 'Model for research-backed operations'
+	},
+	fallback: {
+		label: 'Fallback Model',
+		icon: '🔄',
+		description: 'Backup model if primary fails'
+	}
+};

 export const ConfigView: React.FC<ConfigViewProps> = ({
 	sendMessage,
 	onNavigateBack
 }) => {
-	const modelLabels = {
-		main: {
-			label: 'Main Model',
-			icon: '🤖',
-			description: 'Primary model for task generation'
-		},
-		research: {
-			label: 'Research Model',
-			icon: '🔍',
-			description: 'Model for research-backed operations'
-		},
-		fallback: {
-			label: 'Fallback Model',
-			icon: '🔄',
-			description: 'Backup model if primary fails'
-		}
-	};
apps/extension/esbuild.js (1)

32-63: Consider optimizing file system operations in alias plugin.

The alias plugin correctly handles path resolution for @/ imports, but uses synchronous file system operations which could potentially slow down builds.

Consider caching extension checks or using a more efficient approach:

const aliasPlugin = {
	name: 'alias',
	setup(build) {
+		const fs = require('fs');
+		const extensions = ['.tsx', '.ts', '.jsx', '.js'];
+		
		build.onResolve({ filter: /^@\// }, (args) => {
			const resolvedPath = path.resolve(__dirname, 'src', args.path.slice(2));
-			
-			// Try to resolve with common TypeScript extensions
-			const fs = require('fs');
-			const extensions = ['.tsx', '.ts', '.jsx', '.js'];

Moving the imports outside the resolver function improves performance by avoiding repeated require() calls.

apps/extension/src/webview/reducers/appReducer.ts (1)

32-49: Consider adding defensive checks for task existence.

The task update actions are well-implemented with proper immutability patterns. However, consider adding defensive checks to handle cases where the task ID might not exist.

case 'UPDATE_TASK_STATUS': {
	const { taskId, newStatus } = action.payload;
+	const taskExists = state.tasks.some(task => task.id === taskId);
+	if (!taskExists) {
+		logger.warn('UPDATE_TASK_STATUS: Task not found:', taskId);
+		return state;
+	}
	return {
		...state,
		tasks: state.tasks.map((task) =>
			task.id === taskId ? { ...task, status: newStatus } : task
		)
	};
}
apps/extension/src/services/task-repository.ts (2)

59-112: Consider refactoring duplicated search logic.

The method properly handles both main tasks and subtasks with multiple ID formats, but the search logic is duplicated between cache and fresh data sections.

+	private findTaskInList(tasks: Task[], taskId: string): Task | null {
+		for (const task of tasks) {
+			if (task.id === taskId) {
+				return task;
+			}
+			// Check subtasks
+			if (task.subtasks) {
+				for (const subtask of task.subtasks) {
+					if (
+						subtask.id.toString() === taskId ||
+						`${task.id}.${subtask.id}` === taskId
+					) {
+						return {
+							...subtask,
+							id: subtask.id.toString(),
+							description: subtask.description || '',
+							status: (subtask.status || 'pending') as TaskMasterTask['status'],
+							priority: 'medium' as const,
+							dependencies: subtask.dependencies?.map(d => d.toString()) || []
+						};
+					}
+				}
+			}
+		}
+		return null;
+	}

 	async getById(taskId: string): Promise<Task | null> {
 		// First check cache
 		if (this.cache) {
-			// Handle both main tasks and subtasks
-			for (const task of this.cache) {
-				if (task.id === taskId) {
-					return task;
-				}
-				// Check subtasks
-				if (task.subtasks) {
-					for (const subtask of task.subtasks) {
-						if (
-							subtask.id.toString() === taskId ||
-							`${task.id}.${subtask.id}` === taskId
-						) {
-							return {
-								...subtask,
-								id: subtask.id.toString(),
-								description: subtask.description || '',
-								status: (subtask.status || 'pending') as TaskMasterTask['status'],
-								priority: 'medium' as const,
-								dependencies: subtask.dependencies?.map(d => d.toString()) || []
-							};
-						}
-					}
-				}
-			}
+			const found = this.findTaskInList(this.cache, taskId);
+			if (found) return found;
 		}
 
 		// If not in cache, fetch all and search
 		const tasks = await this.getAll();
-		for (const task of tasks) {
-			if (task.id === taskId) {
-				return task;
-			}
-			// Check subtasks
-			if (task.subtasks) {
-				for (const subtask of task.subtasks) {
-					if (subtask.id.toString() === taskId || `${task.id}.${subtask.id}` === taskId) {
-						return {
-							...subtask,
-							id: subtask.id.toString(),
-							description: subtask.description || '',
-							status: (subtask.status || 'pending') as TaskMasterTask['status'],
-							priority: 'medium' as const,
-							dependencies: subtask.dependencies?.map(d => d.toString()) || []
-						};
-					}
-				}
-			}
-		}
-
-		return null;
+		return this.findTaskInList(tasks, taskId);
 	}

133-133: Improve type safety for updateContent method.

The updates parameter uses any type, which reduces type safety.

Consider using a more specific type:

-	async updateContent(taskId: string, updates: any): Promise<void> {
+	async updateContent(taskId: string, updates: Partial<Task>): Promise<void> {
apps/extension/src/services/error-handler.ts (3)

35-39: Consider implementing singleton pattern for ErrorHandler.

Based on the usage patterns and the AI summary mentioning this should be a singleton, the ErrorHandler should implement the singleton pattern to ensure consistent error tracking across the extension.

 export class ErrorHandler {
+	private static instance: ErrorHandler | null = null;
 	private errorLog: Map<string, ErrorContext> = new Map();
 	private errorId = 0;
 
-	constructor(private logger: ExtensionLogger) {}
+	private constructor(private logger: ExtensionLogger) {}
+
+	static getInstance(logger?: ExtensionLogger): ErrorHandler {
+		if (!ErrorHandler.instance) {
+			if (!logger) {
+				throw new Error('Logger must be provided when creating ErrorHandler instance');
+			}
+			ErrorHandler.instance = new ErrorHandler(logger);
+		}
+		return ErrorHandler.instance;
+	}

44-55: Automatically trigger error log cleanup.

The clearOldErrors method is never called automatically. Consider calling it periodically or after each error is added.

 	handleError(context: ErrorContext): string {
 		const errorId = `error_${++this.errorId}`;
 		this.errorLog.set(errorId, context);
 
+		// Clean up old errors if log is getting large
+		if (this.errorLog.size > 150) {
+			this.clearOldErrors();
+		}
+
 		// Log to extension logger
 		this.logError(context);

298-298: Correct extension ID in getExtension call

The published extension's manifest (apps/extension/package.publish.json) uses

  "publisher": "Hamster",
  "name": "task-master-hamster"

so the full VS Code extension ID is Hamster.task-master-hamster, not Hamster.taskmaster. Update the hardcoded call and consider deriving it from package.json at build time.

Suggested diff:

- `- Extension Version: ${vscode.extensions.getExtension('Hamster.taskmaster')?.packageJSON.version || 'Unknown'}`,
+ `- Extension Version: ${vscode.extensions.getExtension('Hamster.task-master-hamster')?.packageJSON.version || 'Unknown'}`,

For better maintainability, you can import the fields directly:

import pkg from '../../package.publish.json';
const EXTENSION_ID = `${pkg.publisher}.${pkg.name}`;

// …
`- Extension Version: ${vscode.extensions.getExtension(EXTENSION_ID)?.packageJSON.version || 'Unknown'}`,
apps/extension/package.json (4)

13-15: Add mandatory activationEvents to pass vsce validation

vsce package rejects manifests without an activationEvents array.
Insert a top-level field with the commands or other events that trigger activation.

   "main": "./dist/extension.js",
+  "activationEvents": [
+    "onCommand:tm.showKanbanBoard",
+    "onCommand:tm.checkConnection",
+    "onCommand:tm.reconnect",
+    "onCommand:tm.openSettings"
+  ],
   "contributes": {

12-12: Replace unsupported marketplace categories

"AI", "Visualization" and "Education" are not in the official list accepted by the VS Code Marketplace. Keep valid ones only (e.g. "Other" or a suitable allowed value).

-  "categories": ["AI", "Visualization", "Education", "Other"],
+  "categories": ["Other"],

3-8: Publish-blocking metadata: placeholder publisher, missing license

Marketplace upload will fail until a real publisher ID is supplied and a license is declared.

   "version": "0.0.0",
-  "publisher": "Hamster",
+  "publisher": "your-publisher-id",
+  "license": "MIT",

(Adjust the license identifier to match your actual project license.)
"private": true is fine for monorepo safety, but remember to override it in package.publish.json if you plan to publish via npm later.


235-236: watch script is not Windows-safe

Using & runs only on POSIX shells. You already depend on npm-run-all; switch to it for cross-platform parallelism.

-    "watch": "npm run watch:js & npm run watch:css",
+    "watch": "npm-run-all --parallel watch:js watch:css",

Comment on lines +1 to +30
/**
* Priority Badge Component
*/

import React from 'react';
import { Badge } from '@/components/ui/badge';
import type { TaskMasterTask } from '../types';

interface PriorityBadgeProps {
priority: TaskMasterTask['priority'];
}

export const PriorityBadge: React.FC<PriorityBadgeProps> = ({ priority }) => {
if (!priority) return null;

const variants = {
high: 'destructive' as const,
medium: 'default' as const,
low: 'secondary' as const
};

return (
<Badge
variant={variants[priority] || 'secondary'}
className="text-xs font-normal px-2 py-0.5"
>
{priority}
</Badge>
);
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Resolve code duplication with existing PriorityBadge component.

There's already a PriorityBadge component at apps/extension/src/components/TaskDetails/PriorityBadge.tsx that serves the same purpose but uses inline styles. Having two components with identical functionality creates maintenance overhead and potential inconsistencies.

Consider consolidating these into a single, reusable component. The current implementation using the Badge component with variants is cleaner and more maintainable than the inline styles approach.


🏁 Script executed:

#!/bin/bash
# Search for all PriorityBadge component usages to understand the impact
rg -A 3 "PriorityBadge" --type tsx --type ts

Length of output: 72


🏁 Script executed:

#!/bin/bash
# Search for all PriorityBadge definitions and usages in .tsx and .ts files
rg -n "PriorityBadge" --glob '*.tsx' --glob '*.ts'

Length of output: 827


🏁 Script executed:

#!/bin/bash
# Display the existing PriorityBadge implementation for comparison
sed -n '1,200p' apps/extension/src/components/TaskDetails/PriorityBadge.tsx

Length of output: 1438


Consolidate duplicate PriorityBadge implementations

There are two separate PriorityBadge components with identical intent but differing implementations—one using the shared Badge variants and one with inline styles—leading to maintenance overhead and inconsistent UI. Please unify these into a single component that both contexts consume.

• Files to reconcile:

  • apps/extension/src/components/TaskDetails/PriorityBadge.tsx (inline‐style version)
  • apps/extension/src/webview/components/PriorityBadge.tsx (uses Badge variants)

Recommended approach:

  1. Extract a single PriorityBadge into a shared location (e.g. @/components/ui/PriorityBadge.tsx).
  2. Port the preferred styling approach (variant-based or theme-adaptive) into that file.
  3. Update both import sites (TaskMetadataSidebar.tsx, TaskCard.tsx, etc.) to use the unified component.
  4. Remove the duplicate file.

This will ensure a consistent look and simplify future updates.

🤖 Prompt for AI Agents
In apps/extension/src/webview/components/PriorityBadge.tsx lines 1 to 30, there
are two separate PriorityBadge components with duplicate functionality but
different styles causing maintenance issues. To fix this, create a single
PriorityBadge component in a shared location like
@/components/ui/PriorityBadge.tsx using the preferred variant-based styling from
the current webview version. Then update all import statements in files such as
TaskMetadataSidebar.tsx and TaskCard.tsx to import this unified component.
Finally, delete the duplicate PriorityBadge file in
apps/extension/src/components/TaskDetails to ensure consistent UI and easier
maintenance.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🔭 Outside diff range comments (1)
apps/extension/CHANGELOG.md (1)

1-2: Remove redundant CHANGELOG.md file.

Since your project uses the changeset package for version management and changelog generation, this manual CHANGELOG.md file is redundant and could cause confusion. The changeset system will automatically generate the changelog during releases.

Delete this file to avoid conflicts with the automated changeset workflow.

♻️ Duplicate comments (13)
apps/extension/src/webview/reducers/appReducer.ts (1)

36-53: Consider adding defensive checks for task existence.

The task update actions are well-implemented with proper immutability patterns. However, consider adding defensive checks to handle cases where the task ID might not exist.

case 'UPDATE_TASK_STATUS': {
	const { taskId, newStatus } = action.payload;
+	const taskExists = state.tasks.some(task => task.id === taskId);
+	if (!taskExists) {
+		logger.warn('UPDATE_TASK_STATUS: Task not found:', taskId);
+		return state;
+	}
	return {
		...state,
		tasks: state.tasks.map((task) =>
			task.id === taskId ? { ...task, status: newStatus } : task
		)
	};
}
case 'UPDATE_TASK_CONTENT': {
	const { taskId, updates } = action.payload;
+	const taskExists = state.tasks.some(task => task.id === taskId);
+	if (!taskExists) {
+		logger.warn('UPDATE_TASK_CONTENT: Task not found:', taskId);
+		return state;
+	}
	return {
		...state,
		tasks: state.tasks.map((task) =>
			task.id === taskId ? { ...task, ...updates } : task
		)
	};
}
apps/extension/src/components/TaskDetails/DetailsSection.tsx (2)

9-170: Duplicate markdown parsing logic - consolidate and use proper library.

This markdown parser is very similar to the one in TaskDetailsView.original.tsx, creating code duplication. Both should be replaced with a proper markdown library like react-markdown for better maintainability and feature completeness.

Consider creating a shared MarkdownRenderer component:

// components/shared/MarkdownRenderer.tsx
import ReactMarkdown from 'react-markdown';

export const MarkdownRenderer: React.FC<{content: string}> = ({ content }) => (
  <ReactMarkdown
    components={{
      // VS Code theme-compatible components
      pre: ({ children }) => (
        <pre className="bg-vscode-editor-background rounded-md p-4 overflow-x-auto mb-4 border border-vscode-editor-lineHighlightBorder">
          {children}
        </pre>
      ),
      code: ({ children }) => (
        <code className="text-sm text-vscode-editor-foreground font-mono">
          {children}
        </code>
      ),
      // Add other custom components as needed
    }}
  >
    {content}
  </ReactMarkdown>
);

189-189: Improve CSS class name generation for robustness.

The CSS class name generation using string manipulation may not handle all edge cases properly.

-<div className={title.toLowerCase().replace(/\s+/g, '-') + '-content'}>
+<div className={`${title.toLowerCase().replace(/[^a-z0-9]+/g, '-')}-content`}>

Or better yet, use a utility function for consistent class name generation:

// utils/css.ts
export const generateClassName = (text: string): string => {
  return text
    .toLowerCase()
    .replace(/[^a-z0-9]+/g, '-')
    .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens
};

// Then use it:
<div className={`${generateClassName(title)}-content`}>
apps/extension/src/services/task-repository.ts (2)

59-117: Consider refactoring duplicated search logic.

The method properly handles both main tasks and subtasks with multiple ID formats, but the search logic is duplicated between cache and fresh data sections.

+	private findTaskInList(tasks: Task[], taskId: string): Task | null {
+		for (const task of tasks) {
+			if (task.id === taskId) {
+				return task;
+			}
+			// Check subtasks
+			if (task.subtasks) {
+				for (const subtask of task.subtasks) {
+					if (
+						subtask.id.toString() === taskId ||
+						`${task.id}.${subtask.id}` === taskId
+					) {
+						return {
+							...subtask,
+							id: subtask.id.toString(),
+							description: subtask.description || '',
+							status: (subtask.status || 'pending') as TaskMasterTask['status'],
+							priority: 'medium' as const,
+							dependencies: subtask.dependencies?.map((d) => d.toString()) || []
+						};
+					}
+				}
+			}
+		}
+		return null;
+	}

 	async getById(taskId: string): Promise<Task | null> {
 		// First check cache
 		if (this.cache) {
-			// Handle both main tasks and subtasks
-			for (const task of this.cache) {
-				if (task.id === taskId) {
-					return task;
-				}
-				// Check subtasks
-				if (task.subtasks) {
-					for (const subtask of task.subtasks) {
-						if (
-							subtask.id.toString() === taskId ||
-							`${task.id}.${subtask.id}` === taskId
-						) {
-							return {
-								...subtask,
-								id: subtask.id.toString(),
-								description: subtask.description || '',
-								status: (subtask.status ||
-									'pending') as TaskMasterTask['status'],
-								priority: 'medium' as const,
-								dependencies:
-									subtask.dependencies?.map((d) => d.toString()) || []
-							};
-						}
-					}
-				}
-			}
+			const found = this.findTaskInList(this.cache, taskId);
+			if (found) return found;
 		}
 
 		// If not in cache, fetch all and search
 		const tasks = await this.getAll();
-		for (const task of tasks) {
-			if (task.id === taskId) {
-				return task;
-			}
-			// Check subtasks
-			if (task.subtasks) {
-				for (const subtask of task.subtasks) {
-					if (
-						subtask.id.toString() === taskId ||
-						`${task.id}.${subtask.id}` === taskId
-					) {
-						return {
-							...subtask,
-							id: subtask.id.toString(),
-							description: subtask.description || '',
-							status: (subtask.status || 'pending') as TaskMasterTask['status'],
-							priority: 'medium' as const,
-							dependencies: subtask.dependencies?.map((d) => d.toString()) || []
-						};
-					}
-				}
-			}
-		}
-
-		return null;
+		return this.findTaskInList(tasks, taskId);
 	}

138-138: Improve type safety for updateContent method.

The updates parameter uses any type, which reduces type safety.

Consider using a more specific type:

-	async updateContent(taskId: string, updates: any): Promise<void> {
+	async updateContent(taskId: string, updates: Partial<Task>): Promise<void> {
apps/extension/README.md (2)

55-59: Code-block fence is still malformed

This is the same issue previously reported: the fenced block is missing the required blank line before it, and the closing back-ticks are indented. VS Code renders it as plain text.

-If you don't have a Taskmaster project yet:
-```bash
-cd your-project
-npm i -g task-master-ai
-   task-master init
-   ```
+If you don't have a Taskmaster project yet:
+
+```bash
+cd your-project
+npm i -g task-master-ai
+task-master init
+```

204-204: File still missing trailing newline

Add a blank line after Line 204 to satisfy MD047.

apps/extension/package.publish.json (2)

12-44: Keyword list is excessively broad— risks Marketplace rejection

VS Code guidelines recommend a concise, relevant set of keywords. Listing generic terms such as "php", "python", "intellicode" and vendor names provides no ranking benefit and has triggered rejections in past submissions.

Trim the list to 8-12 highly relevant terms (e.g. "kanban", "task management", "ai", "taskmaster", "mcp").


144-150: Conflicting timeout settings—clarify or deduplicate

taskmaster.mcp.requestTimeoutMs (Line 146 = 300 000 ms) and taskmaster.performance.requestTimeoutMs (Line 200 = 30 000 ms) describe timeouts for “requests”, but with an order-of-magnitude difference.
This will confuse users and complicate support.

Suggested options:

-  "taskmaster.performance.requestTimeoutMs": { ... }
+  "taskmaster.performance.apiRequestTimeoutMs": {           // renamed
+    "type": "number",
+    "default": 30000,
+    ...
+    "description": "Request timeout for Kanban API calls in milliseconds"
+  }

or remove one property if they are truly the same.

Also applies to: 198-204

apps/extension/package.json (4)

7-9: Placeholder publisher and missing license still block marketplace submission

"publisher": "Hamster" is clearly a stub and the license field is still absent, so vsce/Open VSX will reject the package.

   "version": "0.22.3",
-  "publisher": "Hamster",
+  "publisher": "<your-publisher-id>",
+  "license": "MIT",

12-13: Invalid marketplace categories remain

"AI", "Visualization" and "Education" are not in the official VS Code category list, causing validation failure.

-  "categories": ["AI", "Visualization", "Education", "Other"],
+  "categories": ["Other"],

236-238: watch script is still POSIX-only

The & operator breaks on Windows despite npm-run-all being listed in devDeps.

-    "watch": "npm run watch:js & npm run watch:css",
+    "watch": "npm-run-all --parallel watch:js watch:css",

3-3: Re-evaluate "private": true flag

Keeping the package private prevents accidental npm publish, but it also blocks any future plan to ship the dev manifest to an internal registry. Ensure this is intentional or add an explanatory comment.

Comment on lines +16 to +23
### 📊 **Interactive Kanban Board**
- **Drag & Drop Interface** - Effortlessly move tasks between status columns
- **Real-time Sync** - Changes instantly reflect in your Taskmaster project files
- **Multiple Views** - Board view and detailed task sidebar
- **Smart Columns** - Pending, In Progress, Review, Done, Deferred, and Cancelled

![Kanban Board](assets/screenshots/kanban-board.png)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Add blank lines around heading and list for Markdown compliance

markdownlint flags MD022/MD032 because the list that starts at Line 17 is not separated from the heading on Line 16 and the image on Line 22 is jammed against the list.
Insert blank lines before the list and after the image.

-### 📊 **Interactive Kanban Board**
-- **Drag & Drop Interface** ...
-...
-![Kanban Board](assets/screenshots/kanban-board.png)
+### 📊 **Interactive Kanban Board**
+
+- **Drag & Drop Interface** ...
+...
+
+![Kanban Board](assets/screenshots/kanban-board.png)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### 📊 **Interactive Kanban Board**
- **Drag & Drop Interface** - Effortlessly move tasks between status columns
- **Real-time Sync** - Changes instantly reflect in your Taskmaster project files
- **Multiple Views** - Board view and detailed task sidebar
- **Smart Columns** - Pending, In Progress, Review, Done, Deferred, and Cancelled
![Kanban Board](assets/screenshots/kanban-board.png)
### 📊 **Interactive Kanban Board**
- **Drag & Drop Interface** - Effortlessly move tasks between status columns
- **Real-time Sync** - Changes instantly reflect in your Taskmaster project files
- **Multiple Views** - Board view and detailed task sidebar
- **Smart Columns** - Pending, In Progress, Review, Done, Deferred, and Cancelled
![Kanban Board](assets/screenshots/kanban-board.png)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

16-16: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


17-17: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In apps/extension/README.md around lines 16 to 23, add a blank line after the
heading on line 16 and before the list starting on line 17, and also add a blank
line after the image on line 22 to separate it from the list. This will fix
markdownlint errors MD022 and MD032 by ensuring proper spacing around the
heading, list, and image.

Comment on lines +153 to +158
### **Getting Help**
- 📖 **Documentation**: [Taskmaster AI Docs](https://github.com/eyaltoledano/claude-task-master)
- 🐛 **Report Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/eyaltoledano/claude-task-master/discussions)
- 🐛 **Report Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove duplicate “Report Issues” bullet

Lines 155 and 157 repeat the same link.

- - 🐛 **Report Issues**: <link>
- - 💬 **Discussions**: <link>
- - 🐛 **Report Issues**: <link>   ← duplicate
+ - 🐛 **Report Issues**: <link>
+ - 💬 **Discussions**: <link>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### **Getting Help**
- 📖 **Documentation**: [Taskmaster AI Docs](https://github.com/eyaltoledano/claude-task-master)
- 🐛 **Report Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/eyaltoledano/claude-task-master/discussions)
- 🐛 **Report Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)
### **Getting Help**
- 📖 **Documentation**: [Taskmaster AI Docs](https://github.com/eyaltoledano/claude-task-master)
- 🐛 **Report Issues**: [GitHub Issues](https://github.com/eyaltoledano/claude-task-master/issues)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/eyaltoledano/claude-task-master/discussions)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

153-153: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


154-154: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In apps/extension/README.md around lines 153 to 158, there is a duplicate bullet
for "Report Issues" with the same GitHub Issues link on lines 155 and 157.
Remove one of these duplicate lines to keep the list concise and avoid
repetition.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

♻️ Duplicate comments (6)
apps/extension/package.mjs (2)

22-41: LGTM! Well-designed selective file copying.

The approach of copying only specific files while excluding source maps is excellent for creating clean production packages. The file existence checks and logging provide good visibility.


116-118: Consider using fs.sync() instead of arbitrary delay.

The 100ms delay appears to be a workaround for file system operations. Consider using fs.fsyncSync() on file descriptors or removing the delay entirely since fs-extra operations are synchronous.

apps/extension/package.json (4)

2-9: License still missing & "private": true unchanged
Prior feedback requested adding a "license" field and reconsidering the "private": true flag. Both items remain unaddressed.


7-7: publisher placeholder persists
"publisher": "Hamster" is still a placeholder that will block marketplace publication.


12-12: Invalid marketplace categories
"AI", "Visualization", and "Education" are not accepted by vsce. Please use only official categories.


236-238: watch script remains non-portable
Using & breaks on Windows shells; switch to npm-run-all --parallel watch:js watch:css.

Comment on lines +1 to +3
#!/bin/bash
set -e

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Harden the shell script

Use stricter bash flags to abort on unset vars and broken pipes:

-#!/bin/bash
-set -e
+#!/usr/bin/env bash
+set -euo pipefail

This prevents silent failures if, for example, NPM_TOKEN is missing.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
#!/bin/bash
set -e
#!/usr/bin/env bash
set -euo pipefail
🤖 Prompt for AI Agents
In .github/scripts/release.sh at lines 1 to 3, enhance the script's robustness
by adding stricter bash flags. Modify the set command to include -u and -o
pipefail, so it reads 'set -euo pipefail'. This change will cause the script to
abort on unset variables and on errors in any part of a pipeline, preventing
silent failures such as missing environment variables like NPM_TOKEN.

Comment on lines +7 to +10
if [ -f .changeset/pre.json ]; then
echo "⚠️ Warning: pre.json still exists. Removing it..."
rm -f .changeset/pre.json
fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Redundant pre.json removal

The workflow step already deletes .changeset/pre.json.
Doing it again here adds maintenance overhead and masks drift between the two locations.
Prefer a single authoritative clean-up (either here or in the workflow, not both).

🤖 Prompt for AI Agents
In .github/scripts/release.sh around lines 7 to 10, the script redundantly
removes the .changeset/pre.json file, which is already deleted in the workflow
step. To fix this, remove the conditional block that checks for and deletes
.changeset/pre.json from this script, ensuring only one location handles the
cleanup to avoid maintenance overhead and potential drift.

Comment on lines +9 to +13
permissions:
contents: write
pull-requests: write
id-token: write

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Consider least-privilege permissions

id-token: write is only needed when the job later requests OIDC tokens (e.g. actions/upload-artifact, npm publish to private registry with OIDC, etc.).
Nothing in this workflow currently relies on OIDC, so we could drop this line and follow GitHub’s least-privilege guidance.

🤖 Prompt for AI Agents
In .github/workflows/release.yml around lines 9 to 13, the permissions section
includes 'id-token: write' which is unnecessary since the workflow does not use
OIDC tokens. Remove the 'id-token: write' line to adhere to the principle of
least privilege and reduce potential security risks.

Comment on lines +41 to +60
- name: Exit pre-release mode and clean up
run: |
echo "🔄 Ensuring we're not in pre-release mode for main branch..."

# Exit pre-release mode if we're in it
npx changeset pre exit || echo "Not in pre-release mode"

# Remove pre.json file if it exists (belt and suspenders approach)
if [ -f .changeset/pre.json ]; then
echo "🧹 Removing pre.json file..."
rm -f .changeset/pre.json
fi

# Verify the file is gone
if [ ! -f .changeset/pre.json ]; then
echo "✅ pre.json successfully removed"
else
echo "❌ Failed to remove pre.json"
exit 1
fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Duplicate “exit pre-release” logic – keep it in one place

The same clean-up (removing .changeset/pre.json) is executed here and again in ./.github/scripts/release.sh.
Maintaining the same logic in two places invites drift.

A simpler, single-source variant:

-      - name: Exit pre-release mode and clean up
-        run: |
-          npx changeset pre exit || echo "Not in pre-release mode"
-          rm -f .changeset/pre.json || true
+      - name: Exit pre-release mode
+        run: npx changeset pre exit || true

…and delete the identical block inside release.sh (or vice-versa).

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 44-44: trailing spaces

(trailing-spaces)


[error] 47-47: trailing spaces

(trailing-spaces)


[error] 53-53: trailing spaces

(trailing-spaces)

🤖 Prompt for AI Agents
In .github/workflows/release.yml lines 41 to 60, the logic to exit pre-release
mode and remove the .changeset/pre.json file is duplicated in the release.sh
script. To fix this, remove this entire block from the workflow file and keep
the cleanup logic only in release.sh, or alternatively keep it here and delete
it from release.sh, ensuring the cleanup logic exists in only one place to avoid
maintenance drift.

Comment on lines +42 to +60
run: |
echo "🔄 Ensuring we're not in pre-release mode for main branch..."

# Exit pre-release mode if we're in it
npx changeset pre exit || echo "Not in pre-release mode"

# Remove pre.json file if it exists (belt and suspenders approach)
if [ -f .changeset/pre.json ]; then
echo "🧹 Removing pre.json file..."
rm -f .changeset/pre.json
fi

# Verify the file is gone
if [ ! -f .changeset/pre.json ]; then
echo "✅ pre.json successfully removed"
else
echo "❌ Failed to remove pre.json"
exit 1
fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

YAML-lint: trailing spaces

Lines 44, 47 and 53 contain trailing whitespace, flagged by YAML-lint.
Tiny, but they do break “failure-on-warning” linters in strict CI.

-          echo "🔄 Ensuring we're not in pre-release mode for main branch..."␠
+          echo "🔄 Ensuring we're not in pre-release mode for main branch..."

Apply the same trim to the other two lines.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
run: |
echo "🔄 Ensuring we're not in pre-release mode for main branch..."
# Exit pre-release mode if we're in it
npx changeset pre exit || echo "Not in pre-release mode"
# Remove pre.json file if it exists (belt and suspenders approach)
if [ -f .changeset/pre.json ]; then
echo "🧹 Removing pre.json file..."
rm -f .changeset/pre.json
fi
# Verify the file is gone
if [ ! -f .changeset/pre.json ]; then
echo "✅ pre.json successfully removed"
else
echo "❌ Failed to remove pre.json"
exit 1
fi
run: |
echo "🔄 Ensuring we're not in pre-release mode for main branch..."
# Exit pre-release mode if we're in it
npx changeset pre exit || echo "Not in pre-release mode"
# Remove pre.json file if it exists (belt and suspenders approach)
if [ -f .changeset/pre.json ]; then
echo "🧹 Removing pre.json file..."
rm -f .changeset/pre.json
fi
# Verify the file is gone
if [ ! -f .changeset/pre.json ]; then
echo "✅ pre.json successfully removed"
else
echo "❌ Failed to remove pre.json"
exit 1
fi
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 44-44: trailing spaces

(trailing-spaces)


[error] 47-47: trailing spaces

(trailing-spaces)


[error] 53-53: trailing spaces

(trailing-spaces)

🤖 Prompt for AI Agents
In .github/workflows/release.yml between lines 42 and 60, remove the trailing
whitespace on lines 44, 47, and 53 to comply with YAML-lint rules. Edit these
lines to ensure no spaces exist after the end of the text or commands,
maintaining proper indentation but eliminating any trailing spaces that cause
linter warnings.

Comment on lines +14 to +15
"activationEvents": ["onStartupFinished", "workspaceContains:.taskmaster/**"],
"contributes": {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

❓ Verification inconclusive

Over-eager activation may hurt performance & may fail validation
onStartupFinished activates the extension for every VS Code session, even when no TaskMaster workspace is open – consider removing it to avoid unnecessary load.
• Verify that the glob in workspaceContains:.taskmaster/** passes vsce validation; if not, use workspaceContains:.taskmaster or a specific filename.


Streamline activation events to improve performance and VSCE compatibility
The extension currently activates on every startup and uses an unsupported glob, which can slow VS Code and fail packaging validation. Please update as follows:

• In apps/extension/package.json (Lines 14–15):

  • Remove "onStartupFinished" to avoid activating the extension when no TaskMaster workspace is open.
  • Replace "workspaceContains:.taskmaster/**" with a literal path, for example "workspaceContains:.taskmaster" or a specific file (e.g., "workspaceContains:.taskmaster/config.json"), to satisfy VSCE’s validation.

Suggested diff:

- "activationEvents": ["onStartupFinished", "workspaceContains:.taskmaster/**"],
+ "activationEvents": [
+   "workspaceContains:.taskmaster"
+ ],
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"activationEvents": ["onStartupFinished", "workspaceContains:.taskmaster/**"],
"contributes": {
"activationEvents": [
"workspaceContains:.taskmaster"
],
"contributes": {
🤖 Prompt for AI Agents
In apps/extension/package.json around lines 14 to 15, remove the
"onStartupFinished" activation event to prevent the extension from activating
unnecessarily on every startup. Replace the unsupported glob pattern
"workspaceContains:.taskmaster/**" with a literal path such as
"workspaceContains:.taskmaster" or a specific file like
"workspaceContains:.taskmaster/config.json" to ensure compatibility with VSCE
packaging and improve performance.

@Crunchyman-ralph Crunchyman-ralph merged commit 64302dc into eyaltoledano:next Aug 1, 2025
7 checks passed
eyaltoledano pushed a commit that referenced this pull request Aug 2, 2025
…ce (#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Crunchyman-ralph added a commit to iamladi/claude-task-master that referenced this pull request Aug 11, 2025
…ce (eyaltoledano#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Crunchyman-ralph added a commit to iamladi/claude-task-master that referenced this pull request Aug 11, 2025
…ce (eyaltoledano#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
stephanschielke pushed a commit to stephanschielke/cursor-task-master that referenced this pull request Aug 22, 2025
…ce (eyaltoledano#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
stephanschielke pushed a commit to stephanschielke/cursor-task-master that referenced this pull request Aug 22, 2025
…ce (eyaltoledano#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Sep 12, 2025
16 tasks
sfc-gh-dflippo pushed a commit to sfc-gh-dflippo/task-master-ai that referenced this pull request Dec 4, 2025
…ce (eyaltoledano#997)

---------
Co-authored-by: DavidMaliglowka <13022280+DavidMaliglowka@users.noreply.github.com>
Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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.

4 participants