Skip to content
Back to skills

Conflict Detection

ASecurity

Use before creating new stories or when user asks "check for conflicts", "find duplicates", "review story overlaps", or "detect story conflicts" - scans story-tree database to identify duplicate stories, scope overlaps, and competing approaches using lightweight text similarity (no external dependencies).

  • 666 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added February 8, 2026
developmentpythongobashsqlnodeapidatabaseperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill conflict-detection --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Conflict Detection?

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

Security grade badge for Conflict Detection
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-conflict-detection/badge)](https://www.skillsdirectory.com/skills/majiayu000-conflict-detection)

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: conflict-detection
description: Use before creating new stories or when user asks "check for conflicts", "find duplicates", "review story overlaps", or "detect story conflicts" - scans story-tree database to identify duplicate stories, scope overlaps, and competing approaches using lightweight text similarity (no external dependencies).
---

# Conflict Detection

Detect duplicate and overlapping stories in the story-tree database.

**Database:** `.claude/data/story-tree.db`

**Critical:** Use Python sqlite3 module, NOT sqlite3 CLI.

## When to Run

1. **Before generating new stories** - prevent creating duplicates
2. **On user request** - audit existing stories for conflicts
3. **Periodically in CI** - catch conflicts early

## Conflict Types

| Type | Description | Confidence |
|------|-------------|------------|
| `duplicate` | Same story, different words | High (65%+ title sim) |
| `scope_overlap` | One subsumes or partially covers another | Medium (60%+ keyword containment) |
| `competing` | Same problem, incompatible approaches | Medium (40%+ want sim, low benefit) |

## Quick Scan

Run the detection script:

```python
python -c "
import subprocess, sys
result = subprocess.run([sys.executable, '.claude/skills/conflict-detection/scripts/detect_conflicts.py'],
                       capture_output=True, text=True)
print(result.stdout)
if result.returncode > 0:
    print(f'Exit code {result.returncode} = {result.returncode} conflicts found')
"
```

## Usage Options

```bash
# Default scan (50% confidence threshold)
python .claude/skills/conflict-detection/scripts/detect_conflicts.py

# JSON output for programmatic use
python .claude/skills/conflict-detection/scripts/detect_conflicts.py --format json

# Lower threshold for more matches
python .claude/skills/conflict-detection/scripts/detect_conflicts.py --min-confidence 0.4

# Custom database path
python .claude/skills/conflict-detection/scripts/detect_conflicts.py --db path/to/story-tree.db
```

## Output Format

**Text (default):**
```
Found N potential conflict(s):

## Conflict 1: DUPLICATE (confidence: 94%)
**Story A**: `1.3.5` - Matter/Client Database Management
**Story B**: `1.8.1` - Matter/Client Database
**Reason**: Near-identical titles: title=85%
```

**JSON:**
```json
[{
  "story_a_id": "1.3.5",
  "story_b_id": "1.8.1",
  "conflict_type": "duplicate",
  "confidence": 0.94,
  "reason": "Near-identical titles: title=85%",
  "want_similarity": 0.45,
  "benefit_similarity": 0.32,
  "title_similarity": 0.85
}]
```

## Handling Conflicts

After detection, resolve conflicts by:

1. **Duplicates**: Merge stories or reject one
2. **Scope overlap**: Clarify boundaries or make one a child of the other
3. **Competing**: Choose an approach and document decision

Update story status to `rejected` for discarded stories with a note explaining the decision.

## Integration with Story Writing

Before generating stories for a node, check for conflicts:

```python
python -c "
import subprocess, sys, json
result = subprocess.run([sys.executable, '.claude/skills/conflict-detection/scripts/detect_conflicts.py',
                        '--format', 'json'], capture_output=True, text=True)
conflicts = json.loads(result.stdout) if result.stdout.strip().startswith('[') else []
if conflicts:
    print(f'WARNING: {len(conflicts)} existing conflicts - resolve before adding stories')
    for c in conflicts[:3]:
        print(f'  - {c[\"conflict_type\"]}: {c[\"story_a_id\"]} vs {c[\"story_b_id\"]}')
else:
    print('No conflicts detected - safe to proceed')
"
```

## Algorithm

1. Load active stories (skip rejected/archived)
2. Extract components: title, want, benefit, acceptance criteria
3. Normalize tokens using domain-specific synonym groups
4. Compare all pairs using:
   - Jaccard + containment similarity on normalized tokens
   - Acceptance criteria comparison (high signal)
   - Keyword containment ratio
5. Classify conflicts based on multi-signal scoring
6. Return sorted by confidence

**Constraints:**
- Python stdlib only (no numpy, sklearn, sentence-transformers)
- Runs in CI without external API calls
- O(n^2) comparison - fast for <500 stories

## Performance Characteristics

Tested against ground truth test cases:

| Category | Detection Rate | Notes |
|----------|---------------|-------|
| Duplicates | 100% (3/3) | High accuracy on title/criteria overlap |
| Scope Overlaps | 40% (2/5) | Limited by lexical similarity |
| False Positives | 0% | No false positives on negative cases |

**Known Limitation:** Stories using very different vocabulary to describe the same functionality may not be detected. This is inherent to lexical similarity without semantic embeddings.

**Tuning:** Lower `--min-confidence` to 0.40 for higher recall (more false positives).

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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.