{
  "schema": "task.replacement_lineage.v1",
  "task_id": "task-2550+1",
  "issued_at_kst": "2026-05-12",
  "predecessor_chain": [
    {
      "task_id": "task-2550",
      "pr_number": 100,
      "head": "4067d8c43833155f5ea626255645549602a23bbb",
      "classification": "IMPLEMENTATION_SPEC_INCOMPLETE",
      "reason": "Gemini fresh review (head 4067d8c4) 6 unresolved findings (HIGH 1 + medium 4 unique + duplicate 1) — task_id substring 오탐 / hash 비결정론 / pgrep CWD 누락 / cleanup_candidates dry-run 가시성 상실. capability+safety 본질 결함.",
      "operational_defect_separate": "STATE_FILE_MISSING (finish-task.sh state file 생성 로직 누락) — 별도 follow-up task, 본 task-2550+1 에서는 처리 X"
    }
  ],
  "current": {
    "task_id": "task-2550+1",
    "base_sha": "bf59e7d2c26baee692600bdfd4abd647b33748b3",
    "base_ref": "origin/main",
    "branch": "task/task-2550+1-dev5",
    "rationale": "회장 §명시 2026-05-12 KST — PR #100 6 unresolved findings 의 clean replacement (same-PR push doctrine 위반 방지). PR #100 보존 (failed original evidence)."
  },
  "owner_directive_pinned": true,
  "owner_directive_text": "task-2550+1 dispatch 승인 (Lv.4 control-plane security/correctness). HIGH task_id 부분 일치 차단 + medium 4 fix + boundary/concurrency test. dry-run only. .worktrees 실제 삭제 0.",
  "chain_policy": {
    "auto_chain_limit_hit": false,
    "next_step_on_failure": "OWNER_DECISION_REQUIRED (자동 task-2550+2 발행 X)"
  },
  "unresolved_to_resolved_mapping": {
    "high_1_task_id_substring_oversight": {
      "predecessor_location": "worktree_cleanup.py:147 (PR #100 baseline)",
      "fix": "_matches_task_id_strict regex 경계 + _extract_task_id 동등 비교 두 단 게이트",
      "test_evidence": "test_high_boundary_* (8 sub-tests) + test_safety_2_strict_match_* (3 sub-tests) + test_pr100_high_unresolved_regression_bug_blocked"
    },
    "medium_1_hash_nondeterminism": {
      "predecessor_location": "worktree_cleanup.py:418 (PR #100 baseline)",
      "fix": "hashlib.sha256(path)[:8] 결정론 hash",
      "test_evidence": "test_medium_1_log_filename_uses_deterministic_sha256 + test_medium_1_different_paths_yield_different_hashes + test_concurrency_log_filename_stable_under_pythonhashseed"
    },
    "medium_2_pgrep_cwd_blindness": {
      "predecessor_location": "worktree_cleanup.py:227 (PR #100 baseline)",
      "fix": "lsof +D <path> 추가 AND 게이트",
      "test_evidence": "test_medium_2_safety_5_lsof_match_fails + test_medium_2_safety_5_lsof_no_match_passes + test_medium_2_safety_5_lsof_unknown_rc_fails_conservatively + test_medium_2_safety_5_pgrep_match_short_circuits_before_lsof"
    },
    "medium_3_cleanup_candidates_dry_run_invisible": {
      "predecessor_location": "post_merge_smoke_runner.py:541 (PR #100 baseline)",
      "fix": "is_safe_ignoring_apply helper (worktree_cleanup) — safety 1~5 PASS + not main + not dirty 로 candidate 산정 (apply_explicit 단독 분리)",
      "test_evidence": "test_medium_3_is_safe_ignoring_apply_* (4 sub-tests) + test_medium_3_dry_run_cleanup_candidates_* (2 sub-tests)"
    },
    "medium_4_duplicate_dedupe": {
      "note": "MED-3 의 duplicate (PR #100 5번째 findings) — MED-3 과 통합 처리, 별도 fix 미발생",
      "dedupe_evidence": "gemini_triage_decision.json triage_policy_pinned section"
    }
  },
  "pr_100_preserved": {
    "preserve_original_evidence": true,
    "original_head_unchanged_assertion_required_after_merge": "4067d8c43833155f5ea626255645549602a23bbb",
    "close_safe_audit_followup": "task-2550+1 MERGED 후 별도 진행"
  }
}
