{
  "schema": "byte_guard_decision_proposal.v1",
  "track": "Track B — CALLBACK_BYTE_GUARD_DECISION_PREP",
  "ts_kst": "2026-05-21 04:25 KST",
  "mode": "proposal-only · runtime guard 즉시 구현 금지 · 회장 결정 대기",
  "purpose": "runtime byte guard 구현 여부 결정 입력. 3500 warning / 3900 hard limit / file-envelope 전환 / CALLBACK_PROMPT_TOO_LARGE fail-closed 설계 정합",
  "decision_inputs": {
    "current_telemetry_status": "1/10 future samples accumulated (task-2622: callback 1134B / fallback 1193B · 둘 다 안전 범위)",
    "baseline_48_samples_max_observed": "2439 bytes (AFF5E154 task-2621 fallback recovery summary)",
    "warning_3500_observed": 0,
    "hard_limit_3900_observed": 0,
    "callback_miss_observed": "2 historical events (task-2612+3 · task-2621) · 직접 byte 측정 불가(실패 cron schedule_history 0)",
    "trigger_conditions_unmet_yet": true
  },
  "guard_design_when_implemented": {
    "step_1_measure": "byte_count = len(prompt.encode('utf-8'))  # ★ NOT len(prompt)",
    "step_2_classify": {
      "under_3200": "OK · no log",
      "3201_3500": "OK_NEAR_RECOMMENDED · log info",
      "3501_3900": "WARNING · log warn · 등록 진행(관측)",
      "3901_4096": "HARD_LIMIT_VIOLATION · 등록 금지 · fail-closed · file-envelope 전환 시도",
      "over_4096": "ABSOLUTE_DROP · 등록 금지 · CallbackPromptTooLarge raise"
    },
    "step_3_file_envelope_fallback": "prompt 3900+ 시: 긴 보고 본문을 memory/events/<task_id>.callback_envelope_body.json 에 분리 저장 · callback prompt 본문에는 파일 경로 + sha256 만 포함 → 최종 prompt < 2000B 강제 단축",
    "step_4_telemetry_record": "callback_prompt_byte_telemetry_YYMMDD.jsonl append-only 기록"
  },
  "fail_closed_semantics": {
    "exception_class": "CallbackPromptTooLarge (RuntimeError 서브)",
    "raise_conditions": "3900 hard 또는 4096 absolute 위반",
    "no_silent_drop_guarantee": "guard 도입 후 silent drop 0 — 등록 시도 자체가 가시 차단",
    "interaction_with_existing_assert_collector_key": "독립 호출 · 두 검사 모두 PASS 시에만 cron 등록"
  },
  "regression_fixture_design": [
    "F1: 800B ASCII → REGISTERED_FIRED_OK",
    "F2: 2500B 한글 혼합 → REGISTERED_FIRED_OK",
    "F3: 3600B → WARNING 분류 · 등록 진행 PASS",
    "F4: 4000B → HARD_LIMIT_VIOLATION fail-closed · CallbackPromptTooLarge raise · 등록 0",
    "F5: 4500B → ABSOLUTE_DROP fail-closed",
    "F6: 4000B 본문 → file-envelope 전환 → 최종 < 2000B 검증",
    "F7: executor self-key + byte violation 동시 → 두 fail-closed 모두 raise",
    "F8: normal callback / fallback safety-net 동일 guard 동등 적용",
    "F9: idempotency (guard 호출 후 부분상태 발생 시 retry safe)"
  ],
  "expected_files_candidate_when_chair_approves": [
    "anu_v3/dispatch_callback_contract.py (ADDITIVE helper · API 시그니처 byte-0)",
    "dispatch/normal_fallback_callback_helper.py (build_anu_owned_callback_request 에 ADDITIVE guard)",
    "tests/regression/test_callback_prompt_byte_guard.py (신규 · F1~F9 fixture)"
  ],
  "blast_radius": "MEDIUM — callback registration helper 직접 변경. PASS path 무영향(작은 prompt 그대로 통과) · 위반 시에만 fail-closed",
  "critical7_assessment": {
    "is_critical7": false,
    "rationale": "byte guard 도입 = defense-in-depth 강화 · SAFE 방향만 · permission/credential/forbidden-path/scope-expansion 활성 위반 0"
  },
  "decision_recommendation": "현재 10표본 누적 진행 · 표본 데이터에서 3500+ warning 또는 추가 callback miss 발생 시 회장 보고 → 별도 chair-authorized task 로 runtime guard 진행. 현재는 proposal-only 유지.",
  "auto_progress": false,
  "chair_approval_required": true,
  "next_check_trigger": "(a) 표본에서 3500+ warning 사례 (b) 추가 callback miss (c) 10표본 통계 분기점 확정"
}
