Skip to content

Release 0.26.0#1164

Merged
Crunchyman-ralph merged 14 commits into
mainfrom
next
Sep 8, 2025
Merged

Release 0.26.0#1164
Crunchyman-ralph merged 14 commits into
mainfrom
next

Conversation

@Crunchyman-ralph

@Crunchyman-ralph Crunchyman-ralph commented Aug 28, 2025

Copy link
Copy Markdown
Collaborator

What type of PR is this?

  • 🐛 Bug fix
  • ✨ Feature
  • 🔌 Integration
  • 📝 Docs
  • 🧹 Refactor
  • Other:

Description

Related Issues

How to Test This

# Example commands or steps

Expected result:

Contributor Checklist

  • Created changeset: npm run changeset
  • Tests pass: npm test
  • Format check passes: npm run format-check (or npm run format to fix)
  • Addressed CodeRabbit comments (if any)
  • Linked related issues (if any)
  • Manually tested the changes

Changelog Entry


For Maintainers

  • PR title follows conventional commits
  • Target branch correct
  • Labels added
  • Milestone assigned (if applicable)

Summary by CodeRabbit

  • New Features

    • Automatic codebase analysis (Claude Code & Gemini CLI) for parse/add/update/analyze flows; configurable via TASKMASTER_ENABLE_CODEBASE_ANALYSIS.
    • Improved move UX: scoped dependency resolution for moves, explicit --with-dependencies / --ignore-dependencies, and “Next Steps” advisory tips when dependencies are ignored.
  • Documentation

    • Clarified cross-tag move docs; deprecated --force and updated examples to use explicit dependency flags.
  • Chores

    • Pre-release version bumps and extension manifest updated to RC.

Crunchyman-ralph and others added 3 commits August 28, 2025 18:05
* feat: add support for claude code context

- code context for:
  - add-task
  - update-subtask
  - update-task
  - update

* feat: fix CI and format + refactor

* chore: format

* chore: fix broken tests

* chore: fix test
#1135)

* docs: Auto-update and format models.md

* docs(ui,cli): remove --force from cross-tag move guidance; recommend --with-dependencies/--ignore-dependencies

- scripts/modules/ui.js: drop force tip in conflict resolution
- scripts/modules/commands.js: remove force examples from move help
- docs/cross-tag-task-movement.md: purge force mentions; add explicit with/ignore examples

* test(move): update cross-tag move tests to drop --force; assert with/ignore deps behavior and current-tag fallback

- CLI integration: remove force expectations, keep with/ignore, current-tag fallback
- Integration: remove force-path test
- Unit: add scoped traversal test, adjust fixtures to avoid id collision

* fix(move): scope dependency traversal to source tag; tag-aware ignore-dependencies filtering

- resolveDependencies: traverse only sourceTag tasks to avoid cross-tag contamination
- filter dependent IDs to those present in source tag, numeric only
- ignore-dependencies: drop deps pointing to tasks from sourceTag; keep targetTag deps

* test(mcp): ensure cross-tag move passes only with/ignore options and returns conflict suggestions

- new test: tests/unit/mcp/tools/move-task-cross-tag-options.test.js

* feat(move): add advisory tips when ignoring cross-tag dependencies; add integration test case

* feat(cli/move): improve ID collision UX for cross-tag moves\n\n- Print Next Steps tips when core returns them (e.g., after ignore-dependencies)\n- Add dedicated help block when an ID already exists in target tag

* feat(move/mcp): improve ID collision UX and suggestions\n\n- Core: include suggestions on TASK_ALREADY_EXISTS errors\n- MCP: map ID collision to TASK_ALREADY_EXISTS with suggestions\n- Tests: add MCP unit test for ID collision suggestions

* test(move/cli): print tips on ignore-dependencies results; print ID collision suggestions\n\n- CLI integration test: assert Next Steps tips printed when result.tips present\n- Integration test: assert TASK_ALREADY_EXISTS error includes suggestions payload

* chore(changeset): add changeset for cross-tag move UX improvements (CLI/MCP/core/tests)

* Add cross-tag task movement help and validation improvements

- Introduced a detailed help command for cross-tag task movement, enhancing user guidance on usage and options.
- Updated validation logic in `validateCrossTagMove` to include checks for indirect dependencies, improving accuracy in conflict detection.
- Refactored tests to ensure comprehensive coverage of new validation scenarios and error handling.
- Cleaned up documentation to reflect the latest changes in task movement functionality.

* refactor(commands): remove redundant tips printing after move operation

- Eliminated duplicate printing of tips for next steps after the move operation, streamlining the output for users.
- This change enhances clarity by ensuring tips are only displayed when relevant, improving overall user experience.

* docs(move): clarify "force move" options and improve examples

- Updated documentation to replace the deprecated "force move" concept with clear alternatives: `--with-dependencies` and `--ignore-dependencies`.
- Enhanced Scenario 3 with explicit options and improved inline comments for better readability.
- Removed confusing commented code in favor of a straightforward note in the Force Move section.

* chore: run formatter

* Update .changeset/clarify-force-move-docs.md

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

* Update docs/cross-tag-task-movement.md

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

* Update tests/unit/scripts/modules/task-manager/move-task-cross-tag.test.js

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

* test(move): add test for dependency traversal scoping with --with-dependencies option

- Introduced a new test to ensure that the dependency traversal is limited to tasks from the source tag when using the --with-dependencies option, addressing potential ID collisions across tags.

* test(move): enhance tips validation in cross-tag task movement integration test

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* feat: add support for claude code context

- code context for:
  - add-task
  - update-subtask
  - update-task
  - update

* feat: fix CI and format + refactor

* chore: format

* chore: fix test

* feat: add gemini-cli support for codebase context

* feat: add google cli integration and fix tests

* chore: apply requested coderabbit changes

* chore: bump gemini cli package
@changeset-bot

changeset-bot Bot commented Aug 28, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a7ad4c8

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

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

@coderabbitai

coderabbitai Bot commented Aug 28, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Adds a configurable codebase-analysis capability and threads it through AI prompt flows; deprecates cross‑tag --force in favor of explicit --with-dependencies/--ignore-dependencies; improves cross‑tag dependency resolution, ID-collision errors (suggestions), CLI/UI tips, prompts, tests, changelogs, and prerelease metadata.

Changes

