{"tasks":[{"task_id":"stripe_v18_invoice_field_rename","difficulty":"easy","layer":1,"language":"python","n_breaking_changes":1,"description":"Easy migration: Stripe Billing API renamed customer_email to customer_contact_email."},{"task_id":"slack_auth_revoke_deprecation","difficulty":"medium","layer":1,"language":"python","n_breaking_changes":2,"description":"Migrate a Python Slack logout helper across the deprecation of /auth.revoke in favor of /admin.tokens.revoke with a required scope parameter."},{"task_id":"github_pat_token_to_bearer","difficulty":"medium","layer":3,"language":"python","n_breaking_changes":1,"description":"Migrate a Python GitHub client across the deprecation of Authorization: token <pat> in favor of Authorization: Bearer."},{"task_id":"twilio_messages_v2_restructure","difficulty":"hard","layer":3,"language":"python","n_breaking_changes":2,"description":"Migrate a Python Twilio messaging client across the v2 messaging namespace move and the new nested response shape."},{"task_id":"stripe_v22_to_v23_webhook_signature","difficulty":"hard","layer":3,"language":"javascript","n_breaking_changes":2,"description":"Migrate a Node.js Stripe webhook verifier across the v2024-04-10 release. Webhook signing changed from sha256 to a versioned scheme; signing_version is now a required field on responses."},{"task_id":"synth_easy","difficulty":"easy","layer":2,"language":"python","n_breaking_changes":-1,"description":"Synthetic easy difficulty (random per reset)"},{"task_id":"synth_medium","difficulty":"medium","layer":2,"language":"python","n_breaking_changes":-1,"description":"Synthetic medium difficulty (random per reset)"},{"task_id":"synth_hard","difficulty":"hard","layer":2,"language":"python","n_breaking_changes":-1,"description":"Synthetic hard difficulty (random per reset)"},{"task_id":"real_random","difficulty":"varies","layer":1,"language":"python","n_breaking_changes":-1,"description":"47 real (v1,v2) pairs from scraped Stripe/GitHub/Twilio/Slack/OpenAI specs"}]}