NYC

bad-example-skill

SKILL.md

⚠️ BAD EXAMPLE - Interdependent Skill (Anti-Pattern)

WARNING: This is an ANTI-PATTERN example showing what NOT to do.

DO NOT COPY THIS STRUCTURE. See good-self-contained-skill for correct approach.


❌ VIOLATION #1: Relative Path Dependencies

## Related Documentation

For setup instructions, see [../setup-skill/SKILL.md](../setup-skill/SKILL.md)

For testing patterns, see:
- [../../testing/pytest-patterns/](../../testing/pytest-patterns/)
- [../../testing/test-utils/](../../testing/test-utils/)

Database integration: [../../data/database-skill/](../../data/database-skill/)

Why This is Wrong:

  • ❌ Uses relative paths (../, ../../)
  • ❌ Assumes hierarchical directory structure
  • ❌ Breaks in flat deployment (~/.claude/skills/)
  • ❌ Links break when skill deployed standalone

Correct Approach:

## Complementary Skills

Consider these related skills (if deployed):

- **setup-skill**: Installation and configuration patterns
- **pytest-patterns**: Testing framework and fixtures
- **database-skill**: Database integration patterns

*Note: All skills are independently deployable.*

❌ VIOLATION #2: Missing Essential Content

## Testing

This skill uses pytest for testing.

**See pytest-patterns skill for all testing code.**

To write tests for this framework, install pytest-patterns skill
and refer to its documentation.

Why This is Wrong:

  • ❌ No actual testing patterns included
  • ❌ Requires user to have another skill
  • ❌ Skill is incomplete without other skills
  • ❌ "See other skill" instead of inlining

Correct Approach:

## Testing (Self-Contained)

**Essential pytest pattern** (inlined):

```python
import pytest
from example_framework.testing import TestClient

@pytest.fixture
def client():
    """Test client fixture."""
    return TestClient(app)

def test_home_route(client):
    """Test homepage."""
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"message": "Hello"}

Advanced fixtures (if pytest-patterns skill deployed):

  • Parametrized fixtures
  • Database session fixtures
  • Mock fixtures

See pytest-patterns skill for comprehensive patterns.


---

## ❌ VIOLATION #3: Hard Skill Dependencies

```markdown
## Prerequisites

**Required Skills**:
1. **setup-skill** - Must be installed first
2. **database-skill** - Required for database operations
3. **pytest-patterns** - Required for testing

Install all required skills before using this skill:
```bash
claude-code skills add setup-skill database-skill pytest-patterns

This skill will not work without these dependencies.


**Why This is Wrong**:
- ❌ Lists other skills as "Required"
- ❌ Skill doesn't work standalone
- ❌ Creates deployment coupling
- ❌ Violates self-containment principle

**Correct Approach**:
```markdown
## Prerequisites

**External Dependencies**:
```bash
pip install example-framework pytest sqlalchemy

Complementary Skills

When using this skill, consider (if deployed):

  • setup-skill: Advanced configuration patterns (optional)
  • database-skill: ORM patterns and optimization (optional)
  • pytest-patterns: Testing enhancements (optional)

This skill is fully functional independently.


---

## ❌ VIOLATION #4: Cross-Skill Imports

```python
"""
Bad example - importing from other skills.
"""

# ❌ DON'T DO THIS
from skills.database_skill import get_db_session
from skills.pytest_patterns import fixture_factory
from ..shared.utils import validate_input

# Using imported patterns
@app.route("/users")
def create_user(data):
    # Requires database-skill to be installed
    with get_db_session() as session:
        user = User(**data)
        session.add(user)
        return user.to_dict()

Why This is Wrong:

  • ❌ Imports from other skills
  • ❌ Code won't run without other skills
  • ❌ Creates runtime dependencies
  • ❌ Violates Python module boundaries

Correct Approach:

"""
Good example - self-contained implementation.
"""
from contextlib import contextmanager

# ✅ Include pattern directly in this skill
@contextmanager
def get_db_session():
    """Database session context manager (self-contained)."""
    db = SessionLocal()
    try:
        yield db
        db.commit()
    except Exception:
        db.rollback()
        raise
    finally:
        db.close()

