{
  "schema": "task24-regenerate-lineage-repair-v1",
  "status": "READY_FOR_TASK24_REGENERATE_RECOVERY",
  "scope": {
    "live_profile_mutations_by_repair": 0,
    "live_service_restarts_by_repair": 0,
    "telegram_callbacks_or_messages_by_repair": 0,
    "provider_requests_by_repair": 0,
    "customer_deliveries_by_repair": 0,
    "commits_pushes_or_release": 0
  },
  "root_cause": {
    "seam": "NutritionCoachingCoordinator.request_draft_regeneration -> DraftGenerationWorker.claim_draft_generation",
    "defect": "the request persisted only the child request; first worker claim created an unparented root pending generation",
    "repair": "persist the child pending generation with the held parent token and held parent record digest before any worker claim"
  },
  "regression_contract": {
    "real_telegram_handler": "a normal Owner Regenerate creates exactly one immutable child whose draft projection and generation lineage bind the immediate held parent token/tip",
    "edit_contract": "a normal Owner Edit creates an immutable child bound to the regenerated draft/token",
    "no_historical_rewrite": true
  },
  "offline_verification": {
    "focused_persistence_regression": "1 passed, 161 deselected",
    "disposable_real_handler_matrix": "1 passed",
    "matrix_counts": {
      "provider_request_count": 1,
      "new_draft_count": 2,
      "new_review_card_count": 2,
      "customer_send_count": 1,
      "delivery_receipt_count": 1,
      "delivery_status": "sent_audited",
      "stale_repeat_wrong_role_extra_delivery_count": 0
    },
    "network_isolation": "bubblewrap-unshare-net with PTB and OpenAI HTTP boundary mocks",
    "live_profile_integrity": "unchanged during final disposable matrix",
    "ruff_and_diff_check": "PASS",
    "reproducible_wheel_sha256": "231015faefda6d4d146a02e393b29922a6ecf5d7693d2e71396c184a0ccd491e",
    "ty": "new lineage region and new Task24 harness files clean; source-wide check remains blocked by pre-existing profile-local import and legacy diagnostics"
  },
  "source_sha256": {
    "gateway/platforms/nutrition_coaching.py": "2d10de01391b02228eb17625b6cfd3c01ee0be0219d417b19b355af9f3e6eb09",
    "tests/gateway/task24_preflight_harness.py": "72aca6118411a5c787cad2f910989bdea1f7df4c6b27443439eb4b940a2b6445",
    "tests/gateway/test_task24_preflight_integration.py": "f41b15345fa9510609683b0626b2ddb8db133c15c00d5a6c4a87c3ce6f369245",
    "tests/gateway/test_nutrition_coaching.py": "300ffb1750c00ab126a3bc8120dbd136f641a0ad9fb09dbae2283b27333e9bfd"
  },
  "live_recovery_precondition": {
    "current_owner_card_message_id": 154,
    "current_token": "7fa2b209eb5de478827d649ee81c3f0f",
    "current_card_state": "published",
    "current_generation_state": "draft_created",
    "delivery_count": 0,
    "provider_receipt_count": 2,
    "historical_malformed_card_preserved": true
  },
  "forward_only_recovery": {
    "authenticated_owner_action": "On Owner-DM message 154 only, press 수정 once, then send the exact one-line edit text in the same Owner DM.",
    "exact_edit_text": "현재 계획을 유지하며 다음 기록을 확인하겠습니다.",
    "expected_durable_result": "one new immutable edited child with parent_draft_id and generation lineage bound to token 7fa2b209eb5de478827d649ee81c3f0f; card 154 becomes historical/superseded; one new current card is published",
    "provider_or_customer_delivery_before_or_during_recovery": 0,
    "forbidden_controls": ["재생성", "승인", "고객에게 보내기"],
    "requires_live_code_deployment": false,
    "note": "This recovery uses the existing authenticated Edit successor path. The new Regenerate repair remains un-deployed; do not use Regenerate again until a separately authorized controlled code deployment."
  }
}
