mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-14 05:43:29 +08:00
fix: P1 test state-file PID mismatch + P2 session key eviction
P1 (cubic-dev-ai): Test process PID differs from spawned hook PID, so test was seeding/clearing wrong state file. Fix: pass fixed CLAUDE_SESSION_ID='gateguard-test-session' to spawned hooks. P2 (cubic-dev-ai): Pruning checked array could evict __bash_session__ and other session keys, causing gates to re-fire mid-session. Fix: preserve __prefixed keys during pruning, only evict file-path entries. 9/9 tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -59,9 +59,12 @@ function loadState() {
|
||||
function saveState(state) {
|
||||
try {
|
||||
state.last_active = Date.now();
|
||||
// Prune checked list if it exceeds the cap
|
||||
// Prune checked list if it exceeds the cap.
|
||||
// Preserve session keys (__prefixed) so gates like __bash_session__ don't re-fire.
|
||||
if (state.checked.length > MAX_CHECKED_ENTRIES) {
|
||||
state.checked = state.checked.slice(-MAX_CHECKED_ENTRIES);
|
||||
const sessionKeys = state.checked.filter(k => k.startsWith('__'));
|
||||
const fileKeys = state.checked.filter(k => !k.startsWith('__'));
|
||||
state.checked = [...sessionKeys, ...fileKeys.slice(-(MAX_CHECKED_ENTRIES - sessionKeys.length))];
|
||||
}
|
||||
fs.mkdirSync(STATE_DIR, { recursive: true });
|
||||
// Atomic write: temp file + rename prevents partial reads
|
||||
|
||||
Reference in New Issue
Block a user