@@ -685,6 +685,121 @@ gh pr checks <PR_NUMBER>
685685- Always lint before pushing (see Pre-Push Checklist above)
686686- Always update CHANGES.md for user-facing changes
687687
688+ ### Commit Message Format
689+
690+ ** IMPORTANT** : Do NOT include Claude Code attribution in commit messages. Commit messages should be written as if by a human developer.
691+
692+ ** Bad** (don't do this):
693+ ```
694+ Fix #70: Implement HTTP caching
695+
696+ 🤖 Generated with Claude Code
697+ Co-Authored-By: Claude <noreply@anthropic.com>
698+ ```
699+
700+ ** Good** (correct format):
701+ ```
702+ Fix #70: Implement HTTP caching for offline mode
703+
704+ Previously, offline mode only skipped VCS operations but still
705+ fetched HTTP-referenced requirements/constraints files.
706+
707+ Changes:
708+ - Add HTTP content caching to .mxdev_cache/ directory
709+ - Online mode: fetch from HTTP and cache for future use
710+ - Offline mode: read from cache, error if not cached
711+
712+ All 190 tests pass, including 5 new HTTP caching tests.
713+ ```
714+
715+ ## GitHub Dependabot Management
716+
717+ ### Test Fixtures and False Positive Alerts
718+
719+ Test fixture files in ` tests/data/requirements/ ` contain pinned package versions that can trigger Dependabot security alerts, even though they're not real dependencies.
720+
721+ ** Current Setup (Auto-Triage Rule):**
722+
723+ A Dependabot auto-triage rule is configured via GitHub UI to automatically dismiss alerts from test fixtures:
724+
725+ - ** Rule name** : "Dismiss test fixture alerts"
726+ - ** Manifest filter** : Comma-separated list of test fixture files:
727+ ```
728+ tests/data/requirements/constraints.txt,
729+ tests/data/requirements/basic_requirements.txt,
730+ tests/data/requirements/nested_requirements.txt,
731+ tests/data/requirements/other_requirements.txt,
732+ tests/data/requirements/requirements_with_constraints.txt
733+ ```
734+ - ** Action** : Dismiss indefinitely
735+ - ** Location** : GitHub Settings → Code security → Dependabot rules
736+
737+ ** How It Works:**
738+
739+ Three separate GitHub systems handle dependency management:
740+
741+ 1 . ** GitHub Linguist** (` linguist-vendored ` in ` .gitattributes ` )
742+ - Only affects language statistics
743+ - Does NOT affect dependency graph or Dependabot
744+
745+ 2 . ** Dependency Graph** (vendored directory detection)
746+ - Uses hardcoded regex patterns to identify vendored directories:
747+ - ` (3rd|[Tt]hird)[-_]?[Pp]arty/ `
748+ - ` (^|/)vendors?/ `
749+ - ` (^|/)[Ee]xtern(als?)?/ `
750+ - ` tests/data/ ` does NOT match these patterns
751+ - Files in vendored directories are excluded from dependency graph
752+
753+ 3 . ** Dependabot Auto-Triage Rules**
754+ - ** This is the ONLY way** to suppress security alerts for specific directories
755+ - Can target by: manifest path, severity, package name, scope, ecosystem, CVE, CWE, GHSA, EPSS
756+ - Rules are configured via GitHub UI (not version-controlled)
757+ - Supports comma-separated manifest paths (no wildcards)
758+
759+ ** Key Limitations:**
760+
761+ - ❌ Wildcards NOT supported in manifest paths (e.g., ` tests/data/** ` doesn't work)
762+ - ❌ Must specify exact file paths
763+ - ❌ Configuration is in GitHub UI, not in repository files
764+ - ✅ Can combine multiple paths with commas
765+
766+ ** Adding New Test Fixtures:**
767+
768+ If you add a new test fixture file with pinned dependencies (e.g., ` tests/data/requirements/new_fixture.txt ` ):
769+
770+ 1 . Go to GitHub Settings → Code security → Dependabot rules
771+ 2 . Edit the "Dismiss test fixture alerts" rule
772+ 3 . Add the new path to the comma-separated manifest list
773+ 4 . Save the rule
774+
775+ ** Alternative Approaches (Don't Use):**
776+
777+ - ❌ ` .gitattributes ` with ` linguist-vendored ` → Only affects language stats, not Dependabot
778+ - ❌ Renaming ` tests/data/ ` to ` tests/vendor/ ` → Breaking change, misleading name
779+ - ❌ ` exclude-paths ` in ` .github/dependabot.yml ` → Only affects version update PRs, NOT security alerts
780+ - ✅ Auto-triage rules → ** This is the correct solution for security alerts**
781+
782+ ### HTTP Caching for Offline Mode
783+
784+ The ` .mxdev_cache/ ` directory stores HTTP-referenced requirements/constraints files for offline use:
785+
786+ - ** Online mode** : Content fetched from HTTP is automatically cached
787+ - ** Offline mode** (` -o/--offline ` ): Content read from cache, errors if not cached
788+ - ** Cache key** : SHA256 hash (first 16 hex chars) of the URL
789+ - ** Location** : ` .mxdev_cache/ ` (in ` .gitignore ` )
790+
791+ ** Cache Files:**
792+ ```
793+ .mxdev_cache/
794+ a1b2c3d4e5f6g7h8 # Cached content (first 16 chars of SHA256)
795+ a1b2c3d4e5f6g7h8.url # Original URL (for debugging)
796+ ```
797+
798+ ** Implementation Details:**
799+ - Cache functions: ` _get_cache_key() ` , ` _cache_http_content() ` , ` _read_from_cache() `
800+ - See ` src/mxdev/processing.py ` for implementation
801+ - Tests in ` tests/test_processing.py ` (5 comprehensive caching tests)
802+
688803## Requirements
689804
690805- ** Python** : 3.10+
0 commit comments