mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-19 01:26:29 +03:00
Denoise the design hook and let agents self-serve confident ignores (#497)
The directive footer now emits in full once per session (a one-line reminder after), the DESIGN.md staleness note is mentioned once per session, rule descriptions dedupe within an emission, and the per-line ignore suggestion shrinks to the bare rule/value pair. The footer and hooks.md replace the confirmation-gated ignore policy with a three-way triage: fix real problems, self-serve the narrowest ignore for confident false positives or sanctioned exceptions and disclose it (with an honest --reason), ask when unsure. Self-serve stops at ignore-value, and the footer now gives a runnable hook-admin.mjs command instead of a slash command agents cannot execute. Measured on a seeded lab session replaying 11 hook events: 33,658 to 14,063 chars of agent-visible output (-58%). AI-assisted (Cursor agent), directed and reviewed by @abdulwahabone. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,8 +19,9 @@ import {
|
||||
EDIT_COUNT_THRESHOLD,
|
||||
GENERATED_PATH,
|
||||
SENSITIVE_PATH,
|
||||
appendDesignSystemNote,
|
||||
appendDesignSystemNoteOnce,
|
||||
designSystemOptions,
|
||||
footerModeForSession,
|
||||
filterFindings,
|
||||
isNativePlatform,
|
||||
isScanTargetInsideProject,
|
||||
@@ -345,8 +346,8 @@ async function detectProposedHtml(detector, content, filePath, scanOptions) {
|
||||
}
|
||||
}
|
||||
|
||||
function cursorBlockMessage(findings, filePath, config, cwd) {
|
||||
const rendered = renderTemplate(findings, filePath, config, { cwd });
|
||||
function cursorBlockMessage(findings, filePath, config, cwd, footerMode) {
|
||||
const rendered = renderTemplate(findings, filePath, config, { cwd, footer: footerMode });
|
||||
const blocked = rendered.replace(
|
||||
'[impeccable@1] Design hook findings requiring review',
|
||||
'[impeccable@1] Impeccable design hook blocked this write before it landed. Design hook findings requiring review',
|
||||
@@ -468,9 +469,15 @@ async function main() {
|
||||
});
|
||||
}
|
||||
|
||||
const message = appendDesignSystemNote(cursorBlockMessage(filtered, filePath, config, cwd), scanOptions);
|
||||
const sessionId = event.session_id || event.conversation_id || 'unknown';
|
||||
const cache = readCache(cwd);
|
||||
// Repeated denials for the same session repeat the findings, not the
|
||||
// policy: the full footer emits once per session, the short form after.
|
||||
const footerMode = footerModeForSession(cache, sessionId);
|
||||
const message = appendDesignSystemNoteOnce(
|
||||
cursorBlockMessage(filtered, filePath, config, cwd, footerMode),
|
||||
scanOptions, cache, sessionId,
|
||||
);
|
||||
const denial = bumpCursorDenial(cache, sessionId, filePath, filtered);
|
||||
persistCache(cwd, cache);
|
||||
if (denial.count > EDIT_COUNT_THRESHOLD) {
|
||||
|
||||
Reference in New Issue
Block a user