06 · Shipping record
What changed.
Why it matters.
The current product state comes first. Each entry explains the user-facing change and the decision problem it improves.
Action stays honest across every risk state v1.9.4
- Guidance follows the state. BUY uses staged DCA, HOLD and WAIT preserve the current plan, and TRIM reduces risk gradually.
- Missing data cannot look current. Invalid, absent, or mismatched risk inputs show no active allocation zone or marker.
- Context stays readable. Inactive bands and mobile guidance labels keep sufficient contrast without changing any score or threshold.
Action shows the permission, not the plumbing v1.9.3
- One risk permission. The Action card now translates the live score into a plain-language level and percentage.
- The current zone is obvious. Discount DCA is emphasized while Hold and Trim Risk remain visible as context.
- Guidance scans faster. Do and Avoid rows replace the long instruction without changing any score, threshold, or decision logic.
Action reads at a glance v1.9.2
- The decision is stated once. The long repeated bearish-chapter headline is now the direct instruction: Discount DCA. The bearish context remains in Why this read.
- One bar, one vocabulary. The duplicate endpoint captions are removed; the three zones now read Discount DCA, Hold, and Trim Risk.
- Labels are easier to scan. Zone names use a clearer mono size and consistent uppercase treatment on desktop and mobile.
Action risk bands stay readable v1.9.1
- The three allocation bands no longer overlap. Discount DCA, hold, and trim now use a dedicated three-column label row beneath the CW Risk bar.
- Only layout changed. The live score, marker, thresholds, Action verdict, and calculation remain untouched.
- Responsive behavior is explicit. The labels remain centered in their own tracks on desktop and mobile.
Active services now have an honest surface v1.9.0
- Independent research is visible and clearly secondary. Track Record now shows the latest model-generated research theses, their evidence, horizon, confidence, and separately graded hit rate without confusing them with the deterministic Daily Bitcoin Call.
- The developer lane is discoverable. Agents and Methodology now link the stable OpenAPI contract and explain API keys, webhook subscriptions, delivery history, failures, and redelivery.
- Health labels tell the truth. Cron Health is classified as internal operations; the intelligence thesis feed points to its real Track Record surface instead of pretending it is a Macro panel.
- Panel-count marketing is gone. Methodology describes the five-decision product rather than a drifting panel total.
One accountable Bitcoin call v1.8.0
- Today's call is deterministic and locked. Composite, Truth, and Swing Desk inputs resolve into one daily Bitcoin verdict with its confidence, reason, invalidation, and track-record link.
- People and agents start from the same five decisions. Now, Cycle, Money, Macro, and Action come from one precomputed brief instead of separate interpretations.
- Releases are understandable. Product versions now follow semantic MAJOR.MINOR.PATCH rules, while the deploy SHA stays separate; a short What's New card appears once per user-facing release.
The Agents page now follows the main reading grid FIXED
- The hero is centered. Its headline, explanation, and actions now begin on the same axis as the capability index below.
- The access summary follows the same frame. Hosted MCP, endpoint, and authentication details no longer collapse against the left edge.
- Mobile stays stable. The 390px layout keeps its existing single-column flow with no horizontal overflow.
Methodology now reads like a documentation site SIMPLIFIED
- One persistent collection tree. Desktop keeps the complete documentation index on the left while the article stays in a focused reading column.
- The duplicate outline is gone. The right-side section rail has been removed, leaving more breathing room without changing any content or deep link.
- The same navigation works on phones. Mobile opens the collection tree in an accessible drawer with button, backdrop, and Escape controls.
Five decisions, one evidence path each SIMPLIFIED
- One primary visualization stays open. Each decision now leads with the chart or instrument that carries the conclusion instead of stacking multiple full panels immediately.
- Supporting signals remain visible. Every specialist panel appears by name in one compact index and opens individually, so users can inspect a receipt without opening the entire dashboard.
- No intelligence was removed. All panels, metrics, data sources, evidence receipts, and deep links remain available; only the reading hierarchy changed.
The five Macro decisions now fit the rail proportionally POLISHED
- One decision, one equal track. Now, Cycle, Money, Macro, and Action each receive one fifth of the contained desktop rail.
- No accidental dead space. Labels are centered across the full reading width and the active underline fills the selected track.
- Mobile stays stable. Phones keep the same five equal-width, 52px sticky controls with zero overflow.
The Macro tab rail stays on the reading grid FIXED
- No more full-viewport escape. The desktop rail now shares the hero and main content frame instead of starting at the far-left browser edge.
- Tabs align with the decision. Now, Cycle, Money, Macro, and Action begin on the same inner axis as the decision card below.
- Mobile is unchanged. Phones keep five equal-width sticky controls with full labels and no horizontal overflow.
Macro is aligned to the data again FIXED
- Every price label sits under its pointer. Realized Price, spot, Short-Term Holder cost basis, and True Market Mean now use the same live-price coordinate for both the marker and its label.
- The desktop decision rail fits the reading column. Now, Cycle, Money, Macro, and Action stay together instead of stretching like a second site-wide header; mobile keeps its equal-width sticky controls.
- Receipts read like intelligence. Remaining internal lens keys, raw ratios, long decimal precision, and machine timestamps are translated into plain labels, percentages, rounded values, and readable update times.
On-chain evidence now resolves into one accountable read INTELLIGENCE
- Who is buying and selling is explicit. Long-term holders, US spot ETFs, corporate treasuries, and broad entity accumulation are compared on labeled horizons; split evidence stays split.
- Ownership cost is interpreted. Bitcoin State and Cycle explain the nearest verified cost-basis resistance or support without claiming a full URPD histogram.
- Confidence has components. Coverage, agreement, persistence, regime relevance, and future historical reliability are exposed separately; unavailable history remains unavailable.
- Daily changes have receipts. Every evidence-family state is preserved daily, and the existing “What changed” line now reports material interpretation changes first.
- Conflict order is regime-aware. Bear regimes prioritize actual spending and cost-basis repair; hot regimes prioritize old-coin spending and supply release; transition regimes prioritize demand and buyer alignment.
Macro panels use the full mobile canvas POLISHED
- Removed the duplicate 16px container inset that narrowed every Macro panel on phones.
- The safe phone-edge gutter remains 16px and card interiors keep their existing padding.
Mobile text is readable, not microscopic POLISHED
- Functional labels now have an 11px mobile floor and a 10px desktop floor.
- Mobile body copy moves to 14px with calmer line spacing; dense tables scroll inside their own frame.
- Repeated guidance and documentation labels were shortened without hiding evidence.
One spacing rhythm across every screen POLISHED
- All active mobile pages now use the same 16px outer gutter instead of drifting between 12px and 24px.
- Desktop keeps a consistent 24px page rhythm while preserving intentional wide editorial layouts.
- Section spacing and nested surfaces follow the shared spacing scale with no horizontal overflow.
Portfolio posture labels can breathe FIXED
- The context and state no longer touch. The Command Desk now keeps an 8px gap between its risk-permission label and the accumulation, holding, or distribution chip.
- Only the relationship changed. The card size, verdict, confidence, metrics, and underlying portfolio posture remain unchanged.
Mobile panel headers have a clear hierarchy FIXED
- Titles no longer fight with controls. Every analytical panel gives its title the first reading line, keeps the help target aligned, and moves context or status into a calm second row.
- The same grammar applies across the terminal. Composite, market, thesis, freshness, and supporting evidence headers now wrap predictably without hiding evidence or shrinking touch targets.
Signal bars now carry the data glow IMPROVED
- Magnitude is easier to see. Measurement tracks keep a quiet ambient edge while their filled values carry a brighter, restrained glow.
- Color still means something. Constructive, warning, and hostile bars retain distinct mint, amber, and rose treatments across active pages.
Desktop facts have breathing room too FIXED
- Labels and values no longer touch the frame. Decision fact rows now keep an 18px inner gutter on both sides at desktop widths.
- The reading structure stays intact. This spacing fix applies across Now, Cycle, Money, Macro, and Action without changing their content or layout.
Mobile facts have breathing room FIXED
- Text no longer touches the border. Decision fact rows restore a consistent inner gutter and a clear gap between labels and values, overriding the shared zero-padding mobile rule.
- All five decisions benefit. The fix applies to Now, Cycle, Money, Macro, and Action without changing any metric.
Evidence stages stay on the reading grid FIXED
- 02 aligns with 01. Core Evidence and Supporting Evidence now share the active decision card's inner gutter on desktop and mobile.
- The divider stays full width. Only the stage label moves, preserving the visual break between the decision and its evidence.
Cycle speaks human IMPROVED
- The verdict is a decision, not a debug line. Phase and bottom confirmation replace `BOTTOM_ACTIVE`, `pos`, and other internal synthesis shorthand.
- Scores keep their meaning. Bottom proximity and cycle-top risk remain visible with plain-English labels in the fact rail and visualization.
- The counter-case is readable. Other Side explains why bottom evidence can arrive early without exposing feature keys, model scores, or raw values.
Now reads like one decision IMPROVED
- The hierarchy is clear. Verdict, evidence, action, reasoning, and calibration now have distinct visual weights instead of reading like stacked reports.
- Nothing important is hidden. What Changed, Changes When, Other Side, Historical Base Rate, and confidence remain visible in a tighter two-row context grid.
- Mobile stays direct. The same evidence returns to one readable column on narrow screens.
The counter-case speaks human FIXED
- No internal feature receipts in the briefing. Other Side now explains the directional counter-case without exposing field names, model scores, or raw values.
- Auditability is preserved. Machine-readable evidence remains in the Truth Engine API, while the visible card keeps its readable invalidation conditions.
Now's Bitcoin fact is scannable again FIXED
- One fact, not a paragraph. The right rail now pairs spot price with its recent-buyer cost relationship instead of repeating the complete Bitcoin State explanation.
- The evidence remains visible. Realized price, spot, short-term-holder cost, true market mean, and thermometer still live in the adjacent visual ladder.
Today's Read fits its observatory again FIXED
- The live verdict is readable. It is compact inside the circular evidence instrument instead of expanding across the orbit and colliding with LTH, ETF, Macro, and Retail signals.
- The market tone remains. Bull and bear reads still use the same aquamarine or rose treatment; only the accidental headline-scale typography was removed.
- Desktop and narrow layouts stay contained. The landing keeps its two-column composition with no horizontal overflow.
The Desk asset list is back on the grid FIXED
- No detached section label. The asset-list marker now begins and ends on the same centered column as the cards below it.
- Plain language. “Setups — ranked by confluence” is now “Assets — strongest setup first,” while the underlying ranking logic remains unchanged.
The signature glow reaches every corner IMPROVED
- Verdict type where a page has a verdict. The Desk's best-setup headline and Bitcoin State's status now render in the same display mono as the landing and Macro decisions.
- Even the 404 glows. The not-found page now shares the quiet-tier supergraphic instead of sitting bare — every page on the site speaks the same ambient language.
- Tabs settle everywhere. Desk persona tabs now ease on the shared 200ms settle curve like Macro's screen pills.
The Macro terminal speaks in the display voice too IMPROVED
- Verdicts in mono. All five decisions — Now, Cycle, Money, Macro, Action — now render their verdicts in Fira Code 700 at display size, the same voice as the landing's hero.
- Numbers that move, blink once. The composite score and the bento card values flash aqua or rose for a split second when the live snapshot changes them, then settle.
- One easing for everything. The screen pills now transition on the product's shared 200ms settle curve instead of instant jumps.
The landing verdict speaks in the display voice NEW
- Sized to lead the page. Today's read now renders in the hero display tier — Fira Code 800 at up to 56px — the flagship moment of the landing's glow.
- The bloom follows the market. The verdict glows aquamarine on risk-on reads and rose when the market turns hostile; on neutral days it stays quiet. Tone is read from the verdict itself.
- Numbers that move, blink once. Bitcoin reference, thermometer, and sentiment flash aqua or rose for a split second when they change since your last visit — then settle again.
The site got its signature glow NEW
- One supergraphic, alive to the market. Every page now shares a single ambient layer that breathes slowly and shifts hue with the market's heat — cool and rose-tinted when hostile, full mint when risk is on.
- Amplitude by page role. The landing gets the full-strength hero glow, working pages a calm ambient level, and data pages barely a whisper — readability never pays for atmosphere.
- A disciplined motion budget. Three named motions now govern the whole product — the breath, a one-shot value tick, and one shared easing — and all of them switch off if you prefer reduced motion.
Bitcoin State is now a visual briefing IMPROVED
- Price has a position. The State page places spot between the long-term cost floor and the two recovery levels instead of asking users to decode a sentence.
- Conflicts are obvious. Long-term holder selling, ETF/money participation, and Macro conditions show why the base can improve before the full market stack confirms.
- Recovery has visible gates. Passed and open gates appear as one compact tracker, while the exact outstanding confirmations stay directly below it.
- Still one read. The thesis, action, risks, supporting indicators, and public-proof links remain in the same concise flow on desktop and mobile.
Five decisions now show the data before the prose IMPROVED
- Now shows price position. Spot sits on the same rail as Realized Price, Short-Term Holder cost basis, and True Market Mean, with the Bitcoin thermometer directly below.
- Cycle and Action show distance. Bottom proximity, cycle-top risk, and CW Risk use explicit bands so direction and thresholds are visible at a glance.
- Money and Macro show disagreement. Cohort flows and macro drivers use compact alignment matrices that name buyers, sellers, support, and headwinds without comparing incompatible units.
- Every specialist panel was audited. Existing time series, radars, matrices, ladders, and risk registers remain where they are already the correct form. All 28 evidence panels and their exact values stay available.
Every page shares one header, and Changelog is finally in it IMPROVED
- Changelog is in the menu. The shipping log was only reachable via the sitemap; it now sits in the shared Menu on every page, next to Methodology.
- One header, one source. The landing page drops its hand-copied navigation and renders the same shared header as every other page — menu changes can no longer drift between two copies. Ledger also joined the page footer links.
- An honest 404. The not-found page no longer advertises a Cmd+K search it doesn't have, and its first tile says where it actually goes: Home.
Time Machine removed until history is real FIXED
- No more historical-looking live data. Production had no stored full-dashboard dates, so selecting an old date mixed one reconstructed cycle layer with today's decisions.
- The dead control is gone. Macro no longer shows the as-of picker or a Time Machine Menu entry.
- Historical research stays honest. Methodology keeps offline backtest results, while stored public verdict permalinks and dated APIs remain available for a future implementation backed by complete snapshots.
Each conclusion now has one home IMPROVED
- Morning Brief is a change brief. It keeps the five decisions and today's deltas without repeating the complete Now thesis, counter-case, and invalidation.
- Cycle Top Radar owns one job. It reports the top-risk band and score instead of re-telling the full Cycle decision.
- Thesis Health reports health. Its compact read is built from live input coverage and known-input score, not copied Macro prose.
- Evidence remains evidence. Every contracted panel stays visible, and distinct counter-evidence remains in the decision read; only duplicated conclusions were removed.
Macro drops its dead Command Desk shell IMPROVED
- Less hidden machinery. The invisible Command Desk header — its Read/Receipts/Plan/Ledger tabs and status chips — is fully removed from the DOM, CSS, and JS instead of being maintained while hidden. The visible Command Desk panel is unchanged.
- Search speaks the current language. The ⌘K panel index now says Money and Action, matching the screen pills, instead of the retired Flows and Market names.
Ledger, Track Record, and Desk read top-to-bottom IMPROVED
- Numbered reading order. Every page now opens with a labeled stage — 01 · Verdict, then evidence, then method — so you always know where to start and what comes next.
- No repeated panels. The ledger's duplicate "Latest calls" feed and the track record's repeated 5/9 backtest claim are gone; each signal has one authoritative home per page.
- Proof stays visible. The ledger's chain integrity proof now sits above the call table instead of being buried below it, and desk cards label their track record as 04 · Proof.
Five decisions are easier to scan IMPROVED
- One reading order. Now, Cycle, Money, Macro, and Action move from the decision into clearly labeled core evidence, then supporting evidence.
- The signal leads. Repeated feeds, role, change, and invalidation guidance now lives inside each panel's Methodology disclosure instead of preceding the data.
- Command Desk is focused. It keeps its unique portfolio-posture view without repeating the brief, chart, receipts, and proof already owned elsewhere.
- Nothing analytical was removed. Every contracted panel, evidence link, decision explanation, and live-data hook remains available.
Macro now looks like CryptoWatch IMPROVED
- One visual language. Macro now uses the landing page's display typography, reading type, spacing rhythm, borders, and restrained color system from the first headline through the last evidence card.
- Mobile-first hierarchy. The five decisions scan more clearly on a phone, with larger verdicts, calmer facts, and breathing room between the action and its supporting evidence.
- No intelligence removed. All five decisions, 28 supporting panels, live-data hooks, evidence receipts, and navigation targets remain intact.
Every call now links straight to its evidence NEW
- Signal → evidence trail. Every call now links straight to its evidence — prediction cards and the morning brief deep-link to the exact track-record row (with its sha256), desk pins link to their ledger entry and chain verification.
- Dated track-record views.
/track-record?date=YYYY-MM-DD scrolls to and highlights the day's call, shows its sha256 with tap-to-copy, and says so plainly when no call exists for that date.
- Ledger anchors and one-tap verification.
/ledger#call-<id> opens the exact entry with its row hash and a VERIFY link; /ledger/verify?date=YYYY-MM-DD prefills the date and runs the chain check.
One story across every decision NEW
- Market Story packaging. Now, Money, Macro, Action, the morning brief, and
/state open on the same chapter → clock → proof → action → invalidation narrative — no more conflicting bull/bear headlines.
- History badges. Heat, MVRV, and CW Risk show plain historical context (band + time-in-band), not fake 99% probabilities.
- ETF dual-read. Tourist outflows stay sell pressure; structural dual-gate is separate. Outflows are never auto-bull.
- Discount DCA, not bull flip. Low risk-score buy bands inside a still-bearish chapter read as staged discount accumulation — not a confirmed bull market.
3-layer alignment can no longer fight the chapter FIXED
- Chapter gate. Full “ALIGNED BULL” is blocked while bottoming is repairing, regime is mild-bear, or price is still rejecting the bull band.
- Repair ≠ structural bid. Capitulation cooling reads as structural repair, not confirmed bid.
- Flow honesty. ETF outflows override corporate-only inflows so the Money read matches the capital pipeline.
Cycle knows top vs bottom without a new panel NEW
- One extremes spine. Cycle, the morning brief, and agents share a single state: bottom zone, mid-cycle, or top watch / active / max — with a plain-English action and invalidation.
- Tops work in the ETF era. Relative Top Engine v2 fires on rolling multi-year extremes (p95), not only classic pre-ETF levels that often never printed last cycle.
- Public contract.
/api/public/v1/cycle-extremes exposes the same object Macro Cycle and the personal Telegram brief use.
- Honest calibration. The spine is live and descriptive; it stays uncalibrated until the event backtest gate is green — no invented hit rates.
Every panel now teaches the user NEW
- All 31 active Macro panels have a field-guide entry. Each entry includes a real panel snapshot, what the metric measures, how to interpret it, what changes the decision, and when the evidence is invalid.
- In-product help is complete. Every panel now has an information drawer and a four-part decision contract: feeds, role, changes read when, and invalid if.
- Help links land on the exact explanation. The panel drawer opens its matching guide entry instead of sending users to the top of a long methodology document.
One complete route map NEW
- Every active surface is now connected. The new Site Map groups the daily read, research desk, proof system, developer access, documentation, and account routes.
- Navigation follows one hierarchy. Direct destinations stay concise while the Menu carries the complete product map on every page.
Bitcoin State has its own page NEW
- The complete overview now lives at
/state. It no longer repeats inside Now, Cycle, Money, Macro, or Action.
- Five decisions stay focused. The Observatory tabs answer the immediate decision; Bitcoin State connects the entire thesis in one dedicated narrative.
Cycle timing has explicit clocks NEW
- Cowen bear-market clocks are visible on Cycle. Price, time, and halving context are kept distinct instead of collapsed into one false-precision countdown.
- Alignment is gated across three layers. State, decision panels, and the morning brief use the same cycle interpretation before they claim agreement.
Personal morning brief optimized IMPROVED
- Phone-first habit loop. The Telegram brief now leads with one headline, one Do line, five compact decisions, material changes only, and a short other-side + invalidation — not a research essay.
- Dashboard noise removed. Action lines no longer include “→ open panel” navigation crumbs; they stay as pure decision text.
- Private by default. Public channel posting stays off unless you explicitly set
TELEGRAM_PUBLIC_CHANNEL — personal use first, public launch later.
One project identity: CryptoWatch IMPROVED
- The retired project name is gone from active systems. Files, code, APIs, services, deployment paths, documentation, and generated assets now use CryptoWatch or the compact
cw technical namespace.
- Operations match the product. The main runtime is
cw-macro.service under /root/cryptowatch, with one canonical public domain: cryptowatch.id.
Strategy mNAV holdings refreshed FIXED
- MSTR mNAV is no longer withheld for stale config. Treasury inputs were updated to 843,775 BTC and ~386M fully-diluted shares (public Jul-2026 company update), with a fresh verification date so the seven-day age guard can pass.
- Source note stays honest. The response still labels holdings as founder-maintained inputs and points at the public disclosure date, not a fabricated live SEC scrape.
Morning Brief habit loop + public receipt IMPROVED
- The morning brief is decision-first. Telegram and Macro now carry the same five Bitcoin decisions (Now / Cycle / Money / Macro / Action) as the dashboard habit loop.
- Public channel defaults to @cwid. Missing env no longer silently skips the product channel; set the variable to off only to disable on purpose.
- Public receipt is machine-readable. A durable receipt powers
/api/public/v1/morning-brief-receipt with WIB date, channel, message id, headline, and decision lines.
- Proof links ride with the brief. Macro and Track Record calibration stay one tap away from the Telegram message.
Decision judgment layer + calibration report card IMPROVED
- Every Bitcoin decision now shows the other side. Now, Cycle, Money, Macro, and Action include a steel-man counter-case from the Truth Engine / morning brief—not just the primary verdict.
- Historical base rates are honest. Decisions surface public Brier sample context, regime-cell history, or an explicit “still maturing” note—never a fabricated hit rate.
- Proof is one click away. Each decision footer links to the Track Record calibration report card.
- The calibration report card is visible again. Track Record section 02 renders Brier score, bias, and the reliability diagram from the public calibration API.
Command Desk dead space removed FIXED
- The workspace now finishes with useful evidence. Live source receipts sit beneath the capital-flow chart instead of making the right rail taller than the main read.
- The next Bitcoin panel rises naturally. The awkward empty block between the chart and Portfolio Posture is gone without hiding any proof or data.
Navigation second-pass polish FIXED
- Every secondary route was checked. Login, Account, Ledger details, Desk Track Record, and Changelog use the unified navigation hierarchy.
- Ledger Appeal no longer widens the page. Its form, shared header, and sticky footer stay inside both desktop and 390px mobile viewports.
One navigation system across CryptoWatch IMPROVED
- The same three destinations lead every desktop header. Today's read, Desk, and Track record no longer change names between pages.
- Dead section labels are gone. Methodology, Ledger, AI Agents, and other pages no longer place a non-clickable label beside real navigation.
- Every Menu has the complete route set. The landing page now includes Ledger, matching the product pages, login, and Account.
- Mobile remains compact. The three direct destinations collapse into the existing Menu below 980px, preserving one clean header row.
Plain-English AI agent access IMPROVED
- The access card now speaks human. It says Free access key instead of exposing the technical HTTP header name in the hero.
- Getting a key is direct. The Get free key action jumps to the exact command that creates one.
- Technical setup stays precise.
X-API-Key appears only where the MCP client configuration needs that field name.
Cleaner Macro header and working Time Machine FIXED
- The redundant Macro label is gone. CryptoWatch now leads directly into the actionable Observatory, Desk, and Track Record navigation instead of showing a static page label that looked clickable.
- Time Machine now opens from Menu. Choosing Time Machine closes the menu and leaves the historical-date picker open instead of closing it again in the same click.
- The direct as-of control remains available. Both entry points use the same historical snapshot workflow and current shareable date links.
Macro tabs and Evidence controls restored FIXED
- Each decision tab shows only its own read again. Now, Cycle, Money, Macro, and Action switch cleanly instead of leaving all five decision cards stacked on the page.
- Evidence opens where you ask for it. The selected decision stays first and its supporting evidence follows immediately below, with the button changing to Hide evidence.
- The repair is cache-safe. Macro references a new immutable stylesheet URL so returning browsers do not keep the broken layout rule.
Evidence Observatory across the product IMPROVED
- Macro now leads with one read and five decisions. The conclusion, action, and three decisive facts share one open evidence surface instead of competing card stacks.
- Desk starts from the decision gate. The strongest available setup leads, while asset evidence stays compact until it is needed.
- Track Record and Ledger read like public proof. Numbered audit steps, open score rows, and receipt-first language make the accountability layer easier to verify.
- The same navigation now reaches every active surface. Observatory, Desk, and Track Record stay visible on desktop; the complete route set remains in one compact mobile menu.
- Mobile stays one-column and decision-first. Editorial introductions, evidence rows, login, and the sticky research footer fit a 390px viewport without adding panels or changing live data contracts.
Evidence Observatory landing IMPROVED
- Today's read is now a living evidence instrument. The landing hero keeps one clear Bitcoin verdict at the center while LTH, ETF, Macro, and Retail show whether the forces around it agree or diverge.
- Every orbit signal is owned data. LTH and ETF bind to Holder Divergence, Macro binds to Macro-Beta Mode, and Retail binds to Fear & Greed—no decorative or invented state.
- What changed today is visible without another panel wall. One compact evidence tape repeats the four states with source-safe context and direct links into the relevant Macro decision.
- Mobile remains decision-first. The circular observatory simplifies back into the proven one-column read, with the evidence tape below and no horizontal overflow at 320px or 390px.
One CryptoWatch design system across every surface IMPROVED
- The landing page now defines the whole product. Macro, Desk, Track Record, Ledger, Methodology, AI Agents, Changelog, login, and Account share one restrained header, menu, visual rhythm, and sticky information rail.
- Mobile is simpler. The header stays one line, Desk filters wrap instead of disappearing off-screen, ledger forms stack cleanly, and every audited surface fits a 390px viewport without horizontal overflow.
- Account controls are no longer hidden. Account is available from every menu, while Macro and Desk also expose a direct Log out action.
- The intelligence stays intact. No new panels or data contracts were added; the redesign preserves the five decision views and makes their evidence easier to scan.
- The final mobile rough edges are gone. Footer essentials now fit without clipping, Menu is easier to see, and Track Record uses one concise introduction with edge-to-edge section alignment.
Google sign-in restored on cryptowatch.id FIXED
- Google sign-in works on the restored domain. The production OAuth client now accepts the canonical CryptoWatch callback instead of rejecting it with
redirect_uri_mismatch.
- The full return path is verified. Choosing an existing Google account creates the CryptoWatch session and returns directly to Macro.
- Legacy compatibility remains. The former CryptoWatch callback stays authorized while
cryptowatch.id is the canonical public identity.
Passkey sign-in for returning users IMPROVED
- Returning access is faster. If you have added a passkey from Account, the sign-in card now lets you use Face ID, Touch ID, Windows Hello, or a security key.
- First use stays simple. Continue with Google once to verify your account, then add a passkey for future visits. Google remains the direct fallback.
- The card is clearer on mobile. One centered card separates the returning-user and first-time paths with 48px actions and no horizontal overflow at 390px.
- Security is built in. Passkeys require device verification and short-lived one-time challenges; successful sign-in creates the same secure CryptoWatch session.
Your Bitcoin Intelligence Layer IMPROVED
- The landing page now explains CryptoWatch first. On-chain, ETF, institutional, macro, market, and sentiment evidence are synthesized into one clear Bitcoin decision.
- Today's read proves the promise. One live card shows the current verdict, Bitcoin reference, thermometer, sentiment and retail state, freshness, evidence coverage, and tracked calls.
- Five decisions replace feature overload. Now, Cycle, Money, Macro, and Action route directly to the questions Bitcoin investors actually ask.
- The trust loop is visible. Evidence → Synthesis → Decision → Accountability closes with the public Track Record and Ledger instead of marketing claims.
- Mobile stays light. The page is a single-column scan with no horizontal overflow and the existing one-line sticky research footer.
CryptoWatch is home again IMPROVED
- The public brand is CryptoWatch. Navigation, page titles, social previews, PWA identity, account screens, and the daily brief use the restored name and original mark.
- The canonical domain is cryptowatch.id. Public links, agent discovery, methodology, and search metadata now point to the restored home.
- Compatibility stays intact. Existing CryptoWatch routes, service identifiers, API keys, and the
cw.* MCP tool namespace remain stable behind the public rebrand.
- Mobile sign-in stays clean. The longer restored name wraps naturally without pushing the Google access card beyond the phone viewport.
Mobile answers are shorter, not shallower IMPROVED
- The answer now fits first. Each decision keeps its verdict, three decisive facts, and action visible in the first phone viewport.
- Full reasoning is one tap away. Explanation, daily change, invalidation, methodology, and the unchanged evidence modules sit behind clear disclosures instead of extending the default page.
- Scanning is faster. Stacked fact cards are compact rows, the action is the single highlighted callout, and the five mobile routes share the available width evenly.
- The footer stays with you. Methodology, research disclaimer, and copyright now share one safe-area-aware mobile row pinned to the bottom while evidence scrolls.
Five questions replace the dashboard maze IMPROVED
- One answer first. Macro now opens through Now, Cycle, Money, Macro, and Action. Each route leads with a verdict, plain-English explanation, three decisive facts, response, invalidation, and confidence.
- Evidence stays available without taking over. The existing 28-panel audit contract remains intact behind supporting-evidence controls, while Track Record stays in the separate Proof / Accountability utility.
- Money language is honest. LTH, ETF, treasury, institution, and retail alignment are stated together; deployable liquidity is labeled as a proxy rather than guaranteed Bitcoin buying power.
- Old links still work. Previous Synthesis, Flows, Market, and Plan URLs resolve to the nearest current decision.
DCA Entry Zones are visible when you need them FIX
- Action no longer hides the ladder by default. The live DCA panel now opens with all five entry zones visible on mobile and desktop. The panel still has its manual hide/show control when you want a shorter view.
- Live ladder confirmed. The panel shows Zones A–E with current BTC and Realized Price inputs, allocation percentages, and the active zone.
Sharper terminal: six redundant panels consolidated IMPROVED
- Macro now has 28 contracted panels. Halving Cycle, Veteran/Rookie, Cowen Bottom, Macro-Beta, Retail Capitulation, and DCA Backtest no longer occupy standalone shells; their evidence remains represented by Cycle Position, Entity Regime, CW Risk/Cowen Cycle, Market Compass, Truth Engine, and DCA Plan.
- The unused optional agent-code browser login is removed. Google OAuth remains the sole browser sign-in path.
What is new on CryptoWatch
July 20, 2026 (Agent contract)
Agents now start from the same five decisions NEW
- One canonical first call.
cw.morning_brief returns Now, Cycle, Money, Macro, and Action from the same precomputed brief used by the dashboard and published daily brief.
- Decision context travels with the verdict. The contract includes evidence coverage, material changes, operator action, invalidation, and generation time.
- Existing integrations stay compatible. Specialist MCP tools and the older six-screen
cw.daily_read remain available; discovery manifests and the packaged skill now reflect the live tool set.
July 16, 2026 (Service simplification)
Less scheduler machinery, same live evidence IMPROVED
- Three fast feeds now share one owned refresh. Spot premium, options, and liquidation evidence retain their existing data contracts on one five-minute schedule.
- Partial failures remain visible. Every collector still runs when another fails, and health becomes failed if any source did not refresh.
- Operational inventory is cleaner. Live-service counts exclude retired integrations while preserving their removal history for audits.
July 16, 2026 (Panel flow)
Decision screens now separate read, action, and proof IMPROVED
- Macro synthesis is the read. BTC Trade Setup now lives under Action, while the six primary decision screens keep their existing top-level structure.
- Accountability is a utility. Track Record remains load-bearing and is reachable from the Proof / Accountability utility without extending the Action scroll.
- Desk starts with the answer. The page now shows the best available setup or a shared
NO ACTIONABLE SETUPS gate before expandable asset evidence; repeated blocked profile rows are collapsed.
- Unavailable means unavailable. Stale MSTR mNAV inputs no longer become a fake
0.00× discount or $0.00 price in the empty state.
July 16, 2026 (Macro integrity)
One score, one price, and stricter evidence labels FIX
- Cycle and portfolio scores no longer impersonate each other. The 0–100 history is labeled as a cycle accumulation score; the signed Composite Signal remains the sole portfolio-posture gauge.
- BTC spot has one live owner in the first viewport. Command Desk now reads the same live feed as the header and BTC Trade Setup before falling back to daily cycle context.
- Analyst prose is fail-closed. Notes that invent allocation percentages or unsupported high-conviction claims are replaced by deterministic evidence-grounded copy.
- Delayed data cannot look green. Stablecoin gateway health now uses explicit 36-hour and 72-hour freshness bands.
- Performance denominators are aligned. Home now uses the same directional-only accuracy as Track Record; Ledger separates append-only rows from its trusted resolved hit-rate sample.
- Confidence terms state what they measure. Portfolio posture, audit trust, and evidence quality no longer share an ambiguous generic label.
- Promotional screenshots cannot masquerade as live data. Agents-page product images now state that their captured values are illustrative.
July 15, 2026 (Desk setup table cleanup)
Desk setup tables now show only decision data FIX
- Removed the repeated PIN controls. Scalp, intraday, swing, and quant tables no longer carry a redundant per-row action or empty action column.
- Kept historical accountability. Existing Desk track-record and Ledger history remain available as evidence; the Desk page is now focused on setup data and current risk context.
July 15, 2026 (Macro signal de-duplication)
One visible owner for the 90-day base rate FIX
- Removed repeated summary metrics. Portfolio posture and BTC Trade Setup no longer restate the same 90D forward-return value.
- Removed the duplicate Daily Brief delta. The Historical Outcomes by Bottom-Proximity Bin panel remains the single explanatory owner; the underlying snapshot field and calculations are unchanged.
July 15, 2026 (Optional agent browser access)
Approved agents can use a bounded browser session path ACCESS
- Optional code login. When the operator sets
CW_AGENT_ACCESS_CODE to an approved four-digit value, /login/agent creates the same HttpOnly CryptoWatch session used by Google OAuth.
- Google remains the default. The route is unlinked from the normal sign-in page, disabled when unconfigured, and rate-limited to five attempts per IP per minute.
July 15, 2026 (Grade-C retirement and data-integrity repair)
Weak surfaces were repaired or removed instead of kept half-alive FIX
- Corporate Treasury totals are trustworthy again. The Svelte decoder now stops at terminal numeric values, filters supported treasury categories, deduplicates on stable identities, and rejects implausible refreshes without overwriting the last good cache.
- MSTR mNAV now has a hard seven-day input TTL. Stale holdings or share counts withhold mNAV, scenarios, funding health, and the MSTR contribution to supply-centralization math.
- Macro and funding partial reads are honest. A live DXY-only input produces a partial macro verdict, and spot-long/perp-short carry now uses the correct sign: positive funding is paid by perp longs to shorts.
- Forecast Accountability is live. The Action panel reads the server ledger, shows T+7 BULL/BEAR accuracy with neutral/dead-zone exclusions, reports independent T+30 grades, and lists recent dated calls.
- Daily predictions no longer depend on the retired debate stack. A deterministic core producer now runs before tracking and resolution, records direction-only provenance, and keeps pending calls out of accuracy totals.
- Prediction accountability now fails closed. Malformed direction/confidence, stale critical inputs, and invalid same-day artifacts stop the writer; legacy T+0/T+7/T+30 grades normalize deterministically and grade-defining evidence is hash-covered.
- Daily Intelligence now publishes atomically. All eight required macro signals must be finite and fresh, failed runs remain retryable the same day, and evidence, survivor, kill, status, and cost rows commit or roll back together.
- Morning Brief delivery is retry-safe. Private and public destinations have independent durable receipts, so a failed public send makes the job red without duplicating an already-delivered private brief on retry.
- Background collectors no longer report false success. Daily market-data collection and Desk funding history exit non-zero when every configured write fails or no valid rows are produced; partial success remains explicit.
- The Market capstone uses its public evidence. It now composes the already-rendered Execution and Contrarian verdicts, with explicit partial/unavailable states instead of a “private signal withheld” placeholder.
- DAT Cohort and the standalone Network Health panel are retired. Their weak duplicate surfaces are gone; shared network inputs remain available to the load-bearing composite. Orphan renderers for previously retired context panels were also removed.
- The service inventory now tells the truth. It covers the real Singapore dependencies and producer schedules. Global kill buttons are hidden until every outbound caller is wired, instead of claiming partial controls are complete.
- The retired Hunter runtime is fully removed. Its services, timers, cron rows, public evidence routes, MCP tool, Token Safety routes, and stale proxy modules are no longer deployed.
- Dead report and debate paths are gone. Full Report, the legacy 3-AI debate/rotation panels, analyst/report/research producers, and their stale artifacts and docs were removed; Forecast Accountability remains on the deterministic ledger path.
- Stale upstreams were cut, not disguised. Sky Vault Stress, Scenario Tree, Narrative Pulse, the unwired Forecast Distributions placeholder, the uncalibrated social-risk layer, the dead CoinShares fetch, and broken Google Trends/Twitter/Livecounts inputs are retired.
- Singapore has one prediction writer. The retired Tokyo sync cron can no longer overwrite
predictions.jsonl, and the duplicate whale daemon is removed because the daily pipeline already owns that collection.
- Invisible panels no longer count as product. Twelve hidden, uncontracted Macro shells and their stale renderers, metadata, styles, and tests are removed; the public contract remains 34 decision panels.
- The orphan prediction-market tape is retired. The standalone cross-venue API, Kalshi fusion/history database, and five-minute collector had no product or agent consumer. The lightweight request-cached Polymarket odds input remains only where it informs Macro permission.
- Freshness follows the source row. Daily Intelligence now timestamps each cycle signal from the parquet or candle actually used, including Weekly RSI, rather than treating recomputation time as fresh data.
- Intelligence now runs after its data refresh. Daily synthesis moved to 08:30 WIB, after the 08:05 market-data pipeline, so the strict 30-hour source-row gate passes only on a real current collection.
- Desk CVD freshness matches its real feed. CVD is computed from exchange candles, so its source label and five-minute freshness contract now match ATR/VWAP instead of claiming a 30-second trade WebSocket.
- Correlation Radar survives partial macro data. A null monthly M2 record now renders as unavailable context instead of taking the internal dependency endpoint down.
- The orphan SOL MEV service is retired. Its backend route, exact-feed modules, Solana RPC/tip dependencies, tests, and production credential are gone; the separate Base ledger RPC remains active.
- Producerless browser Push is retired. There was no active opt-in UI, service-worker registration, subscriber state, or non-Hunter producer, so the VAPID module, hidden routes, service worker, and empty recent-alert feed were removed. Independent webhooks remain available.
- The unreachable per-indicator alert prototype is gone. Its button factory had no callers, so the dormant modal, evaluator, local state, and styles were removed. The working Composite verdict-flip notification and Smart Alerts panel remain.
- Hunter is deleted, not merely hidden. The retired source package, 2,712 lines of unreachable route handlers, runtime-pruning shim, and zero-caller MSAC/GLMT/CACC engines are gone. Negative tests prevent the routes or source archive from returning.
- Desk no longer invents a green Shield signal. Manipulation Shield is retired, so BTC/ETH/SOL/HYPE now show Shield N/A and receive no Shield confluence point. Historical ledger rows remain verifiable, but no new Shield calls are written.
- Retirement residue is removed from origin. Nested Hunter caches/snapshots, the orphan QuickNode whale daemon, empty Hunter database, misleading old redesign report, and superseded alert bundles are gone. Two deleted immutable URLs may remain at CDN edges until a manual cache purge; current pages reference neither.
- Desk's Quant lens is reachable on phones. The lens row now scrolls horizontally at narrow widths instead of clipping its final option.
- Stale scheduler labels are gone. Active root-cron and market-data service descriptions no longer name retired Hunter, debate, report, or panel jobs.
- One routine Telegram publication. Morning Brief remains the daily user message; Intelligence sends only operational failure alerts.
- Deploy identity is deterministic. Release verification compares the served 12-character build identifier with the normalized commit SHA instead of rejecting a healthy deploy on format alone.
July 13, 2026 (Decision-evidence promotion)
Supporting panels and services now have load-bearing contracts NEW
- Sixteen evidence panels now say exactly what they do. Each names the primary verdict it feeds, its role, the measurable threshold that can change the read, and the condition that invalidates the evidence.
- Cowen Cycle Suite and Corporate Treasuries now lead with computed synthesis. The raw cards remain as receipts; the first line states whether cycle confirmation or structural treasury demand is actually present.
- Five evidence services now have stable public contracts. Intraday delta, social emergence, mindshare, aggregate OSINT health, and daily debate are indexed at
/api/public, watched by Truth Canary, and expose their named consumers and degraded states through /api/cron-health.
- Command Desk routes directly to the evidence that can flip the read. Cycle, holder-flow, macro-permission, and action evidence are one click from the proof rail.
- The Agents page is current again. The retired Agentic Activity card is gone; the new evidence-service lane replaces it.
July 13, 2026 (Product focus cut)
Macro drops eight low-priority context panels FIX
- The terminal is now 37 panels. Global Capital, Real Economy, American Dream, K-Shape, Presidential Returns, DXY overlay, Regulation Infrastructure, and DeFi Security are removed from the active product.
- Agentic Activity is retired. Its page block, API contract, snapshot data, MCP tool, and discovery metadata are gone.
- Retired aliases are truly gone.
/intelligence and /hit-rate now return 404 instead of preserving compatibility redirects.
July 13, 2026 (Runtime correctness repair)
Ledger performance and panel health now fail honestly FIX
- Ledger alpha no longer mixes asset prices. Unsupported cross-asset resolutions are excluded until token-specific historical pricing is available.
- K-Shape no longer hangs while refreshing. It returns the latest saved snapshot with a clear stale/partial marker.
- Panel Health is quieter and more accurate. Obsolete scheduled jobs are retired, fresh empty polls degrade instead of failing, and freshness contracts are explicit.
July 13, 2026 (Single-step Google login)
Google login now starts in one click FIX
- The duplicate page is gone. “Continue with Google” on a protected terminal now opens Google OAuth directly instead of showing a second CryptoWatch sign-in page first.
July 13, 2026 (Free Google access)
CryptoWatch is free after Google sign-in ACCESS
- No subscription or payment gate. Every non-blocked user receives full terminal access after signing in with Google.
- One login method. Email magic-link login is retired; Google is the only public account login.
- Agent tools are free too. Hosted MCP keeps API-key authentication and rate limits but no longer uses paid tool flags, x402 challenges, credits, or top-ups.
July 7, 2026 (Desk nav simplification)
Desk no longer has a redundant Setups nav row FIX
- One layer removed. The Desk page now goes straight from the global topbar to the persona filters; the obsolete one-option
Setups view switch was removed.
July 7, 2026 (BTC setup table alignment)
BTC setup ladder columns now line up cleanly FIX
- Header/cell alignment fixed. The BTC Trade Setup ladder now uses explicit column geometry, right-aligned numeric headers, and stable status/setup lanes so rows scan as a real table instead of loose text columns.
July 6, 2026 (BTC Trade Setup)
BTC Trade Setup now reads like a decision panel POLISH
- Verdict first. The gated Macro BTC setup now leads with the current regime, allocation context, base-rate, forced-seller status, bias, and spot instead of a raw paragraph dump.
- Proof stays visible. MVRV Z, AHR999, Puell, CW Risk, 30d base rate, and transmission status now sit in compact proof chips beside the verdict.
- The ladder is scannable. Trigger, size, stop, target, R:R, and status are formatted as aligned mono-numeric columns with dollar separators and status chips.
June 29, 2026 (Home metric preview)
Home now previews the important live Macro metrics POLISH
- The unclear hero word is gone. Home now says the actual cycle state, such as
MID CYCLE, instead of translating the read into vague action language.
- Hero and footer chrome are quieter. The top read metadata now uses compact status chips, and the bottom footer is a tight utility strip instead of loose paragraph text.
- The footer is now a true bottom bar. It sticks to the bottom as one row, removing the large empty block that appeared under the footer links on short views.
- Important metrics are visible before the terminal. The public Home page now previews cycle, heat, liquidity, ETF/stablecoin flows, owned-cohort confluence, funding/options, CW Risk, macro beta, thesis health, alerts, and the morning brief.
- No duplicate metric cards. The hero now owns the cycle verdict, score, base-rate, and heat metrics; the preview deck only shows prediction and distinct driver groups.
- Responsive QA covered. Desktop, wide desktop, iPad portrait, foldable-width, and 390px phone captures were checked for no horizontal overflow, no console errors, and no text overlap.
June 29, 2026 (Screen read overlap)
Long Macro read chips no longer overlap driver text FIX
- Flows/Macro read rows - long verdict chips now clamp inside their own lane instead of running through the signal rail and driver copy.
- Full read preserved - truncated chips keep the full verdict in the hover title.
- Responsive check - Flows and Macro were verified at 1070px and 1365px, plus a 390px phone check, with no horizontal overflow.
June 29, 2026 (Screen read visibility)
Inactive Macro screen reads no longer leak into the Synthesis footer FIX
- Bottom clutter removed - Cycle, Flows, Macro, Market, and Action read ribbons now stay hidden unless their tab is active.
- Refresh-safe - the guard lives on the screen layout state, so live Daily Read refreshes can repaint all six bars without showing the wrong ones.
- Responsive check - Synthesis desktop and phone, plus Cycle and Flows tab switches, were verified for one visible read and no horizontal overflow.
June 29, 2026 (Synthesis ribbon)
Macro screen read visualized as a compact regime ribbon POLISH
- Daily Read ribbon — the screen-level synthesis line now renders verdict chips, a four-segment signal rail, and labeled drivers/plan rows instead of a flat paragraph strip.
- Responsive fit — desktop, iPad, and phone layouts were checked for no horizontal overflow; tablet hides the redundant live badge to keep the ribbon clean.
- Browser cleanup — removed a redundant inline script close that produced an `Unexpected token '}'` browser error.
June 29, 2026 (Header cleanup)
Cleaner Macro header and screen navigation POLISH
- Topbar — simplified the brand, surface links, search, BTC status, and live marker into a compact command bar.
- Screen tabs — replaced the heavy boxed Synthesis/Cycle/Flows/Macro/Market/Action controls with quiet text tabs and an active underline.
- Responsive fit — desktop, iPad portrait, and 390px phone checks show no horizontal overflow; mobile keeps the screen tabs at the top instead of a bottom nav.
June 29, 2026 (Bankless panels + layout cleanup)
Live Bankless panels and no-overlap screen layout FIX
- Bankless panels — Regulation Infrastructure and DeFi Security now stay active with live public routes instead of empty shell panels.
- Command Desk chrome — removed the duplicate in-panel header that looked like a second overlapping nav bar on Synthesis.
- All-screen fit — Synthesis, Flows, Macro, Market, and Action screens now use full-width page stacking to avoid large blank right-side gaps on desktop, tablet, foldable, and phone layouts.
June 29, 2026 (Command Desk + responsive Macro)
Command Desk read and no-dead-zone Macro layout NEW
- Command Desk — Synthesis now opens with a compact verdict, confidence, proof rail, ledger receipt, capital-flow receipts, and live source receipts.
- Macro responsive polish — the Macro tab no longer uses the two-column page grid that left large blank zones on desktop, iPad, and foldable layouts.
- Mobile fit — 390px phone layout verified with no horizontal page overflow and single-column macro cards.
June 29, 2026 (Glassnode YouTube build queue)
LTH→exchange panel, ETF vol thermometer, SIP alerts, WTI in macro-beta NEW
- Flows · LTH→Exchange Transfer Volume — Glassnode 7d MA for total / loss / profit LTH transfers to exchanges; public route
/api/public/v1/lth-exchange-transfer.
- ETF vol thermometer — aggregate US spot ETF daily USD volume (9-ticker Twelve Data sum) enriches Institutional hero + Market Compass Capital Flows lens;
/api/public/v1/spot-etf-volume.
- SIP threshold smart alerts —
SIP_THRESHOLD_CROSS fires on 50% / 90% lines; tactical Supply in Profit card headlines sub-50% and above-90% events.
- Macro-beta WTI card — WTI spot + 7d Δ on the Macro-Beta panel when oil correlation is elevated.
- Panel contract — 44 active panels (+1 Flows).
June 29, 2026 (Glassnode lens suite)
Market Compass + band-stack regime on the READ screen NEW
- Market Compass panel — seven-lens Risk-Off/On map (four forward + three standalone context) with binding-constraint callout, directly under the composite gauge on Synthesis.
- Band-stack regime —
regime_state and market_compass now feed the morning brief, daily read bars, and desk BTC overhead-supply context.
- Public API —
/api/public/v1/market-compass and /api/public/v1/regime_state are live; truth-canary watches both.
- Backend lenses — ETF flow quality, exchange CVD split, orderbook fragility (honest unavailable until collector lands), IBIT gamma proxy, stablecoin 30d Δ.
June 29, 2026 (Security)
CSP hardened — script unsafe-inline removed FIX
- Security Headers A+ path. HTML responses now use per-request script nonces instead of
unsafe-inline in Content-Security-Policy. Inline scripts keep working; the scanner warning is cleared.
June 29, 2026 (Routing)
Legacy /cw URL retired — Macro terminal is /macro only FIX
- No duplicate terminal route.
/cw now permanently redirects to /macro. Bookmarks still work; the product no longer serves the same dashboard at two paths.
June 29, 2026 (Macro IA)
Six-tab panel flow tightened — verdict → cycle → flows → macro → market → action POLISH
- Cycle tab — CW Risk Score, Cowen Cycle Suite, and Three-Layer Alignment now live with cycle evidence (price chart, halving, top radar) instead of splitting across Flows/Macro.
- Flows tab — capital movers only: liquidity, entity regime, treasuries, DAT cohort, supply dynamics, veteran/rookie, Cowen bottom watchlist. No macro-duplicate cohort panels.
- Market tab — Retail Capitulation Confluence moved here alongside execution and contrarian extremes (positioning now, not planning).
- Action tab — DCA, network health, cointime, track record only. Jump-to registry and panel contract synced to 40 active panels.
June 28, 2026 (Agents + Reliability)
CryptoWatch Skill packaged + deploy smoke hardened NEW
- CryptoWatch Skill — published packaging artifacts (
skills/cw/SKILL.md, /static/cw/cw_skill.json, smithery.yaml, mcp-server.json) so agents can discover how to call the hosted MCP tools. The Agents page contract now reports skill.status=packaged.
- Macro color tokens — all remaining raw hex color assignments in the dashboard now resolve through the design-system token set, keeping the UI consistent as the palette evolves.
- Deploy smoke — the post-deploy health check now retries the local endpoint until the service is actually serving, removing the occasional transient
000 read.
June 28, 2026 (Macro)
SMH semis leg, Three-Layer Alignment, Treasury curve card NEW
- Capital Rotation — dedicated SMH (semiconductors) leg alongside NDX; rotation read can flag
SEMIS ROTATION when AI/semis beta outpaces BTC.
- Three-Layer Alignment — new Macro panel synthesizes structural / flow / positioning legs (WoC-style verdict from snapshot feeds).
- L1 Macro — synthesized
treasury_curve card (2Y/10Y/30Y, Fed-follows-2Y label, bond-vigilante flag) now visible alongside the existing 10Y-2Y spread.
June 28, 2026 (Maintenance)
Smart Alerts: remaining base rates wired FIX
- Consensus Broken, Truth Flip, and Entity Shift cards now use the same honest base-rate engine as Cycle Phase and Regime Flip — real BTC history when reliable, preview badge when not.
June 28, 2026 (Ops)
Panel health canary back to green FIX
- DCA Action Plan no longer false-DEAD. The truth-canary probe for
/api/public/v1/cw/dca-action-plan now allows a 15s cold-start window (was 6s), matching the CW social-risk latency budget.
- Canary manifest synced. Production panel health now monitors all 31 active endpoints (including macro-beta mode and DAT cohort from today's intelligence ship).
June 28, 2026 (Intelligence)
KB build-all: macro-beta, DAT cohort, capitulation confluence NEW
- Macro-Beta Mode — new Macro panel classifies when BTC trades as macro/rates beta vs cycle-idiosyncratic (30d rolling correlations vs SPX/NDX/DXY/oil).
- DAT Cohort Health — new Flows panel screens Strategy mNAV compression against top public treasury holders (share-demand vs BTC-price decomposition).
- Retail Capitulation Confluence — new Action panel flags when social apathy + drawdown stress + ETF outflow streak align (with historical base-rate context when reliable).
- Global-Capital half-life lens — debasement half-life ranking vs documented M2 hurdle now surfaces inside Global-Capital Valuation.
- Smart Alerts upgrade — Cycle Phase and Regime Flip cards now resolve real base rates from committed BTC history when the reliability gate clears (no fabricated preview percentages).
- Agent/MCP — four new tools:
cw.macro_beta_mode, cw.retail_capitulation, cw.dat_cohort, cw.three_layer_alignment.
June 27, 2026 (Maintenance)
Backlog sweep 1–5: security, deploy, MCP, agent panel, multi-asset slice OPS
- SSRF guard simplified. Webhook URL validation now uses Python's
ipaddress.is_global instead of a hand-maintained CIDR list, with the same security posture.
- Deploy script tidied. Removed obsolete one-time migration blocks for
cw-terminal / cw-macro and dead CoinGlass / monitoring comments from infra/deploy.sh.
- Hosted MCP contract synced.
/api/public/v1/agent-access now advertises all 12 hosted tools, including cw.daily_read and cw.agentic_activity.
- Agentic Activity Observatory panel. New Macro dashboard panel (order 259) shows first-party agent-economy telemetry: calls/7d, active agents, top tool, trend, and x402 payments when available.
- MCP multi-asset slice.
cw.regime_state and cw.cw_risk_suite now accept BTC, ETH, SOL, or HYPE.
June 27, 2026 (Maintenance)
Backlog sweep + operational fixes OPS
- Hosted MCP verified live. The
/mcp/ endpoint is mounted and API-key gated on both production boxes.
- A+ Intelligence timer fixed on the read-only relay. Added the missing OpenRouter key and disabled the daily publisher timer on the secondary box, so only the primary writer generates and sends theses.
- Retired wallet-tracker cluster deleted. Removed disabled Hunter scheduler modules and their tests (~3,300 lines) while keeping the live wallet DB / OSINT surfaces intact.
- Liquidation engine retired. Deleted the unused liquidation-engine cluster and cluster predictor from both backend trees, removed its systemd unit, and updated the API service manifest.
- API kill-switch fully wired. OpenRouter, Perplexity, xAI/Grok, and Alternative.me F&G now honor the per-box kill switch before making outbound calls.
- Daily Read synthesis consolidated. Score panels (top proximity, thesis health, network health, halving cycle) now pull their read text from the single Daily Read capstone instead of maintaining a second synthesis layer.
June 26, 2026 (Maintenance)
Backend and frontend cleanup pass OPS
- Dead code removed. Retired one-time scripts, unused on-chain workers, abandoned frontend helpers, and a redundant webhook in-memory cache were deleted.
- Simpler internals. Desk setup resolution, intelligence synthesis cost tracking, and prediction-tracker path probing were tightened with fewer moving parts.
- No user-facing changes. All panels, routes, and daily briefs behave exactly as before; the diff is behind-the-scenes hygiene.
June 26, 2026 (Performance)
Faster first paint and fewer layout shifts across pages POLISH
- Critical fonts load earlier. Every public page now preloads its above-the-fold typefaces so text renders in the intended face before first paint.
- Non-essential fonts stop swapping. Decorative faces (Doto, Space Mono, thin/heavy weights) use
font-display: optional, eliminating late layout shifts on first visits.
- Reserved space for dynamic cards. The home top-line cards, Docs hero, and Changelog entries now reserve a minimum height while data populates, cutting cumulative layout shift.
- Brotli compression from origin. Static JS/CSS assets are served from precompressed
.br sidecars when the browser accepts them, shrinking transfer sizes beyond gzip.
June 26, 2026 (Security)
Security-headers grade tightened OPS
- No more duplicate headers. X-Frame-Options and X-Content-Type-Options were being set by both nginx and the app; nginx is now the single source.
- Permissions-Policy added. The origin now sends a restrictive Permissions-Policy that disables browser features cryptowatch.id does not use (camera, microphone, geolocation, payment, etc.).
- HTTP→HTTPS redirect now works for scanners. The Singapore origin firewall was blocking Cloudflare on port 80, causing securityheaders.com to time out; Cloudflare IP ranges are now allowed on HTTP.
June 26, 2026 (LLM switch)
AI synthesis now runs on OpenRouter Gemma 4 OPS
- A different model under the hood. Daily intelligence, the AI Debate, analyst reports, and Desk narratives now use OpenRouter with
google/gemma-4-26b-a4b-it instead of the previous Claude path.
- One kill-switch for the whole layer. The API service tracker exposes OpenRouter as the single LLM entry that can be toggled off from the admin panel.
June 23, 2026 (Agentic Activity)
A first look at CryptoWatch's own agent economy — for agents, about agents FEATURE
- What agents actually use. A new read surfaces CryptoWatch's first-party agent activity from its own
/mcp usage: how many calls and distinct agents over the last day / 7 / 30 days, which CryptoWatch artifacts are most in demand, x402 payment activity, and the week-over-week trend.
- Honest by construction. Aggregate-only — never an individual key, wallet, or balance. No invented dollar figures (only payment counts). When payment data isn't available it says so rather than showing a misleading zero, and it reports per serving node.
- For agents, about agents. Live on the public API at
/api/public/v1/agentic/activity and through the cw.agentic_activity MCP tool — an CryptoWatch artifact measuring the agent economy, consumed by agents.
June 23, 2026 (STRC ladder + Daily Read)
A plain-English Daily Read on every screen, plus a Strategy preferred-share ladder FEATURE
- One line per screen. Each dashboard screen now carries a compact Daily Read — a verdict, the two or three drivers behind it, and a conditional next consideration — so you can read one line instead of every panel. Honest by construction: when the underlying signals are thin the read says so and drops its coverage rather than guessing, and it is interpretation, never a buy/sell call.
- The morning brief agrees with the dashboard. The Telegram brief now reuses the same headline read, so what you get on your phone matches what the screen says.
- Strategy (MSTR) preferred-share ladder. The mNAV panel now shows STRC, STRK, STRF and STRD trading at a live premium or discount to their $100 par, each labelled by what it actually is (only STRC is a managed peg). Spot-only and fully sourced — no estimated coupons or fabricated fair values.
- Also for agents. The Daily Read is exposed to AI agents through the
cw.daily_read MCP artifact.
June 23, 2026 (Cowen Cycle Suite)
A new Cowen Cycle Suite — seven cycle-context reads in one panel FEATURE
- One panel, seven reads. A new Macro panel surfaces the Benjamin Cowen cycle toolkit from CryptoWatch's own in-house data: the 20W/21W bull–bear band regime, the genesis log-regression fair value + rainbow zone, realized-cap / MVRV valuation, the market-cap-to-thermocap multiple, whether a drawdown is more a price or a time correction, year-to-date ROI vs prior cycles, and the historically cheapest weekday to DCA.
- Cycle context, not signals. Every read is descriptive and advisory — no forecasts, no trade calls. Each card degrades to an honest "unavailable" state when its series is missing; no number is ever fabricated.
- Sharper CW Risk. The CW Risk score now folds in the Fear & Greed index, and the bull-bear band speaks Cowen's exact "support band / resistance band" language with a below-realized-price watch and a band-rejection count.
- Also for agents. All seven reads are live on the public API (
/api/public/v1/cw/*) and through the cw.cw_risk_suite MCP tool.
June 22, 2026 (Action layout)
Action panels now align without the dead right column POLISH
- The blank top-right cell is gone. DCA Backtest now spans the full Action screen width instead of occupying only the left column.
- Support panels pair evenly. Network Health and Cointime sit as the two-column evidence row and stretch to the same row height on desktop.
- Mobile stays linear. Phone and iPad widths keep the same stacked Action flow without horizontal overflow.
June 22, 2026 (Cycle gauges)
Cycle gauge regions now light up under the pointer POLISH
- The pointer has a visible region now. Cycle Top Radar and Halving Cycle Position highlight the exact SAFE / EARLY / ELEVATED / RISK band the marker is sitting in.
- The glow keeps the semantic color. Safe glows aquamarine, elevated glows amber, and risk keeps the red tone instead of using a generic highlight.
- Phone and iPad layouts stay clean. The segmented gauges keep the same active-band read without horizontal overflow.
June 21, 2026 (Track Record layout)
Track Record cards now read as one decision board POLISH
- The top cards are grouped properly. Directional hit rate, live-call counts, sample context, and score rules now sit in one decision board instead of separate stacked sections.
- The dead stat slot is gone. Risk-quality metrics now fill the grid cleanly with no empty card space on desktop, iPad, or phone widths.
- The lower flow is simpler. Evidence ledger, Field audit, and Methodology now follow as the audit trail under the decision board.
June 20, 2026 (Live modules)
CW Risk companion modules are now live NEW
- CW Risk is no longer just a backend score. The Macro card can now render DCA stance, valuation quantile bands, social-risk coverage, and separation evidence when those blocks have usable data.
- Public API coverage added. New stable routes expose the CW Risk companion blocks under
/api/public/v1/cw/*, with truth-canary coverage.
- Agent lane updated.
cw.cw_risk_suite is now advertised through hosted MCP discovery and the agents page.
- Empty prediction-market shells collapse. A slow or unavailable prediction-market feed now returns an honest empty-state payload and the Macro panel hides instead of showing a no-data card.
June 20, 2026 (Macro layout)
Macro panels now flow in decision order POLISH
- The tabs are reorganized. Synthesis, Flows, Action, and Cycle now put the highest-signal panels first instead of following old DOM order.
- Desktop fills the empty space. Major read panels span full width, while supporting cards pair into a two-column evidence grid.
- CW Risk is now visual. The score renders as a compact gauge with pillar rows and an honesty footer, using the existing snapshot payload only.
- Mobile remains linear. The same panel order collapses to one column with no horizontal overflow.
June 20, 2026 (Flows)
Empty HK ETF panel removed from Macro FIX
- No more no-data billboard. The standalone Hong Kong ETF panel was removed because the active snapshot has no
hk_etf_flows payload and no truth-canary coverage for that section.
- ETF flow context remains live. The working ETF demand read stays in Liquidity & Capital, where US ETF flow history, spot premium, and capital pipeline data are already wired.
June 20, 2026 (Liquidity & Capital)
ETF flow chart no longer starts tiny on load FIX
- The first paint is stable. The ETF flow chart now waits for a real container width instead of briefly drawing at the hidden-tab fallback size.
- The panel is live-data backed. The snapshot, US spot premium, capital pipeline, and ETF breakdown cache are all read from the current production payload; ETF flows remain daily trading-day data.
June 20, 2026 (Execution Layer)
Options execution cards are balanced and visual POLISH
- The empty row is gone. DVOL, IV term structure, risk reversal, and VRP now render as four even cards across the Options tab.
- The cards now carry compact visual reads. Range meters, IV term bars, gamma-distance meters, and put/call premium split bars make the execution layer scan faster.
- Mobile stays stacked and clean. The same cards collapse to one column without horizontal overflow.
June 20, 2026 (Network Health)
Network Health now shows live BTC coverage FIX
- Partial inputs no longer look dead. When hashrate, difficulty, and Lightning are live but mempool, fee, or block-fullness feeds are missing, the panel now scores the known BTC network inputs and lists the missing ones.
- Removed off-scope alt-chain stress. The SOL MEV Network Stress card is no longer part of the BTC Macro decision surface or active panel-health manifest.
June 20, 2026 (Corporate Treasuries)
Corporate Treasuries now shows concentration and composition POLISH
- The panel is visual now. The old two-card readout was replaced with supply absorbed, category composition, and top-holder ranking slabs.
- Concentration is easier to judge. Top-holder share now renders as a bar with the holder identity and tracked-supply context.
- Flows stay live. Company and government 30D treasury changes now appear as compact flow chips from the same snapshot contract.
June 20, 2026 (Panel audit + reliability)
Stale-data caching fixed across panels, dead surface cleared FIX
- Stale cached data no longer served. Several JSON endpoints (including the latest-scored signal and ledger surfaces) were missing a
Cache-Control header, so the CDN could serve a weeks-old response while the live data was fresh. A global default now marks every such endpoint as non-cacheable, so public reads always reflect the origin.
- Prediction tracker hardened. The daily prediction tracker now runs as a real systemd timer (and shows up in
/api/cron-health), so a future stall is visible instead of silent.
- Sky-vault stress no longer masks a dead feed as "all clear." When both upstream sources fail, the panel now reports unavailable rather than a synthetic zero stress score.
- Removed orphan surface. The retired Macro V2 preview (
/v2, /macro-v2) and its unbundled assets are gone; those URLs were already 404 in production.
June 20, 2026 (Cycle Top Radar)
Cycle Top Radar is live-data-backed again FIX
- Fresh no longer means empty. The panel was updating timestamps but defaulting its valuation components to zero because the backend read old field names.
- Top proximity now reads live inputs. MVRV-Z, Puell, Mayer, and Pi Cycle are wired from the current cycle snapshot instead of falling back to an all-zero stack.
- The current read stays SAFE, but it is real. Public snapshot now returns a non-zero top-proximity score with live component evidence.
June 18, 2026 (Track Record flow)
Track Record now reads in decision order FIX
- Primary read first. Directional hit rate now leads the page before sample context, rules, or methodology.
- Ranked panel flow. The page now scans as Primary read, Sample and rules, Prediction ledger, Field audit, then Methodology.
- Same order on mobile and iPad. The ranked sections keep the same reading path while dense ledgers stay cardified on phone widths.
June 18, 2026 (Website mobile polish)
Ledger and Agents read cleaner on phones FIX
- Ledger navigation no longer widens the page. The audit sub-pages wrap cleanly below the Ledger header on mobile instead of clipping the Docs link off-screen.
- Ledger call rows are phone-native now. The live call ledger collapses into labeled cards below 640px, removing the remaining horizontal scroll from dense timestamp/status rows.
- Ledger Methodology tables became mobile cards. The call-definition table now renders as labeled rows on phones, matching the newer Track Record ledger treatment.
- Agents hero is calmer on mobile. The BTC macro headline now sits over a darker terminal-preview layer, with token-aligned text sizing and palette values.
June 18, 2026 (Track Record polish)
Track Record now reads like an audit console on mobile FIX
- Percent-first hit rate. The live directional record now leads with the hit-rate percentage and keeps the sample size in the meta line, so
5/33 (15%) no longer dominates the page.
- Mobile ledgers are readable. Prediction rows and per-field accuracy rows become labeled cards on phone viewports instead of clipped wide tables.
- Console-clean calibration path. The dormant calibration fetch now checks for its optional markup before writing into it.
June 18, 2026 (Landing base-rate wiring)
Home now shows the real 90D base-rate distribution when it is live FIX
- The unavailable state was a wiring gap. The internal proximity-forward-return feed had current-bin data, but the public landing API was not passing it into the Composite Verdict contract.
- The current band now renders as data. When the feed is healthy, Home shows the current score band's 90d p25, median, and p75 returns instead of the
Unavailable placeholder.
June 18, 2026 (Landing polish)
Home is clearer when base-rate history is unavailable FIX
- No more repeated warming placeholders. When 90d forward-return history is unavailable, Home now shows one explicit
90D Base Rate unavailable state instead of repeating Warming across P25, median, and P75.
- The first viewport no longer repeats the same unavailable metric. The hero hides the 90D base-rate KPI until that history is live, leaving the gap explained once inside Composite Verdict.
- The verdict explains what is still live. In that state, the landing copy now says the read uses bottom-proximity score and heat only.
- Track Record is more audit-like. The old oversized stat cards were replaced with a compact Accountability Ledger panel, metric rows, and a clearer
Open audit trail action.
- Direction accuracy now scans cleanly. The live value leads with the hit-rate percentage, while the sample size sits quietly in the meta line.
June 18, 2026 (Thesis Health input fill)
Thesis Health now connects more missing inputs to real feeds FIX
- Network inputs are no longer invisible. Hash Ribbons and hashrate context now flow from the cycle engine into Thesis Health as live inputs.
- New source-backed metrics were added for the remaining gaps. Mining difficulty, Lightning capacity, company treasury flows, and government treasury flows are collected from the existing owned data stack.
- Treasury deltas stay honest. Company and government 30d flows are filled only from real flow history; if history is absent, the panel still marks the input missing instead of inventing a delta.
June 18, 2026 (Thesis Health clarity)
Thesis Health now shows liveness instead of saying the thesis is broken FIX
- The panel was live, not stale. Fresh snapshot data existed, but several inputs were read from old paths or converted to bearish defaults when missing.
- Missing inputs now reduce coverage, not score certainty. Low-coverage reads show
PARTIAL and list missing feeds instead of rendering a misleading BROKEN band.
- The panel is easier to use. It now shows known-input score, live coverage, and Monetary/Network/Adoption pillar bars, with an info drawer explaining how investors should read it.
June 18, 2026 (Signal semantics)
Truth Engine no longer looks like a competing buy/sell signal FIX
- Composite is now the only portfolio posture gauge. The BTC Composite Signal keeps the buy/wait/sell read; Truth Engine is labeled as a trust and conflict check.
- Truth Engine now uses neutral resolver language. Its hero, gauge, warning, and digest read as
resolver score, trust check, and risk brake instead of a second trade verdict.
- Old Truth alert payloads are normalized before display. Smart Alerts and Morning Brief copy now say Truth audit state changed, using Supportive/Cautionary wording instead of Mild Buy/Mild Sell.
June 18, 2026 (Truth Engine liveness)
Truth Engine shows source health and uses the live BTC cycle stack FIX
- Fixed a route wiring bug that dropped live cycle metrics. Truth Engine now requests the BTC cycle by asset keyword, so Puell, MVRV, NUPL, LTH-SOPR, STH-MVRV, supply-in-profit, and hash ribbons are counted when live.
- Added a source-liveness strip. The panel groups active/missing inputs by cycle/on-chain, macro, derivatives, and sentiment/flow, with freshness and live-source counts visible before the conflict digest.
- Clarified the investor read. The hero now answers whether today's read can be trusted and whether it should be used as confirmation, a light input, or a risk brake.
June 18, 2026 (Smart Alerts clarity)
Smart Alerts separates real alerts from watch context FIX
- Watch-only cycle driver cards no longer look like trade alerts. If no hard Smart Alert fires, the panel labels model-driver context as a watch card instead of counting it as active.
- Null thresholds are hidden. Cycle drivers now render readable values such as
input active or 0.890 / < 1.0, not raw (null) internals.
- The panel now explains how to read itself. The info drawer covers alert vs watch semantics, severity stripe, persona tags, contribution bars, and the action line.
June 18, 2026 (Morning Brief UX)
Morning Brief explains its read instead of leaking jargon FIX
- Removed the confusing
BTC Unknown · NGS headline path. The brief now reads the current cycle phase shape and labels the signal as Narrative Gravity.
- Added in-panel context. The Morning Brief now explains Narrative Gravity, Equilibrium, read cadence, and why quiet Delta Watch days are not stale days.
- Contrarian text is less over-redacted. Public snapshots preserve useful sentence context around private inputs instead of collapsing the whole card to
private data unavailable.
June 17, 2026 (Active panel optimization)
Active panels load faster and audit cleaner PERF
- Snapshot-dependent panels avoid local HTTP round-trips. Morning Brief, Smart Alerts, Methods, Score Decomposition, and Regime Alarm now reuse the in-process cached Macro snapshot.
- Macro assets are lighter. The active Macro JS/CSS references now use minified bundle names with compressed sidecars, while the canonical unminified bundles stay verified for deploy safety.
- Panel Health now tracks slow panels. Truth Canary can classify
LATENCY, and the Macro Panel Health tile surfaces it as a warning instead of hiding slow-but-alive endpoints.
- Legacy
/hit-rate is no longer a dead page. It redirects to /ledger, where the live hit-rate and accountability KPIs already live.
June 17, 2026 (A+ Intelligence)
A+ Intelligence is manual-only again FIX
- Daily scheduling is paused. The synthesis pipeline produced valid theses, but the unattended Telegram review flow is not ready, so deploys now keep
cw-intelligence-daily.timer disabled.
- Dry-run Telegram output is quieter. Manual dry-runs still print full thesis JSON to the shell, but Telegram receives only the summary unless full thesis JSON is explicitly requested.
June 17, 2026 (Canary alerts)
Panel Health recovery messages are quieter FIX
- Recovery-only Telegram alerts are suppressed. The panel canary still records recovered endpoints in its JSON report, but it no longer sends noisy "Recovered (N)" messages after deploy or restart flaps.
- Real down alerts remain active. Newly-down panels still trigger Telegram after the existing debounce, with a longer restart grace window to avoid transient deploy noise.
June 17, 2026 (Panel health)
Stale panels now degrade more honestly FIX
- Desk indicators stopped pretending. Open Interest still shows notional, but the unavailable 4H delta now renders as
— instead of a fake 0.00%; Macro Countdown now reads the backend event timer.
- Macro Forecast is retired from active navigation. The broken forward-return distribution panel is no longer part of the Macro screen map, command jump list, or panel contract until it has a real live artifact again.
- Public API examples point at live exports. CSV examples now use
composite-today, and the agent-access contract no longer says x402 is configured when payment rails are disabled.
June 17, 2026 (Morning Brief)
The daily Telegram Morning Brief is back FIX
- Rebuilt on live snapshot data. The 07:00 WIB brief now uses the deterministic Morning Brief v2 engine: headline, narrative, the three biggest 24h deltas, a contrarian signal, and a link to cryptowatch.id.
- Replaced the dead report path. The old sender depended on a discontinued report cron; the new sender reads today's CryptoWatch snapshot directly and falls back to the local API if the snapshot file is not yet ready.
- Idempotent. The timer will skip a day if the sidecar shows it already ran, unless you force a resend with
--force.
June 4, 2026 (Macro V2 preview)
Macro V2 command-center preview is wired to live CryptoWatch data NEW
- Separate V2 surface. The new preview lives at
/v2 and /macro-v2; the existing v1 Macro terminal and its bundle are unchanged.
- Live command visuals. Composite signal, BTC price, radar, thermometer, heatmap, flow map, inspector, summary cards, and chart heads now hydrate from existing CryptoWatch snapshot/composite contracts.
June 1, 2026 (Admin back office)
CryptoWatch now has a proper admin back office NEW
- One operator home for the business.
/admin now shows user counts, paid/trial/blocked access, invoice status, annual-plan volume, confirmed revenue, sweep follow-up, recent users, latest invoices, and admin audit history.
- User controls are now actionable. The admin user list links back to the cockpit and exposes audited trial extension plus block-user forms without exposing payment URI blobs or wallet-sensitive material.
June 1, 2026 (Annual subscription)
CryptoWatch now supports annual crypto subscriptions NEW
- Annual is priced at 10 months. The crypto checkout now offers $49/month or $490/year, giving annual users 12 months of access for the price of 10.
- Entitlements match the selected plan. Invoices persist the billing plan and access duration; monthly confirmations grant 30 days, annual confirmations grant 365 days.
June 1, 2026 (Crypto QR compatibility)
Crypto invoices now scan as plain Base receive addresses FIX
- Wallet scanners should open more reliably. The invoice QR now encodes the one-time EVM receive address directly instead of an ERC-20 transfer URI that some wallets ignore.
- The payment guardrails stay visible. The invoice page still shows the exact USDC amount, the one-time Base address, and the "send only USDC on Base" warning, with copy-paste fallback if scanning fails.
May 30, 2026 (Bottom-proximity base rates)
The Macro cockpit now shows historical outcomes by bottom-proximity bin NEW
- Forward returns conditioned on where the cycle sits. The Cycle → Bottom Prox tab now carries a "Historical Outcomes by Bottom-Proximity Bin" table: for every proximity band (0–20 … 80–100), it shows BTC's historical median forward return at 7 / 30 / 90 / 180 / 365 days, with the 25th–75th-percentile spread and sample count.
- Your current band is highlighted with its 90d base rate. A synthesis line calls out the band BTC sits in today and what 90-day forward returns that band has historically produced, so the proximity score reads as a base rate, not just a number.
- Statistical honesty built in. Bands with fewer than 5 historical samples are flagged
low-n and dimmed; when forward-return history is still backfilling, the panel says so instead of rendering a blank grid.
May 29, 2026 (MCP local preview)
AI agents can now run a local CryptoWatch MCP preview NEW
- The first MCP server entrypoint exists. Source-checkout users can install the optional MCP SDK and run
python3 -m backend.agent_mcp_server to expose cw.daily_verdict, cw.thesis_receipt, and cw.action_plan.
- The tools are research-only and source-safe. They compact CryptoWatch's public BTC composite into verdicts, thesis receipts, action bands, receipts, and invalidation triggers without exposing private raw inputs or placing trades.
- x402 remains planned, not live. The agent-access contract now marks MCP as
local_preview while keeping x402.enforcement_live=false.
May 29, 2026 (AI agent landing)
CryptoWatch now has a public AI-agent access page NEW
- /agents explains the machine lane. The page positions CryptoWatch as a premium BTC macro terminal for agents, with MCP connection shape, CryptoWatch Skill workflow prompts, and dashboard artifacts agents can cite.
- x402 is scoped as the accountless pay-per-request path. Agents do not need a Google account for the future machine-payment lane; the page describes USDC on Base per-call access while keeping live x402 enforcement as follow-up implementation scope.
- Agent clients now have a discovery contract. `/api/public/v1/agent-access` and `/.well-known/cw-agent.json` return metadata for the planned MCP tools, CryptoWatch Skill intent, and x402 payment posture, with live enforcement clearly marked as not active yet.
May 29, 2026 (Treasury sweep tracking)
Confirmed crypto invoices now have sweep tracking NEW
- Payment ops can separate customer access from treasury consolidation. Confirmed USDC Base invoices enter a sweep queue until an externally verified treasury transfer is recorded.
- The sweep surface is bookkeeping-only. Admins can review confirmed invoice addresses and mark them swept with a tx hash after wallet-side transfer; CryptoWatch still does not sign, broadcast, or custody funds from the server.
May 29, 2026 (Payment operations)
Crypto invoice review now has an admin operations surface NEW
- Admins can review subscription invoices in one place. The new crypto-invoice operations page lists user email, invoice status, payment address, derivation index, checkout state, tx hash, expiry, and confirmation time.
- Manual confirmation is safer to operate. Pending rows include a review form for tx hash and reason, while private invoice QR/payment request details remain on the customer-owned invoice page.
May 28, 2026 (Auth and subscription foundation)
Premium terminal access and USDC Base checkout are being wired in NEW
- Google sign-in and 7-day trial entitlement are now implemented in the backend. Macro and Desk can be gated to signed-in users with active trial or paid access.
- Crypto-first billing now uses native USDC on Base. Signed-in users can open an account page, start the $49/month flow, generate a 30-minute one-time invoice address, and scan a private QR for that payment request.
- One-time payment addresses can now come from a verified xpub. The checkout derives fresh Base addresses from public derivation material, records the invoice index, and refuses to configure if the verification address does not match.
- Payment confirmation is entitlement-aware. Matching Base USDC transfers can activate paid access, and admins have a manual confirmation fallback after onchain review.
- Admin and privacy controls are in place. Admins can review users and extend trials with audit logs, while cookie consent records require explicit analytics/marketing opt-in.
May 27, 2026 (Macro empty header removal)
Macro screens now start with the useful synthesis bar FIX
- Redundant section header cards are gone. Screens no longer show empty labels such as "What is the macro permission?" between the top status strip and the real panels.
- The synthesis bar remains the screen orientation layer. Each tab now starts with the compact live read, then moves straight into evidence and actions.
May 27, 2026 (Macro persona tab removal)
Macro no longer splits navigation by persona FIX
- The Maximalist / Macro / Cycle / Long-term / On-chain tab strip is gone. Macro now keeps the six decision sections in one stable product order instead of changing the page by persona.
- The oversized persona read text is gone from the screen top. Structured verdict payloads are formatted compactly in the backend so raw JSON-like objects do not leak into user-facing copy.
May 27, 2026 (Panel Health manifest repair)
Panel Health now checks the current Macro contracts FIX
- Retired on-chain proxy checks are no longer counted as broken panels. The health report now watches the aggregate Macro snapshot and snapshot-date contracts that power the live dashboard.
May 27, 2026 (Prediction-market dislocation trim)
Cross-venue odds check is now compact FIX
- The Prediction Markets panel no longer shows a large comparison table by default. It now appears only when matched venues materially disagree, shows one compact dislocation summary, and keeps the matched odds tape collapsed for audit.
May 27, 2026 (Cointime copy trim)
Cointime panel is easier to scan FIX
- The Cointime verdict now stays compact. The panel keeps the layer read, active lens count, and realized-loss velocity while removing the long cycle-reference paragraph and stray rendered markup.
May 27, 2026 (Reference Macro redesign branch)
Macro now matches the 24-panel reference map NEW
- The active Macro map is now six decision sections and 24 panels. Narrative Pulse belongs to Synthesis, Cointime / AVIV belongs to Action, and AI Debate is no longer counted as an active decision panel.
- Panel contract metadata still tags the intended reader, but navigation stays product-led. Persona-specific ordering was removed in the follow-up above so the dashboard does not split into separate persona tabs.
- New synthesis scores show their inputs. Cycle Top Radar, Thesis Health, Network Health, and Halving Cycle now expose component coverage instead of hiding a single opaque score.
- Visualization hooks now cover the full reference set. The frontend declares banded gauges, stacked bands, annotated sparklines, histograms, radar, band-shaded time series, heatmaps, and composition dotplots.
May 27, 2026 (A+ design polish)
Local design review moves from B+ to A+ FIX
- Macro controls are easier to hit. Info/source buttons, receipt toggles, alert toggles, and cycle tabs now meet a 32px+ interaction floor without losing the dense terminal feel.
- Panel headers read cleaner. Confidence halos now sit beside titles instead of placing hidden tooltip copy inside the title text.
- Home handles local feed gaps calmly. The landing page now shows a “Snapshot feed warming” state instead of a harsh live-snapshot error when private feeds are unavailable locally.
- Home and Docs action targets are less fiddly. Source icons and case-study open actions now meet the same touch-floor standard.
May 27, 2026 (QA + design review fixes)
Local degraded states are cleaner and mobile release pages fit FIX
- Docs and changelog now fit narrow screens. The public release/methodology pages no longer create horizontal scroll at 375px; long tables and inline code wrap inside the viewport.
- Desk outages degrade honestly. When local candle/funding inputs are unavailable, setup cards now show a temporarily-unavailable no-trade state instead of a load-failed error or placeholder prices.
- Track Record is console-clean without local tracker data. Calibration and per-field accuracy endpoints now return explicit unavailable payloads instead of failed 404 resources.
May 27, 2026 (Panel synthesis pass)
Macro now emphasizes fewer, sharper decision panels FIX
- Truth Engine gained a deterministic regime read. The panel now states whether the read is confirmed, conditional, or unresolved, with private-input agreement, coverage, conflict count, and invalidation rules in one compact block.
- Smart Alerts now carry persona tags. Alert cards label who should care first, while rendering text through safer DOM nodes instead of HTML string assembly.
- Low-utility panels are out of the active flow. Tactical, scenario, scenario-tree, and regime-backtest panels are no longer in the primary Macro screen order; methodology links remain available for audit continuity.
- AI debate is visually demoted. The qualitative debate panel is labeled as daily reasoning, not a deterministic signal.
May 27, 2026 (Audit reliability quick wins)
Freshness and low-confidence states are harder to miss FIX
- Home now labels prediction freshness. Stale prediction output is marked directly on the card, and the landing page now uses
BTC Reference plus a research-only disclaimer.
- Truth Engine no longer makes weak reads look strong. Low-confidence, low-coverage, low-agreement, or conflict-heavy reads now show a degraded warning instead of blending into normal verdict styling.
- Docs stop selling retired routes. The public methodology page no longer advertises the retired Hunter surface, and
/api now redirects to the API docs instead of returning a bare 404.
May 27, 2026 (Source-safe public service)
Public data services now use source-neutral language FIX
- Public API catalog sanitized. Discovery and machine-readable docs now expose CryptoWatch-owned lineage and signal classes instead of raw source names, private routes, or source identifiers.
- Public payload guard expanded. The sanitizer now covers more private data, market-data, AI, venue, and research sources before responses leave the public namespace.
- Diagnostics are source-safe. Timer and data-feed health endpoints now expose neutral job/feed labels instead of private service names or raw scheduler errors.
- Old public bundles pruned. Stale versioned Macro assets that still contained private labels were removed from the public static tree.
- Docs and release notes scrubbed. Public methodology, API, webhook, and changelog copy now describe derived artifacts and cadence without publishing source brands.
May 27, 2026 (Panel readability polish)
Truth Engine and Tactical Layer stop reading like raw dumps FIX
- Truth Engine conflicts now render as a digest. Repeated pairwise rows are summarized into bullish offsets, bearish pressure, and severity context, with raw diagnostics collapsed behind an explicit drawer.
- Added an above-grid tactical summary. The panel now states whether the short-horizon tape is defensive, mixed, or supportive before the operator scans the 17 indicator cards.
- Long textual values no longer blow up the card layout. Readouts such as venue-led CVD pressure and realized P/L references use compact mono styling instead of oversized dot-matrix numerals.
May 27, 2026 (Macro panel dedupe)
Macro panels no longer repeat across modes FIX
- Each active panel now has one primary home. Liquidity lives in Evidence, Smart Alerts lives in Now, and BTC Price / DCA levels live in Playbook.
- Evidence is cleaner. The duplicate ETH / SOL / HYPE text context was removed from the active Evidence flow because the BTC Rotation Risk panel already owns that job.
- A regression test now blocks cross-mode duplicates. The active screen map fails if a non-synthesis panel appears in more than one mode.
May 27, 2026 (Macro cockpit flow)
Macro now follows a four-mode cockpit flow NEW
- NOW / EVIDENCE / PLAYBOOK / AUDIT replaces the old three-tab flow. The first screen is the command read, evidence is the proof stack, playbook holds action tools, and audit holds track record plus methods health.
- The daily report moved out of the first command scan. It now lives lower in Evidence so the opening screen stays focused on the BTC verdict, alerts, morning read, changes, truth engine, cycle, liquidity, and regime driver.
- Search jumps to the right mode before scrolling. Command-K results now know their owning mode, so hidden panels are made visible before the page scrolls.
- Visual polish follows the hl.eco direction without copying it. The mode rail and command cards now use softer deep-teal glass and mint edge treatment while preserving CryptoWatch's mono numeric system.
May 27, 2026 (Smart Alerts reliability)
Smart Alerts stop showing NaN base rates FIX
- Preview base rates now render honestly. Smart Alerts no longer tries to turn preview-only sample counts into a percentage, so the READ screen does not show
NaN%.
- Cache-safe bundle. Macro now loads
cw_macro_app.v202605279ee09711.js so the fixed alert renderer reaches public browsers.
May 26, 2026 (Macro reliability audit)
Macro panels stop leaking broken and false-empty states FIX
- No hidden 404 request. A retired proximity-history loader was still running in the browser even after the panel was removed; it is now gated off with the removed chart DOM.
- Truth Engine uses the current data contract. It now reads today’s cycle, macro, funding, ETF, sentiment, and prediction payload shapes instead of starving down to two sources.
- Liquidity synthesis is no longer falsely empty. The Liquidity & Capital hero now builds from live ETF 7d flow, capital-pipeline flow, and LTH supply deltas already present in the snapshot.
May 26, 2026 (public reliability)
Panel health is green on the public site FIX
- Truth-canary is clean. Public panel health now reports 20 OK and zero DEAD, DARK, MOCK, or STALE panels.
- Operational health is less noisy. The public app tier no longer counts Tokyo collector timers or retired source monitors as active local failures.
- Retired UI debt is gone. The old forward-returns panel was removed from the active Macro DOM, and summary cards no longer jump to hidden AI context panels.
May 26, 2026 (A+ panel quality pass)
Macro is tighter, more Bitcoin-first, and less noisy FIX
- READ is now BTC-only decision flow. Altcoin rotation panels moved out of the primary read so the first screen stays focused on BTC verdict, evidence, cycle, and cohort regime.
- Summary cards no longer point at hidden panels. The quick cards now jump to visible Morning Brief and Smart Alerts modules.
- Panel Health is cleaner. Intentionally retired/dark feeds report as DARK instead of inflating DEAD counts, and the Ledger Regime API now serializes live Postgres date rows safely.
May 26, 2026 (Macro panel flow)
Macro panels now follow the decision path FIX
- The READ screen starts with the actual verdict. The BTC Composite Signal now appears before narrative panels, so the first scan is signal first, then explanation.
- Smart Alerts are visible on the main read. Active model and market shifts now sit immediately under the composite instead of being hidden by the screen map.
- CONTEXT and PLAN have a cleaner sequence. Context moves from macro regime to capital, odds, sentiment, execution, and price; Plan now includes the live Scenario Tree before the accountability ledger.
May 26, 2026 (Fed prediction-market card)
Macro Prediction Odds no longer shows a dead Fed card FIX
- The Fed card now matches the live feed. It reads the available 2026 Fed cut-path contracts instead of looking for next-meeting contracts that are not present in the current watchlist.
- Unavailable data is explicit. If no Fed cut-path contract is present, the panel says so directly instead of rendering a card full of dashes.
- The cross-venue tape no longer shows as a dead strip. It stays hidden unless there is an actual matched two-venue market to compare.
May 26, 2026 (Daily report header polish)
Daily Market Intelligence header is cleaner and cache-safe FIX
- The report header now has a proper title block. The title, subtitle, report meta, Markdown action, and expand control align into separate zones instead of crowding one line.
- The report CSS is cache-busted. Macro CSS now versions through the asset pipeline, so the sectioned report-card styling reaches the browser instead of relying on a stale fixed CSS file.
May 26, 2026 (Panel Health source repair)
Panel Health reads the live truth-canary report again FIX
- The daily report remains sectioned for reading. The expanded Daily Market Intelligence view now opens into a primary read, section jump chips, and compact report cards instead of a single data-dump block.
- Panel Health uses the timer's canonical report file. The truth-canary API now reads
live/data/truth_canary.json, with a legacy fallback for older local checkouts.
May 26, 2026 (Retired surface nav cleanup)
Desk and 404 navigation stop pointing at retired pages FIX
- Desk stays on the active surface set. The live Desk header now matches Home and Macro: Home, Macro, Desk.
- 404 quick links no longer advertise deleted surfaces. Hunter and Reputation were removed from the fallback navigation because those public pages were retired.
May 26, 2026 (Macro synthesis UI)
Morning Brief and the daily report are easier to scan FIX
- Morning Brief now has real hierarchy. The headline read, contrarian signal, and delta watch each get their own responsive zone instead of one flat text block.
- The full Daily Market Intelligence report is sectioned. Primary read, jump chips, and tone-coded report cards make the long synthesis easier to inspect without changing the underlying report data.
- CryptoWatch route naming is cleaner. Active landing and Macro calls now use
/api/cw/*, with tests guarding against old /api/cw/* references returning to the runtime path.
May 26, 2026 (Entity Regime clarity)
Entity Regime now explains confusion instead of looking broken FIX
- Regime Confusion is now explicit. The panel shows live input coverage, treats cross-validation booleans correctly, and labels no-driver states as a wait signal rather than a classic-heuristic override.
- Evidence chips keep direction. ETF outflows now retain the minus sign, so red flow chips no longer hide whether the number is an inflow or outflow.
May 26, 2026 (Landing data repair)
Home no longer shows empty forward-return base rates FIX
- Restored historical base rates. The composite forward-return engine now falls back to local BTC history when retired cycle files are absent, so P25/median/P75 and sample count populate again.
- Renamed the landing API contract. Home and Macro now use
/api/cw/... snapshot routes instead of the old pre-rename alias.
- Clear degradation state. If historical base rates are genuinely unavailable, Home now says the history is warming instead of rendering ambiguous dashes.
May 26, 2026 (CryptoWatch service rename)
Main app service renamed to CryptoWatch Macro FIX
- The live service name is now aligned with the brand. The main FastAPI app is managed as
cw-macro.service, and deploy/status checks use the new name.
- Visible Macro copy is aligned too. Browser titles, PWA short name, report exports, and active docs now say CryptoWatch Macro.
May 26, 2026 (Dealer Gamma path fix)
Dealer Gamma now loads from the public Macro path FIX
- Fixed the public route. The options service was producing live GEX by strike, but the browser path
/options/gamma returned the app's custom 404 on the public web tier. The main app now bridges that route to the options service.
- Audit hardening closed too. Public API rate-limit counters now persist every request, source-safety matching no longer flags clean words such as "international", and deploy has a guarded dev-only migration reset flag.
May 26, 2026 (Source surface retirement)
Hunter and Reputation were removed; Macro and Desk got cleaner FIX
- Deleted the stale source-dependent Hunter and Reputation surfaces outright. CryptoWatch no longer keeps permanently broken dashboards in the public nav once their upstreams are gone.
- Macro and Desk dropped the leftover source-era cards and links. Macro no longer shows stale Methods/Execution cards or Hunter jump targets, and Desk's Intelligence view now keeps only the desk-native Counterfactual Quick Scenario card.
- The cleanup is deploy-safe. The same release also removes stale live Hunter/Reputation copies so deleted pages do not quietly reappear after a deploy.
May 24, 2026 (Brand refresh)
New CryptoWatch logo, and the name spelled out NEW
- A logo of our own. CryptoWatch now has its own mark — a clean “A” monogram in the signature blue→aqua gradient — across the site header, the browser favicon, and the home-screen / app icons.
- What CryptoWatch stands for, front and center. The landing hero now reads “CryptoWatch — Alpha & Predictive Intelligence Unit” with the A·P·I·U initials highlighted.
- Sharper type restored. The custom web fonts on the Macro and Hunter terminals are loading again (they had quietly fallen back to system fonts after the rename).
May 23, 2026 (Hunter dark-panel cleanup)
Hunter drops the permanently dark Whale Cohort Heatmap FIX
- Removed a card that had become permanent dead weight. The live prod audit found
/api/hunter/whale-heatmap intentionally dark after the wallet/OSINT cost cuts, so the Whale Cohort Heatmap panel has been removed from Hunter instead of rendering another permanent unavailable block.
- The active Hunter bundle no longer polls retired dark panels. The funding-heatmap and funding-rotation loaders were stripped from the generated Hunter asset once those cards were already off-surface, so the app stops spending work on panels users can no longer see.
- Cross-surface search is cleaner. Macro search no longer links into the already-retired Hunter Narrative Phase panel.
May 22, 2026 (Dealer Gamma source rebuild)
Macro Options now soft-loads Dealer Gamma clusters NEW
- Added a dedicated Dealer Gamma panel under the Options section. Macro now fetches
/options/gamma outside the hot snapshot path and renders the nearest short-gamma and long-gamma strikes versus spot, plus put/call premium-share context.
- Fail-soft and historical-mode safe. When the gamma route is unavailable, incomplete, or the user enters time-machine mode, the panel stays hidden instead of leaving broken placeholders or stale live-only data behind.
- Cache-safe source rebuild. The panel now ships from the canonical Macro source via
cw_macro_app.v2026052241d78b3d.js, so future edits flow through frontend/src/cw_macro_app.js and the build script rather than a hand-added static bundle.
May 22, 2026 (Pipeline Health)
Methods Layer now shows upstream pipeline health FIX
- Methods Layer now shows pipeline/indexer health, not just timers. The old Cron Health tile has been upgraded into a Pipeline Health card that lists tracked upstreams and indexers with red / amber / green status.
- Silent data starvation is now visible. Each upstream row exposes auth posture, freshness, and 24-hour ingestion counts so dead feeds show up before their downstream panels quietly rot.
- Quota posture is now explicit. The health surface mirrors the new `ok` / `soft_throttle` / `hard_throttle` / `retired` monitor instead of showing a hardcoded offline stub.
May 21, 2026 (Cost Basis Ladder)
Tactical Layer now shows the full on-chain Cost Basis Ladder NEW
- One ladder, not three disconnected levels. The Tactical Layer now reads the consolidated
cost_basis_ladder payload and shows the full on-chain stack in one card: STH Cost Basis, LTH Cost Basis, True Market Mean, Realized Price, and Median Realized Price sorted high-to-low around spot.
- Headline = structure, not just a midpoint. The card now tells you how many holder-cost floors BTC has reclaimed with an
above N/M floors summary, while the tooltip lists each support/resistance level with distance from spot.
- Graceful fallback retained. If the consolidated ladder is unavailable, Macro still falls back to the older three-level Cost Basis Levels card instead of leaving the Tactical Layer blank.
May 21, 2026 (Dead panel removal)
Historical Outcomes panel removed FIX
- Excluded the permanently empty
sec-proximity-fwd panel. The "Historical Outcomes · when proximity was at this level" panel has never populated because the underlying proximity_history.parquet data file is missing and no systemd service runs the log_proximity.py logger or backfill_proximity.py backfill. Removing it eliminates dead UI weight.
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260521c.js so the excluded panel code is not served to browsers.
May 21, 2026 (Macro cohort confluence)
Cohort Confluence now uses owned sources only FIX
- Smart Money removed from the panel and score. Macro Cohort Confluence is now a clean LTH vs ETF read using the owned LTH tracker and owned ETF flow ledger; retired wallet-label feeds no longer appear as unknown third votes.
- Cache-safe frontend. Macro now loads
cw_macro_app.v20260521b.js and cw_macro.v20260521c.css so the two-source compass reaches browsers without stale assets.
May 21, 2026 (Source cleanup)
Legacy wallet backfill source retired FIX
- Removed stale wallet-backfill dependency paths. Disabled wallet/KOL endpoints now use source-neutral retirement copy, and the old source key is no longer documented as a CryptoWatch requirement.
May 21, 2026 (Macro gauge polish)
Composite gauge text alignment tightened FIX
- Macro verdict copy now sits on the gauge centerline. The Long-term / Short-term synthesis row is centered under the WAIT score stack instead of drifting left inside the summary column.
May 17, 2026 (CT Emergence automation)
Crypto Twitter Emergence scan now runs automatically every day NEW
- Daily social-attention scan at 08:00 UTC. The CT Emergence panel now refreshes automatically via a scheduled timer, surfacing rising crypto social terms without manual intervention.
- Pipeline health now tracks 19 timers. Cron health monitoring expanded to cover the new CT Emergence timer alongside all existing data pipelines.
May 16, 2026 (Infrastructure hardening)
Pipeline health restored to 100% and dead feeds fully purged FIX
- Retired wallet-label source removed from health tracking. Dependent endpoints now return honest empty-states or have been rebuilt with alternative data sources. The Smart Money Now panel shows a clean deprecation notice instead of errors.
- Retired derivatives source permanently excluded. Subscription expired and will not be renewed. Dependent surfaces have honest empty-states or alternative sources.
- Whale Cohort Heatmap v2 is live. Rebuilt with private transfer data, BTC netflow, and volume-momentum proxies for top alts.
- External token-safety comparator retired. The in-house Token Security Engine is now the sole user-facing verdict source for EVM and Solana tokens.
May 11, 2026 (Smart Ape signal cards)
Smart Ape Feed now shows token, contract, and wallet on real signals FIX
- Actionable signals now have the missing identifiers. Early-ape alerts are enriched with token symbol, contract address, chain, token age, and the buying smart-wallet address.
- Quiet state is explicit. Fresh tokens now render as a watch queue with contract addresses and
waiting for buy until a tracked wallet actually takes a first position.
- Action controls are now built in. Contract cards include
Copy CA, explorer links, and DEX routing; wallet-buy cards use Open DEX, while watch-only rows stay on Check DEX.
- Solid signals are labeled by evidence. The panel now distinguishes watched wallets, fresh CAs, wallet buys, and trade-ready rows; trade-ready requires wallet buy, full CA, smart-wallet address, and SAFE token security.
- Token-birth indexing keeps CAs. Wallet-flow, listing, and raw Solana mint sources now preserve token contract addresses so the feed does not collapse back to symbol-only rows.
- The panel no longer treats the wallet roster as alpha. It shows a four-step ladder: tracked wallets, fresh CAs, wallet buys, and trade-ready.
May 11, 2026 (Smart Ape wiring)
Smart Ape Feed now shows real roster and pipeline evidence FIX
- The panel is no longer falsely empty. It now reads ranked smart-ape wallets from the real wallet schema and shows a roster-live state while first-position alerts are quiet.
- Early-ape alerts are separated from context. Generic narrative/bridge alerts no longer masquerade as wallet-level evidence.
- Token births and scheduler wiring are live. The backend reads clean token-birth rows from SQLite, filters obvious reward/claim spam, and the scheduler now runs token birth indexing, smart-ape scoring, and early-ape detection.
May 11, 2026 (Hunter visualization)
Hunter live panels now use different chart languages FIX
- Smart Ape is now evidence-first. It uses a dot-matrix evidence board and wallet-token map instead of another score card.
- Alert Feed is now time-first. It uses a radial event clock, severity lanes, and compact event cards instead of stacked alert rows.
- MSAC is now confluence-first. It uses a radial signal rose plus fixed percentile heatmap cells so cross-domain pressure no longer looks like the same bar stack as every other panel.
May 11, 2026 (Hunter mobile polish)
Narrative Correlation score card is readable on narrow screens FIX
- The locked-pair hero no longer truncates narrative names. The cramped mini-cards were replaced with a clean
AI + AI Agents relationship badge.
- Evidence moved into chips. Same-direction, shared-token, and token-count context now sits in compact chips instead of stacked text blocks.
May 11, 2026 (Hunter correlation)
Narrative Correlation now shows relationships instead of rows FIX
- Correlation is now visual. The panel leads with the locked pair, shared-token count, and status chips instead of a text row list.
- Divergence and overlap are separated. Rotation splits use 7d movement bars; duplicated exposure uses overlap cards with percent tracks and token chips.
May 11, 2026 (Hunter DEX)
DEX Market Overview is now a pulse view, not a blank pool table FIX
- Pool shells are visible without pretending to be complete data. When market-intel has pools without price or 24h volume, the panel now shows chain coverage, readiness lanes, and pool cards with
price pending / vol pending.
- No more dash rows. The old
ETH Pools table shape is gone; USDC/WETH symbols and short pool IDs are preserved in a visual DEX pulse.
May 11, 2026 (Hunter live panels)
Smart Ape, Alerts, MSAC, and Dislocation panels recover from false-empty states FIX
- Smart Ape Feed is unblocked. The public proxy now allows its endpoint, and the backend no longer crashes on a stale import before returning alert data.
- Smart Ape is now a radar, not a dump. When there are no verified smart-wallet buys, it shows compact heat, context metrics, and narrative chips instead of duplicating the Alert Feed table.
- Alert Feed is now compressed. The live alert stream renders priority count, severity/category chips, a compact event tape, and short summaries instead of dumping raw rows, addresses, and oversized transfer strings.
- MSAC and GLMT are visual panels. MSAC now shows a pressure-stack map across domains and hot signals; GLMT shows a labeled calibration preview while the scanner report is pending.
- Alert Feed reads the current database schema. The panel now sees live alert rows instead of showing zero because the API queried legacy column names.
- MSAC and GLMT render current payloads. MSAC handles string domain names and GLMT normalizes nested scan reports; missing GLMT reports now show a pending state instead of an endless spinner.
May 11, 2026 (Hunter fix)
Hunter attention panels no longer report real activity as empty FIX
- CT Attention now keeps extended setups visible. Multi-KOL, multi-mention tokens that already ran hard now render as extended/radar candidates instead of disappearing into the quiet-day empty state.
- Fresh Momentum separates outage from calm. A missing DEX analytics credential now shows as a paused feed state instead of "no sub-hour momentum detected."
- Active Hunter bundle corrected.
/hunter now serves the current cache-safe app bundle, including the private token-safety browser cleanup, panel-state fixes, and a top-level loader crash fix.
May 10, 2026 (Hunter safety)
Hunter token safety now uses CryptoWatch's own engine NEW
- The external comparator is no longer the user-facing verdict. Rug Scan, token search, security dots, and Manipulation Shield now read CryptoWatch-owned verdicts for EVM and Solana tokens.
- Unknowns are visible. Payloads now add
engine_source, coverage, confidence, unknown_fields, and evidence so missing source, route, holder, or Token-2022 coverage is explicit.
- No browser source calls. The active Hunter bundle no longer contains an external token-safety API URL; arbitrary contract scans go through CryptoWatch's validated backend route.
May 10, 2026 (Hunter ops)
Phase 3 Hunter panels unblocked through the production proxy FIX
- New panels can reach their data. Cohort, wallet-scores, alerts, and market-intel endpoints are now allowed through the CW Hunter proxy instead of returning HTTP 403 while the upstream service was healthy.
- Public params are bounded. The proxy clamps pagination and row-limit query values before forwarding to localhost services, so the public surface cannot request oversized DB or JSON work.
- Deploy hardening. VPS deploys now recreate the data-engine virtualenv compatibility path, and the Smart Money timer loads the shared AI-source env files used by its synthesis panels.
May 10, 2026 (Macro UX)
Cross-Venue rows now lead with the spread number, not the slider FIX
- The spread is now the row's headline. Each disagreement row opens with a prominent
41.6¢ gap in 20px aqua mono, with A/B prices as a supporting line under it. Previously the slider dominated and the spread number was tiny right-aligned text.
- Slider slimmed down. Rail height 18px → 10px; markers 20px → 14px; range bar thinner. Same visual anatomy, just stops fighting the spread number for attention.
- State encoded by colour, not chips. Divergent rows show aqua "X.X¢ gap"; aligned rows show dim "X.X¢ aligned"; single-venue rows show the available price in plain text plus the "single-venue" tag. No extra chip clutter.
- Mobile layout preserved. Phone viewports still stack to a single column; lead drops to 18px so long market names don't crowd it.
May 9, 2026 (Macro UX)
Macro screens simplified around posture, cycle, liquidity, timing, and plan FIX
- Five focused screens. Macro now routes the default terminal through Posture, Cycle, Liquidity, Timing, and Plan instead of exposing every supporting indicator at once.
- Lower default panel count. Posture is now bento summary + BTC Composite + What Changed; Cycle is position + bottom radar + forward returns; Liquidity is capital + macro; Timing is execution + price; Plan is DCA + scenarios + track record.
- Duplicate panels deleted. Institutional Pulse, Layer Correlation Matrix, Distribution Confluence, Exchange Plumbing, Whale Digest, and Trigger Map are removed from the Macro shell instead of hidden behind a deprecated list.
- Cache-safe assets. Macro now references
cw_macro_app.v20260509e.js and cw_macro.v20260509f.css.
May 9, 2026 (Macro UX)
Cross-Venue panel now answers "what should I do?" on first read FIX
- Plain-English title. "Cross-Venue Consensus · Disagreement Tape" → "Where the two venues disagree most." Subtitle now explains why you care — wider gap = bigger edge — instead of describing the sort order.
- Verdict surfaces the actual #1 row. Instead of generic "Actionable spread tape is live", the hero now reads e.g.
Will Bitcoin reach $100,000 by Dec 31 2026? · Venue A 47% · Venue B 6% — that's a 41.6¢ gap on $1.5M of liquidity. One side is mispriced. The takeaway is the headline.
- KPIs reduced from four to two. Biggest gap and Liquid overlap stay; matched-markets count and history label moved to the panel footer where they belong as status indicators, not signals.
- Per-row chips deduplicated. Dropped the redundant
BTC chip (panel is BTC-heavy), the empty OTHER event-type chip, and the DIVERGENT state chip (the rail gradient already shows it). Single-venue rows still flag clearly.
May 9, 2026 (Visualization)
Inline trajectories on every snapshot value NEW
- BTC Spot hero on / now shows a 30-day price sparkline next to the live price tile (Apple-Stocks pattern). Answers "is $80,162 high or low this month?" without a chart click.
- /desk ticker cards (BTC/ETH/SOL/HYPE) all paint a 24-hour price sparkline next to the live ticker. HYPE was the gap — one major spot venue does not list it, so the candles route now falls back to an alternate venue for that one symbol.
- Stablecoin Velocity panel chart filled in. The 120px chart container had been empty since the panel shipped. Now renders a two-line USDT (amber, speculative) vs USDC (aqua, institutional) 30-day chart with dashed midline anchor and date axis labels — the exact divergence story the panel was always built for.
- Cycle Bottom Radar gauge gained a 30-day score sparkline + delta label below the headline number, so the trajectory of the composite is visible alongside the latest reading.
- Tufte pattern, applied consistently. Every snapshot value now carries its trajectory inline — same render style across
/, /macro, and /desk. Reduced motion is respected; ARIA labels expose percentage deltas to screen readers.
May 9, 2026 (Macro UX)
Methods Layer is now a cockpit, not a card dump FIX
- Clearer hierarchy. The Methods Layer now leads with a compact five-stream verdict band and groups diagnostics into Forecast Reliability, Signal Operations, Market Structure, Rotation Graph, and On-chain Watch clusters.
- Cleaner degraded states. Slow or unavailable method endpoints now mark only their own module, so one sick sidecar no longer leaves the whole panel stuck on
Loading....
- Responsive polish. Desktop keeps the dense Bloomberg-style grid; phone viewports stack the same modules without horizontal overflow.
May 9, 2026 (Macro UX)
Prediction-market consensus is now a disagreement tape FIX
- Less data dump. The Cross-Venue Consensus panel now opens with a compact verdict band, max-gap/liquidity/history stats, and ranked probability rails instead of a long table.
- Honest overlap states. Matched markets show anonymous Venue A/B markers and spread text; single-venue markets are clearly labeled as watchlist rows rather than fake arbitrage.
- Mobile-safe layout. The tape stacks title, rail, and metrics on phone viewports so long event names do not force horizontal scrolling.
May 9, 2026 (Performance)
Macro refresh keeps the first screen usable PERF
- First-viewport priority. Macro now gives the cached dashboard snapshot first network priority on refresh, so the main read can render before secondary panels hydrate.
- Deferred deep panels. Methods, cross-venue, backtest, chart, accuracy, and labeled-intel panels now load after first paint in staggered waves instead of all firing at once.
- Cache-safe bundle. The active Macro script was bumped to
cw_macro_app.v20260509b.js so browsers cannot reuse the older eager-loading behavior.
May 9, 2026 (Performance)
Macro refresh is faster after cache misses PERF
- Snapshot loads fast. Macro now serves the dashboard snapshot from stale-while-revalidate cache, so refreshes do not wait for a full cold rebuild when the server cache expires.
- Restart fallback. After a deploy or service restart, the live snapshot can seed from today's stored dashboard snapshot while the fresh rebuild runs in the background.
- Heavy history reads cached. Regime backtests, proximity/forward-return tables, diff feeds, and related daily-history endpoints now reuse cached results instead of recomputing on every browser refresh.
May 8, 2026 (Macro hotfix)
Macro Cycle blank panels fixed FIX
- Render crash fixed. Several Cycle panels were calling the shared Steelman counter-case renderer before that helper existed in the active browser scope, which could leave Market State, composite, cross-check, and related panels empty.
- Cache-safe frontend. Macro now loads
cw_macro_app.v20260507i.js so browsers fetch the corrected render bundle.
- Verified live. The production Cycle screen now reports live data, no red global fetch banner, no stuck loading text, and no browser console warnings or errors on a fresh load.
May 8, 2026 (CRY-55)
Public Model Report Card completed NEW
- Model Changelog.
/reputation now shows stable anonymized forecast-model labels with first/last seen windows and resolved-point counts.
- Failure Decomposition. The report card separates direction misses, structured misses, unavailable resolutions, and overall failure rate without exposing private IDs.
- Backfill honesty. Legacy daily T+7d rows get deterministic horizon and resolution timestamps during the safe dry-run-first backfill path; malformed ledger lines are preserved.
- Source-safe public copy. Changelog, docs, Hunter, and ledger pages now describe signal classes instead of naming private source plumbing.
May 8, 2026 (Trust ops)
Reputation backfill, Cron Health, and Success Metrics audit NEW
- Honest Reputation gating.
/reputation now withholds Brier, reliability buckets, model rows, and asset/regime Brier until each window reaches 20 resolved points; the API returns a server-side data_gate with ETA.
- Safe backfill CLI. Operators can dry-run and then apply a historical reputation backfill with backups and atomic writes; no fake predictions are created.
- Cron Health tile. Macro's Methods Layer now shows local timer health from
/api/cron-health, prioritizing failed, never-ran, and stale timers without exposing filesystem paths.
- Success Metrics audit. A token-gated admin endpoint and daily local timer now track forecast coverage, public calibration readiness, trust clarity, workflow compression evidence, and source-safety findings.
May 8, 2026 (CRY-62/63/64)
Live-feed accountability upgrades on Macro NEW
- Prediction-market spread history. Cross-venue event odds now write a local spread history every five minutes, so Macro can distinguish a one-off disagreement from a persistent edge.
- ETH validator stress. The staking-stress API now includes a validator-slashing signal class from recent consensus data, with optional aggregate enrichment when configured.
- SOL exact-feed receipts. The MEV health API now adds exact public tip-floor, validator-share, and SOL price-divergence fields instead of hiding behind a heuristic-only read.
- Source-safe UI. Macro shows a compact Network Stress panel using signal-class language and honest warming/degraded states.
May 8, 2026 (CI minutes)
GitHub Actions removed; GitHub is repo-only FIX
- No Actions on GitHub. All GitHub Actions workflows were removed so hosted minutes are not spent on pytest, scans, lints, browser checks, or scheduled jobs.
- GitHub is repo storage only. Pushes still land in the repository, but verification happens on the owner's local Mac before push.
- Local Mac QA instead. Future rendered-page checks should use the local browser/Browser Use workflow when an agent needs to inspect the actual UI.
May 8, 2026 (Backlog rescue)
A+ intelligence backlog hardened FIX
- Safer deploys. The deploy script now copies every backend module imported by the live server, closing the missing-module restart risk.
- Cleaner intelligence cards. Score decomposition shows top drivers with normalized contribution, and prediction-market spreads now use source-neutral Venue A/B language.
- ETH stress bug fixed. The staking-stress RPC call now uses valid ABI calldata and has route-level regression coverage.
- Signal Health surfaced. Macro's Methods Layer now includes a Signal Health card for rolling hit-rate, signal Sharpe, and drift/degradation flags. It starts in "history filling" mode until scored indicator history backfills.
- Signal Health backfill repaired. Historical indicator rows without a composite score now count toward the health window, while sparse series stay labeled as insufficient until they have 30 usable samples.
- Five-stream verdict upgraded. Macro Methods Layer now shows a five-arc agreement tile across CEX microstructure, on-chain cohorts, options skew, event odds, and institutional flows.
- Analytics-only boundary locked. Trade-history memory, venue OAuth, external trading integrations, and execution-style user features are out of scope for CryptoWatch.
- Public boundary restored. A mock institutional candidate endpoint was removed before the next deploy; public surfaces stay source-safe and real-data-first.
May 7, 2026 (CRY-68)
Public Brier scorecard launched at /reputation NEW
- Real-time calibration page. The new Reputation surface shows rolling 30d, 90d, and all-time Brier score windows plus a reliability curve and bucket bars.
- Accountability without source leakage. The page reports signal classes, assets, regimes, and anonymized model rows; private source, account, and feed details stay out of public UI.
- Track Record handoff. The existing
/track-record page now links directly to the probability-calibration view for users who want more than hit rate.
May 7, 2026 (CRY-56)
Macro false partial banner fixed FIX
- Less scary outage signal. The global Macro fetch banner now trips only when core dashboard sections are missing. Optional panels keep their own empty states, so one stale or newly-added panel no longer makes the whole dashboard look offline.
- Cache-safe frontend. Macro now loads
cw_macro_app.v20260507e.js with regression coverage guarding the required-section list.
May 7, 2026 (CRY-48/49/55)
Accountability and calibration backlog advanced NEW
- Composite forward returns hardened. The daily forward-return backfill now runs from the data service's own BTC price history and is scheduled by a dedicated systemd timer after the morning refresh.
- Adaptive Multi-Asset calibration. ETH/SOL/HYPE radar bounds now switch from fixed fallbacks to 4-year percentile bands when enough history exists. HYPE is treated as price-native, with on-chain-only metrics marked not applicable instead of inferred.
- Report-card backend started.
/api/prediction/accuracy now includes Brier score, reliability buckets, and calibration breakdowns by asset, model, and regime.
May 7, 2026 (Incident recovery)
Macro and Hunter live data restored after API crash loop FIX
- Data outage fixed. The shared data API was crash-looping, which made Macro and Hunter show HTTP 502 / loading states even though the page shell still loaded.
- Service hardened. The CRY-48 composite history helper no longer lets an optional forward-return backfill import prevent the live data API from booting.
- Macro runtime helpers restored. Active Macro JS now loads
cw_macro_app.v20260507d.js, restoring helper functions used by the Truth, Entity Regime, and HK ETF panels.
- Verified live. Macro snapshot data and Hunter verdicts are returning real values again; both production services are active.
May 7, 2026 (CRY-32 Phase 3)
Push notifications: 5 new macro signals and per-event opt-in FEATURE
- Five new push triggers. Browser notifications now fire on BTC cycle phase transitions, heat-regime changes, Fear & Greed crossing into the extreme-fear or extreme-greed zone, BTC perpetual funding spiking past ±50 % APR, and BTC dominance breaking through 40 / 45 / 50 / 55 %. All triggers are stale-data-guarded — if the underlying source is more than a few hours old, the trigger silently no-ops instead of firing on phantom data.
- Per-event opt-in. Subscribers can now turn off any individual event class from the Hunter alert modal — the eight toggles cover Hunter regime, concentration, CUT signals, cycle phase flip, heat regime, Fear & Greed, funding spike, and BTC dominance. Existing subscribers stay opted in to everything until they explicitly disable a category.
- iOS PWA support. Added an install banner that surfaces only on iOS Safari outside Home-Screen mode, explaining the Add-to-Home-Screen step required for push to work on iOS 16.4+. The web manifest now carries an explicit
id field so iOS 17+ keeps a single install entry rather than creating duplicates.
May 7, 2026
Home page snapshot render restored FIX
- First-screen hotfix. Fixed the missing 90-day forward-return variable that caused the Home page to show
Live snapshot unavailable. fwd50 is not defined.
- Regression guard. Added coverage so the redundant At-a-glance summary stays removed while the hero render path keeps its required forward-return binding.
May 7, 2026 (CRY-34/33)
Telegram alert credentials are now server-only FIX
- No browser bot secrets. Active Macro and Hunter app bundles no longer store Telegram bot token or chat ID values in localStorage and no longer call Telegram directly from the browser.
- Hunter alert modal simplified. The alert preferences UI keeps browser push controls and in-page event toggles, while Telegram delivery stays server/operator managed.
- Design drift guard expanded. The frontend token lint now scans active product HTML plus the active referenced CSS/JS bundles, catching high-confidence font, palette, radius, and spacing drift before it ships.
May 6, 2026 (CRY-30)
Manipulation Shield now has deterministic Pattern Intelligence receipts NEW
- ML-ready, not black-box. Shield v2 adds feature hashes, playbook-similarity matches, anomaly reasons, and sparse-source receipts while keeping the existing risk score and tier math unchanged.
- Honest calibration. The API reports
ml_status:not_enough_labels until enough real Shield outcomes exist for a supervised model.
- Hunter chip disclosure. Altcoin Scanner risk chips now show a compact Pattern Intel badge with the top deterministic receipts on hover.
May 6, 2026 (CRY-27/28/29)
Macro analytics wave adds provenance, regime backtests, and real altseason scoring NEW
- Scenario Tree receipts. Macro now shows live catalyst provenance plus replay/calibration status instead of static scenario cards.
- Curated regime backtests. The Plan & Track screen has preset-only historical return views for deep accumulation, value macro, crowded overheat, and alt-rotation setups.
- Real altseason composite. The altseason read now comes from BTC dominance, ETH/BTC, funding skew, and 200W-MA receipts instead of a local BTC-composite proxy.
May 6, 2026 (CRY-25.1 HYPE)
HYPE structured accountability now uses native native execution venue data NEW
- Real entry prices. New prediction tracker rows capture
hype_price_at_prediction from native execution venue mids when HYPE is in a structured call.
- Resolvable outcomes. HYPE price and direction calls now grade against HYPE candles, with native execution venue native daily candles as the fallback resolution source.
- Honest scope. HYPE is labeled as price accountability only, not a on-chain research cycle model; no fake historical HYPE calls were backfilled.
May 6, 2026 (CRY-25.1)
Structured prediction accountability hardened FIX
- Under-emission is visible. Debate tracker rows now record structured prediction health, including missing/invalid status and valid/invalid/raw counts.
- ETH/SOL-aware calls. The daily debate prompt now includes ETH and SOL cycle context, and structured outcomes resolve against the correct BTC/ETH/SOL candles.
- Safer asset scope. This pass kept HYPE blocked until the entry-price and resolution support added in the HYPE follow-up above.
May 6, 2026 (Mobile dashboard cleanup)
Macro and Hunter mobile now open straight into the real dashboards FIX
- Duplicated mobile decks removed. Macro and Hunter no longer show the phone-only command-card summaries or the old "Show full terminal" gate.
- Home carries the summary. The main page now has a compact Macro + Hunter summary for the high-level read, while the terminal pages stay focused on their actual panels.
- Cache-safe Hunter bump. Hunter now loads
cw_hunter.v20260506b.css and cw_hunter_app.v20260506b.js.
May 6, 2026 (CRY-26)
Macro composite now has a compact L1-L4 evidence trail NEW
- Layer receipts. BTC Composite Signal now shows four compact layer summaries for L1 Macro, L2 Cycle, L3 Capital / On-Chain, and L4 Execution.
- Collapsed by default. The old noisy always-visible breakdown table stays removed; receipts open only when you tap Show receipts.
- Same score path. The drawer uses the exact indicator rows that compute the gauge, so the explanation cannot drift from the verdict.
May 6, 2026 (CRY-25)
Prediction accountability now supports conditional and range calls NEW
- Structured prediction path. The daily debate can now emit falsifiable range calls and conditional direction calls with explicit probability and UTC resolution timestamps.
- Honest grading. Range calls grade against the deadline close; conditional calls count only if the named price condition actually fired. Failed conditions are tracked but not scored as wins or losses.
- Calibration-ready. Resolved structured calls now flow into the Brier/reliability calibration adapter and the prediction accuracy rollup.
May 6, 2026 (Desk mobile header)
Desk mobile header now matches Macro and Hunter FIX
- Correct mobile logo. Desk now uses the square CryptoWatch app icon on phones instead of squeezing the wide wordmark into a tiny square.
- Shared mobile shell. Desk keeps the same compact Home/Macro/Hunter/Desk surface nav visible on mobile, with Desk highlighted as the active surface.
- Cleaner drawer. The hamburger drawer now carries secondary Docs access only instead of duplicating the visible surface links.
May 6, 2026 (Mobile nav + Hunter)
Mobile drawers are no longer redundant, and Hunter content is visible again FIX
- Utility-only drawers. Macro and Hunter keep Home/Macro/Hunter/Desk in the always-visible mobile surface nav, while the hamburger drawer now only carries secondary utilities.
- Hunter mobile restored. The Hunter command deck is no longer hidden by the 7-screen tab switcher, so mobile users see the verdict, spotlight, smart-money summary, and full-terminal toggle immediately below the topbar.
- Stale mobile actions fixed. Hunter mobile buttons now open visible screen targets: verdict, token scanner, and smart-money flow.
- Cache-safe asset bump. Hunter now loads
cw_hunter.v20260506a.css and cw_hunter_app.v20260506a.js.
May 6, 2026 (Cycle tab spacing)
Cycle Position tabs now have breathing room below the divider FIX
- Cleaner tab rhythm. Added a dedicated top buffer to every Cycle Position tab pane so the first label no longer sits directly against the tab rail divider.
- Scoped fix. The spacing applies only inside the merged Cycle Position hero, preserving the tighter rhythm on other tabbed Macro panels.
- Cache-safe asset bump. Macro now loads
cw_macro.v20260506f.css.
May 6, 2026 (Cycle Position visuals)
LTH and Bottom Prox tabs are visual panels again FIX
- Restored visual styling. The Cycle Position hero's
LTH and Bottom Prox tabs now inherit the existing card, rail, segmented bar, cooldown bar, metric grid, and LTH chart styles instead of falling back to raw text.
- Root cause fixed. The merged tabs used
#cyc-lth / #cyc-bmvz, while the stylesheet was still scoped only to the old standalone #sec-lth / #sec-bmvz panels.
- Cache-safe asset bump. Macro now loads
cw_macro.v20260506e.css and cw_macro_app.v20260506h.js.
- Regression coverage. The public-surface test now follows the active Macro asset references and asserts the Cycle Position tab visuals stay attached.
May 6, 2026 (Public source disclosure)
Public docs now describe signal coverage without naming private data sources FIX
- Docs redacted. The public methodology page now uses source-neutral signal classes and cadence language instead of listing exact sources, source URLs, account tiers, call budgets, or private licensing details.
- Dashboard source controls removed. Macro no longer injects public upstream-source links; panel controls now point only to CryptoWatch methodology anchors.
- Qualitative Bias pointer fixed. The ETH/SOL/HYPE panel now opens its own methodology section instead of the older broad intelligence-feed anchor near Time Machine/source documentation.
- Panel links audited. Expanded Macro methodology links across the active panel set, added panel-specific docs anchors, and removed stale screen/search targets that pointed at panels no longer in the DOM.
- Regression coverage. Added tests to keep exact source names out of public Docs and to prevent the active Macro bundle from advertising upstream source links or the old source-specific API namespace.
May 6, 2026 (Docs rail)
The Docs page now uses the same page rail as Macro FIX
- Aligned shell. The Docs header, article start, bottom divider, and section TOC now use the same 1600px rail/gutter rhythm as Macro and Home.
- Readable article width. Long-form Docs copy stays capped at a readable width while no longer floating as a centered narrow island.
- Surface nav parity. Docs topbar now includes the Macro link alongside Home, Hunter, and Desk.
May 6, 2026 (Landing header)
The main page header now matches the Macro header style FIX
- Shared rail. The root page header, body, and footer now use the same constrained 1600px layout rhythm as the Macro terminal, so the brand line no longer floats wider than the content on large screens.
- Macro visual language. The landing topbar now uses the larger brand mark, aqua surface label, compact uppercase nav, rail-width divider, and matching utility controls from the Macro header system.
May 6, 2026 (Private release surfaces)
Changelog and Public API links are no longer advertised in the dashboard UI FIX
- Private until ready. Removed visible
Changelog links from the public topbars, mobile drawers, landing footer, Ledger empty/error states, 404 helper tiles, and sitemap.
- Public API hidden from navigation and source. Removed the
Public API footer link from the main page and moved the landing-page data fetch to a private /api/cw/composite/today alias so the page source does not advertise the public namespace.
- Regression coverage. Added a public-surface link test so
href="/changelog", /api/public, and visible Public API copy do not reappear on the public dashboard pages.
May 6, 2026 (Home nav label)
The main page is now labeled Home in the top navigation FIX
- Cleaner surface naming. The root page
/ still shows today's BTC read, but the topbar now calls the destination Home instead of exposing the old implementation name.
- Consistent cross-surface nav. Macro, Hunter, Desk, Track Record, Ledger, Docs, Changelog, and Desk Track Record now all label the
/ link as Home.
May 6, 2026 (Macro topic-specific Docs links)
Macro source and methodology buttons now jump to the exact Docs topic FIX
- Topic-aware routing. Macro source and methodology buttons now point to panel-specific anchors such as
/docs#composite-scoring, /docs#market-state, /docs#cycle-bottom-radar, /docs#proximity-forward-returns, /docs#dca-entry-zones, and /docs#macro-forecast instead of generic Docs positions.
- Matching Docs anchors. Added anchors for verdict summary, Macro overview, bento summary, composite scoring, diff feed, cycle position, bottom proximity, market heat, prediction, scenarios, DCA zones, qualitative bias, multi-asset, divergence, backtest, forecast, narrative, and daily report topics.
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260506f.js so the corrected panel map reaches browsers.
- Regression coverage. The Macro polish test checks every active
/docs#... link against real IDs in cw_docs.html and asserts the key panel IDs map to their exact topic anchors.
May 6, 2026 (Macro info popover containment)
Panel info popovers no longer take over the screen FIX
- Anchored to the panel. The
ⓘ explanation popover now opens inside its own Macro panel instead of positioning against the page.
- Height capped. Long methodology copy scrolls inside a compact popover, so clicking info does not cover the terminal.
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260506e.js and cw_macro.v20260506d.css.
May 6, 2026 (Macro intro banner removal)
Macro opens directly into the terminal again FIX
- Removed the intro placard. The old first-visit "4-layer BTC cycle synthesis" banner no longer occupies the top of
/macro.
- Kept the dashboard focused. Methodology and track-record links remain available through the normal navigation and panel controls instead of a large onboarding card.
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260506d.js and cw_macro.v20260506c.css.
May 6, 2026 (Macro header controls cleanup)
Duplicate info icons removed from Macro panel headers FIX
- One info control per panel. Removed the legacy
panel-info-btn injector that was adding a second ⓘ beside the newer panel info icon.
- Popover behavior preserved. The remaining info icon still opens the panel explanation, closes other open explainers, and supports outside-click / Escape close.
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260506c.js and cw_macro.v20260506b.css.
May 6, 2026 (Macro proximity panel cleanup)
Bottom Proximity outcomes panel is compact again FIX
- Removed the blank chart area. The dead fan-chart mount in Historical Outcomes was removed, eliminating the large empty block above the actual read.
- Reduced card overload. The panel now shows only the 7d / 30d / 90d outcome cards, and the all-bin comparison table is collapsed behind "Compare all score bins."
- Cache-safe asset bump. Macro now loads
cw_macro_app.v20260506b.js and cw_macro.v20260506a.css.
May 6, 2026 (Macro visible-flow fix)
Macro now starts with signal content again, and Market Pulse recovers FIX
- Glossary panel removed from the main terminal flow. The glossary definitions now stay as the hidden source for the fixed drawer instead of appearing above BTC Composite Signal across tabs.
- Market Pulse import fixed. Corrected the Python
from __future__ import order that caused the Market Pulse contract to return 500 and trigger the partial-fetch warning.
May 6, 2026 (CRY-21 completion)
Multi-Asset calibration now uses API-provided bounds and live-safe Macro routing FIX
- CRY-21 frontend completed. Macro now loads
cw_macro_app.v20260506a.js, and the Multi-Asset radars consume calibration_bounds from the snapshot API instead of duplicating hard-coded ETH/SOL/HYPE bounds in the browser.
- Legacy metric layouts supported. Cross-asset MVRV/NUPL loading now accepts both the new collector output paths and archived ETH/SOL metric folders so existing historical files can be used immediately.
- Live route hardened. HTML and static asset serving now supports both the local repo layout and VPS flat deploy layout, restoring verifiable
/macro behavior after the pathing refactor.
May 5, 2026 (late night — Macro fan chart + audit backlog)
Bottom Proximity forward-return fan chart, methodology links, source-attribution dedup, and feed-staleness watchdog NEW FIX
- Fan chart restored. The Bottom Proximity panel now renders a lightweight-charts median + p25→p75 band across 7/30/90/180/365d horizons, giving an immediate visual read of historical forward returns for the current score bin.
- Methodology links on every verdict panel. Each panel on the Verdict screen now carries a ⓜ chip linking to the relevant
/docs section so visitors can understand what they're reading without hunting.
- Source-attribution deduplication (Audit A.9). Sub-panels inside composite heroes (Execution Layer, Cycle Position, Liquidity & Capital, Multi-Asset) no longer show redundant ↗ chips; only the parent hero carries the attribution.
- Feed-staleness watchdog Phase 1. The freshness banner now computes stall ratios against expected cadences. When a feed exceeds 2.5× its normal interval it surfaces a red "STALLED" label on both the banner and the affected panel badge.
May 5, 2026 (night - Hunter regime scoring)
Hunter Edge Scores now respect the Macro regime NEW
- Regime-gated matrix. Hunter keeps the raw six-feature Edge Score, then applies a transparent Macro/Hunter regime multiplier before ranking Spotlight and matrix rows.
- Safer risk handling. HUNT boosts only medium/high-conviction setups, while CAUTION and RISK-OFF de-risk scores. A cautious BTC bias such as
Neutral / Trim Longs overrides a raw HUNT backdrop into CAUTION.
- Auditability preserved. Matrix rows now include
base_composite_score, regime_adjustment, and top-level scoring_regime; Hunter tooltips surface the multiplier.
May 5, 2026 (night — Macro e2e fix)
Macro runtime guard restores intro placard and Notify button synthetics FIX
- Production e2e root cause fixed. A removed Cycle raw-signals toggle still had an unguarded JavaScript listener, aborting later Macro handlers before the intro placard and Notify button could initialize.
- Fresh app cache key. Macro now loads
cw_macro_app.v20260505f.js so browsers and Cloudflare fetch the guarded runtime instead of reusing the stale immutable asset.
- Regression covered. The Macro polish test now asserts removed DOM controls cannot leave unguarded top-level listeners behind.
May 5, 2026 (night — KOL leaderboard)
Hunter KOL Trust Leaderboard now uses real CT-derived calls NEW
- Seeded mock route retired.
/api/hunter/kol-leaderboard now reads the live CT Emergence KOL tracker and returns {"_mock": false} instead of random seeded ledger rows.
- Honest pending state. Accounts appear as tracked immediately, while trust scores stay pending until the 7-day outcome window matures and each account has at least 3 scored calls.
- Visible Hunter panel. The Track screen now includes a KOL Trust Leaderboard panel backed by versioned Hunter assets
cw_hunter.v20260505b.css and cw_hunter_app.v20260505b.js.
May 5, 2026 (night — Macro panel merge wave)
Macro V2 panel merges are now consolidated into tabbed panels NEW
- Four dense lanes collapsed. Execution Layer, Cycle Position, Liquidity & Capital, and Multi-Asset Read now use in-panel tabs instead of separate repeated panels.
- Multi-Asset is easier to scan. Rotation Radars, ETH/BTC Checklist, and Cross-Asset Bottom are grouped under one Plan & Track panel with the partial-mock badge preserved for BTC-generic alt thresholds.
- Fresh CSS cache key. Macro now loads
cw_macro.v20260505e.css so tab/order fixes reach live browsers cleanly.
May 5, 2026 (night — Execution Layer tabs)
Macro Execution Layer now uses in-panel tabs for Options, Funding, and Liquidations NEW
- Safer execution merge path. `OPTIONS`, `FUNDING`, and `LIQUIDATIONS` are now grouped inside one `sec-execution-layer` panel using in-panel tabs to avoid breaking screen-map and deep-link wiring.
- Source IDs preserved. `sec-options`, `sec-funding`, and `sec-liquidations` IDs remain intact inside their tabs so existing render paths and data-population logic are unchanged.
- Stale links removed. References to removed `sec-manipulation-watch` were removed from `screenMap`, documentation-anchor mapping, and source-link source mapping to prevent non-existent DOM targets.
May 5, 2026 (night — Ledger chain-tip publication telemetry)
Ledger chain-tip pipeline now records end-to-end status
- Chain-tip outputs are observable. Daily artifact writes now expose `chain_tip_artifact` status (success/failure) through
/api/ledger/publication-status with the latest hash, path, and payload metadata.
- Controlled failure handling. Missing `chain_tips` rows are treated as a known operator-readable event instead of a silent no-op, helping detect scheduler and backfill issues quickly.
- Regression coverage. New backend tests cover successful write + publish flow, missing-row failure behavior, and first-day monthly JSONL dump behavior.
May 5, 2026 (night — Chase Risk map support)
Chase Risk now screens Solana narrative tokens again FIX
- Chain-aware map loading.
rug_scan now preserves curated solana token addresses from narrative_token_addresses.yaml instead of dropping them on an EVM-only 0x gate.
- No behavior drift for EVM. Ethereum / Base / Arbitrum / Optimism / other EVM entries still require
0x-prefixed addresses, so existing screening logic stays strict where it needs to be.
- Regression guardrail added. Added
backend/onchain-signals/tests/test_hunter_rug_scan.py to lock the parser behavior and prevent future regressions.
May 5, 2026 (night — Ledger verifier hardening)
Ledger hash-chain verifier now rejects invalid date windows FIX
- Safer query surface.
/api/ledger/verify now validates start and end as strict YYYY-MM-DD values and returns a clear 400 when formats are invalid.
- Day-complete windows. End-date filtering now includes the full day (
T23:59:59+00:00) and start/end ordering is checked before verification runs.
- Regression coverage. New backend tests cover happy-path verification, date bounds, invalid chains, and inverted date ranges.
May 5, 2026 (night — Ledger publication status observability)
Ledger chain-tip publication now exposes operator status telemetry NEW
- Visibility for operator flows. The ledger now writes publish-attempt status for X/Twitter attestation and Base memo jobs into `/api/ledger/publication-status`.
- Guarded and explicit. Missing credentials and disabled feature flags are recorded as `skipped`/`disabled`, so operators get clear outcomes without noisy exceptions.
- Safe by default. Public status includes only sanitized metadata + recent capped attempt history; no token values are exposed in responses.
May 5, 2026 (night — Macro mobile phase 3)
Macro mobile Cycle card now shows evidence receipts before the full terminal NEW
- Cycle receipts on phones. The mobile Cycle Position card now includes compact State, Value, Bottom, and Halving receipts populated from the live dashboard snapshot.
- Exact deep links. Tapping a receipt opens the full Macro terminal, switches to the Cycle screen, and lands on the matching evidence panel.
- Fresh cache version. Macro now loads
cw_macro_app.v20260505d.js and cw_macro.v20260505d.css for the receipt rendering and styling.
May 5, 2026 (night — Macro mobile phase 4)
Macro mobile deck gains Capital Flow and BTC Funding panels NEW
- Mobile refinements. The mobile command deck now features "Capital Flow" and "BTC Funding" cards to bring critical liquidity and execution data to the first mobile viewport.
- Deep-link precision. Tapping the new cards hands off directly to the
sec-liquidity-capital-hero and sec-execution-layer panels in the full terminal.
- Fresh cache version. Macro loads
cw_macro_app.v20260505e.js for the data-binding logic in renderMobileCommandDeck.
May 5, 2026 (night — Macro mobile phase 3.5)
Macro mobile deck gains Plan & Track accountability card NEW
- Mobile accountability. The mobile command deck now features a "Plan & Track" card surfacing historical backtest metrics (hit rate and sample size).
- Predictive fallback. If backtest data is temporarily unavailable, the card dynamically degrades to display today's directional prediction confidence.
- Deep-link precision. Tapping the new card hands off directly to the Forecast Accountability Ledger (
sec-track-record) in the full terminal.
- Fresh cache version. Macro loads
cw_macro_app.v20260505d.js for the data-binding logic in renderMobileCommandDeck.
May 5, 2026 (night — Macro mobile phase 2)
Macro mobile summary now opens the exact terminal section you need NEW
- Touch actions on the phone deck. The mobile verdict, cycle, prediction, and heat cards now include direct open buttons.
- Section-aware terminal handoff. Tapping an action reveals the dense terminal, switches the relevant Macro tab when needed, and scrolls to the matching section.
- Fresh cache version. Macro now loads
cw_macro_app.v20260505c.js and cw_macro.v20260505c.css for the mobile action wiring.
May 5, 2026 (night — Round 9 P2 empty states)
Macro panels now explain missing snapshots instead of showing bare placeholders FIX
- Structured empty states. Pulse, Prediction Debate disagreement, and smart-money smart-money flows now render explicit empty-state cards when their source payload is absent.
- Safer flow rendering. The smart-money flow grid now builds rows with DOM APIs and
textContent rather than raw HTML string injection.
- Fresh cache version. Macro now loads
cw_macro_app.v20260505b.js and cw_macro.v20260505b.css so the polish reaches browsers despite immutable asset caching.
May 5, 2026 (night — Round 9 P2 payload polish)
Macro's main app assets are now cacheable static files PERF
- Smaller HTML shell. The largest Macro app script and core stylesheet moved out of
cw_macro.html, cutting the HTML response by roughly 1.08 MB.
- Long-lived cache paths. The extracted files are served from
/static/cw/cw_macro_app.v20260505.js and /static/cw/cw_macro.v20260505.css with immutable cache headers.
- Boot order preserved. The app script remains blocking at the same point in the page so downstream inline modules keep the same execution order.
May 5, 2026 (night — Round 9 P2 verdict permalinks)
Daily BTC verdicts now have shareable archive URLs NEW
- Stable verdict links. Stored daily public verdicts now resolve at URLs like
/v/2026-05-05, with date-specific title, description, canonical, Open Graph, and Twitter metadata.
- Snapshot-backed only. Archive pages are served only when a saved public composite snapshot exists, so old links do not pretend reconstructed history is a fully saved daily verdict.
- Time Machine handoff. The page opens the matching stored composite and prediction data, and its Macro CTA deep-links into
/macro#tm=YYYY-MM-DD.
May 5, 2026 (night — Round 9 P2 glossary access)
Macro glossary is now available from anywhere NEW
- Fixed glossary button. A compact
? utility opens the Macro glossary without scrolling through the dense terminal.
- Searchable drawer. The slide-in drawer includes 18 cycle, macro, valuation, derivatives, and flow definitions with a built-in filter.
- Static fallback preserved. The same glossary remains as a bottom panel in Plan & Track for reference, search, and print.
May 5, 2026 (night — Round 9 P2 accessibility polish)
Macro panel titles are now real headings FIX
- Screen-reader navigation. The Macro terminal's panel titles now use semantic
h2 headings instead of title-only spans, so assistive tech can navigate the dashboard by section.
- Visual design preserved. The headings inherit the same compact panel-head styling, sizing, and spacing as before.
- Cleaner heading text. Source and info icons still appear beside panel titles, but no longer become part of the heading name.
May 5, 2026 (night — Round 9 P2 funding polish)
Funding table opens on liquid majors, with full tape one click away FIX
- Liquid majors by default. The Macro Funding Regime table now starts with markets whose 24h volume is above $50M, sorted by volume, instead of only BTC / ETH / SOL / HYPE.
- Full funding tape toggle. A new Funding universe control lets users switch from
Majors > $50M volume to the full native execution venue funding tape and back.
- Synthesis preserved. The headline funding read and carry math still use the BTC / ETH / SOL / HYPE decision-framework sample, while the table can inspect broader leverage skew.
May 5, 2026 (night — Round 9 P2 polish quick wins)
BTC signal naming and qualitative alt-bias labels tightened FIX
- BTC Composite Signal label. The Macro hero now names the asset explicitly as
BTC Composite Signal, so the headline verdict is not confused with ETH / SOL / HYPE reads elsewhere on the page.
- Qualitative alt-bias panel. The ETH / SOL / HYPE panel is now labeled
Qualitative Bias and its help copy says clearly that it is AI-debate output, not an asset-specific cycle model yet.
- Explicit empty state. If the daily alt-bias report is missing, the grid renders a quiet empty-state message instead of silently collapsing into blank space.
May 5, 2026 (night — Round 9 audit P1-8 as-of persistence)
Time Machine now has server-side daily snapshots NEW
- Stored as-of reads.
/api/cw/snapshot?as_of=YYYY-MM-DD now checks the server-side daily snapshot store first, returning the exact saved dashboard state when that date exists.
- Available-date APIs. New
/api/cw/snapshot/dates and /api/public/v1/composite/dates endpoints list stored daily snapshot dates, and the Macro date picker loads those dates into its native date suggestions.
- Public composite history path.
/api/public/v1/composite/today?as_of=YYYY-MM-DD now supports stored historical reads while preserving the existing live schema for bots and spreadsheets.
May 5, 2026 (night — Round 9 audit P1-1 mobile Macro first pass)
Macro on phones now opens with a command deck before the dense terminal NEW
- Mobile-first Macro read order. Below 768px,
/macro now opens with a phone command deck that follows the Round 9 audit target: BTC Composite Signal → Cycle Position → Daily Context → Market Heat. The dense 48-panel terminal is still there, but it no longer dominates the first viewport on phones.
- Explicit full-terminal toggle. A 48px touch-safe "Show full terminal" control reveals the normal Macro grid, screen pills, and footer on demand. Desktop/tablet behavior is unchanged.
- Same data path as desktop. The mobile deck reads the existing snapshot state and composite renderer; no duplicate endpoint, no mock values, and no
innerHTML updates were added.
May 5, 2026 (late-evening — Round 9 audit Tier 1: 4 of 7 P1s closed)
macro-data TGA + Net Liquidity, visible ⓘ info icons on every panel, /audit ledger with per-field accuracy NEW
- macro-data TGA + Net Liquidity wired into
macro_layer. Round 9 audit flagged Macro Analyst persona at 2/5 because TGA + computed net liquidity were missing alongside the existing DXY / RRP / WALCL / yield-curve / real-yield primitives. Now collected: macro_layer.tga_bn (Treasury General Account, macro-data WTREGEN daily), macro_layer.net_liquidity_t (= WALCL − TGA − RRP, the real liquidity available to private markets after Treasury sterilization), plus 30-day deltas on each. Live verification: TGA $981.9B, Net Liquidity $5.717T, 30d Δ −$0.150T. (One unit bug caught + fixed: WTREGEN reports in millions like WALCL, not billions like RRPONTSYD — first VPS run produced TGA = $981,929B before the ÷1000 conversion. Saved by the log line.)
- Visible ⓘ info icons on every panel head. 176 hidden
title tooltips on /macro but 0 visible help affordances — methodology discoverability was near zero per the audit. 40 panels already carried <details class="panel-info"> drawers with authored "what is this & how to use it" content; only the discoverability layer was missing. Auto-injector (same pattern as the source-link icons) drops a small ⓘ button next to each panel title that toggles the drawer + scrolls into view. ARIA state stays in sync with the native toggle so keyboard users get the same UX as click users.
/audit ledger surface + per-field accuracy on /track-record. The 88.9% accuracy badge headline was undefendable per the audit ("a skeptic asks 'show me yesterday's call and yesterday's outcome with timestamps and prices' and there's no way to produce it"). Now: /audit 301-redirects to /track-record, and /track-record renders a new 9-field per-field accuracy table with plain-English label + resolution criterion + correct/total/accuracy% + trade-grade flag + click-to-expand recent calls. Defends the badge by exposing which field it represents (new_7d_high_today, 8/9) alongside the other 8 fields' accuracy. Trade-grade methodology (n≥5 AND ≥60%) made explicit in the UI for the first time.
- MVRV tooltip fix. The source-chip tooltip for
mvrv_ratio had an inverted formula: 'realized cap ÷ market cap' should have been 'market cap ÷ realized cap'. Audit's broader concern about confusing the classic MVRV with the Cointime-adjusted investor_cap_usd we expose alongside is now closed at the tooltip layer ('market cap ÷ realized cap (classic; not Cointime-adjusted)').
May 5, 2026 (evening — Round 9 audit Tier 0: P0s closed, dual-surface split shipped)
Verdict-first landing surface at /; dense terminal moved to /macro; trap-divergence price now live NEW FIX
- New verdict-first landing at
/. External Round 9 audit flagged that / and /macro were byte-identical 1.22 MB payloads — new visitors landed on the densest, most-overwhelming surface with zero triage. / now serves cw_landing.html: a 32 KB hero + 3 cards (Composite Verdict / Today's Prediction / Heat Composite) with explicit forward-return distribution, heat-band visualization, and a clear "Open Macro Terminal →" CTA. The dense Macro terminal now lives at /macro as a direct route (was a 301 redirect to /). Topbar nav on the Macro terminal relabeled accordingly: Verdict / Macro (active) / Hunter / Desk.
- Trap-divergence price decoupled from daily on-chain research cadence. Mid-day fix wired
cycle.signals.current_price through _fetch_live_spot_btc (native execution venue allMids → secondary spot fallback, 30s cache). The Round 9 auditor caught a remaining stale source: trap_divergence.state.btc_price was still reading parquet's daily-cadence BTC price, leaving it ~$1k below the funding panel's live spot. Now the trap layer reuses the cycle helper. Verified live: trap and cycle now match exactly ($0.00 diff); diff vs funding panel is $4.50 (0.0056%) which is pure timing noise.
- e2e CI workflow back to green. The
surface_nav.spec.js PRIMARIES list still required every page to link to /intelligence — a surface retired on May 4 (now 301-redirects to /). 7 of 17 tests had been failing on every push since the refactor, spamming GitHub Actions with red builds. Removed /intelligence from SURFACES + PRIMARIES; tests now match live navbar.
May 5, 2026 (afternoon — forward-return base rates + public API + CSV export)
The decision-system layer is live: every score now has a 15-year historical base rate, and a public API + CSV export unlocks Pine / Excel / Grafana / trading-bot integration NEW
- Forward-return distribution panel. The single biggest missing piece per the audit consensus. For every historical day going back to 2011 we re-compute the bottom-proximity composite using the same scoring logic the dashboard uses today (Puell + Pi-Cycle + 2Y MA + Mayer + AHR999 + optional Reserve Risk / NVT / MVRV-Z / LTH-MVRV / NUPL / ETF flows / HCS / Active 1y+) — that's 5569 days of history. We then bin every day into one of six cycle-phase tiers (Extended / Late cycle / Mid cycle / Accumulation / Deep accum / Capitulation) and compute BTC's actual 7-day / 30-day / 90-day / 180-day forward returns per tier. The new panel surfaces all of it: a hero line ("When score was at DEEP ACCUM (n=475 historical days), BTC delivered 7d median +X% · 30d +Y% · 90d +11% · 180d +Z%"), a 6-card tier grid with the current band aqua-pinned ("▼ you are here") showing 90d median + p25–p75 IQR, and a plain-language base-rate caption. This is the "when the score was here, BTC did this" answer five auditors all said the dashboard didn't have until today.
- "What changed today" diff-feed panel. For nine curated indicators (MVRV-Z, LTH-MVRV, Puell, AHR999, NUPL, Reserve Risk, Hot Capital Share, Active 1y+, BTC price) we compute the day-over-day delta and divide by the metric's 30-day rolling standard deviation — that's a z-score. Top-10 by |z| are surfaced in a new panel above the forward-return panel: each row shows the z-tone (bull/bear), label + source, a centered visual bar (length = |z|/4), the delta value, and the current value. Rows where |z| ≥ 2 (a 95th-percentile move for that specific metric in normal regime) get extreme-tone borders. This is the "first scroll" answer for returning users — it turns the dashboard into a streaming feed without forcing 47 panels of polling.
- Public API + CSV export. Four new stable-contract endpoints under
/api/public/v1/: /composite/today returns a concise public-facing snapshot (score, current band, 90d forward-return base rate, 10 macro primitives, 7 tier-1 indicators, deployed build SHA for reproducibility); /composite/forward-returns proxies the historical distribution; /diff-feed?top=N proxies the diff feed; /export/{name}.csv streams whitelisted CSV exports (forward-returns / bottom-proximity / diff-feed / composite-today) with proper Content-Disposition: attachment so curl -OJ saves with the right filename. The /api/public discovery index lists all four with full schema docs + curl examples. Built for charting Pine integration, custom Excel models, Grafana, trading bots, and DuckDB workflows.
- As-of date picker more discoverable. The time-machine UI was always plumbed (date input, presets, hash-shareable URLs) but auditors couldn't find the trigger button. The button now has an aqua-tinted gradient background, a soft glow, and a renamed label: "AS-OF · TIME MACHINE" instead of just "time machine". The audit-named term is now in the affordance.
May 5, 2026 (mid-day — five-auditor audit response, 13 findings closed)
L1 Macro depth doubled, source-link icons on every panel, v2 weights default, live spot decoupled from daily cadence FIX
- L1 Macro layer doubled in depth. Five macro-data primitives the backend was already collecting now contribute to the composite score: WALCL (Fed balance sheet 4-week change), T10Y2Y (10Y−2Y yield curve), RRPONTSYD (overnight reverse repo), DFII10 (10-year real yields), and BAMLH0A0HYM2 (HY credit spread). The "4-layer framework" now has macro carrying eight scoring slots instead of three. Macro-Analyst persona stress test should land much closer to 5/5 — five external auditors all flagged the prior thinness as the single biggest gap. A defensive DXY fallback also now reads the cached parquet's last value when the macro data gateway errors out, so a transient API outage no longer wipes the field from the live snapshot (the field comes back tagged
stale: true for honesty).
- Source-link ↗ icons on every panel. Forty-three panels now have a small upward-arrow icon next to the title that opens the canonical upstream source in a new tab — research, options, derivatives, macro-data, smart-money, exchange-flow, charting, and sentiment, plus self-links to /docs for CryptoWatch-original synthesis like the cycle bottom radar and tactical layer. The hover tooltip names the source. Closes the audit finding that "0 of 49 outbound links pointed at the upstream sources the dashboard quotes."
- BTC spot price decoupled from the daily on-chain research pull. The cycle panel was reading
current_price from the same once-a-day on-chain research fetch that updates MVRV / NUPL / SOPR, while the funding panel showed live native execution venue spot — auditors found a $589 (0.74%) disagreement between the two panels in the same snapshot. Now the cycle layer pulls live spot from native execution venue allMids (secondary spot fallback, 30-second cache, time-machine mode preserves the parquet value at the historical date). Drawdown, MVRV-Z implied price, BMVZ proximity, and every other live-derived calc now match what the funding panel shows.
- v2 quality-weighted scoring is now the default. Tier-1 cycle anchors (Puell / MVRV-Z / Mayer / NUPL / AVIV / Reserve Risk / Hash Ribbons) get a 1.5× weight, macro regime indicators 1.2×, default 1.0×, short-horizon noise (funding, IV, skew, OI deltas) 0.7×, sentiment 0.5×. The methodology that used to be hidden behind
?weights=v2 is now what every reader sees. The previous equal-weighted v1 mode is still available via ?weights=v1 for back-comparison, and the divergence between the two is still logged to localStorage every render.
- Heat-composite band thresholds published in API. The heat response now carries a
bands array with explicit (label, min, max) pairs for Ice Cold / Cold / Warm / Hot / Burning. Closes the audit finding that "the band labels look authoritative but a user can't audit the breakpoint."
- Build-drift detection. Every snapshot response carries a
build_sha field with the deployed commit, plus a new /version.txt endpoint. The dashboard captures the SHA on first load and surfaces a non-blocking "NEW BUILD · Refresh" toast (bottom-right) when later snapshots disagree — so a long-open tab is no longer silently behind the latest deploy. Replaces the prior "hard-refresh first" workaround which was misdiagnosed (the service worker was never the cause).
- Layer-multiplier discontinuity smoothed. The BTC-SPX correlation step function (corr>0.6 → L1 weight 1.5×; corr<0.3 → L1 weight 0.75×) is now linear interpolation across [0.3, 0.6] with edge-clamping. Composite verdict no longer flips by 2–3 points purely from correlation drifting across a boundary day-over-day.
- Multi-Asset panel tagged "PARTIAL MOCK". The radars use live drawdown / weekly RSI / 200W / funding feeds, but the threshold normalization bands ("−80% to 0% drawdown is the cycle range") are BTC-cycle generic and applied uniformly across all four assets. Until ETH / SOL / HYPE get asset-specific calibration, the panel head now carries a yellow
PARTIAL MOCK badge with explanatory tooltip — closes a known AGENTS.md mock-discipline gap.
- Track Record breakdown chips. Above the predictions table, a new chip row breaks the resolved-directional sample down by bucket: total / pending / NO_TRADE-abstain / inconclusive-<1% / directional. The directional chip is the actual
n the headline percentage divides by — "0/12 hit rate" now reads with sample-size context rather than as failure.
- /intelligence URLs redirect to /macro. The Evidence Graph surface was intentionally removed last week ("data dump, no daily value"); legacy URLs were returning 404 and external auditors / share-links were treating them as a regression. Catch-all 301 redirect closes the misread without bringing the page back.
- One small JS error fixed. A leftover
setInterval targeting a removed DOM element was throwing a silent TypeError every second on /macro page loads. Removed the orphan; the legitimate update path was already null-guarded.
May 5, 2026 (morning — Hunter panel-health pass)
Funding Rotation rebuilt, Emergence marquee revived, Narrative Correlation freshness label corrected FIX
- Funding Rotation hero — full rebuild. The panel had three compounding issues: (a) the annualization formula was off by 100× (derivatives analytics returns funding as
% per period, not a decimal fraction), so BTC was rendering as −272% when the real number is −2.7%; (b) the "alt basket" averaged every non-BTC ticker including equity perps (NVDA / TSLA / MSTR) and meme dust (GIGA / USELESS) that dominate the top-30 funding-extreme list, polluting the rotation signal with non-crypto noise; (c) the visual was just a comma-separated wall of text. Rewrite: backend flags 24 curated crypto majors (BTC / ETH / SOL / BNB / XRP / ADA / AVAX / LINK / DOT / TRX / BCH / LTC / NEAR / AAVE / UNI / ATOM / ARB / OP / INJ / APT / SUI / TIA / HYPE / DOGE) with a crypto_major flag; the hero filters on it. New visualization: prominent rotation-score number with verdict tone, two reference bars (BTC vs alt-avg) on a shared auto-scaled axis, top-N alt chips driving the basket, methodology footer.
- Emergence marquee tape revived. The scrolling tape of newly-listed tokens at the top of /hunter has been silently empty for at least 24 hours. Diagnosis: the listings-window lookback was hardcoded to 24 hours, but the documented status machine is
new → rising (≥3d) → candidate (≥7d). Tokens fell out of the listings window before they could age into rising or candidate, and the merge step discards prior candidates not present in the current window — so nothing could ever survive past 24 hours. Lookback widened to 7 days (matching the longest state-machine threshold). Live candidates jumped from 0 to 7 (AVNT, KAT, WRON, CORE, ORBS, BLEND, ASSET — 4 are tier-1 exchange listings).
- Narrative Correlation panel —
STALE badge fixed. The panel was showing STALE · 59m AGO on every page load, even though the underlying data is computed hourly and was actually fresh. The freshness helper defaults to cadence:'live' (which trips STALE after 10 minutes), but the data refreshes hourly. Added the missing 4th argument; the panel now correctly stays green up to 90 minutes after each refresh, matching its real cadence.
- Three regression-test invariants pinned. The funding-heatmap response now has machine-checked tests for (a) BTC / ETH / SOL anchor rows always present, (b) no duplicates when a major is itself extreme, (c) curated
crypto_major flag accurate (NVDA / TSLA / MSTR / PEPE all return false). Emergence has tests for the lookback-vs-state-machine invariant and the 4-day / 8-day window-edge behavior.
May 4, 2026 (night — Haiku narrative panel slimmed)
Italic AI narrative removed from Desk and Hunter; stays on Macro FIX
- Italic Haiku narrative panel pulled from /desk and /hunter. The
// HAIKU · 12H AGO italic prose block was rendering across all three surfaces, making it feel like the same blurb was following you around. Decision: keep it on /macro where a one-paragraph tone-of-the-market read belongs; remove it from Desk (decision-support — vibes shouldn't mix with pin discipline) and Hunter (already data-dense). Macro panel unchanged.
- Backend timers stopped + disabled + removed.
cw-narrative-desk.timer (every 4h) and cw-narrative-hunter.timer (daily) get cleaned up by the next infra/deploy.sh run. Haiku token spend on those two surfaces goes to zero. The Macro daily timer keeps firing.
- Legacy narrative runner retired. Its scheduled job, CLI package, and stale surface-specific outputs were removed with the Hunter-era narrative pipeline.
May 4, 2026 (PM — Round 3 verification + Round 6 + general-health quad)
NOTIFY ME finally fixed (3rd attempt); DESK $0M display bug; Capital partial-input honesty; UX verification policy superseded May 8 FIX
- NOTIFY ME button — third attempt, this time with rendered verification. Two prior rounds claimed this fixed; Round 3 verification clicked it and found the label still didn't change. Actual root cause: when permission is "default" and the user dismisses the prompt, sync() fell through to the same default label. Now: third sync() branch surfaces "Click again after allowing notifications" with a pending visual state. The temporary Playwright regression guard from this round was superseded on May 8 by the local Browser Use policy.
- DESK liquidations were silently rounding to "$0M". The renderer did
(value / 1e6).toFixed(0) which truncates 0.571M to "1" and 0.099M to "0". On quiet sessions the feed produces $100k–$800k values which all rendered as $0M, reading as "broken feed" for 4 audit rounds. Now: $Xk for sub-million, $X.XM for ≥1M. Same class of bug as the WIB timezone issue last week — formatted output ≠ underlying data.
- Capital "Liquidity data still loading…" was lying. The composite required ≥2 of 3 inputs (ETF flows / capital pipeline / LTH supply). When fewer arrived, the panel said "still loading" forever — implying async wait when upstream might just be quiet. Now: 0 inputs → "Composite read unavailable — upstream feed quiet"; 1 input → show that input with "(partial · 1 of 3)" suffix; 2+ → full composite.
- Surface-nav unified. Track Record + Ledger now appear in the secondary nav on /track-record, /ledger, /docs, /changelog — previously the secondary pages used different templates without those links, so cold visitors landing on /track-record from a share couldn't reach /ledger or other pages without typing URLs.
- AI staleness chip moved to panel header. Macro's "generated 16h ago" was buried inline in body text; Hunter's "YESTERDAY · 17H AGO · AI SYNTH" pattern lived in the panel-meta chip. Macro now matches Hunter — same TODAY/YESTERDAY prefix, same chip slot, same pattern.
- Track Record NEUTRAL banner uses honest math. Previous version counted "unanimous NEUTRAL across all three horizons" which returned ~0 for current data and made the banner meaningless. Rewritten to surface pending count + NO_TRADE count + sub-1% INCONCLUSIVE count, decomposing the 0/N directional figure honestly.
- Superseded May 8: browser QA is local-only. The temporary GitHub Playwright gate from this round was removed after it drained hosted Actions minutes. Rendered UX checks now belong on the local Mac through Browser Use/local browser, and GitHub is repo storage only.
May 4, 2026 (CryptoWatch Remediation & Optimization)
RPC key rotation, AVIV BTC-USD translation, and Alert UI FIX
- private RPC key rotated out of source code. Removed hardcoded RPC URLs from the Hunter on-chain research/Solana backend clients. The system now securely fetches the private RPC endpoint from the
PRIVATE_SOLANA_RPC environment variable, fully complying with external-secret management standards.
- Tier 2 AVIV Ratio BTC-USD price translation. The AVIV Ratio cycle indicator in the Cointime Layer now dynamically displays the "BTC ≡ $X at 1.0" translation anchor. This lets you read exactly what BTC price constitutes fair value (1.0) in real-time, bridging the abstract ratio back to an actionable price target.
- Alert Notification UI wired. Connected the
makeAlertButton(key) factory to the Tier 1 and Tier 2 convergence cards on the Macro dashboard, enabling per-indicator notification toggles.
- Narrative AI token tracking. Added VIRTUAL, ZEREBRO, GOAT, AI16Z, and GAME to the
narrative_token_addresses.yaml file to track emerging AI agent tokens on Base and Solana.
May 4, 2026 (triple-audit follow-ups)
sec-intel auto-collapse fixed; cross-surface nav extended; gauge math disclosed; QUANT gross/net APR; "What this is" placard FIX
- sec-intel "Cross-Asset Positioning" panel was being auto-collapsed. Round 2 audit caught a real regression — the 2026-04-26 IA reorg explicitly moved this panel up to position 5 of 11 so BTC/ETH/SOL/HYPE positioning was visible without scrolling past 4 BTC-only panels, but a separate
autoCollapseReferencePanels() routine on desktop was hiding it behind "+ EXPAND". Auditor reported markup said "always visible," but JS said otherwise — the fix is in the JS. Panel now stays expanded.
- "Notify me on verdict flip" button gives proper feedback. The wiring was correct, but toast confirmation was easy to miss (off-screen, auto-dismiss). Button label now surfaces the underlying state directly: "Notifications blocked — see browser settings" / "Push not supported by this browser" / "Verdict-flip alerts on" / "Notify me on verdict flip" — every click always changes something visible, regardless of toast timing.
- Top-nav extended. Track Record + Ledger added to the secondary nav (and mobile drawer) on Macro, Hunter, Desk, and Intelligence. Cold visitors now have a discoverable path between every surface — social audit audit P1 #1.
- "What this is" placard for cold visitors. 3-line aqua-bordered card at the top of the dashboard: "4-layer BTC cycle synthesis · updated daily. Not a price tracker. Not an alerting tool. One composite verdict (BUY/WAIT/SELL · ±24) with full receipts." Dismissable; regulars don't see it twice.
- Gauge math fully disclosed in /docs §06. Round 2 audit flagged that 21 indicators × ±2 = ±42 theoretical max, but the gauge caps at ±24 — silent normalization. Documented in /docs methodology + PRD §5.1 + a tooltip on the gauge meta-line: per-indicator clamps to ±3 after layer-strength multipliers, then total clamps to ±24 for display. Effective historical range across 11 years is ~−12 to +14 — STRONG BUY (≥+16) and STRONG SELL (≤−16) have not yet been hit live.
- AI Synthesis "generated Xh ago · next run 08:10 WIB" tag. Always-visible on the Daily Context hero sub-line so the freshness is clear even before the >18h EXPIRED banner fires.
- DESK QUANT card now shows gross / est. net APR + delta-neutral note. Funding-harvest cards previously displayed gross APR only ("10.95%"); after borrow on the spot leg + basis-rebalance slippage, realistic net is closer to 6-8%. Card now reads "10.95% gross / ~7.1% est. net" with a "Delta-neutral · independent of HTF directional bias" note for delta-hedged strategies. Net haircut is a placeholder (~20% on BTC/ETH, ~35% on alts) until a real cost model lands.
- /ledger and /track-record empty-states honest about why. Ledger fetch failures now surface a real error (was silent
console.error); track-record gets a "Reading the directional hit rate" context banner that quantifies the NEUTRAL/SIDEWAYS share so 0/N directional reads as "abstained" not "failed". Range-based grading lands in a future revision.
May 3, 2026 (night, general-health audit cleanup)
Security + scope hygiene — push test endpoint gated, hourly push paused, mock leaderboard flagged, paid lookup removed FIX
- Extra paid lookup dropped. The private search path was making one extra paid-API call per pasted contract address solely to populate a token symbol that was never displayed alongside its companion price field (every callsite pinned price_24h_pct = 0). The paid lookup client + its hardcoded fallback key are gone; search still returns the CryptoWatch safety verdict + manipulation-shield breakdown. Unused source was already abandoned in v1; the unused config was scrubbed alongside.
- /api/push/test now gated. The browser-push self-test endpoint had no auth — anyone could POST it and trigger a noop notification to every subscriber. It now requires the same private push token header as the sibling sibling broadcast endpoint.
- Hourly server-side push triggers paused. PRD §2.2 #4 says the morning brief is the alert. The hourly push module (commit 1752500, shipped after PRD ratification and never reconciled) now defaults off; flipping CW_PUSH_TRIGGER_ENABLED=1 re-enables it but the operator owes a codified narrow-exception note before doing so.
- KOL leaderboard now self-flags as mock. /api/hunter/kol-leaderboard is seeded by random calls from 5 placeholder handles; real CT/X scraping is operator-blocked on X API access. Response now carries {"_mock": true, "_mock_reason": "..."} so external API consumers and auditors can detect it programmatically.
- Two deploy scripts collapsed to one. Root deploy.sh had drifted 6.7KB out of sync with infra/deploy.sh — running the wrong one silently omitted intelligence + ledger + push module + timers. Root deploy.sh is now a thin shim that execs into the canonical infra/deploy.sh.
- Doc-sync sweep. /intelligence, /desk, and /ledger are now first-class product surfaces in PRD §4. AGENTS.md mock-endpoint inventory now matches PROJECT_STATUS reality (6 of 8 endpoints flagged as mock in April 2026 are now real; the kol-leaderboard is the remaining mock).
- Type-scale lint extended. Snapped raw 15px/22px font-size literals to var(--fs-body-lg) and var(--fs-display-sm) tokens across hunter, macro, and hit-rate. Added lint-frontend-tokens.sh — chained from lint-design.sh — that catches future drift toward those two specific anti-patterns.
- CI expanded. pytest.yml runs the test suite on every PR + push; secret-scan.yml runs gitleaks. Three previously-deselected tests (two exchange-flow_client + one collector) were fixed and re-enabled — the suite is now 699/699 instead of 696/696 with 3 hidden.
May 3, 2026 (late-PM, Round 4 audit follow-ups)
?weights=v2 now surfaces divergence on the gauge meta line; Hunter "N stale" header names the source FIX
- ?weights=v2 is finally visible. The quality-weighted scoring prototype was correctly running server-side (verdict band swapped, soak data logged to localStorage every render) but rendered no DOM diff — an external reviewer correctly flagged the page as "byte-for-byte identical." Now the composite-signal meta line reads "v2 weights ON · v1 was +X · diff +Y" when the flag is on. When the flag is off but |v2-v1| ≥ 2, a subtle hint surfaces: "v2 would say +X (diff +Y)" — operators see the experiment moving without flipping. Tooltip explains the priors (Tier 1 anchors 1.5×, macro 1.2×, default 1.0×, short-horizon noise 0.7×, sentiment 0.5×).
- Hunter header "N stale" cleanup. Two coupled bugs in
updateStaleness(): (1) the amber/warn branch fired on maxAge > 60, but most hourly Hunter pipelines have a server-side max_age_minutes of 70 — so a perfectly healthy pipeline at 65min would naturally trip the frontend warn even though the server reported all 20/20 ok. (2) The label always concatenated "· N stale" even when N was 0. Now: amber only fires when the server flags a real stale source, and when exactly one source is stale the label names it directly ("stale: kol_scores") instead of forcing the user to hover the tooltip.
May 3, 2026 (PM)
External-audit follow-ups — deep-linkable tabs, dynamic right-rail, WIB timezone bug fix, hero-KPI honesty FIX
- Macro tabs now sync to the URL. Click VERDICT / CYCLE / CAPITAL / EXECUTION / PLAN and the URL updates to
?tab=cycle etc. — share or bookmark a specific view. Browser back/forward also moves between tabs as expected. (Verdict is the default and uses the bare URL.)
- Right-rail panel navigator now follows the active tab. The floating ☰ navigator on the right used to show a hardcoded VERDICT-screen panel list regardless of which screen you were on, including some panels that had been deprecated months ago. It now rebuilds to show only the panels visible on the current screen.
- Silent timezone bug. Two helpers that formatted timestamps with " WIB" appended were actually using the viewer's local clock — so a user in NY would see their NY time mislabelled as WIB. Both now compute a real WIB time (UTC+7) and the label is honest.
- Hero KPI relabelled for honesty. The "Framework track record" tile was reading as a passing-grade. It now leads with "Cycle calls · since 2015 (backtested)" with the small-N visible (
5/9 · cycle turns (n=9) · ≠ daily predictions). The auditor's specific concern was the side-by-side with the daily-prediction hit rate; the two are now visibly disambiguated.
- Daily Prediction summary card relabelled. The verdict-summary bento card matches the panel reframing from May 2 — now reads "Daily Context · AI" with the same "context, not signal" tooltip. Stops the bento card from undoing the panel's careful framing.
May 2, 2026 (PM-12)
Pulse v1.9 — LTH Supply in Profit + cohort spread, predictions reframe, mobile pass, audit-response credibility layer NEW
- Two new tactical cards: LTH Supply in Profit (70.7% accumulation) + LTH–STH Spread (+14.0pp compressing). The spread is a real new analytical signal — cycle tops feature a specific cohort transfer where long-term holders distribute to short-term holders. Wide spread = late-bear LTH accumulation; compressed = late-cycle STH catch-up; inverted = euphoria. Even with the composite radar reading BOTTOM-CLUSTER (77/100), the spread shows early STH catch-up — a subtle late-cycle hint embedded in a broadly bullish read. Tactical Layer card count is now 11 (was 7 this morning).
- Predictions panel reframed engine → context. Renamed to "Daily Context · AI Synthesis · read as context, not signal." New banner at the top forces the credibility frame: "Use this panel to read the day's narrative; size positions off the cycle/DCA/Desk panels instead." The per-field accuracy table now splits into three groups: trade-grade (≥60% with n≥5, default visible green), tracking (n<5, default visible blue), and below-trade-grade (collapsed under "Show N below-trade-grade fields — context only, do not trade" red toggle). Operator no longer has to mentally filter for what's trustworthy.
- Honest percentile replacing fake "2Y" math on the composite gauge. The previous "Nth percentile over 2Y" was a linear rescale of the score, not a percentile. It now reads from rolling localStorage history with a sample-aware label: "TRACKING (1/7 days for percentile)" until 7+ days, then real rank-based percentile that auto-calibrates as more days accumulate.
- Credibility chips on every prediction accuracy reading. Sub-trade-grade now visibly carries the caveat: "BELOW COIN-FLIP · context not signal" (under 45%), "BELOW TRADE-GRADE · context only" (under 60%), "TRACKING · need ≥5 calls" (under 5 samples). Visible in both the collapsed panel-head chip and the expanded per-field table — operators can't anchor on the percentage in isolation.
- Mobile pass — WCAG AAA touch targets across all 3 surfaces. Macro: ⓘ buttons 20→28px visual (44×44 hit area), notify-on-flip toggle 21→44px, ↓ Markdown 34→44px. Desk: pin/why buttons 36→44px, plus a fix to the 178px page-level horizontal scroll on Desk mobile (was missing the same overflow-x: clip rule the Macro page already had). Hunter: screen-nav-pill 36→44px. Stronger scroll-fade indicator on screen pills.
- Daily-cadence freshness labels. AI synthesis panels (Daily Intelligence, Daily Prediction, Catalysts, Cross-Asset Positioning, Fear & Greed) now lead with "TODAY · 13h ago" or "YESTERDAY · 27h ago" instead of just raw "13h ago" — which read as broken even though those sources are intentionally daily-cadence. STALE only fires when genuinely out-of-cadence (>36h for daily sources, >10min for live).
- Indicator-quality weighting prototype on the composite signal (opt-in via ?weights=v2). External audit critique was that equal-weighting across 21 indicators is naive. The v2 weighting applies heuristic priors: Tier 1 zero-FP cycle anchors (Puell, MVRV-Z, AHR999, Mayer, NUPL, AVIV, etc.) at 1.5×, macro regime indicators at 1.2×, default 1.0×, short-horizon noise (funding, IV, skew) at 0.7×, sentiment at 0.5×. Both totals computed every render; localStorage logs daily v1/v2 divergence for 60-day rolling soak. Today's reading: composite v1 = -2 (MILD SELL), v2 = -1 (WAIT) — meaningful movement. v1 stays default until soak data justifies promoting v2.
- Hunter Smart Money cohort denominator. "546 wallets holding" was statistically meaningless without scale; now reads "546 smart-wallets holding · rank 1/21 in cohort · 5.2x median (105)." Operator gets significance from the snapshot itself.
- API error sanitizer. When upstream AI/research APIs time out or fail, users no longer see raw HTTPSConnectionPool tracebacks or hostnames in the analyst view. Friendly fallback at both backend and frontend layers.
May 2, 2026 (PM-11)
Site-wide UI/UX cleanup — palette unified, off-brand fonts removed, Hunter amber fixed FIX
- Three pages were silently shipping forked design systems. The track record, the per-persona desk track record, and the public hit-rate page each redeclared the cw palette with off-by-1 hexes and swapped the body font to Inter. They now inherit the canonical 2018 brand palette (Neon Blue + Aquamarine on dark) and use Lato/Switzer/Fira Code like the rest of the product. The look should feel quietly consistent across every page now.
- Fonts no longer ping Google. The Docs, Changelog, Hunter, and Hit-Rate pages were loading Rajdhani (banned), Doto, Space Mono, and Inter from
fonts.googleapis.com on every visit. All four pages now load self-hosted woff2 — same fonts you've been seeing, but instant and offline-friendly.
- Hunter "fresh" amber was actually yellow. The
--amber token was set to the warning-yellow hex by mistake, so every "emerged in last 24h" element was rendering as a warning instead of fresh-state. Now correctly resolves to #F59E0B per the Hunter sub-system spec — the amber glow is back.
- Wordmark identity bug. Several non-Macro pages (track record, docs, changelog) were displaying "CryptoWatch Macro" in the topbar even though they're not Macro pages. They now read "CryptoWatch | TRACK RECORD" / "DOCS" / "CHANGELOG" etc.
- Macro page lost three perpetual animations. A pulsing money-flow indicator, a pulsing report-toggle badge, and an arrow-bouncing teaser all kept animating forever once data loaded. They've been replaced with static cues (border halos, badge fills) — same affordance, no jitter.
- Desk page touch targets fixed. The persona-filter tabs and per-card pin buttons were rendering at 22-25px tall on desktop, below the 32px touch-target floor. Now lift to 32px in the base rule (was only being applied at the 768px mobile breakpoint).
- Dozens of smaller fixes. Body sizes snapped to scale, mono numerics restored where Switzer had taken over, focus rings made 2px solid neon-blue per spec, transparent card backgrounds replaced with proper panel fills, off-palette grays replaced with canonical text-dim. Full per-page report at
docs/ui_audit_2026-05-02.md.
May 2, 2026 (PM-10)
Cycle Radar v1.8 — Market State headline + Supply-in-Profit cards + Fair-Value Cluster NEW
- Market State headline above the radar (Tier C). Single-glance Vector-style read: state band (BOTTOM-CLUSTER / BOTTOM-LEANING / NEUTRAL / TOP-LEANING / TOP-CLUSTER) + action verb (Aggressive accumulate / Accumulate / Hold / Reduce / Distribute) + explicit allocation hint (90/10 down to 10/90 BTC/cash). 7-day and 30-day score trajectory shown below so you know if the verdict is strengthening or fading. The "what do I DO with the score" gap that the radar by itself never closed.
- Fair-Value Cluster composite (Tier D). Compact summary card consolidating Puell + Mayer + AHR999 + 2Y MA into one normalized 0-100 fair-value position, anchored to ETF-era observed extremes. Bands: 0-15 DEEP UNDERVALUE / 15-35 UNDERVALUE / 35-55 FAIR VALUE / 55-80 WARM / 80-100 EUPHORIC. Component sub-line shows each indicator's normalized position so divergence is visible at a glance. Additive — the four individual cards remain below for drill-down.
- Percent Supply in Profit + STH Supply in Profit cards (Tier B). Two cycle gauges added to the Tactical Layer. The BTC-wide Supply in Profit was already collected and used internally by the cycle scorer — now surfaced. STH Supply in Profit is the cohort-specific version (short-term holders <155d), most-volatile and leads the broader series; on-chain research Week 15 anchored it at 43.2% reading / 54.2% recovery threshold. Tactical-card count: 7 → 9.
- Macro page top-to-bottom layout: Market State hero → Fair-Value Cluster → Cycle Bottom Radar → 14 individual cycle indicator cards → 9 tactical cards.
May 2, 2026 (PM-9)
Tier 3-alt — Active Supply 1y+ + Realized P/L Ratio added NEW
- Active Supply 1y+ added to Cycle Indicators grid. on-chain research "HODL strength" metric — share of supply that hasn't moved in 1+ years. Currently 59.84% — flagging "active cohort" reading (new buyers still cycling, classic mid-bear LTH-distribution pattern). When this rises toward 66%+ it would signal HODL accumulation; above 70% would mark deep cycle-bottom HODL like Sep 2024. Useful counterweight signal — currently flagging that LTHs haven't yet absorbed new buyers, so we may not be at the cycle low yet.
- Realized Profit/Loss Ratio added to Tactical Layer. 30-day EMA of profit-realization vs loss-realization across the network. Currently 1.28 — slight profit-taking edge, "balanced" reading. At Oct 2025 price peak this was 18.3 (extreme distribution). At Mar 2026 capitulation it bottomed at 0.54 (loss-realization dominated). Cycle radar now combines 14 cycle indicators + 7 tactical cards.
- Real Tier 3 deferred (needs new collectors). Three more on-chain research-cited indicators were on the original Tier 3 list but require new data infrastructure: CME Basis Yield (BTC + ETH carry-trade returns; needs CME futures price feed), DAT flows (corporate treasury BTC accumulation à la MicroStrategy; needs SEC EDGAR scraper or on-chain research Pro subscription), STH Realized Profit Volume per hour (hourly STH-segmented profit-taking; needs hourly on-chain research pull). All three would meaningfully extend the radar but were out of scope for this session.
May 2, 2026 (PM-8)
Tier 2 on-chain research ingestion — Hot Capital Share + Skew + Vol Risk Premium + STH-NUPL NEW
- Hot Capital Share added to Cycle Indicators grid. on-chain research's "proportion of capital from new investors over past 3 months" metric. Currently 13.11% — extreme bottom-zone reading (ETF-era min 12.15%). Old coins dominate, classic accumulation signature. Votes in the cycle composite radar at 0.9 weight. The radar now combines 13 cycle indicators.
- 25-Delta Skew added to Tactical Layer. Options-market fear gauge (puts vs calls). Currently 13.6% on the 3-month tenor — "persistent downside hedging premium" per on-chain research Week 17. Above 15% would signal elevated fear (potential bottom); above 25% = panic capitulation.
- Vol Risk Premium added to Tactical Layer. Spread between 1-month implied volatility (36.9%) and realized volatility (36.4%) — currently +0.47 points, "aligned." Matches on-chain research's "no pressure for vol to reprice higher" reading. Negative VRP would mean options under-pricing risk = complacency before regime change.
- STH-NUPL added to Tactical Layer. Short-term holder cohort's net unrealized profit/loss, distinct from the whole-market NUPL above. Currently -0.009 — STHs sitting essentially at breakeven, neither in capitulation nor greed. The fastest-moving cohort sentiment read.
- Tactical Layer now 6 cards (was 3 in PM-7). Cycle radar 13 indicators (was 12). The dashboard now reads cycle position from a much richer cross-section of cohort + valuation + flow + derivatives signals.
May 2, 2026 (PM-7)
Tactical Layer added — STH Cost Basis + Cost Basis Levels + Funding Regime NEW
- Three short-horizon tactical indicators (weeks, not months) sourced from on-chain research's most recent Weekly On-Chain reports + Market Pulse + Strategy Watch publications. Sits as a new panel between the Cycle Bottom Radar and the Cycle Indicators grid. Different time horizon, complements rather than replaces the long-cycle radar.
- STH Cost Basis — currently $78,904. The single most-cited tactical level in institutional research. Above this line = bull regime, below = bear regime. ±1σ bands at $69k (oversold) and $89k (overbought) define the natural support/resistance corridor. BTC currently 0.87% below = bear regime per on-chain research framing.
- Cost Basis Levels — Network-wide cost basis ladder showing Realized Price ($54k), Median Realized Price ($64k), and current BTC ($78k). Price holding above all three = healthy uptrend. The middle level approximates on-chain research's True Market Mean.
- Funding Regime — 30-day moving average of perpetual funding rates with 90-day percentile context. Currently in the bottom 12% of the 90-day range — "deepest sustained short bias on record" per on-chain research Week 17. Contrarian-bullish: bears are paying carry, short squeeze fuel building. The catalyst would be BTC breaking above the STH cost basis at $80k.
May 2, 2026 (PM-6)
Cycle Bottom Radar v1.6 — Hybrid ETF-era calibration with bottom anchors NEW
- Bottom thresholds recalibrated for the next cycle bottom. v1.5 only updated TOP thresholds. The deeper insight: bottoms compress under the same ETF-era mechanics as tops (LTHs not capitulating, ETF spot floor, realized cap absorbing both directions). v1.6 anchors bottom thresholds to the deepest readings observed since ETF launch (Feb 2026 bear lows: MVRV-Z 0.32, NUPL 0.12, Reserve Risk 0.0010, etc.). The radar now correctly recognizes the current bottom-zone — readings that v1.5 called "neutral" or "optimism" now correctly vote bottom (NUPL 0.31 → hope-fear, LTH-MVRV 1.63 → accumulation).
- Extreme capitulation tiers added. Critical caveat: the last confirmed cycle bottom was Dec 2022 at $15,500 — pre-ETF. We have no confirmed ETF-era cycle bottom yet. Feb 2026 readings are best estimate but might not be the final low. The "extreme_capitulation" tier is reserved well below current observed mins, in case the next bottom pushes deeper. If that happens, the radar will fire a stronger bottom signal AND we'll release v1.7 with refined thresholds.
- Top thresholds re-anchored to true on-chain highs. v1.5 anchored to Oct 2025 price peak ($124k). v1.6 properly identifies that ETF-era on-chain TRUE highs were earlier — Mar 2024 (post-ETF launch euphoria, Puell 2.44, NUPL 0.64) and Dec 2024 (post-election spike, MVRV-Z 3.49, LTH-MVRV 4.39). Indicators now fire "warm" at Oct 2025 readings AND "extreme" at Mar/Dec 2024 readings, providing 6-12 month early warning before the next price top.
- Radar header now shows "ETF-era v1.6". When/if a future regime shift requires v1.7, the version label will bump and operators will see the change.
May 2, 2026 (PM-5)
Cycle Bottom Radar v1.5 — ETF-era recalibration (all 11 classical indicators fire at Oct 2025 top) NEW
- All classical thresholds recalibrated. The v1.4 honesty audit revealed every classical indicator failed to fire at the Oct 2025 cycle peak ($124,715). The classics were calibrated on retail-driven 2013/2017/2021 cycles; the ETF era has different mechanics (institutional bid, LTH wrapping into ETFs instead of dumping, no parabolic blow-off). v1.5 recalibrates each threshold against the Oct 2025 reading as the new "this is what an ETF-era top looks like" anchor. Pi Cycle "fired" lowered from ratio 1.0 to 0.55. MVRV Z-Score "top" lowered from 7 to 2.5. Puell "warm" lowered from 2 to 1.0. Mayer "warm" lowered from 2.4 to 1.15. Reserve Risk "warm" lowered from 0.02 to 0.0021. ETF flows "outflow" tightened from -500 BTC to -200 BTC. All 11 classical indicators (excluding Hash Ribbons which is bottom-side by design) now fire TOP at the Oct 2025 reading.
- Bottom semantics preserved. Only the TOP thresholds were tightened. The radar reads the current bottom-zone state correctly: Puell <1, MVRV-Z <1, Reserve Risk in fire-sale, NUPL in optimism. The recalibration doesn't bias toward "always seeing tops."
- "ETF-era v1.5" calibration tag on the radar header. The composite radar at the top of the screen now displays its calibration version explicitly. If a future regime requires re-calibration, that tag will bump (v1.6, v1.7, etc.) and you'll see the change in the meta line.
- Backtest column updated. Each card's bottom line now shows "2025 top ✓" with the new calibrated reading + threshold instead of the v1.4 "✗ didn't fire." The radar is now honest about its calibration AND explicit about its anchor point.
- Calibration philosophy. One ETF-era data point is better than zero. If next cycle has the same mechanics, the calibration holds. If different, we'll recalibrate again with two data points. Never claim infallibility — the radar is a weighted opinion, not truth.
May 2, 2026 (PM-4)
Cycle Bottom Radar v1.4 — honesty pass: 2025-top backtest + NUPL + ETF flows NEW
- Brutal-honesty backtest column on every cycle indicator card. The radar's classic indicators (Pi Cycle, MVRV-Z, Puell, Mayer, etc.) all FAILED to call the actual Oct 2025 cycle top at $124,715 — Reserve Risk was even reading "bottom" at the top. The 2024-25 cycle has been ETF-led, not retail-led, which compresses every classical indicator that depends on retail euphoria or LTH dumping. Each card now shows a line at the bottom: "2025 top ✗ <value> (need ...)" — failed in rose, fired in cyan. You see exactly which indicators have a known false-negative on this cycle's top, instead of trusting a low score blindly.
- NUPL added. Net Unrealized Profit/Loss — the ONE classical indicator that fired correctly at the Oct 2025 top (read 0.56, in the >0.5 greed band). Earned its TOP-side credibility this cycle so it gets the heaviest top-side weight (1.5). Currently reading 0.31 (optimism band — neither greed nor fear).
- ETF Flow Regime added. Genuinely ETF-era specific signal — 30-day cumulative net BTC ETF flow direction. Persistent inflows = institutional accumulation regime; flow flip to negative = distribution warning. At the 2025 top this read -275 BTC over the surrounding ±14 days, a clear top-zone confirmation that no classic indicator caught. Currently reading -105 BTC over 30d (neutral, mild outflow).
- Composite now 12 indicators. Did NOT hindsight-recalibrate the failed classics — that would be curve-fitting one cycle and would break the indicators in future regimes. The honest move is the backtest column showing the limits, plus the new ETF-era indicators that materially improve the radar's top-detection ability.
May 2, 2026 (PM-3)
Cycle Bottom Radar v1.3 — MVRV Z-Score + LTH-MVRV added (10-indicator composite) NEW
- MVRV Z-Score card. The universally cited cycle indicator — measures market value vs realized value, normalized by volatility. Every BTC cycle bottom in history has been marked at MVRV Z-Score below zero; every cycle top above 7. Currently reading 0.83 (accumulation zone). Gets the heaviest weight in the radar (1.4/1.4) — earned, given the historical track record.
- LTH-MVRV card. The long-term holder unrealized profit ratio. When LTHs are at unrealized loss (<1) it's a capitulation marker; when they're sitting on extreme profit (>5) it's distribution territory. Currently 1.63 — LTHs are in modest profit, no cycle pressure either way. The neutral reading here is a useful counterweight to the deep-bottom valuation indicators.
- Composite radar now 10 indicators. Cycle Bottom Radar at the top of the screen factors all 10 signals into the headline confidence number. Sparkline trajectory extended too — last 30d range shifted slightly (85-92 → 83-88) reflecting LTH-MVRV's neutral state moderating the otherwise unanimous bottom-cluster reads from the heavy valuation indicators.
May 2, 2026 (PM-2)
Cycle Bottom Radar v1.2 — Reserve Risk + NVT Golden Cross added NEW
- Reserve Risk card. This long-holder conviction indicator measures long-term holder conviction relative to price. When LTHs hold tight while price is depressed, Reserve Risk drops into the "fire-sale" zone — historically a deep cycle-bottom marker. Currently reading 0.00118 (well into fire-sale territory).
- NVT Golden Cross card. A classic NVT (network value to transactions) variant with MA-cross momentum. Computed from realized cap / daily USD transfer volume, then a 10-day MA crossing a 35-day MA from a deep dip below the 365-day average = "golden cross fired" buy signal. Currently neutral (network usage and value tracking near long-term avg, despite Reserve Risk and the on-chain valuation indicators screaming bottom — interesting divergence).
- Composite radar now 8 indicators. The Cycle Bottom Radar at the top of the screen now factors all 8 signals into the headline confidence number. Sparkline trajectory also extended to include Reserve Risk and NVT in the per-day composite — last 30d range shifted slightly (90-100 → 85-92), reflecting the more balanced 8-indicator weighted average.
May 2, 2026 (PM)
Cycle Bottom Radar v1.1 trajectory + Hash Ribbons post-fire history NEW
- Cycle Bottom Radar 30-day sparkline. A new trajectory line under the headline confidence score shows where the composite has been the last 30 days (valuation indicators only — Puell, Pi, 2Y MA, Mayer, AHR999). The meta line surfaces direction: "climbing · +5 over 7d, +12 over 30d" or similar. The headline number tells you where we are; the sparkline tells you where we've been heading.
- Hash Ribbons post-fire history anchor. Hash Ribbons is a hash-rate signal, not a price ratio — it has no math-based BTC anchor (unlike Puell or AHR999). The new second card line surfaces the EMPIRICAL anchor instead: median BTC return at +90d and +180d after each of the 37 historical buy-fires, with the implied BTC anchor at current price. Example: "post-fire ⌀ (n=37) · +90d +5.9% ($82,828) · +180d +40.8% ($110,103)". Frames the historical regularity without pretending it's fair-value math.
- Continued spacing token cleanup. Snapped a third wave of off-scale values — 18px → 16px tier, 22/26px → 24px tier — across 8 dashboard pages. Same theme as today's earlier 9px/30px sweep; system feel now significantly more uniform on the spacing scale.
May 2, 2026
Cycle Bottom Radar composite + accessibility skip-nav across the dashboard NEW
- Cycle Bottom Radar. A new composite panel above the Cycle Indicators cards combines all six valuation signals (Puell, Pi Cycle, 2Y MA, Mayer, AHR999, Hash Ribbons) into a single 0–100 confidence score for "are we in a high-conviction cycle bottom zone." Each indicator votes bottom / neutral / top using its established threshold, and the votes are weighted by historical reliability (Pi heavy on top-side, Hash Ribbons heavy on bottom-side). When Hash Ribbons fires alongside two or more valuation indicators, the radar surfaces the historical ~80% bottom-cluster accuracy explicitly. Per-indicator chips below show every vote so you can see the score's composition at a glance.
- Skip-to-main-content link on every page. Tab into Macro, Hunter, Desk, Docs, Ledger, Track Record, or any other page and the first focused element is now a "Skip to main content" link in the top-left — keyboard users no longer have to tab through the topbar nav before reaching the body. Standard WCAG 2.4.1 pattern, visually hidden until focused.
- Reduced-motion respect everywhere. Eight pages that didn't previously honor
prefers-reduced-motion: reduce now do — animations and transitions collapse to ~zero duration if your OS-level "reduce motion" setting is on.
- Spacing token cleanup. Snapped a batch of off-scale 9px and 30px values (padding / margin contexts) to the nearest design-system token. Visual delta is sub-pixel on most pills, +2px breathing on a couple of empty-state paddings — system feel is more uniform without any single panel changing in a noticeable way.
May 1, 2026
Desk gets per-tile freshness, lens switcher, killzone clock, and pin toast NEW
- Per-tile freshness dot. Every Desk tile now shows a small status dot bound to its upstream cache age. At a glance you can see which feeds are warm and which are about to roll over — no more guessing whether a quiet tile is "calm market" or "stale data."
- Lens / persona switcher tab strip. A new tab strip across the top of /desk lets you flip between persona views without re-loading. Pairs with the existing per-persona pin validity windows from Sprint 3c.
- Killzone label + symmetric countdown. The killzone clock now shows both pre-killzone ("opens in") and post-killzone ("closes in") symmetrically, with a clear label of which session is active. Useful when scanning the page outside your timezone.
- Pin toast + ledger anchor scroll. When a pin is accepted, a toast confirms the call and clicking it scrolls /ledger directly to the new row. Pin response also carries
valid_until_iso so the freshness UI knows exactly when the call expires.
April 30, 2026
Hunter Smart-Money flows now cover the full matrix NEW
- Per-ticker smart-money flows for the matrix top-15. Previously, the Hunter matrix's Flow Confirmation sub-signal only had smart-money data for BTC, ETH, and SOL — the other ~15 narrative tickers stubbed at 0.5. We restored the smart-money labels integration (which had been off since April 19 due to credit exhaustion), upgraded to the Pro tier, and added a per-matrix-ticker flow worker that pulls smart-money cohort flows (smart_trader, top_pnl, whale, fresh) for every top-15 ticker every 6 hours. When SM cohorts move on a Solana meme or AI token, the matrix score now reflects that.
- Daily smart-money holdings digest. A new daily worker computes the day-over-day delta in smart-money cohort holdings — useful for spotting "SM is rotating out of ETH into HYPE" type patterns. Surfaces in the Hunter pipeline now; a dedicated panel and morning-brief integration are queued.
- Smart-money labels credit usage badge in the page footer. Sibling to the DEX analytics CU badge — shows month-to-date credit consumption against the 10K monthly cap. If projected burn exceeds 80% of cap, the meter automatically dials back the per-matrix flow cadence to protect the budget; same structural kill-switch design as the DEX analytics meter.
- Both meters now calibrated against live dashboards. Fired controlled probes against the DEX analytics and smart-money labels feeds, measured the actual cost-per-call delta on each source's dashboard, and adjusted the meter's cost tables to match reality. Both throttle thresholds will now trip at the right time instead of late.
April 29, 2026
Hunter Smart-Wallet flow + Security shield + new emergence channels NEW
- Real Smart-Wallet flow signal on the Hunter matrix. The matrix's Flow Confirmation sub-signal previously stubbed at 0.5 for every ticker outside BTC/ETH/SOL — now we track an 80-wallet smart-money roster (auto-bootstrapped + extended via top-traders discoveries) and diff their portfolios every 6 hours to compute net USD inflow per matrix ticker. Composite scores for narrative tickers can now meaningfully exceed 5/10 on confirmed setups.
- Security badges on matrix rows. Honeypot / freezeable / non-renounced-owner risks render as red/yellow/green dots next to the ticker; honeypot-flagged tokens are visually demoted below clean rows. Operator agency preserved — the badge is presentational, score is unchanged.
- "Smart wallets buying X" in the evidence drawer. Click any matrix row — the drawer now shows the most recent BUY trades from our smart-wallet roster against that ticker (rolling 200-row tape, $5K minimum). "0x3b11…2112 bought $12K of ABC" with a timestamp.
- New listings emergence channel. Tokens with recent on-chain trade activity ≥$50K liquidity surface in the Emergence Radar alongside the existing exchange-listings diff and AI-stub channels.
- CU usage badge in the page footer. Live counter showing the month's DEX analytics CU spend vs the 1.4M monthly cap, with projection percentage. Soft-throttle and hard-throttle states tint the badge yellow/red so any quota-burn anomaly is visible without grepping logs.
- What's still warming up: the Smart-Wallet flow signal stays gated behind a flag during a 24-hour soak window. Once projection lands in the safe zone (~95% utilization with margin), the flag flips and matrix scores will reflect the new signal.
April 30, 2026
Freshness timestamps on AI panels NEW
- X Intelligence and Catalysts panels now show when they were last generated. Previously, the panels only showed the number of items but not when the AI last ran. The panel headers now dynamically display "updated X mins ago" using metadata from the backend fetch pipelines, making it immediately clear how fresh the intelligence is.
April 29, 2026
Time Machine popover now anchors to its button FIX
- The popover opened far below and to the left of the TIME MACHINE button instead of dropping cleanly under it. The screen-pills nav uses a frosted-glass
backdrop-filter, and per CSS spec any non-none backdrop-filter on an ancestor traps position: fixed descendants — so the popover's coordinates resolved against the small nav box instead of the viewport. The same root cause was also leaving the mobile centered-modal at the bottom of the screen instead of the centre. The popover now portals to <body> on open (and restores back to its wrap on close), so it escapes the trapping ancestor in both layouts. Outside-click and Escape close it as before; clicking inside the popover no longer dismisses it mid-edit.
April 28, 2026
Time Machine popover now actually opens FIX
- Clicking the TIME MACHINE button did nothing. After moving the trigger into the screen-pills row earlier today, the popover was being rendered but the screen-pills row container has horizontal-scroll behaviour that was clipping anything dropping below it — including the popover. The popover now floats free of the row using fixed positioning anchored to the trigger, the same pattern the Jump-to dropdown already uses. It also re-anchors on window resize, and the mobile drawer entry still opens the same centered modal as before.
April 28, 2026
Time Machine moved out of the topbar FIX
- The TIME MACHINE button could end up hidden behind a horizontal scrollbar on intermediate screen widths. The Macro topbar packed the surface nav, secondary nav, search, time machine, BTC chip, regime badge, and live-status into one non-wrapping row, which overflowed the viewport on widths between phone and full laptop. Time Machine now lives next to "Jump to ▾" in the screen-pills row instead — both are framework-level controls, both wrap cleanly, and the topbar is permanently uncluttered. The cyan trigger looks identical; the popover and presets behave identically; the mobile drawer entry continues to work the same way.
April 28, 2026
Cycle phase bar now labels the ghost marker inline FIX
- Small legend under the cycle bar. The dashed marker that shows the cycle position 30 days ago was documented in the panel-info details, but that block is collapsed by default — first-time viewers had no obvious cue what "solid vs dashed" meant. The bar now has a tiny inline legend ("[ ] today [-] 30d ago") underneath, switching to "7d ago" when 30d data isn't available, hiding entirely if there's no historical reference.
April 28, 2026
Hunter side-rail nav now works across screens FIX
- The 24-section right rail on Hunter only worked for the active screen. Hunter's a 7-tab UI (Verdict / Narratives / Rotation / Early / Token / Watchlist / Track), and each tab hides every other tab's panels. Clicking a rail link for a section that lived on a different tab scrolled to a hidden anchor, so visually nothing happened. Fixed: rail links now switch the screen tab first, then bring the target panel into view. Same-screen clicks behave exactly as before.
April 27, 2026
Macro design hardening pass
- Brand-color discipline. Twenty-four spots across the page were tinting their alpha-fills with a stray emerald (Tailwind's
#34D399) while their solid borders used the brand aquamarine (#50FCD1) — same selector, two off-brand colors. All alpha-fills snapped to the brand aquamarine. Most visible on the LTH cohort tracker, cycle confluence, divergence flags, and capital-horizon highlights.
- Doto + Space Mono are now official. The "Nothing-design" experiment scoped two days ago to the Composite Signal panel had grown page-wide on its own. Either back it out or bless it — we blessed it. DESIGN.md now lists Doto (hero numerals) and Space Mono (panel heads, BTC chip) alongside Lato / Switzer / Fira Code. The fonts are now self-hosted as woff2; the page no longer pings
fonts.googleapis.com on every load.
- Accessibility. Macro bento-grid cards were anchors with onclick handlers but no
href, which broke keyboard navigation. They are real <button> elements now, focusable and screen-reader-friendly. Chart-timeframe pills and panel-info ⓘ icons gained a 44px tappable hit area on touch (visual chrome unchanged).
- CSS housekeeping. Ten alias variables (
--muted, --positive, --negative, etc.) that the codebase referenced via fallbacks but never declared at :root are now declared. A future rebrand of any token now ripples in one place instead of being silently absorbed by inline fallbacks.
April 27, 2026
Desk page — new look (pilot) NEW
- The Desk page has a new look. Pure black canvas, instrument-panel cards with hairline borders, dot-matrix display fonts (Space Grotesk + Space Mono + Doto), and terminal-style Braille spinners on every loading and live-data heartbeat. Monochrome chrome with the signature aqua-positive / rose-negative data accents preserved. The other pages (Macro, Hunter, Track Record, Docs, Changelog, Ledger) are unchanged for now.
- Pilot of a tighter, more disciplined design language. If it lands well we'll propagate to the other surfaces. Reference: Nothing-design-skill.
- Notable interactions. Click a ticker card to expand it — the price reveals in dot-matrix Doto 48px, the "data is alive" instrument moment. Pin buttons now read
[ pin ] instead of the 📌 emoji; shield badges read [ ${shield} ] instead of 🛡. The live-data heartbeat next to each timestamp is a slowly-cycling Braille glyph (⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏) instead of the aqua pulse dot. The topbar shows a W glyph + vertical divider + "Desk" surface label (no wordmark image).
April 26, 2026
Bottom Proximity forward-return chart NEW
- Closes the master report's only audit MISS (Q6). Given the current Bottom Proximity Score, what's the historical forward return over 30 / 90 / 180d when this score fires? New panel on the Cycle screen joins proximity history with BTC price, bins proximity into quintiles (0-20, 20-40, 40-60, 60-80, 80-100), and reports per-bin median + mean + range for each forward horizon. Bins with fewer than 5 samples are excluded.
- Highlighted current-bin card at the top of the panel shows where today's score sits + the conditional forward distribution so you can read the historical edge (or lack of one) for the regime you're actually in. All-bins table below for context.
- Honest caveat panel documents small-n risk and the regime-change disclaimer — past forward returns ≠ future, and the model assumes the regime that produced the samples still applies.
April 26, 2026
Execution Layer composite hero NEW
- Single-line read at the top of the Execution screen. Synthesizes funding, options, and liquidations into one verdict:
funding · options · liq → composite verdict. Tones combine into "squeeze setup, longs favored short-term", "distribution risk, longs vulnerable", "balanced — no execution-layer edge", etc. The 3 detail panels (Funding, Options, Liquidations) remain below as deep-dive — this hero answers the screen-level question without scrolling.
April 26, 2026
Cross-Asset relative-strength verdict NEW
- Closes audit Q20: "Is SOL outperforming sustainably or flow-driven blip?" The Cross-Asset Positioning panel now leads with a synthesis hero above the per-asset cards: identifies the leader from AI debate engine bias × conviction, then cross-checks against funding dispersion. Leader's funding hottest in group → FOMO/blip risk. Mid-pack funding → structural read. Wide alt-conviction spread → pick assets, not basket; tight spread → basket viable.
April 26, 2026
Liquidation magnets in the ladder NEW
- Each side of the LIQ ladder now marks its dominant magnet — the cluster with the highest
cluster_usd / |distance²| score, same scoring the headline hero uses. Yellow accent border + ⚡ glyph after the leverage tier. Closes audit Q14: the headline already named the magnets, but the ladder itself only highlighted the closest cluster, so the actual gravity well blended in. Hero and ladder now agree on which cluster is the pull.
April 26, 2026
Cross-surface BTC dominance unified FIX
- BTC.D was reading 60.09% on Macro and 58.2% on Hunter because Macro pulled from the on-chain analytics feed (narrower "total crypto mcap" denominator) while Hunter's risk-regime banner pulled from the market data feed's
/global endpoint (broader denominator including long-tail wrapped tokens). 1.9 percentage-point gap on the same logical metric is a credibility hit. Hunter now reads the same on-chain analytics parquet Macro pulls; the market data feed stays as a live fallback if the parquet is missing.
April 26, 2026
Daily AI report + morning brief restored FIX
- The daily on-chain analyst had been 400'ing the AI synthesis layer for ~24 hours because the upstream model deprecated the old
thinking.type: "enabled" + budget_tokens shape in favor of thinking.type: "adaptive" + output_config.effort. The single 400 cascaded: the analyst couldn't write today's report → the morning brief refused to send (stale-date guard) → Hermes' morning-intel-report cron fed off no fresh data. After the migration, the brief regenerated and posted to @cwid on schedule.
April 26, 2026
Desk panel — pin-rejection log refinements FIX
- HYPE CVD no longer shows a misleading "0.00". native execution venue's candle source has no taker-buy breakdown (it's a CVD-neutral feed), which was producing exactly 0.00 — looked like a real signal but wasn't. CVD is now
null for HL-native tickers, frontend renders "—" instead.
- Narrative freshness metadata. The desk narrative endpoint now stamps every cached entry with
generated_at + price_at_generation + server-computed age_seconds, so the frontend can detect stale narratives and show "as-of HH:MM" instead of presenting drifted text as current.
- Unsupported tickers fail gracefully. Adding DOGE (or any non-supported ticker) used to surface a raw "load failed: state fetch failed: 404" in the card. Now pre-validated at add-time with a clean alert: "DOGE is not yet supported. Currently: BTC, ETH, SOL, HYPE."
April 26, 2026
Mobile bottom-nav + Macro Jump-to dropdown FIX
- Mobile bottom nav now horizontally scrolls with full labels visible on both Macro (5 pills) and Hunter (7 pills). Scroll-snap aligns each pill, native scrollbar hidden, swipe to see all pills. Replaces an earlier abbreviation pattern that hid full labels behind 3-letter codes.
- "Jump to ▾" dropdown restored on desktop only. The dropdown that closes Kimi audit's #1 critical UX finding ("long screens, no in-page nav") is back in the screen-nav strip on desktop. Mobile keeps the bottom tab bar instead, since the two would clutter at narrow widths.
- Hunter mobile cleanup. Token search moved from a full-width strip below the header into the hamburger drawer (parity with Macro's clean header pattern). The top-right corner gradient orb no longer renders too-bright on mobile — Hunter and Macro share the same supergraphic now.
April 26, 2026
Macro Cycle Bundle — Hash Ribbons, Mayer, Three-Regime, Sortino & Calmar NEW
- Hash Ribbons (cycle indicator). 30-day vs 60-day moving average of BTC daily hash rate. Charles Edwards' miner-capitulation indicator. When 30D drops below 60D, miners are under stress (capitulation). When it crosses back above after capitulation, that is the historical buy signal — fires +35 to +92 days after the actual bottom, so it is lagging confirmation, not a leading edge. New 6th cell in the Cycle Indicators panel next to Puell / Pi Cycle / 2Y MA / AHR999 / Mayer.
- Mayer Multiple (cycle indicator). Price ÷ 200-day SMA. Trace Mayer's original 2013 ratio.
< 0.8 = bottom 20% of cycle history (DCA buy zone), 0.8-2.4 = neutral fair value, > 2.4 = top 10% of cycle history (cycle-top sell zone). New 5th cell in the Cycle Indicators panel.
- Three-Regime BTC classifier (Correlation Radar). CME Group's 2026 framing: Bitcoin rotates between three identities — Macro Hedge (inverse to USD, gold-correlated), High-Beta Tech (moves with NDX), and Liquidity Sponge (absorbs ETF / liquidity flows). New card in the Correlation Radar panel lights up which identities are currently active and highlights the dominant one. Multiple identities can be active at once. Detail line cites the load-bearing correlations driving the classification.
- Sortino & Calmar on /track-record. Two new risk-adjusted ratios next to the existing hit-rate stats. Sortino = annualized return ÷ annualized downside deviation; Calmar = annualized return ÷ max drawdown of the equity curve formed by treating each directional call as a 7-day position. Both are shown only once n ≥ 10 resolved directional calls — below that threshold the cells display "n=X/10" so the sample size is honest about itself, no misleadingly precise numbers from thin data.
- All four are pure derivations on data already in the platform — no new sources, no new pipelines. Driven by the Kimi external macro audit (April 26).
April 26, 2026
Desk Sprint 3b — Options Skew + Liq Clusters tiles NEW
- Options Skew tile (BTC). Reads the existing 5-minute options venue snapshot and surfaces the front-month 25Δ skew with a regime label ("mild risk-off", "bearish hedging", etc.). BTC only — options venue options book is BTC-dominant and our fetcher doesn't emit ETH yet. Tile shows "—" on ETH/SOL/HYPE.
- Liquidation Cluster tile (BTC/ETH/SOL/HYPE). Buckets the last 24h of HL-native liquidation events by 0.5% bins and surfaces the heaviest cluster on each side relative to current price. Format:
↓ −2.5% ($4.2M) below price (long-stop magnet) and ↑ +1.5% ($3.1M) above price (short-stop magnet). Severity color is the closer of the two — red below 1.5%, yellow below 3%, green beyond.
- Both tiles slot into the existing 8-tile indicator grid; the grid is now 10 tiles. Methodology entry added in /docs#desk.
- Closes the original 6-of-6 Sprint-2-deferred items list (4 already shipped via Sprint 3a/3c/3d). Cross-venue liquidation aggregation (paid third-party derivatives analytics) is intentionally out of scope; HL-native single-venue is the right starting point given we already have the WebSocket feed and the 24h aggregate is meaningful at HL's volume.
April 26, 2026
In-tab section nav, SRI hashes, HEAD support NEW
- Sticky section nav inside each Macro tab. A right-rail TOC appears on desktop (≥1280px) listing the panels in the current screen — Verdict, Cycle, Capital, Execution, or Plan & Track. Click an entry to jump; the active section auto-highlights as you scroll. Mobile and narrow-tablet viewports stay distraction-free (the bottom tab bar still segments the page at the screen level there).
- SRI hashes pinned on all CDN scripts. The three external libraries the dashboard loads from
cdn.jsdelivr.net and unpkg.com (DOMPurify, marked, lightweight-charts) now ship with integrity="sha384-…" attributes. If a CDN ever serves modified bytes, the browser refuses to execute the script.
- HEAD requests work everywhere. The server used to return
405 Method Not Allowed for HEAD on every HTML route, which made external auditors (Lighthouse, Kimi, link checkers) think the routes didn't exist. Now HEAD returns the same headers as GET with an empty body, per RFC 9110.
April 26, 2026
SEO + security: JSON-LD, CSP, Track-Record reframe NEW
- JSON-LD structured data on 5 pages. Root, Hunter, Desk, Docs, and Track Record now expose schema.org metadata:
Organization + WebSite + WebApplication on root, WebApplication on Hunter/Desk, TechArticle on Docs, and Dataset on Track Record (with publisher reference back to the root Organization via @id). Helps Google understand what the site is and how its pages relate.
- Content-Security-Policy (report-only). A new CSP-Report-Only header now ships on every nginx response. Allowlist: own origin, cdn.jsdelivr.net + unpkg.com (script CDNs), Google Fonts. Frame embedding is blocked. We're starting in report-only mode so console warnings surface any mistakes before we flip to enforce.
- Track Record page reframed. The page now leads with a "How to read this page" banner that explains the framework was backtested against 2015–2024 BTC cycles (5 of 9 turns identified) and that NEUTRAL is graded as "correctly held," not failed. The first stat card shows the backtest 5/9; the live hit-rate card now shows
n=X instead of a noisy raw percentage when fewer than 5 predictions are resolved.
April 26, 2026
Macro & Hunter mobile bottom nav FIX
- Hunter screen nav now lives at the bottom on mobile, matching Macro. The 7 screen pills (1 VERDICT … 7 TRACK) used to sit horizontally-scrollable at the top — now they pin to the viewport bottom as a single-row swipeable tab bar with full labels intact. Same pattern Macro uses, same horizontal-scroll behavior.
April 26, 2026
CW Desk Sprint 3e — stale-pin would-be tracker NEW
- Pin-rejection log. Every HTTP 422 pin rejection now writes a row to
desk_setup_rejection capturing the would-be pin payload, live price at rejection, and the drift in ATR units that triggered the reject. The attempt is preserved in the ledger — just not as a billable pin.
- Chase-style grading. The resolver grades each rejection as if you had market-entered at the live price (not the original entry, which was already passed). Aggregate would-be win/loss rates per (asset, persona) surface on /track-record/desk in the new "Rejected pins" panel above the existing pin table.
- Why it matters. Closes the open question from Sprint 3d ("how much win-rate did I lose by being slow?") with structured data instead of vibes. Also feeds the threshold-audit agent: if chase-style winrate is materially below pin winrate, the threshold is doing its job; if it's similar or higher, the threshold is too tight.
April 26, 2026
Macro mobile layout fix FIX
- Bottom tab bar no longer covers the page on mobile. The screen-pills nav (1 VERDICT / 2 CYCLE / 3 CAPITAL / 4 EXECUTION / 5 PLAN) was inheriting
top: 0 from the desktop sticky rule when the mobile position: fixed; bottom: 0 kicked in, which stretched the nav to full viewport height and let its translucent backdrop hide every panel behind it. Now sits at viewport bottom as intended.
- Redundant in-page navigators cleaned up. The bottom tab bar now segments the page across screens, so the floating Panel Navigator FAB is hidden on mobile (it overlapped the tab bar at the right edge), and the inline "Jump to ▾" dropdown was removed entirely (redundant on mobile, visually heavy on desktop).
April 25, 2026
CW Desk Sprint 3d — pin freshness NEW
- Setup-age badges. Every cell on the Desk now shows how long the structurally-equivalent setup has been triggering.
🕐 fresh for under 5 min, 🕐 23m for under an hour, 🕐 1h 47m for longer. The hash is structural — based on persona/profile/direction + stop-loss bucketed at 0.1× ATR — so micro-drift in entry/TP across renders doesn't reset the badge.
- Entry-zone badges. Each cell tells you whether current price is still within an enterable distance of the original entry.
✓ in zone, ⚠ +0.4× ATR (drifting, still pinnable), ⛔ entry passed (price has run past entry in the trade direction by more than the threshold). Thresholds: scalp 0.3× ATR, intraday 0.5× ATR, swing 1.0× ATR, quant 1.0× ATR.
- Pin-time hard reject. Server returns HTTP 422 if you try to pin a setup whose entry zone has been passed. Apparent winrate from late pins is now structurally impossible — the ledger only accepts pins on setups you could actually take at the original entry. The pin button visibly disables when the zone is passed; the server backstops anyone bypassing the disabled state.
April 26, 2026
Cross-Asset Positioning surfaced on Macro NEW
- BTC, ETH, SOL, and HYPE bias all visible on the verdict screen now. The AI debate engine has always produced per-asset positioning (bias / conviction / size band / rationale / key levels / catalysts), but the panel that renders it sat 8 deep on Macro's verdict screen, behind 4 BTC-only panels. The panel head was renamed to Cross-Asset Positioning · BTC · ETH · SOL · HYPE and moved to position 5 — right after the verdict summary bento. Now visible without scrolling past the BTC composite.
- Phase 2 (per-asset cycle phase math). Standalone ETH/SOL cycle phase using MVRV/NUPL/Puell math is deferred to Phase 2; it depends on the on-chain analytics feed adding ETH + SOL collectors first. Phase 1 surfaces what already exists.
April 26, 2026
Web push notifications — Phase 1 plumbing NEW
- Browser push opt-in is live in Hunter's alert modal. Open the 🔔 button, scroll to "Browser push", click "Enable browser push" — the page registers a service worker, requests notification permission, subscribes via VAPID, and posts the subscription to the server. From then on you can be notified even when the page is closed (Chrome / Firefox / Edge desktop; iOS PWA needs home-screen install first which is Phase 2).
- Send test push button verifies the full pipeline end-to-end. After subscribing, click "Send test push" — every subscribed device shows a native OS notification within seconds.
- Phase 2 (server-side automatic triggers): today the test path is the only push trigger. Phase 2 wires regime flips, concentration alarms, and CUT signals to fire automatic pushes from the cron workers. Phase 2 also adds per-event opt-in (subscribe to "regime flips" but not "concentration") and Macro-page push UI.
April 26, 2026
Macro→Hunter regime ribbon — Phase 1 NEW
- Hunter now shows Macro's allocation read at the top of the page. A ribbon between the screen-nav and panel-stack surfaces the current BTC bias (e.g. "Cautious Long"), recommended size band (e.g. "60-70%"), and a one-line rationale from the AI debate engine. Tone color follows the bias text — Long/Accumulate → aqua, Cautious/Neutral → amber, Risk-Off/Sit-Out → rose.
- Closes the audit gap on "no allocation→alpha bridge". Macro tells you IF and HOW MUCH to be exposed; Hunter tells you WHAT to own. The ribbon makes that flow explicit at the top of every Hunter session. Phase 1 is informational — Spotlight + Edge scoring math is unchanged. Phase 2 would gate scores by regime: down-weight in CAUTION/RISK_OFF, up-weight high-conviction setups in HUNT/HUNT_ALTS.
April 26, 2026
Macro "Jump to" dropdown + Cross-Asset chevrons + DEX-analytics-offline retry card NEW
- Macro: 'Jump to ▾' dropdown now lives in the screen-nav strip. Click it to jump to any panel on the active screen — auto-builds the menu from the current screen's panels using each panel's heading as the label, smooth-scrolls on click. Closes the long-standing "12+ screens, no in-page nav" critique.
- ▲/▼ chevrons before signed numbers. Color-blind affordance — hue alone (red vs green) excluded ~8% of male users; chevrons make signal direction readable without color. Applied narrowly to value-bearing classes (KPI tiles, bento values, narrative chip percentages) so chips/badges/swatches don't double-glyph.
- Hunter Fresh Momentum offline state is now actionable. When the DEX analytics feed returns quota errors, the panel shows a structured retry card with a live countdown to 00:00 UTC quota reset, a manual ↻ Retry button, and a "Why this happens" disclosure. No more dead-end "FEED OFFLINE" string.
- Track Record reframes. Macro's "Framework Track Record" bento card now leads with the absolute fraction (e.g. "5/9 cycle pivots") instead of the easily-misread "56%". The standalone /track-record page reframes NEUTRAL outcomes as a valid "don't take a directional bet" signal rather than a failed prediction; the headline stat is now "Directional hit rate" so the math is honest about what it counts.
April 26, 2026
SEO + UX hygiene quick wins FIX
- Renamed Hunter screen pill "MY STUFF" → "WATCHLIST" (route hash
#mystuff kept for backwards compat with bookmarks).
- /macro now 301-redirects to / (was a 404 trap — natural URL guess that bounced users).
- /robots.txt + /sitemap.xml serve real content. Sitemap covers all 7 public routes with priorities and changefreq.
- Canonical tags on every page + Open Graph and social-card meta filled in for /hunter (was partial), /desk, /docs, /changelog, /track-record (were missing). Sharing any CryptoWatch link to messaging or social platforms now produces a proper preview card.
- Hunter desktop hamburger menu hidden. The ☰ button was leaking onto desktop next to DESK because of a CSS specificity collision with a tap-target a11y rule. Now hidden on desktop, still functional on mobile.
April 26, 2026
Hunter Track screen — backfilled track record + accountability log FIX
- Track Record now walks every daily anchor in snapshot history. Previously the panel showed a single 5-pick measurement (top scores from 24h ago vs current price) so n stayed stuck at 5 and the "n too low" warning never moved. The backfill walker pairs each daily anchor with its (anchor + 24h) and (anchor + 7d) forward snapshot when one exists, computes per-pick returns from market_cap deltas (price proxy + same outlier clamp as bootstrap_perf), and aggregates hit rate / median across all anchors. Current 6d snapshot window now produces n=30 across 6 anchors at the 24h horizon.
- Accountability Log merges bootstrap picks. The /hunter/accountability endpoint now reads
accountability_log_bootstrap.jsonl alongside the live log (same pattern as /hunter/regime-performance), preferring precomputed forward returns over current-vs-pick math for bootstrap entries. Total picks jumped from 18 to 43 (33 live + 25 backfilled), unblocking statistical-significance threshold.
- Disclaimers now read measurement count, not snapshot-window days. Track Record warning fires below n=25 and softens to a muted "directional" note between 25–99, then disappears at ≥100. Accountability summary surfaces the live/backfilled split so you always know what's measured.
April 26, 2026
Macro Regime Radar — "OnChain" label clipping FIX
- The 7-character "OnChain" axis label was rendering past the SVG's right edge with
overflow:hidden, so the trailing "n" got chopped (looked like "OnChai"). Widened the radar viewBox horizontal padding (250→270, aspect-ratio 1.25→1.35) and switched to overflow:visible. Polygon vertices stay inside the new bounds.
April 25, 2026
CW Desk Sprint 3c — track record page + validity fix + docs NEW
- New page at /track-record/desk. Every pinned setup, graded against actual price action. Aggregate strip (total / winrate / avg R / expectancy / open) + per-persona breakdown + per-profile breakdown + ticker/persona/profile filters + paginated table. Linked from each Desk card's footer ("See all →") with the active ticker pre-filtered, and from /track-record's header.
- Pin validity windows fixed. Pre-Sprint-3c, every non-scalp pin expired at 24h regardless of horizon — swing pins (1d candles, multi-day moves) were timing out before they could plausibly play out. New windows: scalp 2h, intraday 12h, swing 7d, quant funding-harvest 3d, quant stat-arb 10d. Sprint-2 OPEN pins from before this fix have been retroactively corrected via a hash-chain-preserving override table (no row mutations, no broken ledger integrity).
- Desk docs added. New #desk section in /docs covers overview, card structure, the 10 cells, ALIGNED, OBSERVATION ONLY, pinning workflow + grading rules, validity windows, the new track-record page, data sources, and known gaps. The known-gaps section flags Sprint 3d work (setup-age tracking, entry-zone drift indicator, pin-time validation) honestly so operators know what the system doesn't do yet.
April 25, 2026
Mobile responsive topbar + nav FIX
- Single-row topbar on phones. Macro / Hunter / Desk now collapse cleanly at ≤768px — logo, surface switcher (Macro / Hunter / Desk), live status chip, and a ☰ hamburger fit on one row instead of stacking into three. Drawer reveals Docs, Changelog, search, Time Machine (Macro), or Alert Settings + Daily Brief (Hunter).
- One-row scrollable pill nav. The decision-flow pills (1 VERDICT → 5 PLAN & TRACK on Macro, 1 VERDICT → 7 TRACK on Hunter) no longer wrap to two rows — they scroll horizontally on a single line with a soft right-edge fade hint.
- iOS Dynamic Island / notch. Added
viewport-fit=cover + env(safe-area-inset-*) padding so the topbar starts below the status bar on modern iPhones instead of being clipped.
- Desk linked from Macro & Hunter. Surface-nav now lists all three products (Macro / Hunter / Desk) on every page so you can jump between them without typing the URL.
- Search input on mobile Hunter drops to its own full-width row beneath the brand so the autocomplete dropdown has room to breathe.
April 25, 2026
CW Desk Sprint 3a — data improvements NEW
- True 7-day rolling funding-z. Replaces the cross-sectional snapshot (z across 230 coins right now) with a per-ticker rolling z over 168 hourly observations. Hourly cron writer + 30-day SQLite retention. Cross-sectional stays as cold-start fallback for the first 24h after deploy.
- Per-coin liquidations now sourced natively from native execution venue. The third-party derivatives analytics
top_coins returned zeros for ETH/SOL/HYPE at our tier — fixed by subscribing to HL's trades WebSocket per-coin and filtering by zero-hash (the liquidation marker). 24h in-memory ring buffer; renders read without HTTP. The third-party derivatives analytics feed remains for non-desk tickers.
- Stat-arb (BTC/ETH) Quant strategy. When the BTC/ETH log-ratio crosses |z|≥2 over the 60-day daily lookback, both BTC and ETH cards surface a "short rich / long cheap" entry alongside funding-harvest. Delta-flat pair trade; equal-notional sizing.
- Multi-strategy Quant cells. The Quant block is no longer single-strategy — funding-harvest and stat-arb render side by side with their own column layouts. Pin button now correctly disambiguates which strategy you're tagging.
April 25, 2026
CW Desk Sprint 2 — real data + Swing/Quant + accountability
- Indicator tiles now show real values. Funding (per-ticker rate + cross-sectional z over 230 coins), OI ($56.86B for BTC w/ 4H delta; per-ticker fallback for ETH/SOL/HYPE), macro countdown (next FOMC/CPI/NFP/PCE from /catalysts), Shield gating (CLEAN for majors; ledger lookup for alts).
- Swing + Quant generators live. 3 directional personas (Scalp / Intraday / Swing) × 3 risk profiles + 1 Quant strategy block per card = 10 cells per asset. Quant Sprint 2 ships funding-harvest strategy; stat-arb/basis/vol-arb arrive in Sprint 3.
- Score_swing dedicated formula. Composite alignment +3, D1 EMA50 trend +2, funding-z aligned +2, VWAP +1, Shield +1, no macro 24h +1. Replaces the interim 'use intraday formula' shim.
- ALIGNED badge. Gold ribbon + glow when all 3 directional personas agree on direction with confluence ≥7. Rare-but-powerful signal.
- Pinned setup resolver. Setups pinned to the Accountability Ledger now auto-grade against actual price action — first-touched-wins on candle data (5m for scalp, 1h for intraday, 1d for swing). New
desk_setup_resolution table tracks status, hit event, max R achieved, max drawdown. Background worker grades every 5 min. Per-card track record at the bottom of each Desk card shows last 5 grades + win-rate.
- Why drawer. Click 'why' on any setup head to expand the full confluence bullet list with per-bullet point values. Score is now fully transparent.
- OBSERVATION ONLY mode. New tickers with <30 days of daily history get a blue banner, indicators still render, but all setup cells return NO-TRADE — engine doesn't have enough history for the regime classifier or swing rules to be trustworthy.
- Latency cut from ~2s to ~50ms perceived. Parallel candle fetches via threadpool, 60s cache pre-warmer for default tickers, asyncio thread offload to keep the event loop free, and progressive frontend rendering — each card upgrades independently as state/narrative/track-record arrives instead of waiting on the slowest.
April 25, 2026
CW Desk — pre-trade workspace shipped (Sprint 1) NEW
- New surface at /desk. Multi-asset pre-trade workspace. Cards for BTC, ETH, SOL, HYPE plus up to 4 user-added (saved in your browser). Click a card to expand.
- Setups for two trader styles to start. Scalp (5m–15m) and Intraday (1H–4H), each with three risk profiles — Conservative, Moderate, Aggressive. Swing + Quant arrive in Sprint 2.
- Deterministic levels engine. Every entry / stop / TP is computed from named indicators (ATR, EMAs, VWAP, swing pivots). Same input → same output. Tunable via
backend/desk/engine_config.yaml.
- 5-state regime gate. TREND-UP, TREND-DOWN, RANGE, CHOP, EVENT-RISK. Setups gate on regime. CHOP and event-risk windows force NO-TRADE.
- NO-TRADE as a positive signal. When the validator rejects a setup, the cell shows why. Pin a NO-TRADE to the Accountability Ledger and stand behind your non-action.
- ICT killzone clock. Header tracks Asia / London / NY AM / NY PM windows in UTC.
- Opt-in pin to Accountability Ledger. Per-row pin button hashes the setup snapshot and writes a
desk_setup call. Resolves at T+1d / T+7d (resolver wired in Sprint 2).
- AI narrative agent. Layered on top of the deterministic engine. Reads the state and writes a one-liner. Cached 15 min per asset. Silent-degrades if the API key isn't set.
April 25, 2026
Renamed to CryptoWatch Macro NEW
- The main dashboard is now "CryptoWatch Macro." The new name describes what it actually is — a BTC cycle & regime intelligence dashboard — instead of borrowing generic Bloomberg branding.
- Pairs cleanly with CW Hunter: macro (BTC cycle) on one side, narrative discovery on the other. Matches how the PRD has always positioned the two-product split. (Hunter was retired in the 2026-05-25 stale-source cleanup.)
- Renamed end-to-end: header wordmark, nav pill, PWA manifest, file names (
cw_macro.html), systemd unit (cw-macro.service), API path (/api/macro/data/{key}), CSS class names, private docs, and history. URLs that used /, /cw, /docs, /changelog, /track-record, /hunter are unchanged — those are paths, not product names.
April 25, 2026
Round 7 audit — verification complete FIX
- EARLY tab verified —
/hunter#early renders 32 signals across All / Pre-Pump LP / CT Emergence. No "Synthesizing…" hang. (audit B1)
- Regime-Conditional Performance verified — panel no longer spinners; shows explicit n<10 fallback with MOCK badge until 30+ days of cross-regime picks accumulate. (audit B2)
- Chase Risk mindshare verified —
/api/hunter/chase-risk returns populated mindshare_now for every resolved pump via DexScreener + DEX analytics address mapping. (audit B5)
- All 12 accepted audit findings + 3 self-identified infrastructure gaps (atomic writes, full-length SHA-256, complete-field hashing) now shipped and live.
April 24, 2026
External audit response — Shield v2, Macro expansion, Backtest Engine NEW FIX
- Manipulation Shield v2 — all 5 on-chain detectors now real (D1 supply concentration, D2 holder-movement delta, D3 liquidity trap + contract safety, D4 wash-trade ratio, D5 coordinated accumulation). Replaces Phase-1 proxy heuristics.
- Pattern Matcher v1 — 8 attacker-playbook templates (wash-driven breakout, LP trap, coordinated entry, whale distribution, pump without narrative, social/price divergence, thin LP + vol anomaly, multi-detector alert) render as colored chips in the Altcoin Scanner risk column.
- Accountability Ledger for Shield — every HIGH/CRITICAL flag writes to the hash-chained ledger; dedupes on (ticker, tier escalation). Read via
GET /api/hunter/manipulation-shield/ledger.
- Macro coverage 3 → 11 indicators — added Fed Balance Sheet (WALCL), Yield Curve (T10Y2Y), Reverse Repo (RRPONTSYD), Real Yield (10Y TIPS), HY Credit Spread, VIX, Dr. Copper, USD/CNY. Each card follows the existing regime-coded pattern with source attribution.
- Backtest Engine — new Macro panel simulates the composite signal over 3y of BTC history (7 Tier-1 signals), with conviction (±6) and mild (±3) strategy variants compared against Buy&Hold and DCA baselines. Total return, Sharpe, max drawdown, win rate.
- Edge Score QUAL fixed — creator_quality was stubbed at 0.5 for every token; now sources real GitHub activity (commits_4w, PR contributors, PRs merged, stars) from the market data feed and computes a 0-1 differentiated score.
- AI predictor — tracker bug fixed (direction was derived from a non-existent top-level score field, now reads verdict.overall_sentiment); aggregator prompt gained an explicit commitment rule so specialists at ≥70% conviction on their native horizon now override the safe-middle bias.
- Cross-product Cmd+K — Macro search finds Hunter panels and vice versa with ↗ nav arrows.
- MOCK badge overhaul — 9px amber-on-dim badge → 12px solid-amber banner with in-body warning banner auto-injected into every scaffolded panel. Impossible to miss.
- Notify button feedback — toast system ported to Macro; verdict-flip toggle now confirms every state change with explicit success/warn toasts.
- Retry UI — stale/missing feeds now get a ↻ button that re-syncs the dashboard snapshot (Macro freshness accordion + Hunter pipeline overlay).
- Mobile polish — Indicator Breakdown, Whale Flow, Pulse Scorecard, Altcoin Scanner all collapse gracefully at ≤640px (audit TC-02 fix).
- 404 page — 6-tile nav grid with attempted-URL echo, replacing the old bare "Back to Dashboard" link.
- Regime Radar — "Sentim" untruncated to "Sentiment", per-axis hover tooltips, filled-area legend.
April 23, 2026
Macro V2 & Hunter V2 Architecture Overhaul NEW PERF
- Migrated Macro and Hunter to a strict 7-screen "zero-to-decision" tabbed routing architecture.
- Removed legacy IntersectionObserver scroll-spy logic for improved rendering performance.
- Hunter V2: Merged technical widgets into a unified Token Detail — Confluence Score composite.
- Hunter V2: Merged emerging flows into a unified Early Signal Feed composite.
- Added mock structures for Narrative Heat Index and Chase Penalty composite indicators.
- Macro V2: New Multi-Asset Matrix backend proxy (ETH, SOL, HYPE vs BTC relative strength).
- Macro V2: New Scenario Tree Engine simulator (macro catalysts like CPI, FOMC).
- Macro V2: Upgraded the Accountability Ledger with retroactive 7-day outcome resolution and cryptographic hash-anchoring for tamper-proof prediction tracking.
April 16, 2026
Search, tooltips, and broadcast launch NEW
- Ctrl+K search overlay — fuzzy search all 41 panels by name or description
- Nav tooltip glossary — hover any panel label for a one-line explanation
- Public Telegram channel @cwid — daily morning brief
- This changelog page
April 16, 2026
Security and performance hardening PERF FIX
- Single snapshot endpoint replaces 34 parallel API calls (faster page load)
- Self-hosted fonts — eliminated 3 external font service dependencies
- ETag and Cache-Control headers for HTML caching
- Proxy endpoint security hardening
- 34 automated tests added
April 15, 2026
Signal Conflict Resolver NEW
- New panel: resolves conflicts when indicators disagree
- Distribution Confluence panel for cycle top detection
- Documentation v2 with Q&A guide
April 14, 2026
CryptoWatch Macro launch NEW
- Standalone dashboard at cryptowatch.id
- 41 panels across 5 tiers
- Time Machine — rewind to any historical date
- AI Debate Engine — 3 models debating daily predictions
- Full methodology documentation at /docs
- PWA support — installable on mobile and desktop
← Back to Dashboard