{
  "schema": "cancel_on_success_doctrine_hardening_candidate.v1",
  "ts_kst": "2026-05-23 17:04 KST",
  "status": "HARDENING_CANDIDATE_RECORDED_SEPARATE_FROM_PR_143",
  "scope_note": "task-2639 fallback 4CC351FE auto-fired 및 Anthropic Usage Policy refusal 사고 별도 기록. PR #143 task-2640 본 진행과 섞지 않음. 후속 doctrine 개선 task 회장 결정 대기.",
  "incident_summary": {
    "fallback_id": "4CC351FE",
    "parent_task": "task-2639 (real_merge_hooks snapshot crossref D안 — PR #142)",
    "parent_pr_merged_at_kst": "2026-05-23 15:27 KST (commit 93598660)",
    "fallback_auto_fired_at_kst": "2026-05-23 16:39 KST",
    "elapsed_after_merge": "~1h 12min (cancel-on-success 미작동)",
    "outcome": "Anthropic Usage Policy refusal",
    "root_cause_category": "cyber content false-positive on prompt keywords",
    "trigger_keywords_in_prompt": ["SELF_COLLECTOR", "credential", "admin override"],
    "credit_waste_usd_estimate": 0.22,
    "executor_response_received_at_kst": "2026-05-23 16:39 KST"
  },
  "cancel_on_success_doctrine_failure": {
    "doctrine_source": "feedback_dispatch_must_register_fallback_safetynet_260520.md (cancel-on-success 핵심 조건)",
    "expected_behavior": "parent task PR merge confirmation 시점에 normal callback collector 가 success 처리 → fallback cron 자동 cancel → fallback executor spawn 0",
    "actual_behavior": "PR #142 merge 완료 후 fallback 4CC351FE 자동 cancel 안 됨 → 1h 12min 후 auto-fired → refusal",
    "implicated_components": [
      "ANU collector durable-success → fallback cancel 트리거 코드 결선 부재 (또는 결선 있으나 실제 동작 0)",
      "merge 완료 confirmation → ANU collector 자동 success 처리 시점 정의 부재",
      "fallback cron 등록 시 cancel-on-success metadata 부재 (cron-list 상 일반 cron 과 구분 불가)"
    ]
  },
  "fp_keyword_collision_observation": {
    "category": "Anthropic Usage Policy cyber content false-positive",
    "context": "ANU governance internal task — defensive security wiring (SELF_COLLECTOR 차단 / credential 단일출처 / admin override 금지)",
    "policy_intent": "방어적 보안 doctrine 강화 (공격적 의도 0)",
    "fp_trigger_pattern": "fallback prompt 본문에 위 키워드들이 함께 등장 → 모델 측 cyber content 판단",
    "mitigation_candidate": [
      "fallback prompt 본문에 task md 경로 + sha256 만 지시 (verbatim 키워드 인라인 금지)",
      "fallback prompt 머리에 governance/defensive 컨텍스트 1줄 명시",
      "long doctrine block 은 task md 에서 읽도록 위임"
    ]
  },
  "task_2640_preventive_cancel": {
    "fallback_id": "3C198093",
    "action": "선제 cancel (PR #143 merge 전이라도 동일 패턴 refusal 방지)",
    "rationale": "task-2640 prompt 도 동일 키워드 (SELF_COLLECTOR/credential/admin override) 포함 → 회장 verbatim doctrine 그대로 → fallback auto-fire 시 동일 refusal 확률 높음",
    "result": "cancel status=ok · auto-fire 0",
    "outcome": "정상 진행 (PR #143 open · CI 진행 중)"
  },
  "hardening_candidate_proposals": [
    {
      "id": "C1",
      "title": "merge confirmation → fallback cancel 자동 트리거 결선",
      "scope": "ANU collector / dispatch / cokacdir cron-cancel 정확 결선 점검. PR merge event 감지 → 해당 parent task fallback id lookup → --cron-remove 호출",
      "risk": "MEDIUM (실시간 동작 검증 필요 · 잘못된 cancel 시 정상 safety-net 손상)",
      "blocker": "현재 fallback metadata 에 parent task / parent PR 연결 필드 부재 (확인 필요)"
    },
    {
      "id": "C2",
      "title": "fallback prompt 본문 verbatim 키워드 제거 + task md 위임",
      "scope": "fallback prompt body 에 \"SELF_COLLECTOR/credential/admin override\" 등 cyber-content trigger 키워드 인라인 금지 · task md 경로 + sha256 + ≤2800자만 권장 (cron PROMPT 4096 한계 + Usage Policy fp 양쪽 회피)",
      "risk": "LOW (prompt 본문 축약만 · 동작 영향 0)"
    },
    {
      "id": "C3",
      "title": "fallback governance/defensive context 머리 1줄 명시",
      "scope": "fallback prompt 최상단에 \"본 작업은 governance/defensive 보안 task. 공격적 의도 0.\" 1줄 추가 → 모델 측 컨텍스트 인식 향상",
      "risk": "LOW (효과 검증 필요)"
    },
    {
      "id": "C4",
      "title": "cancel-on-success metadata 표준화",
      "scope": "fallback cron 등록 시 metadata 에 parent_task_id / parent_pr_number / cancel_on_event 필드 표준화 → cron-list 상 일반 cron 과 구분 + collector 가 cancel 정확 lookup",
      "risk": "LOW (metadata schema 확장만)"
    }
  ],
  "chair_decision_pending": "회장 결정 대기 (별도 task 발행 여부 + 우선순위)",
  "task_2640_pr_143_isolation": {
    "isolation_status": "독립 기록 · PR #143 본 진행과 섞이지 않음",
    "pr_143_body_mention": "회장 결정 verbatim 에 따라 PR #143 본문에 '부수 사고 박제' 1줄 명기 · 본 hardening 작업은 별도 task",
    "chair_directive_verbatim_260523": "task-2639 fallback 4CC351FE auto-fired 및 policy refusal 건은 PR #143과 섞지 말고 cancel-on-success doctrine 개선 후보로 별도 기록하라. task-2640 fallback 3C198093 선제 cancel은 적절했다."
  },
  "related_memory": [
    "feedback_dispatch_must_register_fallback_safetynet_260520.md",
    "feedback_no_dual_purpose_watcher_260520.md",
    "feedback_cron_prompt_4096_limit_260517.md",
    "feedback_callback_self_key_helper_not_wired_260521.md",
    "audit_self_collector_enforcement_gap_260523.md",
    "task_2639_SNAPSHOT_CROSSREF_MERGED_260523.json"
  ]
}
