{
  "_comment": "task-2563 §2 1:1: owner_trigger http_post signature 3 caller path 동일성 회귀 fixture.",
  "_scenario": "OwnerTriggerOnly._http_post Callable signature contract: (method, path, body, headers).",
  "signature_contract": {
    "callable_type": "Callable[[str, str, dict, dict], dict]",
    "positional_args_count": 4,
    "positional_args": [
      {
        "index": 0,
        "name": "method",
        "type": "str",
        "expected_value": "POST"
      },
      {
        "index": 1,
        "name": "path",
        "type": "str",
        "expected_pattern": "^/repos/[^/]+/[^/]+/issues/\\d+/comments$"
      },
      {
        "index": 2,
        "name": "body",
        "type": "dict",
        "expected_value": {"body": "/gemini review"}
      },
      {
        "index": 3,
        "name": "headers",
        "type": "dict",
        "required_keys": ["Authorization", "Accept", "X-GitHub-Api-Version"]
      }
    ],
    "return_type": "dict",
    "keyword_args_count": 0
  },
  "caller_paths": [
    {
      "label": "path_1_direct_call",
      "description": "OwnerTriggerOnly.trigger_gemini_review() 직접 호출",
      "via": "anu_v2.owner_trigger_only.OwnerTriggerOnly.trigger_gemini_review",
      "expected_call_count": 1
    },
    {
      "label": "path_2_scheduler_invoke",
      "description": "invoke_from_scheduler(runner, ...) 어댑터 경유",
      "via": "anu_v2.owner_trigger_only.invoke_from_scheduler",
      "expected_call_count": 1
    },
    {
      "label": "path_3_wrapper_di_mock",
      "description": "외부 wrapper/DI mock 으로 http_post 를 감싸 호출 → 내부 callable 도 4-arg 위치인자로 invoke",
      "via": "custom callable wrapping http_post passed via http_post= constructor",
      "expected_call_count": 1
    }
  ],
  "regression_assertions": [
    "all 3 caller paths call http_post with exactly 4 positional args (method, path, body, headers)",
    "no caller path uses keyword args for http_post invocation",
    "method positional == 'POST' for all 3 paths",
    "body positional == {'body': '/gemini review'} for all 3 paths",
    "headers positional contains 'Authorization' key for all 3 paths",
    "extra positional arg or missing arg MUST cause test FAIL"
  ],
  "expected_invariants": {
    "signature_arity": 4,
    "chat_notifications": 0,
    "audit_records_per_call": 2
  }
}
