Cloudflare status: hosting issues and outage reports
No problems detected
If you are having issues, please submit a report below.
Cloudflare is a company that provides DDoS mitigation, content delivery network (CDN) services, security and distributed DNS services. Cloudflare's services sit between the visitor and the Cloudflare user's hosting provider, acting as a reverse proxy for websites.
Problems in the last 24 hours
The graph below depicts the number of Cloudflare reports received over the last 24 hours by time of day. When the number of reports exceeds the baseline, represented by the red line, an outage is determined.
At the moment, we haven't detected any problems at Cloudflare. Are you experiencing issues or an outage? Leave a message in the comments section!
Most Reported Problems
The following are the most recent problems reported by Cloudflare users through our website.
- Cloud Services (58%)
- Hosting (25%)
- Domains (17%)
Live Outage Map
The most recent Cloudflare outage reports came from the following cities:
| City | Problem Type | Report Time |
|---|---|---|
|
|
Cloud Services | 3 days ago |
|
|
Cloud Services | 4 days ago |
|
|
Cloud Services | 6 days ago |
|
|
Hosting | 6 days ago |
|
|
Hosting | 15 days ago |
|
|
Cloud Services | 1 month ago |
Community Discussion
Tips? Frustrations? Share them here. Useful comments include a description of the problem, city and postal code.
Beware of "support numbers" or "recovery" accounts that might be posted below. Make sure to report and downvote those comments. Avoid posting your personal information.
Cloudflare Issues Reports
Latest outage, problems and issue reports in social media:
-
Kristian Freeman (@kristianfreeman) reportedDay one support for Cloudflare!
-
manny shaw (@MannyShaw) reported@0xAdesola 1.1.1.1 does not block malware or phishing. For that, use 1.1.1.2. DNS generally cannot unblock geographically restricted streaming services. That normally requires an authorised VPN or Smart DNS service. It cannot increase your broadband speed. It may make the beginning of website loading slightly quicker if your ISPβs DNS is slow. AdGuard DNS blocks many domain-based advertisements, but not every advertisement. It usually cannot reliably block YouTube, Instagram or advertisements served from the same domain as the content. Parental DNS is useful but not foolproof. VPNs, encrypted DNS, mobile data and some apps can bypass router-level filtering. How to change DNS on your router While connected to your home Wi-Fi, open a browser. Enter one of these common router addresses: 192.168.1.1 192.168.0.1 192.168.29.1 192.168.100.1 The correct address is often printed underneath the router as Router IP, Gateway or Web GUI. Sign in using the routerβs administrator username and password. This is not necessarily your Wi-Fi password. Check the router label or your ISPβs documentation. Before changing anything, take a photograph or screenshot of the existing settings. Look for a menu called: Internet or WAN Network DHCP Server LAN Settings DNS Settings Disable Automatic DNS, Obtain DNS automatically, or DNS from ISP. Enter your chosen pair. For general family protection, I suggest: Primary DNS: 1.1.1.3 Secondary DNS: 1.0.0.3 For advertisement blocking instead: Primary DNS: 94.140.14.14 Secondary DNS: 94.140.15.15 Do not mix servers from different providers; otherwise filtering may become inconsistent. Tap Save/Apply and restart the router. Disconnect and reconnect your devices to Wi-Fi, or restart them. Cloudflare confirms that router-level configuration normally applies the DNS setting across connected devices.
-
Hanif Carroll (@HanifCarroll) reportedAt a previous job, I was lucky to work with a staff-level front-end engineer who was very good at what he did and thorough like no one else I had worked with. I didnβt always appreciate that thoroughness. At first, I found it maddening. Meetings with product and design would drag on because he always had an enormous list of questions about whatever feature we were discussing. I was usually eager to finish the meeting and start coding. It took me a while to understand that he wasnβt making the process longer. He was asking the questions we would otherwise have to answer halfway through development, when an unanswered question could block the feature or send it in the wrong direction. Every unanswered question holds an assumption, and that assumption might not match what product or design had in mind. I thought about him recently while reviewing the search process for Casamo, a product Iβm building to help people compare furnished stays. Before changing the code, I started asking questions: Why were we processing listings already known to be over the userβs budget? Why were hotel-like properties entering the process when the user had asked for an entire place? Why did we stop after finding six suitable stays if ten were available? How old could a review be before it stopped being useful evidence? Those questions exposed decisions that had been made when Casamo ran on a low-powered VPS and needed to do as little work as possible. They didnβt all make sense now that the product runs on Cloudflare. We changed the search process to reject known mismatches earlier, treat six results as the minimum rather than the target, continue until it finds ten suitable stays, and only use reviews from the previous year as evidence. If I had started coding immediately, I probably would have made the existing process faster without questioning whether it was still the right process. I donβt know if Iβll ever have as many questions as he did, but now I understand what he was protecting us from.
-
Sergei Aksjonov (@sergeiaksjonov) reported@Printful Also this: 1 day of my time 1 domain on Cloudflare $20 on AI Thatβs the whole budget. 10 years ago I thought you needed a Social account of the service, a pretty brand, a PR campaign, the βrightβ image. This time I just launched it as is from my own account. No polish. No theater. Just shipped. And the first order still came in. Just start as it is. Let it flow.
-
LUIS- LUIS- (@LUISLUIS532957) reported@itz_pippo still not working, akira is blocked by cloudflare, please include always other hosts, thanks.
-
junebnunny (@junebnunny_) reported@SportingNest @Cloudflare This is a click fix attack. Do not run the code. Do not do ctrl V. Do not do Windows plus R. You will lose all of your data. You will get scammed. Your bitcoins will be taken.
-
Alex Betok | PolyViper (@alexanderbetok) reportedStopping the bad guys with Cloudflare: 1,714 malicious requests blocked or challenged in the last month #cloudflare
-
Tim (@Trendy_Tim) reported@The_Baron_X150 @SportingNest @Cloudflare That was crowdstrike, cloudflare take down half the internet with some dodgy js or dns config.
-
Michael Bruno (@brubarian) reported@RockyCapital18 @TMTLongShort Yes - but it's more of a framework because some rx/diligence are on the private side. But big blue arrow: 1. What are the top three pieces of information that I want to have? 2. What role/function would use this data to solve their own problem? e.g., A DoW analyst wants to know where to buy widgets for a Humvee; how would he try to find the answer? Or a gas station owner wants to know how many Poland Spring bottles to order based on expected highway traffic because of the Sturgis motorcycle rally. 3. Which US institutions/think tanks/policy/others have the raw data? (too many to list) 4. Download CSVs, databases, etc. to desktop to isolate it, Claude from hallucinating or pulling information from the internet. (You may have to get a cloudflare/suprabase/*** to help facilitate accelerated use.) 5. Instruct Claude to clean the data sets (this used to be what data scientists spent most of their time on; NaN, void answers, separating street addresses from state, etc.) 6. In clear, concise, simple language, ask Claude to take XYZ categories of data and produce a snapshot to serve a "product manager at company XYZ" or a "credit risk manager at Bank ABC", etc. 7. Adjust and iterate. Force Claude to produce "Tufte" data visualizations. If Claude is left to run linear/logistic regressions, it becomes a science project instead of a problem-solving or illuminating exercise. 8. Force Claude to explore. e.g., take an analogy, "You are a surgeon; this data set is akin to human nervous system, if you were performing surgery, which node, if removed would destroy the utility of the system"? Random questions like this. Analogically map it in unique ways. Claude RL underbelly does nicely here. And as a guiding principle, I'd suggest focusing on being creative. The best definition I've seen is from Bruner: "Creativity is a way of figuring out what you already know in order to go beyond what you currently think."
-
James (@jamescoder12) reportedThe uncomfortable truth. Your ISP has no incentive to optimize your router settings. They have every incentive to leave them on factory default and every incentive to upsell you when the defaults cause problems. When your Wi-Fi is slow, you call and complain. They test Speed 1 the connection to your modem. It's fine. So they tell you "everything looks good on our end" which is technically true. Then they offer you a faster plan. You pay $30/month more. Speed 1 goes up. Speed 2 the Wi-Fi to your devices doesn't change. Because the bottleneck was never the pipe coming into your home. It was the 6 feet between your router and your laptop. When your firmware is 4 years out of date, they don't push an update. When your channel is congested, they don't suggest switching. When your DNS is slow, they don't mention Cloudflare. When your channel width is halved, they don't widen it. When your security is on WPA2 with the factory admin password, they don't flag the risk. Every free fix that would make your Wi-Fi faster is a fix that prevents them from upselling you a more expensive plan. Every month you rent their router is $14 in revenue for a $60 device they deployed years ago. The rental has no end date. The equipment depreciates. The revenue doesn't. He called his ISP 4 times. They suggested upgrading twice. He upgraded twice. He paid $360 extra over a year for a faster plan that didn't make his Wi-Fi faster because the problem was never the plan. It was 9 settings his ISP could have fixed in a 5-minute phone call. They chose to sell him a faster highway instead of widening the off-ramp. "Your ISP isn't slow. Your settings are. And the company delivering your internet profits every month you don't know the difference." 9 settings. 15 minutes. $528/year back. Faster internet on a cheaper plan. The router was never broken. The defaults were designed by a company that makes money when you think it is.
-
Ric Orna (@ric_orna) reported@yongfook Or you gotta be doing something that actually has a moat still. Eg a network of sensors and API. Nobody is gonna vibe code physical stuff. Or something so big and boring a lift that nobody would want to and couldnβt in short order anyway. Vibe code your Cloudflare competitor.
-
Mert Deveci (@gm_mertd) reportedSTOP INSTALLING 55 SKILLS TO USE A SINGLE API. @firecrawl @Cloudflare If it is more than 3 skills agent needs to f... use you, your platform is already too complex and the agent won't be able to use it. Simply put it into the CLI where it can output instructions on doing --help or --best-practices Can't believe the amount of dark patterns emerging here. @vercel is guilty of the same thing
-
Jonathan.G (@Jonathan2134) reportedIn reality CloudFlare makes searching the internet worst place because number of websites you can't use despite not VPN.
-
volkanolmez (@volkanolmez) reported@xDestin0 That's almost always a local proxy or antivirus doing SSL inspection β the cert itself is valid (Google Trust Services via Cloudflare). Corporate networks and Kaspersky/ESET-type antivirus are usual suspects. Any chance you're on a work network? π
-
LilRhodySpecial (@rhody_special) reported@Sprytixl Yet another ad to get you to use their data stealing bot on the cloudflare data snooping service
-
SyntaxError Β» CEO of "CEO of..."-names (@SyntaxError2505) reported@NewAgeRetroNerd It never failed on me Cloudflare should have a look
-
Paul T (@BscTraynor) reported@ClareCraigPath petition site receives a massive surge of traffic from X, Cloudflare may issue a "Checking your browser" challenge page or briefly queue users to prevent the server from crashing
-
π DO NOT FOLLOW TIMO π (@liltechnomancer) reported@thdxr Because you have process issues. If you didn't extensions would work on cloudflare.
-
Guillermo Zaandam π¨π¦π³π± (@besodemieterd) reported@Cloudflare Your CSP rules and WAF rules aren't working again and again. Please fix this
-
Daniel Zahoor (@DanielZahoor) reportedSet your router DNS to 1.1.1.2 and 1.0.0.2 to block malicious sites across your Wi-Fi. These free Cloudflare addresses silently block scams and phishing on every device. You get network-wide protection with zero software to install or manage.
-
Nuvorlane (@nuvorlane) reportedFrom today, a Workers Free D1 account that crosses 5 million rows read or 100,000 rows written gets errors until 00:00 UTC. Binding API and REST both stop. Stored data stays. Cloudflare emails you when you hit the wall. The read string is: Your account has exceeded D1's free tier daily row read limit. Upgrade to a paid plan or wait until tomorrow (midnight UTC) to continue. Writes get the matching write-limit string. SELECT * FROM users on a 5,000-row table costs 5,000 rows read even if you keep ten. Filter on an unindexed column and D1 still scans to pick the subset. Check meta.rows_read on the query, add indexes, or move to Workers Paid (25 billion reads / 50 million writes included per month).
-
Carlo GG (@CarloDotGG) reported@SimonHoiberg Easy fix Step 1: Use Cloudflare AI Gateway to build your own custom Openrouter for your business, then select whichever provider you'd like, or even attach custom providers like BaseTen, FAL .... Step 2: set billing limits per user if needed.
-
Wes Roth (@WesRoth) reportedCursor cloud agents can now run on infrastructure you manage, including machine pools that automatically scale with demand. Self-Hosted Machines let agents execute inside your network with access to internal services, source control, custom hardware like GPUs and Macs, and existing build infrastructure, while inference, planning, and the agent loop remain in Cursorβs cloud. Cursor also supports AWS Lambda, Cloudflare, Coder, Daytona, E2B, Modal, Namespace, and Vercel. Cursor says cloud agents now create more than 60% of the pull requests it merges internally.
-
Kene π (@spatocodex) reported@acolombiadev @Cloudflare Not just generous, Cloudflare is so good. A service you can gladly pay for.
-
COLLINSEO (@alexcollinseo) reportedBreaking news! Your site might start blocking AIs from September 15th.. And if you block them, you won't show up in AI answers. The good thing? It takes a sec to unblock! This setting is inside Cloudflare. You might not even know your website uses Cloudflare because it works in the background as a CDN, helping your website load faster. If you check your website using the tools I mention, you can find out whether Cloudflare is being used on your site. Cloudflare seems to have taken this step because of how AI companies are crawling websites, and honestly, I don't completely disagree with the reason behind it. But having AI crawlers automatically blocked from September 15 could be a problem if you want your business to appear in AI answers. The setting is inside Security Settings. Look for the AI crawler control and make sure it is set to allow rather than block. This is especially important if AI visibility is part of your strategy. With one of my clients, we went from zero to around 500 visitors from AI traffic in two months. And what I did was exactly what I explained in the video. If your AI crawlers are blocked, you're potentially closing the door on that traffic before it even has a chance to reach you. #SEO #DigitalMarketing ππΌ Comment VIDEO for the FULL VIDEO BREAKDOWN
-
Adsy (@adsydeveloper) reported@backblaze Dashboard having issues? Cloudflare errors indicating host down (and was ~20s response time just before)
-
Tang Vu (@tangvu_dev) reportedI compared Cloudflare Workers and Vercel Edge Functions, two production platforms built on V8 isolates, using a latency-sensitive crypto analytics service. The workload fetched prices and computed OHLC + VWAP over 24 kline periods.
-
Gaylord (@laolu_afolabi) reported@lanreadelowo From Claude: """ Technically, yes β it's buildable, and "platform-agnostic" is realistic because most providers and gateways (OpenRouter, LiteLLM, Portkey, etc.) have already converged on an OpenAI-compatible schema, so a routing layer that swaps providers behind one endpoint isn't a huge engineering lift. But there are a few things in the premise worth stress-testing before you build. **The "discount arbitrage" framing is a bit shakier than it sounds.** Most of these gateways aren't reselling models at a discount β they're reselling at close to list price plus a fee. While OpenRouter states it doesn't mark up inference pricing, its credit purchase fee effectively acts as a surcharge on all usage. LiteLLM's pitch is the opposite direction β zero markup by self-hosting, with OpenRouter's ~5% fee costing meaningfully more at scale. So the "discounts" you'd be arbitraging are less "provider A is cheaper than provider B for the same model" and more: rate-limited free tiers, short-lived promos, or BYOK arrangements β OpenRouter's BYOK is free up to a monthly allowance before a 5% fee kicks in. Those are real, but they're capacity-constrained and often disappear once volume shows up β hard to build a durable business on chasing them. **The bigger product risk: tokens/models aren't fungible.** Swapping Gemini for Claude for GPT under one endpoint isn't like arbitraging cloud spot instances β different tokenizers (so "$/token" isn't apples-to-apples), different tool-calling formats, different output style and capability. If your router silently reroutes a customer's traffic to whatever's cheapest this hour, you can quietly degrade the app built on top of it. That's the actual hard problem, not the proxying. **What's actually working in production right now is narrower than blind price-routing:** AT&T processes tens of billions of tokens a day using cache-aware routers that send simpler tasks to cheaper models, cutting costs up to 56% with only ~2% quality degradation, and this "model cascade" pattern β cheap/fast models handle the default case, only escalating to a frontier model when a confidence check fails β is used by both AT&T's LiteLLM-based router and Databricks' Smart Router. That's routing by task-fit with cost as a constraint, not routing purely by whoever's running a promo this week. **Competitive landscape is already crowded**: OpenRouter, LiteLLM, Portkey, Requesty, Helicone, Not Diamond, Martian, TrueFoundry, Cloudflare AI Gateway, Ofox all do some flavor of unified-endpoint routing today, several with automatic fallback/cost-based rules already built in. Pure discount-hunting is a thin moat β anyone can scrape pricing pages, and providers may treat aggressive arbitrage-only usage as a ToS problem. Where I'd actually look for a wedge if I were you: quality-aware routing with an audit trail (so teams can trust that "cheaper" didn't mean "worse" for their specific task), rather than price-only arbitrage. """
-
PureStory (@PureStoryLabs) reported@capybaraReborn The best part of the $RDDT debate is where it happened: WSB argued this stock from inside the product. The bull thread that stuck was the S&P 500 add, 2,900 points. The bear thread that stuck was Cloudflare data saying 57% of Reddit's traffic is bots. The stock is down 15% since the July scare over the Google deal, so the crowd living inside the asset still hasn't settled what it's worth.
-
βοΈ Daddio βοΈ (@ScienceDaddio) reported@grok @DaddioAI E4H.1 is implemented. The pump-activity table is now the reusable presentation surface; events are optional overlays, not duplicate source tables. Raw duration rows stay immutable. E4G.6B canonical stable-ID work is intact (trend_report.html, trend_report.js, test/trend-report-stable-id-e4g6b.test.js). The workspace is not a *** repo, so that was confirmed by file inspection, not *** status. Codex had only started reading; no detector or research files were rewritten. βββ 1. Working-tree inspection No *** repo. Inspected files vs the E4G.6B baseline. E4H.1 presentation files were already present from the interrupted session. This closeout preserved that work, then stopped overlaying Current Assembly / Station Packet tables so automatic assembly still uses detector is_event_row highlighting instead of the new ERT overlay. 2. Distinction from E4G.6B E4G.6B remains: stable IDs and trend_report.js?v=e4h1-e4g6a-e4g6b. E4H.1 added presentation state, ERT overlay, settings UI, and Search Tables controls. Research under research/e4c8g/ was not touched. 3. Existing table architecture found Canonical BossDataTable renders Trend Report, Search Tables, and exports. Manual/Search tables use the approved catalog with exact start/end, pump, and sort. Event tables keep Context Before/After. Snapshots store source columns/rows; presentation is a separate optional field. EMAIL-v1 already highlights via is_event_row. 4. Existing fixed ERT architecture ββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββ β Layer β Behavior β E4H.1 action β ββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββ€ β Python PumpDurationERT / β Materialized at ERT_MINUTES = 15, β Preserved β β PumpActivityERT β RUN_TIME β₯ β β ββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββ€ β detectFixedErt() β Exists; not called from β Preserved β β β detectEvents() β β ββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββ€ β Settings fixedErtEnabled / β Default enabled, 900 seconds β Reused as overlay β β fixedErtSeconds β β config β ββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββ€ β Historical FIXED_ERT Station Events β Readable history β Preserved β ββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββ 5. Existing Adaptive Long Runtime architecture detectAdaptiveRuntime() remains in detectEvents(). Station Events, Current Assembly, and report generation still consume Adaptive events. No silent detector swap. 6. Settings architecture Existing analysis settings: global row + per-station overrides in analysis-settings.js, Station Review cards, PUT /api/station-review/settings/global and station override PUT. No parallel settings universe. 7. ERT setting storage Existing columns: β’ fixed_ert_enabled (boolean, default true) β’ fixed_ert_seconds (number, default 900) Read-only reshape: GET /api/pump-activity/ert-settings β { default_enabled, default_threshold_seconds, stations: { [id]: { enabled, threshold_seconds } } }. Writes go through the existing Station Review settings APIs. No new write endpoint. 8. ERT defaults 15 minutes (900 seconds) when no station override exists. Sands is not hardcoded. 9. Threshold semantics Granular rows only: RUN_SECONDS >= station.threshold_seconds Annotation metadata records comparison: 'gte'. Equality counts (6:00 at a 6-minute threshold is ERT; 5:59 is not). Validation range: finite, 1 to 2,592,000 seconds (1 second through 30 days). That is the existing analysis-settings bound. UI is minutes: 0.0167β43,200, converted Γ 60 on save. Allowed values include 6, 10, 15, 17, 20, 30 minutes. Invalid overlay input clamps to 900 seconds; settings save still rejects out-of-range values. 10. Shared table presentation model Fields actually implemented: β’ context β SEARCH \| TREND_EVENT \| TREND_MANUAL β’ start / end β’ pump β '' \| PUMP-1 \| PUMP-2 β’ row_mode β ALL_ACTIVITY \| EVENTS_ONLY β’ event_display β NONE \| ALL \| EXTENDED_RUNTIME \| CONSECUTIVE_SAME_PUMP β’ enabled_event_types β’ highlight_enabled β’ consecutive_available β’ ert_settings (optional snapshot of thresholds) 11. Annotation provider model src/public/pump-activity-presentation.js (BossPumpActivityPresentation): β’ ERT provider: derived from row runtime + per-station threshold β’ Consecutive provider: persisted evidence only (event_source_keys / source_key / is_event_row fallback) β’ 0βN annotations per row, keyed by sourceIdentity, not DOM index 12. Raw data integrity applyPresentation clones rows. Source objects are not mutated. Annotations are not written into duration history. Tests stringify the source array before and after. 13. Trend Report integration User-inserted granular tables get a collapsed Table Display card: Start, End, Pump, Rows, Events, Highlight Events, Apply. Event-from-tray tables default All Events + Highlight ON. Manual/Search-style inserts default None + Highlight OFF. Apply updates the same Canvas section (no duplicate). Context Before/After still exist; once they produce a new window, annotations follow that window. Current Assembly and Station Packet tables do not attach overlay presentation and do not show Table Display. They keep detector is_event_row highlighting. 14. Search Tables integration Granular duration tables (pump_runs, pump_durations, PumpDurationERT, rolling48_all, *_durations) show Rows / Events / Highlight. Defaults: Events: None, Highlight: Off, All Pump Activity. Consecutive is not offered. Aggregate tables (PumpActivityDaily, PumpActivitySQL, PumpActivityERT, StationActivityDaily) stay plain with the bar hidden. 15. Generate Report / aggregate handling Generate Report was not merged or redesigned. PumpActivityDaily MAX above threshold is not treated as a granular ERT event (aggregate: true, no Event column). 16. Time-range recalculation Annotations are computed from the tableβs current start/end. Expand the window β newly visible ERT rows annotate. Contract β out-of-range annotations disappear. The table is not married to the initiating event. 17. Row modes β’ ALL_ACTIVITY β all qualifying source rows; annotated rows carry labels when highlight is on β’ EVENTS_ONLY β only rows with currently enabled annotations β’ EVENTS_PLUS_CONTEXT was not built event_display = NONE forces ALL_ACTIVITY. 18. Highlight toggle / plain mode Highlight OFF (or Events = None): no event-row class, no Event column, no event_labels / event_annotations, no threshold text in the row payload. Same source rows, visually plain. 19. Pump filter Both / Pump 1 / Pump 2 preserved. Annotations follow remaining rows. 20. Sorting Existing newest/oldest/runtime sorts remain. Highlight class uses sourceIdentity, not row index. 21. Multi-station threshold behavior Each row uses that rowβs station config. Example: Sands 6 minutes + Magnolia 20 minutes β a 10-minute Sands row is ERT; the same duration at Magnolia is not. 22. Multiple-annotation support One row can show EXTENDED RUNTIME Β· CONSECUTIVE. Structure is a list, not one-event-per-row. 23. Consecutive compatibility Now: Trend Report event tables may show persisted Consecutive annotations when source keys or is_event_row evidence exists. Deferred: no detectConsecutiveRuns() changes, no LG30/C1, no historical reconstruction. Search Tables are ERT-only because complete Consecutive evidence is not available there. 24. Adaptive legacy behavior Preserved. Adaptive still feeds Station Events and Current Assembly. The new overlay is fixed-threshold ERT only. 25. Legacy fixed ERT tables PumpDurationERT and PumpActivityERT remain in the catalog and Python pipeline at 15 minutes. 26. Canonical snapshot / save-reopen presentation is optional on table sections. Legacy snapshots with presentation: null still validate and render with is_event_row. New snapshots store view state (including ert_settings when present) and reapply on reopen. 27. EMAIL rendering HUB presentTableSection applies the overlay when presentation is set and the table is not assembly-bound. EMAIL-v1 was not modified. Highlight still uses is_event_row; HUB sets that flag from overlay identity when annotations are shown. Plain presentation leaves rows unhighlighted and without an Event column. Cloudflare requests stay 0 in tests. 28. Auto/custom narrative autoTableNarrative() exists as a helper only. It is not wired into Current Assembly. Deferred to E4H.2. 29. Future AI compatibility A later local AI can set the same structured presentation object (station/start/end/pump/row_mode/event_display/highlight_enabled) without HTML-specific logic. No AI was implemented. 30. Files created β’ src/public/pump-activity-presentation.js β’ test/pump-activity-presentation-e4h1.test.js β’ test/pump-activity-table-integration-e4h1.test.js 31. Files modified β’ src/public/trend_report.js β’ src/public/trend_report.html β’ src/public/data_views.js β’ src/public/data_views.html β’ src/public/station_review.js β’ src/public/station_review.html β’ src/public/styles.css β’ src/server.js β’ src/services/saved-reports.js β’ src/services/trend-report-email.js β’ cache-bust strings in a few existing tests (saved-reports-e4d, station-event-email-ui-e4c1, station-review-queue-e4h1) Not modified: event-engine.js, analysis-settings schema (reused), Python ERT builders, EMAIL-v1, research/. 32. Focused E4H.1 tests 30 / 30 33. Search Tables regression 40 / 40 (catalog, exact time, pump, historical durations, shared renderer) 34. Trend Report regression 85 / 85 on X4 + E4G.6 / 6A / 6B core files; remainder included in full HUB 767. 35. Saved Report regression 16 / 16 (saved-reports-e4d + report-table-compatibility-e4d2) 36. Event/detector regression 54 / 54 (local events, event quality, fixed-ERT workflow, event presentation) 37. HUB full regression Starting baseline 737 / 737. 767 / 767 (737 prior + 30 E4H.1 tests) A first parallel run hit 766/767 from two suites sharing temp files; the serial rerun was 767/767. 38. EMAIL full regression 64 / 64 39. Capture reliability 9 / 9 40. Production DB writes 0 in tests. ERT settings GET is read-only. 41. Real emails sent 0. Cloudflare requests 0. 42. Real captures 0 43. Detector files modified NO. detectConsecutiveRuns() unchanged. detectFixedErt() still unused by detectEvents(). 44. Research files modified NO 45. Manual owner QA Live BOSS UI was not opened in a browser from this session; behavior was verified with node --test. Please confirm: 1. Station Review β settings: EXTENDED RUNTIME Enabled + Threshold (minutes). Set a station to 6.0; confirm storage is 360 seconds. Confirm Adaptive controls are unchanged. Confirm email/SMS are not flipped on. 2. Search Tables β historical durations: defaults Events None / Highlight Off. A 20-minute row looks like any other row. Turn Events = Extended Runtime and Highlight On β Event column and yellow row. Highlight Off β same rows, fully plain. 3. Search Tables β PumpActivityDaily: no Event overlay; MAX above 15 minutes is not an ERT event. 4. Trend Report: drag a Station Event table. Table Display exists. Defaults All Events / Highlight On. Events Only hides ordinary rows. Changing Start/End then Apply reloads annotations for the new window. Apply does not create a second Canvas section. 5. Current Assembly: no Table Display / Apply. Consecutive/Adaptive detector rows still highlight via is_event_row. No extra Event column from the overlay. 6. Save / reopen / email a mixed report: annotated user table stays annotated; a plain table stays plain; a pre-E4H.1 saved report still opens. 7. Multi-station granular table: different thresholds on two stations; a 10-minute run annotates only the 6-minute station. 46. Recommended E4H.2 (do not implement now) β’ Wire auto/custom narrative to the overlay counts β’ One unified event-aware pump-activity table per useful station/window β’ One standard trend β’ Stop emitting redundant automatic event-specific tables β’ Controlled Adaptive β owner-threshold ERT transition for Station Events (history preserved) βββ Acceptance check: raw rows immutable; per-station ERT; default 15 minutes; no moving average for the overlay; same table annotated or plain; Search defaults plain; event-focused Trend Report defaults annotated; range refresh; Events Only; All Activity; sort/pump/multi-station; no aggregate MAX-as-ERT; deterministic presentation; multi-annotation; Consecutive detector unchanged; Adaptive and legacy ERT tables preserved; historical snapshots compatible; no notifications/email/captures/production writes in tests. Stopped here. Automatic report assembly was not redesigned.