Cohort / File(s) Summary
Pre-release & Versions
package.json, apps/extension/package.json, CHANGELOG.md, apps/extension/CHANGELOG.md, .changeset/*, .changeset/pre.json
Bump to RC versions, add pre-release config and changesets, update ai-sdk-provider-gemini-cli, update changelogs and extension manifest.
Docs: Force Move Deprecation
docs/cross-tag-task-movement.md, .changeset/clarify-force-move-docs.md
Remove --force examples/guidance; recommend explicit --with-dependencies or --ignore-dependencies; reorganize scenarios and best-practices text.
Core Move Logic & UX
scripts/modules/task-manager/move-task.js, scripts/modules/commands.js, scripts/modules/ui.js, mcp-server/src/core/direct-functions/move-task-cross-tag.js
Scope --with-dependencies traversal to source tag; normalize dependency IDs; carry dependencyResolution/tips through move flow; emit tips when deps ignored; map ID collisions to TASK_ALREADY_EXISTS with remediation suggestions; CLI/UI print structured conflict guidance and "Next Steps" tips; removed force help.
Codebase Analysis Config & API
scripts/modules/config-manager.js
Add enableCodebaseAnalysis default and new APIs: isCodebaseAnalysisEnabled(session, projectRoot), hasCodebaseAnalysis(useResearch, projectRoot, session), getCodebaseAnalysisEnabled(explicitRoot) with env/MCP/config precedence; export them.
Propagate Capability into Task Flows
scripts/modules/task-manager/*.js, scripts/modules/task-manager/parse-prd/*
Replace provider-specific checks with hasCodebaseAnalysis(...); pass hasCodebaseAnalysis and projectRoot into AI prompt params; update imports and a parse-prd method rename.
Prompts: Schema & Templates
src/prompts/*.json
Add/rename prompt parameters: hasCodebaseAnalysis (boolean) and projectRoot (string); replace isClaudeCode with hasCodebaseAnalysis; gate codebase-analysis instructions on new flag.
MCP & Direct Function Tests/Mapping
mcp-server/src/core/direct-functions/move-task-cross-tag.js, tests/unit/mcp/tools/move-task-cross-tag-options.test.js
Map collisions to TASK_ALREADY_EXISTS with suggestions; add unit tests for options propagation and error suggestions.
CLI & Commands Tests
scripts/modules/commands.js, tests/integration/cli/move-cross-tag.test.js
Remove --force help/example; detect ID-collision messages and print structured conflict guidance; print “Next Steps” when move result includes tips; update integration tests to assert tips and collision guidance; remove force-related tests.
Move Flow Tests & Unit Adjustments
tests/integration/move-task-cross-tag.integration.test.js, tests/unit/scripts/modules/task-manager/*
Add/assert advisory tips for ignored-dependencies, scoped dependency traversal for --with-dependencies, and updated error payloads; remove deprecated force scenarios.
Tests: Capability Propagation Mocks
tests/unit/* (multiple config-manager mocks)
Add hasCodebaseAnalysis mock exports (typically jest.fn(() => false)) across unit tests and adjust mock formatting.
Docs/Assets Additions
.claude/*, assets/claude/*
Add command documentation (remove-subtasks docs and assets); purely documentation changes.
Workflows
.github/workflows/claude-docs-trigger.yml, .github/workflows/claude-docs-updater.yml
Add a trigger workflow that collects change context and invokes the docs updater; convert the updater to a manual workflow_dispatch consumer of explicit inputs and adjust checkout/permission details.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant CLI
  participant MoveCore as move-task.js
  participant Store as TaskStore
  participant MCP as mcp-server

  User->>CLI: task-master move --from backlog --to in-progress 1 --with-dependencies
  CLI->>MoveCore: moveTasksBetweenTags(src,tgt,ids,{withDependencies:true})
  MoveCore->>Store: Load tasks for source tag
  MoveCore->>MoveCore: Resolve dependencies scoped to source tag
  MoveCore->>Store: Check target tag for ID conflicts
  alt Conflict: ID exists in target
    MoveCore-->>CLI: throw { code: TASK_ALREADY_EXISTS, data:{ suggestions:[...] } }
    CLI-->>User: Conflict + actionable suggestions
  else No conflict
    MoveCore->>Store: Write moved tasks
    alt Dependencies ignored
      MoveCore-->>CLI: Result { tips:[...] }
      CLI-->>User: "Next Steps" tips
    else
      MoveCore-->>CLI: Success
    end
  end
  Note over MCP,MoveCore: MCP maps collisions to TASK_ALREADY_EXISTS and adds suggestions
Loading
sequenceDiagram
  autonumber
  actor User
  participant CLI
  participant TM as TaskManagerModule
  participant Cfg as config-manager.js
  participant Prompts as Prompt Templates

  User->>CLI: run add-task/update-task/update-subtask/parse-prd/expand-task
  CLI->>TM: invoke handler
  TM->>Cfg: hasCodebaseAnalysis(useResearch, projectRoot, session)
  Cfg-->>TM: boolean
  TM->>Prompts: Build params { hasCodebaseAnalysis, projectRoot, ... }
  Prompts-->>TM: Template (includes codebase-analysis block when true)
  TM-->>User: AI-run with contextual codebase-analysis guidance (when enabled)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Pre-merge checks (1 passed, 1 warning, 1 inconclusive)

❌ Failed Checks (1 warning, 1 inconclusive)
Check Name Status Explanation Resolution
Description Check ⚠️ Warning The PR description is an unfilled template and provides no context, implementation details, testing instructions, related issue links, or a changelog entry, making it difficult for reviewers to understand the scope and impact of the changes. Please fill out the description by summarizing the key features and fixes, linking related issues, outlining test steps and expected results, and including a concise changelog entry; ensure that your repository’s pull request template enforces these fields for future submissions.
Title Check ❓ Inconclusive The title “Release 0.26.0” is generic and does not clearly summarize the primary changes introduced by this PR, such as the new codebase analysis feature or the improved cross-tag move UX and safety enhancements. Consider renaming the PR to more specifically reflect the main changes, for example “Add codebase analysis feature and update cross-tag move UX in v0.26.0” or similar.
✅ Passed Checks (1 passed)
Check Name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 84.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch next

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 35

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (24)
package.json (2)

13-27: Add missing test scripts to match repo standards.

Per guidelines, include test:unit, test:integration, and test:ci scripts.

Apply:

   "scripts": {
     "test": "node --experimental-vm-modules node_modules/.bin/jest",
     "test:fails": "node --experimental-vm-modules node_modules/.bin/jest --onlyFailures",
     "test:watch": "node --experimental-vm-modules node_modules/.bin/jest --watch",
     "test:coverage": "node --experimental-vm-modules node_modules/.bin/jest --coverage",
+    "test:unit": "node --experimental-vm-modules node_modules/.bin/jest --selectProjects unit",
+    "test:integration": "node --experimental-vm-modules node_modules/.bin/jest --selectProjects integration",
     "test:e2e": "./tests/e2e/run_e2e.sh",
     "test:e2e-report": "./tests/e2e/run_e2e.sh --analyze-log",
+    "test:ci": "node --experimental-vm-modules node_modules/.bin/jest --ci",
     "prepare": "chmod +x bin/task-master.js mcp-server/server.js",
     "changeset": "changeset",
     "release": "changeset publish",

3-3: Bump package.json version to 0.26.0 before merge.

-   "version": "0.25.0",
+   "version": "0.26.0",
mcp-server/src/core/direct-functions/move-task-cross-tag.js (6)

97-133: Preserve prior silent-mode state to avoid side effects.

Toggle only if not already silent; always restore to original state.

Apply:

-    // Enable silent mode to prevent console output during MCP operation
-    enableSilentMode();
+    // Enable silent mode to prevent console output during MCP operation
+    const wasSilent = isSilentMode?.() ?? false;
+    if (!wasSilent) enableSilentMode();
...
-    // Restore console output - always executed regardless of success or error
-    disableSilentMode();
+    // Restore console output - always executed regardless of success or error
+    if (!wasSilent) disableSilentMode();

And import isSilentMode:

-import {
-  enableSilentMode,
-  disableSilentMode
-} from '../../../../scripts/modules/utils.js';
+import { enableSilentMode, disableSilentMode, isSilentMode, logWrapper } from '../../../../scripts/modules/utils.js';

110-118: Pass logger wrapper and MCP context to core call; set outputType/outputFormat.

Direct wrappers must pass mcpLog via options and include commandName/outputType in context.

Apply:

-      // Prepare move options
-      const moveOptions = {
-        withDependencies: args.withDependencies || false,
-        ignoreDependencies: args.ignoreDependencies || false
-      };
+      // Prepare move options and logger
+      const withDependencies =
+        args.withDependencies === true || args.withDependencies === 'true';
+      const ignoreDependencies =
+        args.ignoreDependencies === true || args.ignoreDependencies === 'true';
+      const moveOptions = {
+        withDependencies,
+        ignoreDependencies,
+        mcpLog: logWrapper(log),
+      };
...
-        { projectRoot }
+        { projectRoot, commandName: 'move-task-cross-tag', outputType: 'mcp', outputFormat: 'json' }

100-108: Mutually exclusive options check.

--with-dependencies and --ignore-dependencies should not be used together.

Apply:

       // Parse source IDs
       const sourceIds = args.sourceIds.split(',').map((id) => id.trim());
 
-      // Prepare move options
+      // Prepare move options
       const moveOptions = {
         withDependencies: args.withDependencies || false,
         ignoreDependencies: args.ignoreDependencies || false
       };
+
+      if (moveOptions.withDependencies && moveOptions.ignoreDependencies) {
+        return {
+          success: false,
+          error: {
+            message:
+              'Options --with-dependencies and --ignore-dependencies are mutually exclusive',
+            code: 'INPUT_VALIDATION_ERROR',
+          },
+        };
+      }

101-103: Validate parsed IDs are non-empty.

Prevent empty IDs from slipping through.

Apply:

-      const sourceIds = args.sourceIds.split(',').map((id) => id.trim());
+      const sourceIds = args.sourceIds
+        .split(',')
+        .map((id) => id.trim())
+        .filter(Boolean);
+      if (sourceIds.length === 0) {
+        return {
+          success: false,
+          error: { message: 'No valid source IDs provided', code: 'INPUT_VALIDATION_ERROR' },
+        };
+      }

28-30: Remove unused variable.

context.session is never used.

Apply:

-export async function moveTaskCrossTagDirect(args, log, context = {}) {
-  const { session } = context;
-  const { projectRoot } = args;
+export async function moveTaskCrossTagDirect(args, log, context = {}) {
+  const { projectRoot } = args;

134-205: Optional: Add a top-level error category while keeping domain codes.

To align with standard categories without breaking tests expecting TASK_* codes, add category: 'CORE_FUNCTION_ERROR' (or INPUT_VALIDATION_ERROR) alongside existing code.

Apply pattern in returns:

 return {
   success: false,
   error: {
     message: error.message,
-    code: errorCode,
+    code: errorCode,
+    category: 'CORE_FUNCTION_ERROR',
     suggestions
   }
 };

And for parameter validation returns, set category: 'INPUT_VALIDATION_ERROR'.

.changeset/curvy-moons-dig.md (1)

5-10: Use a single-line, user-facing changeset summary and fix typos.

Changesets should be one concise, imperative line. Current text is multi-paragraph, has a typo (“udpate-task”), and mixes provider wording.

Apply:

-Enhanced Gemini CLI provider with codebase-aware task generation
-
-Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, udpate-task, update, update-subtask commands
-When using Gemini CLI as the AI provider, Task Master now instructs the AI to analyze the project structure, existing implementations, and patterns before generating tasks or subtasks
-Tasks and subtasks generated by Claude Code are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
+Enable codebase-aware task generation when using Gemini CLI; propagate hasCodebaseAnalysis and projectRoot to prompts and task flows.
scripts/modules/task-manager/update-tasks.js (1)

575-578: Bug: getDebugFlag expects explicitRoot, not session.

Passing the session object can break config loading on errors. Use projectRoot.

-      if (getDebugFlag(session)) {
+      if (getDebugFlag(projectRoot)) {
         console.error(error);
       }
src/prompts/add-task.json (1)

26-33: Standardize gatheredContext gating

In this prompt, gatheredContext is interpolated without a guard, unlike other prompts that use {{#if gatheredContext}}. Standardize to avoid rendering “undefined” with different engines.

-      {{gatheredContext}}
+      {{#if gatheredContext}}{{gatheredContext}}{{/if}}

Also applies to: 65-65

src/prompts/analyze-complexity.json (1)

39-43: Wrap Project Root with guard
In src/prompts/analyze-complexity.json:48, change

- Project Root: {{projectRoot}}
+ {{#if projectRoot}}Project Root: {{projectRoot}}{{/if}}

(No occurrences of isClaudeCode found.)

docs/cross-tag-task-movement.md (2)

133-166: Add a short Migration note per docs guidelines

Document how to migrate from --force to the two explicit flags, with one-liners.

 ## Best Practices
+### Migration from --force (since 0.26.0)
+The --force flag has been removed. Use:
+- Keep relationships: add --with-dependencies
+- Break relationships: add --ignore-dependencies

231-243: Cross-reference command help and command reference page

Add a link to the command reference docs for move to satisfy docs/ coding guidelines.

 # Show move command help
 task-master move --help
+
+For full CLI options, see the Move command reference in docs/commands/move.md.
scripts/modules/task-manager/parse-prd/parse-prd-helpers.js (2)

160-170: Dependency remapping drops references to existing tasks (logic bug).

Only dependencies present in the new AI batch are remapped; dependencies pointing to existing tasks are lost because taskMap.get(depId) returns undefined and the filter removes them. Preserve existing-task deps and only remap new ones.

Apply:

-  processedTasks.forEach((task) => {
-    task.dependencies = task.dependencies
-      .map((depId) => taskMap.get(depId))
-      .filter(
-        (newDepId) =>
-          newDepId != null &&
-          newDepId < task.id &&
-          (findTaskById(existingTasks, newDepId) ||
-            processedTasks.some((t) => t.id === newDepId))
-      );
-  });
+  // Second pass: remap dependencies (preserve existing-task deps)
+  const newIds = new Set(processedTasks.map((t) => t.id));
+  processedTasks.forEach((task) => {
+    task.dependencies = (task.dependencies || [])
+      .map((depId) => (taskMap.has(depId) ? taskMap.get(depId) : depId))
+      .filter((depId) => {
+        const n = typeof depId === 'string' ? parseInt(depId, 10) : depId;
+        if (Number.isNaN(n)) return false;
+        const isExisting = !!findTaskById(existingTasks, n);
+        const isRemappedNew = newIds.has(n) && n < task.id;
+        return isExisting || isRemappedNew;
+      });
+  });

60-63: Avoid spread with Math.max for large arrays.

Use reduce to compute nextId safely for large task lists.

-      if (existingTasks.length > 0) {
-        nextId = Math.max(...existingTasks.map((t) => t.id || 0)) + 1;
-      }
+      if (existingTasks.length > 0) {
+        const maxId = existingTasks.reduce((m, t) => Math.max(m, t.id || 0), 0);
+        nextId = maxId + 1;
+      }
scripts/modules/task-manager/update-subtask-by-id.js (2)

366-368: Null-guard telemetry usage to avoid rare NPEs.

If aiServiceResponse is unexpectedly nullish, this will throw.

-    if (outputFormat === 'text' && aiServiceResponse.telemetryData) {
+    if (outputFormat === 'text' && aiServiceResponse?.telemetryData) {
       displayAiUsageSummary(aiServiceResponse.telemetryData, 'cli');
     }

90-93: Pass tasksPath into findProjectRoot for accurate resolution
In scripts/modules/task-manager/update-subtask-by-id.js, replace

const projectRoot = providedProjectRoot || findProjectRoot();

with

const projectRoot = providedProjectRoot || findProjectRoot(tasksPath);

to mirror expand-task.js and avoid CWD-based mis-resolution.

scripts/modules/task-manager/expand-task.js (4)

465-474: Bug: combinedAdditionalContext is computed but not used in promptParams.

You construct combinedAdditionalContext but pass the original additionalContext to the prompt. Use the combined value.

Apply this diff:

-		// Combine all context sources into a single additionalContext parameter
+		// Combine all context sources into a single additionalContext parameter
 		let combinedAdditionalContext = '';
 		if (additionalContext || complexityReasoningContext) {
 			combinedAdditionalContext =
 				`\n\n${additionalContext}${complexityReasoningContext}`.trim();
 		}
 		if (gatheredContext) {
 			combinedAdditionalContext =
 				`${combinedAdditionalContext}\n\n# Project Context\n\n${gatheredContext}`.trim();
 		}

 		const promptParams = {
 			task: task,
 			subtaskCount: finalSubtaskCount,
 			nextSubtaskId: nextSubtaskId,
-			additionalContext: additionalContext,
+			additionalContext: combinedAdditionalContext,
 			complexityReasoningContext: complexityReasoningContext,
 			gatheredContext: gatheredContextText || '',
 			useResearch: useResearch,
 			expansionPrompt: expansionPromptText || undefined,
 			hasCodebaseAnalysis: hasCodebaseAnalysisCapability,
 			projectRoot: projectRoot || ''
 		};

Also applies to: 500-511


396-427: Robustness: avoid fs.existsSync(undefined) and resolve a tag-aware default report path.

complexityReportPath may be undefined, which would throw in fs.existsSync(). Use getTagAwareFilePath with COMPLEXITY_REPORT_FILE as a fallback and keep reads tag-aware.

Apply this diff:

-		logger.info(
-			`Looking for complexity report at: ${complexityReportPath}${tag !== 'master' ? ` (tag-specific for '${tag}')` : ''}`
-		);
+		const resolvedComplexityReportPath =
+			complexityReportPath ||
+			getTagAwareFilePath(COMPLEXITY_REPORT_FILE, projectRoot, tag);
+		logger.info(
+			`Looking for complexity report at: ${resolvedComplexityReportPath}${tag !== 'master' ? ` (tag-specific for '${tag}')` : ''}`
+		);
...
-			if (fs.existsSync(complexityReportPath)) {
-				const complexityReport = readJSON(complexityReportPath);
+			if (fs.existsSync(resolvedComplexityReportPath)) {
+				const complexityReport = readJSON(
+					resolvedComplexityReportPath,
+					projectRoot,
+					tag
+				);

319-321: API contract: outputType should be 'cli' or 'mcp', not 'text'/'json'.

generateTextService in this codebase expects 'cli' or 'mcp'. Passing 'text'/'json' is inconsistent with analyze-task-complexity.js and can break provider routing.

Apply this diff:

-	const outputFormat = mcpLog ? 'json' : 'text';
+	const outputFormat = mcpLog ? 'json' : 'text'; // for local UX
+	const serviceOutputType = mcpLog ? 'mcp' : 'cli';
...
-				outputType: outputFormat
+				outputType: serviceOutputType

Also applies to: 558-566


171-193: Finish or remove the advanced extraction stub to make parsing reliable.

The current block declares variables but never extracts anything, then attempts to parse the unchanged response again. Implement brace-count extraction with a fallback to outermost braces.

Apply this diff:

-		// (Insert the more complex extraction logic here - the one we worked on with:
-		//  - targetPattern = '{"subtasks":';
-		//  - careful brace counting for that targetPattern
-		//  - fallbacks to last '{' and '}' if targetPattern logic fails)
-		//  This was the logic from my previous message. Let's assume it's here.
-		//  This block should ultimately set `jsonToParse` to the best candidate string.
-
-		// Example snippet of that advanced logic's start:
-		const targetPattern = '{"subtasks":';
-
-		const patternStartIndex = jsonToParse.indexOf(targetPattern);
-
-		if (patternStartIndex !== -1) {
-			const openBraces = 0;
-			const firstBraceFound = false;
-			const extractedJsonBlock = '';
-			// ... (loop for brace counting as before) ...
-			// ... (if successful, jsonToParse = extractedJsonBlock) ...
-			// ... (if that fails, fallbacks as before) ...
-		} else {
-			// ... (fallback to last '{' and '}' if targetPattern not found) ...
-		}
+		const targetPattern = '{"subtasks":';
+		const startIdx = jsonToParse.indexOf(targetPattern);
+		let candidate = null;
+		if (startIdx !== -1) {
+			let depth = 0;
+			let started = false;
+			for (let i = startIdx; i < jsonToParse.length; i++) {
+				const ch = jsonToParse[i];
+				if (ch === '{') {
+					depth++;
+					started = true;
+				} else if (ch === '}') {
+					depth--;
+					if (started && depth === 0) {
+						candidate = jsonToParse.slice(startIdx, i + 1);
+						break;
+					}
+				}
+			}
+		}
+		if (!candidate) {
+			const firstBrace = jsonToParse.indexOf('{');
+			const lastBrace = jsonToParse.lastIndexOf('}');
+			if (firstBrace !== -1 && lastBrace > firstBrace) {
+				candidate = jsonToParse.slice(firstBrace, lastBrace + 1);
+			}
+		}
+		if (candidate) {
+			jsonToParse = candidate;
+		}
scripts/modules/task-manager/analyze-task-complexity.js (1)

26-26: Remove unused import CUSTOM_PROVIDERS.

It’s not referenced anymore after capability refactor.

-import { CUSTOM_PROVIDERS } from '../../../src/constants/providers.js';
tests/integration/cli/move-cross-tag.test.js (1)

723-733: Fix fragile expectation: extraneous force: undefined breaks deep equality.

moveTasksBetweenTags is called with { withDependencies, ignoreDependencies } only. Expecting force: undefined can fail equality.

Apply this diff:

 		expect(mockMoveTasksBetweenTags).toHaveBeenCalledWith(
 			expect.stringContaining('tasks.json'),
 			[1, 2, 3], // Should trim whitespace and parse as integers
 			'backlog',
 			'in-progress',
 			{
 				withDependencies: undefined,
-				ignoreDependencies: undefined,
-				force: undefined
+				ignoreDependencies: undefined
 			}
 		);

"task-master-ai": patch
---

docs(move): clarify cross-tag move docs; deprecate "force"; add explicit --with-dependencies/--ignore-dependencies examples

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Rewrite changeset summary to user-facing, imperative one-liner.

Avoid commit-scope prefixes; prefer plain, user-facing text and use --force.

Apply:

-docs(move): clarify cross-tag move docs; deprecate "force"; add explicit --with-dependencies/--ignore-dependencies examples
+Clarify cross-tag move docs; deprecate --force; add examples for --with-dependencies and --ignore-dependencies.
📝 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
docs(move): clarify cross-tag move docs; deprecate "force"; add explicit --with-dependencies/--ignore-dependencies examples
Clarify cross-tag move docs; deprecate --force; add examples for --with-dependencies and --ignore-dependencies.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: There might be a mistake here.
Context: ...endencies/--ignore-dependencies examples

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)

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

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

🤖 Prompt for AI Agents
In .changeset/clarify-force-move-docs.md around line 5, the changeset summary
uses a commit-scope prefixed, non-user-facing phrasing; rewrite it as a concise,
imperative, user-facing one-liner without the "docs(move):" prefix and include
the literal flag form "--force" (e.g. "Clarify cross-tag move behavior and
deprecate force; add explicit --with-dependencies/--ignore-dependencies
examples" or similar). Ensure the summary is plain text, imperative, and does
not include commit-scope prefixes.

Comment on lines +5 to +12
feat(move): improve cross-tag move UX and safety

- CLI: print "Next Steps" tips after cross-tag moves that used --ignore-dependencies (validate/fix guidance)
- CLI: show dedicated help block on ID collisions (destination tag already has the ID)
- Core: add structured suggestions to TASK_ALREADY_EXISTS errors
- MCP: map ID collision errors to TASK_ALREADY_EXISTS and include suggestions
- Tests: cover MCP options, error suggestions, CLI tips printing, and integration error payload suggestions
---

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Condense changeset to a single-line, user-facing summary.

Keep details for docs/CHANGELOG; changesets should be brief.

Apply:

-feat(move): improve cross-tag move UX and safety
-
-- CLI: print "Next Steps" tips after cross-tag moves that used --ignore-dependencies (validate/fix guidance)
-- CLI: show dedicated help block on ID collisions (destination tag already has the ID)
-- Core: add structured suggestions to TASK_ALREADY_EXISTS errors
-- MCP: map ID collision errors to TASK_ALREADY_EXISTS and include suggestions
-- Tests: cover MCP options, error suggestions, CLI tips printing, and integration error payload suggestions
----
+Improve cross-tag move UX: show Next Steps after --ignore-dependencies moves and provide structured TASK_ALREADY_EXISTS suggestions in CLI/MCP.
📝 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
feat(move): improve cross-tag move UX and safety
- CLI: print "Next Steps" tips after cross-tag moves that used --ignore-dependencies (validate/fix guidance)
- CLI: show dedicated help block on ID collisions (destination tag already has the ID)
- Core: add structured suggestions to TASK_ALREADY_EXISTS errors
- MCP: map ID collision errors to TASK_ALREADY_EXISTS and include suggestions
- Tests: cover MCP options, error suggestions, CLI tips printing, and integration error payload suggestions
---
Improve cross-tag move UX: show Next Steps after --ignore-dependencies moves and provide structured TASK_ALREADY_EXISTS suggestions in CLI/MCP.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Use correct spacing
Context: ...e): improve cross-tag move UX and safety - CLI: print "Next Steps" tips after cross...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: There might be a mistake here.
Context: ...ore-dependencies (validate/fix guidance) - CLI: show dedicated help block on ID col...

(QB_NEW_EN_OTHER)


[grammar] ~8-~8: There might be a mistake here.
Context: ...ons (destination tag already has the ID) - Core: add structured suggestions to TASK...

(QB_NEW_EN_OTHER)


[grammar] ~9-~9: There might be a mistake here.
Context: ...uggestions to TASK_ALREADY_EXISTS errors - MCP: map ID collision errors to TASK_ALR...

(QB_NEW_EN_OTHER)


[grammar] ~10-~10: There might be a mistake here.
Context: ...K_ALREADY_EXISTS and include suggestions - Tests: cover MCP options, error suggesti...

(QB_NEW_EN_OTHER)


[grammar] ~11-~11: There might be a mistake here.
Context: ...nd integration error payload suggestions ---

(QB_NEW_EN_OTHER)

🪛 markdownlint-cli2 (0.17.2)

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

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


11-11: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)

🤖 Prompt for AI Agents
In .changeset/strong-eagles-vanish.md around lines 5 to 12, the changeset body
is a multi-line, developer-focused bullet list; condense it into a single-line,
user-facing summary sentence (e.g. "feat(move): improve cross-tag move UX, add
safety checks and clearer error/help messages") and move the detailed bullet
points into docs/CHANGELOG or a separate release note; ensure the single-line
summary is concise, present-tense, and starts with the conventional prefix
(feat/fix/etc.).

Comment on lines +5 to +14
Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations

When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.

Commands contextualised:

- add-task
- update-subtask
- update-task
- update

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Condense to a single, user-facing summary line.

Changeset bodies should be concise one-liners; move detail to docs/CHANGELOG.

Apply:

-Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations
-
-When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.
-
-Commands contextualised:
-
-- add-task
-- update-subtask
-- update-task
-- update
+Add automatic codebase analysis to task operations when Claude Code or Gemini CLI is available; introduce hasCodebaseAnalysis and pass projectRoot through prompts.
📝 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
Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations
When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.
Commands contextualised:
- add-task
- update-subtask
- update-task
- update
Add automatic codebase analysis to task operations when Claude Code or Gemini CLI is available; introduce hasCodebaseAnalysis and pass projectRoot through prompts.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Use correct spacing
Context: ...ic codebase analysis for task operations When using Claude Code as the AI provide...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: Use correct spacing
Context: ...ct's existing architecture and patterns. Commands contextualised: - add-task - u...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~9-~9: Consider adjusting word choice based on regional variation
Context: ...ng architecture and patterns. Commands contextualised: - add-task - update-subtask - update-task ...

(QB_NEW_EN_OTHER_ERROR_IDS_26)

🪛 markdownlint-cli2 (0.17.2)

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

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

🤖 Prompt for AI Agents
.changeset/wet-candies-accept.md lines 5-14: The changeset body is multi-line
and verbose; replace it with a single concise user-facing summary sentence
(e.g., "Add automatic codebase analysis for task commands when using Claude Code
and Google CLI"), move the expanded explanation and command list into
docs/CHANGELOG (or reference the changelog entry), and update the changeset file
and commit so the body is a one-line summary only.

Comment on lines 66 to 72
### Force Move

Force the move even with dependency conflicts:
Note: Force moves are no longer supported. Instead, use one of these options:

```bash
task-master move --from=5 --from-tag=backlog --to-tag=in-progress --force
```
- `--with-dependencies` — move dependents together
- `--ignore-dependencies` — break cross-tag dependencies

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Heading still says “Force Move” after deprecation; rename section

The section header remains “### Force Move” though the content deprecates it. Rename to avoid confusion.

-### Force Move
+### Dependency-Control Options (Force Move deprecated)
@@
-Note: Force moves are no longer supported. Instead, use one of these options:
+Force moves are deprecated. Choose one of these options:
📝 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
### Force Move
Force the move even with dependency conflicts:
Note: Force moves are no longer supported. Instead, use one of these options:
```bash
task-master move --from=5 --from-tag=backlog --to-tag=in-progress --force
```
- `--with-dependencies` — move dependents together
- `--ignore-dependencies` — break cross-tag dependencies
### Dependency-Control Options (Force Move deprecated)
Force moves are deprecated. Choose one of these options:
- `--with-dependencies` — move dependents together
- `--ignore-dependencies` — break cross-tag dependencies
🧰 Tools
🪛 LanguageTool

[grammar] ~66-~66: Use correct spacing
Context: ...only the specified task. ### Force Move Note: Force moves are no longer supporte...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~68-~68: Use correct spacing
Context: ...rted. Instead, use one of these options: - --with-dependencies — move dependents together - `--ignore-...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~70-~70: There might be a mistake here.
Context: ...dependencies— move dependents together ---ignore-dependencies` — break cross-tag dependencies ⚠️ **War...

(QB_NEW_EN_OTHER)


[grammar] ~71-~71: There might be a mistake here.
Context: ...ndencies` — break cross-tag dependencies ⚠️ Warning: This may break dependenc...

(QB_NEW_EN_OTHER)

🤖 Prompt for AI Agents
In docs/cross-tag-task-movement.md around lines 66 to 72, the section header
still reads "### Force Move" despite the content marking it deprecated; change
the header to something like "### Force Move (deprecated)" or "### Deprecated:
Force Move" (or "### Alternatives to Force Move") so it matches the body, and
update any internal links/anchors that reference this header if present.

Comment on lines +68 to +71
Note: Force moves are no longer supported. Instead, use one of these options:

```bash
task-master move --from=5 --from-tag=backlog --to-tag=in-progress --force
```
- `--with-dependencies` — move dependents together
- `--ignore-dependencies` — break cross-tag dependencies

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Fix punctuation/spacing around em dashes and warnings

LanguageTool flagged spacing around em dashes and the warning block.

-- `--with-dependencies` — move dependents together
-- `--ignore-dependencies` — break cross-tag dependencies
+- `--with-dependencies` — move dependents together
+- `--ignore-dependencies` — break cross-tag dependencies
@@
-Choose one of these options explicitly:
+Choose one of these options explicitly:

Also applies to: 266-266

🧰 Tools
🪛 LanguageTool

[grammar] ~68-~68: Use correct spacing
Context: ...rted. Instead, use one of these options: - --with-dependencies — move dependents together - `--ignore-...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~70-~70: There might be a mistake here.
Context: ...dependencies— move dependents together ---ignore-dependencies` — break cross-tag dependencies ⚠️ **War...

(QB_NEW_EN_OTHER)


[grammar] ~71-~71: There might be a mistake here.
Context: ...ndencies` — break cross-tag dependencies ⚠️ Warning: This may break dependenc...

(QB_NEW_EN_OTHER)

🤖 Prompt for AI Agents
In docs/cross-tag-task-movement.md around lines 68 to 71 (also applies at line
266), fix spacing and punctuation around em dashes and the warning block: remove
extra spaces before and after em dashes (use no spaces around —), ensure the
warning block follows the project's markdown style (consistent
heading/blockquote formatting and punctuation), and adjust the two list items so
the em dash usage is consistent and the warning text punctuation is corrected.

Comment thread tests/unit/scripts/modules/task-manager/complexity-report-tag-isolation.test.js Outdated
Comment on lines +129 to 130
hasCodebaseAnalysis: jest.fn(() => false)
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Assert hasCodebaseAnalysis is called with correct args (both modes).

Now that the mock exists, validate calls for useResearch=false/true with the derived projectRoot.

Add after imports:

const { hasCodebaseAnalysis } = await import('../../../../../scripts/modules/config-manager.js');

In “should expand a task with AI-generated subtasks”:

expect(hasCodebaseAnalysis).toHaveBeenCalledWith(false, '/mock/project/root');

In “should handle research flag correctly”:

expect(hasCodebaseAnalysis).toHaveBeenCalledWith(true, '/mock/project/root');
🤖 Prompt for AI Agents
In tests/unit/scripts/modules/task-manager/expand-task.test.js around lines
129-130, the test suite mocks hasCodebaseAnalysis but doesn't assert it was
called with the correct arguments; import the real hasCodebaseAnalysis from
../../../../../scripts/modules/config-manager.js at top of the test file, then
add assertions in the two test cases: in "should expand a task with AI-generated
subtasks" assert hasCodebaseAnalysis was called with (false,
'/mock/project/root'), and in "should handle research flag correctly" assert it
was called with (true, '/mock/project/root'); ensure the import is awaited in
the test file setup and the expectations are placed after the code that triggers
the calls.

Comment on lines +222 to +252
// New test: ensure with-dependencies only traverses tasks from the source tag
it('should scope dependency traversal to source tag when using --with-dependencies', async () => {
findCrossTagDependencies.mockReturnValue([]);
validateSubtaskMove.mockImplementation(() => {});

const result = await moveTasksBetweenTags(
mockTasksPath,
[1], // backlog:1 depends on backlog:2
'backlog',
'in-progress',
{ withDependencies: true },
mockContext
);

// Write should include backlog:2 moved, and must NOT traverse or fetch dependencies from the target tag
expect(writeJSON).toHaveBeenCalledWith(
mockTasksPath,
expect.objectContaining({
'in-progress': expect.objectContaining({
tasks: expect.arrayContaining([
expect.objectContaining({ id: 1 }),
expect.objectContaining({ id: 2 }) // the backlog:2 now moved
// ensure existing in-progress:2 remains (by id) but we don't double-add or fetch deps from it
])
})
}),
mockContext.projectRoot,
null
);
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Good: verifies source-tag-scoped traversal for --with-dependencies.

Minor nit: comment mentions “in-progress:2 remains,” but no such task exists in the fixture. Tweak the comment to avoid confusion.

-        // ensure existing in-progress:2 remains (by id) but we don't double-add or fetch deps from it
+        // ensure we didn't traverse or fetch dependencies from the target tag
📝 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
// New test: ensure with-dependencies only traverses tasks from the source tag
it('should scope dependency traversal to source tag when using --with-dependencies', async () => {
findCrossTagDependencies.mockReturnValue([]);
validateSubtaskMove.mockImplementation(() => {});
const result = await moveTasksBetweenTags(
mockTasksPath,
[1], // backlog:1 depends on backlog:2
'backlog',
'in-progress',
{ withDependencies: true },
mockContext
);
// Write should include backlog:2 moved, and must NOT traverse or fetch dependencies from the target tag
expect(writeJSON).toHaveBeenCalledWith(
mockTasksPath,
expect.objectContaining({
'in-progress': expect.objectContaining({
tasks: expect.arrayContaining([
expect.objectContaining({ id: 1 }),
expect.objectContaining({ id: 2 }) // the backlog:2 now moved
// ensure existing in-progress:2 remains (by id) but we don't double-add or fetch deps from it
])
})
}),
mockContext.projectRoot,
null
);
});
expect(writeJSON).toHaveBeenCalledWith(
mockTasksPath,
expect.objectContaining({
'in-progress': expect.objectContaining({
tasks: expect.arrayContaining([
expect.objectContaining({ id: 1 }),
expect.objectContaining({ id: 2 }) // the backlog:2 now moved
// ensure we didn't traverse or fetch dependencies from the target tag
])
})
}),
mockContext.projectRoot,
null
);
🤖 Prompt for AI Agents
In tests/unit/scripts/modules/task-manager/move-task-cross-tag.test.js around
lines 222 to 252, the inline comment references “in-progress:2 remains” which
doesn't exist in the test fixture and may confuse readers; update the comment to
remove or reword that clause (e.g., “ensure we don't double-add or fetch
dependencies from the target tag” or simply delete the parenthetical) so the
comment accurately reflects the test assertions without referencing a
non-existent task.

Comment on lines +190 to 192
getResearchProvider: jest.fn(() => 'perplexity'),
hasCodebaseAnalysis: jest.fn(() => false)
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Light coverage gap: verify the new capability hook is invoked.

You mock hasCodebaseAnalysis; assert it’s called at least once in a happy-path test to lock the integration.

Add after mocks/imports:

const { hasCodebaseAnalysis } = await import('../../../../../scripts/modules/config-manager.js');

In a success test (e.g., “should parse a PRD file and generate tasks”) after parsePRD:

expect(hasCodebaseAnalysis).toHaveBeenCalled();
🤖 Prompt for AI Agents
In tests/unit/scripts/modules/task-manager/parse-prd.test.js around lines 190 to
192, add an explicit import of the mocked hasCodebaseAnalysis after the
mocks/imports block using a dynamic import (const { hasCodebaseAnalysis } =
await import('../../../../../scripts/modules/config-manager.js');) so the jest
mock reference is captured, and in the success test (e.g., "should parse a PRD
file and generate tasks") add an assertion after calling parsePRD:
expect(hasCodebaseAnalysis).toHaveBeenCalled(); to verify the capability hook is
invoked.

Comment on lines +55 to +56
getDebugFlag: jest.fn(() => false),
hasCodebaseAnalysis: jest.fn(() => false)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Also assert hasCodebaseAnalysis is used (arguments).

Since the mock is added, verify it’s called with (useResearch=false, projectRoot='/project') in a success-path test.

Add after imports:

const { hasCodebaseAnalysis } = await import('../../../../../scripts/modules/config-manager.js');

In “successfully updates subtask with valid inputs” after the call:

expect(hasCodebaseAnalysis).toHaveBeenCalledWith(false, '/project');
🤖 Prompt for AI Agents
In tests/unit/scripts/modules/task-manager/update-subtask-by-id.test.js around
lines 55-56, the review asks to assert that the mocked hasCodebaseAnalysis is
actually invoked with the correct args; add an import for hasCodebaseAnalysis
from ../../../../../scripts/modules/config-manager.js at the top of the test
file (after imports) and then, in the "successfully updates subtask with valid
inputs" test immediately after the code that triggers the success path, add an
assertion that hasCodebaseAnalysis was called with (false, '/project') using
toHaveBeenCalledWith.

github-actions Bot and others added 5 commits August 29, 2025 00:07
* Version Packages

* chore: fix changelog

---------

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>
…o.next.august

ralph/chore.merge.main.into.next.august

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
package.json (1)

16-30: Add required test scripts per repo guidelines.

Missing test:unit, test:integration, and test:ci. Add them to align with coding_guidelines.

Apply:

   "scripts": {
     "test": "node --experimental-vm-modules node_modules/.bin/jest",
     "test:fails": "node --experimental-vm-modules node_modules/.bin/jest --onlyFailures",
     "test:watch": "node --experimental-vm-modules node_modules/.bin/jest --watch",
     "test:coverage": "node --experimental-vm-modules node_modules/.bin/jest --coverage",
+    "test:unit": "node --experimental-vm-modules node_modules/.bin/jest --runTestsByPath **/*.unit.(js|ts|tsx)",
+    "test:integration": "node --experimental-vm-modules node_modules/.bin/jest --runTestsByPath **/*.integration.(js|ts|tsx)",
     "test:e2e": "./tests/e2e/run_e2e.sh",
     "test:e2e-report": "./tests/e2e/run_e2e.sh --analyze-log",