@app.route("/users")
def create_user(data):
    # Works independently
    with get_db_session() as session:
        user = User(**data)
        session.add(user)
        return user.to_dict()

❌ VIOLATION #5: Hierarchical Directory Assumptions

## Project Structure

This skill is located in:

toolchains/python/frameworks/bad-example-skill/


**Navigate to parent directories for related skills**:
- `../` - Other framework skills
- `../../testing/` - Testing skills
- `../../data/` - Database skills

**All skills in `toolchains/python/frameworks/` are related to this skill.**

Why This is Wrong:

  • ❌ Assumes specific directory structure
  • ❌ Navigation instructions using relative paths
  • ❌ Won't work in flat deployment
  • ❌ Confuses deployment location with skill relationships

Correct Approach:

## Related Skills

**Complementary Python Framework Skills** (informational):

- **fastapi-patterns**: Web framework patterns
- **django-patterns**: Full-stack framework patterns
- **flask-patterns**: Micro-framework patterns

**Testing Skills**:
- **pytest-patterns**: Testing framework
- **test-driven-development**: TDD workflow

*Note: Skills are independently deployable. Directory structure may vary.*

❌ VIOLATION #6: Incomplete Examples

# Database setup
# (See database-skill for complete implementation)

class User(db.Model):
    # ... see database-skill for model definition ...
    pass

# Testing
# (See pytest-patterns for test examples)

def test_user():
    # ... see pytest-patterns for fixtures ...
    pass

# Deployment
# (See deployment-skill for production setup)

Why This is Wrong:

  • ❌ Examples are fragments, not complete code
  • ❌ "See other skill" instead of showing code
  • ❌ Users can't copy-paste and run
  • ❌ Skill provides no actual implementation guidance

Correct Approach:

# Complete database model (self-contained)
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    """User model - complete implementation."""
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    username = Column(String(80), unique=True, nullable=False)
    email = Column(String(120), unique=True, nullable=False)

    def to_dict(self):
        return {
            "id": self.id,
            "username": self.username,
            "email": self.email
        }

# Complete test example (self-contained)
import pytest
from example_framework.testing import TestClient

@pytest.fixture
def client():
    return TestClient(app)

def test_create_user(client):
    """Test user creation - complete working test."""
    response = client.post("/users", json={
        "username": "testuser",
        "email": "test@example.com"
    })
    assert response.status_code == 201
    assert response.json()["username"] == "testuser"

# Complete deployment example (self-contained)
import os

class ProductionConfig:
    DEBUG = False
    SECRET_KEY = os.getenv("SECRET_KEY")
    DATABASE_URL = os.getenv("DATABASE_URL")

app = App(config=ProductionConfig())

# Run with: gunicorn -w 4 app:app

❌ VIOLATION #7: References Directory with Cross-Skill Paths

bad-example-skill/
├── SKILL.md
├── metadata.json
└── references/
    ├── testing.md          # Contains: ../../pytest-patterns/
    ├── database.md         # Contains: ../../database-skill/
    └── deployment.md       # Contains: ../../../universal/deployment/

references/testing.md contains:

# Testing Patterns

For complete testing patterns, see:
- [Pytest Patterns](../../pytest-patterns/SKILL.md)
- [TDD Workflow](../../../universal/testing/test-driven-development/)

Refer to those skills for all testing code.

Why This is Wrong:

  • ❌ References directory has cross-skill paths
  • ❌ Progressive disclosure leads outside skill
  • ❌ Breaks in flat deployment
  • ❌ References aren't self-contained

Correct Approach:

good-example-skill/
├── SKILL.md
├── metadata.json
└── references/
    ├── advanced-patterns.md    # All about THIS skill
    ├── api-reference.md        # THIS skill's API
    └── examples.md             # THIS skill's examples

references/advanced-patterns.md should contain:

# Advanced Testing Patterns

**Advanced pytest fixtures** (this skill):

