{
  "schema": "envelope_drift_hardening_candidate.v1",
  "ts_kst": "2026-05-23 13:10 KST",
  "task_source": "task-2638-b1-pilot dev6 페룬 self-report",
  "classification": "ENVELOPE_SELF_REPORT_DRIFT_VS_ACTUAL_REGISTRATION",
  "critical7_status": "NOT_APPLICABLE (drift signal only · 산출물 정상)",
  "observed_drift": {
    "envelope_payload_self_report": {
      "registration_status": "NOT_REGISTERED",
      "callback_delivery_status": "PENDING",
      "collector_receipt_status": "UNCONFIRMED"
    },
    "actual_observed_reality": {
      "cron_callback_actually_fired": true,
      "cron_schedule_id": "CDD742F2",
      "anu_collector_session_spawned": true,
      "callback_received_by_chair": true,
      "callback_delivery_status_actual": "DELIVERED",
      "collector_receipt_status_actual": "RECEIVED (chair acknowledged)"
    },
    "root_cause_hypothesis": "build-then-register-then-update 순서가 task-2638 dispatch 단계에서 완전히 적용되지 않음 (task-2635+1 정정 패턴 부분 누락). registrar 호출 후 envelope payload 의 5축 필드 갱신이 누락 또는 build 시점 seed 그대로 sendfile."
  },
  "scope_decision": "본 envelope drift 는 B1 PR (#141) 의 blocker 아님 · PR #141 산출물 자체는 정상 (INDEX.md doc-only · regression 156/156) · 별도 hardening 후보로 분리",
  "separate_hardening_candidate": {
    "candidate_id": "callback_envelope_payload_drift_v2",
    "rationale": "task-2635+1 (PR #138) 의 build-then-register-then-update 정정 + task-2636 (PR #139) 의 canonical_root 직교 도입 후에도 self-report drift 재발 신호. 5축 schema validator (utils/callback_envelope_schema.py) 차원 검출 못 한 케이스 (envelope-level 자가 보고 vs 실제 cron registry 교차 검증 미적용).",
    "proposed_hardening_layers": [
      "Layer 1: registrar 호출 시 register-after-update 순서 강제 (build-then-register-then-update doctrine 코드 enforce 강화)",
      "Layer 2: envelope payload 의 self-reported status 와 cron-registry 의 actual schedule_id 실측 교차 검증 (validate_envelope 확장)",
      "Layer 3: 모순 조합 추가 검출 — registration_status=NOT_REGISTERED + cron_schedule_id (envelope 외 source 에서 매칭) → FAIL",
      "Layer 4: cron-registry side-channel verification helper (utils/cron_registry_cross_check.py 후보) — envelope payload 단일 source 신뢰 차단",
      "Layer 5: regression fixture 'envelope_self_report_drift_vs_actual_registration' 추가"
    ],
    "estimated_scope": "신규 helper 1 + schema 확장 1 + fixture 1 + regression 1 = ~4~6 files · production code 영향 정확히 1 schema 함수 추가",
    "chair_decision_pending": [
      "본 hardening task 발행 시점 (B1 pilot 완결 후 vs 별도 회장 결정)",
      "Layer 4 cron-registry cross-check helper 의 cokacdir API 사용 권한 (read-only --cron-history 기반 검증 권장)",
      "fixture 데이터 source (현재 task-2638 dev6 envelope 실측 vs 합성)"
    ]
  },
  "non_blocking_for_b1_pilot": true,
  "carry_forward_doctrine": [
    "feedback_normal_callback_not_registered_variant_260523.md (task-2634 사고 박제)",
    "system_normal_callback_registration_implementation_spec_260523.md §4 (register-after-update)",
    "system_normal_callback_registration_enforcement_spec_260523.md (read-only triage)",
    "task_2635_NORMAL_CALLBACK_REGISTRATION_ENFORCEMENT_MERGED_260523.json (PR #138 머지 - 5축 schema)"
  ],
  "next_step": "회장 결정 대기 — B1 PR #141 머지 후 발행 vs 즉시 별도 task spec 작성"
}
