{"ok":true,"requestId":"cbefe637-3b21-414b-ac93-7b2570f58d0b","report":{"ok":true,"generatedAt":"2026-06-12T15:20:08.176Z","status":"seed_ready","configuredFeedUrls":0,"configuredProviders":0,"visibleCandidates":0,"canaryStatus":"seed_fallback_only","requiredActivationCommands":["npm run source:catalog:report","npm run source:live:doctor","npm run source:breadth:doctor","npm run source:feed-env:doctor","npm run news:feed:canary","npm run refresh:benefits","npm run verify:benefits","npm run benefit:event:contract","npm run test:home-realtime","npm run health:readiness"],"nextActions":["운영 feed URL이 아직 없습니다. 공식 API/RSS/Atom 또는 승인 JSON endpoint를 Vercel env에 연결하세요.","연결 전에는 seed fallback과 공식 source catalog만 사용자에게 노출합니다."],"checks":[{"name":"feed env safety","ok":true,"detail":"configured=0, failed=0","action":"Run npm run source:feed-env:doctor and fix any unsafe, search, community, private, or non-machine-readable feed URL."},{"name":"feed handoff readiness","ok":true,"detail":"lanes=13, commands=8","action":"Run npm run source:feed:handoff so Vercel env keys and verification commands stay current."},{"name":"official source live readiness","ok":true,"detail":"reachable=196, guarded=27, stale=0","action":"Run npm run source:live:doctor and replace or remove any stale_or_removed official source before feed activation."},{"name":"official source breadth readiness","ok":true,"detail":"lanes=12/12, brandSignals=57/57, consumer=78%, publicPolicy=22%","action":"Run npm run source:breadth:doctor so telecom, convenience, beauty, cafe, delivery, pay, mart, open-market, public, education, pet, sample lanes, and consumer-first source mix stay covered."},{"name":"free benefit event contract","ok":true,"detail":"checks=21/21","action":"Run npm run benefit:event:contract so FreeBenefitEvent fields, sanitizer, publishable gate, no-store API, filters, and card trust badges remain enforced."},{"name":"feed canary activation","ok":true,"detail":"status=seed_fallback_only, configured=0, providers=0, visible=0","action":"Seed fallback is allowed until approved JSON/RSS/Atom feeds are connected. Connect OFFICIAL_EVENT_FEED_URLS, PUBLIC_COUPON_FEED_URLS, or BENEFIT_REFRESH_FEED_URLS next."},{"name":"home realtime reflection","ok":true,"detail":"homeChecks=20/20","action":"Run npm run test:home-realtime after each feed activation to prove /api/home reflects refreshed snapshots without restart."},{"name":"free benefit refresh command","ok":true,"detail":"refresh:benefits is present and QA keeps it in the free-benefit pipeline.","action":"Keep refresh:benefits in QA so freebies/events/verify steps remain release-blocking."},{"name":"benefit cron route","ok":true,"detail":"Vercel cron includes dedicated benefits refresh and full refresh routes.","action":"Keep /api/cron/benefits for free-benefit-first refresh and /api/cron/refresh for full refresh."},{"name":"official benefit floor","ok":true,"detail":"visible=197, threshold=95","action":"Run npm run health:readiness after activation to confirm visible official benefits and freshness."}],"markdown":"# 무료혜택 Feed Activation 리포트\n\n- 생성 시각: 2026-06-12T15:20:08.176Z\n- 상태: seed_ready\n- 설정 feed URL: 0개\n- 설정 provider: 0개\n- canary 노출 후보: 0개\n- canary 상태: seed_fallback_only\n\n## 의미\n\n- `seed_ready`: 승인된 운영 feed URL은 아직 없지만, seed fallback과 안전 게이트로 출시 운영이 가능한 상태입니다.\n- `live_feed_ready`: 승인 feed가 실제 노출 가능한 공식 혜택 후보를 만들고 홈 실시간 반영 게이트도 통과한 상태입니다.\n- `needs_attention` 또는 `failed`: feed URL, parser, finalUrl, 종료/검색/커뮤니티 차단 정책 중 하나를 먼저 고쳐야 합니다.\n\n## 필수 확인\n\n| 검사 | 결과 | 근거 | 다음 작업 |\n| --- | --- | --- | --- |\n| feed env safety | PASS | configured=0, failed=0 | Run npm run source:feed-env:doctor and fix any unsafe, search, community, private, or non-machine-readable feed URL. |\n| feed handoff readiness | PASS | lanes=13, commands=8 | Run npm run source:feed:handoff so Vercel env keys and verification commands stay current. |\n| official source live readiness | PASS | reachable=196, guarded=27, stale=0 | Run npm run source:live:doctor and replace or remove any stale_or_removed official source before feed activation. |\n| official source breadth readiness | PASS | lanes=12/12, brandSignals=57/57, consumer=78%, publicPolicy=22% | Run npm run source:breadth:doctor so telecom, convenience, beauty, cafe, delivery, pay, mart, open-market, public, education, pet, sample lanes, and consumer-first source mix stay covered. |\n| free benefit event contract | PASS | checks=21/21 | Run npm run benefit:event:contract so FreeBenefitEvent fields, sanitizer, publishable gate, no-store API, filters, and card trust badges remain enforced. |\n| feed canary activation | PASS | status=seed_fallback_only, configured=0, providers=0, visible=0 | Seed fallback is allowed until approved JSON/RSS/Atom feeds are connected. Connect OFFICIAL_EVENT_FEED_URLS, PUBLIC_COUPON_FEED_URLS, or BENEFIT_REFRESH_FEED_URLS next. |\n| home realtime reflection | PASS | homeChecks=20/20 | Run npm run test:home-realtime after each feed activation to prove /api/home reflects refreshed snapshots without restart. |\n| free benefit refresh command | PASS | refresh:benefits is present and QA keeps it in the free-benefit pipeline. | Keep refresh:benefits in QA so freebies/events/verify steps remain release-blocking. |\n| benefit cron route | PASS | Vercel cron includes dedicated benefits refresh and full refresh routes. | Keep /api/cron/benefits for free-benefit-first refresh and /api/cron/refresh for full refresh. |\n| official benefit floor | PASS | visible=197, threshold=95 | Run npm run health:readiness after activation to confirm visible official benefits and freshness. |\n\n## 운영 연결 순서\n\n```bash\nnpm run source:catalog:report\nnpm run source:live:doctor\nnpm run source:breadth:doctor\nnpm run source:feed-env:doctor\nnpm run news:feed:canary\nnpm run refresh:benefits\nnpm run verify:benefits\nnpm run benefit:event:contract\nnpm run test:home-realtime\nnpm run health:readiness\n```\n\n## 다음 작업\n\n- 운영 feed URL이 아직 없습니다. 공식 API/RSS/Atom 또는 승인 JSON endpoint를 Vercel env에 연결하세요.\n- 연결 전에는 seed fallback과 공식 source catalog만 사용자에게 노출합니다.\n"},"message":"무료혜택 feed activation 리포트를 불러왔습니다."}