```python
# Parametrized test fixture
@pytest.fixture(params=["value1", "value2"])
def data_variants(request):
    return request.param

def test_with_variants(data_variants):
    # Test with multiple data variants
    assert process(data_variants) is not None

Further enhancements (if pytest-patterns deployed):

  • Fixture factories
  • Custom markers
  • Plugin integration

See pytest-patterns skill for comprehensive advanced patterns.


---

## ❌ VIOLATION #8: metadata.json with Skill Dependencies

```json
{
  "name": "bad-example-skill",
  "version": "1.0.0",
  "requires": [
    "setup-skill",
    "database-skill",
    "pytest-patterns"
  ],
  "self_contained": false,
  "dependencies": ["example-framework"],
  "notes": [
    "This skill requires setup-skill to be installed first",
    "Must deploy with database-skill for database operations",
    "Won't work without pytest-patterns for testing"
  ]
}

Why This is Wrong:

  • ❌ Lists other skills in "requires" field
  • "self_contained": false
  • ❌ Notes say skill won't work without others
  • ❌ Creates deployment coupling

Correct Approach:

{
  "name": "good-example-skill",
  "version": "1.0.0",
  "requires": [],
  "self_contained": true,
  "dependencies": ["example-framework", "pytest", "sqlalchemy"],
  "complementary_skills": [
    "setup-skill",
    "database-skill",
    "pytest-patterns"
  ],
  "notes": [
    "This skill is fully self-contained and works independently",
    "All essential patterns are inlined",
    "Complementary skills provide optional enhancements"
  ]
}

Summary of Violations

Violation Example Impact
Relative Paths ../../other-skill/ Breaks in flat deployment
Missing Content "See other skill for X" Incomplete, not self-sufficient
Hard Dependencies "Requires other-skill" Can't deploy standalone
Cross-Skill Imports from skills.other import Runtime dependency
Hierarchical Assumptions "Navigate to parent dir" Location-dependent
Incomplete Examples Code fragments only Not usable
References Cross-Skill references/ has ../ Progressive disclosure broken
Metadata Dependencies "requires": ["skill"] Deployment coupling

How to Fix These Violations

Step 1: Remove All Relative Paths

# Find violations
grep -r "\.\\./" bad-example-skill/

# Remove them - use skill names instead
# ❌ [skill](../../skill/SKILL.md)
# ✅ skill (if deployed)

Step 2: Inline Essential Content

# Before (wrong):
## Testing
See pytest-patterns skill for all testing code.

# After (correct):
## Testing (Self-Contained)

**Essential pattern** (inlined):
[20-50 lines of actual testing code]

**Advanced patterns** (if pytest-patterns deployed):
- Feature list

*See pytest-patterns for comprehensive guide.*

Step 3: Remove Hard Dependencies

# Before (wrong):
**Required Skills**: pytest-patterns, database-skill

# After (correct):
**Complementary Skills** (optional):
- pytest-patterns: Testing enhancements
- database-skill: ORM optimization

Step 4: Make Imports Self-Contained

# Before (wrong):
from skills.database import get_db_session

# After (correct):
@contextmanager
def get_db_session():
    """Inlined pattern."""
    # Implementation here

Step 5: Update metadata.json

// Before (wrong):
{
  "requires": ["other-skill"],
  "self_contained": false
}

// After (correct):
{
  "requires": [],
  "self_contained": true,
  "complementary_skills": ["other-skill"]
}

Verification

After fixing, verify self-containment:

# Should return empty (no violations)
grep -r "\.\\./" skill-name/
grep -r "from skills\." skill-name/
grep -i "requires.*skill" skill-name/SKILL.md

# Isolation test
cp -r skill-name /tmp/skill-test/
cd /tmp/skill-test/skill-name
cat SKILL.md  # Should be complete and useful

# Metadata check
cat metadata.json | jq '.requires'  # Should be [] or external packages only

See Good Example Instead

DO NOT USE THIS EXAMPLE AS A TEMPLATE

Instead, see:


Remember: This example shows what NOT to do. Always ensure your skills are self-contained!

Weekly Installs
37
First Seen
Jan 23, 2026
Installed on
claude-code31
opencode23
gemini-cli22
codex22
antigravity21
github-copilot20