+    "test:ci": "npm run format-check && npm run test:coverage && npm run test:integration && npm run test:e2e",
     "prepare": "chmod +x bin/task-master.js mcp-server/server.js",
     "changeset": "changeset",
     "release": "changeset publish",
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f254aed and be0c0f2.

📒 Files selected for processing (5)
  • .changeset/pre.json (1 hunks)
  • CHANGELOG.md (1 hunks)
  • apps/extension/CHANGELOG.md (1 hunks)
  • apps/extension/package.json (2 hunks)
  • package.json (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.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/pre.json
package.json

📄 CodeRabbit inference engine (.cursor/rules/test_workflow.mdc)

Add and update test scripts in package.json to include test, test:watch, test:coverage, test:unit, test:integration, test:e2e, and test:ci

Files:

  • package.json
🧠 Learnings (13)
📓 Common learnings
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: 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.
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.
📚 Learning: 2025-07-18T17:12:57.903Z
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:

  • .changeset/pre.json
📚 Learning: 2025-07-18T17:10:53.657Z
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:

  • .changeset/pre.json
📚 Learning: 2025-07-18T17:10:12.881Z
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:

  • package.json
  • apps/extension/package.json
📚 Learning: 2025-08-07T13:00:22.966Z
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1090
File: apps/extension/package.json:241-243
Timestamp: 2025-08-07T13:00:22.966Z
Learning: In monorepos, local packages should use "*" as the version constraint in package.json dependencies, as recommended by npm. This ensures the local version from within the same workspace is always used, rather than attempting to resolve from external registries. This applies to packages like task-master-ai within the eyaltoledano/claude-task-master monorepo.

Applied to files:

  • package.json
  • apps/extension/package.json
📚 Learning: 2025-07-31T20:49:04.638Z
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:

  • apps/extension/package.json
📚 Learning: 2025-07-18T17:19:27.365Z
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.json
📚 Learning: 2025-07-18T17:19:27.365Z
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: 2025-07-18T17:19:27.365Z
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: 2025-07-18T17:07:53.100Z
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:

  • CHANGELOG.md
📚 Learning: 2025-08-11T12:30:23.843Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-11T12:30:23.843Z
Learning: Import Task Master's development workflow commands and guidelines; treat the contents of ./.taskmaster/CLAUDE.md as if included in the main CLAUDE.md

Applied to files:

  • CHANGELOG.md
📚 Learning: 2025-07-18T17:10:53.657Z
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:

  • CHANGELOG.md
📚 Learning: 2025-07-31T21:48:00.389Z
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/src/services/task-repository.ts:25-57
Timestamp: 2025-07-31T21:48:00.389Z
Learning: In the eyaltoledano/claude-task-master repository, every task is always part of a tag - there is no concept of untagged tasks. The tag system is mandatory and comprehensive, meaning all tasks exist within a tag context (with 'master' as the default tag if none specified).

Applied to files:

  • CHANGELOG.md
🪛 LanguageTool
apps/extension/CHANGELOG.md

[grammar] ~3-~3: Use correct spacing
Context: # Change Log ## 0.24.2-rc.0 ### Patch Changes - Updated dependencies [[...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~5-~5: Use correct spacing
Context: ...e Log ## 0.24.2-rc.0 ### Patch Changes - Updated dependencies [[8783708](https:...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: There might be a mistake here.
Context: ...d2fd613ceac56a65ae9d3c1c03092b8860ac9)]: - task-master-ai@0.26.0-rc.0 ## 0.24.1 #...

