[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DAET9G86KA3T901DDJJ1VC":3,"skill-same:01M6DAET9G86KA3T901DDJJ1VC":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":14,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6DAET9G86KA3T901DDJJ1VC","django-verification",null,"Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Flibrary\u002Fskills\u002Fdjango-verification\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"verification","django verification","django","security","pr","deployment","release","loop","verification loop","projects","coverage","migrations","tests","readiness","2026-11-10 10:12:30",false,"---\nname: django-verification\ndescription: \"Verification loop for Django projects: migrations, linting, tests with coverage, security scans, and deployment readiness checks before release or PR.\"\norigin: ECC\n---\n\n# Django Verification Loop\n\nRun before PRs, after major changes, and pre-deploy to ensure Django application quality and security.\n\n## When to Activate\n\n- Before opening a pull request for a Django project\n- After major model changes, migration updates, or dependency upgrades\n- Pre-deployment verification for staging or production\n- Running full environment → lint → test → security → deploy readiness pipeline\n- Validating migration safety and test coverage\n\n## Phase 1: Environment Check\n\n```bash\n# Verify Python version\npython --version  # Should match project requirements\n\n# Check virtual environment\nwhich python\npip list --outdated\n\n# Verify environment variables\npython -c \"import os; import environ; print('DJANGO_SECRET_KEY set' if os.environ.get('DJANGO_SECRET_KEY') else 'MISSING: DJANGO_SECRET_KEY')\"\n```\n\nIf environment is misconfigured, stop and fix.\n\n## Phase 2: Code Quality & Formatting\n\n```bash\n# Type checking\nmypy . --config-file pyproject.toml\n\n# Linting with ruff\nruff check . --fix\n\n# Formatting with black\nblack . --check\nblack .  # Auto-fix\n\n# Import sorting\nisort . --check-only\nisort .  # Auto-fix\n\n# Django-specific checks\npython manage.py check --deploy\n```\n\nCommon issues:\n- Missing type hints on public functions\n- PEP 8 formatting violations\n- Unsorted imports\n- Debug settings left in production configuration\n\n## Phase 3: Migrations\n\n```bash\n# Check for unapplied migrations\npython manage.py showmigrations\n\n# Create missing migrations\npython manage.py makemigrations --check\n\n# Dry-run migration application\npython manage.py migrate --plan\n\n# Apply migrations (test environment)\npython manage.py migrate\n\n# Check for migration conflicts\npython manage.py makemigrations --merge  # Only if conflicts exist\n```\n\nReport:\n- Number of pending migrations\n- Any migration conflicts\n- Model changes without migrations\n\n## Phase 4: Tests + Coverage\n\n```bash\n# Run all tests with pytest\npytest --cov=apps --cov-report=html --cov-report=term-missing --reuse-db\n\n# Run specific app tests\npytest apps\u002Fusers\u002Ftests\u002F\n\n# Run with markers\npytest -m \"not slow\"  # Skip slow tests\npytest -m integration  # Only integration tests\n\n# Coverage report\nopen htmlcov\u002Findex.html\n```\n\nReport:\n- Total tests: X passed, Y failed, Z skipped\n- Overall coverage: XX%\n- Per-app coverage breakdown\n\nCoverage targets:\n\n| Component | Target |\n|-----------|--------|\n| Models | 90%+ |\n| Serializers | 85%+ |\n| Views | 80%+ |\n| Services | 90%+ |\n| Overall | 80%+ |\n\n## Phase 5: Security Scan\n\n```bash\n# Dependency vulnerabilities\npip-audit\nsafety check --full-report\n\n# Django security checks\npython manage.py check --deploy\n\n# Bandit security linter\nbandit -r . -f json -o bandit-report.json\n\n# Secret scanning (if gitleaks is installed)\ngitleaks detect --source . --verbose\n\n# Environment variable check\npython -c \"from django.core.exceptions import ImproperlyConfigured; from django.conf import settings; settings.DEBUG\"\n```\n\nReport:\n- Vulnerable dependencies found\n- Security configuration issues\n- Hardcoded secrets detected\n- DEBUG mode status (should be False in production)\n\n## Phase 6: Django Management Commands\n\n```bash\n# Check for model issues\npython manage.py check\n\n# Collect static files\npython manage.py collectstatic --noinput --clear\n\n# Create superuser (if needed for tests)\necho \"from apps.users.models import User; User.objects.create_superuser('admin@example.com', 'admin')\" | python manage.py shell\n\n# Database integrity\npython manage.py check --database default\n\n# Cache verification (if using Redis)\npython -c \"from django.core.cache import cache; cache.set('test', 'value', 10); print(cache.get('test'))\"\n```\n\n## Phase 7: Performance Checks\n\n```bash\n# Django Debug Toolbar output (check for N+1 queries)\n# Run in dev mode with DEBUG=True and access a page\n# Look for duplicate queries in SQL panel\n\n# Query count analysis\ndjango-admin debugsqlshell  # If django-debug-sqlshell installed\n\n# Check for missing indexes\npython manage.py shell \u003C\u003C EOF\nfrom django.db import connection\nwith connection.cursor() as cursor:\n    cursor.execute(\"SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = 'public'\")\n    print(cursor.fetchall())\nEOF\n```\n\nReport:\n- Number of queries per page (should be \u003C 50 for typical pages)\n- Missing database indexes\n- Duplicate queries detected\n\n## Phase 8: Static Assets\n\n```bash\n# Check for npm dependencies (if using npm)\nnpm audit\nnpm audit fix\n\n# Build static files (if using webpack\u002Fvite)\nnpm run build\n\n# Verify static files\nls -la staticfiles\u002F\npython manage.py findstatic css\u002Fstyle.css\n```\n\n## Phase 9: Configuration Review\n\n```python\n# Run in Python shell to verify settings\npython manage.py shell \u003C\u003C EOF\nfrom django.conf import settings\nimport os\n\n# Critical checks\nchecks = {\n    'DEBUG is False': not settings.DEBUG,\n    'SECRET_KEY set': bool(settings.SECRET_KEY and len(settings.SECRET_KEY) > 30),\n    'ALLOWED_HOSTS set': len(settings.ALLOWED_HOSTS) > 0,\n    'HTTPS enabled': getattr(settings, 'SECURE_SSL_REDIRECT', False),\n    'HSTS enabled': getattr(settings, 'SECURE_HSTS_SECONDS', 0) > 0,\n    'Database configured': settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3',\n}\n\nfor check, result in checks.items():\n    status = '✓' if result else '✗'\n    print(f\"{status} {check}\")\nEOF\n```\n\n## Phase 10: Logging Configuration\n\n```bash\n# Test logging output\npython manage.py shell \u003C\u003C EOF\nimport logging\nlogger = logging.getLogger('django')\nlogger.warning('Test warning message')\nlogger.error('Test error message')\nEOF\n\n# Check log files (if configured)\ntail -f \u002Fvar\u002Flog\u002Fdjango\u002Fdjango.log\n```\n\n## Phase 11: API Documentation (if DRF)\n\n```bash\n# Generate schema\npython manage.py generateschema --format openapi-json > schema.json\n\n# Validate schema\n# Check if schema.json is valid JSON\npython -c \"import json; json.load(open('schema.json'))\"\n\n# Access Swagger UI (if using drf-yasg)\n# Visit http:\u002F\u002Flocalhost:8000\u002Fswagger\u002F in browser\n```\n\n## Phase 12: Diff Review\n\n```bash\n# Show diff statistics\ngit diff --stat\n\n# Show actual changes\ngit diff\n\n# Show changed files\ngit diff --name-only\n\n# Check for common issues\ngit diff | grep -i \"todo\\|fixme\\|hack\\|xxx\"\ngit diff | grep \"print(\"  # Debug statements\ngit diff | grep \"DEBUG = True\"  # Debug mode\ngit diff | grep \"import pdb\"  # Debugger\n```\n\nChecklist:\n- No debugging statements (print, pdb, breakpoint())\n- No TODO\u002FFIXME comments in critical code\n- No hardcoded secrets or credentials\n- Database migrations included for model changes\n- Configuration changes documented\n- Error handling present for external calls\n- Transaction management where needed\n\n## Output Template\n\n```\nDJANGO VERIFICATION REPORT\n==========================\n\nPhase 1: Environment Check\n  ✓ Python 3.11.5\n  ✓ Virtual environment active\n  ✓ All environment variables set\n\nPhase 2: Code Quality\n  ✓ mypy: No type errors\n  ✗ ruff: 3 issues found (auto-fixed)\n  ✓ black: No formatting issues\n  ✓ isort: Imports properly sorted\n  ✓ manage.py check: No issues\n\nPhase 3: Migrations\n  ✓ No unapplied migrations\n  ✓ No migration conflicts\n  ✓ All models have migrations\n\nPhase 4: Tests + Coverage\n  Tests: 247 passed, 0 failed, 5 skipped\n  Coverage:\n    Overall: 87%\n    users: 92%\n    products: 89%\n    orders: 85%\n    payments: 91%\n\nPhase 5: Security Scan\n  ✗ pip-audit: 2 vulnerabilities found (fix required)\n  ✓ safety check: No issues\n  ✓ bandit: No security issues\n  ✓ No secrets detected\n  ✓ DEBUG = False\n\nPhase 6: Django Commands\n  ✓ collectstatic completed\n  ✓ Database integrity OK\n  ✓ Cache backend reachable\n\nPhase 7: Performance\n  ✓ No N+1 queries detected\n  ✓ Database indexes configured\n  ✓ Query count acceptable\n\nPhase 8: Static Assets\n  ✓ npm audit: No vulnerabilities\n  ✓ Assets built successfully\n  ✓ Static files collected\n\nPhase 9: Configuration\n  ✓ DEBUG = False\n  ✓ SECRET_KEY configured\n  ✓ ALLOWED_HOSTS set\n  ✓ HTTPS enabled\n  ✓ HSTS enabled\n  ✓ Database configured\n\nPhase 10: Logging\n  ✓ Logging configured\n  ✓ Log files writable\n\nPhase 11: API Documentation\n  ✓ Schema generated\n  ✓ Swagger UI accessible\n\nPhase 12: Diff Review\n  Files changed: 12\n  +450, -120 lines\n  ✓ No debug statements\n  ✓ No hardcoded secrets\n  ✓ Migrations included\n\nRECOMMENDATION: ⚠️ Fix pip-audit vulnerabilities before deploying\n\nNEXT STEPS:\n1. Update vulnerable dependencies\n2. Re-run security scan\n3. Deploy to staging for final testing\n```\n\n## Pre-Deployment Checklist\n\n- [ ] All tests passing\n- [ ] Coverage ≥ 80%\n- [ ] No security vulnerabilities\n- [ ] No unapplied migrations\n- [ ] DEBUG = False in production settings\n- [ ] SECRET_KEY properly configured\n- [ ] ALLOWED_HOSTS set correctly\n- [ ] Database backups enabled\n- [ ] Static files collected and served\n- [ ] Logging configured and working\n- [ ] Error monitoring (Sentry, etc.) configured\n- [ ] CDN configured (if applicable)\n- [ ] Redis\u002Fcache backend configured\n- [ ] Celery workers running (if applicable)\n- [ ] HTTPS\u002FSSL configured\n- [ ] Environment variables documented\n\n## Continuous Integration\n\n### GitHub Actions Example\n\n```yaml\n# .github\u002Fworkflows\u002Fdjango-verification.yml\nname: Django Verification\n\non: [push, pull_request]\n\njobs:\n  verify:\n    runs-on: ubuntu-latest\n    services:\n      postgres:\n        image: postgres:14\n        env:\n          POSTGRES_PASSWORD: postgres\n        options: >-\n          --health-cmd pg_isready\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n\n    steps:\n      - uses: actions\u002Fcheckout@v3\n\n      - name: Set up Python\n        uses: actions\u002Fsetup-python@v4\n        with:\n          python-version: '3.11'\n\n      - name: Cache pip\n        uses: actions\u002Fcache@v3\n        with:\n          path: ~\u002F.cache\u002Fpip\n          key: ${{ runner.os }}-pip-${{ hashFiles('**\u002Frequirements.txt') }}\n\n      - name: Install dependencies\n        run: |\n          pip install -r requirements.txt\n          pip install ruff black mypy pytest pytest-django pytest-cov bandit safety pip-audit\n\n      - name: Code quality checks\n        run: |\n          ruff check .\n          black . --check\n          isort . --check-only\n          mypy .\n\n      - name: Security scan\n        run: |\n          bandit -r . -f json -o bandit-report.json\n          safety check --full-report\n          pip-audit\n\n      - name: Run tests\n        env:\n          DATABASE_URL: postgres:\u002F\u002Fpostgres:postgres@localhost:5432\u002Ftest\n          DJANGO_SECRET_KEY: test-secret-key\n        run: |\n          pytest --cov=apps --cov-report=xml --cov-report=term-missing\n\n      - name: Upload coverage\n        uses: codecov\u002Fcodecov-action@v3\n```\n\n## Quick Reference\n\n| Check | Command |\n|-------|---------|\n| Environment | `python --version` |\n| Type checking | `mypy .` |\n| Linting | `ruff check .` |\n| Formatting | `black . --check` |\n| Migrations | `python manage.py makemigrations --check` |\n| Tests | `pytest --cov=apps` |\n| Security | `pip-audit && bandit -r .` |\n| Django check | `python manage.py check --deploy` |\n| Collectstatic | `python manage.py collectstatic --noinput` |\n| Diff stats | `git diff --stat` |\n\nRemember: Automated verification catches common issues but doesn't replace manual code review and testing in staging environment.\n","# Django Verification Loop\n\nRun before PRs, after major changes, and pre-deploy to ensure Django application quality and security.\n\n## When to Activate\n\n- Before opening a pull request for a Django project\n- After major model changes, migration updates, or dependency upgrades\n- Pre-deployment verification for staging or production\n- Running full environment → lint → test → security → deploy readiness pipeline\n- Validating migration safety and test coverage\n\n## Phase 1: Environment Check\n\n```bash\n# Verify Python version\npython --version  # Should match project requirements\n\n# Check virtual environment\nwhich python\npip list --outdated\n\n# Verify environment variables\npython -c \"import os; import environ; print('DJANGO_SECRET_KEY set' if os.environ.get('DJANGO_SECRET_KEY') else 'MISSING: DJANGO_SECRET_KEY')\"\n```\n\nIf environment is misconfigured, stop and fix.\n\n## Phase 2: Code Quality & Formatting\n\n```bash\n# Type checking\nmypy . --config-file pyproject.toml\n\n# Linting with ruff\nruff check . --fix\n\n# Formatting with black\nblack . --check\nblack .  # Auto-fix\n\n# Import sorting\nisort . --check-only\nisort .  # Auto-fix\n\n# Django-specific checks\npython manage.py check --deploy\n```\n\nCommon issues:\n- Missing type hints on public functions\n- PEP 8 formatting violations\n- Unsorted imports\n- Debug settings left in production configuration\n\n## Phase 3: Migrations\n\n```bash\n# Check for unapplied migrations\npython manage.py showmigrations\n\n# Create missing migrations\npython manage.py makemigrations --check\n\n# Dry-run migration application\npython manage.py migrate --plan\n\n# Apply migrations (test environment)\npython manage.py migrate\n\n# Check for migration conflicts\npython manage.py makemigrations --merge  # Only if conflicts exist\n```\n\nReport:\n- Number of pending migrations\n- Any migration conflicts\n- Model changes without migrations\n\n## Phase 4: Tests + Coverage\n\n```bash\n# Run all tests with pytest\npytest --cov=apps --cov-report=html --cov-report=term-missing --reuse-db\n\n# Run specific app tests\npytest apps\u002Fusers\u002Ftests\u002F\n\n# Run with markers\npytest -m \"not slow\"  # Skip slow tests\npytest -m integration  # Only integration tests\n\n# Coverage report\nopen htmlcov\u002Findex.html\n```\n\nReport:\n- Total tests: X passed, Y failed, Z skipped\n- Overall coverage: XX%\n- Per-app coverage breakdown\n\nCoverage targets:\n\n| Component | Target |\n|-----------|--------|\n| Models | 90%+ |\n| Serializers | 85%+ |\n| Views | 80%+ |\n| Services | 90%+ |\n| Overall | 80%+ |\n\n## Phase 5: Security Scan\n\n```bash\n# Dependency vulnerabilities\npip-audit\nsafety check --full-report\n\n# Django security checks\npython manage.py check --deploy\n\n# Bandit security linter\nbandit -r . -f json -o bandit-report.json\n\n# Secret scanning (if gitleaks is installed)\ngitleaks detect --source . --verbose\n\n# Environment variable check\npython -c \"from django.core.exceptions import ImproperlyConfigured; from django.conf import settings; settings.DEBUG\"\n```\n\nReport:\n- Vulnerable dependencies found\n- Security configuration issues\n- Hardcoded secrets detected\n- DEBUG mode status (should be False in production)\n\n## Phase 6: Django Management Commands\n\n```bash\n# Check for model issues\npython manage.py check\n\n# Collect static files\npython manage.py collectstatic --noinput --clear\n\n# Create superuser (if needed for tests)\necho \"from apps.users.models import User; User.objects.create_superuser('admin@example.com', 'admin')\" | python manage.py shell\n\n# Database integrity\npython manage.py check --database default\n\n# Cache verification (if using Redis)\npython -c \"from django.core.cache import cache; cache.set('test', 'value', 10); print(cache.get('test'))\"\n```\n\n## Phase 7: Performance Checks\n\n```bash\n# Django Debug Toolbar output (check for N+1 queries)\n# Run in dev mode with DEBUG=True and access a page\n# Look for duplicate queries in SQL panel\n\n# Query count analysis\ndjango-admin debugsqlshell  # If django-debug-sqlshell installed\n\n# Check for missing indexes\npython manage.py shell \u003C\u003C EOF\nfrom django.db import connection\nwith connection.cursor() as cursor:\n    cursor.execute(\"SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = 'public'\")\n    print(cursor.fetchall())\nEOF\n```\n\nReport:\n- Number of queries per page (should be \u003C 50 for typical pages)\n- Missing database indexes\n- Duplicate queries detected\n\n## Phase 8: Static Assets\n\n```bash\n# Check for npm dependencies (if using npm)\nnpm audit\nnpm audit fix\n\n# Build static files (if using webpack\u002Fvite)\nnpm run build\n\n# Verify static files\nls -la staticfiles\u002F\npython manage.py findstatic css\u002Fstyle.css\n```\n\n## Phase 9: Configuration Review\n\n```python\n# Run in Python shell to verify settings\npython manage.py shell \u003C\u003C EOF\nfrom django.conf import settings\nimport os\n\n# Critical checks\nchecks = {\n    'DEBUG is False': not settings.DEBUG,\n    'SECRET_KEY set': bool(settings.SECRET_KEY and len(settings.SECRET_KEY) > 30),\n    'ALLOWED_HOSTS set': len(settings.ALLOWED_HOSTS) > 0,\n    'HTTPS enabled': getattr(settings, 'SECURE_SSL_REDIRECT', False),\n    'HSTS enabled': getattr(settings, 'SECURE_HSTS_SECONDS', 0) > 0,\n    'Database configured': settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3',\n}\n\nfor check, result in checks.items():\n    status = '✓' if result else '✗'\n    print(f\"{status} {check}\")\nEOF\n```\n\n## Phase 10: Logging Configuration\n\n```bash\n# Test logging output\npython manage.py shell \u003C\u003C EOF\nimport logging\nlogger = logging.getLogger('django')\nlogger.warning('Test warning message')\nlogger.error('Test error message')\nEOF\n\n# Check log files (if configured)\ntail -f \u002Fvar\u002Flog\u002Fdjango\u002Fdjango.log\n```\n\n## Phase 11: API Documentation (if DRF)\n\n```bash\n# Generate schema\npython manage.py generateschema --format openapi-json > schema.json\n\n# Validate schema\n# Check if schema.json is valid JSON\npython -c \"import json; json.load(open('schema.json'))\"\n\n# Access Swagger UI (if using drf-yasg)\n# Visit http:\u002F\u002Flocalhost:8000\u002Fswagger\u002F in browser\n```\n\n## Phase 12: Diff Review\n\n```bash\n# Show diff statistics\ngit diff --stat\n\n# Show actual changes\ngit diff\n\n# Show changed files\ngit diff --name-only\n\n# Check for common issues\ngit diff | grep -i \"todo\\|fixme\\|hack\\|xxx\"\ngit diff | grep \"print(\"  # Debug statements\ngit diff | grep \"DEBUG = True\"  # Debug mode\ngit diff | grep \"import pdb\"  # Debugger\n```\n\nChecklist:\n- No debugging statements (print, pdb, breakpoint())\n- No TODO\u002FFIXME comments in critical code\n- No hardcoded secrets or credentials\n- Database migrations included for model changes\n- Configuration changes documented\n- Error handling present for external calls\n- Transaction management where needed\n\n## Output Template\n\n```\nDJANGO VERIFICATION REPORT\n==========================\n\nPhase 1: Environment Check\n  ✓ Python 3.11.5\n  ✓ Virtual environment active\n  ✓ All environment variables set\n\nPhase 2: Code Quality\n  ✓ mypy: No type errors\n  ✗ ruff: 3 issues found (auto-fixed)\n  ✓ black: No formatting issues\n  ✓ isort: Imports properly sorted\n  ✓ manage.py check: No issues\n\nPhase 3: Migrations\n  ✓ No unapplied migrations\n  ✓ No migration conflicts\n  ✓ All models have migrations\n\nPhase 4: Tests + Coverage\n  Tests: 247 passed, 0 failed, 5 skipped\n  Coverage:\n    Overall: 87%\n    users: 92%\n    products: 89%\n    orders: 85%\n    payments: 91%\n\nPhase 5: Security Scan\n  ✗ pip-audit: 2 vulnerabilities found (fix required)\n  ✓ safety check: No issues\n  ✓ bandit: No security issues\n  ✓ No secrets detected\n  ✓ DEBUG = False\n\nPhase 6: Django Commands\n  ✓ collectstatic completed\n  ✓ Database integrity OK\n  ✓ Cache backend reachable\n\nPhase 7: Performance\n  ✓ No N+1 queries detected\n  ✓ Database indexes configured\n  ✓ Query count acceptable\n\nPhase 8: Static Assets\n  ✓ npm audit: No vulnerabilities\n  ✓ Assets built successfully\n  ✓ Static files collected\n\nPhase 9: Configuration\n  ✓ DEBUG = False\n  ✓ SECRET_KEY configured\n  ✓ ALLOWED_HOSTS set\n  ✓ HTTPS enabled\n  ✓ HSTS enabled\n  ✓ Database configured\n\nPhase 10: Logging\n  ✓ Logging configured\n  ✓ Log files writable\n\nPhase 11: API Documentation\n  ✓ Schema generated\n  ✓ Swagger UI accessible\n\nPhase 12: Diff Review\n  Files changed: 12\n  +450, -120 lines\n  ✓ No debug statements\n  ✓ No hardcoded secrets\n  ✓ Migrations included\n\nRECOMMENDATION: ⚠️ Fix pip-audit vulnerabilities before deploying\n\nNEXT STEPS:\n1. Update vulnerable dependencies\n2. Re-run security scan\n3. Deploy to staging for final testing\n```\n\n## Pre-Deployment Checklist\n\n- [ ] All tests passing\n- [ ] Coverage ≥ 80%\n- [ ] No security vulnerabilities\n- [ ] No unapplied migrations\n- [ ] DEBUG = False in production settings\n- [ ] SECRET_KEY properly configured\n- [ ] ALLOWED_HOSTS set correctly\n- [ ] Database backups enabled\n- [ ] Static files collected and served\n- [ ] Logging configured and working\n- [ ] Error monitoring (Sentry, etc.) configured\n- [ ] CDN configured (if applicable)\n- [ ] Redis\u002Fcache backend configured\n- [ ] Celery workers running (if applicable)\n- [ ] HTTPS\u002FSSL configured\n- [ ] Environment variables documented\n\n## Continuous Integration\n\n### GitHub Actions Example\n\n```yaml\n# .github\u002Fworkflows\u002Fdjango-verification.yml\nname: Django Verification\n\non: [push, pull_request]\n\njobs:\n  verify:\n    runs-on: ubuntu-latest\n    services:\n      postgres:\n        image: postgres:14\n        env:\n          POSTGRES_PASSWORD: postgres\n        options: >-\n          --health-cmd pg_isready\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n\n    steps:\n      - uses: actions\u002Fcheckout@v3\n\n      - name: Set up Python\n        uses: actions\u002Fsetup-python@v4\n        with:\n          python-version: '3.11'\n\n      - name: Cache pip\n        uses: actions\u002Fcache@v3\n        with:\n          path: ~\u002F.cache\u002Fpip\n          key: ${{ runner.os }}-pip-${{ hashFiles('**\u002Frequirements.txt') }}\n\n      - name: Install dependencies\n        run: |\n          pip install -r requirements.txt\n          pip install ruff black mypy pytest pytest-django pytest-cov bandit safety pip-audit\n\n      - name: Code quality checks\n        run: |\n          ruff check .\n          black . --check\n          isort . --check-only\n          mypy .\n\n      - name: Security scan\n        run: |\n          bandit -r . -f json -o bandit-report.json\n          safety check --full-report\n          pip-audit\n\n      - name: Run tests\n        env:\n          DATABASE_URL: postgres:\u002F\u002Fpostgres:postgres@localhost:5432\u002Ftest\n          DJANGO_SECRET_KEY: test-secret-key\n        run: |\n          pytest --cov=apps --cov-report=xml --cov-report=term-missing\n\n      - name: Upload coverage\n        uses: codecov\u002Fcodecov-action@v3\n```\n\n## Quick Reference\n\n| Check | Command |\n|-------|---------|\n| Environment | `python --version` |\n| Type checking | `mypy .` |\n| Linting | `ruff check .` |\n| Formatting | `black . --check` |\n| Migrations | `python manage.py makemigrations --check` |\n| Tests | `pytest --cov=apps` |\n| Security | `pip-audit && bandit -r .` |\n| Django check | `python manage.py check --deploy` |\n| Collectstatic | `python manage.py collectstatic --noinput` |\n| Diff stats | `git diff --stat` |\n\nRemember: Automated verification catches common issues but doesn't replace manual code review and testing in staging environment.\n",{"name":5,"origin":38,"description":7},"ECC","main","a298c929b6cbd662e1fce54302ce520d5ceea1a5",".agents\u002Flibrary\u002Fskills\u002Fdjango-verification","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill django-verification",{"tool":51,"command":52},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill django-verification",{"tool":54,"command":55},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill django-verification","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Flibrary\u002Fskills\u002Fdjango-verification\u002FSKILL.md",true,[],[60,82,113,140,154,170],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":33},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","use","context","repo","injection","execution","file",{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":93,"publishedAt":33},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[94,95,96,97,98,99,100,101,102,103,104,105,106,107,76,108,109,110,111,112],"openmm md","how","decision","pick","linux","analyze","tool","stack","open","NVIDIA","gpu","license","workflow","windows","free","molecular dynamics","local","do","MCP",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":125,"publishedAt":33},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[119,122],{"categoryNo":120,"categoryName":121,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":123,"categoryName":124,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000008","测试与质量",[126,127,128,129,130,131,132,133,134,135,95,136,137,138,139],"review","visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":33},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[142,147,148,149,150,151,152,153],"setup","report","project","installation","project setup","issues","state",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":33},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[160],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[156,162,72,163,164,165,76,166,167,168,169],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":171,"name":147,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":33},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[147,149,110,176,151,177],"files","interactive"]