IMPLEMENTATION: - crates/mem-core/src/symptom_projection.rs (250 LOC) - project_symptom(tool, query) → SymptomVector - Three-stage normalization: - Stage 1: Extract keywords - Stage 2: Normalize (stop words, abbreviations) - Stage 3: Generate deterministic SHA256 hash - Tool-specific abbreviation mappings (npm, cargo, kubectl, docker, go) - Stop words list (30+ common words) - Confidence scoring based on keyword specificity TEST COVERAGE: 22 tests passing - 10 unit tests in lib (determinism, abbreviations, stop words, tools, case, order) - 12 integration tests (a1-a6 assertions from design doc) - Real-world scenario tests (npm, cargo, kubectl) - 100% deterministic hashing verified INTEGRATION: - Module exported in crates/mem-core/src/lib.rs - All 43 existing mem-core tests still passing - Ready for M3.7.4 context endpoint integration DESIGN ASSERTIONS (all passing): ✅ a1: Same symptom = same hash (deterministic) ✅ a2: Abbreviation expansion (ERESOLVE → error resolve) ✅ a3: Stop word removal (is, unable, to, the) ✅ a4: Tool consistency (npm ≠ cargo for same error) ✅ a5: Case insensitive (NPM = npm) ✅ a6: Keyword order irrelevant (sorted before hash)