(QB_NEW_EN)


[grammar] ~8-~8: Use correct spacing
Context: ...860ac9)]: - task-master-ai@0.26.0-rc.0 ## 0.24.1 ### Patch Changes - Updated dep...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🔇 Additional comments (5)
package.json (2)

3-3: RC version bump looks good.

No concerns with 0.26.0-rc.0.


94-95: Verify compatibility of ai-sdk-provider-gemini-cli ^0.1.3.

Ensure no peer-dep or API changes affect Gemini CLI integration paths.

Run locally:

  • npm i
  • npm ls ai-sdk-provider-gemini-cli
  • Smoke test: parse-prd, add-task with Gemini CLI provider.
apps/extension/package.json (1)

6-6: Extension RC bump acknowledged.

No issues with 0.24.2-rc.0.

apps/extension/CHANGELOG.md (1)

3-9: Changelog entry OK.

Reads clean and references the correct dependency bump.

.changeset/pre.json (1)

1-15: Pre-release config looks correct; remember to exit pre after publish.

After releasing RCs, run changeset pre exit before final to avoid tagging future releases as prerelease.

Comment thread apps/extension/package.json Outdated
Comment on lines 259 to 260
"task-master-ai": "0.26.0-rc.0"
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Use workspace link for local monorepo dependency.

Per monorepo practice (learning), set task-master-ai to "*" to ensure workspace resolution.

-    "task-master-ai": "0.26.0-rc.0"
+    "task-master-ai": "*"
📝 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": "0.26.0-rc.0"
},
"task-master-ai": "*"
},
🤖 Prompt for AI Agents
In apps/extension/package.json around lines 259 to 260, replace the pinned
version of the local monorepo dependency with a workspace specifier so the
package manager resolves the local workspace package; change the
"task-master-ai": "0.26.0-rc.0" entry to "task-master-ai": "*" to enable
workspace resolution.

Comment thread CHANGELOG.md
Comment on lines +9 to +12
Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, udpate-task, update, update-subtask commands
When using Gemini CLI as the AI provider, Task Master now instructs the AI to analyze the project structure, existing implementations, and patterns before generating tasks or subtasks
Tasks and subtasks generated by Claude Code are now informed by actual codebase analysis, resulting in more accurate and contextual outputs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix typos and provider naming inconsistency (user-facing).

  • “udpate-task” → “update-task”
  • “Tasks and subtasks generated by Claude Code …” under Gemini section should reference Gemini, not Claude Code.
-  Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, udpate-task, update, update-subtask commands
+  Added automatic codebase analysis for Gemini CLI provider in parse-prd, analyze-complexity, add-task, update-task, update, update-subtask commands
-  Tasks and subtasks generated by Claude Code are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
+  Tasks and subtasks generated via the Gemini CLI provider are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
📝 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
Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, udpate-task, update, update-subtask commands
When using Gemini CLI as the AI provider, Task Master now instructs the AI to analyze the project structure, existing implementations, and patterns before generating tasks or subtasks
Tasks and subtasks generated by Claude Code are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
Added automatic codebase analysis for Gemini CLI provider in parse-prd, analyze-complexity, add-task, update-task, update, update-subtask commands
When using Gemini CLI as the AI provider, Task Master now instructs the AI to analyze the project structure, existing implementations, and patterns before generating tasks or subtasks
Tasks and subtasks generated via the Gemini CLI provider are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
🤖 Prompt for AI Agents
In CHANGELOG.md around lines 9 to 12, fix the typos and provider naming
inconsistency: change "udpate-task" to "update-task" and update the sentence
that currently reads "Tasks and subtasks generated by Claude Code are now
informed by actual codebase analysis..." under the Gemini section so it
references "Gemini" (or "Gemini CLI provider") instead of "Claude Code"; ensure
phrasing remains consistent with the Gemini heading and update any nearby
duplicate occurrences to match.

