
    j              	          d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZ ddlmZmZ 	 	 	 	 dedd	dd
ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZg dZy)u  dispatch.prompt — task-2386 슬림 prompt facade (task-2388 Phase ε).

dispatch 패키지의 본체는 `dispatch/__init__.py`에 있다.
이 facade는 build_prompt + resume + project_map 영역의 함수만 노출한다.

★ task-2386 슬림 prompt 개선판 보존 — 본체 코드는 무변경.

★ task-2640 (회장 verbatim unfork #3) — prompt 생성 전 ``enforce_callback_owner``
+ ``validate_spawn_callback_contract`` guard 통과를 확인. prompt 텍스트만으로
callback 정책 전달되는 구조 차단. 신규 ``build_prompt_with_contract`` 가
build_prompt 를 감싸고 PASS 시에만 prompt 본문을 반환한다.
    )annotations)OptionalSequence)_inject_project_map_context_resolve_resumebuild_prompt)ANU_KEY_2553COLLECTOR_ROLE_ANUDEFAULT_ANU_KEYSPASSenforce_callback_owner)NO_OP_SPAWN_CONTRACT_FAILED validate_spawn_callback_contractNzspawn-contract-precheckzspawn-contract-precheck-normalT )anu_keydispatch_cron_idnormal_collector_cron_idfallback_callback_cron_idno_fallbackanu_keyschat_idc                  |t        |      nt        t              }t        ||||t        |
||	|dd||      }|j                  t
        k7  rJdd|j                  dt        |j                        t        |j                        t        |j                  |d	S t        | ||||||      }t        |||||      }|j                  t
        k7  rTd||j                  |j                  t        |j                        t        |j                        t        |j                  |d	S d	||j                  |j                  g d
g|j                  |dS )u  prompt 생성 전 callback contract 정합성 enforce guard 적용.

    Two-stage gate (텍스트+코드 이중 안전, task md ANCHOR-4):
      1. ``enforce_callback_owner`` — owner 4-tuple 검증 (collector_role=ANU,
         owner != executor, owner is independent ANU key).
      2. ``validate_spawn_callback_contract`` — 산출 prompt 본문이 anu_key
         텍스트 + collector_role + SELF_COLLECTOR/SENDFILE_ONLY/NOT_REGISTERED
         doctrine 토큰을 포함하는지 단언.

    enforce guard 가 PASS 일 때만 실제 build_prompt 호출 결과를 반환한다.
    FAIL 시 ``status: blocked`` + ``no_op_reason`` 반환 → 호출자는 spawn 진입
    자체를 차단해야 함.

    Returns:
        dict — {
            "status": "ok" | "blocked",
            "prompt": str | None,
            "enforce_verdict": str,
            "contract_verdict": str,
            "classifications": [..],
            "reasons": [..],
            "no_op_reason": NO_OP_SPAWN_CONTRACT_FAILED (blocked only),
        }
    NTzdispatch.core.main)task_idexecutor_keycollector_keycollector_owner_keycollector_roler   r   r   r   prompt_claims_anu_collector
entry_pathr   r   blocked)	statuspromptenforce_verdictcontract_verdictclassificationsreasonsno_op_reasonschemar   )team_id	task_descr   level
project_idchain_id	task_type)r   r   r   prompt_textr   oku   build_prompt_with_contract PASS — enforce_callback_owner + validate_spawn_callback_contract 양단 통과 (텍스트+코드 이중 안전).)r!   r"   r#   r$   r%   r&   r(   r   )tupler   r   r
   verdictr   listr%   r&   r   r(   r   r   )r)   r*   r   r+   r,   r-   r.   r   r   r   r   r   r   r   r   keysenforce_resultr"   contract_results                      @/home/jay/workspace/.worktrees/task-2723-dev2/dispatch/prompt.pybuild_prompt_with_contractr8       s~   T '25?>N8OD ,!#)!9";)$('N %-55 $#N$B$BCN2237$++

 
	
 F 7!O $&-55 / 7 7#O$C$CDO3347%,,

 
	
 )11+33_
 "((     )r   r   r   r8   )normalNNcoding) r)   strr*   r<   r   r<   r+   r<   r,   Optional[str]r-   r=   r.   r<   r   r<   r   r<   r   r<   r   r=   r   r=   r   boolr   zOptional[Sequence[str]]r   r<   returndict)__doc__
__future__r   typingr   r   dispatchr   r   r    dispatch.callback_owner_enforcerr	   r
   r   r   r   *dispatch.spawn_callback_contract_validatorr   r   r8   __all__ r9   r7   <module>rI      s   # % O O   $"t  5.N/3(,!ttt t 	t
 t t t t t t ,t  -t t &t  !t" 
#tnr9   