Changelog¶
Newest first. Short, intentionally incomplete — commits on main are the source of truth, this is the human-readable roll-up.
2026-10 — SentimentPulse switched off while its sources are paused¶
- SentimentPulse no longer runs while Stocktwits, Reddit and YouTube are all paused. With none of them it had nothing to read beyond the article the other four agents already read. Signals are now scored by four agents, and the agent breakdown on a card shows four (for example "4/4 succeeded"). Checked against three days of signals before the change: no ALERT or FLASH signal would have scored lower. It comes back as soon as one of those sources does.
2026-10 — "Read original" links, article images back¶
- Every signal card and Market Wire item now has a "Read original" button that opens the source in a new tab. The small source name next to it stays, and the button fits on narrow phone screens.
- Article images are back on signal cards in the signed-in app, as a small thumbnail that links to the article. Cards without an image look as before. The live sample, Telegram, email and push notifications still show no article images.
- US government statistics now link to the data itself. A BLS item opens that series on data.bls.gov (for example CPI or the unemployment rate) instead of the BLS developer pages; BEA, Treasury, EIA, ECB, World Bank and Eurostat items open the matching data page. Older items get the new links too.
2026-10 — Yahoo Finance news per ticker is back¶
- Yahoo Finance news for each watchlist ticker is back in the signed-in app and the live sample. By 13 October the Yahoo address we read it from had stopped answering, so no per-ticker Yahoo items arrived; we now read the same news from Yahoo's search, and an empty result is logged as a warning instead of passing unnoticed. Earlier missed items are not added back.
2026-10 — Market pane opens on your first watchlist ticker¶
- The Market pane now opens on the first ticker in your watchlist (NVDA in the live sample) instead of a ticker named by the newest signal, which could be one you do not follow. Tapping a watchlist row or opening a signal still switches it; a feed refresh does not. Same in the signed-in app.
2026-10 — Yahoo Finance headlines in the live sample¶
- The live sample now includes Yahoo Finance headlines for the five sample tickers and in Market Wire, shown the same way as in the signed-in app: our summary, the source name and a link to the original article. Some of these articles come from other publishers that Yahoo carries, and the link shows which.
- Items appear as new ones arrive; earlier Yahoo news is not added to the sample. Other news outlets are still shown to signed-in accounts only. See Can I see it working before I sign up?
2026-10 — Prices in the live sample, from TradingView¶
- The live sample now shows prices. A scrolling ticker tape with the five sample tickers and the S&P 500, US 100 and Dow 30 replaces the locked index line, and the Market pane shows a small price chart for the selected ticker. Both are TradingView widgets: TradingView supplies the data inside its own frame, and US stock prices there are usually delayed. StockClaw does not fetch or store these prices.
- If the widgets cannot load (for example, a content blocker stops them), the sample shows the locked placeholders as before. Watchlist rows, retail sentiment and the signed-in app are unchanged.
2026-10 — Popular examples and a short tour for new accounts¶
- An empty watchlist now offers five popular examples (NVDA, AAPL, MSFT, SPY, TSLA) as one-tap chips. Nothing is added until you tap one, and each can be removed like any other ticker.
- New accounts get a short feature tour the first time they open the dashboard: where to add stocks, the signal feed and its tiers, the panels, Claw and notification settings. Skip it at any step; it is shown once per account on the web and in the Android app. Replay the feature tour is in Settings → About and in Help. Existing accounts see it once too, the next time they open the dashboard.
2026-10 — Feed toolbar fits on phones¶
- On a phone, the Signal Feed toolbar no longer hides its buttons at the screen edge. Refresh is now a round-arrow button on the same row as "Signal Feed", and the toolbar and the filter row have wider side margins, so the small tabs on each side of the screen that switch panes no longer sit on top of Refresh, the list/grid buttons, Filters or the filter menus. This applies to the signed-in app and the live sample. Tablet and desktop layouts are unchanged.
2026-10 — SEC filings within minutes, with the company's own press release¶
- Company filings with the SEC now reach your feed within about 25 minutes. We read the SEC's latest-filings feed every 5 minutes during US filing hours. For an 8-K (results, deals, management changes and other material events) or a 6-K from a foreign company, the signal is based on the press release the company filed with it, not only on the form's item list.
- SEC press releases, litigation releases, administrative proceedings and trading suspensions are included when they name a company on your watchlist.
- Insider trades (Form 4) and other SEC filings had not been reaching the feed at all because of a fault. That is fixed.
- SEC records are public, so they also appear in the live sample. See Where your signals come from.
2026-10 — US government releases on sanctions, export controls and trade¶
- New sources from US federal agencies: export-control rules from the Commerce Department's Bureau of Industry and Security, sanctions actions from Treasury's OFAC, trade releases from USTR, presidential actions from the White House, Department of Defense releases, and FTC, DOJ antitrust and NHTSA safety items. They are fetched from each agency's own site and are in the public domain.
- Sanctions, export controls and trade actions reach every watchlist and can appear in Market Wire. FTC, DOJ and NHTSA items appear only when they name a company you follow. An NHTSA recall or investigation about Tesla is linked to TSLA, and an export-control rule about chips to NVDA and AMD.
- The live sample shows these too, so it has something to show more often. See Can I see it working before I sign up?
2026-10 — Reddit, Stocktwits and YouTube paused; no article images¶
- We stopped reading Reddit, Stocktwits and YouTube. Their terms allow automated access only through an approved API or under an agreement, which we don't have yet. Until we do, no new signals come from them and the sentiment agent works from the article itself. Signals they produced before 14 October stay in your feed and history. About half of the signals in the last month came from Stocktwits, so your feed will be quieter, mostly by fewer low-urgency items. See Paused sources.
- Signal cards no longer show the article's image. Each card still has our summary and a link to the original. (Images are back since 16 October, see above.)
- Summaries and reasoning no longer mention our internal tools or their errors. Text such as "stocktwits_lookup failed (invalid API key)" used to slip into some explanations. It is now left out, also for older signals.
2026-10 — Home page wording on sources and alerts¶
- The home page now names only the official sources we use: SEC EDGAR filings, the Federal Reserve and the ECB, US government data from the BLS and the Treasury, and World Bank and Eurostat figures. Other news is described as public financial news, without publisher names. What StockClaw reads has not changed.
- It no longer promises Telegram alerts "in seconds". The free version sends the most important signals (FLASH and ALERT) to your phone at most every 30 minutes, and new items are checked about every 20 minutes.
2026-10 — The live sample looks like the app¶
- The live sample now shows the real dashboard instead of a separate page: the watchlist, the feed with Market Wire and the market column, or the three swipe panes on a phone. It is still read-only and needs no account. Claw, alerts, settings, adding symbols, charts and sentiment are shown with a lock and the note "Sign up free to use this". Prices and index levels are not part of the sample. See Can I see it working before I sign up?
2026-10 — US economic data in the live sample¶
- The live sample now also shows US government statistics: inflation, jobs and producer prices from the Bureau of Labor Statistics, GDP from the Bureau of Economic Analysis and Treasury interest rates, taken straight from each agency's own data service. On the days these figures come out, the sample has more to show. Economic news from Investing.com and other sites still appears only for signed-in accounts. See Can I see it working before I sign up?
2026-10 — Market Wire and Weekly Watch in Japanese and Korean¶
- With the app in 日本語 or 한국어, Market Wire and the Weekly Watch top signals now show translated summaries. A new Market Wire item is usually translated within a few minutes of appearing. Until then, and for older items, it shows in English, as before. Weekly Watch uses the translations already made for your signal feed; any it is missing are translated in the background and appear the next time you open the tab.
- Market Wire alerts on Telegram and phone or browser notifications use the same translation when it is ready, so the alert and the app say the same thing; otherwise the alert is in English, as before.
- The live sample's Market Wire is translated the same way.
2026-10 — Market Wire and Weekly Watch in Traditional Chinese¶
- With the app in 繁體中文, Market Wire and the Weekly Watch top signals are now in Traditional Chinese. They used to show Simplified Chinese there, while signal cards, Telegram and email were already Traditional. Telegram and email Market Wire messages are unchanged. The live sample shows Market Wire in Traditional too.
- In 日本語 and 한국어 these two lists still show English; translation there is planned separately.
2026-10 — A live sample before you sign up¶
- See StockClaw working without an account. A See a live sample button on the home page and the sign-in page opens a read-only sample: Market Wire and the last 24 hours of signals for a fixed watchlist of NVDA, AAPL, MSFT, SPY and TSLA, with the newest hour held back. Only SEC filings and Federal Reserve items appear there. Claw, alerts and your own watchlist still need a free account. See Can I see it working before I sign up?
2026-10 — Signal summaries in your app language only¶
- A signal card shows one summary, in the language the app is set to. With the app in English, cards used to show a Chinese summary under the English one. Now English shows English only, 简体中文 and 繁體中文 show Chinese, and 日本語 and 한국어 show the translated summary, or English when no translation is available yet. The "EN" and "ZH" labels are gone.
- The first sentence is the headline; the full summary appears under it only when it adds more. The same rule applies to the "What's moving the market" strip, Market Wire and Weekly Watch. Notifications and the email digest already worked this way.
- To read a summary in the other language, switch the app language.
2026-10 — Summaries never repeat a call to buy or sell¶
- Summaries and explanations describe what happened, never what to do. A summary in the app said a StockTwits post "urges buying the dip" in a stock. That is buy wording in our own text, even when it repeats someone else. It now reads "A StockTwits post discusses SNDK, which is down 5.97% to 1487.33."
- This applies in all five languages, to signal summaries and explanations, Market Wire, Weekly Watch, Claw answers, Telegram, phone and browser alerts and the email digest, and to signals saved before the change.
- Analyst actions are still reported, without the rating word or the target price: "Citi raised its rating on NVDA", not "Citi upgraded NVDA to Buy". Words such as "bullish" and "bearish" in a summary now read "positive" and "negative". Market descriptions like sell-off, buyback or insider selling stay.
- Also covered now: a target level written without a currency ("the target is 130"), slang such as "go all in" or "to the moon" when it tells the reader what to do, and the Japanese and Korean words for bullish and bearish when they describe a view. "Investors rotated into defensives", "bull market" and a Korean "강세를 보였다" (shares rose) still read as before.
- In Traditional Chinese the replacement word is Traditional too: 看跌 now reads 悲觀, not the Simplified 悲观. A rating change such as 從買入下調至中性 loses the rating word in Traditional, as it already did in Simplified.
2026-10 — Market strip fits on phones¶
- On a phone, the index strip above "What's moving the market" no longer runs numbers together. Each index shows its name, value and % change on three lines, and the strip scrolls sideways when the indices don't all fit. The status line above it uses shorter labels ("Updated 14s ago", "84 new in watchlist") and wraps onto a second row instead of breaking word by word. Tablet and desktop layouts are unchanged.
2026-10 — Free version limits¶
There is still nothing to pay for. The free version now has limits; see How much does this cost? for the full list.
- Up to 5 tickers. If your list had more, nothing was removed: the 5 you added first are monitored and the others are marked Not monitored until you are back under 5. The watchlist shows a counter such as 3 / 5 tickers.
- Phone and browser alerts for FLASH and ALERT, at most every 30 minutes. NOTE and FYI stay in your feed but are not pushed. Push frequency and quiet hours are shown locked.
- No Telegram delivery and no daily email digest. Your Telegram link and digest setting are kept but nothing is sent.
- 5 Claw questions a day (the count starts again at midnight UTC), and Claw reads the last 7 days of signals.
- The feed shows the last 7 days. Older signals are not deleted and are still in your data download.
- Market Wire alerts for market-wide events are unchanged for anyone with FLASH on.
2026-10 — Some signals are analysed in cheaper hours¶
- Stocktwits posts and economic-calendar items can appear later. On weekdays from 01:00 to 04:00 and from 06:00 to 10:00 UTC, our language-model provider charges twice as much. Items from these two sources that arrive in those hours are now analysed when the window ends, so they can show up to four hours later. Most of them rate NOTE or FYI. News from every other source is analysed straight away, as before.
- With quiet hours on, nothing reaches you later. If your quiet hours cover the rest of such a window, all new items wait until it ends, then go out with your first digest after quiet hours, as before. They only appear in the app feed a little later. See Where your signals come from.
2026-10 — Sign in with an email and a password¶
- You can now use a password. Tap Sign in with email on the sign-in page to sign in with your email and a password, or Create an account to sign up with one. We email you a link to confirm the address first. Continue with Google and the one-time sign-in link work as before.
- Forgot password? sends a link to choose a new one. You can also set or change a password in Settings → Account, also on an account you opened with Google or a sign-in link.
- Your browser or phone can offer to save the password. StockClaw never sees it: it goes straight to our sign-in provider, Supabase, which stores it hashed. See the Privacy Policy.
2026-10 — Country or region of residence; not available in Hong Kong¶
- You'll be asked where you live. New accounts choose a country or region of residence when they first sign in, and existing accounts are asked once at their next sign-in. You can change it later in Settings → Account. See the Privacy Policy for what is stored and why.
- StockClaw is not available in Hong Kong. Visitors from Hong Kong see a page saying so. An existing account that lives in Hong Kong is kept, gets no more notifications, and can download or delete its data from the app or by emailing support@stockclaw.co.
- In Australia, scores are shown as High, Medium or Low. Impact and confidence (also per ticker and per agent) appear as bands instead of percentages, and signals have no positive or negative label, in the app, in Claw and in every notification. This applies if you live in Australia or use StockClaw from there. See Terms of Use.
2026-10 — Signals say "positive impact" or "negative impact"¶
- Bullish and bearish are gone. Signals now say Positive impact or Negative impact: how the news is likely to affect the linked stocks. It is not a price forecast or a suggestion to buy or sell. Neutral and Uncertain stay. See Scoring.
- Japanese no longer says 買い / 売り (buy / sell). Japanese notifications and the app used those words for positive and negative signals; they now say プラスの影響 / マイナスの影響. The Korean Weekly Watch column that said 매수 / 매도 now says 긍정 / 부정.
- The same words are used in Telegram, on signal cards, in the feed filters, the watchlist summary (Positive impact share), the sentiment bars and Weekly Watch, in all five languages. Filters you already saved keep working.
- Telegram no longer shows 📈 / 📉 next to the direction. Those read as "price up / price down". Positive and negative impact now carry ➕ / ➖.
- Stocktwits posts tagged Bullish / Bearish by their author start with ➕ / ➖ instead of 📈 / 📉, including older ones.
2026-10 — Search for any stock when adding to your watchlist¶
- Add symbol on the dashboard now searches. It used to offer the same six symbols (SPY, QQQ and four others) and nothing else. You can now type a symbol or a company name in English and pick from the results. The Watchlist page uses the same search instead of a pop-up box. See Watchlist.
- Dashboard changes are saved. Symbols added, removed or dragged on the dashboard used to vanish on reload, and StockClaw never watched the added ones. Adds and removes are now saved to your account. Drag order is kept on the device you set it on.
- Unknown symbols are refused. Typing a symbol that does not exist used to save it anyway. Now you get a message and nothing is saved.
- Search covers US, Hong Kong, mainland China, Taiwan, Japan and Korea listings. Company names in Chinese, Japanese or Korean are not found yet.
2026-10 — Sample data removed from the Market card and Claw¶
- The company card in the Market pane no longer shows sample figures. It used to show made-up fundamentals, returns and analyst ratings (for example "Strong Buy" and "Buy 42 · Hold 8 · Sell 2", dated March 2025) for about 20 tickers. The card is no longer shown; price and change stay in the chart header above it, as before.
- The Historical Search block on the Claw page is gone. It always showed the same sample answer, not a search of your signals. Claw chat itself is unchanged.
2026-10 — One language on every device and in every notification¶
- Your language is saved to your account. Pick it on any device (header language menu or Settings → Display) and every device you sign in on switches to it. Before, each phone or browser kept its own language. Before you sign in, the app uses the device's language as before.
- Notifications use the same language. Telegram, Market Wire, phone and browser notifications and the email digest are all sent in your app language. The separate "News language" selector under Alert tiers & frequency is gone.
- English means English. English messages used to show the Chinese summary or the Chinese headline when a Chinese-language source had no English summary, and Chinese source names. They now say which tickers and tier a signal is about and point you to the app instead. Market Wire used to be English for everyone; it now follows your language too.
- Translated labels. Chinese, Japanese and Korean Telegram messages, push titles and buttons and test messages no longer carry English labels such as "Affected tickers" or "View signal".
- After this update: if you had chosen a non-English language in the old selector, it becomes your account language on every device; otherwise your current app language does. Switch once to change it everywhere.
2026-10 — Dashboard opens with your last data¶
- Coming back to the dashboard no longer means a few seconds of empty boxes. Your watchlist, feed and Market Wire from the last visit show straight away, with a small Updating… note in the status bar until the fresh copy arrives. If the refresh fails, the note says so and the last data stays on screen. The saved copy is kept in your browser for up to a day and is deleted when you sign out.
- No more fake zeros while loading. Tracked / Signals today / Urgent / Bullish ratio, the watchlist name and "Add your first symbols" used to show 0, 0% or the empty-list hint while your data was still on its way. They now show placeholders until it arrives.
- The loading card shows real time. The old card ticked through four steps that in fact all finished at the same moment. It now shows how long the load has taken and how long it usually takes on your device.
- Market Wire loads sooner on a first visit, because it no longer waits for your settings before asking for its news.
2026-10 — Daily email digest¶
- The Email digest switch now sends email. Before, it was saved but nothing was ever sent. Switch it on under Settings → Email and quiet hours, pick a send time, and you get one email a day with the last 24 hours of signals on your watchlist, using your alert tiers and news language. Days with no matching signal send nothing. See Email digest.
- Off for everyone at launch. The switch used to default to on while it did nothing, so it has been turned off for all accounts and new accounts start with it off. Turn it on again if you want it.
- Sent to your sign-in address and nowhere else. Every email has an unsubscribe link that works without signing in.
2026-10 — App stuck on the loading screen after an update¶
- The loading screen could stay up after we shipped an update ("Slower than usual…"), until you reloaded a second time. The app was starting from a saved copy of the previous version, which pointed at files that no longer exist. It now always loads the current version when you're online, and if a file is still missing it clears its saved copy and reloads once by itself.
- If it happens once more right after this update, reload or close and reopen the app; it won't repeat.
2026-10 — Quiet hours work¶
- Quiet hours now hold notifications. The Settings toggle used to be saved but ignored. With it on, nothing goes to your phone or Telegram between the start and end time, FLASH included, and what was held arrives with your next digest after quiet hours end. Market Wire alerts during quiet hours are held too and sent when quiet hours end (newest 10).
- Start and end times and a time zone appear under the toggle. Your time zone is taken from your device the first time you open Settings (it was UTC for everyone before); you can change it there.
- The old note that FLASH would still push during quiet hours was wrong and is gone.
2026-10 — One settings page¶
- The ⚙ quick panel is gone. The Settings tab, the ⚙ icon (desktop) and the account menu all open the same Settings page. App language, Phone & browser notifications, alert tiers, Telegram and About are all there.
- Alert tiers & frequency. The section formerly called "Telegram push preferences" now says it applies to both phone notifications and Telegram, because it always did (since the change below). The Telegram master switch moved into the Telegram section and only affects Telegram.
- Account button. The two-letter badge in the header (e.g. "KA") is replaced by your Google profile photo, or a person icon if you signed in by email link. It is labelled "Account", is easier to tap, and no longer runs off the edge on narrow phones.
- The date-format and default-watchlist options from the old panel were removed: neither was saved, and the date format was not used anywhere.
2026-10 — Phone notifications mirror Telegram¶
- Phone and browser notifications now carry the same alerts as your Telegram digest. Same tiers (FLASH and ALERT by default, NOTE/FYI if you turn them on), same push frequency, same watchlist filter (impact ≥ 0.60 on a watched ticker) and same language. Each digest sends one notification per tier, e.g.
3 ALERT signals · NVDA, TSLA, AMD. Telegram is no longer needed for phone notifications. - FLASH follows your frequency setting. It used to push the moment it landed; it now arrives with your next digest, like Telegram.
- Market Wire on push. Market-wide events with impact ≥ 0.80 now also push to anyone with notifications on and the FLASH tier enabled.
- In-app prompt. The dashboard asks signed-in users Get alerts on this phone? with Turn on / Not now (hidden for 14 days). On Android 13+ the system permission prompt follows.
- Send test for everyone. The Settings section is now Phone & browser notifications, and every user has a Send test button (30-second cooldown). See Phone & browser notifications.
2026-10 — Watchlist news spread across tickers¶
- Pushes were dominated by a single stock. After the starvation fix below, each source's one slot per cycle went to its newest item. Whichever watchlist stock was most in the news (MU at the time) had the newest item in nearly every source, so it took every slot and news about your other stocks never got through. Slots now go to stocks not yet covered in that cycle first. A stock that is already covered only gets another slot when no other stock has new news.
2026-10 — Pipeline starvation fix¶
- Signals stopped for 6+ hours on 2026-10-02 without anything crashing. Each cycle sends at most five news items per user to the agents. Central-bank and economic-calendar items skip the watchlist filter, and after market hours the newest entries in those feeds stop changing. Already-seen items were only skipped after the five slots had been filled, so the same old items took every slot, every cycle, and newer stories never got in. Already-seen items and items older than 24 hours are now removed before slots are assigned, with the newest first within each source. The health check now tells "worker down" apart from "worker up, but no new items".
2026-10 — Agent orchestrator (shadow mode)¶
- Orchestrator in front of the five agents. Each item now gets one short LLM call before the agents start. That call decides which agents have something to analyse and gives each a short focus brief, using the US market session and your recent signals on the same tickers. Source-type rules always apply, and any failure falls back to running all five agents. It ships in shadow mode: all five agents still run on every item while the orchestrator's choices are measured against what each agent actually found. See The five agents.
2026-09 — Web Push reliability¶
- Phone/browser notifications could silently stop — browsers (iOS home-screen apps in particular) rotate push subscriptions, and the backend deletes a subscription once the push service reports it gone. Nothing ever re-registered the new one, and Settings judged "on" from the browser alone, so the button kept reading Disable while every FLASH/ALERT delivery reached zero devices. The app now re-registers the current subscription on every launch and whenever the service worker sees it rotate, and Settings reflects what the backend actually holds. Worker logs now report each user's subscription count alongside every dispatch, and operators have a test-push button.
2026-08 — Pipeline reliability¶
- Fixed a 16-day silent pipeline outage — from 2026-08-10 the crawl stopped producing signals entirely, and no Telegram push went out. Cause:
feedparser.parse(url)fetches over urllib with no timeout, so when GlobeNewswire stopped answering our egress IP the crawl blocked forever mid-run. The Celery worker runs a single process, so that one stalled feed starved every later task while the platform still reported the service healthy. Feeds are now fetched under an explicit timeout (connect 5s / read 15s) and a dead host is recorded as a per-feed error the crawl steps past, so one bad source degrades that source alone. - Task time limits — Celery now enforces a global hang backstop (soft 55 min / hard 60 min) with a tighter override on the crawl task (soft 10 min / hard 12 min, inside its 20-minute cadence), so no future hang from any cause can wedge the worker permanently.
2026-07 — Claw live market-data tools (operator)¶
-
Whole-watchlist flow scan — watchlist-wide questions now run
watchlist_flow_scan: one tool call sweeps every watchlist ticker (≤25, fetched concurrently) and aggregates each server-side into a compact stat line, so the answer covers every holding instead of only the first few. Per-ticker fetch failures are isolated; tickers beyond the cap are reported, never silently dropped. -
Live Unusual Whales / FMP tools in Claw chat (admin-only) — operator accounts can ask institutional-flow questions (e.g. "分析机构资金流向的特点") and Claw pulls live options-flow alerts, dark-pool prints, and options-volume history from Unusual Whales plus 13F institutional-ownership and insider statistics from FMP via LLM function calling. Answers show a "Live data" footer listing the exact feeds queried. Hard budgets: ≤6 tool calls and ≤3 tool rounds per message. Regular accounts keep the unchanged RAG-only pipeline, and the no-advice guardrails apply verbatim in both modes.
2026-04 — P5 (UI v2 + quality)¶
Frontend rewrite¶
- React 18 + Vite 5 + Tailwind 3 replaces the original vanilla HTML SPA. Four-tab nav (Dashboard / Watchlist / Claw / Settings), TypeScript throughout, typed API client + adapter layer bridging backend Pydantic shapes to display types.
- Signal card redesign matches the v1 format pixel-for-pixel: headline, per-ticker salience bars (tier-coloured red / gold / blue), bilingual EN/ZH columns, collapsible reasoning broken out per
[AGENT]tag, Impact + Confidence score bars, collapsible agent breakdown, async-hydrated OG preview, compliance disclaimer. - UserMenu dropdown — click the avatar in the header for email, Settings shortcut, and Sign out (no more detour through Settings).
- TelegramWizard — the link flow is now a three-step numbered guide with inline copy-to-clipboard instead of a paragraph of fine print.
- Ask StockClaw page gives the chat transcript ≥55vh and moves Historical Search below so the chat card isn't squeezed by the RAG block.
- OS-adaptive light palette — GitHub-style white cards on pale-grey page, tuned so
text-gray-100headlines render near-black (previously near-white on grey — invisible). - Extended-hours prices — watchlist rows now show a PRE / POST badge + extended price + % change directly beneath the regular price when yfinance reports
marketStatein an extended session. Alignment is CSS-grid so836.92and856.33line up digit-for-digit with the ticker symbol above. - Live status strip — "Last updated 8s ago" is now driven by the hook's real fetch timestamp and ticks every 15s; the gold "What's moving the market" ticker rotates through the top 12 real signal headlines instead of four hardcoded demo lines.
Signal quality¶
- Urgency tiers unambiguous — FLASH / ALERT / NOTE / FYI now render as four distinct badges (red / orange / gold / grey) instead of collapsing FLASH + ALERT into a single overloaded "BREAKING" label. Status strip counts split too: "2 FLASH · 18 ALERT" rather than "20 BREAKING".
- Duplicate signal fix —
RawItem.raw_idnow inherits thecontent_hash(sha256 of source URL + title) so the DB-level dedup inrun_user_pipeline_taskactually fires. Previouslyraw_idwas a fresh UUID4 on every crawl, making the existing dedup a no-op; users were seeing the same Yahoo Finance article pushed every ~20min beat cycle. Also reduces OpenRouter spend (each duplicate article was triggering a fresh 5-agent synthesis run).
Ask Claw (RAG) fixes¶
- BM25 tokeniser —
websearch_to_tsquerywas AND-matching every word in the user's question, which almost never hit. Replaced with a tokeniser that OR-joins content words ("Should I buy NVDA right now?"→"buy | nvda") after dropping English stopwords. - Retrieval diagnostics —
[rag] empty retrievallog line shows visible-signal count + per-retriever hits so RLS vs. query-logic failures are telegraphed clearly.
Deploy / ops¶
- Vercel SPA fallback —
/:path*→/rewrite so/login,/watchlist, etc. serveindex.htmlon direct hits. Without this, Google OAuth's post-sign-in redirect to/login?code=…404'd. - Market quote cache cut from 60s → 30s TTL; pre/post-market prices now surface within ~30s instead of ~1min.
2026-04 — P4 complete¶
- P4.4 Google OAuth with JWKS/ES256 verification (Supabase's current default); Sign in with Google wired end-to-end.
- Web Push: VAPID-authenticated browser notifications with deep-link back to the triggering signal; FLASH gets sticky (requireInteraction) banners.
- Telegram multi-user:
deliver_batchreads per-usertelegram_chat_idfromuser_settingsinstead of a global env var; users must link via Settings. - Per-user chat id + RLS fix:
user_scopenowSET LOCAL ROLE authenticatedso RLS policies actually fire — earlier code silently ran as the Postgres superuser withBYPASSRLS. - Agent breakdown panel: each signal carries per-agent impact / confidence / latency / error in a collapsible table under the card.
- Per-ticker relevance bars + Open Graph preview cards for every signal's source article.
- Signal card redesign to match the Telegram delivery format — bilingual side-by-side summaries, signal id, signal_type pill, expandable reasoning block.
- Email magic link via Supabase (no Google account required to sign up).
- Real Claw chat backed by hybrid dense + BM25 retrieval over your own signals, with every query logged to
rag_query_logs. - Embedding pipeline: each new signal is embedded into ChromaDB (
paraphrase-multilingual-MiniLM-L12-v2) immediately after commit. - Claw rules CRUD with an LLM-based natural-language parser (stored only; triggering is future work).
- OS-driven dark/light theme for the whole SPA.
- Real market data endpoints (
/market/quotes,/market/indices) via yfinance + 60 s Redis cache. - Watchlist auto-bootstrap so new users land on a usable empty list instead of a dead "+ Add ticker" button.
- Logout UI (avatar dropdown in the top bar).
- Legal pages (
/privacy.html,/terms.html) and this documentation site.
2026-04 — P3¶
- Write endpoints:
POST /watchlists/{id}/tickers,DELETE .../{ticker},PUT /settings,POST /integrations/telegram/link,POST /claw/chat(then still an echo stub). user_settingstable.- Adding a ticker fires an immediate crawl.
2026-04 — P2¶
- Read-only FastAPI:
GET /signals,GET /watchlists,GET /health,/ws/signalsWebSocket. - JWT auth + row-level security scaffolding.
- Frontend flipped off mock mode.
2026-04 — P1¶
- Supabase Postgres + Redis via docker-compose.
- Celery + Beat orchestration.
- Signal persistence: pipeline writes each produced SignalCard to the DB.
- SQLite → Supabase watchlist migration.
2026-04 — P0¶
- 5-agent synthesis engine with Reflexion and Pydantic validation.
- RSS / yfinance crawlers.
- Watchlist SQLite DB.
- Frontend SPA (dashboard / watchlist / claw / settings) with PWA manifest.
- Telegram bot delivery (single-user).