- installHubEntry now requires entry.source.commitSha to match
FULL_COMMIT_SHA_PATTERN (40 hex chars). The shorter prefix shape was a
trust gap: an in-process caller could craft an entry whose commitSha
matched the approval string by luck, pass the equality check, and
trigger a re-fetch with ?ref=<short> that GitHub resolves through
branch/tag names.
- createMemory now validates input.tags as a bounded array of slug
strings (max 16 entries, 64 bytes each, 512 bytes total) and rejects
control characters and prompt-frame tokens, so a future memory route
cannot bypass the 8KB content cap by smuggling instruction-like
strings through tags that buildMemoryPrefix renders into the prompt
JSON.
- Added regression tests for both gates.
Generated-By: looper 0.6.1 (runner=fixer, agent=claude-code)