/** * Forgen — Enforce Classifier (ADR-001 §Migration) * * 기존 Rule 에 `enforce_via: EnforceSpec[]` 이 없을 때, trigger/policy 자연어 * 패턴과 strength 조합으로 mech(A/B/C) 와 hook 을 자동 제안한다. * * 휴리스틱 (ADR-001 §Migration heuristics): * - trigger/policy 에 `rm|force|DROP|credentials|\.env` → Mech-A PreToolUse + tool_arg_regex * - trigger/policy 에 `완료|complete|done|e2e|mock|verify` + 명시적 증거 경로(*.json) * → Mech-A Stop + artifact_check. 경로 미명시 → Mech-B self_check_prompt * (무경로 디폴트 .forgen/state/e2e-result.json 은 e2e 게이트 폐지(ADR-010 W0) 후 * 죽은 경로가 되어 완료 선언을 영구 차단하는 룰을 재생산했다 — 리뷰 발견) * - strength ∈ {strong, hard} + 문체/응답 맥락 → Mech-B UserPromptSubmit + self_check_prompt * - 그 외 soft/default → Mech-C (drift 측정) * * 설계 원칙: * - pure: classify(rule) 는 부수효과 없음. CLI 에서만 save 가 발생. * - 미리 존재하는 enforce_via 는 덮어쓰지 않음 (`force=false` 기본). * - 신규 제안은 reason 주석(문자열) 과 함께 반환해 사용자 리뷰 가능. */ import type { Rule, EnforceSpec } from '../store/types.js'; export interface EnforceProposal { rule_id: string; trigger_preview: string; current_enforce_via: EnforceSpec[] | null; proposed: EnforceSpec[]; reasoning: string[]; } export declare function classify(rule: Rule): EnforceProposal; export declare function classifyAll(rules: Rule[]): EnforceProposal[]; /** * critic-review 룰인데 baked Stop 트리거가 skip-review 시그널을 안 가지는지 (리뷰 SEV-3 (c)). * true 면 `forgen rule classify --apply --force` 재-bake 로 갱신해야 갭이 닫힌다. * doctor nudge 용 — "고쳤는데 기존 유저에겐 안 닿는" 상태를 발견 가능하게 한다. */ export declare function needsCriticTriggerMigration(rule: Rule): boolean; /** 제안을 적용해 새 Rule 을 반환 (pure). 이미 enforce_via 가 있으면 force=false 에서 건너뜀. */ export declare function applyProposal(rule: Rule, proposal: EnforceProposal, options?: { force?: boolean; }): Rule;