{
  "schema": "callback_prompt_byte_telemetry.v1",
  "ts_kst": "2026-05-20 22:00 KST",
  "purpose": "callback cron prompt UTF-8 byte 수와 발사 성공/실패 상관관계를 append-only 누적 관측. runtime guard 구현 전 단계 통계 근거 확보.",
  "storage_format": "JSONL append-only · 한 라인 = 한 dispatch 의 callback 관측 1건",
  "storage_path_convention": "memory/events/callback_prompt_byte_telemetry_YYMMDD.jsonl  (일별 누적, daily roll-over 또는 누적 1 파일 둘 다 허용 — 회장 결정)",
  "append_only_invariant": "기존 라인 byte-0 prefix 유지 · 본 schema 위반 라인 추가 금지 · 본 파일 자체는 schema 만 기록(데이터 누적 아님)",
  "record_fields_required": {
    "ts": "ISO8601 timestamp of dispatch (e.g. 2026-05-20T19:01:34+09:00)",
    "task_id": "task-NNNN[+N] dispatch identifier",
    "dispatch_cron_id": "cokacdir cron id (e.g. 47B928B5) — bot executor cron",
    "executor_key": "dev key (e.g. 1e41a2324a3ccdd0 = dev6 페룬)",
    "owner_key_for_callback": "c119085addb0f8b7 (ANU key) — required",
    "callback_role": "normal | fallback_safety_net",
    "callback_cron_id": "ID of callback cron if successfully registered, null otherwise",
    "callback_prompt_utf8_bytes": "측정 명령: printf '%s' \"$P\" | wc -c · ★ NOT wc -m",
    "callback_prompt_chars": "참고용 자수(len()) — 측정 단위는 bytes 우선",
    "callback_fire_status": "REGISTERED_FIRED_OK | REGISTERED_FIRE_FAILED | NOT_REGISTERED_CALLBACK_PROMPT_TOO_LARGE | NOT_REGISTERED_OTHER | NO_ATTEMPT | UNKNOWN",
    "callback_observed_via": "schedule_history | cron-history | cron-list | not_observable",
    "thresholds_evaluated": {
      "under_recommended_2800_3200": "bool",
      "between_3201_3500": "bool",
      "warning_3501_3900": "bool",
      "hardlimit_violation_over_3900": "bool"
    },
    "envelope_only_compliance": "true | false | partial (callback prompt 가 envelope 외 긴 보고 포함 시 false)",
    "result_path_in_envelope": "path/to/result.json | absent",
    "decision_path_in_envelope": "path/to/decision.json | absent",
    "report_path_in_envelope": "path/to/report.md | absent",
    "sha256_in_envelope": "deliverable sha256(s) included | absent",
    "one_line_summary_in_envelope": "string | absent",
    "fallback_safety_net_registered": "bool (mandatory contract — 별도 cron)",
    "fallback_safety_net_cron_id": "string | null",
    "fallback_safety_net_role_single_purpose": "true (recovery-only) | false (dual-purpose violation)",
    "idle_gap_minutes": "executor 완료 ~ collector spawn 사이 분(0=정상 즉시 발사·>0=callback miss 또는 grace)",
    "idle_gap_recovery_path": "normal_callback_immediate | fallback_safety_net_recovery | live_anu_manual | not_recovered_yet",
    "deliverable_total_size_bytes": "task 산출물 총 size hint (callback prompt 가 풍부 요약 시도 가능성 proxy)",
    "notes": "관측자 free-text 비고(예: 'prompt truncated by 4KB cap', 'visible response ended mid-narration')"
  },
  "record_fields_optional": {
    "executor_self_key_attempted_in_callback": "bool — fail-closed 검증",
    "byte_measurement_command": "printf '%s' \"$PROMPT\" | wc -c",
    "envelope_template_used": "string — envelope template id if standardized"
  },
  "thresholds_applied": {
    "recommended_target_bytes": "2800 ~ 3200",
    "warning_threshold_bytes": 3500,
    "hard_limit_bytes": 3900,
    "absolute_cokacdir_drop_bytes": 4096
  },
  "downstream_analysis_when_n_samples_reached": {
    "trigger_at_samples": 10,
    "analysis_owner": "independent ANU (read-only)",
    "deliverable_after_analysis": "memory/events/callback_prompt_byte_correlation_analysis.json — byte 분포 vs success rate · 분기점 정량 추정 · 회장 보고",
    "guard_implementation_decision_owner": "chair (회장) — read-only 분석 결과 검토 후 별도 chair-authorized task 로 진행 여부 결정"
  },
  "scope_anchors": [
    "feedback_cron_prompt_4096_limit_260517 강화 절(2026-05-20 inbound)",
    "autoset/CLAUDE.md 위임 절차 7번",
    "anu-guide.md §3.9 inbound byte-limit"
  ]
}