Comment thread CHANGELOG.md
Comment on lines +22 to +31
- [#1162](https://github.com/eyaltoledano/claude-task-master/pull/1162) [`4dad2fd`](https://github.com/eyaltoledano/claude-task-master/commit/4dad2fd613ceac56a65ae9d3c1c03092b8860ac9) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations

When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.

Commands contextualised:
- add-task
- update-subtask
- update-task
- update

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Minor wording consistency.

“Commands contextualised” → “Commands contextualized” for consistency with US English in the doc.

-  Commands contextualised:
+  Commands contextualized:
📝 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
- [#1162](https://github.com/eyaltoledano/claude-task-master/pull/1162) [`4dad2fd`](https://github.com/eyaltoledano/claude-task-master/commit/4dad2fd613ceac56a65ae9d3c1c03092b8860ac9) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations
When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.
Commands contextualised:
- add-task
- update-subtask
- update-task
- update
- [#1162](https://github.com/eyaltoledano/claude-task-master/pull/1162) [`4dad2fd`](https://github.com/eyaltoledano/claude-task-master/commit/4dad2fd613ceac56a65ae9d3c1c03092b8860ac9) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Enhanced Claude Code and Google CLI integration with automatic codebase analysis for task operations
When using Claude Code as the AI provider, task management commands now automatically analyze your codebase before generating or updating tasks. This provides more accurate, context-aware implementation details that align with your project's existing architecture and patterns.
Commands contextualized:
- add-task
- update-subtask
- update-task
- update
🤖 Prompt for AI Agents
CHANGELOG.md around lines 22 to 31: the phrase "Commands contextualised" uses
British spelling; change it to "Commands contextualized" to match the document's
US English usage — update the word in that line and run a quick scan for other
British/US inconsistencies in the same section.

* feat: add featureFlag for codebase analysis

* chore: add changeset

* chore: run format

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (8)
package.json (1)

16-30: Add the required test scripts per repo guidelines.
package.json should expose test, test:watch, test:coverage, test:unit, test:integration, test:e2e, and test:ci.

Apply:

   "scripts": {
     "test": "node --experimental-vm-modules node_modules/.bin/jest",
+    "test:unit": "npm run test",
+    "test:integration": "npm run test",
     "test:fails": "node --experimental-vm-modules node_modules/.bin/jest --onlyFailures",
     "test:watch": "node --experimental-vm-modules node_modules/.bin/jest --watch",
     "test:coverage": "node --experimental-vm-modules node_modules/.bin/jest --coverage",
     "test:e2e": "./tests/e2e/run_e2e.sh",
     "test:e2e-report": "./tests/e2e/run_e2e.sh --analyze-log",
+    "test:ci": "node --experimental-vm-modules node_modules/.bin/jest --ci --coverage",
     "prepare": "chmod +x bin/task-master.js mcp-server/server.js",
     "changeset": "changeset",
     "release": "changeset publish",
     "inspector": "npx @modelcontextprotocol/inspector node mcp-server/server.js",
     "mcp-server": "node mcp-server/server.js",
     "format-check": "biome format .",
     "format": "biome format . --write"
   },
.changeset/sour-coins-lay.md (1)

1-12: Condense to a single, user-facing summary and align config guidance.
Changeset summaries should be one concise, imperative line; avoid multi-paragraph detail. Also, past guidance stores config in .taskmaster/config.json (not env-first). Suggest revising.

 ---
 "task-master-ai": minor
 ---
-
-Add configurable codebase analysis feature flag with multiple configuration sources
-
-Users can now control whether codebase analysis features (Claude Code and Gemini CLI integration) are enabled through environment variables, MCP configuration, or project config files.
-
-Priority order: .env > MCP session env > .taskmaster/config.json.
-
-Set `TASKMASTER_ENABLE_CODEBASE_ANALYSIS=false` in `.env` to disable codebase analysis prompts and tool integration.
+Add configurable codebase analysis flag; default on; controllable via .taskmaster/config.json (project-level) and MCP session settings.

Would you like a follow-up docs PR describing env overrides (if truly supported) without making them the primary path?

scripts/modules/config-manager.js (2)

709-716: BEDROCK incorrectly marked as “no API key needed”.

Bedrock requires AWS credentials. Early-allowing it masks missing creds and can cause runtime failures.

Apply both diffs:

-  const providersWithoutApiKeys = [
-    CUSTOM_PROVIDERS.OLLAMA,
-    CUSTOM_PROVIDERS.BEDROCK,
-    CUSTOM_PROVIDERS.MCP,
-    CUSTOM_PROVIDERS.GEMINI_CLI
-  ];
+  const providersWithoutApiKeys = [
+    CUSTOM_PROVIDERS.OLLAMA,
+    CUSTOM_PROVIDERS.MCP,
+    CUSTOM_PROVIDERS.GEMINI_CLI
+  ];
 export const providersWithoutApiKeys = [
   CUSTOM_PROVIDERS.OLLAMA,
-  CUSTOM_PROVIDERS.BEDROCK,
   CUSTOM_PROVIDERS.GEMINI_CLI,
   CUSTOM_PROVIDERS.MCP
 ];

Also applies to: 1015-1020


825-831: Short‑circuit Gemini CLI in MCP key status as non-keyed provider.

Keeps parity with isApiKeySet and avoids false warnings.

   case 'ollama':
     return true; // No key needed
+  case 'gemini-cli':
+    return true; // No key needed
   case 'claude-code':
     return true; // No key needed
scripts/modules/task-manager/add-task.js (2)

280-291: Bug: targetTag can be undefined → throws on valid default flows.

Comment says “Use provided tag, or current active tag, or default to 'master'” but code uses only tag. This breaks CLI paths without an explicit tag.

Apply:

-    // Use the provided tag, or the current active tag, or default to 'master'
-    const targetTag = tag;
+    // Use the provided tag, or the current active tag, or default to 'master'
+    const targetTag = tag || getCurrentTag(projectRoot) || 'master';

And add the missing import:

-} from '../utils.js';
+  ensureTagMetadata,
+  performCompleteTagMigration,
+  markMigrationForNotice,
+  getCurrentTag
+} from '../utils.js';

421-435: Pass computed flag instead of inline call (micro‑nit), otherwise LGTM.

Minor readability tweak: compute const codebaseEnabled = hasCodebaseAnalysis(useResearch, projectRoot, session) above and pass it here along with projectRoot. Current logic is functionally fine.

-          hasCodebaseAnalysis: hasCodebaseAnalysis(
-            useResearch,
-            projectRoot,
-            session
-          ),
+          hasCodebaseAnalysis: codebaseEnabled,
           projectRoot: projectRoot
scripts/modules/task-manager/update-subtask-by-id.js (1)

90-93: Standardize findProjectRoot usage
Replace findProjectRoot() with findProjectRoot(tasksPath) to align with other task-manager modules and ensure consistent project root resolution.

scripts/modules/task-manager/expand-task.js (1)

566-567: Fix outputType parameter for generateTextService
In scripts/modules/task-manager/expand-task.js (line 566), replace:

-                outputType: outputFormat
+                outputType: mcpLog ? 'mcp' : 'cli'

This ensures generateTextService receives the expected 'cli' or 'mcp' values.

♻️ Duplicate comments (10)
apps/extension/package.json (1)

259-260: Use workspace specifier for local monorepo dependency.
Replace pinned version with "*" to ensure workspace resolution.

-    "task-master-ai": "0.26.0-rc.1"
+    "task-master-ai": "*"
CHANGELOG.md (2)

21-24: Fix typos and provider naming inconsistency (user-facing).

  • “udpate-task” → “update-task”
  • Reference Gemini CLI in the Gemini section, not Claude Code.
-  Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, udpate-task, update, update-subtask commands
+  Added automatic codebase analysis for Gemini CLI provider in parse-prd, and analyze-complexity, add-task, update-task, update, update-subtask commands
@@
-  Tasks and subtasks generated by Claude Code are now informed by actual codebase analysis, resulting in more accurate and contextual outputs
+  Tasks and subtasks generated via the Gemini CLI provider are now informed by actual codebase analysis, resulting in more accurate and contextual outputs

38-38: Use US spelling for consistency.

“contextualised” → “contextualized”.

-  Commands contextualised:
+  Commands contextualized:
scripts/modules/config-manager.js (2)

431-459: Rename parameter to explicitRoot for consistency with getters.

Align with module convention and prior guidance.

-function isCodebaseAnalysisEnabled(session = null, projectRoot = null) {
+function isCodebaseAnalysisEnabled(session = null, explicitRoot = null) {
   // Priority 1: Environment variable
   const envFlag = resolveEnvVariable(
     'TASKMASTER_ENABLE_CODEBASE_ANALYSIS',
     session,
-    projectRoot
+    explicitRoot
   );
@@
-  const globalConfig = getGlobalConfig(projectRoot);
+  const globalConfig = getGlobalConfig(explicitRoot);

467-486: Rename parameter and calls to use explicitRoot.

Keeps API surface uniform across getters.

-function hasCodebaseAnalysis(
-  useResearch = false,
-  projectRoot = null,
-  session = null
-) {
+function hasCodebaseAnalysis(
+  useResearch = false,
+  explicitRoot = null,
+  session = null
+) {
   // First check if the feature is enabled
-  if (!isCodebaseAnalysisEnabled(session, projectRoot)) {
+  if (!isCodebaseAnalysisEnabled(session, explicitRoot)) {
     return false;
   }
 
   // Then check if a codebase analysis provider is configured
-  const currentProvider = useResearch
-    ? getResearchProvider(projectRoot)
-    : getMainProvider(projectRoot);
+  const currentProvider = useResearch
+    ? getResearchProvider(explicitRoot)
+    : getMainProvider(explicitRoot);
tests/unit/scripts/modules/task-manager/analyze-task-complexity.test.js (1)

190-192: Also assert the mock is exercised (repeat).

Add an expectation in a happy-path test to verify hasCodebaseAnalysis is called with the expected (useResearch, projectRoot, session) arguments.

Example:

const { hasCodebaseAnalysis } = await import('../../../../../scripts/modules/config-manager.js');
// ... after calling analyzeTaskComplexity(...)
expect(hasCodebaseAnalysis).toHaveBeenCalledWith(false, '/mock/project/root', expect.anything());
scripts/modules/task-manager/analyze-task-complexity.js (4)

295-297: Prefer readJSON over manual JSON.parse for existing report

Standardizes error handling and formatting.

-                existingReport = JSON.parse(fs.readFileSync(outputPath, 'utf8'));
+                existingReport = readJSON(outputPath);

354-359: Use writeJSON for empty report write

Avoid raw fs.* for JSON.

-            fs.writeFileSync(
-                outputPath,
-                JSON.stringify(emptyReport, null, '\t'),
-                'utf8'
-            );
+            writeJSON(outputPath, emptyReport);

606-606: Use writeJSON for final report write

Keeps JSON I/O consistent with utils.

-            fs.writeFileSync(outputPath, JSON.stringify(report, null, '\t'), 'utf8');
+            writeJSON(outputPath, report);

6-6: Use writeJSON for report output (consistency + safer I/O)

Import writeJSON here to replace raw fs.writeFileSync usages below (duplicate of prior guidance).

-import { log, readJSON, isSilentMode } from '../utils.js';
+import { log, readJSON, isSilentMode, writeJSON } from '../utils.js';

Comment thread package.json
Comment on lines +94 to 95
"ai-sdk-provider-gemini-cli": "^0.1.3"
},

Copy link
Copy Markdown
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

Confirm optional dep gating and peers.
Ensure ai-sdk-provider-gemini-cli usage is behind the codebase-analysis flag and has no unmet peer deps at runtime when disabled.

Run:


🏁 Script executed:

#!/bin/bash
rg -n --type=ts --type=js "ai-sdk-provider-gemini-cli" -C3
jq -r '.optionalDependencies["ai-sdk-provider-gemini-cli"]' package.json

Length of output: 3153


🏁 Script executed:

#!/bin/bash
rg -n --type=ts --type=js "codebase-analysis" -C3

Length of output: 49


🏁 Script executed:

#!/bin/bash
# Find where Gemini provider is initialized or called
rg -nP --type=ts --type=js '\bloadGeminiCliModule\b' -C3

# Search for any feature-flag or env var gating around Gemini CLI usage
rg -nP --type=ts --type=js '(/|\b)(enable|disable|flag|feature)[-_ ]?(codebase|analysis)' -C3

Length of output: 1058


Gate Gemini CLI provider behind the codebase-analysis feature flag
Calls to loadGeminiCliModule() (e.g. in getClient at src/ai-providers/gemini-cli.js:58) must be wrapped so the dynamic import only runs when the codebase-analysis flag is enabled; otherwise skip loading to avoid errors if the optional dependency isn’t installed. Verify any peer dependencies of ai-sdk-provider-gemini-cli are either declared or safely handled at runtime.

🤖 Prompt for AI Agents
In package.json around lines 94 to 95, the Gemini CLI provider
(ai-sdk-provider-gemini-cli) must be gate-kept by the codebase-analysis feature
flag: update the code that calls loadGeminiCliModule() (e.g. getClient in
src/ai-providers/gemini-cli.js line ~58) so the dynamic import only happens when
the codebase-analysis flag is enabled (return or skip loading and handle missing
provider otherwise), and add runtime guards to safely handle missing peer
dependencies (check for required exports or wrap in try/catch and fall back) or
declare any missing peer deps in package.json so consumers are aware.

Comment on lines +234 to 241
gatheredContext: gatheredContext || '',
hasCodebaseAnalysis: hasCodebaseAnalysis(
useResearch,
projectRoot,
session
),
projectRoot: projectRoot
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Pass-through of hasCodebaseAnalysis and projectRoot to prompts looks correct; minor nit on redundancy

Prompt params now include hasCodebaseAnalysis(...) and projectRoot as required. The gatheredContext || '' default is redundant since gatheredContext is initialized to ''. Optional cleanup only.

-                gatheredContext: gatheredContext || '',
+                gatheredContext,
📝 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
gatheredContext: gatheredContext || '',
hasCodebaseAnalysis: hasCodebaseAnalysis(
useResearch,
projectRoot,
session
),
projectRoot: projectRoot
};
gatheredContext,
hasCodebaseAnalysis: hasCodebaseAnalysis(
useResearch,
projectRoot,
session
),
projectRoot: projectRoot
};
🤖 Prompt for AI Agents
In scripts/modules/task-manager/update-subtask-by-id.js around lines 234 to 241,
the prompt params include gatheredContext: gatheredContext || '' which is
redundant because gatheredContext is already initialized to an empty string;
remove the unnecessary fallback and pass gatheredContext directly (i.e.,
gatheredContext: gatheredContext) while keeping the hasCodebaseAnalysis(...) and
projectRoot entries unchanged.

Comment on lines +460 to +466
gatheredContext: gatheredContext || '',
hasCodebaseAnalysis: hasCodebaseAnalysis(
useResearch,
projectRoot,
session
),
projectRoot: projectRoot

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Passing hasCodebaseAnalysis and projectRoot to prompt is correct; add a small guard in tests.

Change looks good. Add/adjust a unit test to assert hasCodebaseAnalysis is called with (useResearch, projectRoot, session) for this module as well.

🤖 Prompt for AI Agents
In scripts/modules/task-manager/update-task-by-id.js around lines 460 to 466,
the review requests adding/adjusting a unit test to ensure hasCodebaseAnalysis
is invoked with the exact arguments (useResearch, projectRoot, session) when
building the prompt; update the test for this module to mock or spy on
hasCodebaseAnalysis, call the function/path that triggers the prompt generation,
and assert the mock was called once with (useResearch, projectRoot, session);
also add a small guard (e.g., ensure projectRoot and session test fixtures are
defined) so the test cannot silently pass if those values are undefined.

Comment on lines +148 to 150
enableCodebaseAnalysis: true,
responseLanguage: 'English'
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Add unit tests for flag precedence (env > session > config).

Covers the new APIs and documented priority.

Example tests to append:

describe('Codebase analysis flag precedence', () => {
  test('env overrides session and config', () => {
    const { isCodebaseAnalysisEnabled } = configManager;
    const session = { env: { TASKMASTER_ENABLE_CODEBASE_ANALYSIS: 'false' } };
    // Mock resolveEnvVariable to return env 'true'
    jest.spyOn(require('../../scripts/modules/utils.js'), 'resolveEnvVariable')
        .mockReturnValue('true');
    expect(isCodebaseAnalysisEnabled(session, '/mock/project')).toBe(true);
  });

  test('session overrides config when env unset', () => {
    const { isCodebaseAnalysisEnabled } = configManager;
    jest.spyOn(require('../../scripts/modules/utils.js'), 'resolveEnvVariable')
        .mockReturnValue('');
    const session = { env: { TASKMASTER_ENABLE_CODEBASE_ANALYSIS: '0' } };
    expect(isCodebaseAnalysisEnabled(session, '/mock/project')).toBe(false);
  });

  test('falls back to config when env/session unset', () => {
    const { isCodebaseAnalysisEnabled, getConfig } = configManager;
    jest.spyOn(require('../../scripts/modules/utils.js'), 'resolveEnvVariable')
        .mockReturnValue('');
    jest.spyOn(configManager, 'getConfig').mockReturnValue({
      ...DEFAULT_CONFIG,
      global: { ...DEFAULT_CONFIG.global, enableCodebaseAnalysis: false }
    });
    expect(isCodebaseAnalysisEnabled(null, '/mock/project')).toBe(false);
  });
});
🤖 Prompt for AI Agents
In tests/unit/config-manager.test.js around lines 148 to 150, add unit tests
that verify flag precedence (env > session > config) for
isCodebaseAnalysisEnabled: create three tests — (1) mock resolveEnvVariable to
return a truthy value and assert env overrides session/config, (2) mock
resolveEnvVariable to return empty and provide a session.env
TASKMASTER_ENABLE_CODEBASE_ANALYSIS value to assert session overrides config,
and (3) mock resolveEnvVariable to return empty and mock configManager.getConfig
to return DEFAULT_CONFIG with enableCodebaseAnalysis false to assert fallback to
config when env/session unset; use jest.spyOn to mock
require('../../scripts/modules/utils.js').resolveEnvVariable and
configManager.getConfig, call isCodebaseAnalysisEnabled with appropriate session
and project path, and restore mocks after each test to avoid leakage.

* fix: remove claude code clear tm commands

* readded taskmaster claude code commands previously removed

* Update crazy-zebras-drum.md

Updated via nudging from task rabbit - changeset now more direct and no longer mentions issues.

* claude code remove subtasks added back to assets

---------

Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
Co-authored-by: Jeremy Watt <jeremywatt@Jeremys-Mac-mini.local>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 34

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.changeset/crazy-zebras-drum.md (1)

1-6: Silence MD041 for all .changeset files
Add one of the following to your markdownlint config to suppress the first-line heading rule for changeset summaries:

Option A (in .markdownlintignore)

+.changeset/**

Option B (in .markdownlint.json)

 {
   "default": true,
+  "MD041": false
 }
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between e80e5bb and df26c65.

📒 Files selected for processing (5)
  • .changeset/crazy-zebras-drum.md (1 hunks)
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md (1 hunks)
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md (1 hunks)
  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md (1 hunks)
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.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/crazy-zebras-drum.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/crazy-zebras-drum.md
🧠 Learnings (13)
📚 Learning: 2025-08-11T12:30:23.843Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: CLAUDE.md:0-0
Timestamp: 2025-08-11T12:30:23.843Z
Learning: Import Task Master's development workflow commands and guidelines; treat the contents of ./.taskmaster/CLAUDE.md as if included in the main CLAUDE.md

Applied to files:

  • .changeset/crazy-zebras-drum.md
  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-09-01T09:55:15.051Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/AGENTS.md:0-0
Timestamp: 2025-09-01T09:55:15.051Z
Learning: Use `/clear` between tasks to maintain focused context in Claude Code sessions

Applied to files:

  • .changeset/crazy-zebras-drum.md
📚 Learning: 2025-09-01T09:55:15.050Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/AGENTS.md:0-0
Timestamp: 2025-09-01T09:55:15.050Z
Learning: Applies to assets/.claude/commands/taskmaster-complete.md : Create .claude/commands/taskmaster-complete.md implementing the 5-step task completion workflow

Applied to files:

  • .changeset/crazy-zebras-drum.md
  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-07-17T21:33:57.585Z
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:

  • .changeset/crazy-zebras-drum.md
📚 Learning: 2025-07-18T17:19:27.365Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Use the global `task-master` CLI command instead of directly invoking `node scripts/dev.js` for all task management operations.

Applied to files:

  • .changeset/crazy-zebras-drum.md
📚 Learning: 2025-09-01T09:55:15.050Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/AGENTS.md:0-0
Timestamp: 2025-09-01T09:55:15.050Z
Learning: Applies to assets/.claude/commands/taskmaster-next.md : Create .claude/commands/taskmaster-next.md implementing the 4-step workflow to find and show the next task

Applied to files:

  • .changeset/crazy-zebras-drum.md
  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-07-18T17:10:12.881Z
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/crazy-zebras-drum.md
  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
📚 Learning: 2025-07-18T17:10:12.881Z
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/crazy-zebras-drum.md
📚 Learning: 2025-07-31T21:48:00.389Z
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#997
File: apps/extension/src/services/task-repository.ts:25-57
Timestamp: 2025-07-31T21:48:00.389Z
Learning: In the eyaltoledano/claude-task-master repository, every task is always part of a tag - there is no concept of untagged tasks. The tag system is mandatory and comprehensive, meaning all tasks exist within a tag context (with 'master' as the default tag if none specified).

Applied to files:

  • .changeset/crazy-zebras-drum.md
📚 Learning: 2025-07-31T22:08:16.039Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/taskmaster.mdc:0-0
Timestamp: 2025-07-31T22:08:16.039Z
Learning: When removing tasks or subtasks, use the remove-task or remove-subtask commands with caution, as this operation cannot be undone. Consider using 'blocked', 'cancelled', or 'deferred' status instead if you want to keep the task for reference.

Applied to files:

  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-08-03T12:13:33.875Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: .cursor/rules/test_workflow.mdc:0-0
Timestamp: 2025-08-03T12:13:33.875Z
Learning: Document testing setup and progress in TaskMaster subtasks using task-master update-subtask commands

Applied to files:

  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-07-18T17:19:27.365Z
Learnt from: CR
PR: eyaltoledano/claude-task-master#0
File: assets/.windsurfrules:0-0
Timestamp: 2025-07-18T17:19:27.365Z
Learning: Clear existing subtasks if needed using `task-master clear-subtasks --id=<id>` before regenerating.

Applied to files:

  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
  • .claude/commands/tm/remove-subtasks/remove-subtasks.md
📚 Learning: 2025-07-31T22:07:49.716Z
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 : Follow the provided structure for removing subtasks, including options for conversion, file path, and regeneration, with detailed error handling.

Applied to files:

  • assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md
  • assets/claude/commands/tm/remove-subtasks/remove-subtasks.md
🪛 LanguageTool
.changeset/crazy-zebras-drum.md

[grammar] ~5-~5: There might be a mistake here.
Context: ...ion with the claude-code /clear command.

(QB_NEW_EN)

assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md

[grammar] ~1-~1: Use correct spacing
Context: ...ar all subtasks from all tasks globally. ## Global Subtask Clearing Remove all subt...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~3-~3: Use correct spacing
Context: ...ks globally. ## Global Subtask Clearing Remove all subtasks across the entire pr...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~5-~5: Use correct spacing
Context: ...ntire project. Use with extreme caution. ## Execution ```bash task-master clear-sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: Use correct spacing
Context: ... Use with extreme caution. ## Execution bash task-master clear-subtasks --all ## Pre-Clear Analysis 1. **Project-Wide Su...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~13-~13: Use correct spacing
Context: ...ubtasks --all ## Pre-Clear Analysis 1. **Project-Wide Summary** Global ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~15-~15: Use correct spacing
Context: ...lear Analysis 1. Project-Wide Summary Global Subtask Summary ━━━━━━━━━━━━━━━━━━━━ Total parent tasks: 12 Total subtasks: 47 - Completed: 15 - In-progress: 8 - Pending: 24 Work at risk: ~120 hours 2. Critical Warnings - In-progress sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~28-~28: There might be a mistake here.
Context: ...120 hours ``` 2. Critical Warnings - In-progress subtasks that will lose work...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...In-progress subtasks that will lose work - Completed subtasks with valuable history...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...Completed subtasks with valuable history - Complex dependency chains - Integrati...

(QB_NEW_EN)


[grammar] ~31-~31: There might be a mistake here.
Context: ...e history - Complex dependency chains - Integration test results ## Double Conf...

(QB_NEW_EN)


[grammar] ~32-~32: Use correct spacing
Context: ...ncy chains - Integration test results ## Double Confirmation ``` ⚠️ DESTRUCTIVE...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~34-~34: Use correct spacing
Context: ...ion test results ## Double Confirmation ⚠️ DESTRUCTIVE OPERATION WARNING ⚠️ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This will remove ALL 47 subtasks from your project Including 8 in-progress and 15 completed subtasks This action CANNOT be undone Type 'CLEAR ALL SUBTASKS' to confirm: ## Smart Safeguards - Require explicit con...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~47-~47: There might be a problem here.
Context: ...KS' to confirm: ``` ## Smart Safeguards - Require explicit confirmation phrase - Create a...

(QB_NEW_EN_MERGED_MATCH)


[grammar] ~49-~49: There might be a problem here.
Context: ... - Require explicit confirmation phrase - Create automatic backup - Log all removed data...

(QB_NEW_EN_MERGED_MATCH)


[grammar] ~50-~50: There might be a mistake here.
Context: ...rmation phrase - Create automatic backup - Log all removed data - Option to export ...

(QB_NEW_EN_OTHER)


[grammar] ~52-~52: There might be a mistake here.
Context: ...ll removed data - Option to export first ## Use Cases Valid reasons for global clea...

(QB_NEW_EN_OTHER)


[grammar] ~54-~54: Use correct spacing
Context: ...a - Option to export first ## Use Cases Valid reasons for global clear: - Projec...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~56-~56: There might be a mistake here.
Context: ...port first ## Use Cases Valid reasons for global clear: - Project restructuring -...

(QB_NEW_EN)


[grammar] ~56-~56: There might be a mistake here.
Context: ...e Cases Valid reasons for global clear: - Project restructuring - Major pivot in a...

(QB_NEW_EN)


[grammar] ~57-~57: There might be a mistake here.
Context: ...or global clear: - Project restructuring - Major pivot in approach - Starting fresh...

(QB_NEW_EN)


[grammar] ~58-~58: There might be a mistake here.
Context: ... restructuring - Major pivot in approach - Starting fresh breakdown - Switching to ...

(QB_NEW_EN)


[grammar] ~59-~59: There might be a mistake here.
Context: ...t in approach - Starting fresh breakdown - Switching to different task organization...

(QB_NEW_EN)


[grammar] ~60-~60: Use correct spacing
Context: ...Switching to different task organization ## Process 1. Full project analysis 2. Cre...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~62-~62: Use correct spacing
Context: ... different task organization ## Process 1. Full project analysis 2. Create backup f...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~64-~64: There might be a mistake here.
Context: ...on ## Process 1. Full project analysis 2. Create backup file 3. Show detailed impa...

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...l project analysis 2. Create backup file 3. Show detailed impact 4. Require confirma...

(QB_NEW_EN)


[grammar] ~66-~66: There might be a mistake here.
Context: ...eate backup file 3. Show detailed impact 4. Require confirmation 5. Execute removal ...

(QB_NEW_EN)


[grammar] ~67-~67: There might be a mistake here.
Context: ... detailed impact 4. Require confirmation 5. Execute removal 6. Generate summary repo...

(QB_NEW_EN)


[grammar] ~68-~68: There might be a mistake here.
Context: ... Require confirmation 5. Execute removal 6. Generate summary report ## Alternative ...

(QB_NEW_EN)


[grammar] ~69-~69: Use correct spacing
Context: ...ecute removal 6. Generate summary report ## Alternative Suggestions Before clearing...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~71-~71: Use correct spacing
Context: ...mmary report ## Alternative Suggestions Before clearing all: - Export subtasks t...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~73-~73: There might be a mistake here.
Context: ...native Suggestions Before clearing all: - Export subtasks to file - Clear only pen...

(QB_NEW_EN)


[grammar] ~74-~74: There might be a mistake here.
Context: ... clearing all: - Export subtasks to file - Clear only pending subtasks - Clear by t...

(QB_NEW_EN_OTHER)


[grammar] ~77-~77: There might be a mistake here.
Context: ...ask category - Archive instead of delete ## Post-Clear Report ``` Global Subtask Cl...

(QB_NEW_EN_OTHER)


[grammar] ~79-~79: Use correct spacing
Context: ... instead of delete ## Post-Clear Report Global Subtask Clear Complete ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Removed: 47 subtasks from 12 tasks Backup saved: .taskmaster/backup/subtasks-20240115.json Parent tasks updated: 12 Time estimates adjusted: Yes Next steps: - Review updated task list - Re-expand complex tasks as needed - Check project timeline

(QB_NEW_EN_OTHER_ERROR_IDS_5)

.claude/commands/tm/remove-subtasks/remove-all-subtasks.md

[grammar] ~1-~1: Use correct spacing
Context: ...ar all subtasks from all tasks globally. ## Global Subtask Clearing Remove all subt...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~3-~3: Use correct spacing
Context: ...ks globally. ## Global Subtask Clearing Remove all subtasks across the entire pr...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~5-~5: Use correct spacing
Context: ...ntire project. Use with extreme caution. ## Execution ```bash task-master clear-sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: Use correct spacing
Context: ... Use with extreme caution. ## Execution bash task-master clear-subtasks --all ## Pre-Clear Analysis 1. **Project-Wide Su...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~13-~13: Use correct spacing
Context: ...ubtasks --all ## Pre-Clear Analysis 1. **Project-Wide Summary** Global ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~15-~15: Use correct spacing
Context: ...lear Analysis 1. Project-Wide Summary Global Subtask Summary ━━━━━━━━━━━━━━━━━━━━ Total parent tasks: 12 Total subtasks: 47 - Completed: 15 - In-progress: 8 - Pending: 24 Work at risk: ~120 hours 2. Critical Warnings - In-progress sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~28-~28: There might be a mistake here.
Context: ...120 hours ``` 2. Critical Warnings - In-progress subtasks that will lose work...

(QB_NEW_EN)


[grammar] ~29-~29: There might be a mistake here.
Context: ...In-progress subtasks that will lose work - Completed subtasks with valuable history...

(QB_NEW_EN)


[grammar] ~30-~30: There might be a mistake here.
Context: ...Completed subtasks with valuable history - Complex dependency chains - Integrati...

(QB_NEW_EN)


[grammar] ~31-~31: There might be a mistake here.
Context: ...e history - Complex dependency chains - Integration test results ## Double Conf...

(QB_NEW_EN)


[grammar] ~32-~32: Use correct spacing
Context: ...ncy chains - Integration test results ## Double Confirmation ``` ⚠️ DESTRUCTIVE...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~34-~34: Use correct spacing
Context: ...ion test results ## Double Confirmation ⚠️ DESTRUCTIVE OPERATION WARNING ⚠️ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This will remove ALL 47 subtasks from your project Including 8 in-progress and 15 completed subtasks This action CANNOT be undone Type 'CLEAR ALL SUBTASKS' to confirm: ## Smart Safeguards - Require explicit con...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~47-~47: There might be a problem here.
Context: ...KS' to confirm: ``` ## Smart Safeguards - Require explicit confirmation phrase - Create a...

(QB_NEW_EN_MERGED_MATCH)


[grammar] ~49-~49: There might be a problem here.
Context: ... - Require explicit confirmation phrase - Create automatic backup - Log all removed data...

(QB_NEW_EN_MERGED_MATCH)


[grammar] ~50-~50: There might be a mistake here.
Context: ...rmation phrase - Create automatic backup - Log all removed data - Option to export ...

(QB_NEW_EN_OTHER)


[grammar] ~52-~52: There might be a mistake here.
Context: ...ll removed data - Option to export first ## Use Cases Valid reasons for global clea...

(QB_NEW_EN_OTHER)


[grammar] ~54-~54: Use correct spacing
Context: ...a - Option to export first ## Use Cases Valid reasons for global clear: - Projec...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~56-~56: There might be a mistake here.
Context: ...port first ## Use Cases Valid reasons for global clear: - Project restructuring -...

(QB_NEW_EN)


[grammar] ~56-~56: There might be a mistake here.
Context: ...e Cases Valid reasons for global clear: - Project restructuring - Major pivot in a...

(QB_NEW_EN)


[grammar] ~57-~57: There might be a mistake here.
Context: ...or global clear: - Project restructuring - Major pivot in approach - Starting fresh...

(QB_NEW_EN)


[grammar] ~58-~58: There might be a mistake here.
Context: ... restructuring - Major pivot in approach - Starting fresh breakdown - Switching to ...

(QB_NEW_EN)


[grammar] ~59-~59: There might be a mistake here.
Context: ...t in approach - Starting fresh breakdown - Switching to different task organization...

(QB_NEW_EN)


[grammar] ~60-~60: Use correct spacing
Context: ...Switching to different task organization ## Process 1. Full project analysis 2. Cre...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~62-~62: Use correct spacing
Context: ... different task organization ## Process 1. Full project analysis 2. Create backup f...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~64-~64: There might be a mistake here.
Context: ...on ## Process 1. Full project analysis 2. Create backup file 3. Show detailed impa...

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...l project analysis 2. Create backup file 3. Show detailed impact 4. Require confirma...

(QB_NEW_EN)


[grammar] ~66-~66: There might be a mistake here.
Context: ...eate backup file 3. Show detailed impact 4. Require confirmation 5. Execute removal ...

(QB_NEW_EN)


[grammar] ~67-~67: There might be a mistake here.
Context: ... detailed impact 4. Require confirmation 5. Execute removal 6. Generate summary repo...

(QB_NEW_EN)


[grammar] ~68-~68: There might be a mistake here.
Context: ... Require confirmation 5. Execute removal 6. Generate summary report ## Alternative ...

(QB_NEW_EN)


[grammar] ~69-~69: Use correct spacing
Context: ...ecute removal 6. Generate summary report ## Alternative Suggestions Before clearing...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~71-~71: Use correct spacing
Context: ...mmary report ## Alternative Suggestions Before clearing all: - Export subtasks t...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~73-~73: There might be a mistake here.
Context: ...native Suggestions Before clearing all: - Export subtasks to file - Clear only pen...

(QB_NEW_EN)


[grammar] ~74-~74: There might be a mistake here.
Context: ... clearing all: - Export subtasks to file - Clear only pending subtasks - Clear by t...

(QB_NEW_EN_OTHER)


[grammar] ~77-~77: There might be a mistake here.
Context: ...ask category - Archive instead of delete ## Post-Clear Report ``` Global Subtask Cl...

(QB_NEW_EN_OTHER)


[grammar] ~79-~79: Use correct spacing
Context: ... instead of delete ## Post-Clear Report Global Subtask Clear Complete ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Removed: 47 subtasks from 12 tasks Backup saved: .taskmaster/backup/subtasks-20240115.json Parent tasks updated: 12 Time estimates adjusted: Yes Next steps: - Review updated task list - Re-expand complex tasks as needed - Check project timeline

(QB_NEW_EN_OTHER_ERROR_IDS_5)

assets/claude/commands/tm/remove-subtasks/remove-subtasks.md

[grammar] ~1-~1: Use correct spacing
Context: ...Clear all subtasks from a specific task. Arguments: $ARGUMENTS (task ID) Remove ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~3-~3: Use correct spacing
Context: ...c task. Arguments: $ARGUMENTS (task ID) Remove all subtasks from a parent task a...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~5-~5: Use correct spacing
Context: ...all subtasks from a parent task at once. ## Clearing Subtasks Bulk removal of all s...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: Use correct spacing
Context: ...rent task at once. ## Clearing Subtasks Bulk removal of all subtasks from a pare...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~9-~9: Use correct spacing
Context: ...oval of all subtasks from a parent task. ## Execution ```bash task-master clear-sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~11-~11: Use correct spacing
Context: ...btasks from a parent task. ## Execution bash task-master clear-subtasks --id=<task-id> ## Pre-Clear Analysis 1. **Subtask Summary...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~17-~17: Use correct spacing
Context: ...-id= ``` ## Pre-Clear Analysis 1. Subtask Summary - Number of subtask...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~19-~19: There might be a mistake here.
Context: ...Pre-Clear Analysis 1. Subtask Summary - Number of subtasks - Completion statu...

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...ubtask Summary** - Number of subtasks - Completion status of each - Work alre...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ... subtasks - Completion status of each - Work already done - Dependencies affe...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ...on status of each - Work already done - Dependencies affected 2. **Impact Asses...

(QB_NEW_EN)


[grammar] ~23-~23: Use correct spacing
Context: ... already done - Dependencies affected 2. Impact Assessment - Data that will ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~25-~25: There might be a mistake here.
Context: ...dencies affected 2. Impact Assessment - Data that will be lost - Dependencies...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ...Assessment** - Data that will be lost - Dependencies to be removed - Effect o...

(QB_NEW_EN)


[grammar] ~27-~27: There might be a mistake here.
Context: ... be lost - Dependencies to be removed - Effect on project timeline - Parent t...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: ... removed - Effect on project timeline - Parent task implications ## Confirmatio...

(QB_NEW_EN)


[grammar] ~29-~29: Use correct spacing
Context: ...t timeline - Parent task implications ## Confirmation Required ``` Clear Subtask...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~31-~31: Use correct spacing
Context: ...k implications ## Confirmation Required Clear Subtasks Confirmation ━━━━━━━━━━━━━━━━━━━━━━━━━ Parent Task: #5 "Implement user authentication" Subtasks to remove: 4 - #5.1 "Setup auth framework" (done) - #5.2 "Create login form" (in-progress) - #5.3 "Add validation" (pending) - #5.4 "Write tests" (pending) ⚠️ This will permanently delete all subtask data Continue? (y/n) ## Smart Features - Option to convert to s...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~47-~47: Use correct spacing
Context: ...a Continue? (y/n) ``` ## Smart Features - Option to convert to standalone tasks - ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~49-~49: There might be a mistake here.
Context: ... - Option to convert to standalone tasks - Backup task data before clearing - Prese...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...tasks - Backup task data before clearing - Preserve completed work history - Update...

(QB_NEW_EN)


[grammar] ~51-~51: There might be a mistake here.
Context: ...earing - Preserve completed work history - Update parent task appropriately ## Pro...

(QB_NEW_EN)


[grammar] ~52-~52: Use correct spacing
Context: ...story - Update parent task appropriately ## Process 1. List all subtasks for confir...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~54-~54: Use correct spacing
Context: ...te parent task appropriately ## Process 1. List all subtasks for confirmation 2. Ch...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~56-~56: There might be a mistake here.
Context: ...s 1. List all subtasks for confirmation 2. Check for in-progress work 3. Remove all...

(QB_NEW_EN_OTHER)


[grammar] ~57-~57: There might be a mistake here.
Context: ...nfirmation 2. Check for in-progress work 3. Remove all subtasks 4. Update parent tas...

(QB_NEW_EN_OTHER)


[grammar] ~58-~58: There might be a mistake here.
Context: ... in-progress work 3. Remove all subtasks 4. Update parent task 5. Clean up dependenc...

(QB_NEW_EN_OTHER)


[grammar] ~59-~59: There might be a mistake here.
Context: ...emove all subtasks 4. Update parent task 5. Clean up dependencies ## Alternative Op...

(QB_NEW_EN_OTHER)


[grammar] ~60-~60: There might be a mistake here.
Context: ...ate parent task 5. Clean up dependencies ## Alternative Options Suggest alternative...

(QB_NEW_EN_OTHER)


[grammar] ~62-~62: Use correct spacing
Context: ... up dependencies ## Alternative Options Suggest alternatives: - Convert importan...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~64-~64: There might be a mistake here.
Context: ...ternative Options Suggest alternatives: - Convert important subtasks to tasks - Ke...

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...s: - Convert important subtasks to tasks - Keep completed subtasks - Archive instea...

(QB_NEW_EN_OTHER)


[grammar] ~66-~66: There might be a mistake here.
Context: ...tasks to tasks - Keep completed subtasks - Archive instead of delete - Export subta...

(QB_NEW_EN_OTHER)


[grammar] ~67-~67: There might be a mistake here.
Context: ...ted subtasks - Archive instead of delete - Export subtask data first ## Post-Clear...

(QB_NEW_EN_OTHER)


[grammar] ~68-~68: There might be a mistake here.
Context: ...ad of delete - Export subtask data first ## Post-Clear - Show updated parent task -...

(QB_NEW_EN_OTHER)


[grammar] ~70-~70: Use correct spacing
Context: ...Export subtask data first ## Post-Clear - Show updated parent task - Recalculate t...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~72-~72: There might be a mistake here.
Context: ...# Post-Clear - Show updated parent task - Recalculate time estimates - Update task...

(QB_NEW_EN_OTHER)


[grammar] ~73-~73: There might be a mistake here.
Context: ...parent task - Recalculate time estimates - Update task complexity - Suggest next st...

(QB_NEW_EN_OTHER)


[grammar] ~74-~74: There might be a mistake here.
Context: ... time estimates - Update task complexity - Suggest next steps ## Example ``` /pro...

(QB_NEW_EN_OTHER)


[grammar] ~75-~75: There might be a mistake here.
Context: ...ate task complexity - Suggest next steps ## Example ``` /project:tm/clear-subtasks ...

(QB_NEW_EN_OTHER)


[grammar] ~77-~77: Use correct spacing
Context: ...plexity - Suggest next steps ## Example /project:tm/clear-subtasks 5 → Found 4 subtasks to remove → Warning: Subtask #5.2 is in-progress → Cleared all subtasks from task #5 → Updated parent task estimates → Suggestion: Consider re-expanding with better breakdown

(QB_NEW_EN_OTHER_ERROR_IDS_5)

.claude/commands/tm/remove-subtasks/remove-subtasks.md

[grammar] ~1-~1: Use correct spacing
Context: ...Clear all subtasks from a specific task. Arguments: $ARGUMENTS (task ID) Remove ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~3-~3: Use correct spacing
Context: ...c task. Arguments: $ARGUMENTS (task ID) Remove all subtasks from a parent task a...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~5-~5: Use correct spacing
Context: ...all subtasks from a parent task at once. ## Clearing Subtasks Bulk removal of all s...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~7-~7: Use correct spacing
Context: ...rent task at once. ## Clearing Subtasks Bulk removal of all subtasks from a pare...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~9-~9: Use correct spacing
Context: ...oval of all subtasks from a parent task. ## Execution ```bash task-master clear-sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~11-~11: Use correct spacing
Context: ...btasks from a parent task. ## Execution bash task-master clear-subtasks --id=<task-id> ## Pre-Clear Analysis 1. **Subtask Summary...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~17-~17: Use correct spacing
Context: ...-id= ``` ## Pre-Clear Analysis 1. Subtask Summary - Number of subtask...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~19-~19: There might be a mistake here.
Context: ...Pre-Clear Analysis 1. Subtask Summary - Number of subtasks - Completion statu...

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...ubtask Summary** - Number of subtasks - Completion status of each - Work alre...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ... subtasks - Completion status of each - Work already done - Dependencies affe...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ...on status of each - Work already done - Dependencies affected 2. **Impact Asses...

(QB_NEW_EN)


[grammar] ~23-~23: Use correct spacing
Context: ... already done - Dependencies affected 2. Impact Assessment - Data that will ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~25-~25: There might be a mistake here.
Context: ...dencies affected 2. Impact Assessment - Data that will be lost - Dependencies...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ...Assessment** - Data that will be lost - Dependencies to be removed - Effect o...

(QB_NEW_EN)


[grammar] ~27-~27: There might be a mistake here.
Context: ... be lost - Dependencies to be removed - Effect on project timeline - Parent t...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: ... removed - Effect on project timeline - Parent task implications ## Confirmatio...

(QB_NEW_EN)


[grammar] ~29-~29: Use correct spacing
Context: ...t timeline - Parent task implications ## Confirmation Required ``` Clear Subtask...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~31-~31: Use correct spacing
Context: ...k implications ## Confirmation Required Clear Subtasks Confirmation ━━━━━━━━━━━━━━━━━━━━━━━━━ Parent Task: #5 "Implement user authentication" Subtasks to remove: 4 - #5.1 "Setup auth framework" (done) - #5.2 "Create login form" (in-progress) - #5.3 "Add validation" (pending) - #5.4 "Write tests" (pending) ⚠️ This will permanently delete all subtask data Continue? (y/n) ## Smart Features - Option to convert to s...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~47-~47: Use correct spacing
Context: ...a Continue? (y/n) ``` ## Smart Features - Option to convert to standalone tasks - ...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~49-~49: There might be a mistake here.
Context: ... - Option to convert to standalone tasks - Backup task data before clearing - Prese...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...tasks - Backup task data before clearing - Preserve completed work history - Update...

(QB_NEW_EN)


[grammar] ~51-~51: There might be a mistake here.
Context: ...earing - Preserve completed work history - Update parent task appropriately ## Pro...

(QB_NEW_EN)


[grammar] ~52-~52: Use correct spacing
Context: ...story - Update parent task appropriately ## Process 1. List all subtasks for confir...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~54-~54: Use correct spacing
Context: ...te parent task appropriately ## Process 1. List all subtasks for confirmation 2. Ch...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~56-~56: There might be a mistake here.
Context: ...s 1. List all subtasks for confirmation 2. Check for in-progress work 3. Remove all...

(QB_NEW_EN_OTHER)


[grammar] ~57-~57: There might be a mistake here.
Context: ...nfirmation 2. Check for in-progress work 3. Remove all subtasks 4. Update parent tas...

(QB_NEW_EN_OTHER)


[grammar] ~58-~58: There might be a mistake here.
Context: ... in-progress work 3. Remove all subtasks 4. Update parent task 5. Clean up dependenc...

(QB_NEW_EN_OTHER)


[grammar] ~59-~59: There might be a mistake here.
Context: ...emove all subtasks 4. Update parent task 5. Clean up dependencies ## Alternative Op...

(QB_NEW_EN_OTHER)


[grammar] ~60-~60: There might be a mistake here.
Context: ...ate parent task 5. Clean up dependencies ## Alternative Options Suggest alternative...

(QB_NEW_EN_OTHER)


[grammar] ~62-~62: Use correct spacing
Context: ... up dependencies ## Alternative Options Suggest alternatives: - Convert importan...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~64-~64: There might be a mistake here.
Context: ...ternative Options Suggest alternatives: - Convert important subtasks to tasks - Ke...

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...s: - Convert important subtasks to tasks - Keep completed subtasks - Archive instea...

(QB_NEW_EN_OTHER)


[grammar] ~66-~66: There might be a mistake here.
Context: ...tasks to tasks - Keep completed subtasks - Archive instead of delete - Export subta...

(QB_NEW_EN_OTHER)


[grammar] ~67-~67: There might be a mistake here.
Context: ...ted subtasks - Archive instead of delete - Export subtask data first ## Post-Clear...

(QB_NEW_EN_OTHER)


[grammar] ~68-~68: There might be a mistake here.
Context: ...ad of delete - Export subtask data first ## Post-Clear - Show updated parent task -...

(QB_NEW_EN_OTHER)


[grammar] ~70-~70: Use correct spacing
Context: ...Export subtask data first ## Post-Clear - Show updated parent task - Recalculate t...

(QB_NEW_EN_OTHER_ERROR_IDS_5)


[grammar] ~72-~72: There might be a mistake here.
Context: ...# Post-Clear - Show updated parent task - Recalculate time estimates - Update task...

(QB_NEW_EN_OTHER)


[grammar] ~73-~73: There might be a mistake here.
Context: ...parent task - Recalculate time estimates - Update task complexity - Suggest next st...

(QB_NEW_EN_OTHER)


[grammar] ~74-~74: There might be a mistake here.
Context: ... time estimates - Update task complexity - Suggest next steps ## Example ``` /pro...

(QB_NEW_EN_OTHER)


[grammar] ~75-~75: There might be a mistake here.
Context: ...ate task complexity - Suggest next steps ## Example ``` /project:tm/clear-subtasks ...

(QB_NEW_EN_OTHER)


[grammar] ~77-~77: Use correct spacing
Context: ...plexity - Suggest next steps ## Example /project:tm/clear-subtasks 5 → Found 4 subtasks to remove → Warning: Subtask #5.2 is in-progress → Cleared all subtasks from task #5 → Updated parent task estimates → Suggestion: Consider re-expanding with better breakdown

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)
.changeset/crazy-zebras-drum.md

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

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

assets/claude/commands/tm/remove-subtasks/remove-all-subtasks.md

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

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


33-33: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


65-65: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


79-79: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


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

(MD047, single-trailing-newline)

.claude/commands/tm/remove-subtasks/remove-all-subtasks.md

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

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


16-16: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


16-16: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


36-36: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


57-57: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


74-74: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


81-81: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


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

(MD047, single-trailing-newline)

.claude/commands/tm/remove-subtasks/remove-subtasks.md

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

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


33-33: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


65-65: Lists should be surrounded by blank lines

(MD032, blanks-around-lists)


79-79: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


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

(MD047, single-trailing-newline)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: test
  • GitHub Check: build
  • GitHub Check: typecheck
  • GitHub Check: test
🔇 Additional comments (2)
.changeset/crazy-zebras-drum.md (1)

1-3: Front‑matter looks correct; package and bump type align with guidelines.

Uses "task-master-ai" and a minor bump, matching our repo convention for MCP/server changes.

.claude/commands/tm/remove-subtasks/remove-subtasks.md (1)

13-16: LGTM: primary usage example is clear.

"task-master-ai": minor
---

Restore Taskmaster claude-code commands and move clear commands under /remove to avoid collision with the claude-code /clear command.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Tighten the one‑line, user‑facing summary (imperative + grammar).

Rephrase for clarity, correct capitalization, and collision wording.

-Restore Taskmaster claude-code commands and move clear commands under /remove to avoid collision with the claude-code /clear command.
+Restore Taskmaster Claude Code commands; move "clear" commands under /remove to avoid a collision with Claude Code's /clear.
📝 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
Restore Taskmaster claude-code commands and move clear commands under /remove to avoid collision with the claude-code /clear command.
Restore Taskmaster Claude Code commands; move "clear" commands under /remove to avoid a collision with Claude Code's /clear.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: There might be a mistake here.
Context: ...ion with the claude-code /clear command.

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)

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

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

🤖 Prompt for AI Agents
In .changeset/crazy-zebras-drum.md around line 5, the one-line user-facing
summary should be tightened to an imperative verb form, fix capitalization of
product/command names, and clarify the collision wording; rewrite the sentence
to be concise and clear (for example: "Restore Taskmaster claude-code commands;
move clear commands to /remove to avoid colliding with the claude-code /clear
command."), ensuring it reads as a single imperative summary.

@@ -0,0 +1,93 @@
Clear all subtasks from all tasks globally.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add a top-level heading (MD041)

- Clear all subtasks from all tasks globally.
+ # Clear all subtasks from all tasks globally
📝 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
Clear all subtasks from all tasks globally.
# Clear all subtasks from all tasks globally
🧰 Tools
🪛 LanguageTool

[grammar] ~1-~1: Use correct spacing
Context: ...ar all subtasks from all tasks globally. ## Global Subtask Clearing Remove all subt...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🪛 markdownlint-cli2 (0.17.2)

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

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

🤖 Prompt for AI Agents
.claude/commands/tm/remove-subtasks/remove-all-subtasks.md lines 1-1: the file
is missing a top-level Markdown heading (MD041); add a level-1 heading as the
very first line of the file to satisfy the rule — e.g., insert a clear H1 that
describes the command (such as "Remove All Subtasks" or similar) so the document
begins with a top-level heading.


## Global Subtask Clearing

Remove all subtasks across the entire project. Use with extreme caution.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Cross-link safer alternatives per workflow guidance

Reference statuses like “blocked/cancelled/deferred” as non-destructive options, aligning with team workflow.

- Remove all subtasks across the entire project. Use with extreme caution.
+ Remove all subtasks across the entire project. Use with extreme caution. When in doubt, prefer changing status to "blocked", "cancelled", or "deferred" instead of deletion.
📝 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
Remove all subtasks across the entire project. Use with extreme caution.
Remove all subtasks across the entire project. Use with extreme caution. When in doubt, prefer changing status to "blocked", "cancelled", or "deferred" instead of deletion.
🧰 Tools
🪛 LanguageTool

[grammar] ~5-~5: Use correct spacing
Context: ...ntire project. Use with extreme caution. ## Execution ```bash task-master clear-sub...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In .claude/commands/tm/remove-subtasks/remove-all-subtasks.md around line 5, the
command text only warns "Use with extreme caution" but does not cross-link or
mention safer, non-destructive workflow alternatives; update the doc to add
explicit references (and where applicable, links) to the safer statuses
"blocked", "cancelled", and "deferred" as preferred alternatives and briefly
note when to use each so readers choose non-destructive options instead of
removing subtasks.

Comment on lines +10 to +11
task-master clear-subtasks --all
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Confirm the CLI flag is implemented as documented

Validate that task-master clear-subtasks --all exists and matches behavior (double confirmation, backup path).

I can align this doc with the actual CLI help output once you confirm the current command signature and flags.

🤖 Prompt for AI Agents
In .claude/commands/tm/remove-subtasks/remove-all-subtasks.md around lines 10 to
11, the docs reference the CLI invocation "task-master clear-subtasks --all" but
the codebase needs to be verified/updated to match: check the command
registration for "clear-subtasks" and ensure a boolean "--all" flag exists in
the command parser, implement the flag to perform full clear behavior (prompt
double confirmation and create a backup file at the configured backup path
before deletion), and update the command help text and tests to reflect the
final signature and behavior so the documentation and CLI output match.

Comment on lines +16 to +26
```
Global Subtask Summary
━━━━━━━━━━━━━━━━━━━━
Total parent tasks: 12
Total subtasks: 47
- Completed: 15
- In-progress: 8
- Pending: 24

Work at risk: ~120 hours
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add language to fenced block and surround with blank lines (MD040/MD031)

Label the embedded summary as text.

-   ```
+   ```text
    Global Subtask Summary
    ━━━━━━━━━━━━━━━━━━━━
    Total parent tasks: 12
    Total subtasks: 47
    - Completed: 15
    - In-progress: 8
    - Pending: 24
    
    Work at risk: ~120 hours
    ```
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

16-16: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


16-16: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
In .claude/commands/tm/remove-subtasks/remove-all-subtasks.md around lines 16 to
26 the fenced code block containing the "Global Subtask Summary" lacks a
language label and surrounding blank lines, triggering MD040/MD031 checks;
update the markdown to add a language tag (use "text") after the opening
backticks and ensure there's a blank line before and after the fenced block so
it becomes: a blank line, ```text, the summary, ```, and then a blank line to
satisfy linting.

@@ -0,0 +1,86 @@
Clear all subtasks from a specific task.

Arguments: $ARGUMENTS (task ID)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Replace placeholder with the real CLI argument

The $ARGUMENTS placeholder leaks template text. Specify the actual flag used elsewhere in the doc.

- Arguments: $ARGUMENTS (task ID)
+ Arguments: --id=<task-id>
📝 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
Arguments: $ARGUMENTS (task ID)
Arguments: --id=<task-id>
🧰 Tools
🪛 LanguageTool

[grammar] ~3-~3: Use correct spacing
Context: ...c task. Arguments: $ARGUMENTS (task ID) Remove all subtasks from a parent task a...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In assets/claude/commands/tm/remove-subtasks/remove-subtasks.md around line 3,
the documentation contains the placeholder "$ARGUMENTS" instead of the real CLI
argument; replace "$ARGUMENTS (task ID)" with the actual flag used elsewhere in
the docs (for example "--task-id <id>" or the project's canonical arg name),
ensuring it matches casing and formatting used across other command docs and
includes a short descriptor like "(task ID)".

Comment on lines +33 to +45
```
Clear Subtasks Confirmation
━━━━━━━━━━━━━━━━━━━━━━━━━
Parent Task: #5 "Implement user authentication"
Subtasks to remove: 4
- #5.1 "Setup auth framework" (done)
- #5.2 "Create login form" (in-progress)
- #5.3 "Add validation" (pending)
- #5.4 "Write tests" (pending)

⚠️ This will permanently delete all subtask data
Continue? (y/n)
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Specify a language for the confirmation fence to satisfy markdownlint (MD040) and improve rendering

Label this as plain text.

-```
+```text
 Clear Subtasks Confirmation
 ━━━━━━━━━━━━━━━━━━━━━━━━━
 Parent Task: #5 "Implement user authentication"
 Subtasks to remove: 4
 - #5.1 "Setup auth framework" (done)
 - #5.2 "Create login form" (in-progress)
 - #5.3 "Add validation" (pending)
 - #5.4 "Write tests" (pending)

 ⚠️  This will permanently delete all subtask data
 Continue? (y/n)

<details>
<summary>🤖 Prompt for AI Agents</summary>

In assets/claude/commands/tm/remove-subtasks/remove-subtasks.md around lines 33
to 45, the markdown code fence for the confirmation block lacks a language
specifier; update the opening fence to specify plain text (for example text) so markdownlint MD040 is satisfied and rendering improves, keeping the fence content unchanged and ensuring the closing remains present.


</details>

<!-- fingerprinting:phantom:triton:chinchilla -->

<!-- This is an auto-generated comment by CodeRabbit -->

Comment on lines +49 to +53
- Option to convert to standalone tasks
- Backup task data before clearing
- Preserve completed work history
- Update parent task appropriately

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Clarify whether “Smart Features” exist as flags today

If these are implemented, document the exact flags; if planned, mark them explicitly to avoid misleading users.

I can update this section to list real flags (e.g., --backup, --convert-to-task) once you confirm the current CLI surface.

🧰 Tools
🪛 LanguageTool

[grammar] ~49-~49: There might be a mistake here.
Context: ... - Option to convert to standalone tasks - Backup task data before clearing - Prese...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...tasks - Backup task data before clearing - Preserve completed work history - Update...

(QB_NEW_EN)


[grammar] ~51-~51: There might be a mistake here.
Context: ...earing - Preserve completed work history - Update parent task appropriately ## Pro...

(QB_NEW_EN)


[grammar] ~52-~52: Use correct spacing
Context: ...story - Update parent task appropriately ## Process 1. List all subtasks for confir...

(QB_NEW_EN_OTHER_ERROR_IDS_5)

🤖 Prompt for AI Agents
In assets/claude/commands/tm/remove-subtasks/remove-subtasks.md around lines
49–53, the "Smart Features" bullet list is ambiguous about whether these are
implemented CLI flags; update the docs so each item either lists the exact
current flag name and short behavior (e.g., --backup: backup task data before
clearing; --convert-to-task: convert subtask to standalone task) or is
explicitly marked as planned/coming-soon with a TODO and no flag examples, and
if you claim flags exist, verify the CLI surface and replace placeholders with
the real flag names and their short descriptions.

Comment on lines +64 to +69
Suggest alternatives:
- Convert important subtasks to tasks
- Keep completed subtasks
- Archive instead of delete
- Export subtask data first

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Add a blank line before the list to quiet MD032 (lists surrounded by blank lines) and improve readability

- Suggest alternatives:
+ Suggest alternatives:

 - Convert important subtasks to tasks
 - Keep completed subtasks
 - Archive instead of delete
 - Export subtask data first
📝 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
Suggest alternatives:
- Convert important subtasks to tasks
- Keep completed subtasks
- Archive instead of delete
- Export subtask data first
Suggest alternatives:
- Convert important subtasks to tasks
- Keep completed subtasks
- Archive instead of delete
- Export subtask data first
🧰 Tools
🪛 LanguageTool

[grammar] ~64-~64: There might be a mistake here.
Context: ...ternative Options Suggest alternatives: - Convert important subtasks to tasks - Ke...

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...s: - Convert important subtasks to tasks - Keep completed subtasks - Archive instea...

(QB_NEW_EN_OTHER)


[grammar] ~66-~66: There might be a mistake here.
Context: ...tasks to tasks - Keep completed subtasks - Archive instead of delete - Export subta...

(QB_NEW_EN_OTHER)


[grammar] ~67-~67: There might be a mistake here.
Context: ...ted subtasks - Archive instead of delete - Export subtask data first ## Post-Clear...

(QB_NEW_EN_OTHER)


[grammar] ~68-~68: There might be a mistake here.
Context: ...ad of delete - Export subtask data first ## Post-Clear - Show updated parent task -...

(QB_NEW_EN_OTHER)

🤖 Prompt for AI Agents
In assets/claude/commands/tm/remove-subtasks/remove-subtasks.md around lines 64
to 69, the markdown list is not preceded by a blank line which triggers MD032
and hurts readability; insert a single blank line immediately before the "-
Convert important subtasks to tasks" line so the list is separated from the
preceding paragraph, then run a markdown lint to confirm MD032 is resolved.

Comment on lines +80 to +86
/project:tm/clear-subtasks 5
→ Found 4 subtasks to remove
→ Warning: Subtask #5.2 is in-progress
→ Cleared all subtasks from task #5
→ Updated parent task estimates
→ Suggestion: Consider re-expanding with better breakdown
``` No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Unify CLI example with earlier syntax

The example uses a different invocation form. Align with the documented flag form.

- /project:tm/clear-subtasks 5
+ task-master clear-subtasks --id=5
📝 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
/project:tm/clear-subtasks 5
→ Found 4 subtasks to remove
→ Warning: Subtask #5.2 is in-progress
→ Cleared all subtasks from task #5
→ Updated parent task estimates
→ Suggestion: Consider re-expanding with better breakdown
```
🤖 Prompt for AI Agents
In assets/claude/commands/tm/remove-subtasks/remove-subtasks.md around lines 80
to 86, the CLI example uses the alternate invocation "/project:tm/clear-subtasks
5"; update the example to use the documented flag form instead by replacing that
invocation with the flag-style syntax (for example: use --project=tm
clear-subtasks 5 or --project tm clear-subtasks 5 to match the rest of the
docs), and ensure the rest of the output examples remain unchanged.

eyaltoledano
eyaltoledano previously approved these changes Sep 8, 2025

@eyaltoledano eyaltoledano left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

lgtm provided this is fully tested and works.

@eyaltoledano eyaltoledano left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

lgtm

@Crunchyman-ralph Crunchyman-ralph merged commit 597f6b0 into main Sep 8, 2025
14 of 15 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/claude-docs-updater.yml (1)

101-107: Fix unsafe commit message injection (quotes/newlines will break -m string).

Inserting a (JSON-encoded) commit message inside a single -m "..." causes quoting breakage. Build the message via heredoc and commit with -F.

-            git commit -m "docs: auto-update documentation based on changes in next branch
-
-            This PR was automatically generated to update documentation based on recent changes.
-            
-            Original commit: ${{ inputs.commit_message }}
-            
-            Co-authored-by: Claude <claude-assistant@anthropic.com>"
+            cat > .git/COMMIT_MSG <<'MSG'
+docs: auto-update documentation based on changes in next branch
+
+This PR was automatically generated to update documentation based on recent changes.
+
+Original message:
+MSG
+            # Append decoded commit message safely
+            printf "%s\n" "${{ fromJSON(inputs.commit_message) }}" >> .git/COMMIT_MSG
+            printf "\nCo-authored-by: Claude <claude-assistant@anthropic.com>\n" >> .git/COMMIT_MSG
+            git commit -F .git/COMMIT_MSG
+            rm -f .git/COMMIT_MSG
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0d54747 and a7ad4c8.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • .github/workflows/claude-docs-trigger.yml (1 hunks)
  • .github/workflows/claude-docs-updater.yml (5 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: Crunchyman-ralph
PR: eyaltoledano/claude-task-master#1178
File: packages/tm-core/src/auth/config.ts:5-7
Timestamp: 2025-09-02T21:51:27.921Z
Learning: The user Crunchyman-ralph prefers not to use node: scheme imports (e.g., 'node:os', 'node:path') for Node.js core modules and considers suggestions to change bare imports to node: scheme as too nitpicky.
🪛 YAMLlint (1.37.1)
.github/workflows/claude-docs-trigger.yml

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

(truthy)


[warning] 24-24: too few spaces before comment: expected 2

(comments)


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

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

.github/workflows/claude-docs-updater.yml

[warning] 35-35: too few spaces before comment: expected 2

(comments)


[error] 127-127: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: test
  • GitHub Check: typecheck
  • GitHub Check: build
  • GitHub Check: test
  • GitHub Check: update-docs
🔇 Additional comments (2)
.github/workflows/claude-docs-updater.yml (1)

26-29: Principle of least privilege: confirm if issues: write is required.

If the workflow only opens PRs, issues: write can likely be dropped.

.github/workflows/claude-docs-trigger.yml (1)

30-42: I’ve added a script to locate and inspect your workflow’s checkout and diff usage. This will confirm whether HEAD^ is truly brittle in your setup.

- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2 # Need previous commit for comparison

Copy link
Copy Markdown
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: two spaces before inline comment.

-          fetch-depth: 2 # Need previous commit for comparison
+          fetch-depth: 2  # Need previous commit for comparison
📝 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
fetch-depth: 2 # Need previous commit for comparison
fetch-depth: 2 # Need previous commit for comparison
🧰 Tools
🪛 YAMLlint (1.37.1)

[warning] 24-24: too few spaces before comment: expected 2

(comments)

🤖 Prompt for AI Agents
.github/workflows/claude-docs-trigger.yml around line 24: the inline comment
after the fetch-depth value has only one space before the '#' which fails the
YAML lint rule requiring two spaces; update the line to have two spaces between
the value and the '#' (i.e., add one more space before the inline comment) and
ensure spacing style matches other inline comments in the file.

Comment on lines +52 to +57
gh workflow run claude-docs-updater.yml \
--ref next \
-f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
-f commit_message=${{ steps.changed-files.outputs.commit_message }} \
-f changed_files=${{ steps.changed-files.outputs.changed_files }} \
-f commit_diff=${{ steps.changed-files.outputs.commit_diff }} No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Quote -f values when invoking gh; unquoted JSON strings will break the command.

The outputs contain spaces/newlines and quotes. Wrap each value.

-          gh workflow run claude-docs-updater.yml \
-            --ref next \
-            -f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
-            -f commit_message=${{ steps.changed-files.outputs.commit_message }} \
-            -f changed_files=${{ steps.changed-files.outputs.changed_files }} \
-            -f commit_diff=${{ steps.changed-files.outputs.commit_diff }}
+          gh workflow run claude-docs-updater.yml \
+            --ref next \
+            -f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
+            -f commit_message="${{ steps.changed-files.outputs.commit_message }}" \
+            -f changed_files="${{ steps.changed-files.outputs.changed_files }}" \
+            -f commit_diff="${{ steps.changed-files.outputs.commit_diff }}"
📝 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
gh workflow run claude-docs-updater.yml \
--ref next \
-f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
-f commit_message=${{ steps.changed-files.outputs.commit_message }} \
-f changed_files=${{ steps.changed-files.outputs.changed_files }} \
-f commit_diff=${{ steps.changed-files.outputs.commit_diff }}
gh workflow run claude-docs-updater.yml \
--ref next \
-f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
-f commit_message="${{ steps.changed-files.outputs.commit_message }}" \
-f changed_files="${{ steps.changed-files.outputs.changed_files }}" \
-f commit_diff="${{ steps.changed-files.outputs.commit_diff }}"
🧰 Tools
🪛 YAMLlint (1.37.1)

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

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

🤖 Prompt for AI Agents
.github/workflows/claude-docs-trigger.yml around lines 52 to 57: the gh workflow
run invocation passes -f values unquoted which breaks when outputs contain
spaces, newlines or quotes; update the command to wrap each -f value in double
quotes (e.g. -f commit_sha="${{ steps.changed-files.outputs.commit_sha }}",
etc.) so each parameter is passed as a single quoted string and preserves
embedded whitespace/quotes.

-f commit_sha="${{ steps.changed-files.outputs.commit_sha }}" \
-f commit_message=${{ steps.changed-files.outputs.commit_message }} \
-f changed_files=${{ steps.changed-files.outputs.changed_files }} \
-f commit_diff=${{ steps.changed-files.outputs.commit_diff }} No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Add trailing newline at EOF.

🧰 Tools
🪛 YAMLlint (1.37.1)

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

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

🤖 Prompt for AI Agents
.github/workflows/claude-docs-trigger.yml around line 57: the file is missing a
trailing newline at EOF; open the file and add a single newline character at the
end of the file (ensure the last line ends with '\n' and avoid adding extra
blank lines or trailing whitespace), then save and commit the change.

git diff HEAD^ HEAD --stat >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
ref: next
fetch-depth: 0 # Need full history to checkout specific commit

Copy link
Copy Markdown
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: ensure two spaces before inline comment.

-          fetch-depth: 0 # Need full history to checkout specific commit
+          fetch-depth: 0  # Need full history to checkout specific commit
📝 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
fetch-depth: 0 # Need full history to checkout specific commit
fetch-depth: 0 # Need full history to checkout specific commit
🧰 Tools
🪛 YAMLlint (1.37.1)

[warning] 35-35: too few spaces before comment: expected 2

(comments)

🤖 Prompt for AI Agents
.github/workflows/claude-docs-updater.yml around line 35: the inline comment on
the fetch-depth line uses a single space before the '#' which fails YAML
linting; update the line so there are exactly two spaces before the inline
comment (e.g., replace the single space with two spaces between the value and
the '#' ), preserving existing indentation and content.

Comment on lines +63 to 69
- Commit: ${{ inputs.commit_message }}
- Changed files:
${{ steps.changed-files.outputs.changed_files }}
${{ inputs.changed_files }}

- Changes summary:
${{ steps.changed-files.outputs.commit_diff }}
${{ inputs.commit_diff }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Decode JSON-escaped inputs to avoid escaped quotes/newlines in prompts and PR body.

commit_message, changed_files, and commit_diff are JSON-encoded upstream; rendering them directly will show quotes and \n escapes. Use fromJSON(...) at consumption sites.

-            - Commit: ${{ inputs.commit_message }}
+            - Commit: ${{ fromJSON(inputs.commit_message) }}
-            - Changed files:
-            ${{ inputs.changed_files }}
+            - Changed files:
+            ${{ fromJSON(inputs.changed_files) }}
-            - Changes summary:
-            ${{ inputs.commit_diff }}
+            - Changes summary:
+            ${{ fromJSON(inputs.commit_diff) }}
@@
-            **Commit:** ${{ inputs.commit_sha }}
-            **Message:** ${{ inputs.commit_message }}
+            **Commit:** ${{ inputs.commit_sha }}
+            **Message:** ${{ fromJSON(inputs.commit_message) }}
@@
-            ```
-            ${{ inputs.changed_files }}
-            ```
+            ```
+            ${{ fromJSON(inputs.changed_files) }}
+            ```

Also applies to: 125-131

🤖 Prompt for AI Agents
.github/workflows/claude-docs-updater.yml around lines 63-69 (and similarly
125-131): the workflow is inserting JSON-encoded inputs directly which leaves
escaped quotes and \n in the rendered prompts/PR body; decode the JSON-escaped
inputs at consumption by replacing direct references with fromJSON(...) so use
fromJSON(inputs.commit_message), fromJSON(inputs.changed_files), and
fromJSON(inputs.commit_diff) where they are rendered (and ensure they are placed
inside the appropriate markdown/code blocks or multi-line YAML values so
newlines render correctly).

**Message:** ${{ steps.changed-files.outputs.commit_message }}
**Commit:** ${{ inputs.commit_sha }}
**Message:** ${{ inputs.commit_message }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick (assertive)

Remove trailing whitespace at Line 127.

🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 127-127: trailing spaces

(trailing-spaces)

🤖 Prompt for AI Agents
In .github/workflows/claude-docs-updater.yml around line 127, there is trailing
whitespace; remove the trailing space(s) at the end of that line so the line
ends cleanly (and optionally trim any other trailing whitespace in the file or
run your editor's "trim trailing whitespace" action) then save the file.

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