Spaces:
Sleeping
Sleeping
Improve environment depth: investigate action, cascading deps, rich observations, harder hard task
5f6895d | [ | |
| { | |
| "flag_name": "new_payment_processor", | |
| "description": "Routes payments through Stripe v3 API instead of legacy v1", | |
| "rollout_percentage": 0.75, | |
| "age_days": 90, | |
| "last_modified_days": 45, | |
| "owner": "payments-team", | |
| "owner_active": true, | |
| "num_code_references": 15, | |
| "has_dependencies": true, | |
| "dependent_flags": ["payment_retry_logic_v2"], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 95000, | |
| "in_active_experiment": false, | |
| "services": ["payment-service", "billing-service"], | |
| "code_snippet": "processor = StripeV3Client() if flags.get('new_payment_processor') else StripeV1Client()\nresult = processor.charge(amount, currency, token)", | |
| "last_commit_message": "feat: bump new_payment_processor to 75%", | |
| "pr_context": "PR #2500: Stripe v3 migration — phased rollout. V1 still needed for some enterprise accounts with custom integrations.", | |
| "related_incidents": ["INC-3200: Stripe v3 timeout spike at 60% rollout (resolved)"], | |
| "investigation_notes": "Had a timeout issue at 60% rollout (INC-3200) which was fixed. Currently stable at 75%. Enterprise accounts on V1 need migration tooling before going to 100%.", | |
| "correct_action": "keep", | |
| "explanation": "Only 75% rolled out with a dependent flag, cross-service — not ready for removal" | |
| }, | |
| { | |
| "flag_name": "payment_retry_logic_v2", | |
| "description": "Enables improved retry logic for failed payment transactions", | |
| "rollout_percentage": 0.75, | |
| "age_days": 85, | |
| "last_modified_days": 40, | |
| "owner": "payments-team", | |
| "owner_active": true, | |
| "num_code_references": 7, | |
| "has_dependencies": false, | |
| "dependent_flags": [], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 30000, | |
| "in_active_experiment": false, | |
| "services": ["payment-service"], | |
| "code_snippet": "retry_strategy = ExponentialBackoffV2() if flags.get('payment_retry_logic_v2') else LinearRetryV1()\nresult = retry_strategy.execute(payment_request)", | |
| "last_commit_message": "fix: adjust retry backoff multiplier for v2", | |
| "pr_context": "PR #2520: Retry logic v2 — coupled with new_payment_processor migration. Must match parent flag rollout percentage.", | |
| "related_incidents": [], | |
| "investigation_notes": "Tightly coupled to new_payment_processor. If parent is at 75%, this must stay at 75%. Rolling one without the other causes payment failures.", | |
| "correct_action": "keep", | |
| "explanation": "Depends on new_payment_processor, both at partial rollout — keep until parent is fully rolled out" | |
| }, | |
| { | |
| "flag_name": "user_profile_redesign", | |
| "description": "Enables new profile page layout with activity feed", | |
| "rollout_percentage": 1.0, | |
| "age_days": 200, | |
| "last_modified_days": 180, | |
| "owner": "derek.wong", | |
| "owner_active": false, | |
| "num_code_references": 22, | |
| "has_dependencies": true, | |
| "dependent_flags": ["profile_activity_feed", "profile_avatar_upload_v2"], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 150000, | |
| "in_active_experiment": false, | |
| "services": ["user-service", "frontend-web", "media-service"], | |
| "code_snippet": "const ProfilePage = flags.get('user_profile_redesign')\n ? React.lazy(() => import('./ProfileV2'))\n : React.lazy(() => import('./ProfileV1'));", | |
| "last_commit_message": "feat: profile redesign GA rollout to 100%", | |
| "pr_context": "PR #1900: Profile redesign by derek.wong (left company). Has child flags for activity feed and avatar upload. No migration plan documented.", | |
| "related_incidents": [], | |
| "investigation_notes": "derek.wong left 4 months ago. No handoff document. 2 dependent flags still reference this. Frontend-web team says they 'think it can be removed' but nobody has tested removing it.", | |
| "correct_action": "deprecate", | |
| "explanation": "Fully rolled out but has 2 dependent flags and owner left — deprecate, notify new owners, schedule cleanup" | |
| }, | |
| { | |
| "flag_name": "profile_activity_feed", | |
| "description": "Shows activity feed section on the new profile page", | |
| "rollout_percentage": 1.0, | |
| "age_days": 190, | |
| "last_modified_days": 170, | |
| "owner": "derek.wong", | |
| "owner_active": false, | |
| "num_code_references": 8, | |
| "has_dependencies": false, | |
| "dependent_flags": [], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 150000, | |
| "in_active_experiment": false, | |
| "services": ["user-service", "frontend-web"], | |
| "code_snippet": "// Only render if parent flag user_profile_redesign is also enabled\nif (flags.get('profile_activity_feed') && flags.get('user_profile_redesign')) {\n renderActivityFeed(userId);\n}", | |
| "last_commit_message": "feat: add activity feed to profile v2", | |
| "pr_context": "PR #1920: Activity feed — child of user_profile_redesign. derek.wong noted: 'remove together with parent flag'", | |
| "related_incidents": [], | |
| "investigation_notes": "Code explicitly checks parent flag. Must be cleaned up together with user_profile_redesign. Cannot be independently removed.", | |
| "correct_action": "deprecate", | |
| "explanation": "Fully rolled out, inactive owner, depends on parent flag — deprecate together with parent" | |
| }, | |
| { | |
| "flag_name": "profile_avatar_upload_v2", | |
| "description": "Enables new avatar upload flow with cropping and filters", | |
| "rollout_percentage": 0.9, | |
| "age_days": 120, | |
| "last_modified_days": 60, | |
| "owner": "media-team", | |
| "owner_active": true, | |
| "num_code_references": 6, | |
| "has_dependencies": false, | |
| "dependent_flags": [], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 40000, | |
| "in_active_experiment": false, | |
| "services": ["media-service", "frontend-web"], | |
| "code_snippet": "const uploader = flags.get('profile_avatar_upload_v2')\n ? new CroppingUploader({filters: true})\n : new BasicUploader();", | |
| "last_commit_message": "fix: avatar crop ratio on mobile devices", | |
| "pr_context": "PR #2100: Avatar upload v2 — media-team iterating on mobile crop UX. Blocked at 90% due to iOS Safari bug.", | |
| "related_incidents": ["INC-4100: Avatar upload broken on iOS Safari 17.2 (workaround applied)"], | |
| "investigation_notes": "Stuck at 90% due to iOS Safari bug (INC-4100). Media-team has a fix in PR #3300 but needs QA. Expected to go to 100% in 2 weeks.", | |
| "correct_action": "keep", | |
| "explanation": "90% rollout but not complete, still being iterated on by active team" | |
| }, | |
| { | |
| "flag_name": "api_response_compression", | |
| "description": "Enables gzip compression on API responses over 1KB", | |
| "rollout_percentage": 1.0, | |
| "age_days": 300, | |
| "last_modified_days": 290, | |
| "owner": "platform-team", | |
| "owner_active": true, | |
| "num_code_references": 4, | |
| "has_dependencies": false, | |
| "dependent_flags": [], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 500000, | |
| "in_active_experiment": false, | |
| "services": ["api-gateway", "backend-core"], | |
| "code_snippet": "app.use(conditionalMiddleware(\n () => flags.get('api_response_compression'),\n compression({threshold: 1024})\n));", | |
| "last_commit_message": "perf: enable response compression globally", | |
| "pr_context": "PR #1500: API compression — reduced bandwidth by 40%. Platform-team confirmed stable for 10 months.", | |
| "related_incidents": [], | |
| "investigation_notes": "Running for 10 months without issues. Compression is now the default behavior. Platform-team lead says: 'just remove the flag and hardcode compression on'.", | |
| "correct_action": "remove", | |
| "explanation": "Fully rolled out for 10 months across 2 services, no deps, active owner can confirm removal" | |
| }, | |
| { | |
| "flag_name": "ml_recommendation_v3", | |
| "description": "Uses ML model v3 for product recommendations instead of v2", | |
| "rollout_percentage": 0.5, | |
| "age_days": 60, | |
| "last_modified_days": 15, | |
| "owner": "ml-team", | |
| "owner_active": true, | |
| "num_code_references": 10, | |
| "has_dependencies": true, | |
| "dependent_flags": ["ml_embedding_cache"], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 200000, | |
| "in_active_experiment": true, | |
| "services": ["recommendation-service", "ml-inference"], | |
| "code_snippet": "model = load_model('rec_v3') if flags.get('ml_recommendation_v3') else load_model('rec_v2')\npredictions = model.predict(user_embedding, item_pool)", | |
| "last_commit_message": "experiment: adjust v3 model serving latency threshold", | |
| "pr_context": "PR #3100: ML rec v3 A/B test — comparing click-through rates. V3 uses new embedding model that requires ml_embedding_cache flag.", | |
| "related_incidents": [], | |
| "investigation_notes": "Active A/B test running for 4 weeks. Preliminary results show 8% CTR improvement but 15ms latency increase. ML-team discussing whether to accept the tradeoff.", | |
| "correct_action": "keep", | |
| "explanation": "Active A/B experiment at 50%, with dependencies, recently modified" | |
| }, | |
| { | |
| "flag_name": "deprecated_analytics_v1", | |
| "description": "Legacy analytics pipeline that sends events to old warehouse", | |
| "rollout_percentage": 0.02, | |
| "age_days": 500, | |
| "last_modified_days": 400, | |
| "owner": "data-team", | |
| "owner_active": true, | |
| "num_code_references": 30, | |
| "has_dependencies": false, | |
| "dependent_flags": [], | |
| "is_kill_switch": false, | |
| "has_active_incident": false, | |
| "usage_last_30d": 100, | |
| "in_active_experiment": false, | |
| "services": ["analytics-service", "event-bus", "data-warehouse"], | |
| "code_snippet": "// WARNING: dual-write to both old and new analytics\nif (flags.get('deprecated_analytics_v1')) {\n oldWarehouse.ingest(event); // BigQuery legacy\n}\nnewPipeline.ingest(event); // Snowflake", | |
| "last_commit_message": "chore: reduce analytics v1 to 2% for final validation", | |
| "pr_context": "PR #800: Analytics migration — data-team running final validation at 2%. 30 code references across 3 services need coordinated cleanup.", | |
| "related_incidents": ["INC-2100: Data discrepancy between old and new warehouse (resolved)", "INC-2400: Analytics event loss during migration (resolved)"], | |
| "investigation_notes": "2 past incidents during migration. Currently at 2% for final validation. Data-team lead says cleanup requires coordinated effort across 3 services and 30 code references. Estimated 2 sprints of work.", | |
| "correct_action": "escalate", | |
| "explanation": "Nearly disabled but 30 code references across 3 services, 500 days old — needs coordinated cleanup, escalate to data-team lead" | |
| } | |
| ] | |