Skip to content
Back to skills

Ll Normalize Issues

ASecurity

Find and fix issue filenames with missing or duplicate IDs across types (e.g., BUG-007 and FEAT-007)

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentsgobashgitapiperformancedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add BrennonTWilliams/little-loops --skill ll-normalize-issues --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ll Normalize Issues?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ll Normalize Issues
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/brennontwilliams-ll-normalize-issues/badge)](https://www.skillsdirectory.com/skills/brennontwilliams-ll-normalize-issues)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ll-normalize-issues
description: Find and fix issue filenames with missing or duplicate IDs across types (e.g., BUG-007 and FEAT-007)
allowed-tools:
  - Read
  - Glob
  - Edit
  - Bash(git:*, ll-issues:*)
arguments:
  - name: issue_id
    description: "Optional issue ID to scope reported/applied findings (duplicate detection stays corpus-wide)"
    required: false
  - name: flags
    description: "Optional flags: --auto (non-interactive), --check (check-only for FSM evaluators), --strict"
    required: false
---

# Normalize Issues

Filename/ID mechanics (missing IDs, cross-type duplicate IDs, legacy status
directories) are handled deterministically by `ll-issues normalize`. This
command wraps that CLI and keeps only the two judgment calls it deliberately
leaves to an LLM: type-misclassification review, and matching issues to
relevant project documents.

## Process

### 1. Run the Deterministic Scan

```bash
ll-issues normalize {{issue_id}} {{flags}}
```

This detects and reports (and, with `--auto`, fixes) five finding kinds:

| Kind | Auto-fixed by `--auto`? | Gates `--check` (non-strict)? |
|------|--------------------------|--------------------------------|
| `missing_id` | yes | yes |
| `malformed_filename` | yes | yes |
| `duplicate_id` | yes | yes |
| `legacy_dir` | no — run `ll-migrate` | only under `--strict` |
| `type_mismatch` | never — semantic judgment (Step 2 below) | only under `--strict` |

`--check` is the deterministic FSM exit-code gate (0 clean / 1 violations,
covering the three auto-fixable classes only unless `--strict` is passed).
`--auto` applies `git mv` renames, syncs frontmatter `id:`, and repoints any
inbound `blocked_by`/`depends_on`/`parent`/`epic`/`relates_to`/`supersedes`
edge that named a reassigned ID. In `--auto` mode, apply reclassifications
without further prompting; otherwise present the CLI's report and confirm
before re-running with `--auto`.

### 2. Review Type Misclassifications (LLM Judgment)

`ll-issues normalize` reports `type_mismatch` findings but never applies
them — this is the one class of finding that needs judgment, not just a
keyword count. For each `type_mismatch` in the report:

**Heuristics** — the CLI counts these signal keywords in Summary,
Motivation/Current Behavior, and Root Cause sections for each candidate type.
`type_mismatch` findings are only reported for `open`/`in_progress`/`blocked`
issues — `done`/`cancelled`/`deferred` issues are excluded since reclassifying
closed work has no actionable follow-up (ENH-3053):

| Signal keywords | Suggests type |
|-----------------|---------------|
| "broken", "regression", "error", "crash", "fails", "wrong behavior", "should not", "defect", "incorrect", "unexpected" | BUG |
| "new capability", "users can't currently", "add support for", "implement", "missing feature", "not yet possible" | FEAT |
| "improve", "optimize", "enhance", "refactor", "better UX", "reduce", "increase performance", "simplify" | ENH |
| "decompose into", "umbrella", "rollup of", "multi-issue initiative", "coordination container", "should be an epic", "milestone" | EPIC |

1. Read the flagged issue file to confirm (or override) the CLI's inferred type
2. If confirmed, reclassify manually: `git mv` the file into the target
   category directory (`bugs/` → BUG, `features/` → FEAT, `enhancements/` →
   ENH, `epics/` → EPIC) with the new type prefix, then re-run
   `ll-issues normalize --auto` so `id:`/inbound edges stay in sync
3. If the CLI's signal count is a false positive (ambiguous or ENH-vs-BUG
   phrasing), leave the file as-is

### 3. Add Missing Document References (if `documents.enabled`)

**Skip this step if** `documents.enabled` is not `true` in `.ll/ll-config.json`,
or no documents are configured.

For each issue file missing a `## Related Key Documentation` section, or
carrying only placeholder text (`_No documents linked`, `_No relevant
documents identified`):

1. Load documents from `{{config.documents.categories}}`
2. Read each document and extract key concepts
3. Match against the issue's content; select the top 3 matches
4. Add or update the `## Related Key Documentation` section (insert before
   `## Labels` or the final `---` footer if the section is missing; replace
   the placeholder line if it exists)
5. Note additions in your summary:

```markdown
## Document References Added

| Issue | Documents Linked |
|-------|------------------|
| BUG-071 | docs/ARCHITECTURE.md, docs/API.md |
```

## Arguments

$ARGUMENTS

- **issue_id** (optional): Scope reported/applied findings to this issue;
  duplicate-ID detection and next-ID allocation always run corpus-wide
- **flags** (optional):
  - `--auto` — apply all auto-fixable findings without prompting
  - `--check` — FSM-gate mode: exit 0 clean / 1 violations, no fixes applied
  - `--strict` — widen `--check` to also gate on `legacy_dir`/`type_mismatch`

## Examples

```bash
/ll:normalize-issues                  # report all findings
/ll:normalize-issues --check          # FSM check-only gate
/ll:normalize-issues --auto           # apply all auto-fixable findings
/ll:normalize-issues ENH-2944 --auto  # scope to one issue
```

Pairs with `/ll:scan-codebase` (fix non-standard filenames after scanning),
`/ll:verify-issues` (validate content post-normalize), and
`/ll:prioritize-issues` (normalizes IDs before priorities are assigned).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…