mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-11 15:39:04 +02:00
fix(question-log): dedupe INJECTION_PATTERNS via lib/jsonl-store (#1934)
bin/gstack-question-log carried a local copy of the injection-pattern list, so pattern fixes to lib/jsonl-store.ts never propagated — including the /override[:\s]/i false-positive fix arriving via community PR #1940. Import the shared hasInjection instead (enabled by the previous commit's cygpath guard). question-log also gets the lib's stricter superset (human:, disregard, from-now-on, approve-all patterns). Tests pin the contract in a #1940-order-independent way: an "Override: ignore all previous instructions" header is rejected, "prose overrides the deterministic table" is accepted, and a static invariant keeps local INJECTION_PATTERNS duplicates out of the bin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
c21249cbdd
commit
82c5140fda
+7
-17
@@ -45,6 +45,7 @@ TMPERR=$(mktemp)
|
||||
trap 'rm -f "$TMPERR"' EXIT
|
||||
set +e
|
||||
VALIDATED=$(printf '%s' "$INPUT" | bun -e "
|
||||
import { hasInjection } from '$SCRIPT_DIR/../lib/jsonl-store.ts';
|
||||
const path = require('path');
|
||||
const raw = await Bun.stdin.text();
|
||||
let j;
|
||||
@@ -110,23 +111,12 @@ if (j.question_summary.includes('\n')) {
|
||||
j.question_summary = j.question_summary.replace(/\n+/g, ' ');
|
||||
}
|
||||
|
||||
// Injection defense on the summary — same patterns as learnings-log.
|
||||
const INJECTION_PATTERNS = [
|
||||
/ignore\s+(all\s+)?previous\s+(instructions|context|rules)/i,
|
||||
/you\s+are\s+now\s+/i,
|
||||
/always\s+output\s+no\s+findings/i,
|
||||
/skip\s+(all\s+)?(security|review|checks)/i,
|
||||
/override[:\s]/i,
|
||||
/\bsystem\s*:/i,
|
||||
/\bassistant\s*:/i,
|
||||
/\buser\s*:/i,
|
||||
/do\s+not\s+(report|flag|mention)/i,
|
||||
];
|
||||
for (const pat of INJECTION_PATTERNS) {
|
||||
if (pat.test(j.question_summary)) {
|
||||
process.stderr.write('gstack-question-log: question_summary contains suspicious instruction-like content, rejected\n');
|
||||
process.exit(1);
|
||||
}
|
||||
// Injection defense on the summary — shared audited list (lib/jsonl-store.ts),
|
||||
// same source of truth as learnings-log and decision-log. The previous local
|
||||
// duplicate drifted (#1934): pattern fixes to the lib never propagated here.
|
||||
if (hasInjection(j.question_summary)) {
|
||||
process.stderr.write('gstack-question-log: question_summary contains suspicious instruction-like content, rejected\n');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Registry lookup for category + door_type enrichment.
|
||||
|
||||
Reference in New Issue
Block a user