{
  "task_id": "task-2478",
  "captured_at": "2026-05-07T17:53:18.434530",
  "source": "memory/tasks/task-2478.md",
  "source_sha256": "2701e2f9cd144a9e71c037279427fbf402c12a3a4253d719a4d31bd572cc465f",
  "allowed_resources": {
    "paths": [
      "scripts/taskctl.py",
      "scripts/taskctl/**",
      "scripts/pr_open_*.py",
      "utils/blast_radius_parser.py",
      "tests/scripts/test_taskctl_pr_open*.py",
      "tests/scripts/test_blast_radius*.py",
      "memory/tasks/task-2478*",
      "memory/reports/task-2478*",
      "memory/plans/tasks/task-2478/**",
      "memory/events/task-2478*"
    ],
    "forbidden_paths": [
      "server/conftest.py",
      "server/tests/conftest.py",
      "server/tests/test_main.py",
      "src/app/keyword-analysis/**",
      "server/main.py",
      "server/scripts/keyword_pool_refresh.py",
      "server/tests/test_keyword_pool_refresh.py",
      "scripts/finish-task.sh",
      "scripts/done-watcher.sh",
      "utils/silent_corruption_guard.py",
      "utils/audit_chairman_recovery.py",
      "utils/gemini_gate_validator.py",
      "utils/recoverable_block_classifier.py",
      "utils/state_repair.py",
      "utils/review_thread_guard.py",
      "memory/specs/allowed_bot_accounts.json",
      "memory/specs/allowed_approvers.json",
      "memory/orchestration-audit/admin-override.jsonl",
      ".env.keys",
      ".secrets/**",
      ".gitignore",
      "memory/capabilities/**"
    ],
    "forbidden_actions": [
      "GitHub 권한/branch protection 우회 로직 추가 금지",
      "PR 생성 외 merge 로직 건드리지 않기",
      "task-2477 merge chain 차단 금지 (독립 브랜치)",
      "task-2475 / 2476 / 2472 영역 침범 금지",
      "admin override 금지",
      "보고서만으로 완료 금지",
      "테스트 없는 fix 금지",
      "git push --force 금지"
    ],
    "bot_authentication": [
      "BOT_GITHUB_TOKEN .env.keys 자동 로드 (50분마다 systemd timer 자동 갱신)",
      "PR author = jeon-jonghyuk-taskctl-bot[bot]"
    ],
    "merge_policy": "★ 독립 브랜치 진행 → required CI PASS → green path 자동 머지. task-2477 chain 차단 금지",
    "ttl_hours": 3
  }
}