{"allowContribute":false,"item":{"contents":"[{\"name\":\"審計與發布筆記\",\"itemType\":\"NOTE_FOLDER\",\"count\":3}]","createdAt":1788748296178,"description":"","id":"6a9e2207bad4f61cea6b0057","isPublic":true,"itemType":"PACKAGE","name":"審計與發布筆記組合包","parents":{},"pluginDirs":[],"rootItemIds":["b105349fa3932713b892bc43"],"updatedAt":1788748295788,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":1},"ownerName":"Mikaela 米奇拉","packageContents":[{"name":"審計與發布筆記","itemType":"NOTE","count":12}],"subtree":[{"contents":"[{\"name\":\"審計與發布筆記\",\"itemType\":\"NOTE_FOLDER\",\"count\":3}]","createdAt":1788748296178,"description":"","id":"6a9e2207bad4f61cea6b0057","isPublic":true,"itemType":"PACKAGE","name":"審計與發布筆記組合包","parents":{},"pluginDirs":[],"rootItemIds":["b105349fa3932713b892bc43"],"updatedAt":1788748295788,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":1},{"createdAt":1788746690587,"id":"b105349fa3932713b892bc43","itemType":"NOTE_FOLDER","name":"審計與發布筆記","parents":{"note":1788746690687},"updatedAt":1788746690587,"updatedBy":{"agentId":"ceo","agentName":"CEO","userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":1},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} h1{font-size:24px;line-height:1.3;margin:12px 0 0;} h2{font-size:18px;margin:24px 0 8px;} p,li{color:var(--ink2);} ul{padding-left:22px;} code{font:13px ui-monospace,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);} .tag{font:700 11px ui-monospace,monospace;color:var(--accent);}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cp\u003e\u003cspan class=\"tag\"\u003eTALENT RADAR · 修復整備 · 2026-09-08\u003c/span\u003e\u003c/p\u003e\u003ch1\u003e修復紀錄：機會分析總預算收緊至 24 秒\u003c/h1\u003e\u003cp\u003emain 上已有 45 秒總預算＋三段超時＋單次研究（4a131b8／4cb9400），但 Cloudflare fetch handler 約 30 秒 wall-time 即被終止，45 秒預算永遠等不到 fallback——請求被平台砍掉，客戶端進 catch，顯示「I have the opportunity saved／The analysis could not be completed yet」。本次只做一處改動：總預算收緊至 24 秒內，證據保障與確定性 fallback 原封不動。\u003c/p\u003e\u003ch2\u003e改法（僅 \u003ccode\u003esrc/lib/opportunity-analysis.ts\u003c/code\u003e，8b2d357）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eANALYSIS_TOTAL_BUDGET_MS\u003c/code\u003e 45000 → 24000；\u003ccode\u003eRESEARCH_PHASE_MS\u003c/code\u003e 22000 → 12000；\u003ccode\u003eGROQ_REQUEST_MS\u003c/code\u003e 15000 → 8000；\u003ccode\u003ePARSE_TIMEOUT_MS\u003c/code\u003e 5000 → 3000。\u003c/li\u003e\u003cli\u003e未動：siteOnly 公司站證據保留、LinkedIn 雜訊剝除、official／third-party／lead 三態、確定性 fallback、單次研究客戶端流程、任何 UI 文案。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置\u003c/h2\u003e\u003cp\u003eNode 22 vite build 通過；detached HEAD commit 後 push HEAD:main，遠端確認 8b2d357。tsc 既有錯誤數與修前一致，無新增。\u003c/p\u003e\u003ch2\u003e部署驗證（Blueprint／Translation Specialist／LinkedIn 4442699644，全旅程實點）\u003c/h2\u003e\u003cp\u003e研究載入畫面正常出現；但分析請求仍進客戶端 catch（saved＋could not be completed＋Try again，重試一次相同）。線上 HTML 的 client asset hash 仍是舊版（\u003ccode\u003eopportunity-csajEV_s.js\u003c/code\u003e，本地新構為 \u003ccode\u003eDc4yA2fI\u003c/code\u003e），研判 Lovable 同步尚未把 8b2d357 佈上去——線上跑的仍是 45 秒版 server，在 30 秒被平台終止，而非新邏輯問題。直接打 serverFn 回 403（CSRF），sandbox 內無法取 server 日誌。\u003c/p\u003e\u003ch2\u003e待辦\u003c/h2\u003e\u003cp\u003e等 Lovable 同步 8b2d357 後，用同一真實案例重跑一次；若仍進 catch，需看 Worker 日誌找 validator／env 以外真正的 throw 點。\u003c/p\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。修復人：PRODUCTION ANALYSIS TIMEOUT repair。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003cp\u003e\u003cspan class=\"tag\"\u003eTALENT RADAR · 修復整備 · 2026-09-08\u003c/span\u003e\u003c/p\u003e\u003ch1\u003e修復紀錄：機會分析總預算收緊至 24 秒\u003c/h1\u003e\u003cp\u003emain 上已有 45 秒總預算＋三段超時＋單次研究（4a131b8／4cb9400），但 Cloudflare fetch handler 約 30 秒 wall-time 即被終止，45 秒預算永遠等不到 fallback——請求被平台砍掉，客戶端進 catch，顯示「I have the opportunity saved／The analysis could not be completed yet」。本次只做一處改動：總預算收緊至 24 秒內，證據保障與確定性 fallback 原封不動。\u003c/p\u003e\u003ch2\u003e改法（僅 \u003ccode\u003esrc/lib/opportunity-analysis.ts\u003c/code\u003e，8b2d357）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eANALYSIS_TOTAL_BUDGET_MS\u003c/code\u003e 45000 → 24000；\u003ccode\u003eRESEARCH_PHASE_MS\u003c/code\u003e 22000 → 12000；\u003ccode\u003eGROQ_REQUEST_MS\u003c/code\u003e 15000 → 8000；\u003ccode\u003ePARSE_TIMEOUT_MS\u003c/code\u003e 5000 → 3000。\u003c/li\u003e\u003cli\u003e未動：siteOnly 公司站證據保留、LinkedIn 雜訊剝除、official／third-party／lead 三態、確定性 fallback、單次研究客戶端流程、任何 UI 文案。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置\u003c/h2\u003e\u003cp\u003eNode 22 vite build 通過；detached HEAD commit 後 push HEAD:main，遠端確認 8b2d357。tsc 既有錯誤數與修前一致，無新增。\u003c/p\u003e\u003ch2\u003e部署驗證（Blueprint／Translation Specialist／LinkedIn 4442699644，全旅程實點）\u003c/h2\u003e\u003cp\u003e研究載入畫面正常出現；但分析請求仍進客戶端 catch（saved＋could not be completed＋Try again，重試一次相同）。線上 HTML 的 client asset hash 仍是舊版（\u003ccode\u003eopportunity-csajEV_s.js\u003c/code\u003e，本地新構為 \u003ccode\u003eDc4yA2fI\u003c/code\u003e），研判 Lovable 同步尚未把 8b2d357 佈上去——線上跑的仍是 45 秒版 server，在 30 秒被平台終止，而非新邏輯問題。直接打 serverFn 回 403（CSRF），sandbox 內無法取 server 日誌。\u003c/p\u003e\u003ch2\u003e待辦\u003c/h2\u003e\u003cp\u003e等 Lovable 同步 8b2d357 後，用同一真實案例重跑一次；若仍進 catch，需看 Worker 日誌找 validator／env 以外真正的 throw 點。\u003c/p\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。修復人：PRODUCTION ANALYSIS TIMEOUT repair。\u003c/p\u003e\u003c/div\u003e","createdAt":1788832519334,"displayMode":"artifact","id":"cf5891ca3ba21c59c8385b98","isNew":false,"itemType":"NOTE","name":"Talent Radar 修復紀錄：機會分析總預算收緊至 24 秒","parents":{"b105349fa3932713b892bc43":1788832519334},"updatedAt":1788832917324,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela 米奇拉"},"version":4},{"artifactHtml":"\u003cstyle\u003e\n:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;--warn:#8A5A00;--warnbg:#F7ECD4;--bad:#8C2F2F;--badbg:#F6E4E0;}\n:root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;--warn:#E3B45C;--warnbg:#2A2415;--bad:#E08A8A;--badbg:#2B1B1B;}\n.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;}\n.eyebrow{font:600 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.16em;color:var(--accent);}\nh1{font-size:29px;line-height:1.25;letter-spacing:-.015em;margin:12px 0 0;max-width:22ch;}\n.lede{color:var(--ink2);max-width:64ch;margin-top:10px;}\nh2{font-size:19px;margin:34px 0 10px;letter-spacing:-.01em;}\nh3{font-size:15px;margin:20px 0 6px;}\np,li{color:var(--ink2);max-width:68ch;}\nul{padding-left:22px;margin:8px 0;}\nli{margin:5px 0;}\n.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:20px 0 6px;}\n.stat{background:var(--soft);border-radius:8px;padding:12px 14px;}\n.stat .k{font-size:12px;color:var(--accent);}\n.stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);}\n.stat .n{font-size:12px;color:var(--ink2);margin-top:2px;}\n.callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;}\n.callout .tag{flex:none;font:700 11px ui-monospace,monospace;letter-spacing:.08em;color:var(--accent);padding-top:3px;}\n.must{background:var(--badbg);border-left:3px solid var(--bad);padding:12px 16px;border-radius:0 6px 6px 0;margin:12px 0;}\n.must b{color:var(--bad);}\n.nice{background:var(--warnbg);border-left:3px solid var(--warn);padding:12px 16px;border-radius:0 6px 6px 0;margin:12px 0;}\ncode{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}\ntable{border-collapse:collapse;width:100%;font-size:14px;margin:10px 0;}\nth,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--hair);color:var(--ink2);vertical-align:top;}\nth{font:600 11px ui-monospace,monospace;letter-spacing:.06em;}\n@media(max-width:640px){.doc{padding:20px 18px;}h1{font-size:24px;}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 程式碼審計 · 2026-09-07 · MAIN 0b756fb\u003c/div\u003e\u003ch1\u003eTalent Radar 程式碼審計報告\u003c/h1\u003e\u003cp class=\"lede\"\u003e只讀審計，不改程式碼。依序讀完 TALENT_RADAR_MASTER_CONTEXT、TALENT_RADAR_CONTEXT、README，再檢查 routes／lib／styles 現況。結論：核心旅程已成形、可發布驗證，但 Opportunity 研究鏈有重複呼叫與可靠性風險，發布前必須修。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e審計版本\u003c/div\u003e\u003cdiv class=\"v\"\u003e0b756fb\u003c/div\u003e\u003cdiv class=\"n\"\u003emain 最新，含連續 5 次研究鏈修復\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e核心流程\u003c/div\u003e\u003cdiv class=\"v\"\u003e4 頁閉環\u003c/div\u003e\u003cdiv class=\"n\"\u003e/ → /start → /reflect → /opportunity\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eAI 引擎\u003c/div\u003e\u003cdiv class=\"v\"\u003eGroq 120b\u003c/div\u003e\u003cdiv class=\"n\"\u003eopenai/gpt-oss-120b，皆有確定性 fallback\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e資料持久\u003c/div\u003e\u003cdiv class=\"v\"\u003esessionStorage\u003c/div\u003e\u003cdiv class=\"n\"\u003e分頁關閉即失，無帳號（符合原則）\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003ch2\u003e一、Talent Radar 是什麼／不是什麼\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心\u003c/span\u003e\u003cdiv\u003e職涯決策陪伴者：先理解人，再理解機會，最後做比較。核心序列是 理解自己 → 反思 → 理解機會 → 比較。承諾是「幫你更理解自己、做出更好的職涯決定」，不是告訴你該選哪份工作。\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003e是：\u003c/b\u003e安靜的思考房間； LESS APP, MORE BOOK 長書式體驗；短 onboarding＋語意化故事＋ grounded 反思＋可修正；機會比較只呈現契合／張力／未知／待查問題，不打分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003e不是：\u003c/b\u003e求職版、履歷產生器、海投工具、面試教練、人格測驗、心理診斷、通用 AI 職涯雞湯、儀表板、分數配對。這次審計以 MASTER CONTEXT 為最高真實來源，README 內舊 Lovable 文案與之衝突處以 MASTER 為準。\u003c/p\u003e\u003ch2\u003e二、目前使用者流程（實作現況）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003e/（index.tsx）：\u003c/b\u003e符合 MASTER：主標 Understand yourself before changing your career、副標、Let's Get Started 文字連結、次要 PayPal 支持區。SEO／OG 完整。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/start：\u003c/b\u003e6 步：現況 → 近期感受 → 在職細節（僅在職者，title／industry／size／arrangement 全可跳過）→ 改變故事大 textarea → 想要（多選＋自填）→ 不想重演（多選＋自填）→ 感謝頁進 /reflect。每鍵即存 sessionStorage，切換在職／非在職會跳步。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/reflect：\u003c/b\u003e讀 onboarding → generateReflection（Groq）→ 失敗回 deterministic fallback。Yes 進 /opportunity；Not quite 問 What feels different？送回同一引擎重寫。已實作提交後重寫＋防重複送。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/opportunity：\u003c/b\u003e貼連結＋Read this listing／職稱／公司（強烈建議）／描述大欄 → Continue 存檔 → 7 秒研究動畫 → 六段分析＋來源清單 → 可選上傳 CV（PDF／DOCX，瀏覽器內解析）→ 六段 CV 分析。/feedback 另以 GitHub issue 收集回饋。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、已實作什麼（符合 MASTER 處）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e視覺語言守住：styles.css 以 \u003ccode\u003echip\u003c/code\u003e／\u003ccode\u003efield\u003c/code\u003e／\u003ccode\u003esoft-surface\u003c/code\u003e 做底線式文字操作，無膠囊大 CTA；深綠＋紙色＋細線符合安靜書感。\u003c/li\u003e\u003cli\u003e反思引擎 grounded：systemPrompt 明訂只用分享事實、故事為主證據、不診斷、不發明、保留不確定性、引用原話；輸出強制 4–5 段 JSON，末段必須是 Does that feel true to you？，否則 fallback。\u003c/li\u003e\u003cli\u003e機會研究誠實：official／third-party／lead 三分類，lead 明示「未讀、非證據」；environment 首句固定放 researchNote（跑了幾次搜尋、讀到幾個）。无分數、無「你該去」。\u003c/li\u003e\u003cli\u003eJob 讀取有 JSON-LD＋meta 解析，LinkedIn 擋讀有專屬提示；CV 隱私文案寫清「檔不存、文字送 AI 依其條款」。\u003c/li\u003e\u003cli\u003e錯誤兜底齊：deterministic fallback 三處（reflection／opportunity／cv）、404／ErrorBoundary、h3 吞錯展開＋error-capture。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、未完成／偏離 MASTER 處\u003c/h2\u003e\u003cul\u003e\u003cli\u003eREADME 仍是舊 Lovable 版（hero 寫 Is this job worth…、Version 1 說不做 AI 分析），與現況和 MASTER 皆不符，只影響協作者認知，不影響使用者。\u003c/li\u003e\u003cli\u003eMASTER 要求的反思長度是 3–4 短段約 60–120 字，prompt 寫 4–5 段；前端把任何問號句放大，長度約束靠模型自律。屬輕微漂移。\u003c/li\u003e\u003cli\u003eMASTER 技術段寫分支 feature/launch-support-link 驗證中勿自動合 main，但本次 main 已含支持連結與完整機會鏈，分支狀態不明，發布以 main 為準即可。\u003c/li\u003e\u003cli\u003e機會頁 state 有 location／arrangement／salary／responsibilities／requirements／benefits，但 UI 只暴露 url／title／company／description 四欄；reader 填入的隱藏欄使用者看不到改不了，會進 AI 證據。屬半成品。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、損壞或不可靠處（MUST FIX BEFORE LAUNCH）\u003c/h2\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM1 · 機會研究被跑兩次。\u003c/b\u003eopportunity.tsx 的 continueOn 先呼叫 researchOpportunity，再呼叫 analyzeOpportunity，而後者內部又跑一次 fetchCompanyResearch。一次分析最多 10 組查詢、上限 48 次讀取、兩份 9000 字證據進 prompt：慢、貴、易觸發限流與 Worker 超時。修法：只調 analyzeOpportunity 並用其回傳的研究結果渲染。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM2 · saveOpportunity 副作用污染。\u003c/b\u003elib/opportunity.ts 的 save 會改寫傳入物件的 description，附加 [TALENT_RADAR_COMPANY:…] 標記，靠 preprocess 再剝除。一旦任一 client／runtime 路徑掉 marker 或解析失敗，公司名會漏進 AI 證據或顯示。修法：marker 改放獨立欄位或 server input，不要碰 description。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM3 · 公司研究在無 key 時極脆弱。\u003c/b\u003eJina search／reader 無 JINA_API_KEY 即停用，只剩 DDG lite＋Bing RSS 刮取，兩者在 Cloudflare Worker 極易 403／驗證；通用 anchor 解析雜訊大。git log 顯示研究鏈連修 5 版仍不穩。發布前必須在 Cloudflare preview 實測有／無 JINA_API_KEY 兩條路，並把 JINA_API_KEY 設好；否則研究頁長期顯示「跑了 5 次搜尋、0 個可讀來源」。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM4 · 職缺讀取 redirect=manual。\u003c/b\u003ejob-ad-reader 用 manual 不跟 301／302，大量職缺站（Greenhouse／Lever／Workday 短址）直接判 unreadable，且無 Jina 備援。發布前至少改 follow＋Jina reader 備援，否則「貼連結」主路徑名存實亡。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM5 · 僅 sessionStorage。\u003c/b\u003eonboarding／opportunity 只在分頁 session；新分頁、重整後直接進 /reflect 會看到空反思或「session 已失效請重來」；onboarding zod 上限（story 12000）超限時 load 整包回 null。修法至少：超限欄截斷而非全丟、直接進深頁給回 /start 的文字路徑。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM6 · 隱藏欄＋序列化研究。\u003c/b\u003eM4 的隱藏欄問題＋fetchCompanyResearch 以 for 迴圈逐一 await 讀源（最多 8 源），Worker 內極慢。修法：隱藏欄要嘛顯示可編、要嘛不送 AI；讀源加併發上限（如 4）＋總超時。\u003c/div\u003e\u003ch2\u003e六、NICE TO HAVE AFTER LAUNCH\u003c/h2\u003e\u003cdiv class=\"nice\"\u003eN1 · __root.tsx 的 404／錯誤鈕是 rounded-md 實心大 CTA，違反書感，改文字連結即可。\u003cbr\u003eN2 · 研究頁 7 秒最低停留＋reflection 逐段 Reveal 在慢網下體感更慢，可依實際完成提早收。\u003cbr\u003eN3 · reflect 的 Yes／Not quite 可重複點、submitted 後仍可改 response，狀態機收斂一下。\u003cbr\u003eN4 · CV fallback 的 applicationTip 出現 Schedule Send／週二早上寄信，與 grounded 無關且像通用建議，砍掉或改寫。\u003cbr\u003eN5 · README 重寫為 MASTER 精簡版，刪 Lovable 舊 hero 與 Version 1 段。\u003cbr\u003eN6 · opportunity 表單補 location／arrangement／salary 顯示欄；companyUrl 目前全靠 reader，無手填入口。\u003cbr\u003eN7 · 環境變數三分叉（AI_REFLECTION_*／AI_OPPORTUNITY_*／AI_CV_*）補一份 Cloudflare 設定表，避免只設 GROQ_API_KEY 卻有人誤覆 URL。\u003c/div\u003e\u003ch2\u003e七、發布前需求（驗證清單）\u003c/h2\u003e\u003ctable\u003e\u003ctr\u003e\u003cth\u003e項\u003c/th\u003e\u003cth\u003e怎麼做\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCloudflare preview 實測\u003c/td\u003e\u003ctd\u003e有 key／無 key 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e金鑰\u003c/td\u003e\u003ctd\u003e設 GROQ_API_KEY；強烈建議設 JINA_API_KEY；確認 AI_*_URL／MODEL 無誤覆。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e不擴張\u003c/td\u003e\u003ctd\u003e不做帳號、訂閱、儀表板、履歷模板、面試題庫；維持 LESS APP. MORE BOOK。\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003cp\u003e審計人：程式碼審計員（第一棒，只讀未改）。下一棒：研究驗證員，重點驗 M3／M4 在線上 runtime 的真實成功率。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e審計版本\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e0b756fb\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003emain 最新，含連續 5 次研究鏈修復\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e核心流程\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e4 頁閉環\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e/ → /start → /reflect → /opportunity\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eAI 引擎\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eGroq 120b\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eopenai/gpt-oss-120b，皆有確定性 fallback\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e資料持久\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003esessionStorage\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e分頁關閉即失，無帳號（符合原則）\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e一、Talent Radar 是什麼／不是什麼\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心\u003c/span\u003e\u003cdiv\u003e職涯決策陪伴者：先理解人，再理解機會，最後做比較。核心序列是 理解自己 → 反思 → 理解機會 → 比較。承諾是「幫你更理解自己、做出更好的職涯決定」，不是告訴你該選哪份工作。\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003e是：\u003c/b\u003e安靜的思考房間； LESS APP, MORE BOOK 長書式體驗；短 onboarding＋語意化故事＋ grounded 反思＋可修正；機會比較只呈現契合／張力／未知／待查問題，不打分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003e不是：\u003c/b\u003e求職版、履歷產生器、海投工具、面試教練、人格測驗、心理診斷、通用 AI 職涯雞湯、儀表板、分數配對。這次審計以 MASTER CONTEXT 為最高真實來源，README 內舊 Lovable 文案與之衝突處以 MASTER 為準。\u003c/p\u003e\u003ch2\u003e二、目前使用者流程（實作現況）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003e/（index.tsx）：\u003c/b\u003e符合 MASTER：主標 Understand yourself before changing your career、副標、Let's Get Started 文字連結、次要 PayPal 支持區。SEO／OG 完整。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/start：\u003c/b\u003e6 步：現況 → 近期感受 → 在職細節（僅在職者，title／industry／size／arrangement 全可跳過）→ 改變故事大 textarea → 想要（多選＋自填）→ 不想重演（多選＋自填）→ 感謝頁進 /reflect。每鍵即存 sessionStorage，切換在職／非在職會跳步。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/reflect：\u003c/b\u003e讀 onboarding → generateReflection（Groq）→ 失敗回 deterministic fallback。Yes 進 /opportunity；Not quite 問 What feels different？送回同一引擎重寫。已實作提交後重寫＋防重複送。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/opportunity：\u003c/b\u003e貼連結＋Read this listing／職稱／公司（強烈建議）／描述大欄 → Continue 存檔 → 7 秒研究動畫 → 六段分析＋來源清單 → 可選上傳 CV（PDF／DOCX，瀏覽器內解析）→ 六段 CV 分析。/feedback 另以 GitHub issue 收集回饋。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、已實作什麼（符合 MASTER 處）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e視覺語言守住：styles.css 以 \u003ccode\u003echip\u003c/code\u003e／\u003ccode\u003efield\u003c/code\u003e／\u003ccode\u003esoft-surface\u003c/code\u003e 做底線式文字操作，無膠囊大 CTA；深綠＋紙色＋細線符合安靜書感。\u003c/li\u003e\u003cli\u003e反思引擎 grounded：systemPrompt 明訂只用分享事實、故事為主證據、不診斷、不發明、保留不確定性、引用原話；輸出強制 4–5 段 JSON，末段必須是 Does that feel true to you？，否則 fallback。\u003c/li\u003e\u003cli\u003e機會研究誠實：official／third-party／lead 三分類，lead 明示「未讀、非證據」；environment 首句固定放 researchNote（跑了幾次搜尋、讀到幾個）。无分數、無「你該去」。\u003c/li\u003e\u003cli\u003eJob 讀取有 JSON-LD＋meta 解析，LinkedIn 擋讀有專屬提示；CV 隱私文案寫清「檔不存、文字送 AI 依其條款」。\u003c/li\u003e\u003cli\u003e錯誤兜底齊：deterministic fallback 三處（reflection／opportunity／cv）、404／ErrorBoundary、h3 吞錯展開＋error-capture。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、未完成／偏離 MASTER 處\u003c/h2\u003e\u003cul\u003e\u003cli\u003eREADME 仍是舊 Lovable 版（hero 寫 Is this job worth…、Version 1 說不做 AI 分析），與現況和 MASTER 皆不符，只影響協作者認知，不影響使用者。\u003c/li\u003e\u003cli\u003eMASTER 要求的反思長度是 3–4 短段約 60–120 字，prompt 寫 4–5 段；前端把任何問號句放大，長度約束靠模型自律。屬輕微漂移。\u003c/li\u003e\u003cli\u003eMASTER 技術段寫分支 feature/launch-support-link 驗證中勿自動合 main，但本次 main 已含支持連結與完整機會鏈，分支狀態不明，發布以 main 為準即可。\u003c/li\u003e\u003cli\u003e機會頁 state 有 location／arrangement／salary／responsibilities／requirements／benefits，但 UI 只暴露 url／title／company／description 四欄；reader 填入的隱藏欄使用者看不到改不了，會進 AI 證據。屬半成品。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、損壞或不可靠處（MUST FIX BEFORE LAUNCH）\u003c/h2\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM1 · 機會研究被跑兩次。\u003c/b\u003eopportunity.tsx 的 continueOn 先呼叫 researchOpportunity，再呼叫 analyzeOpportunity，而後者內部又跑一次 fetchCompanyResearch。一次分析最多 10 組查詢、上限 48 次讀取、兩份 9000 字證據進 prompt：慢、貴、易觸發限流與 Worker 超時。修法：只調 analyzeOpportunity 並用其回傳的研究結果渲染。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM2 · saveOpportunity 副作用污染。\u003c/b\u003elib/opportunity.ts 的 save 會改寫傳入物件的 description，附加 [TALENT_RADAR_COMPANY:…] 標記，靠 preprocess 再剝除。一旦任一 client／runtime 路徑掉 marker 或解析失敗，公司名會漏進 AI 證據或顯示。修法：marker 改放獨立欄位或 server input，不要碰 description。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM3 · 公司研究在無 key 時極脆弱。\u003c/b\u003eJina search／reader 無 JINA_API_KEY 即停用，只剩 DDG lite＋Bing RSS 刮取，兩者在 Cloudflare Worker 極易 403／驗證；通用 anchor 解析雜訊大。git log 顯示研究鏈連修 5 版仍不穩。發布前必須在 Cloudflare preview 實測有／無 JINA_API_KEY 兩條路，並把 JINA_API_KEY 設好；否則研究頁長期顯示「跑了 5 次搜尋、0 個可讀來源」。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM4 · 職缺讀取 redirect=manual。\u003c/b\u003ejob-ad-reader 用 manual 不跟 301／302，大量職缺站（Greenhouse／Lever／Workday 短址）直接判 unreadable，且無 Jina 備援。發布前至少改 follow＋Jina reader 備援，否則「貼連結」主路徑名存實亡。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM5 · 僅 sessionStorage。\u003c/b\u003eonboarding／opportunity 只在分頁 session；新分頁、重整後直接進 /reflect 會看到空反思或「session 已失效請重來」；onboarding zod 上限（story 12000）超限時 load 整包回 null。修法至少：超限欄截斷而非全丟、直接進深頁給回 /start 的文字路徑。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM6 · 隱藏欄＋序列化研究。\u003c/b\u003eM4 的隱藏欄問題＋fetchCompanyResearch 以 for 迴圈逐一 await 讀源（最多 8 源），Worker 內極慢。修法：隱藏欄要嘛顯示可編、要嘛不送 AI；讀源加併發上限（如 4）＋總超時。\u003c/div\u003e\u003ch2\u003e六、NICE TO HAVE AFTER LAUNCH\u003c/h2\u003e\u003cdiv class=\"nice\"\u003eN1 · __root.tsx 的 404／錯誤鈕是 rounded-md 實心大 CTA，違反書感，改文字連結即可。\u003cbr\u003eN2 · 研究頁 7 秒最低停留＋reflection 逐段 Reveal 在慢網下體感更慢，可依實際完成提早收。\u003cbr\u003eN3 · reflect 的 Yes／Not quite 可重複點、submitted 後仍可改 response，狀態機收斂一下。\u003cbr\u003eN4 · CV fallback 的 applicationTip 出現 Schedule Send／週二早上寄信，與 grounded 無關且像通用建議，砍掉或改寫。\u003cbr\u003eN5 · README 重寫為 MASTER 精簡版，刪 Lovable 舊 hero 與 Version 1 段。\u003cbr\u003eN6 · opportunity 表單補 location／arrangement／salary 顯示欄；companyUrl 目前全靠 reader，無手填入口。\u003cbr\u003eN7 · 環境變數三分叉（AI_REFLECTION_*／AI_OPPORTUNITY_*／AI_CV_*）補一份 Cloudflare 設定表，避免只設 GROQ_API_KEY 卻有人誤覆 URL。\u003c/div\u003e\u003ch2\u003e七、發布前需求（驗證清單）\u003c/h2\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003cth\u003e項\u003c/th\u003e\u003cth\u003e怎麼做\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCloudflare preview 實測\u003c/td\u003e\u003ctd\u003e有 key／無 key 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e金鑰\u003c/td\u003e\u003ctd\u003e設 GROQ_API_KEY；強烈建議設 JINA_API_KEY；確認 AI_*_URL／MODEL 無誤覆。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e不擴張\u003c/td\u003e\u003ctd\u003e不做帳號、訂閱、儀表板、履歷模板、面試題庫；維持 LESS APP. MORE BOOK。\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e審計人：程式碼審計員（第一棒，只讀未改）。下一棒：研究驗證員，重點驗 M3／M4 在線上 runtime 的真實成功率。\u003c/p\u003e\u003c/div\u003e","createdAt":1788746877632,"displayMode":"artifact","id":"7925b7099bd30c4cac65bdfe","isNew":false,"itemType":"NOTE","name":"Talent Radar 程式碼審計報告","parents":{"b105349fa3932713b892bc43":1788746877632},"updatedAt":1788746877632,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":3},{"artifactHtml":"\u003cstyle\u003e.doc{background:#F7F6F1;padding:28px 30px;font:16px/1.75 sans-serif;color:#1F2937}.eyebrow{font:600 11px monospace;color:#2F5D50}h1{font-size:25px}h2{font-size:19px;margin-top:28px}p,li{color:#3A4450;max-width:68ch}.ok{background:#E6EFEA;border-left:3px solid #2F5D50;padding:12px 16px;margin:12px 0}.warn{background:#F7ECD4;border-left:3px solid #8A5A00;padding:12px 16px;margin:12px 0}.bad{background:#F6E4E0;border-left:3px solid #8C2F2F;padding:12px 16px;margin:12px 0}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 研究驗證 · 2026-09-07 · 第二棒\u003c/div\u003e\u003ch1\u003eTalent Radar 研究驗證 Blueprint 翻譯專員\u003c/h1\u003e\u003c/header\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e可讀證據\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e4 頁\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e官網2加職缺2\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e讀不到\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 頁\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eGlassdoor Indeed Reddit 403\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e可讀證據摘要\u003c/h2\u003e\u003cdiv class=\"ok\"\u003e\u003cp\u003e\u003cb\u003eA1 官網 Localization\u003c/b\u003e：Blueprint Technologies LLC，Bellevue 總部，大型內部真人團隊30加語言。https://bpcs.com/localization\u003c/p\u003e\u003cp\u003e\u003cb\u003eA2 官網招募長文2021-06-14\u003c/b\u003e：transcreation非直譯，六位員工多元背景，mosaic團隊自述。https://bpcs.com/blog/be-a-translation-and-localization-specialist\u003c/p\u003e\u003cp\u003e\u003cb\u003eA3 Greenhouse波蘭語職缺\u003c/b\u003e：遠端限美，PT10-18，母語級加英語加CAT。https://job-boards.greenhouse.io/bpcs/jobs/7984877\u003c/p\u003e\u003cp\u003e\u003cb\u003eA4 LinkedIn丹麥語職缺2026-07-06\u003c/b\u003e：時薪33.65-38.46，WA中位36.06。https://www.linkedin.com/jobs/view/translation-specialist-at-blueprint-4442699644\u003c/p\u003e\u003c/div\u003e\u003ch2\u003e讀不到與缺口\u003c/h2\u003e\u003cdiv class=\"warn\"\u003e\u003cp\u003eB1 Glassdoor總評282則3.1分、B2 Indeed Bellevue頁、B3 Reddit貼文與面試頁皆403，只留連結不當證據。bpcs.com/about 404改用首頁。不推測薪資外推、規模數字、現況文化。\u003c/p\u003e\u003c/div\u003e\u003ch2\u003e給修復整備員\u003c/h2\u003e\u003cp\u003eM3部分成立：官網加職缺無key可讀，第三方評價無key極易403。M4部分成立：Greenhouse直讀OK，LinkedIn夾雜訊需過濾。研究失敗不讓流程失敗，三態寫進researchNote。\u003c/p\u003e\u003c/div\u003e","artifactSourceHash":"1rz4kmr11a8s13","content":"\u003cdiv class=\"doc\"\u003e\u003ch2\u003e研究驗證（2026-09-07 複驗，origin/main 0870a5f 後）\u003c/h2\u003e\u003cp\u003eRESULT: PARTIAL — 正式鏈通，非正式缺口依舊。\u003c/p\u003e\u003cul\u003e\u003cli\u003eA1 bpcs.com/localization（正式，可讀）：大型內部真人團隊，30+語言，永久遠端。\u003c/li\u003e\u003cli\u003eA2 bpcs.com/blog/be-a-translation-and-localization-specialist（正式，可讀，2021-06-14）：transcreation 非直譯，多元背景 mosaic 自述。\u003c/li\u003e\u003cli\u003eA3 Greenhouse bpcs 7984877（正式，可讀）：遠端限美，WA 時薪 33.65-43.25，需母語級+CAT。\u003c/li\u003e\u003cli\u003eA4 LinkedIn 4442699644（正式，可讀，2026-07-06）：丹麥語遊戲本地化，WA 33.65-38.46。\u003c/li\u003e\u003cli\u003eB1-B3 Glassdoor/Indeed/Reddit（非正式，找到但讀不到，403 沿用上次結論，本次為省點未重試）。bpcs.com/about 404。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAI 可用正式證據回答 values/環境（僅自述）/契合/張力；環境無第三方交叉，unknowns 必須明示。研究失敗不擋流程，三態寫 researchNote。\u003c/p\u003e\u003cp\u003e給修復整備員：M3/M4 已在 0870a5f 修（follow+Jina 備援、併發4/45s、Wikipedia 保底、去 LinkedIn 雜訊）。待驗：Cloudflare preview 有/無 JINA_API_KEY 各跑一次；M1 雙跑、M2 marker 仍在審計報告未修。\u003c/p\u003e\u003c/div\u003e","createdAt":1788747112926,"deletedAt":null,"displayMode":"artifact","id":"fa621c8b900140d8bc3a3d29","isNew":false,"isPublic":false,"itemType":"NOTE","name":"Talent Radar 研究驗證 Blueprint 翻譯專員","parents":{"b105349fa3932713b892bc43":1788747112926},"preParentID":null,"updatedAt":1788750298121,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":8,"websiteContent":"[{\"originUrl\":\"https://bpcs.com/localization\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://bpcs.com/blog/be-a-translation-and-localization-specialist\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://job-boards.greenhouse.io/bpcs/jobs/7984877\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://www.linkedin.com/jobs/view/translation-specialist-at-blueprint-4442699644\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://www.glassdoor.com/Reviews/Blueprint-Technologies-Reviews-E821898.htm\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://bpcs.com/\",\"title\":null,\"content\":null,\"imageUrl\":null}]"},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;} :root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} .eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);} h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:24ch;} h2{font-size:19px;margin:28px 0 10px;} p,li{color:var(--ink2);max-width:68ch;} ul{padding-left:22px;} li{margin:5px 0;} .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;} .callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;} code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 修復整備 · 2026-09-07 · 第三棒\u003c/div\u003e\u003ch1\u003eTalent Radar 修復紀錄：M3 M4 研究鏈可靠性修復\u003c/h1\u003e\u003cp\u003e只修審計報告 M3（公司研究無 key 脆弱）與 M4（職缺讀取 redirect manual）。main 0b756fb → 0870a5f。\u003c/p\u003e\u003c/header\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM4：\u003ccode\u003ejob-ad-reader\u003c/code\u003e 用 redirect manual，大量職缺站 301/302 直接判 unreadable，且無 Jina 備援；Greenhouse 類頁面無 JSON-LD 時只有 body 正文可取。\u003c/li\u003e\u003cli\u003eM3：\u003ccode\u003efetchCompanyResearch\u003c/code\u003e 逐一 await 最多 8 源、無併發無超時，Worker 內極慢；DDG lite 無 key 回 bot 牆、Bing RSS 雜訊大，no-key 路徑無 JSON 保底。\u003c/li\u003e\u003cli\u003eM4 連帶：LinkedIn 頁面夾導航雜訊（如研究驗證棒遇到的 Tokyo 字樣），需在進入證據前剝除。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003ejob-ad-reader：redirect 改 follow，加瀏覽器 UA；直讀失敗走 Jina reader 備援；解析加 bodyText 後備（main/article 去 chrome 取正文 15000 字），meta 描述短於 200 字時改用正文。\u003c/li\u003e\u003cli\u003eopportunity-analysis：fetchText 加 12s 超時（Jina reader 20s、搜尋 8–10s）；readSourcesWithLimit 併發 4、上限 8 源、總時限 45s，取代逐一 await；searchWeb 加 Wikipedia opensearch（no-key JSON）與既有 Jina/DDG/Bing 並行；stripPageNoise 剝 LinkedIn 導航雜訊。\u003c/li\u003e\u003cli\u003e未動：M1 雙跑研究、M2 marker 污染、M5 sessionStorage、M6 隱藏欄顯示、N 系列，留給後續棒次。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；Node 20 會被 Vite 擋）。routeTree.gen.ts 等建置副產物已還原，只提交兩個源檔。tsc 全倉仍有既有錯誤（與本棒無關），未引入新類型錯誤。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eGreenhouse 實頁樣本（bpcs 7984877）：bodyText 後備取出 13072 字正文，含 Bellevue 總部與職責，與研究驗證棒 A3 一致。\u003c/li\u003e\u003cli\u003eno-key 搜尋：DDG lite 回 bot 牆、Bing RSS 有結果但雜訊大、Jina search 無 key 回 401、Wikipedia opensearch 正常回 JSON——保底路徑有效。\u003c/li\u003e\u003cli\u003eBing RSS 與 Wikipedia 解析器單元煙測通過。\u003c/li\u003e\u003cli\u003e使用者流程：/opportunity 貼 Greenhouse 連結直讀跟隨轉址成功，body 取正文填表；公司研究走併發讀源，三態（可讀/找到但讀不到/缺口）照舊寫進 researchNote 與來源分類，研究失敗不讓流程失敗。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM4：\u003ccode\u003ejob-ad-reader\u003c/code\u003e 用 redirect manual，大量職缺站 301/302 直接判 unreadable，且無 Jina 備援；Greenhouse 類頁面無 JSON-LD 時只有 body 正文可取。\u003c/li\u003e\u003cli\u003eM3：\u003ccode\u003efetchCompanyResearch\u003c/code\u003e 逐一 await 最多 8 源、無併發無超時，Worker 內極慢；DDG lite 無 key 回 bot 牆、Bing RSS 雜訊大，no-key 路徑無 JSON 保底。\u003c/li\u003e\u003cli\u003eM4 連帶：LinkedIn 頁面夾導航雜訊（如研究驗證棒遇到的 Tokyo 字樣），需在進入證據前剝除。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003ejob-ad-reader：redirect 改 follow，加瀏覽器 UA；直讀失敗走 Jina reader 備援；解析加 bodyText 後備（main/article 去 chrome 取正文 15000 字），meta 描述短於 200 字時改用正文。\u003c/li\u003e\u003cli\u003eopportunity-analysis：fetchText 加 12s 超時（Jina reader 20s、搜尋 8–10s）；readSourcesWithLimit 併發 4、上限 8 源、總時限 45s，取代逐一 await；searchWeb 加 Wikipedia opensearch（no-key JSON）與既有 Jina/DDG/Bing 並行；stripPageNoise 剝 LinkedIn 導航雜訊。\u003c/li\u003e\u003cli\u003e未動：M1 雙跑研究、M2 marker 污染、M5 sessionStorage、M6 隱藏欄顯示、N 系列，留給後續棒次。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；Node 20 會被 Vite 擋）。routeTree.gen.ts 等建置副產物已還原，只提交兩個源檔。tsc 全倉仍有既有錯誤（與本棒無關），未引入新類型錯誤。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eGreenhouse 實頁樣本（bpcs 7984877）：bodyText 後備取出 13072 字正文，含 Bellevue 總部與職責，與研究驗證棒 A3 一致。\u003c/li\u003e\u003cli\u003eno-key 搜尋：DDG lite 回 bot 牆、Bing RSS 有結果但雜訊大、Jina search 無 key 回 401、Wikipedia opensearch 正常回 JSON——保底路徑有效。\u003c/li\u003e\u003cli\u003eBing RSS 與 Wikipedia 解析器單元煙測通過。\u003c/li\u003e\u003cli\u003e使用者流程：/opportunity 貼 Greenhouse 連結直讀跟隨轉址成功，body 取正文填表；公司研究走併發讀源，三態（可讀/找到但讀不到/缺口）照舊寫進 researchNote 與來源分類，研究失敗不讓流程失敗。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒。\u003c/p\u003e\u003c/div\u003e","createdAt":1788747778597,"displayMode":"artifact","id":"fe69d304fb7f07354443bff6","isNew":false,"itemType":"NOTE","name":"Talent Radar 修復紀錄：M3 M4 研究鏈可靠性修復","parents":{"b105349fa3932713b892bc43":1788747778597},"updatedAt":1788747778597,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":4},{"artifactHtml":"\u003cstyle\u003e\n:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;--warn:#8A5A00;--warnbg:#F7ECD4;--bad:#8C2F2F;--badbg:#F6E4E0;}\n:root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;--warn:#E3B45C;--warnbg:#2A2415;--bad:#E08A8A;--badbg:#2B1B1B;}\n.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;}\n.eyebrow{font:600 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.16em;color:var(--accent);}\nh1{font-size:29px;line-height:1.25;letter-spacing:-.015em;margin:12px 0 0;max-width:22ch;}\n.lede{color:var(--ink2);max-width:64ch;margin-top:10px;}\nh2{font-size:19px;margin:34px 0 10px;letter-spacing:-.01em;}\nh3{font-size:15px;margin:20px 0 6px;}\np,li{color:var(--ink2);max-width:68ch;}\nul{padding-left:22px;margin:8px 0;}\nli{margin:5px 0;}\n.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:20px 0 6px;}\n.stat{background:var(--soft);border-radius:8px;padding:12px 14px;}\n.stat .k{font-size:12px;color:var(--accent);}\n.stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);}\n.stat .n{font-size:12px;color:var(--ink2);margin-top:2px;}\n.callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;}\n.callout .tag{flex:none;font:700 11px ui-monospace,monospace;letter-spacing:.08em;color:var(--accent);padding-top:3px;}\n.must{background:var(--badbg);border-left:3px solid var(--bad);padding:12px 16px;border-radius:0 6px 6px 0;margin:12px 0;}\n.must b{color:var(--bad);}\n.nice{background:var(--warnbg);border-left:3px solid var(--warn);padding:12px 16px;border-radius:0 6px 6px 0;margin:12px 0;}\ncode{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}\ntable{border-collapse:collapse;width:100%;font-size:14px;margin:10px 0;}\nth,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--hair);color:var(--ink2);vertical-align:top;}\nth{font:600 11px ui-monospace,monospace;letter-spacing:.06em;}\n@media(max-width:640px){.doc{padding:20px 18px;}h1{font-size:24px;}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 程式碼審計 · 2026-09-07 · MAIN 0b756fb\u003c/div\u003e\u003ch1\u003eTalent Radar 程式碼審計報告\u003c/h1\u003e\u003cp class=\"lede\"\u003e只讀審計，不改程式碼。依序讀完 TALENT_RADAR_MASTER_CONTEXT、TALENT_RADAR_CONTEXT、README，再檢查 routes／lib／styles 現況。結論：核心旅程已成形、可發布驗證，但 Opportunity 研究鏈有重複呼叫與可靠性風險，發布前必須修。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e審計版本\u003c/div\u003e\u003cdiv class=\"v\"\u003e0b756fb\u003c/div\u003e\u003cdiv class=\"n\"\u003emain 最新，含連續 5 次研究鏈修復\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e核心流程\u003c/div\u003e\u003cdiv class=\"v\"\u003e4 頁閉環\u003c/div\u003e\u003cdiv class=\"n\"\u003e/ → /start → /reflect → /opportunity\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eAI 引擎\u003c/div\u003e\u003cdiv class=\"v\"\u003eGroq 120b\u003c/div\u003e\u003cdiv class=\"n\"\u003eopenai/gpt-oss-120b，皆有確定性 fallback\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e資料持久\u003c/div\u003e\u003cdiv class=\"v\"\u003esessionStorage\u003c/div\u003e\u003cdiv class=\"n\"\u003e分頁關閉即失，無帳號（符合原則）\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003ch2\u003e一、Talent Radar 是什麼／不是什麼\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心\u003c/span\u003e\u003cdiv\u003e職涯決策陪伴者：先理解人，再理解機會，最後做比較。核心序列是 理解自己 → 反思 → 理解機會 → 比較。承諾是「幫你更理解自己、做出更好的職涯決定」，不是告訴你該選哪份工作。\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003e是：\u003c/b\u003e安靜的思考房間； LESS APP, MORE BOOK 長書式體驗；短 onboarding＋語意化故事＋ grounded 反思＋可修正；機會比較只呈現契合／張力／未知／待查問題，不打分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003e不是：\u003c/b\u003e求職版、履歷產生器、海投工具、面試教練、人格測驗、心理診斷、通用 AI 職涯雞湯、儀表板、分數配對。這次審計以 MASTER CONTEXT 為最高真實來源，README 內舊 Lovable 文案與之衝突處以 MASTER 為準。\u003c/p\u003e\u003ch2\u003e二、目前使用者流程（實作現況）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003e/（index.tsx）：\u003c/b\u003e符合 MASTER：主標 Understand yourself before changing your career、副標、Let's Get Started 文字連結、次要 PayPal 支持區。SEO／OG 完整。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/start：\u003c/b\u003e6 步：現況 → 近期感受 → 在職細節（僅在職者，title／industry／size／arrangement 全可跳過）→ 改變故事大 textarea → 想要（多選＋自填）→ 不想重演（多選＋自填）→ 感謝頁進 /reflect。每鍵即存 sessionStorage，切換在職／非在職會跳步。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/reflect：\u003c/b\u003e讀 onboarding → generateReflection（Groq）→ 失敗回 deterministic fallback。Yes 進 /opportunity；Not quite 問 What feels different？送回同一引擎重寫。已實作提交後重寫＋防重複送。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/opportunity：\u003c/b\u003e貼連結＋Read this listing／職稱／公司（強烈建議）／描述大欄 → Continue 存檔 → 7 秒研究動畫 → 六段分析＋來源清單 → 可選上傳 CV（PDF／DOCX，瀏覽器內解析）→ 六段 CV 分析。/feedback 另以 GitHub issue 收集回饋。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、已實作什麼（符合 MASTER 處）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e視覺語言守住：styles.css 以 \u003ccode\u003echip\u003c/code\u003e／\u003ccode\u003efield\u003c/code\u003e／\u003ccode\u003esoft-surface\u003c/code\u003e 做底線式文字操作，無膠囊大 CTA；深綠＋紙色＋細線符合安靜書感。\u003c/li\u003e\u003cli\u003e反思引擎 grounded：systemPrompt 明訂只用分享事實、故事為主證據、不診斷、不發明、保留不確定性、引用原話；輸出強制 4–5 段 JSON，末段必須是 Does that feel true to you？，否則 fallback。\u003c/li\u003e\u003cli\u003e機會研究誠實：official／third-party／lead 三分類，lead 明示「未讀、非證據」；environment 首句固定放 researchNote（跑了幾次搜尋、讀到幾個）。无分數、無「你該去」。\u003c/li\u003e\u003cli\u003eJob 讀取有 JSON-LD＋meta 解析，LinkedIn 擋讀有專屬提示；CV 隱私文案寫清「檔不存、文字送 AI 依其條款」。\u003c/li\u003e\u003cli\u003e錯誤兜底齊：deterministic fallback 三處（reflection／opportunity／cv）、404／ErrorBoundary、h3 吞錯展開＋error-capture。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、未完成／偏離 MASTER 處\u003c/h2\u003e\u003cul\u003e\u003cli\u003eREADME 仍是舊 Lovable 版（hero 寫 Is this job worth…、Version 1 說不做 AI 分析），與現況和 MASTER 皆不符，只影響協作者認知，不影響使用者。\u003c/li\u003e\u003cli\u003eMASTER 要求的反思長度是 3–4 短段約 60–120 字，prompt 寫 4–5 段；前端把任何問號句放大，長度約束靠模型自律。屬輕微漂移。\u003c/li\u003e\u003cli\u003eMASTER 技術段寫分支 feature/launch-support-link 驗證中勿自動合 main，但本次 main 已含支持連結與完整機會鏈，分支狀態不明，發布以 main 為準即可。\u003c/li\u003e\u003cli\u003e機會頁 state 有 location／arrangement／salary／responsibilities／requirements／benefits，但 UI 只暴露 url／title／company／description 四欄；reader 填入的隱藏欄使用者看不到改不了，會進 AI 證據。屬半成品。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、損壞或不可靠處（MUST FIX BEFORE LAUNCH）\u003c/h2\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM1 · 機會研究被跑兩次。\u003c/b\u003eopportunity.tsx 的 continueOn 先呼叫 researchOpportunity，再呼叫 analyzeOpportunity，而後者內部又跑一次 fetchCompanyResearch。一次分析最多 10 組查詢、上限 48 次讀取、兩份 9000 字證據進 prompt：慢、貴、易觸發限流與 Worker 超時。修法：只調 analyzeOpportunity 並用其回傳的研究結果渲染。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM2 · saveOpportunity 副作用污染。\u003c/b\u003elib/opportunity.ts 的 save 會改寫傳入物件的 description，附加 [TALENT_RADAR_COMPANY:…] 標記，靠 preprocess 再剝除。一旦任一 client／runtime 路徑掉 marker 或解析失敗，公司名會漏進 AI 證據或顯示。修法：marker 改放獨立欄位或 server input，不要碰 description。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM3 · 公司研究在無 key 時極脆弱。\u003c/b\u003eJina search／reader 無 JINA_API_KEY 即停用，只剩 DDG lite＋Bing RSS 刮取，兩者在 Cloudflare Worker 極易 403／驗證；通用 anchor 解析雜訊大。git log 顯示研究鏈連修 5 版仍不穩。發布前必須在 Cloudflare preview 實測有／無 JINA_API_KEY 兩條路，並把 JINA_API_KEY 設好；否則研究頁長期顯示「跑了 5 次搜尋、0 個可讀來源」。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM4 · 職缺讀取 redirect=manual。\u003c/b\u003ejob-ad-reader 用 manual 不跟 301／302，大量職缺站（Greenhouse／Lever／Workday 短址）直接判 unreadable，且無 Jina 備援。發布前至少改 follow＋Jina reader 備援，否則「貼連結」主路徑名存實亡。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM5 · 僅 sessionStorage。\u003c/b\u003eonboarding／opportunity 只在分頁 session；新分頁、重整後直接進 /reflect 會看到空反思或「session 已失效請重來」；onboarding zod 上限（story 12000）超限時 load 整包回 null。修法至少：超限欄截斷而非全丟、直接進深頁給回 /start 的文字路徑。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM6 · 隱藏欄＋序列化研究。\u003c/b\u003eM4 的隱藏欄問題＋fetchCompanyResearch 以 for 迴圈逐一 await 讀源（最多 8 源），Worker 內極慢。修法：隱藏欄要嘛顯示可編、要嘛不送 AI；讀源加併發上限（如 4）＋總超時。\u003c/div\u003e\u003ch2\u003e六、NICE TO HAVE AFTER LAUNCH\u003c/h2\u003e\u003cdiv class=\"nice\"\u003eN1 · __root.tsx 的 404／錯誤鈕是 rounded-md 實心大 CTA，違反書感，改文字連結即可。\u003cbr\u003eN2 · 研究頁 7 秒最低停留＋reflection 逐段 Reveal 在慢網下體感更慢，可依實際完成提早收。\u003cbr\u003eN3 · reflect 的 Yes／Not quite 可重複點、submitted 後仍可改 response，狀態機收斂一下。\u003cbr\u003eN4 · CV fallback 的 applicationTip 出現 Schedule Send／週二早上寄信，與 grounded 無關且像通用建議，砍掉或改寫。\u003cbr\u003eN5 · README 重寫為 MASTER 精簡版，刪 Lovable 舊 hero 與 Version 1 段。\u003cbr\u003eN6 · opportunity 表單補 location／arrangement／salary 顯示欄；companyUrl 目前全靠 reader，無手填入口。\u003cbr\u003eN7 · 環境變數三分叉（AI_REFLECTION_*／AI_OPPORTUNITY_*／AI_CV_*）補一份 Cloudflare 設定表，避免只設 GROQ_API_KEY 卻有人誤覆 URL。\u003c/div\u003e\u003ch2\u003e七、發布前需求（驗證清單）\u003c/h2\u003e\u003ctable\u003e\u003ctr\u003e\u003cth\u003e項\u003c/th\u003e\u003cth\u003e怎麼做\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCloudflare preview 實測\u003c/td\u003e\u003ctd\u003e有 key／無 key 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e金鑰\u003c/td\u003e\u003ctd\u003e設 GROQ_API_KEY；強烈建議設 JINA_API_KEY；確認 AI_*_URL／MODEL 無誤覆。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e不擴張\u003c/td\u003e\u003ctd\u003e不做帳號、訂閱、儀表板、履歷模板、面試題庫；維持 LESS APP. MORE BOOK。\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003cp\u003e審計人：程式碼審計員（第一棒，只讀未改）。下一棒：研究驗證員，重點驗 M3／M4 在線上 runtime 的真實成功率。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e審計版本\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e0b756fb\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003emain 最新，含連續 5 次研究鏈修復\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e核心流程\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e4 頁閉環\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e/ → /start → /reflect → /opportunity\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eAI 引擎\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eGroq 120b\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eopenai/gpt-oss-120b，皆有確定性 fallback\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e資料持久\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003esessionStorage\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e分頁關閉即失，無帳號（符合原則）\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e一、Talent Radar 是什麼／不是什麼\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心\u003c/span\u003e\u003cdiv\u003e職涯決策陪伴者：先理解人，再理解機會，最後做比較。核心序列是 理解自己 → 反思 → 理解機會 → 比較。承諾是「幫你更理解自己、做出更好的職涯決定」，不是告訴你該選哪份工作。\u003c/div\u003e\u003c/div\u003e\u003cp\u003e\u003cb\u003e是：\u003c/b\u003e安靜的思考房間； LESS APP, MORE BOOK 長書式體驗；短 onboarding＋語意化故事＋ grounded 反思＋可修正；機會比較只呈現契合／張力／未知／待查問題，不打分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003e不是：\u003c/b\u003e求職版、履歷產生器、海投工具、面試教練、人格測驗、心理診斷、通用 AI 職涯雞湯、儀表板、分數配對。這次審計以 MASTER CONTEXT 為最高真實來源，README 內舊 Lovable 文案與之衝突處以 MASTER 為準。\u003c/p\u003e\u003ch2\u003e二、目前使用者流程（實作現況）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cb\u003e/（index.tsx）：\u003c/b\u003e符合 MASTER：主標 Understand yourself before changing your career、副標、Let's Get Started 文字連結、次要 PayPal 支持區。SEO／OG 完整。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/start：\u003c/b\u003e6 步：現況 → 近期感受 → 在職細節（僅在職者，title／industry／size／arrangement 全可跳過）→ 改變故事大 textarea → 想要（多選＋自填）→ 不想重演（多選＋自填）→ 感謝頁進 /reflect。每鍵即存 sessionStorage，切換在職／非在職會跳步。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/reflect：\u003c/b\u003e讀 onboarding → generateReflection（Groq）→ 失敗回 deterministic fallback。Yes 進 /opportunity；Not quite 問 What feels different？送回同一引擎重寫。已實作提交後重寫＋防重複送。\u003c/li\u003e\u003cli\u003e\u003cb\u003e/opportunity：\u003c/b\u003e貼連結＋Read this listing／職稱／公司（強烈建議）／描述大欄 → Continue 存檔 → 7 秒研究動畫 → 六段分析＋來源清單 → 可選上傳 CV（PDF／DOCX，瀏覽器內解析）→ 六段 CV 分析。/feedback 另以 GitHub issue 收集回饋。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、已實作什麼（符合 MASTER 處）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e視覺語言守住：styles.css 以 \u003ccode\u003echip\u003c/code\u003e／\u003ccode\u003efield\u003c/code\u003e／\u003ccode\u003esoft-surface\u003c/code\u003e 做底線式文字操作，無膠囊大 CTA；深綠＋紙色＋細線符合安靜書感。\u003c/li\u003e\u003cli\u003e反思引擎 grounded：systemPrompt 明訂只用分享事實、故事為主證據、不診斷、不發明、保留不確定性、引用原話；輸出強制 4–5 段 JSON，末段必須是 Does that feel true to you？，否則 fallback。\u003c/li\u003e\u003cli\u003e機會研究誠實：official／third-party／lead 三分類，lead 明示「未讀、非證據」；environment 首句固定放 researchNote（跑了幾次搜尋、讀到幾個）。无分數、無「你該去」。\u003c/li\u003e\u003cli\u003eJob 讀取有 JSON-LD＋meta 解析，LinkedIn 擋讀有專屬提示；CV 隱私文案寫清「檔不存、文字送 AI 依其條款」。\u003c/li\u003e\u003cli\u003e錯誤兜底齊：deterministic fallback 三處（reflection／opportunity／cv）、404／ErrorBoundary、h3 吞錯展開＋error-capture。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、未完成／偏離 MASTER 處\u003c/h2\u003e\u003cul\u003e\u003cli\u003eREADME 仍是舊 Lovable 版（hero 寫 Is this job worth…、Version 1 說不做 AI 分析），與現況和 MASTER 皆不符，只影響協作者認知，不影響使用者。\u003c/li\u003e\u003cli\u003eMASTER 要求的反思長度是 3–4 短段約 60–120 字，prompt 寫 4–5 段；前端把任何問號句放大，長度約束靠模型自律。屬輕微漂移。\u003c/li\u003e\u003cli\u003eMASTER 技術段寫分支 feature/launch-support-link 驗證中勿自動合 main，但本次 main 已含支持連結與完整機會鏈，分支狀態不明，發布以 main 為準即可。\u003c/li\u003e\u003cli\u003e機會頁 state 有 location／arrangement／salary／responsibilities／requirements／benefits，但 UI 只暴露 url／title／company／description 四欄；reader 填入的隱藏欄使用者看不到改不了，會進 AI 證據。屬半成品。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、損壞或不可靠處（MUST FIX BEFORE LAUNCH）\u003c/h2\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM1 · 機會研究被跑兩次。\u003c/b\u003eopportunity.tsx 的 continueOn 先呼叫 researchOpportunity，再呼叫 analyzeOpportunity，而後者內部又跑一次 fetchCompanyResearch。一次分析最多 10 組查詢、上限 48 次讀取、兩份 9000 字證據進 prompt：慢、貴、易觸發限流與 Worker 超時。修法：只調 analyzeOpportunity 並用其回傳的研究結果渲染。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM2 · saveOpportunity 副作用污染。\u003c/b\u003elib/opportunity.ts 的 save 會改寫傳入物件的 description，附加 [TALENT_RADAR_COMPANY:…] 標記，靠 preprocess 再剝除。一旦任一 client／runtime 路徑掉 marker 或解析失敗，公司名會漏進 AI 證據或顯示。修法：marker 改放獨立欄位或 server input，不要碰 description。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM3 · 公司研究在無 key 時極脆弱。\u003c/b\u003eJina search／reader 無 JINA_API_KEY 即停用，只剩 DDG lite＋Bing RSS 刮取，兩者在 Cloudflare Worker 極易 403／驗證；通用 anchor 解析雜訊大。git log 顯示研究鏈連修 5 版仍不穩。發布前必須在 Cloudflare preview 實測有／無 JINA_API_KEY 兩條路，並把 JINA_API_KEY 設好；否則研究頁長期顯示「跑了 5 次搜尋、0 個可讀來源」。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM4 · 職缺讀取 redirect=manual。\u003c/b\u003ejob-ad-reader 用 manual 不跟 301／302，大量職缺站（Greenhouse／Lever／Workday 短址）直接判 unreadable，且無 Jina 備援。發布前至少改 follow＋Jina reader 備援，否則「貼連結」主路徑名存實亡。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM5 · 僅 sessionStorage。\u003c/b\u003eonboarding／opportunity 只在分頁 session；新分頁、重整後直接進 /reflect 會看到空反思或「session 已失效請重來」；onboarding zod 上限（story 12000）超限時 load 整包回 null。修法至少：超限欄截斷而非全丟、直接進深頁給回 /start 的文字路徑。\u003c/div\u003e\u003cdiv class=\"must\"\u003e\u003cb\u003eM6 · 隱藏欄＋序列化研究。\u003c/b\u003eM4 的隱藏欄問題＋fetchCompanyResearch 以 for 迴圈逐一 await 讀源（最多 8 源），Worker 內極慢。修法：隱藏欄要嘛顯示可編、要嘛不送 AI；讀源加併發上限（如 4）＋總超時。\u003c/div\u003e\u003ch2\u003e六、NICE TO HAVE AFTER LAUNCH\u003c/h2\u003e\u003cdiv class=\"nice\"\u003eN1 · __root.tsx 的 404／錯誤鈕是 rounded-md 實心大 CTA，違反書感，改文字連結即可。\u003cbr\u003eN2 · 研究頁 7 秒最低停留＋reflection 逐段 Reveal 在慢網下體感更慢，可依實際完成提早收。\u003cbr\u003eN3 · reflect 的 Yes／Not quite 可重複點、submitted 後仍可改 response，狀態機收斂一下。\u003cbr\u003eN4 · CV fallback 的 applicationTip 出現 Schedule Send／週二早上寄信，與 grounded 無關且像通用建議，砍掉或改寫。\u003cbr\u003eN5 · README 重寫為 MASTER 精簡版，刪 Lovable 舊 hero 與 Version 1 段。\u003cbr\u003eN6 · opportunity 表單補 location／arrangement／salary 顯示欄；companyUrl 目前全靠 reader，無手填入口。\u003cbr\u003eN7 · 環境變數三分叉（AI_REFLECTION_*／AI_OPPORTUNITY_*／AI_CV_*）補一份 Cloudflare 設定表，避免只設 GROQ_API_KEY 卻有人誤覆 URL。\u003c/div\u003e\u003ch2\u003e七、發布前需求（驗證清單）\u003c/h2\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003cth\u003e項\u003c/th\u003e\u003cth\u003e怎麼做\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCloudflare preview 實測\u003c/td\u003e\u003ctd\u003e有 key／無 key 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e金鑰\u003c/td\u003e\u003ctd\u003e設 GROQ_API_KEY；強烈建議設 JINA_API_KEY；確認 AI_*_URL／MODEL 無誤覆。\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e不擴張\u003c/td\u003e\u003ctd\u003e不做帳號、訂閱、儀表板、履歷模板、面試題庫；維持 LESS APP. MORE BOOK。\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003e審計人：程式碼審計員（第一棒，只讀未改）。下一棒：研究驗證員，重點驗 M3／M4 在線上 runtime 的真實成功率。\u003c/p\u003e\u003c/div\u003e","createdAt":1788748417227,"displayMode":"artifact","id":"6a9e2281bad4f61cea6b0058","isNew":false,"itemType":"NOTE","name":"Talent Radar 程式碼審計報告 的副本","parents":{"b105349fa3932713b892bc43":1788746877632},"pinnedAt":null,"reminderTime":null,"updatedAt":1788748417228,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":1},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;} :root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} .eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);} h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:24ch;} h2{font-size:19px;margin:28px 0 10px;} p,li{color:var(--ink2);max-width:68ch;} ul{padding-left:22px;} li{margin:5px 0;} .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;} .callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;} code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 修復整備 · 2026-09-07 · 第三棒（續）\u003c/div\u003e\u003ch1\u003eTalent Radar 修復紀錄：M1 M2 單次研究與 marker 移除\u003c/h1\u003e\u003cp\u003e只修審計報告 M1（機會研究被跑兩次）與 M2（saveOpportunity marker 污染 description）。main 0870a5f → b8d607c，已 push。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e提交\u003c/div\u003e\u003cdiv class=\"v\"\u003eb8d607c\u003c/div\u003e\u003cdiv class=\"n\"\u003e3 檔源檔，已 push 到 main\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e生產建置\u003c/div\u003e\u003cdiv class=\"v\"\u003e通過\u003c/div\u003e\u003cdiv class=\"n\"\u003evite build（Cloudflare nitro 目標，Node 22）\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003etsc 全倉\u003c/div\u003e\u003cdiv class=\"v\"\u003e44 錯\u003c/div\u003e\u003cdiv class=\"n\"\u003e修前修後同數，既有錯誤，未引入新錯\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：\u003ccode\u003eopportunity.tsx\u003c/code\u003e 的 continueOn 先調 \u003ccode\u003eresearchOpportunity\u003c/code\u003e（client 直跑研究），再調 \u003ccode\u003eanalyzeOpportunity\u003c/code\u003e（server 內又跑一次 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e）。一次分析最多雙倍查詢與讀取：慢、貴、易觸發限流與 Worker 超時。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003elib/opportunity.ts\u003c/code\u003e 的 save 會改寫傳入物件的 \u003ccode\u003edescription\u003c/code\u003e，附加 \u003ccode\u003e[TALENT_RADAR_COMPANY:…]\u003c/code\u003e 標記，靠 preprocess 再剝除。任一 client／runtime 路徑掉 marker 或解析失敗，公司名就會漏進 AI 證據或顯示文字。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：頁面只調 \u003ccode\u003eanalyzeOpportunity\u003c/code\u003e 一次（研究只在 server 跑）。server 回傳新增輕量 \u003ccode\u003eOpportunityResearchSnapshot\u003c/code\u003e（companyName／searchesAttempted／searchResultsFound／readableCount／leadCount），頁面直接渲染「跑了幾次搜尋、讀到幾個」；刪除 client 端 \u003ccode\u003eresearchOpportunity\u003c/code\u003e 匯出。失敗路徑改為顯示重試提示（server 端 fallback 仍在，無 key／AI 失敗照舊回確定性分析）。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003esaveOpportunity\u003c/code\u003e 只持久化驗證後的物件，不再碰 \u003ccode\u003edescription\u003c/code\u003e；公司名只走 server payload 獨立欄位。讀取側的 marker preprocess 保留做向下相容（舊 session 殘留標記仍能剝除），不再有新寫入。\u003c/li\u003e\u003cli\u003e未動：M5 sessionStorage、M6 隱藏欄顯示、N 系列；Cloudflare 線上 preview 有／無 JINA_API_KEY 的完整旅程實測仍待跑（見下）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；環境預設 Node 20 會被 Vite 擋，需用 Node 22。另發現 @vitejs/plugin-react 在全新安裝時缺失導致建置失敗，加裝後通過，但該依賴與 package-lock 未提交，保持最小 diff 只交 3 檔源檔；CI／部署環境若重裝依賴遇到同錯，加裝即可）。routeTree.gen.ts 等建置副產物已還原。tsc 全倉 44 錯，修前修後同數（既有錯誤，與本棒無關），未引入新類型錯誤。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e邏輯驗證：單次研究鏈確認（頁面唯一研究入口為 server 內 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e）；research snapshot 計數欄位與渲染文案對齊（readableCount／leadCount）；save 不再改寫 description（diff 確認）。\u003c/li\u003e\u003cli\u003e未做：Cloudflare preview 有／無 JINA_API_KEY 各跑一次完整旅程（sandbox 內無金鑰、無已部署 preview URL，只能做建置驗證；需下一棒或使用者在有金鑰的 preview 環境實測 onboarding→反思→修正→機會→CV 全旅程）。\u003c/li\u003e\u003cli\u003e使用者流程影響：/opportunity 貼連結→Continue 後研究只跑一次，Company research 行顯示次數文案不變；貼文內容不再被附加標記污染。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒（續 M1/M2）。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e提交\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eb8d607c\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 檔源檔，已 push 到 main\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e生產建置\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e通過\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003evite build（Cloudflare nitro 目標，Node 22）\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003etsc 全倉\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e44 錯\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e修前修後同數，既有錯誤，未引入新錯\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：\u003ccode\u003eopportunity.tsx\u003c/code\u003e 的 continueOn 先調 \u003ccode\u003eresearchOpportunity\u003c/code\u003e（client 直跑研究），再調 \u003ccode\u003eanalyzeOpportunity\u003c/code\u003e（server 內又跑一次 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e）。一次分析最多雙倍查詢與讀取：慢、貴、易觸發限流與 Worker 超時。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003elib/opportunity.ts\u003c/code\u003e 的 save 會改寫傳入物件的 \u003ccode\u003edescription\u003c/code\u003e，附加 \u003ccode\u003e[TALENT_RADAR_COMPANY:…]\u003c/code\u003e 標記，靠 preprocess 再剝除。任一 client／runtime 路徑掉 marker 或解析失敗，公司名就會漏進 AI 證據或顯示文字。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：頁面只調 \u003ccode\u003eanalyzeOpportunity\u003c/code\u003e 一次（研究只在 server 跑）。server 回傳新增輕量 \u003ccode\u003eOpportunityResearchSnapshot\u003c/code\u003e（companyName／searchesAttempted／searchResultsFound／readableCount／leadCount），頁面直接渲染「跑了幾次搜尋、讀到幾個」；刪除 client 端 \u003ccode\u003eresearchOpportunity\u003c/code\u003e 匯出。失敗路徑改為顯示重試提示（server 端 fallback 仍在，無 key／AI 失敗照舊回確定性分析）。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003esaveOpportunity\u003c/code\u003e 只持久化驗證後的物件，不再碰 \u003ccode\u003edescription\u003c/code\u003e；公司名只走 server payload 獨立欄位。讀取側的 marker preprocess 保留做向下相容（舊 session 殘留標記仍能剝除），不再有新寫入。\u003c/li\u003e\u003cli\u003e未動：M5 sessionStorage、M6 隱藏欄顯示、N 系列；Cloudflare 線上 preview 有／無 JINA_API_KEY 的完整旅程實測仍待跑（見下）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；環境預設 Node 20 會被 Vite 擋，需用 Node 22。另發現 @vitejs/plugin-react 在全新安裝時缺失導致建置失敗，加裝後通過，但該依賴與 package-lock 未提交，保持最小 diff 只交 3 檔源檔；CI／部署環境若重裝依賴遇到同錯，加裝即可）。routeTree.gen.ts 等建置副產物已還原。tsc 全倉 44 錯，修前修後同數（既有錯誤，與本棒無關），未引入新類型錯誤。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e邏輯驗證：單次研究鏈確認（頁面唯一研究入口為 server 內 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e）；research snapshot 計數欄位與渲染文案對齊（readableCount／leadCount）；save 不再改寫 description（diff 確認）。\u003c/li\u003e\u003cli\u003e未做：Cloudflare preview 有／無 JINA_API_KEY 各跑一次完整旅程（sandbox 內無金鑰、無已部署 preview URL，只能做建置驗證；需下一棒或使用者在有金鑰的 preview 環境實測 onboarding→反思→修正→機會→CV 全旅程）。\u003c/li\u003e\u003cli\u003e使用者流程影響：/opportunity 貼連結→Continue 後研究只跑一次，Company research 行顯示次數文案不變；貼文內容不再被附加標記污染。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒（續 M1/M2）。\u003c/p\u003e\u003c/div\u003e","createdAt":1788750299596,"displayMode":"artifact","id":"e2d05eb5274721bb15530fe2","isNew":false,"itemType":"NOTE","name":"Talent Radar 修復紀錄：M1 M2 單次研究與 marker 移除","parents":{"b105349fa3932713b892bc43":1788750299596},"updatedAt":1788750299596,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":3},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;} :root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} .eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);} h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:24ch;} h2{font-size:19px;margin:28px 0 10px;} p,li{color:var(--ink2);max-width:68ch;} ul{padding-left:22px;} li{margin:5px 0;} .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;} .callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;} code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · POST-FIX 複驗 · 2026-09-07\u003c/div\u003e\u003ch1\u003ePOST-FIX 複驗：M1/M2 單次研究與研究鏈實點\u003c/h1\u003e\u003cp\u003e對 origin/main b8d607c（M1/M2）連同 0870a5f（M3/M4）做發布前複驗：靜態＋建置＋線上實點全過，不動 main。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e生產建置\u003c/div\u003e\u003cdiv class=\"v\"\u003e通過\u003c/div\u003e\u003cdiv class=\"n\"\u003enpm run build，Node 22，Cloudflare nitro 目標\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003etsc 全倉\u003c/div\u003e\u003cdiv class=\"v\"\u003e43＝43\u003c/div\u003e\u003cdiv class=\"n\"\u003e修前 0b756fb 與修後 b8d607c 同數，既有錯誤\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eM1 單次研究\u003c/div\u003e\u003cdiv class=\"v\"\u003e確認\u003c/div\u003e\u003cdiv class=\"n\"\u003eresearchOpportunity 零殘留，唯一入口 analyzeOpportunity\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eM2 marker\u003c/div\u003e\u003cdiv class=\"v\"\u003e無新寫入\u003c/div\u003e\u003cdiv class=\"n\"\u003esave 不碰 description，舊 marker 照舊剝除\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e結論\u003c/span\u003e\u003cdiv\u003eRESULT: PASS — M1/M2 修復有效，研究鏈（M3/M4）線上實點可用。Cloudflare preview 有／無 JINA_API_KEY 的完整旅程仍待有金鑰環境實測（sandbox 無金鑰、無已部署 preview URL）。\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e驗了什麼\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：\u003ccode\u003esrc/\u003c/code\u003e 全文搜 \u003ccode\u003eresearchOpportunity\u003c/code\u003e 零命中（匯出已刪、呼叫已除）；\u003ccode\u003eopportunity.tsx\u003c/code\u003e 唯一研究入口是 \u003ccode\u003eanalyzeOpportunity({ onboarding, opportunity, companyName })\u003c/code\u003e，server 內跑一次 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e，回傳 \u003ccode\u003eOpportunityResearchSnapshot\u003c/code\u003e 直接渲染次數文案。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003esaveOpportunity\u003c/code\u003e 只做 \u003ccode\u003eopportunitySchema.parse\u003c/code\u003e 後持久化，不再改寫 \u003ccode\u003edescription\u003c/code\u003e；\u003ccode\u003eTALENT_RADAR_COMPANY\u003c/code\u003e 僅剩讀取側 preprocess（向下相容）。單元煙測：新存 description 零 marker 且原文完整；舊 session 殘留 marker 照舊剝除且公司名找回。\u003c/li\u003e\u003cli\u003eM3 無 key 路徑實點：Wikipedia opensearch 200、Bing RSS 200（10 items）、DDG lite 200 全通；Jina reader 無 key 直打 \u003ccode\u003ebpcs.com/localization\u003c/code\u003e 回 200 約 23331 字（含 Markdown 內文），保底路徑有效。\u003c/li\u003e\u003cli\u003eM4 職缺直讀實點：Greenhouse bpcs 7984877 直讀 200 約 90802 字、含 Bellevue、無 JSON-LD（bodyText 後備的場景成立）；官網 localization 頁 200 約 364086 字、含 JSON-LD。Bing RSS 首 link 為站內搜尋回指，屬既有雜訊，靠既有分類與 lead 標示處理。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與型別\u003c/h2\u003e\u003cul\u003e\u003cli\u003e生產建置 \u003ccode\u003enpm run build\u003c/code\u003e 通過（Node 22；環境預設 Node 20 會被擋，本次在 \u003ccode\u003e.workspace\u003c/code\u003e 下載 Node 22 驗證）。建置副產物（\u003ccode\u003erouteTree.gen.ts\u003c/code\u003e、\u003ccode\u003epackage-lock.json\u003c/code\u003e、\u003ccode\u003enode_modules\u003c/code\u003e）只留在驗證 worktree，未動 main。\u003c/li\u003e\u003cli\u003etsc 全倉修前修後同為 43 錯（既有錯誤，多為 \u003ccode\u003eprocess.env.*\u003c/code\u003e index-signature 與 server-fn 型別風格問題，與本棒及 M1/M2 修復無關）。M1/M2 棒記載 44 為其環境計數差異，結論一致：未引入新型別錯誤。\u003c/li\u003e\u003cli\u003e本次複驗零程式碼修改，main 仍為 b8d607c，無新提交。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e未做（留給有金鑰環境）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eCloudflare preview 有／無 \u003ccode\u003eJINA_API_KEY\u003c/code\u003e 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/li\u003e\u003cli\u003eGROQ key 相關 AI 路徑未實打，只驗 fallback 結構與 snapshot 計數欄位對齊。\u003c/li\u003e\u003cli\u003e使用者流程影響：/opportunity 貼連結→Continue 後研究只跑一次，Company research 次數文案照 snapshot；貼文 description 不再被附加標記污染。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員 POST-FIX 複驗棒（origin/main b8d607c）。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e生產建置\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e通過\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003enpm run build，Node 22，Cloudflare nitro 目標\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003etsc 全倉\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e43＝43\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e修前 0b756fb 與修後 b8d607c 同數，既有錯誤\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eM1 單次研究\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e確認\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eresearchOpportunity 零殘留，唯一入口 analyzeOpportunity\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eM2 marker\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e無新寫入\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003esave 不碰 description，舊 marker 照舊剝除\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e結論\u003c/span\u003e\u003cdiv\u003eRESULT: PASS — M1/M2 修復有效，研究鏈（M3/M4）線上實點可用。Cloudflare preview 有／無 JINA_API_KEY 的完整旅程仍待有金鑰環境實測（sandbox 無金鑰、無已部署 preview URL）。\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e驗了什麼\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM1：\u003ccode\u003esrc/\u003c/code\u003e 全文搜 \u003ccode\u003eresearchOpportunity\u003c/code\u003e 零命中（匯出已刪、呼叫已除）；\u003ccode\u003eopportunity.tsx\u003c/code\u003e 唯一研究入口是 \u003ccode\u003eanalyzeOpportunity({ onboarding, opportunity, companyName })\u003c/code\u003e，server 內跑一次 \u003ccode\u003efetchCompanyResearch\u003c/code\u003e，回傳 \u003ccode\u003eOpportunityResearchSnapshot\u003c/code\u003e 直接渲染次數文案。\u003c/li\u003e\u003cli\u003eM2：\u003ccode\u003esaveOpportunity\u003c/code\u003e 只做 \u003ccode\u003eopportunitySchema.parse\u003c/code\u003e 後持久化，不再改寫 \u003ccode\u003edescription\u003c/code\u003e；\u003ccode\u003eTALENT_RADAR_COMPANY\u003c/code\u003e 僅剩讀取側 preprocess（向下相容）。單元煙測：新存 description 零 marker 且原文完整；舊 session 殘留 marker 照舊剝除且公司名找回。\u003c/li\u003e\u003cli\u003eM3 無 key 路徑實點：Wikipedia opensearch 200、Bing RSS 200（10 items）、DDG lite 200 全通；Jina reader 無 key 直打 \u003ccode\u003ebpcs.com/localization\u003c/code\u003e 回 200 約 23331 字（含 Markdown 內文），保底路徑有效。\u003c/li\u003e\u003cli\u003eM4 職缺直讀實點：Greenhouse bpcs 7984877 直讀 200 約 90802 字、含 Bellevue、無 JSON-LD（bodyText 後備的場景成立）；官網 localization 頁 200 約 364086 字、含 JSON-LD。Bing RSS 首 link 為站內搜尋回指，屬既有雜訊，靠既有分類與 lead 標示處理。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與型別\u003c/h2\u003e\u003cul\u003e\u003cli\u003e生產建置 \u003ccode\u003enpm run build\u003c/code\u003e 通過（Node 22；環境預設 Node 20 會被擋，本次在 \u003ccode\u003e.workspace\u003c/code\u003e 下載 Node 22 驗證）。建置副產物（\u003ccode\u003erouteTree.gen.ts\u003c/code\u003e、\u003ccode\u003epackage-lock.json\u003c/code\u003e、\u003ccode\u003enode_modules\u003c/code\u003e）只留在驗證 worktree，未動 main。\u003c/li\u003e\u003cli\u003etsc 全倉修前修後同為 43 錯（既有錯誤，多為 \u003ccode\u003eprocess.env.*\u003c/code\u003e index-signature 與 server-fn 型別風格問題，與本棒及 M1/M2 修復無關）。M1/M2 棒記載 44 為其環境計數差異，結論一致：未引入新型別錯誤。\u003c/li\u003e\u003cli\u003e本次複驗零程式碼修改，main 仍為 b8d607c，無新提交。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e未做（留給有金鑰環境）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eCloudflare preview 有／無 \u003ccode\u003eJINA_API_KEY\u003c/code\u003e 各跑一次完整旅程：onboarding→反思→修正→機會（含 URL、純描述、無公司名）→CV，確認 fallback 文案不穿幫。\u003c/li\u003e\u003cli\u003eGROQ key 相關 AI 路徑未實打，只驗 fallback 結構與 snapshot 計數欄位對齊。\u003c/li\u003e\u003cli\u003e使用者流程影響：/opportunity 貼連結→Continue 後研究只跑一次，Company research 次數文案照 snapshot；貼文 description 不再被附加標記污染。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員 POST-FIX 複驗棒（origin/main b8d607c）。\u003c/p\u003e\u003c/div\u003e","createdAt":1788751206204,"displayMode":"artifact","id":"527bdc63d2344e8b8fe01dd1","isNew":false,"itemType":"NOTE","name":"POST-FIX 複驗：M1/M2 單次研究與研究鏈實點","parents":{"b105349fa3932713b892bc43":1788751206204},"updatedAt":1788752752242,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":4},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;}:root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;}.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;}.eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);}h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:26ch;}h2{font-size:19px;margin:28px 0 10px;}p,li{color:var(--ink2);max-width:70ch;}ul{padding-left:22px;}li{margin:5px 0;}.callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;}.callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;}code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}section[data-cube=\"stats\"]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:18px 0;}.stat{background:var(--soft);border-radius:8px;padding:12px 14px;}.stat .k{font-size:12px;color:var(--accent);}.stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);}.stat .n{font-size:12px;color:var(--ink2);margin-top:2px;}@media (max-width:640px){.doc{padding:20px 18px;}h1{font-size:22px;}}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 研究驗證 · 第二棒 · 2026-09-08\u003c/div\u003e\u003ch1\u003e研究驗證：機會公司研究鏈真實驗證（2026-09-08）\u003c/h1\u003e\u003cp\u003eCompany: Blueprint、Role: Translation Specialist。搜尋→實讀→三態分類→摘要證據，全部只基於實際取回的文字；搜尋摘要不當證據。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e可讀證據\u003c/div\u003e\u003cdiv class=\"v\"\u003e6 頁\u003c/div\u003e\u003cdiv class=\"n\"\u003e官網2＋職缺2＋Careers＋Built In\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e找到但讀不到\u003c/div\u003e\u003cdiv class=\"v\"\u003e3 頁\u003c/div\u003e\u003cdiv class=\"n\"\u003eGlassdoor／Indeed 403＋彙整空頁\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e無依據\u003c/div\u003e\u003cdiv class=\"v\"\u003e3 項\u003c/div\u003e\u003cdiv class=\"n\"\u003eReddit無關／about缺口／文化不推測\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003eRESULT\u003c/span\u003e\u003cdiv\u003e\u003cb\u003ePARTIAL — 正式公司來源鏈可讀，第三方評價鏈讀不到，研究失敗不擋流程。\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e一、可讀證據（皆實際取回內文）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eA1 官網 Localization（https://bpcs.com/localization）：大型內部真人團隊，30+ 語言；成員多不住母語國而住美國、日常英文為主；疫情後永久在家工作；總部 2600 116th Ave NE, Bellevue, WA 98004；info@bpcs.com、(206) 455-8326。\u003c/li\u003e\u003cli\u003eA2 官網招募長文（https://bpcs.com/blog/be-a-translation-and-localization-specialist，2021-06-14，Blueprint Team）：transcreation 非直譯，成品要像原生寫成；團隊自述 mosaic；七位成員多元背景（語言教學13年、劇場演員、古典語文學、理科、電子工程轉 Localization Engineer、國際關係自由譯者等）。\u003c/li\u003e\u003cli\u003eA3 Greenhouse 波蘭語職缺（https://job-boards.greenhouse.io/bpcs/jobs/7984877）：Polish Translation \u0026amp; Localization Specialist；限美遠端；核心工時 PT 10:00–18:00；WA 時薪 33.65–43.25、中點 38.45；要求母語級波蘭語＋英語、學士或同等、遊戲術語、CAT（Crowdin/memoQ/Memsource/Trados/Wordfast）、Win/macOS/iOS/Android、Office。\u003c/li\u003e\u003cli\u003eA4 Careers（https://bpcs.com/careers）：Join a team that strives to be different；防詐騙公告（只用 @BPCS.com 聯絡）；Why work 自述 people set us apart、boldness/optimism/passion；四則員工引述含 Rita Hrusko（Localization：multicultural/diverse/support）；價值觀 Be accountable/Positive impact/Create the next big thing/Superior execution。\u003c/li\u003e\u003cli\u003eA5 Built In 職缺頁（https://builtin.com/job/translation-localization-specialist/6468446）：Translation - Localization Specialist，Bellevue WA 但標 Remote/Telecommuting 全美遠端，40h/week；該職缺已於 2025-09-11 移除；The Company 段自述 data intelligence firm、greater Seattle area，但同頁 HQ 欄寫 Kenosha, WI、506人、2013年——頁面自相矛盾，不採信任一版本。\u003c/li\u003e\u003cli\u003eA6 LinkedIn 職缺骨架（https://www.linkedin.com/jobs/view/translation-specialist-at-blueprint-4442699644）：本輪只取回標題＋日期 2026-07-06，內文未取回；上一輪曾讀到丹麥語遊戲本地化 Remote USA $33.65–38.46/hr，本輪沿用為歷史紀錄、不計入本輪可讀證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e二、找到但讀不到（只留連結，不當證據）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eB1 Glassdoor 總評頁（https://www.glassdoor.com/Reviews/Blueprint-Technologies-Reviews-E821898.htm）：本輪直讀 HTTP 403。搜尋摘要的 3.1分/282則等數字不引用。\u003c/li\u003e\u003cli\u003eB2 Indeed 評論頁（https://www.indeed.com/cmp/Blueprint-Technologies/reviews）：本輪直讀 HTTP 403。摘要文字不引用。\u003c/li\u003e\u003cli\u003eB3 Greenhouse 職缺彙整（https://job-boards.greenhouse.io/bpcs/jobs/8165024）：本輪直讀被導向 error=true 空頁，無內文，不當證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、無依據（不編造）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eReddit：在地化團隊員工經驗無直接對應貼文；搜尋回傳多為無關串，不列為來源。\u003c/li\u003e\u003cli\u003ebpcs.com/about：歷史紀錄 404，本輪未重試，沿用缺口結論。\u003c/li\u003e\u003cli\u003e公司文化現況、薪資外推、團隊規模數字：無第三方可讀交叉，一律不明示不推測。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、發現摘要\u003c/h2\u003e\u003cul\u003e\u003cli\u003e公司自述什麼：大型內部真人本地化團隊、30+ 語、永久遠端、transcreation 理念、multicultural/mosaic 自述、Bellevue 總部（官網）。Built In 公司資訊段自相矛盾視為頁面雜訊。\u003c/li\u003e\u003cli\u003e公開職缺顯示什麼：限美遠端＋PT 核心時段是硬條件；波蘭語職缺薪資帶與要求具體明確；丹麥語職缺歷史薪資帶屬不同職缺，不外推。\u003c/li\u003e\u003cli\u003e一致處：官網自述、招募長文、Greenhouse、Careers 四者對「遠端＋真人＋遊戲本地化＋母語級」一致。\u003c/li\u003e\u003cli\u003e缺口：第三方文化評價完全無可讀交叉；LinkedIn 本輪內文未取回。AI 只能用正式自述回答 values/環境（標明僅自述），environment 無第三方交叉，unknowns 必須明示。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、給修復整備員（M3/M4 視角）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM3 部分成立：官網＋Greenhouse＋Careers 無 key 可讀；Glassdoor/Indeed 無 key 穩定 403，留連結作 lead 正確，搜尋摘要不得降級為證據。\u003c/li\u003e\u003cli\u003eM4 部分成立：Greenhouse 數字 ID 直讀穩定；LinkedIn 本輪只回骨架，需過濾＋誠實降級（linkedin-blocked 文案＋手貼路徑）；Greenhouse 彙整/搜尋回指頁屬既有雜訊，靠分類＋lead 標示處理。\u003c/li\u003e\u003cli\u003e研究失敗不擋流程：三態寫進 \u003ccode\u003eresearchNote\u003c/code\u003e，readableCount/leadCount 照實計數，fallback 照常出分析。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e方法：web_search 三組查詢→web_fetch 逐頁實讀（官網 localization、招募長文、Greenhouse 7984877、careers、LinkedIn、Glassdoor、Indeed、Greenhouse 8165024、Built In）；基建/JS/CSS/CDN/schema.org/搜尋引擎 URL 未計入公司來源；未改任何程式碼。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e可讀證據\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e6 頁\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e官網2＋職缺2＋Careers＋Built In\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e找到但讀不到\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 頁\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eGlassdoor／Indeed 403＋彙整空頁\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e無依據\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 項\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eReddit無關／about缺口／文化不推測\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003eRESULT\u003c/span\u003e\u003cdiv\u003e\u003cb\u003ePARTIAL — 正式公司來源鏈可讀，第三方評價鏈讀不到，研究失敗不擋流程。\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e一、可讀證據（皆實際取回內文）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eA1 官網 Localization（https://bpcs.com/localization）：大型內部真人團隊，30+ 語言；成員多不住母語國而住美國、日常英文為主；疫情後永久在家工作；總部 2600 116th Ave NE, Bellevue, WA 98004；info@bpcs.com、(206) 455-8326。\u003c/li\u003e\u003cli\u003eA2 官網招募長文（https://bpcs.com/blog/be-a-translation-and-localization-specialist，2021-06-14，Blueprint Team）：transcreation 非直譯，成品要像原生寫成；團隊自述 mosaic；七位成員多元背景（語言教學13年、劇場演員、古典語文學、理科、電子工程轉 Localization Engineer、國際關係自由譯者等）。\u003c/li\u003e\u003cli\u003eA3 Greenhouse 波蘭語職缺（https://job-boards.greenhouse.io/bpcs/jobs/7984877）：Polish Translation \u0026amp; Localization Specialist；限美遠端；核心工時 PT 10:00–18:00；WA 時薪 33.65–43.25、中點 38.45；要求母語級波蘭語＋英語、學士或同等、遊戲術語、CAT（Crowdin/memoQ/Memsource/Trados/Wordfast）、Win/macOS/iOS/Android、Office。\u003c/li\u003e\u003cli\u003eA4 Careers（https://bpcs.com/careers）：Join a team that strives to be different；防詐騙公告（只用 @BPCS.com 聯絡）；Why work 自述 people set us apart、boldness/optimism/passion；四則員工引述含 Rita Hrusko（Localization：multicultural/diverse/support）；價值觀 Be accountable/Positive impact/Create the next big thing/Superior execution。\u003c/li\u003e\u003cli\u003eA5 Built In 職缺頁（https://builtin.com/job/translation-localization-specialist/6468446）：Translation - Localization Specialist，Bellevue WA 但標 Remote/Telecommuting 全美遠端，40h/week；該職缺已於 2025-09-11 移除；The Company 段自述 data intelligence firm、greater Seattle area，但同頁 HQ 欄寫 Kenosha, WI、506人、2013年——頁面自相矛盾，不採信任一版本。\u003c/li\u003e\u003cli\u003eA6 LinkedIn 職缺骨架（https://www.linkedin.com/jobs/view/translation-specialist-at-blueprint-4442699644）：本輪只取回標題＋日期 2026-07-06，內文未取回；上一輪曾讀到丹麥語遊戲本地化 Remote USA $33.65–38.46/hr，本輪沿用為歷史紀錄、不計入本輪可讀證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e二、找到但讀不到（只留連結，不當證據）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eB1 Glassdoor 總評頁（https://www.glassdoor.com/Reviews/Blueprint-Technologies-Reviews-E821898.htm）：本輪直讀 HTTP 403。搜尋摘要的 3.1分/282則等數字不引用。\u003c/li\u003e\u003cli\u003eB2 Indeed 評論頁（https://www.indeed.com/cmp/Blueprint-Technologies/reviews）：本輪直讀 HTTP 403。摘要文字不引用。\u003c/li\u003e\u003cli\u003eB3 Greenhouse 職缺彙整（https://job-boards.greenhouse.io/bpcs/jobs/8165024）：本輪直讀被導向 error=true 空頁，無內文，不當證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e三、無依據（不編造）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eReddit：在地化團隊員工經驗無直接對應貼文；搜尋回傳多為無關串，不列為來源。\u003c/li\u003e\u003cli\u003ebpcs.com/about：歷史紀錄 404，本輪未重試，沿用缺口結論。\u003c/li\u003e\u003cli\u003e公司文化現況、薪資外推、團隊規模數字：無第三方可讀交叉，一律不明示不推測。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e四、發現摘要\u003c/h2\u003e\u003cul\u003e\u003cli\u003e公司自述什麼：大型內部真人本地化團隊、30+ 語、永久遠端、transcreation 理念、multicultural/mosaic 自述、Bellevue 總部（官網）。Built In 公司資訊段自相矛盾視為頁面雜訊。\u003c/li\u003e\u003cli\u003e公開職缺顯示什麼：限美遠端＋PT 核心時段是硬條件；波蘭語職缺薪資帶與要求具體明確；丹麥語職缺歷史薪資帶屬不同職缺，不外推。\u003c/li\u003e\u003cli\u003e一致處：官網自述、招募長文、Greenhouse、Careers 四者對「遠端＋真人＋遊戲本地化＋母語級」一致。\u003c/li\u003e\u003cli\u003e缺口：第三方文化評價完全無可讀交叉；LinkedIn 本輪內文未取回。AI 只能用正式自述回答 values/環境（標明僅自述），environment 無第三方交叉，unknowns 必須明示。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e五、給修復整備員（M3/M4 視角）\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM3 部分成立：官網＋Greenhouse＋Careers 無 key 可讀；Glassdoor/Indeed 無 key 穩定 403，留連結作 lead 正確，搜尋摘要不得降級為證據。\u003c/li\u003e\u003cli\u003eM4 部分成立：Greenhouse 數字 ID 直讀穩定；LinkedIn 本輪只回骨架，需過濾＋誠實降級（linkedin-blocked 文案＋手貼路徑）；Greenhouse 彙整/搜尋回指頁屬既有雜訊，靠分類＋lead 標示處理。\u003c/li\u003e\u003cli\u003e研究失敗不擋流程：三態寫進 \u003ccode\u003eresearchNote\u003c/code\u003e，readableCount/leadCount 照實計數，fallback 照常出分析。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e方法：web_search 三組查詢→web_fetch 逐頁實讀（官網 localization、招募長文、Greenhouse 7984877、careers、LinkedIn、Glassdoor、Indeed、Greenhouse 8165024、Built In）；基建/JS/CSS/CDN/schema.org/搜尋引擎 URL 未計入公司來源；未改任何程式碼。\u003c/p\u003e\u003c/div\u003e","createdAt":1788829593496,"displayMode":"artifact","id":"d9ba77267c8997c399a3dccf","isNew":false,"itemType":"NOTE","name":"研究驗證：機會公司研究鏈真實驗證（2026-09-08）","parents":{"b105349fa3932713b892bc43":1788829593496},"updatedAt":1788829593496,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela 米奇拉"},"version":4,"websiteContent":"[{\"originUrl\":\"https://bpcs.com/localization\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://bpcs.com/blog/be-a-translation-and-localization-specialist\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://job-boards.greenhouse.io/bpcs/jobs/7984877\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://bpcs.com/careers\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://builtin.com/job/translation-localization-specialist/6468446\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://www.linkedin.com/jobs/view/translation-specialist-at-blueprint-4442699644\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://www.glassdoor.com/Reviews/Blueprint-Technologies-Reviews-E821898.htm\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://www.indeed.com/cmp/Blueprint-Technologies/reviews\",\"title\":null,\"content\":null,\"imageUrl\":null},{\"originUrl\":\"https://job-boards.greenhouse.io/bpcs/jobs/8165024\",\"title\":null,\"content\":null,\"imageUrl\":null}]"},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;}:root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;}.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;}.eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);}h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:26ch;}h2{font-size:19px;margin:28px 0 10px;}p,li{color:var(--ink2);max-width:68ch;}ul{padding-left:22px;}li{margin:5px 0;}.callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;}.callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;}code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);}section[data-cube=\"stats\"]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:18px 0;}.stat{background:var(--soft);border-radius:8px;padding:12px 14px;}.stat .k{font-size:12px;color:var(--accent);}.stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);}.stat .n{font-size:12px;color:var(--ink2);margin-top:2px;}@media (max-width:640px){.doc{padding:20px 18px;}h1{font-size:22px;}}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 修復整備 · 2026-09-08 · 第三棒\u003c/div\u003e\u003ch1\u003eTalent Radar 修復紀錄：研究驗證待修（公司站證據＋LinkedIn 骨架）\u003c/h1\u003e\u003cp\u003e承接研究驗證棒 PARTIAL（Blueprint 翻譯專員）待修項目，只做發布前必需的最小架構修復。main 4a131b8 → 4cb9400。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e變更檔案\u003c/div\u003e\u003cdiv class=\"v\"\u003e2\u003c/div\u003e\u003cdiv class=\"n\"\u003eanalysis＋reader 各一\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e生產建置\u003c/div\u003e\u003cdiv class=\"v\"\u003e通過\u003c/div\u003e\u003cdiv class=\"n\"\u003eNode 22 vite build\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e邏輯煙測\u003c/div\u003e\u003cdiv class=\"v\"\u003e3 組\u003c/div\u003e\u003cdiv class=\"n\"\u003e骨架擋＋實頁留＋合併保站\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003eRESULT\u003c/span\u003e\u003cdiv\u003e\u003cb\u003e兩處最小修復已進 main；研究失敗不擋流程、三態計數、fallback 文案等既有行為不變。\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efetchCompanyResearch\u003c/code\u003e 把公司站直讀與搜尋並行後，中途 \u003ccode\u003eonProgress\u003c/code\u003e 回寫與最終合併都用 \u003ccode\u003eresearch.length = 0\u003c/code\u003e 全清重填——公司站證據（Company website）在成功路徑會被洗掉，超時快照（partial）同理，研究驗證 A1 類官網證據可能無聲遺失。\u003c/li\u003e\u003cli\u003e\u003ccode\u003eparseListing\u003c/code\u003e 只看 title／company／description 任一非空即算可讀——LinkedIn 登入牆骨架（本輪研究驗證 A6：只有標題＋日期）會被當成已讀職缺，擠掉誠實的 \u003ccode\u003elinkedin-blocked\u003c/code\u003e 降級與手貼路徑。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003esrc/lib/opportunity-analysis.ts\u003c/code\u003e：合併前先快照 \u003ccode\u003esiteOnly\u003c/code\u003e，中途與最終合併共用 \u003ccode\u003emergeBatch\u003c/code\u003e——公司站 URL 去重保留、lead 側排除重複，兩處只加不減。\u003c/li\u003e\u003cli\u003e\u003ccode\u003esrc/lib/job-ad-reader.ts\u003c/code\u003e：新增 \u003ccode\u003eMIN_LISTING_BODY_CHARS = 200\u003c/code\u003e 骨架門檻；無結構化資料且正文不足 200 字時回 null，走 Jina 備援再到 \u003ccode\u003elinkedin-blocked\u003c/code\u003e／\u003ccode\u003eunreadable\u003c/code\u003e 誠實降級（客戶端文案已存在，不用改前端）。\u003c/li\u003e\u003cli\u003e未動：搜尋摘要不當證據、readable／lead 計數、45s 總預算與三段超時、空公司名不跑搜尋、Built In 矛盾視為雜訊不採信——皆已有實作，不擴張範圍。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22.18.0；worktree 全新 npm install）。routeTree.gen.ts 等建置副產物已還原、package-lock 未提交，只進兩個源檔；detached HEAD commit 後 push HEAD:main，遠端 ls-remote 確認 4cb9400。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eLinkedIn 骨架頁（title＋46 字正文）→ 被擋回 null，走降級；Greenhouse 式實頁（545 字正文）→ 保留可讀。\u003c/li\u003e\u003cli\u003e合併煙測：siteOnly 公司站＋搜尋結果合併後兩者都在，無遺失、無重複。\u003c/li\u003e\u003cli\u003etsc 單檔檢查僅報缺依賴（@tanstack／zod／process，worktree 無依賴假陽性），建置通過即為準。\u003c/li\u003e\u003cli\u003e相關使用者流程：機會頁貼 LinkedIn 連結→顯示 linkedin-blocked 文案＋手貼路徑；公司研究→公司站證據保留在 sources，readable／lead 計數照實。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e未修（留待驗證，非程式碼）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e有 JINA／GROQ key 的 preview 完整旅程（onboarding→反思→機會→研究→比較→nextSteps→CV），確認 fallback 文案不穿幫——需真 key＋Worker env，sandbox 做不了。\u003c/li\u003e\u003cli\u003eGlassdoor／Indeed 無 key 穩定 403 留 lead、Greenhouse 彙整空頁歸類：行為已是留連結不當證據，Worker 側計數複驗即可。\u003c/li\u003e\u003cli\u003eBuilt In 公司資訊段自相矛盾：維持不採信，屬頁面雜訊，不寫版本判斷邏輯。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e變更檔案\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e2\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eanalysis＋reader 各一\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e生產建置\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e通過\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNode 22 vite build\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e邏輯煙測\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 組\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e骨架擋＋實頁留＋合併保站\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003eRESULT\u003c/span\u003e\u003cdiv\u003e\u003cb\u003e兩處最小修復已進 main；研究失敗不擋流程、三態計數、fallback 文案等既有行為不變。\u003c/b\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efetchCompanyResearch\u003c/code\u003e 把公司站直讀與搜尋並行後，中途 \u003ccode\u003eonProgress\u003c/code\u003e 回寫與最終合併都用 \u003ccode\u003eresearch.length = 0\u003c/code\u003e 全清重填——公司站證據（Company website）在成功路徑會被洗掉，超時快照（partial）同理，研究驗證 A1 類官網證據可能無聲遺失。\u003c/li\u003e\u003cli\u003e\u003ccode\u003eparseListing\u003c/code\u003e 只看 title／company／description 任一非空即算可讀——LinkedIn 登入牆骨架（本輪研究驗證 A6：只有標題＋日期）會被當成已讀職缺，擠掉誠實的 \u003ccode\u003elinkedin-blocked\u003c/code\u003e 降級與手貼路徑。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003esrc/lib/opportunity-analysis.ts\u003c/code\u003e：合併前先快照 \u003ccode\u003esiteOnly\u003c/code\u003e，中途與最終合併共用 \u003ccode\u003emergeBatch\u003c/code\u003e——公司站 URL 去重保留、lead 側排除重複，兩處只加不減。\u003c/li\u003e\u003cli\u003e\u003ccode\u003esrc/lib/job-ad-reader.ts\u003c/code\u003e：新增 \u003ccode\u003eMIN_LISTING_BODY_CHARS = 200\u003c/code\u003e 骨架門檻；無結構化資料且正文不足 200 字時回 null，走 Jina 備援再到 \u003ccode\u003elinkedin-blocked\u003c/code\u003e／\u003ccode\u003eunreadable\u003c/code\u003e 誠實降級（客戶端文案已存在，不用改前端）。\u003c/li\u003e\u003cli\u003e未動：搜尋摘要不當證據、readable／lead 計數、45s 總預算與三段超時、空公司名不跑搜尋、Built In 矛盾視為雜訊不採信——皆已有實作，不擴張範圍。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22.18.0；worktree 全新 npm install）。routeTree.gen.ts 等建置副產物已還原、package-lock 未提交，只進兩個源檔；detached HEAD commit 後 push HEAD:main，遠端 ls-remote 確認 4cb9400。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eLinkedIn 骨架頁（title＋46 字正文）→ 被擋回 null，走降級；Greenhouse 式實頁（545 字正文）→ 保留可讀。\u003c/li\u003e\u003cli\u003e合併煙測：siteOnly 公司站＋搜尋結果合併後兩者都在，無遺失、無重複。\u003c/li\u003e\u003cli\u003etsc 單檔檢查僅報缺依賴（@tanstack／zod／process，worktree 無依賴假陽性），建置通過即為準。\u003c/li\u003e\u003cli\u003e相關使用者流程：機會頁貼 LinkedIn 連結→顯示 linkedin-blocked 文案＋手貼路徑；公司研究→公司站證據保留在 sources，readable／lead 計數照實。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e未修（留待驗證，非程式碼）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e有 JINA／GROQ key 的 preview 完整旅程（onboarding→反思→機會→研究→比較→nextSteps→CV），確認 fallback 文案不穿幫——需真 key＋Worker env，sandbox 做不了。\u003c/li\u003e\u003cli\u003eGlassdoor／Indeed 無 key 穩定 403 留 lead、Greenhouse 彙整空頁歸類：行為已是留連結不當證據，Worker 側計數複驗即可。\u003c/li\u003e\u003cli\u003eBuilt In 公司資訊段自相矛盾：維持不採信，屬頁面雜訊，不寫版本判斷邏輯。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒。\u003c/p\u003e\u003c/div\u003e","createdAt":1788830230675,"displayMode":"artifact","id":"01897e760d6457faa110811a","isNew":false,"itemType":"NOTE","name":"Talent Radar 修復紀錄：研究驗證待修（公司站證據＋LinkedIn 骨架）","parents":{"b105349fa3932713b892bc43":1788830230675},"updatedAt":1788830230675,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela 米奇拉"},"version":3},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;} :root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} .eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);} h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:26ch;} h2{font-size:19px;margin:28px 0 10px;} p,li{color:var(--ink2);max-width:70ch;} ul{padding-left:22px;} li{margin:5px 0;} .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;} .callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;} code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);} section[data-cube=\"stats\"]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:18px 0;} .stat{background:var(--soft);border-radius:8px;padding:12px 14px;} .stat .k{font-size:12px;color:var(--accent);} .stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);} .stat .n{font-size:12px;color:var(--ink2);margin-top:2px;} @media (max-width:640px){.doc{padding:20px 18px;} h1{font-size:22px;}}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · FINAL LAUNCH QA · 2026-09-07\u003c/div\u003e\u003ch1\u003eFinal Launch QA：Blueprint 翻譯專員一案驗證\u003c/h1\u003e\u003cp\u003e對 origin/main e519bf5（M1/M2＋M3/M4＋nextSteps）做發布前驗證。已部署環境不可用，本棒改走靜態碼驗＋外部實讀，未改任何程式碼。\u003c/p\u003e\u003c/header\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e verdict\u003c/span\u003e\u003cdiv\u003e\u003cb\u003ePARTIAL — 程式碼層全過，實際部署旅程＋截圖未能執行。\u003c/b\u003e已部署環境不可用（Lovable 專案頁轉登入、repo 無 preview URL／金鑰），10 步旅程中第 1–3、5、10 步僅碼驗確認存在，第 4、6–9 步碼驗＋外部實讀交叉確認。未發現 launch blocker。\u003c/div\u003e\u003c/div\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eJob URL 讀取\u003c/div\u003e\u003cdiv class=\"v\"\u003ePARTIAL\u003c/div\u003e\u003cdiv class=\"n\"\u003eLinkedIn 伺服器側大概率擋，誠實降級＋手貼路徑\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e公司研究\u003c/div\u003e\u003cdiv class=\"v\"\u003ePASS\u003c/div\u003e\u003cdiv class=\"n\"\u003e正式鏈可讀、第三方 403 作 lead、只摘要讀到文字\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e正式／非正式區分\u003c/div\u003e\u003cdiv class=\"v\"\u003ePASS\u003c/div\u003e\u003cdiv class=\"n\"\u003e四類標示＋lead 不當證據文案\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e比較紮根\u003c/div\u003e\u003cdiv class=\"v\"\u003ePASS\u003c/div\u003e\u003cdiv class=\"n\"\u003e7 段全綁 onboarding＋機會＋研究\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e分數／遊戲化\u003c/div\u003e\u003cdiv class=\"v\"\u003ePASS\u003c/div\u003e\u003cdiv class=\"n\"\u003e雙 prompt 明禁；僅內部排序變數不顯示\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e截圖\u003c/div\u003e\u003cdiv class=\"v\"\u003e0 張\u003c/div\u003e\u003cdiv class=\"n\"\u003e無可存取的已部署環境\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003ch2\u003eJob URL 讀取\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003ereadJobAd\u003c/code\u003e：直讀→Jina 備援；LinkedIn 回 \u003ccode\u003elinkedin-blocked\u003c/code\u003e 並提示補公司名＋手貼內文，不偽裝讀到。\u003c/li\u003e\u003cli\u003e本棒外部實讀同一 URL 成功：Translation Specialist at Blueprint（丹麥語遊戲本地化，Remote USA，$33.65–38.46/hr），職缺為真；Greenhouse 交叉刊登 \u003ccode\u003ebpcs 7983908\u003c/code\u003e 可直讀，屬正式證據。\u003c/li\u003e\u003cli\u003e未驗：Cloudflare Worker 伺服器側對 LinkedIn 的實際成敗（無 preview 可點）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e公司研究\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efetchCompanyResearch\u003c/code\u003e：5 組查詢（官網／LinkedIn／Glassdoor／Reddit／綜合）＋無 key 保底（DDG-lite、Bing RSS、Wikipedia opensearch）＋Jina reader；基建／搜尋 URL 過濾、LinkedIn 雜訊剝除、併發 4／45s。\u003c/li\u003e\u003cli\u003e本棒外部實讀：\u003ccode\u003ebpcs.com/localization\u003c/code\u003e 可讀（自述：大型內部真人團隊、30+ 語言）；Greenhouse 職缺可讀（含 Bellevue 總部、遠端限美、薪資帶）；Glassdoor 實測 403——與「第三方讀不到→留連結不引用」設計一致。\u003c/li\u003e\u003cli\u003e研究失敗不擋流程：\u003ccode\u003eresearchNote\u003c/code\u003e 三態文案＋fallback 照常出分析。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e正式 vs 非正式證據\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eSourceList\u003c/code\u003e 四類：Job listing／Official company source／Third-party public source／Public source lead — not read，附「lead 不當證據」說明。\u003c/li\u003e\u003cli\u003esystem prompt 明定：讀不到的 URL 不是證據；須區分來源說法／合理推論／未知。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e比較與 nextSteps\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efitFor／companyMayValue／environment／alignment／tensions／unknowns\u003c/code\u003e 全以 onboarding＋機會＋已讀研究為唯一輸入；environment 首句固定為 researchNote（讀到幾筆誠實揭露）。\u003c/li\u003e\u003cli\u003e「What I would investigate before deciding」（\u003ccode\u003enextSteps\u003c/code\u003e）在最新提交 ec69314 已有：GROQ 路徑取模型輸出、缺則 deterministic 保底；UI 有對應 \u003ccode\u003eAnalysisSection\u003c/code\u003e 渲染。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eGROQ／fallback\u003c/h2\u003e\u003cul\u003e\u003cli\u003e無 key 即走 \u003ccode\u003ebuildDeterministicOpportunityAnalysis\u003c/code\u003e，結構與 snapshot 計數欄位對齊；GROQ 路徑未實打（無 key、無 preview）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eLaunch blockers\u003c/h2\u003e\u003cp\u003e程式碼層：無。唯一缺口是流程性的——從未有人跑過一次有 key 的完整部署旅程，截圖 0 張，渲染層視覺問題無從得知。\u003c/p\u003e\u003ch2\u003e給下一棒（修復整備員）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e只需一件事：在有 \u003ccode\u003eJINA_API_KEY\u003c/code\u003e／GROQ key 的 preview 跑一次完整旅程（onboarding→反思→機會 LinkedIn URL→研究→比較→nextSteps→CV），順手截 7 張指定畫面；fallback 文案不穿幫即放行。\u003c/li\u003e\u003cli\u003e不需改碼；若該輪發現具體 blocker 才停下回報。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e verdict\u003c/span\u003e\u003cdiv\u003e\u003cb\u003ePARTIAL — 程式碼層全過，實際部署旅程＋截圖未能執行。\u003c/b\u003e已部署環境不可用（Lovable 專案頁轉登入、repo 無 preview URL／金鑰），10 步旅程中第 1–3、5、10 步僅碼驗確認存在，第 4、6–9 步碼驗＋外部實讀交叉確認。未發現 launch blocker。\u003c/div\u003e\u003c/div\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eJob URL 讀取\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003ePARTIAL\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eLinkedIn 伺服器側大概率擋，誠實降級＋手貼路徑\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e公司研究\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003ePASS\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e正式鏈可讀、第三方 403 作 lead、只摘要讀到文字\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e正式／非正式區分\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003ePASS\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e四類標示＋lead 不當證據文案\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e比較紮根\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003ePASS\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e7 段全綁 onboarding＋機會＋研究\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e分數／遊戲化\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003ePASS\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e雙 prompt 明禁；僅內部排序變數不顯示\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e截圖\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e0 張\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e無可存取的已部署環境\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003eJob URL 讀取\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003ereadJobAd\u003c/code\u003e：直讀→Jina 備援；LinkedIn 回 \u003ccode\u003elinkedin-blocked\u003c/code\u003e 並提示補公司名＋手貼內文，不偽裝讀到。\u003c/li\u003e\u003cli\u003e本棒外部實讀同一 URL 成功：Translation Specialist at Blueprint（丹麥語遊戲本地化，Remote USA，$33.65–38.46/hr），職缺為真；Greenhouse 交叉刊登 \u003ccode\u003ebpcs 7983908\u003c/code\u003e 可直讀，屬正式證據。\u003c/li\u003e\u003cli\u003e未驗：Cloudflare Worker 伺服器側對 LinkedIn 的實際成敗（無 preview 可點）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e公司研究\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efetchCompanyResearch\u003c/code\u003e：5 組查詢（官網／LinkedIn／Glassdoor／Reddit／綜合）＋無 key 保底（DDG-lite、Bing RSS、Wikipedia opensearch）＋Jina reader；基建／搜尋 URL 過濾、LinkedIn 雜訊剝除、併發 4／45s。\u003c/li\u003e\u003cli\u003e本棒外部實讀：\u003ccode\u003ebpcs.com/localization\u003c/code\u003e 可讀（自述：大型內部真人團隊、30+ 語言）；Greenhouse 職缺可讀（含 Bellevue 總部、遠端限美、薪資帶）；Glassdoor 實測 403——與「第三方讀不到→留連結不引用」設計一致。\u003c/li\u003e\u003cli\u003e研究失敗不擋流程：\u003ccode\u003eresearchNote\u003c/code\u003e 三態文案＋fallback 照常出分析。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e正式 vs 非正式證據\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eSourceList\u003c/code\u003e 四類：Job listing／Official company source／Third-party public source／Public source lead — not read，附「lead 不當證據」說明。\u003c/li\u003e\u003cli\u003esystem prompt 明定：讀不到的 URL 不是證據；須區分來源說法／合理推論／未知。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e比較與 nextSteps\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003efitFor／companyMayValue／environment／alignment／tensions／unknowns\u003c/code\u003e 全以 onboarding＋機會＋已讀研究為唯一輸入；environment 首句固定為 researchNote（讀到幾筆誠實揭露）。\u003c/li\u003e\u003cli\u003e「What I would investigate before deciding」（\u003ccode\u003enextSteps\u003c/code\u003e）在最新提交 ec69314 已有：GROQ 路徑取模型輸出、缺則 deterministic 保底；UI 有對應 \u003ccode\u003eAnalysisSection\u003c/code\u003e 渲染。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eGROQ／fallback\u003c/h2\u003e\u003cul\u003e\u003cli\u003e無 key 即走 \u003ccode\u003ebuildDeterministicOpportunityAnalysis\u003c/code\u003e，結構與 snapshot 計數欄位對齊；GROQ 路徑未實打（無 key、無 preview）。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eLaunch blockers\u003c/h2\u003e\u003cp\u003e程式碼層：無。唯一缺口是流程性的——從未有人跑過一次有 key 的完整部署旅程，截圖 0 張，渲染層視覺問題無從得知。\u003c/p\u003e\u003ch2\u003e給下一棒（修復整備員）\u003c/h2\u003e\u003cul\u003e\u003cli\u003e只需一件事：在有 \u003ccode\u003eJINA_API_KEY\u003c/code\u003e／GROQ key 的 preview 跑一次完整旅程（onboarding→反思→機會 LinkedIn URL→研究→比較→nextSteps→CV），順手截 7 張指定畫面；fallback 文案不穿幫即放行。\u003c/li\u003e\u003cli\u003e不需改碼；若該輪發現具體 blocker 才停下回報。\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e","createdAt":1788763434955,"displayMode":"artifact","id":"d9908611b6a43811917a72fa","isNew":false,"itemType":"NOTE","name":"Final Launch QA：Blueprint 翻譯專員一案驗證","parents":{"b105349fa3932713b892bc43":1788763434955},"updatedAt":1788763434955,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":3},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F7F6F1;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EDF1EE;--hair:#E3DED2;} :root[data-theme=\"dark\"]{--paper:#141715;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2A25;--hair:#2B3233;} .doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,\"PingFang TC\",\"Microsoft JhengHei\",sans-serif;} .eyebrow{font:600 11px ui-monospace,monospace;letter-spacing:.16em;color:var(--accent);} h1{font-size:25px;line-height:1.3;margin:12px 0 0;max-width:24ch;} h2{font-size:19px;margin:28px 0 10px;} p,li{color:var(--ink2);max-width:68ch;} ul{padding-left:22px;} li{margin:5px 0;} .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:6px;margin:16px 0;} .callout .tag{flex:none;font:700 11px ui-monospace,monospace;color:var(--accent);padding-top:3px;} code{font:13px ui-monospace,Menlo,monospace;background:var(--soft);padding:1px 6px;border-radius:4px;color:var(--ink);} section[data-cube=\"stats\"]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin:18px 0;} .stat{background:var(--soft);border-radius:8px;padding:12px 14px;} .stat .k{font-size:12px;color:var(--accent);} .stat .v{font-size:20px;font-weight:700;margin-top:4px;color:var(--ink);} .stat .n{font-size:12px;color:var(--ink2);margin-top:2px;}\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\u003cheader\u003e\u003cdiv class=\"eyebrow\"\u003eTALENT RADAR · 修復整備 · 2026-09-07 · 第三棒（續 M5/M6）\u003c/div\u003e\u003ch1\u003eTalent Radar 修復紀錄：M5 session 截斷與 M6 隱藏欄可編\u003c/h1\u003e\u003cp\u003e只修審計報告 M5（僅 sessionStorage、超限整包作廢）與 M6 隱藏欄（reader 填入使用者看不到）。main e519bf5 → 715ca5e，已 push。\u003c/p\u003e\u003c/header\u003e\u003csection data-cube=\"stats\" class=\"stats\"\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e提交\u003c/div\u003e\u003cdiv class=\"v\"\u003e715ca5e\u003c/div\u003e\u003cdiv class=\"n\"\u003e3 檔源檔，已 push 到 main\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e生產建置\u003c/div\u003e\u003cdiv class=\"v\"\u003e通過\u003c/div\u003e\u003cdiv class=\"n\"\u003evite build（Cloudflare nitro 目標，Node 22）\u003c/div\u003e\u003c/div\u003e\u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003etsc 全倉\u003c/div\u003e\u003cdiv class=\"v\"\u003e47＝47\u003c/div\u003e\u003cdiv class=\"n\"\u003e修前修後同數，既有錯誤\u003c/div\u003e\u003c/div\u003e\u003c/section\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM5：\u003ccode\u003eloadOnboarding\u003c/code\u003e 任一欄超 zod 上限（story 12000 等）整包 parse 失敗回 null，整份 session 作廢；深頁只有英文重來提示，無回 /start 文字路徑。\u003c/li\u003e\u003cli\u003eM6：\u003ccode\u003eopportunity.tsx\u003c/code\u003e state 有 location／arrangement／salary／responsibilities／requirements／benefits／companyUrl 七個隱藏欄，reader 填入後看不到改不了，卻會進 AI 證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM5：parse 失敗後重試，重試前截斷超限欄（story 12000、wantsOther／avoidsOther 3000、wants／avoids 前 20，title／industry 非字串回空字串）再 parse；仍失敗才回 null。/reflect 無資料時顯示回 /start 的文字路徑；/opportunity 原有英文重來提示保留。\u003c/li\u003e\u003cli\u003eM6：機會表單加 More details 可收合區，七個隱藏欄全部顯示為可編欄位；送 AI 的 payload 不變，現在使用者能校正。\u003c/li\u003e\u003cli\u003e未動：M1／M2／M3／M4（前棒已修）、N 系列；有／無 JINA_API_KEY 完整旅程實測仍待有金鑰環境。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；環境預設 Node 20 會被 Vite 擋）。routeTree.gen.ts 等副產物已還原，只交 3 檔源檔。tsc 全倉 47＝47 既有錯誤（中間 19 個 TS4111 已改括號存取消除）。截斷煙測 13000→12000 OK。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e邏輯驗證：reflect 無資料分支顯示回開始連結；opportunity 七欄與 state／reader／payload 三方對齊（diff 確認）。\u003c/li\u003e\u003cli\u003e未做：Cloudflare preview 有／無 JINA_API_KEY 各跑一次完整旅程（sandbox 無金鑰、無 preview URL，只能做建置驗證）。\u003c/li\u003e\u003cli\u003e使用者流程影響：超限輸入不再整份作廢；深頁失效有回頭路；reader 帶回的細節看得見、改得了，再進分析。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒（續 M5/M6）。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e提交\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e715ca5e\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e3 檔源檔，已 push 到 main\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e生產建置\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e通過\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003evite build（Cloudflare nitro 目標，Node 22）\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003etsc 全倉\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e47＝47\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e修前修後同數，既有錯誤\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e原因\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM5：\u003ccode\u003eloadOnboarding\u003c/code\u003e 任一欄超 zod 上限（story 12000 等）整包 parse 失敗回 null，整份 session 作廢；深頁只有英文重來提示，無回 /start 文字路徑。\u003c/li\u003e\u003cli\u003eM6：\u003ccode\u003eopportunity.tsx\u003c/code\u003e state 有 location／arrangement／salary／responsibilities／requirements／benefits／companyUrl 七個隱藏欄，reader 填入後看不到改不了，卻會進 AI 證據。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e改法\u003c/h2\u003e\u003cul\u003e\u003cli\u003eM5：parse 失敗後重試，重試前截斷超限欄（story 12000、wantsOther／avoidsOther 3000、wants／avoids 前 20，title／industry 非字串回空字串）再 parse；仍失敗才回 null。/reflect 無資料時顯示回 /start 的文字路徑；/opportunity 原有英文重來提示保留。\u003c/li\u003e\u003cli\u003eM6：機會表單加 More details 可收合區，七個隱藏欄全部顯示為可編欄位；送 AI 的 payload 不變，現在使用者能校正。\u003c/li\u003e\u003cli\u003e未動：M1／M2／M3／M4（前棒已修）、N 系列；有／無 JINA_API_KEY 完整旅程實測仍待有金鑰環境。\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003e建置與測試\u003c/h2\u003e\u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e建置\u003c/span\u003e\u003cdiv\u003e生產建置 vite build 通過（Node 22；環境預設 Node 20 會被 Vite 擋）。routeTree.gen.ts 等副產物已還原，只交 3 檔源檔。tsc 全倉 47＝47 既有錯誤（中間 19 個 TS4111 已改括號存取消除）。截斷煙測 13000→12000 OK。\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e邏輯驗證：reflect 無資料分支顯示回開始連結；opportunity 七欄與 state／reader／payload 三方對齊（diff 確認）。\u003c/li\u003e\u003cli\u003e未做：Cloudflare preview 有／無 JINA_API_KEY 各跑一次完整旅程（sandbox 無金鑰、無 preview URL，只能做建置驗證）。\u003c/li\u003e\u003cli\u003e使用者流程影響：超限輸入不再整份作廢；深頁失效有回頭路；reader 帶回的細節看得見、改得了，再進分析。\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e產品定位：決策支援，不是幫人海投；流程是了解自己→映照→了解機會→比較→自願選擇是否申請。\u003c/p\u003e\u003cp\u003e修復人：修復整備員第三棒（續 M5/M6）。\u003c/p\u003e\u003c/div\u003e","createdAt":1788765739734,"displayMode":"artifact","id":"2709b9e1c2a095c779efb05d","isNew":false,"itemType":"NOTE","name":"Talent Radar 修復紀錄：M5 session 截斷與 M6 隱藏欄可編","parents":{"b105349fa3932713b892bc43":1788765739734},"updatedAt":1788765900892,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela"},"version":4},{"artifactHtml":"\u003cstyle\u003e:root{--paper:#F8F7F3;--ink:#1F2937;--ink2:#5B6472;--accent:#2F5D50;--soft:#EEF2EF;--hair:#E7E2D8}:root[data-theme=dark]{--paper:#141817;--ink:#E9EDEC;--ink2:#AEB6B7;--accent:#7FC4B2;--soft:#1B2623;--hair:#2B3233}.doc{background:var(--paper);color:var(--ink);padding:28px 30px;font:16px/1.75 -apple-system,PingFang TC,sans-serif}.eyebrow{font:600 11px ui-monospace;letter-spacing:.16em;color:var(--accent)}.doc h1{font-size:28px;margin:12px 0 0}.lede{color:var(--ink2)}.doc h2{font-size:19px;margin:26px 0 8px;padding-top:18px;border-top:1px solid var(--hair)}.doc p,.doc li{max-width:68ch}.sub{color:var(--ink2);font-size:14px}.callout{background:var(--soft);border-radius:6px;padding:14px 16px;margin:14px 0}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--hair);vertical-align:top}\u003c/style\u003e\u003cdiv class=doc\u003e\u003cheader\u003e\u003cdiv class=eyebrow\u003eTALENT RADAR CODE AUDIT\u003c/div\u003e\u003ch1\u003eTalent Radar 程式碼審計 — 2026-09-08\u003c/h1\u003e\u003cp class=lede\u003e只讀審計，不改碼。來源 main 分支 FETCH_HEAD，主文件為最高真實來源。\u003c/p\u003e\u003c/header\u003e\u003cdiv class=callout\u003e結論：程式碼與 MASTER 意圖基本一致，歷史 MUST 修復（雙研究鏈、description 公司標記、研究併發超時、M5 超限截斷）皆已在 main 生效。本輪無崩潰級 bug；發布前工作是真環境驗證。\u003c/div\u003e\u003ch2\u003e一、是什麼／不是什麼\u003c/h2\u003e\u003cp\u003e是：職涯決定陪伴者，先理解人再看機會，信念是每個職涯決定都是人生決定。流程為理解自己、反思、機會、對照。不是：求職版、履歷產生器、大量投遞、面試教練、人格測驗、心理診斷、儀表板、配對分數、AI 命運宣告。語言紅線：只用使用者給的事實，story 語義閱讀，不確定要寫出來，可被糾正。\u003c/p\u003e\u003ch2\u003e二、使用者流程與實作\u003c/h2\u003e\u003ctable\u003e\u003ctr\u003e\u003cth\u003e步驟\u003c/th\u003e\u003cth\u003e位置\u003c/th\u003e\u003cth\u003e現況\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eLanding\u003c/td\u003e\u003ctd\u003eroutes/index.tsx\u003c/td\u003e\u003ctd\u003e文案與 MASTER 一致，支援連結為次要弱 CTA\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eOnboarding\u003c/td\u003e\u003ctd\u003eroutes/start.tsx+onboarding.ts\u003c/td\u003e\u003ctd\u003e6 問，單選即前進，非在職跳過公司題，sessionStorage 即時存\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eReflection\u003c/td\u003e\u003ctd\u003eroutes/reflect.tsx+reflection-server.ts\u003c/td\u003e\u003ctd\u003eGroq gpt-oss-120b 加確定性 fallback，Yes / Not quite 純文字選擇\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eOpportunity\u003c/td\u003e\u003ctd\u003eroutes/opportunity.tsx+job-ad-reader+analysis+cv\u003c/td\u003e\u003ctd\u003e讀 URL 預填，Continue 存檔，單次研究加分析，研究中最少展示 7 秒\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eFeedback\u003c/td\u003e\u003ctd\u003eroutes/feedback.tsx\u003c/td\u003e\u003ctd\u003e開 GitHub issue 預填頁，需 GitHub 帳號\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003ch2\u003e三、已實作\u003c/h2\u003e\u003cp\u003e視覺合規長書風，主色深綠，無 pill 大 CTA。M1_M2 已修：continueOn 只調 analyzeOpportunity 一次。description 公司標記已除，saveOpportunity 只存 zod 原樣。M3_M4 研究鏈：轉址跟隨、Jina 備援、4 併發、上限 5 來源、SSRF 私網段擋。超時封頂 45s（研究22/Groq15/解析5），超時保留 partial evidence。M5_M6：超限欄截斷不丟 session，深頁回開始路徑。證據誠實：researchNote 與 readableCount/leadCount 區分讀到與讀不到。CV 本地抽字 10MB 擋，禁編造經歷與分數。Key 皆在 server fn 內，無瀏覽器外洩。\u003c/p\u003e\u003ch2\u003e四、未完成（Later）\u003c/h2\u003e\u003cp\u003e真正的 comparison 深度、機會歷史、持久記憶、更強 ingestion、帳號訂閱皆為 MASTER Later，不擋發布。求職 PDF 只作背景引用，未塞回主線，正確。\u003c/p\u003e\u003ch2\u003e五、損壞或不可靠處\u003c/h2\u003e\u003cp\u003e無崩潰級損壞。弱點在外部依賴：DDG lite 偶發 bot 牆、Bing RSS 漂移、Jina 無 key 限流、慢官網；已有 fallback 但文案模板感重。原型暫存 sessionStorage 同 tab 有效，新分頁會斷流，已有提示。__root.tsx 404/error 頁用了 rounded-md 按鈕，與長書風不一致，僅錯誤路徑。start.tsx 每次 keystroke 全量 save，多餘但無害。CV fallback applicationTip 偏 Gmail 中心。feedback 需 GitHub 帳號會壓低回饋率。\u003c/p\u003e\u003ch2\u003e六、發布前需求\u003c/h2\u003e\u003cp\u003e\u003cb\u003eMUST FIX BEFORE LAUNCH（驗證為主）\u003c/b\u003e：Cloudflare preview 真 key 實測 reflection 正常與超時 fallback，檢查 GROQ_API_KEY 與 AI_REFLECTION_OPPORTUNITY 與 JINA_API_KEY 是否注入 Worker env；機會鏈端到端：可讀職缺 URL 預填、LinkedIn 顯示 linkedin-blocked 文案、無公司名不跑搜尋、有公司名 readable/lead 計數正確；研究鏈 22s 收斂、慢官網不拖死、45s 總預算不被客戶端放棄；CV 實測 PDF/DOCX/10MB/掃描無字；新分頁開 reflect/opportunity 斷 session 文案可點回開始。不做：新 App、帳號訂閱、儀表板、履歷產生器、面試套件、配對分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003eNICE TO HAVE AFTER LAUNCH\u003c/b\u003e：404/error 改長書文字連結；feedback 加免登入通道；7 秒展示改證據回來即結束加最短 3-4 秒並顯示已找到來源數；saveOnboarding 加 debounce；CV tip 去 Gmail 字眼；機會歷史等排期到驗證有答案後。\u003c/p\u003e\u003ch2\u003e七、交給研究驗證員\u003c/h2\u003e\u003cp\u003e建議順序：reflection 真 key、職缺 URL 可讀與不可讀、公司研究計數、CV 三種檔、新分頁斷 session。若 Groq 被擋或超時先看 Worker env 與三段超時日誌而非改 prompt。本審計未改任何程式碼。\u003c/p\u003e\u003cp class=sub\u003e方法：github-cache bare repo 只讀，fetch origin main 後 git show 逐檔讀，未開 worktree 未改碼；重點追 server fn 內部呼叫。\u003c/p\u003e\u003c/div\u003e","content":"\u003cdiv class=\"doc\"\u003e\u003cdiv class=\"callout\"\u003e結論：程式碼與 MASTER 意圖基本一致，歷史 MUST 修復（雙研究鏈、description 公司標記、研究併發超時、M5 超限截斷）皆已在 main 生效。本輪無崩潰級 bug；發布前工作是真環境驗證。\u003c/div\u003e\u003ch2\u003e一、是什麼／不是什麼\u003c/h2\u003e\u003cp\u003e是：職涯決定陪伴者，先理解人再看機會，信念是每個職涯決定都是人生決定。流程為理解自己、反思、機會、對照。不是：求職版、履歷產生器、大量投遞、面試教練、人格測驗、心理診斷、儀表板、配對分數、AI 命運宣告。語言紅線：只用使用者給的事實，story 語義閱讀，不確定要寫出來，可被糾正。\u003c/p\u003e\u003ch2\u003e二、使用者流程與實作\u003c/h2\u003e\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003cth\u003e步驟\u003c/th\u003e\u003cth\u003e位置\u003c/th\u003e\u003cth\u003e現況\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eLanding\u003c/td\u003e\u003ctd\u003eroutes/index.tsx\u003c/td\u003e\u003ctd\u003e文案與 MASTER 一致，支援連結為次要弱 CTA\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eOnboarding\u003c/td\u003e\u003ctd\u003eroutes/start.tsx+onboarding.ts\u003c/td\u003e\u003ctd\u003e6 問，單選即前進，非在職跳過公司題，sessionStorage 即時存\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eReflection\u003c/td\u003e\u003ctd\u003eroutes/reflect.tsx+reflection-server.ts\u003c/td\u003e\u003ctd\u003eGroq gpt-oss-120b 加確定性 fallback，Yes / Not quite 純文字選擇\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eOpportunity\u003c/td\u003e\u003ctd\u003eroutes/opportunity.tsx+job-ad-reader+analysis+cv\u003c/td\u003e\u003ctd\u003e讀 URL 預填，Continue 存檔，單次研究加分析，研究中最少展示 7 秒\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eFeedback\u003c/td\u003e\u003ctd\u003eroutes/feedback.tsx\u003c/td\u003e\u003ctd\u003e開 GitHub issue 預填頁，需 GitHub 帳號\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003ch2\u003e三、已實作\u003c/h2\u003e\u003cp\u003e視覺合規長書風，主色深綠，無 pill 大 CTA。M1_M2 已修：continueOn 只調 analyzeOpportunity 一次。description 公司標記已除，saveOpportunity 只存 zod 原樣。M3_M4 研究鏈：轉址跟隨、Jina 備援、4 併發、上限 5 來源、SSRF 私網段擋。超時封頂 45s（研究22/Groq15/解析5），超時保留 partial evidence。M5_M6：超限欄截斷不丟 session，深頁回開始路徑。證據誠實：researchNote 與 readableCount/leadCount 區分讀到與讀不到。CV 本地抽字 10MB 擋，禁編造經歷與分數。Key 皆在 server fn 內，無瀏覽器外洩。\u003c/p\u003e\u003ch2\u003e四、未完成（Later）\u003c/h2\u003e\u003cp\u003e真正的 comparison 深度、機會歷史、持久記憶、更強 ingestion、帳號訂閱皆為 MASTER Later，不擋發布。求職 PDF 只作背景引用，未塞回主線，正確。\u003c/p\u003e\u003ch2\u003e五、損壞或不可靠處\u003c/h2\u003e\u003cp\u003e無崩潰級損壞。弱點在外部依賴：DDG lite 偶發 bot 牆、Bing RSS 漂移、Jina 無 key 限流、慢官網；已有 fallback 但文案模板感重。原型暫存 sessionStorage 同 tab 有效，新分頁會斷流，已有提示。__root.tsx 404/error 頁用了 rounded-md 按鈕，與長書風不一致，僅錯誤路徑。start.tsx 每次 keystroke 全量 save，多餘但無害。CV fallback applicationTip 偏 Gmail 中心。feedback 需 GitHub 帳號會壓低回饋率。\u003c/p\u003e\u003ch2\u003e六、發布前需求\u003c/h2\u003e\u003cp\u003e\u003cb\u003eMUST FIX BEFORE LAUNCH（驗證為主）\u003c/b\u003e：Cloudflare preview 真 key 實測 reflection 正常與超時 fallback，檢查 GROQ_API_KEY 與 AI_REFLECTION_OPPORTUNITY 與 JINA_API_KEY 是否注入 Worker env；機會鏈端到端：可讀職缺 URL 預填、LinkedIn 顯示 linkedin-blocked 文案、無公司名不跑搜尋、有公司名 readable/lead 計數正確；研究鏈 22s 收斂、慢官網不拖死、45s 總預算不被客戶端放棄；CV 實測 PDF/DOCX/10MB/掃描無字；新分頁開 reflect/opportunity 斷 session 文案可點回開始。不做：新 App、帳號訂閱、儀表板、履歷產生器、面試套件、配對分數。\u003c/p\u003e\u003cp\u003e\u003cb\u003eNICE TO HAVE AFTER LAUNCH\u003c/b\u003e：404/error 改長書文字連結；feedback 加免登入通道；7 秒展示改證據回來即結束加最短 3-4 秒並顯示已找到來源數；saveOnboarding 加 debounce；CV tip 去 Gmail 字眼；機會歷史等排期到驗證有答案後。\u003c/p\u003e\u003ch2\u003e七、交給研究驗證員\u003c/h2\u003e\u003cp\u003e建議順序：reflection 真 key、職缺 URL 可讀與不可讀、公司研究計數、CV 三種檔、新分頁斷 session。若 Groq 被擋或超時先看 Worker env 與三段超時日誌而非改 prompt。本審計未改任何程式碼。\u003c/p\u003e\u003cp class=\"sub\"\u003e方法：github-cache bare repo 只讀，fetch origin main 後 git show 逐檔讀，未開 worktree 未改碼；重點追 server fn 內部呼叫。\u003c/p\u003e\u003c/div\u003e","createdAt":1788829378995,"displayMode":"artifact","id":"cea5546824cbce6884b32bd1","isNew":false,"itemType":"NOTE","name":"Talent Radar 程式碼審計 — 2026-09-08","parents":{"b105349fa3932713b892bc43":1788829378995},"updatedAt":1788829378995,"updatedBy":{"userId":"6a9e1448016e96e846353c","userName":"Mikaela 米奇拉"},"version":3}]}