Skip to main content

skill-fix-it

Scan codebase for FIX:/NOTE:/TODO:/QUESTION: tags and create structured tasks with interactive selection. Invoke for /fix-it command.

Ir a la instalación

Datos de origen

Repositorio
benbrastmckie/nvim
Última actividad en el origen
25 de agosto de 2026 a las 00:52
Idioma detectado de SKILL.md
inglés
Estrellas
444
Forks
459

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
skill-fix-it
description
Scan codebase for FIX:/NOTE:/TODO:/QUESTION: tags and create structured tasks with interactive selection. Invoke for /fix-it command.
# Fix-It Skill (Direct Execution) Direct execution skill for scanning files, presenting findings interactively, and creating user-selected tasks. Replaces the previous delegation-based approach with synchronous execution and AskUserQuestion prompts. **Key behavior**: Users always see tag scan results BEFORE any tasks are created. Users select which task types to create via interactive prompts. ## Context References Reference (do not load eagerly): - Path: `@specs/TODO.md` - Current task list - Path: `@specs/state.json` - Machine state --- ## Execution ### Step 1: Parse Arguments Extract paths from command input: ```bash # Parse from command input paths="$ARGUMENTS" # Default to project root if no paths specified if [ -z "$paths" ]; then paths="." fi ``` **Note**: The `--dry-run` flag is no longer supported. The interactive flow is inherently "preview first" - users always see findings before any tasks are created. ### Step 2: Generate Session ID Generate session ID for tracking: ```bash source .claude/scripts/lib/common.sh session_id="$(common_session_id)" ``` ### Step 3: Execute Tag Extraction Scan for all four tag types (FIX:, NOTE:, TODO:, QUESTION:) using file-type-specific comment patterns: | File Type | Comment Prefix | Includes | |-----------|---------------|----------| | Lua | `--` | `*.lua` | | LaTeX | `%` | `*.tex` | | Markdown | `<!--` | `*.md` | | Script | `#` | `*.py`, `*.sh`, `*.yaml`, `*.yml` | For each tag type, grep across all file types with `-rn` and collect matches. Parse each match into: file path, line number, tag type, tag content. Categorize into arrays: `fix_tags[]`, `note_tags[]`, `todo_tags[]`, `question_tags[]`. ### Step 4: Display Tag Summary Present findings to user BEFORE any selection: ``` ## Tag Scan Results **Files Scanned**: {paths} **Tags Found**: {total_count} ### FIX: Tags ({count}) - `{file}:{line}` - {content} - ... ### NOTE: Tags ({count}) - `{file}:{line}` - {content} - ... ### TODO: Tags ({count}) - `{file}:{line}` - {content} - ... ### QUESTION: Tags ({count}) - `{file}:{line}` - {content} - ... ``` ### Step 5: Handle Edge Cases #### No Tags Found If no tags found: ``` ## No Tags Found Scanned files in: {paths} No FIX:, NOTE:, TODO:, or QUESTION: tags detected. Nothing to create. ``` Exit gracefully without prompts. #### Only Certain Tag Types Only show task type options for tag types that exist: - FIX: tags exist -> offer "fix-it task" - NOTE: tags exist -> offer "fix-it task" AND "learn-it task" - TODO: tags exist -> offer "TODO tasks" - QUESTION: tags exist -> offer "Research tasks" ### Step 6: Task Type Selection If tags were found, prompt user to select task types: ```json { "question": "Which task types should be created?", "header": "Task Types", "multiSelect": true, "options": [ { "label": "fix-it task", "description": "Combine {N} FIX:/NOTE: tags into single task" }, { "label": "learn-it task", "description": "Update context from {N} NOTE: tags" }, { "label": "TODO tasks", "description": "Create tasks for {N} TODO: items" }, { "label": "Research tasks", "description": "Create research tasks for {N} QUESTION: items" } ] } ``` **Important**: Only include options where the tag type exists: - Include "fix-it task" only if FIX: or NOTE: tags exist - Include "learn-it task" only if NOTE: tags exist - Include "TODO tasks" only if TODO: tags exist - Include "Research tasks" only if QUESTION: tags exist If user selects nothing, exit gracefully: ``` No task types selected. No tasks created. ``` ### Step 7: Individual TODO Selection If "TODO tasks" was selected AND there are TODO: tags: #### Standard Case (<=20 TODOs) ```json { "question": "Select TODO items to create as tasks:", "header": "TODO Selection", "multiSelect": true, "options": [ { "label": "{content truncated to 50 chars}", "description": "{file}:{line}" }, ... ] } ``` #### Large Number of TODOs (>20) Add a "Select all" option at the top: ```json { "question": "Select TODO items to create as tasks:", "header": "TODO Selection (many items)", "multiSelect": true, "options": [ { "label": "Select all ({N} items)", "description": "Create a task for every TODO tag" }, { "label": "{content truncated to 50 chars}", "description": "{file}:{line}" }, ... ] } ``` If "Select all" is chosen, include all TODOs. Otherwise, only selected items. ### Step 7.5: Topic Grouping (Shared Algorithm) This grouping algorithm applies to both TODO items (Step 7.5) and QUESTION items (Step 7.7). Skip if only 1 item selected. **Topic Indicator Extraction** per item: - **Key Terms**: Significant words (nouns, verbs), ignoring stop words - **File Section**: Group by file path prefix - **Action Type**: Inferred from content (Add/Create -> implementation, Fix -> fix, Document -> docs, Test -> testing, Refactor -> improvement). For QUESTION items, action_type is always "research". **Clustering Algorithm**: 1. Start with first item as initial group 2. For each remaining item: add to existing group if shares 2+ key terms OR shares file_section + action_type; otherwise start new group 3. Generate topic label from most common shared terms 4. Single-item groups are kept as-is **Store result**: `topic_groups[]` with `{label, items[], shared_terms[], action_type}` ### Step 7.5.4: Topic Group Confirmation **Condition**: At least one group has 2+ items (otherwise skip -- no grouping benefit). Present via AskUserQuestion (multiSelect: false): - "Accept suggested topic groups" -- Creates {N} grouped tasks - "Keep as separate tasks" -- Creates {M} individual tasks - "Create single combined task" -- Creates 1 task with all items **Store**: `grouping_mode = "grouped" | "separate" | "combined"` ### Step 7.6: Individual QUESTION Selection **Condition**: User selected "Research tasks" in Step 6 AND QUESTION: tags exist. Same pattern as Step 7 (TODO selection): AskUserQuestion with multiSelect, "Select all" option when >20 items. ### Step 7.7: Topic Grouping for QUESTION Items **Condition**: Selected more than 1 QUESTION item. Apply the **same algorithm as Step 7.5** with these differences: - action_type is always "research" - Store result in `question_topic_groups[]` - Confirmation prompt uses "research tasks" wording **Store**: `question_grouping_mode = "grouped" | "separate" | "combined"` ### Step 8: Create Selected Tasks For each selected task type, create the task. **Important**: When NOTE: tags exist and both fix-it and learn-it tasks are selected, create learn-it FIRST so fix-it can depend on it. #### 8.1: Get Next Task Number ```bash next_num=$(jq -r '.next_project_number' specs/state.json) ``` #### 8.2: Dependency-Aware Task Creation Order **Check for NOTE: dependency condition**: ``` has_note_dependency = (NOTE: tags exist) AND (user selected both "fix-it task" AND "learn-it task") ``` **If has_note_dependency is TRUE**: - Create learn-it task FIRST (Step 8.2a) - Store learn-it task number as `learn_it_task_num` - Create fix-it task SECOND with dependency (Step 8.2b) **If has_note_dependency is FALSE**: - Create fix-it task first (if selected) - Create learn-it task second (if selected) - No dependency relationship #### 8.2a: Learn-It Task (when created first for dependency) **Condition**: has_note_dependency is TRUE ```json { "title": "Update context files from NOTE: tags", "description": "Update {N} context files based on learnings:\n\n{grouped by target context}", "task_type": "meta", "effort": "1-2 hours" } ``` Store the task number: `learn_it_task_num = next_num` Increment: `next_num = next_num + 1` #### 8.2b: Fix-It Task (with dependency when has_note_dependency) **Condition**: User selected "fix-it task" AND (FIX: or NOTE: tags exist) **When has_note_dependency is TRUE**: ```json { "title": "Fix issues from FIX:/NOTE: tags", "description": "Address {N} items from embedded tags:\n\n{list of items with file:line references}\n\n**Important**: When making changes, remove the FIX: and NOTE: tags from the source files. Leave TODO: tags untouched (they create separate tasks).", "task_type": "{predominant task_type from source files}", "effort": "2-4 hours", "dependencies": [learn_it_task_num] } ``` **When has_note_dependency is FALSE**: ```json { "title": "Fix issues from FIX:/NOTE: tags", "description": "Address {N} items from embedded tags:\n\n{list of items with file:line references}\n\n**Important**: When making changes, remove the FIX: and NOTE: tags from the source files. Leave TODO: tags untouched (they create separate tasks).", "task_type": "{predominant task_type from source files}", "effort": "2-4 hours" } ``` **Language Detection**: ``` if majority of tags from .lean files -> "lean" elif majority from .tex files -> "latex" elif majority from .claude/ files -> "meta" else -> "general" ``` #### 8.2c: File Footprint Overlap Check (Component 4a) In addition to the hardcoded NOTE-before-fix-it dependency rule above (8.2), run the shared Multi-Task Creation Standard Component 4a overlap check across `topic_groups[]` (each group already carries a `file_section` from Step 7.5's clustering): 1. **Derive `file_scope` per group**: union the `file:line` paths of every item in the group (dropping the `:line` suffix) into a `file_scope` array for that group's would-be task. 2. **Run the shared overlap algorithm** (`.claude/context/patterns/file-footprint-overlap.md`, referenced by path — not restated here) pairwise across all groups that will become separate tasks (grouped or separate mode; combined mode produces a single task, so no pairwise check applies). 3. **Auto-add a serializing dependency** for every overlapping pair with no existing edge (in addition to the fix-it/learn-it edge from 8.2), so two groups whose `file_scope` overlaps never land in the same task creation batch without a dependency between them. 4. **Never silent**: annotate any auto-added edge in the Step 9 task summary/confirmation with "(auto: file overlap)" per Component 7 of the Multi-Task Creation Standard. #### 8.3: Learn-It Task (when created without dependency) **Condition**: User selected "learn-it task" AND NOTE: tags exist AND has_note_dependency is FALSE ```json { "title": "Update context files from NOTE: tags", "description": "Update {N} context files based on learnings:\n\n{grouped by target context}", "task_type": "meta", "effort": "1-2 hours" } ``` #### 8.4: Todo-Tasks (if selected) **Condition**: User selected "TODO tasks" AND user selected specific TODO items **Check grouping_mode** (from Step 7.5.4, defaults to "separate" if Step 7.5.4 was skipped): ##### 8.4.1: Grouped Mode (grouping_mode == "grouped") For each topic group in `topic_groups`: ```json { "title": "{topic_label}: {item_count} TODO items", "description": "Address TODO items related to {topic_label}:\n\n{item_list}\n\n---\n\nShared context: {shared_terms_description}",
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub