06098f3c4e
Dismissing one collision permanently silenced all future ones: the dismissal gate (priorOutcome.accepted === false) plus loose file/vector recall meant one README discard muted every later README clash. The per-pod cooldown additionally hid consecutive conflicts for 3 min. shouldIntervene now only filters `info` severity — Accept/Dismiss still record outcomes but no longer gate whether a collision surfaces. The same-collision single-shot dedupe (activeConflicts in PodmanAgent.handle) still prevents repeat spam, so removing the cooldown is safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LuV8W8oNYRsDWKoqK8Mkqc
33 lines
1.5 KiB
TypeScript
33 lines
1.5 KiB
TypeScript
import type { Collision, SuggestedActionKind } from '@podman/shared';
|
|
import type { RecalledCollision } from './vectors.js';
|
|
|
|
/**
|
|
* Policy gate — suppression fully disabled for the demo.
|
|
*
|
|
* Every real collision surfaces an intervention. Accept/Dismiss are still
|
|
* recorded as outcomes but carry NO gating meaning: dismissing one collision
|
|
* never silences future ones, and there is no per-pod cooldown throttling
|
|
* consecutive conflicts. The only filter is severity: `info` collisions are
|
|
* informational, not actionable, so they don't nudge. The same-collision
|
|
* single-shot dedupe lives in `PodmanAgent.handle` (activeConflicts), so
|
|
* removing the cooldown does not cause repeat spam of an unresolved collision.
|
|
*
|
|
* (Prior dismissal-based suppression over-generalized: one README discard
|
|
* permanently muted all README clashes via loose file/vector recall.)
|
|
*/
|
|
export function shouldIntervene(collision: Collision, _prior: RecalledCollision | null): boolean {
|
|
return collision.severity !== 'info';
|
|
}
|
|
|
|
/** Preferred action selection based on collision severity and prior accepted actions. */
|
|
export function preferredAction(
|
|
collision: Collision,
|
|
prior: RecalledCollision | null,
|
|
): SuggestedActionKind {
|
|
const acceptedKind = prior?.priorOutcome?.accepted
|
|
? prior.priorIntervention?.suggestedAction.kind
|
|
: undefined;
|
|
if (acceptedKind && acceptedKind !== 'none') return acceptedKind;
|
|
return collision.severity === 'critical' ? 'open_sync_pr' : 'ping_teammate';
|
|
}
|