Research-mind examples-bad-interdependent-skill
⚠️ BAD EXAMPLE - Interdependent Skill (Anti-Pattern)
git clone https://github.com/MacPhobos/research-mind
T=$(mktemp -d) && git clone --depth=1 https://github.com/MacPhobos/research-mind "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/examples-bad-interdependent-skill" ~/.claude/skills/macphobos-research-mind-examples-bad-interdependent-skill && rm -rf "$T"
.claude/skills/examples-bad-interdependent-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 | | 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 | | Runtime dependency |
| Hierarchical Assumptions | "Navigate to parent dir" | Location-dependent |
| Incomplete Examples | Code fragments only | Not usable |
| References Cross-Skill | has | Progressive disclosure broken |
| Metadata Dependencies | | 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:
- good-self-contained-skill: Correct template
- SKILL_SELF_CONTAINMENT_STANDARD.md: Complete standard
Remember: This example shows what NOT to do. Always ensure your skills are self-contained!