{
  "command": "scripts/taskctl.py verify task-2561 --machine",
  "actor": "jay <282130200+jeon-jonghyuk-taskctl-bot[bot]@users.noreply.github.com>",
  "timestamp": "2026-05-12T16:00:52Z",
  "pid": 2900754,
  "guard_sh_result": "FAIL",
  "qc_report_guard_result": "FAIL",
  "hidden_path_audit": {
    "result": "PASS",
    "violations": [],
    "warnings": [
      "anu_v2/replacement_pr_runner.py:214:          5. gh pr create",
      "anu_v2/replacement_pr_runner.py:333:        # 6. gh pr create (admin / force / rebase 사용 X)",
      "anu_v2/replacement_pr_runner.py:428:    \"\"\"`gh pr create` stdout 에서 PR 번호 추출. URL 마지막 path segment.",
      "scripts/auto_revert.py:11:    3. push + gh pr create",
      "scripts/auto_revert.py:87:            pr_url = f\"gh pr create 실패: {e}\"",
      "scripts/safe_cron_dispatch.py:166:    \"3. PR 생성 (gh pr create — 본문에 expected_files / 회귀 / 영향 범위 포함)\\n\"",
      "scripts/worktree_manager.py:858:        # task-2467: 직접 gh pr create 폐기 → taskctl pr-open --auto 호출",
      "scripts/worktree_manager.py:869:        # task-2467: 직접 gh pr create 폐기 → taskctl pr-open --auto 호출",
      "scripts/anu_confirm_bot/config.py:13:GH_REPO = os.environ.get(\"GH_REPO\", \"JonghyukJeon/workspace\")  # gh pr merge 대상",
      "scripts/anu_confirm_bot/main.py:108:    \"\"\"gh pr merge 호출. GitHub API가 직렬화 보장.",
      "scripts/anu_confirm_bot/main.py:111:    Lock-in 2 Hard stop: 가드 실패 시 gh pr merge subprocess 진입 0회 보장.",
      "scripts/lock_in_verify.py:11:       - guard.sh subprocess.run(...)이 *모든* gh pr merge 호출보다 line-number 기준 먼저",
      "scripts/lock_in_verify.py:27:        # task-2449 Fix 5: gh pr merge 직접 호출 → taskctl merge 라우팅으로 변경.",
      "scripts/safe_cron_dispatch.py:17:  5. owner_pat fallback 가능성 (gh pr merge 명령에 GH_TOKEN=$BOT_GITHUB_TOKEN 미설정) → BLOCK",
      "scripts/safe_cron_dispatch.py:170:    \"7. bot identity merge (GH_TOKEN=$BOT_GITHUB_TOKEN gh pr merge — owner_pat fallback 금지)\\n\"",
      "scripts/safe_cron_dispatch.py:276:    \"\"\"``gh pr merge`` 등장 + ``GH_TOKEN=$BOT_GITHUB_TOKEN`` 미설정 → True.",
      "scripts/safe_cron_dispatch.py:355:    # 5. owner_pat fallback path (gh pr merge 동반 + bot token injection 누락) → BLOCK",
      "scripts/safe_cron_dispatch.py:441:    # footer에 `GH_TOKEN=$BOT_GITHUB_TOKEN gh pr merge` 같은 모범 패턴이 포함되어 있으면",
      "scripts/worktree_manager.py:1013:            # task-2467: gh pr merge 직접 호출 폐기 → taskctl merge 라우팅 안내",
      "utils/bot_merge_identity.py:477:    \"\"\"`gh pr merge --delete-branch ...` 호출이 process-local GH_TOKEN 주입을",
      "utils/bot_merge_identity.py:482:      `gh pr merge --squash --delete-branch` 한 번 호출로 머지+삭제가",
      "utils/bot_merge_identity.py:486:      - args에 `gh pr merge` 가 포함",
      "utils/recoverable_block_classifier.py:105:        merge 실패 메시지 (gh pr merge 출력 등)."
    ]
  },
  "head_sha": "345b102025533702b6295785caa712d7b13f628c",
  "stdout": "",
  "stderr": "[pre-push-guard] task=task-2561\n[pre-push-guard] ERROR (fail-closed): task 파일에 ## allowed_resources 블록 없음\n",
  "exit_code": 1,
  "sha": "345b102025533702b6295785caa712d7b13f628c",
  "pr_number": 112
}