{"ok":false,"time":"2026-10-02T05:17:21.716Z","uptime_s":15300,"deployment":{"commit":"36f67e0e8441bcb42c30e711b18baccf902f90c5","service":"srv-d8ioom0jo6nc73diajs0"},"keys":{"gemini":true,"qwen":true,"anthropic":false,"newsdata":true,"fred":true,"fmp":true},"mode":"live","ai":{"provider":"gemini-2.5-flash-lite","lastErr":"qwen: ทุกโมเดล qwen อยู่ในคูลดาวน์","live":true,"perProvider":{"gemini":{"enabled":true,"used":6,"limit":80,"resetAt":"2026-10-02T17:00:00.000Z","healthy":true,"ok":3,"fail":3,"lastErr":"You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. ","lastErrAt":"2026-10-02T04:04:28.343Z","lastErrStatus":429,"lastErrBody":"{\n  \"error\": {\n    \"code\": 429,\n    \"message\": \"You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-a"},"qwen":{"enabled":true,"used":1,"limit":null,"resetAt":"2026-10-02T17:00:00.000Z","healthy":true,"ok":0,"fail":2,"lastErr":"ทุกโมเดล qwen อยู่ในคูลดาวน์","lastErrAt":"2026-10-02T04:05:05.545Z","lastErrStatus":null,"lastErrBody":null},"anthropic":{"enabled":false,"used":0,"limit":null,"resetAt":"2026-10-02T17:00:00.000Z","healthy":false,"ok":0,"fail":0,"lastErr":null,"lastErrAt":null,"lastErrStatus":null,"lastErrBody":null}},"perTask":{"news_headline_batch":1,"news_analysis_batch":1,"scheduled_summary":5},"cache":{"loaded":true,"entries":19,"hits":0,"writes":3,"ttlHours":24,"persistence":{"configured":true,"status":"ok","lastAttemptAt":"2026-10-02T01:03:47.408Z","lastSuccessAt":"2026-10-02T01:03:47.408Z","lastError":null}},"budget":{"configured":true,"required":true,"parseError":null},"routing":{"order":["gemini:gemini-2.5-flash-lite","gemini:gemini-2.0-flash","gemini:gemini-2.5-flash","qwen:qwen-pool","anthropic:claude-haiku-4-5-20251001"],"qwenHost":"openrouter.ai","qwenPath":"/api/v1/chat/completions","qwenModels":["google/gemma-4-31b-it:free"],"qwenDead":{}},"throttle":{"minGapMs":7000,"maxRetry":2,"backoffBaseMs":30000,"healthCooldownMs":60000}},"automation":{"lastRawRun":"2026-10-02T05:02:45.240Z","lastMayoRun":"2026-10-02T01:03:47.409Z","lastExecType":"morning_recap","cache":{"news":true,"calendar":true,"summary_all":false,"feargreed":true},"articleStore":{"configured":true,"lastOk":null,"lastError":null,"lastErrorAt":null,"failures":0,"writes":0},"lastBrief":{"morning":{"at":"2026-10-02T01:03:47.410Z","published":false,"reason":"exists","slug":"morning-brief-2026-10-02","attempts":1,"providerTried":[]},"wrap":null},"inbox":{"pending":0,"published":0,"rejected":0,"lastRunAt":"2026-10-02T05:02:45.245Z"},"newsV2":{"store":{"backend":"github-jsonl","ready":true,"records":5000,"retentionDays":30,"writes":61,"remoteWrites":9,"remoteFlushMs":900000,"remoteBatchSize":100,"lastError":null,"pendingRemoteWrites":0,"lastRemoteFlushAt":"2026-10-02T05:02:51.119Z","licenseBlocked":897,"licenseBlockedByHost":{"bitcoinworld.co.in":62,"biztoc.com":60,"thelincolnianonline.com":38,"themarketsdaily.com":44,"tickerreport.com":44,"headtopics.com":66,"techbullion.com":93,"openpr.com":197,"watchlistnews.com":40,"investing.com":253},"lastLicenseBlockedAt":"2026-10-02T05:02:44.747Z"},"enrichment":{"headlineLastRun":"2026-10-02T01:03:06.237Z","analysisLastRun":"2026-10-02T01:03:29.840Z","lastResult":{"ok":true,"changed":32,"model":"gemini:gemini-2.5-flash-lite","cached":false}}}},"news":{"total30d":5000,"unknown30d":236,"unknownRatio30d":"4.7%","licenseBlocked":897,"licenseBlockedByHost":{"bitcoinworld.co.in":62,"biztoc.com":60,"thelincolnianonline.com":38,"themarketsdaily.com":44,"tickerreport.com":44,"headtopics.com":66,"techbullion.com":93,"openpr.com":197,"watchlistnews.com":40,"investing.com":253}},"seo":{"content_posts":58,"pillars":115,"pillar_content_posts":0,"pillar_indexable_posts":0,"pillar_total":3,"pillar_generatedAt":null,"pillar_manifest_generatedAt":null,"pillar_reasons":{"ดาวโจนส์":"words<300, compliance","นิเคอิ":"words<300, compliance","หั่งเส็ง":"words<300, compliance","ตลาดหุ้น-วันนี้":"analysis"},"pillar_last_ai":null},"fb":{"enabled":true,"token_valid":true,"posted_today":1,"last":{"slug":"morning-brief-2026-10-02","kind":"brief","ts":"2026-10-02T01:01:31.724Z","id":"1178642135326349_122139732171354994","title":"สรุปตลาดเช้านี้ 2 ตุลาคม 2569 — หุ้นไทย หุ้นโลก ทอง คริปโต"}},"indexnow":{"enabled":false,"configured":false,"host":"www.finsance.com","key_configured":false,"key_route":null,"last":null},"pipeline":{"events":[{"t":"2026-10-02T04:47:47.871Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:47:47.876Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T05:02:39.394Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"},{"t":"2026-10-02T05:02:45.151Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T05:02:45.236Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T05:02:45.238Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.240Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.245Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"}],"count":109},"discord":{"enabled":true,"daily_report":"10:00 ICT","alert_throttle_min":1440,"urgent_alert_throttle_min":15},"providers":{"commercial_mode":"off","active":{"coinbase":{"enabled":true,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null},"kraken":{"enabled":true,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null},"fred":{"enabled":true,"via":"auto:FRED_API_KEY","commercial":true,"ok":71,"fail":1,"lastOk":"2026-10-02T04:03:14.637Z","lastErr":"Timeout:fred","lastErrAt":"2026-10-02T01:57:26.239Z"},"sec":{"enabled":true,"via":"default","commercial":true,"ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null},"yahoo":{"enabled":true,"via":"default","commercial":"gray","ok":80,"fail":0,"lastOk":"2026-10-02T05:17:13.093Z","lastErr":null,"lastErrAt":null},"fmp_index":{"enabled":true,"via":"auto:FMP_KEY","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null},"cme":{"enabled":false,"via":"auto:CME_OPTIONS_API_TOKEN(missing)","commercial":true,"ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null},"fmp":{"enabled":false,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErr":null,"lastErrAt":null}},"planned":{"polygon":"ต้องจ่าย ~$29/เดือน","tiingo":"ต้องจ่ายสำหรับ commercial","twelvedata":"ต้องจ่าย ~$29/เดือน","ecb":"ฟรี แต่ยังไม่มี panel ที่ใช้","oecd":"ฟรี แต่ยังไม่มี panel ที่ใช้"},"gray_share_24h":"53%"},"warnings":["pillar analysis ไม่ครบ (0/3) — seo_pillar_html cache ยังไม่ครบ"],"office":{"date":"2026-10-02","timezone":"Asia/Bangkok","generatedAt":"2026-10-02T05:17:21.716Z","overall":"attention","overallLabel":"ต้องดู","summary":{"articleRequired":2,"articleDone":1,"articleDue":1,"articleMissing":0,"siteArticlesToday":1,"runtimeCompleted":48,"runtimeFailed":2,"blockers":4,"latest":"data · raw_tick"},"articles":{"today":[{"slug":"morning-brief-2026-10-02","title":"สรุปตลาดเช้านี้ 2 ตุลาคม 2569 — หุ้นไทย หุ้นโลก ทอง คริปโต","kind":"brief","cat":"global","publishedAt":"2026-10-02T01:01:14.762Z","path":"/news/morning-brief-2026-10-02"}],"schedule":{"required":2,"done":1,"due":1,"missing":0,"slots":[{"id":"morning","label":"Morning brief · สรุปตลาดเช้านี้","slug":"morning-brief-2026-10-02","dueAt":"2026-10-02T08:00:00+07:00","state":"done","stateLabel":"ทำแล้ว","article":{"slug":"morning-brief-2026-10-02","title":"สรุปตลาดเช้านี้ 2 ตุลาคม 2569 — หุ้นไทย หุ้นโลก ทอง คริปโต","kind":"brief","cat":"global","publishedAt":"2026-10-02T01:01:14.762Z","path":"/news/morning-brief-2026-10-02"},"evidence":"พบ morning-brief-2026-10-02 ใน content store · 2026-10-02T01:01:14.762Z"},{"id":"wrap","label":"Market wrap · สรุปตลาดปิดตลาด","slug":"market-wrap-2026-10-02","dueAt":"2026-10-02T17:00:00+07:00","state":"waiting","stateLabel":"ยังไม่ถึงเวลา","article":null,"evidence":"scheduler ตั้งไว้ 17:00 ICT"}]},"inventory":{"total":58,"news":45,"learn":13},"persistence":{"backend":"github-jsonl","ready":true,"records":5000,"writes":61,"remoteWrites":9,"pendingRemoteWrites":0}},"distribution":{"facebook":{"enabled":true,"tokenValid":true,"postedToday":1,"state":"done"}},"scheduledJobs":[{"id":"morning_recap","label":"Mayo morning recap","stage":"mayo","kind":"morning_recap","dueAt":"2026-10-02T08:00:00+07:00","state":"late","stateLabel":"เลยกำหนด","event":null,"evidence":"ไม่พบ event mayo/morning_recap วันนี้"},{"id":"discord_ops","label":"Daily ops report","stage":"publish","kind":"discord_ops","dueAt":"2026-10-02T10:00:00+07:00","state":"late","stateLabel":"เลยกำหนด","event":null,"evidence":"ไม่พบ event publish/discord_ops วันนี้"},{"id":"evening_preview","label":"Mayo evening preview","stage":"mayo","kind":"evening_preview","dueAt":"2026-10-02T17:00:00+07:00","state":"waiting","stateLabel":"ยังไม่ถึงเวลา","event":null,"evidence":"scheduler ตั้งไว้ 17:00 ICT"}],"flow":{"current":"data","stages":[{"id":"intake","agent":"April","label":"รับข่าว","detail":"RSS / NewsData","next":"รอ raw tick หรือแก้ source ที่เตือน","dueAt":null,"state":"done","stateLabel":"มีหลักฐานล่าสุด","warning":null,"lastAt":"2026-10-02T05:02:45.151Z","event":{"t":"2026-10-02T05:02:45.151Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},"evidence":"intake · fetch · news cache refreshed","blocker":"ไม่พบ blocker ใน /status","eventCount":16},{"id":"april","agent":"April","label":"จับกลุ่มข่าว","detail":"dedupe / cluster / enrichment","next":"ตรวจ enrichment และจำนวนแหล่งข่าว","dueAt":null,"state":"done","stateLabel":"มีหลักฐานล่าสุด","warning":null,"lastAt":"2026-10-02T05:02:45.236Z","event":{"t":"2026-10-02T05:02:45.236Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},"evidence":"april · enrich · news clusters enriched","blocker":"ไม่พบ blocker ใน /status","eventCount":8},{"id":"impact","agent":"April","label":"ให้คะแนน Impact","detail":"impact / confirmed","next":"รอ cluster ที่ผ่านเงื่อนไข","dueAt":null,"state":"no_evidence","stateLabel":"ยังไม่มีหลักฐาน","warning":null,"lastAt":null,"event":null,"evidence":"ไม่มี event ของ stage นี้ใน runtime ledger","blocker":"ยังยืนยันไม่ได้จาก log ที่มี","eventCount":0},{"id":"mayo","agent":"Mayo","label":"เล่าเรื่อง","detail":"summary / article narrative","next":"ตรวจ AI key, budget และ response schema","dueAt":"2026-10-02T08:00:00+07:00","state":"failed","stateLabel":"เฟล/ติดขัด","warning":null,"lastAt":"2026-10-02T04:05:05.546Z","event":{"t":"2026-10-02T04:05:05.546Z","stage":"mayo","kind":"event_trigger","ok":false,"detail":"event-driven"},"evidence":"mayo · event_trigger · event-driven","blocker":"event-driven","eventCount":2},{"id":"compliance","agent":"Junus","label":"ตรวจ gate","detail":"compliance / editorial","next":"แก้ hard-fail ก่อนเผยแพร่","dueAt":"2026-10-02T17:00:00+07:00","state":"waiting","stateLabel":"ยังไม่ถึงเวลา","warning":null,"lastAt":null,"event":null,"evidence":"scheduler ตั้งไว้ 17:00 ICT","blocker":"ยังไม่ถึง dueAt 17:00 ICT","eventCount":0},{"id":"junus","agent":"Junus","label":"SEO plane","detail":"pillar / SEO / canonical","next":"ตรวจ pillar manifest และ indexable state","dueAt":"2026-10-02T17:00:00+07:00","state":"waiting","stateLabel":"ยังไม่ถึงเวลา","warning":"pillar analysis ไม่ครบ (0/3) — seo_pillar_html cache ยังไม่ครบ","lastAt":null,"event":null,"evidence":"scheduler ตั้งไว้ 17:00 ICT","blocker":"ยังไม่ถึง dueAt 17:00 ICT","eventCount":0},{"id":"publish","agent":"Junus","label":"เผยแพร่","detail":"store.publish / distribution","next":"ตรวจ store, persistence และปลายทางเผยแพร่","dueAt":"2026-10-02T17:00:00+07:00","state":"waiting","stateLabel":"ยังไม่ถึงเวลา","warning":null,"lastAt":null,"event":null,"evidence":"scheduler ตั้งไว้ 17:00 ICT","blocker":"ยังไม่ถึง dueAt 17:00 ICT","eventCount":0},{"id":"data","agent":"Data Desk","label":"Market Data","detail":"FRED / COT / ETF / calendar","next":"ตรวจ provider, key และ freshness","dueAt":null,"state":"done","stateLabel":"มีหลักฐานล่าสุด","warning":null,"lastAt":"2026-10-02T05:02:45.245Z","event":{"t":"2026-10-02T05:02:45.245Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},"evidence":"data · raw_tick · raw data ready","blocker":"ไม่พบ blocker ใน /status","eventCount":24}]},"runtime":{"scope":"ตั้งแต่ process boot ของ instance นี้ · เก็บสูงสุด 200 events · API ส่งล่าสุดสูงสุด 50 events","retainedCount":50,"todayCount":50,"todayCompleted":[{"t":"2026-10-02T05:02:45.245Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T05:02:45.240Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.238Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.236Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T05:02:45.151Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T05:02:39.394Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"},{"t":"2026-10-02T04:47:47.876Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T04:47:47.871Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:47:47.797Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:47:47.699Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T04:47:47.699Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T04:47:39.390Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"},{"t":"2026-10-02T04:32:47.044Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T04:32:47.038Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:32:46.539Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:32:46.344Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T04:32:46.344Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T04:32:39.386Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"},{"t":"2026-10-02T04:17:45.942Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T04:17:45.937Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"}],"todayFailed":[{"t":"2026-10-02T04:05:05.546Z","stage":"mayo","kind":"event_trigger","ok":false,"detail":"event-driven"},{"t":"2026-10-02T04:05:05.545Z","stage":"mayo","kind":"summary","ok":false,"detail":"provider unavailable"}],"recent":[{"t":"2026-10-02T05:02:45.245Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T05:02:45.240Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.238Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T05:02:45.236Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T05:02:45.151Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T05:02:39.394Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"},{"t":"2026-10-02T04:47:47.876Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"},{"t":"2026-10-02T04:47:47.871Z","stage":"data","kind":"calendar","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:47:47.797Z","stage":"data","kind":"feargreed","ok":true,"detail":"cache refreshed"},{"t":"2026-10-02T04:47:47.699Z","stage":"april","kind":"enrich","ok":true,"detail":"news clusters enriched"},{"t":"2026-10-02T04:47:47.699Z","stage":"intake","kind":"fetch","ok":true,"detail":"news cache refreshed"},{"t":"2026-10-02T04:47:39.390Z","stage":"intake","kind":"raw_tick","ok":true,"detail":"started"}],"latest":{"t":"2026-10-02T05:02:45.245Z","stage":"data","kind":"raw_tick","ok":true,"detail":"raw data ready"}},"blockers":[{"text":"mayo · summary · provider unavailable","source":"/api/pipeline/events"},{"text":"mayo · event_trigger · event-driven","source":"/api/pipeline/events"},{"text":"งาน Mayo morning recap: ไม่พบ event mayo/morning_recap วันนี้","source":"/api/pipeline/events + scheduler"},{"text":"งาน Daily ops report: ไม่พบ event publish/discord_ops วันนี้","source":"/api/pipeline/events + scheduler"}],"backlog":[{"text":"เติม pillar analysis ให้ครบ (0/3)","source":"status.contentTodoLines"},{"text":"THINK review: TASK-050-052 (news-to-FB), TASK-044 (pillar manifest), TASK-001-003 (pillar Mayo live)","source":"status.contentTodoLines"},{"text":"Content roadmap: เขียน /learn explainer batch แรก, GSC feedback loop, AdSense checklist","source":"status.contentTodoLines"}],"providerHealth":[{"id":"coinbase","enabled":true,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"ready"},{"id":"kraken","enabled":true,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"ready"},{"id":"fred","enabled":true,"via":"auto:FRED_API_KEY","commercial":true,"ok":71,"fail":1,"lastOk":"2026-10-02T04:03:14.637Z","lastErrAt":"2026-10-02T01:57:26.239Z","state":"degraded"},{"id":"sec","enabled":true,"via":"default","commercial":true,"ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"ready"},{"id":"yahoo","enabled":true,"via":"default","commercial":"gray","ok":80,"fail":0,"lastOk":"2026-10-02T05:17:13.093Z","lastErrAt":null,"state":"ready"},{"id":"fmp_index","enabled":true,"via":"auto:FMP_KEY","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"ready"},{"id":"cme","enabled":false,"via":"auto:CME_OPTIONS_API_TOKEN(missing)","commercial":true,"ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"disabled"},{"id":"fmp","enabled":false,"via":"default","commercial":"gray","ok":0,"fail":0,"lastOk":null,"lastErrAt":null,"state":"disabled"}],"sources":[{"id":"status","label":"/status","role":"automation, warning, SEO, Facebook และ provider health"},{"id":"events","label":"/api/pipeline/events","role":"runtime event ledger ของ instance นี้"},{"id":"content","label":"content/news + content/learn","role":"inventory และหลักฐานบทความบนเว็บไซต์"},{"id":"fb","label":"content/fb_posted.json","role":"Facebook publish ledger"},{"id":"pillars","label":"seo_pillar_html cache + live quote","role":"pillar analysis/indexability state"}],"limitations":["runtime event ledger อยู่ในหน่วยความจำและรีเซ็ตเมื่อ process restart จึงไม่ใช่ประวัติถาวร","งาน event article และ top-cluster เป็น conditional job จะแสดงเมื่อมี trigger/event จริงเท่านั้น","พบใน content store = หลักฐานว่าระบบ publish ไว้ใน instance ไม่ใช่หลักฐานแทนการตรวจ deploy/CDN ภายนอก"]}}