# config/runtime_event_enactor.yaml
# task-2553+55 — bounded runtime-event enactor configuration (회장 결정).
#
# The enactor consumes +54 runtime-event-loop proposal candidates and enacts
# ONLY authorized bounded actions. This config is declarative reference for
# the runner; the structural enforcement lives in code (allowlist gate,
# +49 owner/key guard, additive-only idempotency) — config never relaxes a
# code-enforced invariant.
schema: anu_v3.runtime_event_enactor.config.v1

# ── identity (회장 §9 — +49 코드 강제 정본) ─────────────────────────────────
anu_key: c119085addb0f8b7            # the ONLY legitimate collector/owner key
executor_self_key: a999e2ea4c06d2fb  # dev7 이참나 — MUST never own a callback
chat_id: "6937032012"

# ── progress trigger (회장 §2.10 / §6) ──────────────────────────────────────
# The ONLY accepted progress trigger. A dead-man / fixed-time / fallback
# source is a hard FAIL (FORBIDDEN_TRIGGER_SOURCE) — never a progress driver.
accepted_progress_trigger: registry_completed_event
forbidden_progress_triggers:
  - fixed_time_gate
  - dead_man_fallback
  - fallback_progress

# ── proposal types (회장 §2.2) ──────────────────────────────────────────────
proposal_types:
  - consolidated_summary
  - closeout_candidate
  - next_dispatch_candidate
  - hold_packet

# ── track boundary (회장 §3 / §8) ───────────────────────────────────────────
tracks:
  A_final_consolidated_closeout:
    enact: true
    mode: additive_artifact_only      # 신규 파일만; 기존 산출물 무수정
    merge: false
    pr: false
    branch_write: false
    credential_op: false
    dispatch: false
  B_next_dispatch_safety_gate:
    enact: false                      # verify-only
    promote_to_actual_dispatch: false # chair-grant only — never set here
    triple_required:                  # 회장 §2.6
      - anu_key_owner
      - owner_key_guard_plus49
      - callback_mandatory_contract
  C_hold_packet_routing:
    enact: false                      # verify-only routing
    route_to: independent_anu_hold_lane

# ── default blocked targets (회장 §2.7 / §6) ────────────────────────────────
blocked_by_default:
  - merge
  - pull_request
  - credential
  - owner_pat
  - branch_write
  - main_write
  - self_dispatch
  - self_collector

# ── write surface = §4 expected_files allowlist ONLY ────────────────────────
write_allowlist:
  - memory/events/task-2553.final-consolidated-closeout_260518.json
  - memory/events/task-2553+55.decision.json
  - memory/events/task-2553+55.enactor-result.json
  - memory/events/task-2553+55.result.json

# ── inputs (read-only consume — byte-0) ─────────────────────────────────────
inputs:
  loop_result: memory/events/task-2553.runtime-event-loop-result_260518.json
  durable_registry: memory/events/callback_4tuple_index.jsonl   # +44 byte-0
  reuse_single_sources_of_truth:
    - anu_v3.proposal_authorization_gate
    - anu_v3.enactor_idempotency
    - anu_v3.callback_owner_validator        # +49
    - anu_v3.self_collector_guard            # +49
    - anu_v3.authoritative_verdict_selector  # +49
    - anu_v3.runtime_event_loop              # +54 (read-only consume)

idempotent: true
authority: none
auto_executed: false
