feat(mcp-description-cache): E14 part 1 — baseline + history schema (cumulative drift) [skip-docs]
Wave C step C1: extend the MCP description cache schema with a sticky baseline slot per tool and a rolling history array (last 10 drift events). Cumulative drift = levenshtein(current, baseline) / max(|current|, |baseline|); emits a separate signal when ratio >= mcp.cumulative_drift_threshold (default 0.25). Per-update drift logic and threshold unchanged. - loadCache(): TTL purge now skips entries with a baseline, preserving cumulative-drift detection across the 7-day window. v7.2.0 entries (no history field) are migrated on read by seeding baseline from the current description and adding an empty history array. Entries with history but no baseline (post-clearBaseline) are NOT re-seeded. - checkDescriptionDrift(): when an entry exists with history but no baseline (i.e. baseline was cleared), the next call re-seeds baseline from the incoming description so the legitimate next version becomes the new baseline. - clearBaseline(toolName?): removes baseline for one tool or all tools. Preserves description / firstSeen / lastSeen / history. - listBaselines(): read-only listing for the upcoming reset CLI. - LLM_SECURITY_MCP_CACHE_FILE env var override for end-to-end testing. - New policy key mcp.cumulative_drift_threshold (default 0.25). Tests: 23 new unit tests; existing 10 still pass. Docs deferred: CLAUDE.md update lands in C3 alongside the new /security mcp-baseline-reset command. C2 adds the hooks-table footer note. Combined wave docs match plan §"Wave C — Touch" list. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
ede37219a3
commit
eaac830300
3 changed files with 566 additions and 41 deletions
|
|
@ -41,6 +41,7 @@ const DEFAULT_POLICY = Object.freeze({
|
|||
mcp: {
|
||||
trusted_servers: [],
|
||||
volume_threshold_bytes: 100_000,
|
||||
cumulative_drift_threshold: 0.25,
|
||||
},
|
||||
audit: {
|
||||
log_path: null,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue