GAVARNIE-GÈDRE, France — Tim Wellens was still leading the peloton up the Tourmalet when UAE Team Emirates-XRG's tactical hand became visible. Six riders at the front — Wellens, Grösschartner, McNulty, Vermeersch, Yates, Del Toro — more coverage than anyone else in the race.1 Visma-Lease a Bike was down to Kuss and Piganzoli. Decathlon had already lost Matthew Riccitello to the climb at 50km to go; Daan Hoole, Paul Seixas's designated road captain, had been at the back of the peloton being sick before the day's first real ascent.
Then Isaac del Toro accelerated off Yates's wheel with the upper Tourmalet still to come. Jonas Vingegaard could not answer. The Dane was grimacing in a way rarely photographed on him — going somewhere very deep. His DS was on the radio: "Come on Jonas, you have to keep fighting. Come on, come on."1 A separate message followed: "You have to trust in yourself, Jonas. You're really good."
The gap widened through the summit. Behind the leading duo, a chase group gradually formed around Evenepoel, Seixas, and Lipowitz — Evenepoel pushing them into cooperation on the descent. Vingegaard carried a 40-second lead over that group with 5km left in the stage. Yellow jersey Torstein Træen had been dropped from the main peloton long before the summit, riding carefully to try to preserve the near eight-minute lead he'd built over the GC contenders since Stage 4. He didn't make it down cleanly — Træen went to the tarmac on the Tourmalet descent, passed the roadside concussion check, and remounted, but the yellow jersey was in serious jeopardy.1
Cian Uijtdebroeks, who had struggled throughout the race's first week, abandoned on the Tourmalet.1 The stage produced one of the Tour's high-profile withdrawals before it was even finished.
Seixas reached the finish with Evenepoel's group — his first Tour de France high-mountain test complete, though not under ideal conditions. Decathlon DS Julien Jurdie had called Stage 6 "the key moment of this first week" before the start. "We know it will be a very difficult moment and probably the highlight of this first week of the Tour de France," Jurdie had told Cyclism'Actu. "We imagine there will be attacks or a very high pace set by Visma-Lease a Bike or UAE Team Emirates-XRG."2 UAE gave them exactly that, on a day when Seixas had no Hoole and lost Riccitello before the Tourmalet's upper slopes. "A successful Tour would be one where I can compete for the overall classification until the very end," Seixas told France TV after Stage 5.2 Thursday gave the first data point on what that competition looks like.
The Seixas transfer circus reached new volume in the team paddock this week, but Decathlon team manager Dominique Serieys is projecting calm. "We're confident," he told Cyclingnews at the team bus on Wednesday. "We're focused on helping Paul at the Tour de France and he has a contract for 2027. Everyone else can say what they want, we will do our thing." Visma's Richard Plugge went on the record with Dutch television NOS: "We have a current team leader in Jonas, but we have to look to the future." Serieys told journalists that formal negotiations won't restart until mid-August at the earliest. UAE Team Emirates-XRG have been linked to an informal arrangement with Seixas's camp, but neither party confirmed anything publicly. Seixas himself, appearing on Vélo Club, said he hears plenty that is "false" and is staying focused on racing. Decathlon deputy team manager Mathieu Charpentier told Le Parisien this week that retaining Seixas beyond 2027 is a "strategic priority" — the French president is reportedly prepared to use political influence to ensure Seixas continues riding for a French team.3
Baptiste Veistroffer's Strava account revealed the numbers from his 144km solo break on Stage 5. The 26-year-old averaged 44.1km/h over 162.97km, putting out 323W average power and 343W weighted average, with a 1,358W peak.4 The effort edged past Jonas Abrahamsen's 141km solo from Stage 8 of the 2024 Tour. "Given how fit I am, I might have to be a bit more selective because there's a chance to achieve something really good," Veistroffer told BikeRadar.4 The last rider to win a Tour stage from a solo break of over 100km was Christophe Agnolutto in 2000.4
On the Road Ahead
Calendar from Jul 8, 2026 — primary source blocked today
Date
Race
Country
Thu Jul 10–Sat Jul 26
Tour de France, Stages 7–21 (ongoing)
France
Sat Aug 1
DSSK Donostia San Sebastián
Spain
Mon Aug 3–Sun Aug 9
Tour de Pologne
Poland
Sun Aug 16
ADAC Cyclassics Hamburg
Germany
Sat Aug 22–Sun Sep 13
La Vuelta a España
Spain
Show Results
WINNER: Tadej Pogačar (UAE Team Emirates-XRG)
PODIUM: 1. Pogačar, 2. Vingegaard (+2:40), 3. Del Toro (+2:57), 4. Evenepoel (+2:57)
GC AFTER: Pogačar retakes yellow jersey from Træen (crashed on descent)
NOTABLE: Uijtdebroeks abandons on the Tourmalet; Pogačar's 23rd Tour stage win moves him to 5th all-time, 8 behind Cavendish's record
TypeScript 7.0 Ships in Go — Slack Gets 40% of Its Merge Queue Back
↩ Developing story — first reported Jul 06 · previously Jul 08
Slack's engineers had stopped using local type-checking. The TypeScript language server took long enough loading their codebase that local development was effectively unusable — they routed type-checking through CI instead, a run that took about seven and a half minutes. Yesterday, Microsoft shipped TypeScript 7.0, a native port of the compiler in Go, and Slack's CI check is now 1.25 minutes.1 They also recovered 40 percent of their merge queue wait time. Local type-checking is feasible again.
The performance numbers hold across real-world codebases. The VS Code project: 125.7 seconds with TypeScript 6, 10.6 seconds with TypeScript 7 — 11.9×. Sentry: 139.8 seconds to 15.7 seconds. In the editor, the time from launching VS Code to the first diagnostic in the VS Code codebase drops from 17.5 seconds to 1.3 seconds — 13×. Canva's engineers go from 58 seconds to first error in the editor to 4.8 seconds. Microsoft's News Services team reports 400 hours a month saved in CI builds.
The speedup has two sources: native code and real parallelism. TypeScript 7 ships with a --checkers flag (default: 4 parallel type-check workers) and a --builders flag for parallelizing project-reference builds in monorepos. Pushing --checkers to 8 extends the VS Code speedup from 11.9× to 16.7×. The --watch mode is rebuilt on a Go port of Parcel's C++ file-watcher library. TypeScript 7 also uses less aggregate memory: 18 percent less on VS Code's build, 26 percent less on Bluesky's.
The caveat matters for a portion of the ecosystem. TypeScript 7.0 ships without a stable programmatic API. Tools that embed TypeScript directly — Volar (used by Vue, MDX, Astro, and Svelte) and Angular's template type-checker — must remain on TypeScript 6 for now. The team ships a @typescript/typescript6 compatibility package with a tsc6 binary to allow both versions side-by-side in the same project. API parity is targeted for TypeScript 7.1. CLI and standalone tsc are unblocked today; framework-embedded tooling waits.
The port is described by the team as faithful: same logic and structure as the original TypeScript implementation, translated to Go rather than reconceived. The objective was consistency with TypeScript 6 type-checking results, not behavioral change. Language-server command failures dropped over 80 percent and server crashes over 60 percent compared to TypeScript 6.0, attributed to the new architecture and the fuzz-testing infrastructure built during the port.1
The stability case for the Bun Rust rewrite fits in one table: running 2,000 in-process Bun.build() calls on v1.3.14, memory climbs continuously to 6,745 MB. The same workload on v1.4.0 canary — the first version of Bun written in Rust — levels off at 609 MB. That is the payoff Jarred Sumner's post published yesterday documents in detail.
The disclosure is in the first paragraph: Bun was acquired by Anthropic in December 2025, and Sumner used a pre-release version of Claude Fable 5 to run the port. The logistics: 535,496 lines of Zig, eleven days (May 3 through merge on May 14), approximately 50 dynamic workflows running up to 64 Claude Code sessions in parallel across four git worktrees, $165,000 in API tokens at list pricing, 6,502 commits.2
The engineering motivation was a specific class of bugs. A selection from v1.3.14's patch notes is instructive: heap-use-after-free in node:zlib when calling .reset() during an async write; double-free in the CSS parser; use-after-free in UDPSocket.sendMany(); race condition in MessageEvent's GC marker thread. Sumner's argument is that Zig's explicit ownership model, without automatic Drop semantics, requires per-call-site discipline the team was failing to sustain. Rust's borrow checker converts those failures into compile errors.
The most technically interesting detail in the post is the review architecture. Each implementing Claude is paired with two separate Claude instances that receive only the diff — no access to the implementer's reasoning — and are instructed to assume the code is wrong. Three documented bugs from the post show why this mattered. First: a missing Box::leak() before an async uv_close call, leaving libuv holding a pointer to freed memory after the Box dropped at the end of the match arm — use-after-free followed by double-free when the close callback fires. Second: trunc() instead of floor() in a file-timestamp conversion, generating negative nanoseconds in a timespec for pre-1970 mtimes. Third: unwrap_or() instead of unwrap_or_else() in a CSS color-mix parser, causing an eager panic on the fallback argument even when the fallback was never needed. All three compiled cleanly.
The rewrite introduced 19 known regressions, each subsequently fixed. The most illustrative: Zig's assert() is a function whose argument runs at every build; Rust's debug_assert!() is a macro that vanishes entirely in release builds. Code that called assert(insert_stale(...)) in Zig — where insert_stale had a necessary side effect of registering a file in the hot-reload graph — became debug_assert!(insert_stale(...)?...) in Rust, silently skipping the registration in release builds and breaking HMR for React projects with HTML routes. Debug builds worked fine.
Aggregate results: binary size drops roughly 20 percent on Linux and Windows (from 88 MB to 70 MB on Linux, 94 MB to 76 MB on Windows); Bun.serve HTTP throughput gains 4.8 percent; the parser stack is smaller, making deeply nested structures that previously crashed the process now throw cleanly. Bun v1.4.0 is in canary. Claude Code v2.1.181, released June 17, already runs on the Rust port — startup on Linux improved 10 percent, which Sumner notes "barely anyone noticed."2
Andrew Kelley, Zig's creator, published a reaction today. He is not displeased by the outcome: the Zig Software Foundation considers the Bun relationship to have been a "net liability" and is relieved it's over. His substantive objections concern the blog post's framing rather than the engineering outcome. He disputes that Bun was fuzzing its Zig code before the rewrite — "during our calls the whole Bun team told us that they were not fuzzing anything. This appears to be an outright fabrication."3 He argues the performance gains from LTO and comptime cleanup had nothing to do with the language change and could have been done in Zig all along. And he identifies what he sees as the post's central evasion: "The argument for shipping all the million lines of unreviewed code is that the test suite is good enough to catch everything. Then why are you saying you have so many annoying bugs in the Zig code?"
As this paper reported yesterday, the EU Parliament fast-tracked a vote to restore Chat Control 1.0 before the summer recess, a procedural move opponents called an unfair maneuver. The plenary vote happened today. Chat Control 1.0 is now authorized — not because it won a majority of votes cast, but because the motion to kill it fell short of the required threshold.
More MEPs voted against restoration than for it: 314 opposed, 276 in favor, 17 abstentions. Blocking required an absolute majority of 361. The motion to reject failed. Mass scanning of private messages on unencrypted platforms is authorized until 2028 or until a permanent regulation is reached. Affected services include Instagram, Discord, Snapchat, Skype, and Xbox direct messages, as well as Gmail and iCloud email. End-to-end encrypted services — WhatsApp, Signal — remain exempt; a symbolic exemption for encrypted communications was adopted separately, with no practical effect since providers don't scan those messages regardless.4
Patrick Breyer, the former MEP who has led civil liberties opposition to the measure, called the outcome "a farce" that "damages democracy." His structural argument: each interim extension removes the political pressure on EU member governments to negotiate a different framework. As long as they can renew voluntary, unsuspected scanning authorization on an indefinite basis, there is no incentive to engage with the Parliament's proposal for targeted, judicially authorized detection orders. EU Commission figures cited in Breyer's statement suggest the mass-scanning approach has limited utility anyway: private-chat scanning accounted for only 36 percent of abuse reports in 2024, the German BKA found 48 percent of incoming alerts not criminally relevant, and the Commission admits no evidence that the approach has increased criminal convictions or rescued children.4 Permanent Chat Control 2.0 negotiations resume in September.
Trending today: list dominated by Claude Code skill files, AI job-search automations, MCP wrappers, and curated agent lists — no technical novelty cleared the bar.
Chelan Hills Fire 50% Contained; Seattle Targets Renter Junk Fees
Chelan Hills fire, 50% contained — Douglas County's 9,700-acre blaze has one confirmed death; cadaver dogs are now searching the burn area for additional victims. KIRO 7
Vantage evacuation downgraded — Level 3 "Go Now" orders for the ~50-person town were reduced to Level 2 "Be Ready"; I-90 has reopened. KIRO 7
Federal Way joins WA's data center moratorium wave. The city council unanimously passed a 12-month hold on data centers larger than 1 megawatt or 4,000 sq ft, citing power demand, water consumption, noise, and emissions. It joins Seattle and Burien; city staff have until a September 1 public hearing to draft updated municipal code. Issaquah Reporter
Seattle moves to ban renter junk fees. Mayor Katie Wilson's proposed legislation would prohibit pet, appliance, mail, and package fees and require all rental costs to be disclosed upfront in listings — with violations potentially headed to court. Landlords are objecting to implementation ambiguity; if the council passes it, the ordinance takes effect July 2027. KIRO 7
Issaquah housing: council split on pace. A vote to relax upper-floor stepback and balcony requirements — constraints that had been limiting building design — passed, but drew two dissenting votes from members who wanted more aggressive reform, not less. The Urbanist
ON THE TRAIL
WEEKEND PICKS — Sat–Sun Jul 12–13
Weather window is solid across the pass. The I-90 corridor runs mostly sunny both days with precip in low single digits. Teanaway is outright dry.
---
Pick 1: Annette Lake — Snoqualmie Region › Snoqualmie Pass | ~45 min from Issaquah
Trip stats (mileage/elevation) not provided in the source trip report — verify on the WTA trail page before you go.
Weather: Sat Jul 12 — high 66°F, mostly sunny, 3% precip. Sun Jul 13 — high 70°F, sunny, 1% precip. (I-90 West / Snoqualmie Pass.)
Conditions (Jul 8): Zero snow on trail. All streams "low and easy to cross" but still flowing — no fords. No bug spray required that day, though the reporter notes conditions can shift; bring some. Wildflowers going out (beargrass, orchids); backcountry toilet at the lake; pit toilet and trash cans at the trailhead. Clears all six criteria. Popular trail — start early.
Pick 2: Lake Ingalls high camps — Snoqualmie Region › Salmon La Sac / Teanaway | ~100 min from Issaquah
Trip stats (mileage/elevation) not provided in the source trip report — verify on the WTA trail page before you go.
Weather: Sat Jul 12 — high 74°F, sunny, 0% precip. Sun Jul 13 — high 77°F, sunny, 0% precip. (I-90 East / Teanaway.)
Conditions (Jul 8): No bugs — "probably due to the wind and cooler temps." Wildflowers at peak ("many, many wildflowers... at peak now"). Stream water in the meadow near the camps. A couple of minor stream crossings on the way to the lake; none flagged as problematic fords. Camp at the high camps below Ingalls Pass — the Jul 8 reporter noted camping at the lake itself is reportedly not permitted. Trail clear; cairns mark the boulder section near the lake.
Crowds: Parking lot was 80% full by 8:30am on a Wednesday. Expect a packed lot on a summer Saturday. Plan to be rolling from Issaquah by 6am or be prepared to park on the road.
Clears all six criteria with an early start. Minor stream crossings are not ford-level; bugs absent Jul 8 due to wind; lot crowding is manageable if you start early.
I-90 West (Snoqualmie/North Bend | 35–55 min): Sat 66°F/3%, Sun 70°F/1%. Annette Lake: snow-free, water flowing, no bugs Jul 8. Pratt/Olallie Lakes loop: streams low and easy, wildflowers out, but the boardwalk just before the Talapus junction has multiple collapsed boards — watch footing going through that section.8
I-90 East (Teanaway | 90–110 min): Sat 74°F/0%, Sun 77°F/0%. Lake Ingalls wildflowers at peak, no bugs Jul 8 (wind-assisted). Jade/Marmot Lakes (23.5 mi / 4,500 ft over three days): good water and camps, confirmed fishing at Marmot, but mosquitoes were heavy on the return.
Mountain Loop Highway (90–120 min): Sat 67°F/10%, Sun 71°F/4%. Gothic Basin trail is clear of snow but has "traces of snow patches and some ice on the lake" — pass on trail runners here. Big Four Ice Caves is in excellent shape with good boardwalks.
Mt Rainier (110–140 min): Sat 61°F/2%, Sun 64°F/1%. Berkeley Park wildflowers are two weeks ahead of average, trail to First Burroughs snow-free, but mosquitoes are "horrendous" beyond Berkeley Camp — bring a head net. Sunrise area fills fast; lot was ~90% full by 10:45am on a weekday.
North Cascades / Hwy 20 (150–190 min): Sat 71°F/12%, Sun 73°F/5%. Cascade River Road to Cascade Pass trailhead reopened as of Jul 8 — worth noting for later in the season.9 Blue and Rainy Lakes: easy trails, plenty of water, but "mosquitoes out in full force" — long sleeves and pants advised.
Olympic Peninsula (180–240 min + ferry): Sat 47°F/18%, Sun 52°F/7% — cold, pack layers. Staircase area partially reopened after the 2025 Bear Gulch fire: Mt. Rose trail and Staircase Rapids open as of Jul 8; Flapjack Lakes and wilderness beyond the suspension bridge remain closed.10
Estonia's Government Had a Bug: This Is the Postmortem
The error was simple enough that it barely registered as a mistake at the time. In December, Estonia's parliament — the Riigikogu — passed amendments to the country's Gambling Tax Act intended to lower the tax rate on remote gambling. The wording, as enacted, applied the change only to "skill games." Online casinos, the actual target, were not covered. For an entire calendar year, they operated outside the tax net entirely.
The person who caught it wasn't a legislator or a ministry auditor. It was a legal counsel working for a gambling operator. The gap cost the Estonian government €24 million — roughly $27.4 million — in a single year, out of a gambling industry worth around €300 million annually.1
It was the kind of error that, once spotted, makes everyone feel slightly sick. The whole edifice of deliberation — committee review, readings, votes — and no one noticed that two phrases in a single clause failed to align. Luukas Ilves, Estonia's former undersecretary for digital transformation, tried something after the story went public: he fed the legislation to Claude and Gemini. Both systems immediately flagged the inconsistency.1
Within hours, Ilves had a prototype running. He called it Apsakaleidja — Estonian for "Fuckup Finder." It pulls draft bills directly from the Riigikogu's website and scans them for broken cross-references, contradictory wording, arithmetic errors, and impossible dates, then categorizes each finding by severity. Of the 112 bills currently listed on the tool, 102 are rated high risk.1 He demonstrated it on national television. The host's reaction, by all accounts, was amazement.
What happened next is the more interesting story. The mistake embarrassed the government. It also, apparently, clarified something for it. Prime Minister Kristen Michal told Wired: "The situation demonstrated that AI can be an incredibly useful assistant."1 He suggested in January that tools like the Fuckup Finder could be used to proactively scan draft legislation before it ever reaches a vote. He launched the Eesti.ai program, with a stated goal of doubling national productivity by 2035. In April, parliament received a bill giving state and local government the right to use AI systems to automate administrative processes. In June, Michal said the quiet part out loud at an Eesti.ai meeting: Estonia intends to become "the first country in the world to create official digital identities for AI agents."1
The move is less surprising than it sounds when you consider that 99 percent of Estonian public services are already online — a digital infrastructure that Wired itself was covering a decade ago.1 Estonia has been running government-as-software longer than most countries have seriously attempted it. The question the gambling tax error raised is the same question that haunts any sufficiently complex codebase: when a system reaches a certain scale, does human review actually catch the bugs? The honest answer, in Tallinn in December, was no.
The counterargument is straightforward. Catherine Flick, who researches technology ethics at the University of Staffordshire, puts it plainly: "Why are humans not doing this review process as part of the legislation drafting procedure?"1 She's not wrong that the Fuckup Finder is treating a symptom. Legislation that requires AI assistance to catch its own errors may be legislation that's grown too complex to govern itself — and adding AI to the review layer doesn't resolve that underlying problem, it papers over it.
Both things are true. The error should have been caught by humans and wasn't. And if a language model running for a few seconds can flag what months of parliamentary process missed, the practical case for using it is hard to dismiss. The interesting question Estonia is now stress-testing isn't whether AI belongs in the legislative process — it's whether government, treated as a software system, can be made to fail more gracefully.
Black-and-white pen-and-ink editorial illustration. A wooden Alaskan trolling boat rides the breaking crest of an enormous wave inside a narrow bay at night, hull silhouetted against churning white foam, radio antenna bent hard to one side, loose logs tumbling in the surge alongside. The wave face sweeps diagonally across the frame from lower-left to upper-right, its surface broken into dense cross-hatched turbulence. Sheared spruce stumps and root masses emerge from the boiling trough below. Steep forested bay walls rise on both sides, converging toward a pale shattered glacier face at the far end of the inlet. The boat sits twenty meters above the tree line—scale conveyed by geometry, not figures. Heavy linework in the wave trough, bold silhouette on the hull, generous white sky above the crest. No text. No human figures visible.
Bill Swanson was asleep on the Badger, a trolling boat anchored just inside Lituya Bay's mouth, when the mountains started moving.
At 10:15 p.m. on July 9, 1958, a magnitude-7.5 earthquake on Alaska's Fairweather Fault displaced the ground more than six meters horizontally and a meter vertically. At the head of the T-shaped bay, the shaking sheared 30 million cubic meters of rock — more than 80 trillion kilograms — off a cliff face nearly 1,000 meters high and dropped it straight into the inlet below. The impact displaced the water instantaneously. A wave swept through the main channel at 180 kilometers per hour.1
Swanson told the Alaska Sportsman afterward that he could see Lituya Glacier, normally hidden behind the bay's bend. It had "risen several hundred feet" and was "jumping and shaking like crazy."1 Then the wave hit the Badger and drove the boat over the low spit separating the bay from the open ocean, carrying it 24 meters above the surrounding treetops before the crest broke and the hull hit bottom and began to sink. Several logs came through with it; one smashed into the pilothouse and broke Swanson's ribs. He and his wife Vivian made it out in a skiff and were picked up by another boat looking for survivors.
Howard Ulrich, anchored two kilometers into the bay on the Erdie with his eight-year-old son, heard the earthquake as an explosion. He tried to pay out anchor chain to ride the wave, but it snapped. Convinced they were dead, he sent a radio distress call to his wife. The Erdie survived anyway — apparently carried up the southern shore and washed back in by the backwash. Smaller waves continued to roil the bay for half an hour afterward.
The Sunmore, anchored near the Badger, did not survive. Orville and Mickey Wagner went down with it. Of the six people in Lituya Bay that night, two died.
Aerial photographs taken after the wave showed a continuous trimline — a swath of bare rock and soil above which all vegetation had been stripped — reaching 524 meters up the hillside. Trees hundreds of meters tall, nearly two meters in diameter, had been sheared off at their bases. Barnacles ripped from rocks. A mining camp, a cabin, and the lighthouse at the bay's mouth: all gone. The wave's run-up at 524 meters remains the highest ever recorded.1
The precise mechanism took decades to work out. The 1960 USGS report by geologist Don Miller concluded the landslide, not the ground motion itself, generated the wave1 — but later modeling found the rock alone shouldn't have been enough. In 1999, oceanographer George Pararas-Carayannis proposed the explanation that finally held: a slide dropping from nearly 1,000 meters along a nearly vertical slope strikes the water not as a cascade of sequential impacts but as a single instantaneous mass. It hits like an asteroid.1 The displaced water has nowhere to go but up — and in the narrow, T-shaped geometry of Lituya Bay, with its walls of steep forested slope and a mouth just 10 meters deep, up is precisely where it went.
Earth Magazine's account of that night, drawing on the 1960 USGS report and subsequent modeling, describes the bay's shape as the amplifying mechanism: it is nearly a closed system. What would have been a large wave over open ocean became, inside Lituya Bay, the largest wave anyone has ever measured.
After Peanuts — on TypeScript 7.0 completing a Slack type-check in one minute twenty-five seconds, down from seven and a half, and what that means for the developer who quietly stopped running it locally. After The Far Side — on the two fishing boats carried hundreds of feet above the Lituya Bay treeline on this day in 1958.
IOC lifts Russia's three-year Olympic suspension — The IOC cleared Russian athletes to qualify for the 2028 Los Angeles Games under neutral status, provisionally ending the suspension imposed when the Russian Olympic Committee incorporated regional councils from occupied Ukrainian territories; flag and anthem remain banned until a separate future decision. npr.orgJul 7, 2026
FTC locks in right-to-repair win against John Deere — A 10-year consent order requires Deere to provide independent shops and farmers the same software-level repair access — including diagnostic code reading, resetting, and tool pairing — that authorized dealers receive, monitored by the FTC. wired.comJul 8, 2026
NASA/JPL open-sources a Wasm interpreter for spacecraft — SpaceWASM implements WebAssembly 1.0 in Rust for resource-constrained flight hardware with a custom allocator that makes peak memory deterministic, supports streaming single-pass decode, and cannot panic on allocation failure. github.comJul 8, 2026
Cloudflare engineer bans AI-written PR descriptions — Kenton Varda declared a moratorium on AI-generated pull request and commit messages after finding they itemized visible code details while omitting the higher-level framing reviewers actually need to understand what the change is doing. simonwillison.netJul 8, 2026
OpenAI upgrades ChatGPT voice mode with GPT-5.5 delegation — GPT-Live replaces the long-static GPT-4o-era voice model; it can hand harder tasks off to GPT-5.5 in the background and resume conversation when results are ready. simonwillison.netJul 8, 2026
Follow-up: Tour heat — Stage 6 in red zone, ASO proceeds unmodified — WBGT readings on multiple Stage 6 road sections exceeded the UCI's 28°C red-zone threshold, yet ASO made no stage modifications; Soudal DS Iljo Keisse said he handed out hundreds of bidons, and rider Dylan van Baarle publicly stated "ASO doesn't listen to the riders." cyclingnews.comJul 8, 2026
Ridley painted Træen's yellow Noah Fast in under 30 hours — After Torstein Træen took the yellow jersey on Stage 4, Ridley pulled a frameset from Belgian factory stock, had founder Jochim Aerts hand-paint it, applied decals and clear coat, and personally delivered it to Biarritz for Stage 6. bikeradar.comJul 8, 2026
How the three-second rule kept Vingegaard whole on Stage 5 — On sprint stages the UCI extends the standard one-second group-time threshold to three seconds; because riders were scattered across the road within that window between Pogačar's group and Vingegaard's wheel, the Dane finished 12 seconds down but received the same time. cyclingnews.comJul 9, 2026
Bonnie Tyler dies at 75 — The Welsh singer, whose distinctive husky voice resulted from 1976 surgery to remove vocal nodules, died unexpectedly in hospital in Portugal following emergency intestinal surgery in May; "Total Eclipse of the Heart" spent four weeks at No. 1 in the US in 1983. kiro7.comJul 9, 2026
After Estonia's parliament approved a gambling tax amendment that slipped through every committee reading without anyone catching a two-phrase mismatch, the harder question isn't whether AI should scan draft legislation — it's whether adding a better reviewer is the right response to a system that has outgrown its capacity to review itself.1
That question surfaces twice more in today's paper, in a completely different domain. As THE LAB reports, TypeScript's JavaScript implementation grew large enough that type-checking became a local development bottleneck; Microsoft's answer was a native port to Go.2 Bun's Zig codebase accumulated memory safety failures — heap-use-after-free, double-free, use-after-free — faster than the team could chase them down; the answer was Rust.3 Both moves follow the same logic Estonia reached for: the existing process is insufficient, so introduce a stricter external layer to catch what the existing process misses. Andrew Kelley's challenge to the Bun team is the sharpest articulation of the counterargument: the bugs were process failures, not language failures. You could have fuzzed in Zig. You could have reviewed more carefully. You chose to rewrite instead.4 The critics of Estonia's Fuckup Finder make an identical point — the legislative drafting process failed, and a scanning tool treats the symptom rather than the cause.1
The counterargument is pragmatic, not philosophical. At a certain scale, "fix the process" has no practical implementation path. A compiler written in JavaScript cannot check a five-million-line TypeScript monorepo in time for a developer to use it locally; that is not a process problem, it is a physics problem. Memory safety bugs in a language without automatic drop semantics require per-call-site discipline that grows harder to sustain as the codebase and team both grow. And a parliament running hundreds of amendments through committee simultaneously cannot audit every cross-reference at the speed modern legislatures operate. The AI auditor, the Rust borrow checker, and the Go port all do the same thing: they raise the floor on what complexity can be caught, without reducing the complexity itself.
That is the question worth carrying. Every institution under complexity pressure eventually reaches for a better reviewer — a new tool, a stricter language, an automated scan — because the alternative is admitting the system has grown too complex to be safely governed by anyone. The floor-raise is real; the Bun numbers and the TypeScript benchmarks and the Estonian prototype all show measurable gains. But the floor is not the ceiling, and the underlying question — whether the system should be this complex in the first place — almost never gets asked, because no one is in a position to answer it.
A strong edition on a genuinely news-heavy day: Pogačar cracks the GC pack on the Tourmalet, TypeScript 7.0 ships in Go, Bun gets rewritten in Rust with AI, and the Lituya Bay megatsunami gets a quietly excellent archive treatment. The edition has real shape. Three problems hold it back: THE QUESTION opens on the same Estonia story as THE LONG READ, violating an explicit collision rule; the ON THE TRAIL weekend picks punt mileage and elevation data to the reader instead of estimating it; and a scout EISDIR error caused a 3.5-hour pipeline stall that sent the researcher into production without web search results, though the run recovered cleanly.
Frontpage
The deployed PNG reads clearly as a newspaper front page. Masthead and issue number are correct. The daily strip is legible. The lead headline — "Stage 6: Del Toro Fires, the Tourmalet Cracks the GC Pack" — fills the full width at 64px with appropriate drama. The Lituya Bay illustration is the visual highlight: a dramatic diagonal wave, strong boat silhouette, hatched turbulence in the trough. It earns its placement.
Row 2 has a layout imbalance: THE QUESTION column gets a 40px h2 while THE LAB column gets 26px, even though THE LAB has the higher priority (85 vs. 75). This is a CSS choice by the art director that visually elevates THE QUESTION above its section rank. Not a defect, but it reads oddly when LAB's headline is smaller than the section ranked below it.
THE WORLD and ALSO NOTED sit correctly in the right stack, with THE WORLD showing headline only per its frontpage_display: "headline_only" rule. The ALSO NOTED bullet list clips the last 2–3 items at the bottom edge — expected behavior under overflow: hidden, and the most important bullets are visible.
The full-article index.html section ordering (PELOTON → LAB → WORLD → LONG READ → ARCHIVE → FUNNIES → ALSO NOTED → QUESTION) matches the section_tiers configuration. No duplicate content or broken structure detected.
Priority ranking
Section
Priority
Length
Image
Notes
THE PELOTON
93
761 words
—
Major GC shake-up, first Pyrenees stage
THE LAB
85
1,365 words
—
Four stories: TS7, Bun Rust, Kelley, Chat Control
THE QUESTION
75
434 words
—
Cross-domain bridge, but collides with LONG READ
THE LONG READ
70
628 words
—
Estonia AI; single source
THE WORLD
55
881 words
—
All WA state; no global coverage today
FROM THE ARCHIVE
40
569 words
yes
At cap; on-date event
ALSO NOTED
10
9 bullets
—
THE FUNNIES
8
description
—
Two strips, not one
The PELOTON at 93 is defensible — this is the first Alpine GC test of the 2026 Tour, Pogačar takes yellow, Vingegaard goes 2:40 down. THE LAB at 85 is plausible given three genuinely significant stories, though Chat Control arguably belongs elsewhere. THE LONG READ at 70 is generous for a single-source treatment of a piece whose central argument is completed in three paragraphs; 60–65 would be more accurate. FROM THE ARCHIVE at 40 is correct and earned. The art director respected the ordering: PELOTON leads the page, LAB and QUESTION and LONG READ fill Row 2 in descending priority.
Editorial reading
Finding 1 — THE QUESTION opens on THE LONG READ's story (collision rule violated). The QUESTION's lede opens: "After Estonia's parliament approved a gambling tax amendment that slipped through every committee reading without anyone catching a two-phrase mismatch…" This is the same subject, same frame, and same primary Wired source (wired.com/story/the-28-million-dollar-mistake...) as THE LONG READ. The config is unambiguous: "THE QUESTION may not share primary sources with THE LONG READ on the same day, and may not re-state THE LONG READ's central statistic." Citation 1 in THE QUESTION and the sole citation in THE LONG READ are identical. The cross-domain bridge the writer constructed (Estonia → TypeScript → Bun as three instances of "adding a better reviewer") is genuinely good structural thinking — it would have been the edition's best piece if it had entered through the TypeScript or Bun angle and brought Estonia in as a third data point in paragraph 2. Instead it re-narrates THE LONG READ's lede and calls it a bridge.
Finding 2 — ON THE TRAIL mileage/elevation punted to reader. Both weekend picks carry: "Trip stats (mileage/elevation) not provided in the source trip report — verify on the WTA trail page before you go." The config's subsection spec is explicit: "Source mileage and elevation from the WTA trip report or the trail's WTA hike page cited in the report — if neither states one or both numbers, give a '≈' estimate and say '(estimate)'." The writer is supposed to visit the WTA trail page and report numbers, or produce estimates. Telling the reader to go verify it themselves is the exact task the section is meant to do. Annette Lake (7.4 mi / ~1,400 ft round trip) and Lake Ingalls (~9 mi / ~2,600 ft to the lake) are well-documented trails; the WTA pages have the data. The picks are otherwise well-written and the weather quotes are correctly formatted.
Finding 3 — THE LAB is overloaded, and Chat Control is the wrong fit. At 1,365 words THE LAB is carrying TypeScript 7.0, the Bun Rust rewrite, Andrew Kelley's reaction, and EU Chat Control — four distinct stories in one section. The first three form a coherent technical argument. Chat Control is EU legislative surveillance policy, sourced from a politician's website (patrick-breyer.de). The LAB section focus says "Tech, games, and engineering — filtered hard for depth and substance." Three paragraphs of vote tallies and MEP quotes sit awkwardly after eight paragraphs of borrow checker semantics. Chat Control would have been a solid ALSO NOTED bullet (or even a short WORLD item given its EU policy character) and would have freed 350 words in THE LAB for the TypeScript and Bun analysis, which are both excellent and deserved more space.
Finding 4 — THE LONG READ is single-source. All five citations in the Estonia piece point to one Wired URL. This is a section defined by depth. Luukas Ilves posted about the Apsakaleidja prototype publicly; the Estonian parliament's website has the bill text; Estonian-language outlets covered the gambling tax gap. The Wired piece is well-reported and the writer's summary of it is competent, but five citations to the same article undersells a section that is supposed to be exceptional. The writer ran in 63 seconds ($0.05) — the fastest and cheapest writer in the run — which correlates with grabbing the first fetched source and stopping.
Finding 5 — THE WORLD has no world-level coverage, but does not say so. The section covers: Chelan Hills fire (Douglas County, WA), Vantage evacuation (Kittitas County, WA), Federal Way data-center moratorium, Seattle renter fees, and Issaquah housing. This is entirely Washington state. The Iran thread was dropped (no new facts — defensible). But the section's config says "Major world news AND local Seattle / Eastside news" and the slug is "THE WORLD." On a quiet global day, the section should acknowledge the absence ("No major world developments today worth the space") rather than silently omitting the block. As written, a reader skimming the slug expects at least one item from outside the state. The Chelan Hills wildfire and Vantage evacuation are regional emergencies that matter to the reader; they are not the same as global news.
Pipeline observations
Scout EISDIR failure → 3.5-hour pipeline stall. The first scout (agent-a9c43f16237d8539c, ran 12:09–12:11) completed all 45 web searches successfully. It then tried to verify the output directory existed using the Read tool on the path /home/user/peloton-dispatch/2026/07/09, received EISDIR: illegal operation on a directory, failed to recover, and halted without writing search_results.md. The orchestrator did not detect this — the parent session waited 3.5 hours (12:09 to 15:46) assuming the agent was still running. At 15:46 the orchestrator gave up and launched both the researcher and a second scout simultaneously. The second scout (agent-a5c7e13af09bf2322, 15:47–15:52) ran correctly and wrote 82 URLs. But the researcher (agent-aee501459e632440b, started 15:46:47) had already begun and produced its brief from feeds.md alone. The edition recovered: the second scout's URLs were available to the sweep and ALSO NOTED writers downstream. But the researcher's full brief was built without the web-search layer, meaning niche stories in the search results (Chloe Dygert update, Cannondale factory closure, the SharePoint RCE CISA KEV) were not assessed by the researcher for inclusion. The root cause is the scout using Read on a directory — it should use ls or Bash to check directory existence. This failure pattern has also occurred before (the scout sometimes tries to verify output paths with the wrong tool).
Fact-checker caught and corrected an attribution error in THE PELOTON. The writer said Del Toro "accelerated off McNulty's wheel." The fact-checker (agent-a35a5e82e5269b0c6) read the live blog timestamps (14:13 McNulty dropped, 14:14 Del Toro attacks) and corrected it to "Yates's wheel." The section shipped clean on this point. This is the fact-checker functioning correctly.
Fetch results: all 29 fetches succeeded. No unrecovered failures. The procyclingstats.com calendar fell back to the Jul 8 cached copy (logged in fetch_results.json as cached_from: 2026/07/08), which is the intended behavior. Two thin fetches worth noting: pages/world/vantage-evacuation.md is 511 bytes (placeholder with evacuation status, no detail); pages/world/issaquah-housing-reforms.md is 309 bytes (contains only the author bio, no article content). The WORLD writer compensated for both by drawing on RSS feed snippets, which did contain the key details (the feeds.md entry for the Issaquah housing story includes "upper-level stepbacks and outdoor balconies approved… two dissenting votes"). No hallucination detected.
No log-pipeline-alerts.md present. No pipeline alerts to surface.
Funnies section shipped two comic strips. The comic agent's task description reads "Draw today's TWO parody comic strips." The section spec in newspaper.yaml says "A short single-image parody comic." The dispatcher is asking for two strips but the config configures one. The section-funnies.md describes both strips; the funnies-openai.png exists. This is a dispatcher/config inconsistency.
Trace highlights
The 3.5-hour scout stall is invisible in the trace but dominates wall clock. The scout ran 131 seconds per the trace summary, which counts only the agent's active time. The 3.5-hour wait does not appear in any agent's wall-clock measurement. The overall dispatch took roughly 5 hours (12:08 to 17:01 per commit timestamps) — of which approximately 3.5 hours was the orchestrator waiting for a scout that had already finished.
Researcher at $1.24 from feeds.md alone. The researcher consumed 2.4M cache-read tokens and took 1017 seconds ($1.24) — the most expensive subagent. It produced a solid brief from the 948-line feeds.md, but the 82 search-result URLs from the second scout were unavailable. Some of those URLs (thread stories for Dygert, Cannondale) did not make it to the research brief and were not surfaced to the writers.
THE LONG READ writer: 63 seconds, $0.05. The fastest and cheapest writer. Against a section spec that calls for "exceptional" longform, this run time suggests it read the first usable source, found a good Wired piece, and stopped. Three candidate sources were in the brief (dropped lists two others as "not fetched"). The writer could have pushed the researcher or fallen back to the Estonian parliament's public bill portal, but the pace of the run suggests it did not.
Art Director at 1,616 seconds, 32K output tokens. The art director spent 27 minutes generating frontpage.html, which is the last step before commit. 32,018 output tokens for a 470-line HTML file is high — the art director appears to generate the full stylesheet inline on each run. Templating the CSS and having the art director fill only structural decisions and content blocks could cut this to under 5K output tokens and under 5 minutes, potentially taking 20+ minutes off the critical path on every run.
Trace summary
Dispatch 2026-07-09 (model: claude-sonnet-4-6)
Agent
Dur
Input
Output
Cache Read
Cache 5m
Cache 1h
Cost
Scout
131s
2764
2003
42243
58731
0
$ 0.27
Researcher
1017s
1077
1105
2415795
130988
0
$ 1.24
Scout
286s
3842
54
166099
53422
0
$ 0.26
THE WORLD
486s
7
34
74137
156033
0
$ 0.61
THE PELOTON
335s
8
41
122440
49807
0
$ 0.22
THE LAB
395s
2737
41
138697
126297
0
$ 0.52
THE LONG READ
63s
6
26
39370
8835
0
$ 0.05
FROM THE ARCHIVE
137s
6
27
57374
22585
0
$ 0.10
FC: THE LONG READ
147s
7
33
82861
32940
0
$ 0.15
Meta-Writer
71s
6
25
47196
21979
0
$ 0.10
FC: FROM THE ARCHIVE
179s
7
34
93050
26526
0
$ 0.13
Illustrator
49s
233
1372
0
0
0
$ 0.06
FC: THE PELOTON
526s
7
37
111673
91285
0
$ 0.38
FC: THE LAB
421s
7
33
170934
74587
0
$ 0.33
FC: THE WORLD
426s
8
43
183507
70187
0
$ 0.32
THE QUESTION
207s
7
35
98969
34180
0
$ 0.16
FC: THE QUESTION
301s
8
42
193381
68939
0
$ 0.32
ALSO NOTED
342s
9
53
255344
72932
0
$ 0.35
Draw today's TWO parody comic strips for
554s
10
295
306402
85602
0
$ 0.42
FC: ALSO NOTED
545s
11
66
297180
61661
0
$ 0.32
Funnies (OpenAI)
175s
295
7024
0
0
0
$ 0.28
Art Director
1616s
11
32018
11957
96359
0
$ 0.85
Update story threads for today's edition
402s
5
17
7220
99300
0
$ 0.37
Orchestrator
186
31533
8265492
0
179923
$ 4.03
TOTAL
11264
75991
13181321
1443175
179923
$11.83
Suggestions for next edition
1. THE QUESTION writer: enter through the non-LONG READ angle. When the cross-domain bridge involves the same primary source as THE LONG READ, the entry point must come from a different section's material. Today's correct opening is something like: "After Microsoft rewrote TypeScript in Go and Bun rewrote itself in Rust for the same reason Estonia built an AI to scan its own legislation, the pattern is worth naming..." — Estonia arrives in paragraph 2 as the third case, not the opening frame.
2. ON THE TRAIL writer: go to the WTA trail page. The config has always said to source mileage and elevation from the WTA trail page if the trip report doesn't have it. Annette Lake and Lake Ingalls are popular, well-documented trails. "Verify on the WTA trail page" should never appear in the published article — it belongs in the writer's research notes, not in the reader's output.
3. Fix the scout's directory-check tool. The EISDIR error pattern (scout uses Read on a directory path to check existence) has been seen before and has now cost one run its full web-search layer plus 3.5 hours of wall clock. The scout should verify the output directory with Bash ls or a Python os.path.isdir check, not the Read tool. A one-line fix in the scout agent prompt eliminates the entire failure mode.
4. Cap the LAB section at three stories and push policy items downstream. Chat Control is important but it is legislative surveillance policy, not the lab beat. When THE LAB is already carrying two major technical stories (TypeScript 7.0, Bun Rust rewrite with independent reaction), a third technical story from the same session should go to ALSO NOTED rather than extending the section to 1,365 words. The reader running a timer before work does not benefit from a wall of text in the section they came for.