RSS Feeds

‘A Flagrant Attack’: International Criminal Court Slams Trump Administration Sanctions
Published: 2026-08-19 16:02:50 | Created: 2026-08-19 16:09:56
Secretary of State Marco Rubio sits next to President Donald Trump during a Cabinet meeting at Camp David in Maryland on July 31, 2026. —Aaron Schwartz—AFP via Getty Images

The International Criminal Court (ICC) said Wednesday that it “deplores” sanctions imposed this week by the U.S. State Department on its president, Judge Tomoko Akane, and Abdoulaye Seye, a Senegalese senior trial lawyer for the Office of the Prosecutor.

The State Department announced the sanctions Tuesday, accusing Akane and Seye of having “directly engaged in efforts by the ICC to investigate, arrest, detain, or prosecute officials whose government has not consented to ICC jurisdiction.” 

The sanctions include the freezing of assets in the country, blocking financial transactions, and prohibiting entry to the U.S. They were imposed under an Executive Order issued by President Donald Trump in February 2025, which reads: “The United States unequivocally opposes and expects our allies to oppose any ICC actions against the United States, Israel, or any other ally of the United States that has not consented to ICC jurisdiction.”

Neither the U.S. nor Israel is a state party to the Rome Statute, the treaty that founded the ICC and went into effect in 2002, and therefore do not recognize the jurisdiction of the court. 

Read More: Trump Administration Vows to Dismantle the International Criminal Court

“These sanctions are a flagrant attack against the independence of an impartial judicial institution which operates pursuant to the mandate conferred by its states parties,” the ICC statement said. “Such measures targeting judges, prosecutors and staff who work towards the fulfilment of the mandate that was conferred to the ICC by states undermine the rule of law.”

The Court further warned that the sanctions put “international legal order” at risk.

In his first term, Trump imposed sanctions on ICC Prosecutor Fatou Bensouda and another senior official, Phakiso Mochochoko. These were later lifted under the Biden Administration. 

The ICC says that nine of its 18 judges are now under sanctions from Washington, as well as both deputy prosecutors, a former prosecutor, and one other member of staff. 

Why does the Trump Administration oppose the ICC?

Announcing the sanctions on Tuesday, Secretary of State Marco Rubio called the ICC a “corrupt and fatally politicized supranational court.” He accused it of repeated attempts “to assert authority over nationals of the United States and other countries that have not consented to its jurisdiction or ratified the Rome Statute.”

The Trump Administration has long pushed back against the ICC’s investigations and charges against nationals from both the U.S. and Israel. February’s Executive Order said the ICC’s recent actions against both countries “set a dangerous precedent.”

The State Department also launched a campaign in July to “dismantle” the ICC’s jurisdiction, saying it will “systematically disable the ICC’s ability to operate, target American servicemen or officials, or otherwise threaten American sovereignty.” 

But the tensions trace back to Trump’s first term, when the ICC sought to investigate possible war crimes committed by the CIA and military personnel in Afghanistan. Bensouda requested authorization in 2017 to investigate those allegations. Trump then brought sanctions against her in 2020.

The U.S. has also rebuked its actions in recent years against Israel.

In November 2024, the ICC issued arrest warrants for Israeli Prime Minister Benjamin Netanyahu and the recently dismissed Defense Minister Yoav Gallant. Both were accused of “crimes against humanity and war crimes" pertaining to the ongoing Israel-Hamas War, including “starvation of civilians as a method of warfare” and “intentionally directing attacks against a civilian population.”

The conflict was ignited by Hamas’s terror attack in southern Israel on Oct. 7, 2023, which left some 1,200 people dead and 250 taken hostage. Since then, over 73,000 Palestinians have been killed in Gaza—1,262 of whom have been killed since a cease-fire began last October, according to Gaza’s Ministry of Public Health on Aug. 15. 

The prosecutor also pursued arrest warrants for Hamas leaders Mohammed Deif, Ismail Haniyeh, and Yahya Sinwar, all of whom have since been killed. 

During Rubio’s Senate confirmation hearing in 2025, he addressed the warrant for Netanyahu. “This is a test run. This is a trial run to see, ‘Can we go after a head of state from a nation that’s not a member?’” he said, adding: “If we can go after them and we can get it done with regards to Israel, they will apply that to the United States at some point.”

Israel has denied the ICC’s war crimes accusations and challenged its jurisdiction. The Pre-Trial Chamber initially rejected that challenge, but in April 2025 the Appeals Chamber sent it back for reconsideration. The arrest warrants against Netanyahu and Gallant remain in effect.

Netanyahu commended Rubio’s sanctions announcement on Tuesday, describing the ICC as “a kangaroo court that cloaks its abuse of power in the language of international law while undermining the very principles of justice.” 

show more
Texas GOP Senate candidate Ken Paxton works to overcome fundraising woes
Feed: ABC News: Top Stories (https://abcnews.go.com/abcnews/topstories)
Published: 2026-08-19 16:06:14 | Created: 2026-08-19 16:07:55
Paxton's fundraising numbers are dwarfed by both his predecessor's and his opponent's.
show more
For Caitlin Simmers, Surfing Is a Dance Born on the Waves
Published: 2026-08-19 09:00:25 | Created: 2026-08-19 16:07:55
Caitlin Simmers, a world champion surfer, sees her sport as dance. How does this translate? She’s as seamless as a ribbon.
show more
‘It’s Bonkers’: Jennifer Hegseth’s Hands-On Role in Her Husband’s Pentagon
Published: 2026-08-19 17:32:25 | Created: 2026-08-19 16:07:55
After an 18-year career at Fox News, she is now her husband’s most influential adviser and de facto producer, shaping the job like no Pentagon spouse has before.
show more
Everyone’s Using This A.I. Dictation App That I Want to Murder With a Hammer
Published: 2026-08-19 09:00:54 | Created: 2026-08-19 16:07:55
Wispr Flow is supposed to make writing effortless and magical. So I “wrote” this column with it.
show more
The DOJ official behind a record number of federal monitors going to midterm polling sites
Published: 2026-08-19 15:57:48 | Created: 2026-08-19 16:07:54
The Department of Justice plans to send out a record 1,000 federal monitors to polling sites across the U.S., a higher number than is usual. CBS News' Sarah Lynch explains what's behind the push.
show more
Unhinged White House response shows senator’s ‘Natalie’ barb struck a nerve
Feed: World news | The Guardian (https://www.theguardian.com/world/rss)
Published: 2026-08-19 15:41:19 | Created: 2026-08-19 16:06:57

Senator Jon Ossoff, who is up for re-election, came up with arguably the standout line of the midterm elections so far

Hello there,

Jon Ossoff really struck a nerve. That much is clear.

Continue reading...
show more
Sacking turns former Zelenskyy loyalist into potent political opponent
Feed: World news | The Guardian (https://www.theguardian.com/world/rss)
Published: 2026-08-19 15:52:04 | Created: 2026-08-19 16:06:56

Mykhailo Fedorov’s blistering critique comes at a time of growing pressure for democratic renewal in Ukraine

For more than a month, demonstrators have gathered in Ivan Franko Square outside Volodymyr Zelenskyy’s office. The protesters have been chanting a name – not that of Ukraine’s embattled president but that of the man he recently sacked as defence minister, Mykhailo Fedorov. On Sunday evening, 2,000 people marched along Khreshchatyk, Kyiv’s main boulevard, waving cardboard banners in support of their ousted hero.

Zelenskyy has refused to reinstate Fedorov, who during his six months in the job was widely seen as an effective and reforming figure. On Wednesday, Ukraine’s parliament, the Rada, voted to approve a successor as defence minister, Yevhen Khmara. The move shows that Fedorov has been shut out from government permanently, and confirms his transition from trusted insider and Zelenskyy loyalist to a potent political opponent.

Continue reading...
show more
От мирового признания до трагедии: две истории, две стороны киберпреступности
Feed: Все публикации подряд на Хабре (https://habr.com/ru/rss/articles/)
Published: 2026-08-19 16:05:35 | Created: 2026-08-19 16:06:55


Как вы представляете себе хакера в реальной жизни? Наверное, в голове сразу возникает образ из киберпанка или, напротив, тихого парня в очках и свитере с высоким горлом, сидящего в углу кабинета.

И второй вопрос: чем, по-вашему, занимается современный хакер? Скорее всего, вам представляется злоумышленник, ворующий аккаунты в социальных сетях, не так ли?

Реальность конечно как всегда работает слегка по другому и сегодня я расскажу две истории с кардинально разным финалом, но общим нарративом. Это рассказы о хакерах, что во многом повлияли на наш мир, но каждый по своему.

Читать далее
show more
Google Pixel 11 Pro and Pixel 11 Pro XL Review: Smart Software, Small Upgrade
Published: 2026-08-19 16:00:00 | Created: 2026-08-19 16:02:58
Google’s new voice typing is pure magic, but subpar gaming performance and a useless rear LED keep these flagships from true greatness.
show more
Айсберг по Confluence: открываем спрятанное на самом видном месте
Feed: Все публикации подряд на Хабре (https://habr.com/ru/rss/articles/)
Published: 2026-08-19 16:00:34 | Created: 2026-08-19 16:01:57

Привет, Хабр! На связи старший технический писатель РТЛабс Фёдор Пеплин.

Команда РТЛабс — коллектив из 2500+ человек. Объём контента для такого количества сотрудников может исчисляться миллионами знаков, а количество пространств, используемых для хранения информации и работы с ней, — несколькими сотнями. При этом всем нам нужно хранить информацию и обмениваться ею. Один из инструментов, который мы используем для этого, — Atlassian Confluence. В этой статье я поделюсь некоторыми лайфхаками, которые позволят значительно упростить работу с ним.

Читать далее
show more
'No serious dispute' that Comey's seashell post could be read as a Trump threat, prosecutors say
Feed: PBS News Hour - The Latest (https://www.pbs.org/newshour/feeds/rss/headlines)
Published: 2026-08-19 15:57:25 | Created: 2026-08-19 16:01:57
Prosecutors also called into question Comey's account that he had found the seashells in the numerical arrangement of "86 47" while walking on a beach in North Carolina and suggested that his May 2025 post on Instagram was an effort to generate attention for a forthcoming novel.
show more
‘You’ll be sorry you told me this!’: the 98-year-old composer who gets musicians – even bassoonists - on their feet
Published: 2026-08-19 15:49:27 | Created: 2026-08-19 16:01:56

Scotland’s Thea Musgrave is still writing radical music with perambulatory soloists and a message of hopefulness. Her latest work, for bassoonist Amy Harman, comes to the Proms this weekend

Thea Musgrave is a phenomenon. Born in Scotland in 1928, the composer has lived in the US since the early 70s, but has lost none of her accent, her infectious optimism, and her drive to keep writing. As she told me from her home in California, with a joyfully rolling laugh, “I’ve got to this age, and from now on I’m going to do what the fuck I want to do”. That includes her latest opera, on Virginia Woolf’s novel Orlando – Orlando: An Escapade – which will premiere at the Buxton festival next year, and a new bassoon concerto for Amy Harman, Out of the Darkness, which you can hear at the Proms this weekend, on 23 August.

The bassoon concerto develops one of the central innovations of Musgrave’s life and career, which she’s still intensifying and exploring in her 99th year: what she calls her “dramatic-abstract” approach to her orchestral compositions, in which the players aren’t a single collective told what to do by a conductor’s gestures, but instead are released as individual characters and identities.

Continue reading...
show more
Off-duty cop killed, possibly armed woman wanted
Feed: ABC News: Top Stories (https://abcnews.go.com/abcnews/topstories)
Published: 2026-08-19 20:49:31 | Created: 2026-08-19 16:01:56
A woman who helped to provide mental health support for first responders is wanted by the police in connection with a fatal domestic incident with an off-duty cop.
show more
White House intensifies attacks on opponents and media as Trump seeks new mouthpiece
Published: 2026-08-19 15:41:19 | Created: 2026-08-19 16:01:55

Senator Jon Ossoff, who is up for re-election, came up with arguably the standout line of the midterm elections so far

Hello there,

Jon Ossoff really struck a nerve. That much is clear.

Continue reading...
show more
Trump says he expects to meet with North Korea's Kim Jong Un this year
Published: 2026-08-19 16:15:56 | Created: 2026-08-19 16:00:55
President Trump wants to meet again with Kim Jong Un to discuss denuclearization, the Wall Street Journal reports, despite having nothing to show for 3 previous summits.
show more
'Don't rape, sexually assault or make kissing noises', asylum seekers warned in new guidance about living in UK
Feed: The Latest News from the UK and Around the World | Sky News (https://feeds.skynews.com/feeds/rss/home.xml)
Published: 2026-08-19 14:34:00 | Created: 2026-08-19 15:58:55
A guide for asylum seekers published by the Home Office has told them not to rape or sexually harass people, including partners and children.
show more
Написал боту «как прошла неделя». Он сам полез в Garmin и ответил
Feed: Все публикации подряд на Хабре (https://habr.com/ru/rss/articles/)
Published: 2026-08-19 15:56:00 | Created: 2026-08-19 15:57:55

Garmin у меня на руке два года. Сон, пульс, HRV, стресс, Body Battery, каждая тренировка по секундам, каждый подход в зале. Всё это оседает в Garmin Connect и там же и остаётся.

Хотелось просто спросить у ChatGPT, как прошла неделя. По своим цифрам, а не общими словами про сон вообще. ChatGPT их не видит, поэтому спрашивал по-другому: открывал Garmin Connect, скринил график сна, скринил HRV, скринил тренировку, кидал скрины в чат один за другим. Работало, но криво. На одном скрине сон, на другом HRV, а связать их между собой должен был я сам, руками, в голове. ChatGPT видел кусок картинки, а не то, что происходило со мной за неделю целиком.

Задолбался. Написал скрипт, который сам забирает сон и HRV за сегодня и складывает в файл. Без плана на будущее, просто чтобы не переписывать руками. А дальше пошло по накатанной: файла быстро стало мало, появился отчёт за неделю, потом бот в Телеграме, потом бот научился не только отвечать, но и сам создавать тренировки в Garmin. Сейчас это открытый проект. Ставится на свою машину.

Про архитектуру и код у меня отдельная статья, там кэш и все технические подробности. Здесь про другое: что реально можно спросить и зачем вообще этим заниматься.

Читать далее
show more
Jellyfish mesmerise in their own museum in Florida
Published: 2026-08-19 15:39:08 | Created: 2026-08-19 15:57:55
The Jellyfish Museum in Pompano Beach is believed to be the first in the US dedicated entirely to the floating predators.
show more
Rider 2026.2.1 and ReSharper 2026.2.1 Are Here!
Feed: The JetBrains Blog (https://blog.jetbrains.com/feed/)
Published: 2026-08-19 15:36:45 | Created: 2026-08-19 15:57:54

Our first minor update for the 2026.2 release cycle is ready to download. Here’s what’s new.

Rider

Rider 2026.2 put AI-assisted development front and center, and v2026.2.1 keeps that momentum going:

  • The bundled refactoring-code skill helps AI agents refactor code faster and at lower cost. Get the full story.

The refactoring-code skill, bundled in JetBrains Rider

Median task time

before: 157.9s after: 26.6s

83% faster

Cost per solved task

before: USD 0.52 after: USD 0.19

64% cheaper

Tool calls per task

before: 17.0 after: 6.2

63% fewer

Medians across fifteen C# refactoring tasks, each run roughly ten times with the same model and the same prompts. The only difference between the two arms was whether the agent could call Rider’s refactoring engine.

  • The bundled debugging-code skill lets AI agents investigate runtime issues in C#, F#, C++, and mixed-language projects, whether they’re built with .NET, Unity, or Unreal Engine. Agents can set breakpoints, step through code, inspect values and thread context, follow the call order, and check which branches are taken or whether execution reaches a specific line.
  • Rider’s quality-check hooks now support Codex in addition to Claude Code.
  • The bundled dottrace-analyze skill can now analyze snapshots captured while profiling Unity projects.

Note for Unreal Engine developers: The recommended skills for UE C++ – ue-code-authoring and ue-test-authoring – have been updated, but update notifications for them aren’t being displayed yet. If you already have the skills installed, please uninstall them and reinstall their latest versions by going to Settings | Tools | AI Assistant | Skills.

For the full overview, visit the What’s New in Rider page. You can also find the full list of fixes included in this build in our issue tracker.

ReSharper

The big news 🎉: Starting with 2026.2.1, ReSharper now runs in Out-of-Process (OOP) mode by default unless you’ve turned it off. This is possible because dotCover now supports OOP mode.

​Diagramming has improved as well. You can now explore type dependency and project dependency diagrams in OOP mode, so there’s no need to switch back to In-Process mode.

Last but not least, we’ve updated Junie to a new version that adds support for Claude Opus 5, so you can now pick it as the model powering your sessions.

​For more information, visit the What’s New in ReSharper page. The full list of fixes included in this build is available in our issue tracker.


That’s all for this update. Try out the new features and let us know what you think in the comments below or in our issue trackers (Rider, ReSharper).

show more
Rider Hands AI Agents The Keys To Its Refactoring Engine For Safer, Faster, And Cheaper Results
Feed: The JetBrains Blog (https://blog.jetbrains.com/feed/)
Published: 2026-08-19 15:37:39 | Created: 2026-08-19 15:57:54

We traced a frontier model through fifteen C# refactoring tasks and counted what it reached for. It piped text into interactive commands 468 times. It called git 422 times and sed 392 times. It ran dotnet build 163 times. Across 2,513 tool calls it performed a structural refactoring operation exactly zero times. Not because it was avoiding them: it had none to call.

Rider has dozens of C# refactorings, and as of 2026.2.1 an agent can invoke them instead of approximating them. The vehicle is a bundled skill called refactoring-code. It ships with the IDE, there is nothing to switch on, and it activates by itself as soon as an agent is asked to refactor C# code. We gave the same model the same fifteen tasks again with the skill in place.

The refactoring-code skill, bundled in JetBrains Rider

Median task time

before: 157.9s after: 26.6s

83% faster

Cost per solved task

before: USD 0.52 after: USD 0.19

64% cheaper

Tool calls per task

before: 17.0 after: 6.2

63% fewer

Medians across fifteen C# refactoring tasks, each run roughly ten times with the same model and the same prompts. The only difference between the two arms was whether the agent could call Rider’s refactoring engine.

Should compiler really be the oracle?

That count of 163 builds gave us pause at first. But then we realized that the agent was not compiling to check finished work, it was compiling to find out what its last edit had done. A correct rename follows overload resolution, partial classes, explicit interface implementations and documentation references, and it knows the difference between a type called Order and the word “order” in a comment. None of that is recoverable from a regular expression, so the agent guesses in text and lets the build score the guess.

Rider does not have to guess, because it has a resolved syntax tree. Its refactoring engine, powered by ReSharper, works from the same model that drives the IDE’s own inspections and navigation: it knows which declaration every identifier binds to, which overload each call resolves to, and where every reference lives across the solution. The knowledge the agent was reconstructing one build at a time is the knowledge the IDE would have applied in one go.

Our evaluation methodology

Rider has dozens of C# refactorings and we did not try to cover them all when testing the efficacy of the refactoring-code skill. We evaluated eight, chosen because they have the cleanest contracts: a defined target, a defined result, and a refusal when the change is unsafe. Those are the ones where success and failure are unambiguous, which is what makes them worth measuring in the first place.

  • rename_refactoring: rename a symbol and every reference to it
  • extract_method: pull a statement range into a new method
  • extract_interface: derive an interface from an existing type
  • extract_base_class: lift members into a new base class
  • change_api_signature: alter parameters and update all call sites
  • move_type_to_namespace: relocate a type and repair usings
  • reorganize_namespaces: align namespaces with folder structure
  • safe_delete: remove a symbol only when nothing depends on it

Fifteen tasks covered the eight operations, most in two variants: a straightforward case and a harder one with more call sites or more entangled dependencies.

Both arms ran gpt-5.5 through the Codex CLI, roughly ten times per task, and the only difference between them was whether refactoring-code was available.

Timing, cost and tool counts come from the recorded traces, and the comparisons below use a paired permutation test.

What the agent can do armed with a Rider skill

With the skill in place, the need for the build oracle disappears: dotnet build drops from 163 calls to 3. The scaffolding the agent had built around guessing goes with it, and total tool calls fall from 2,513 to 926 across the evaluation.

The agent did not stop editing text. sed remains its most-used tool, and the eight refactoring operations account for only 167 of those 926 calls. What changed is the division of labour: ordinary edits stay in the editor’s medium, and the structural changes, the ones whose consequences ripple beyond what the agent can see, go to the engine.

Time and money

Median task duration fell from 157.9 seconds to 26.6 seconds. The 95th percentile fell further, from 346.4 seconds to 56.9 seconds, because the slowest runs were the ones trapped in the edit-build-read-error cycle and those runs stop existing. Both improvements are significant under a paired permutation test.

Cost follows the clock. Median cost per task went from USD 0.33 to USD 0.12, and cost per solved task from USD 0.52 to USD 0.19, on roughly half the tokens: input fell from 436,745 to 208,524 per task, cache reads from 2,973,158 to 1,257,600, and output from 32,532 to 15,538.

Per-task results

Where the skill wins outright, slowest task first

The eight tasks where the skill-enabled arm was faster, cheaper and used no more tool calls, with both arms passing their tests. One representative run per arm, ordered by how long the baseline took.

Time (s) Tool calls Cost (USD)

Showing time in seconds.

Without the skill With refactoring-code
extract-base-class-2
337s
20s
-94%
move-type-to-namespace-1
297s
24s
-92%
rename-1
192s
35s
-82%
reorganize-namespaces-1
160s
25s
-84%
rename-2
157s
24s
-85%
extract-method-1
157s
25s
-84%
reorganize-namespaces-2
26s
11s
-57%
safe-delete-1
21s
19s
-9%
extract-base-class-2
24
3
-88%
move-type-to-namespace-1
25
7
-72%
rename-1
21
7
-67%
reorganize-namespaces-1
18
3
-83%
rename-2
16
7
-56%
extract-method-1
16
4
-75%
reorganize-namespaces-2
13
2
-85%
safe-delete-1
10
6
-40%
extract-base-class-2
1.146
0.090
-92%
move-type-to-namespace-1
1.046
0.160
-85%
rename-1
0.986
0.137
-86%
reorganize-namespaces-1
0.385
0.134
-65%
rename-2
0.327
0.162
-50%
extract-method-1
0.497
0.098
-80%
reorganize-namespaces-2
0.181
0.078
-57%
safe-delete-1
0.108
0.088
-18%

Eight of the fifteen tasks clear that bar, and the six that had taken the baseline over two minutes improved by 82–94%. The other seven are left out: two were solved by neither arm, one was solved without the skill but not with it, and four were already quick enough that invoking the IDE did not pay for itself. The aggregate figures quoted elsewhere in this post cover all fifteen.

Numbers show that the behavior changed, but they do not show how. So here is one task from the set, laid out call by call in both arms.

On the left, the loop this whole post has been describing: the agent finds the class, edits text to invent a base class, and then spends eleven builds negotiating with the compiler over what those edits broke. On the right, the same task with the skill in place: the same search to find the target, one call to extract_base_class, and a glance at the diff.

We picked extracting a base class because it was the starkest single swing in the evaluation, from 337 seconds and 24 tool calls to 20 seconds and three, but the shape of the change is the same everywhere the skill won.

One task, two trajectories

Extract Base Class as the model example

A single test case that shows, side by side, how the agent goes about a refactoring with and without Rider’s dedicated skill. It was the slowest task in the set without the skill, and the largest single improvement with it.

Without the skill

Time336.7s Calls24 CostUSD 1.15

rg "class ReportExporter" -n src/

find . -name "*.cs" -path "*Reporting*"

nl -ba src/Reporting/ReportExporter.cs

grep -rn "ReportExporter" src/ tests/

apply_patch src/Reporting/ExporterBase.cs

sed -i 's/class ReportExporter/& : ExporterBase/' src/Reporting/ReportExporter.cs

dotnet build

error CS0534: does not implement inherited abstract member

error CS1729: no constructor takes 2 arguments

sed -i 's/public ReportExporter(/protected ReportExporter(/' src/Reporting/ExporterBase.cs

dotnet build

error CS0122: inaccessible due to its protection level

... 9 further edit-and-build cycles ...

dotnet build

Build succeeded

With refactoring-code

Time19.8s Calls3 CostUSD 0.09

rg "class ReportExporter" -n src/

execute_tool::extract_base_class

target: ReportExporter

name: ExporterBase

members: Format, WriteHeader, Dispose

created src/Reporting/ExporterBase.cs

updated 4 files, 11 references rewritten

git diff --stat

5 files changed, 47 insertions(+), 23 deletions(-)

Trying this yourself takes one prompt. Update to Rider 2026.2.1, open a C# solution, and ask your agent to rename, extract, or move something. The skill activates on its own. Naming the operation helps: “extract an interface from OrderProcessor” gives the agent something concrete to reach for in a way that “clean up this class” does not.

This is the third of these skills we have measured. The earlier two gave the agent coverage data and profiler output. Rider ships a growing set of agent skills built on the same idea: let the agent tap into the IDE’s own intelligence rather than reconstruct it, and get better results for fewer tokens. Try them on a real codebase, and tell us how they did.

show more
Signatures, be true: domain errors and functional handling in Kotlin
Feed: The JetBrains Blog (https://blog.jetbrains.com/feed/)
Published: 2026-08-19 15:52:05 | Created: 2026-08-19 15:57:54
Sergey Chernov

Sergey Chernov

Sergey Chernov is a Lead Software Engineer at Salmon, specializing in functional Kotlin and type-safe system design. At Salmon, a technology-driven financial company building banking and lending products in Southeast Asia, Sergey works on authentication and verification systems: the platform layer responsible for keeping user access secure, reliable, and consistent across products. He has 10+ years of experience designing and building scalable backend systems.

Here’s a function that signs a document:

fun signDocument(
    documentId: UUID,
    code: String,
): Unit

In Kotlin, Unit means the function completes without returning a meaningful value – roughly equivalent to void in Java.

Got it? Now, tell me what could go wrong. You can’t

Yet, the code might be invalid. The signing window might have closed. The database might be down. The document might already be signed, or expired, or the request might have arrived out of order from a buggy client. 

Every one of those is a real outcome this function must reckon with. Not one is visible in the line above.

To discover possible failures and how to handle them, you could open the implementation. Then, the service it calls. Then, the exception handlers, the route mapping, the tests, the OpenAPI spec, and the client code that consumes it. 

You could read everything except the one thing that should have told you in the first place: the signature.

At Salmon, I work on authentication and verification. A mishandled failure is rarely cosmetic and the difference between two error cases can be the difference between letting the right person through and the wrong one. I’ve spent a fair bit of time on this question: how do you make a function’s expected failures part of what it tells you, instead of something you have to go digging for

This article is my answer. It uses Kotlin, but the concept carries to any language with sealed types.

Have no fear of “functional error handling”

Functional error handling”. That phrase scares people off. They expect monads, category theory, and a lecture. This isn’t the case. The goal is plain: the function signature should be enough to know how to call it and how to handle every expected outcome. Nothing hidden in the body. 

If a failure is part of the business logic, it belongs in the function signature, the API contract, and the client’s handling code, not buried in the implementation.

Salmon’s engineering culture runs on a few commitments: real ownership from day one, high standards held in the open, and a refusal to ship things that don’t actually work. A function that hides its failures is at odds with all three. 

So, in the case of the example above, the signature I actually want should look like this:

fun signDocument(
    documentId: UUID,
    code: String,
): Either<DocumentSignError, Unit>

We now have the inputs on the left of the function and the expected failure type and the success type on the right. 

Now, before we get to what Either is, we need to agree on what belongs inside DocumentSignError in the first place, because that’s where a lot of the value of this system comes from.

Three kinds of failure, but only one belongs in the signature

Not every bad thing that happens is the same kind of bad thing. I split failures into three groups, and each group gets handled differently.

01 · API CLIENT ERRORS

The caller used the API wrong: this means a malformed JSON, a missing header, an unsupported operation, a request that arrived out of sequence, access that isn’t allowed. 

A healthy client should almost never see these, and there is no designed screen for them, because a working app doesn’t produce them. Thus, you can collapse the whole category into coarse HTTP responses: a 400, a 403, a 404. You do not enumerate them one by one in your domain model.

02 · UNEXPECTED EXCEPTIONS

The database is unavailable. A dependency timed out. The network dropped. A null slipped through and you have a NullPointerException, or an invariant broke and you’re in an illegal state. These are not business outcomes. 

Nobody designs a user flow for “Postgres fell over.” You do not model these as domain errors. Instead, they become operational signals: a 500 to the client, a full stack trace in the logs, a spike in your error-rate metric, a page to whoever is on call.

03 · DOMAIN ERRORS

Here, the client behaved correctly, yet the operation still can’t succeed. 

The signing code was wrong. The window has closed. The document was already signed. Approval is missing. The policy rejected it. These are the failures a real user hits while doing everything right, and your designers have a specific screen for each one. 

This is the category that has to be visible. If a healthy client needs to handle two outcomes differently, those two outcomes have to be distinguishable in the type. This is the group that belongs in the contract.

I often see people mistakenly dragging the second group into the other two. For instance, people add DatabaseUnavailable to their error union as if it were a business failure. It isn’t. Let it throw, let the global handler catch it, and keep your domain model honest. 

HTTP 400 is not a domain concept. “Signing window closed” is.

In any case, if you recognize and split these three categories correctly, most of the design work is already done. The rest is choosing a mechanism that keeps the second group visible.

Why exceptions and their relatives keep losing

The default in most Java and Kotlin codebases is to validate, then throw:

fun signDocument(documentId: UUID, code: String) {
    if (signingWindowClosed(documentId)) throw SigningWindowClosedException()
    if (!codeMatches(documentId, code)) throw SignatureRejectedException()
    if (alreadySigned(documentId)) throw AlreadySignedException()
    // ... sign it
}

The signature says “returns nothing, succeeds.” But the implementation tells a different story, and the compiler will not make the caller listen to it. If someone adds a fourth exception next quarter, every call site still compiles, and every call site silently fails to handle the new case. You find out in production, and that’s not great.

Java tried to fix this with checked exceptions, and the instinct was right: force the caller to handle declared failures or pass them on. But it didn’t scale. And the Stream API doesn’t compose with checked exceptions at all, so you end up doing sneaky throws and wrapping everything back into runtime exceptions.

As it turns out, the better tool is already in the language itself. A sealed interface tells the compiler the complete set of subtypes, this means that when you handle these errors (using Kotlin’s when expression), the compiler can safely verify you haven’t missed a single case:

sealed interface DocumentSignError {
    data object SignatureRejected   : DocumentSignError
    data object SigningWindowClosed : DocumentSignError
    data object AlreadySigned       : DocumentSignError
}

Now the caller handles every case, and the compiler enforces it:

when (error) {
    SignatureRejected   -> showSignatureRejected()
    SigningWindowClosed -> showSigningWindowClosed()
    AlreadySigned       -> showAlreadySigned()
}

Add a fourth failure to the sealed interface and this when stops compiling until you handle it. And this is the whole game: the compiler now knows what can fail, and it won’t let you forget.

You just reinvented Either

Once you have a sealed error type, you need a way to say “this function returns either that error or a success.” You can build a wrapper by hand, and people do, for each result type, over and over. That gets verbose fast.

What you’re reaching for is a generic version of the same shape: a value that is one thing or the other, never both. Left for the failure, right for the success. That is Either, and you don’t need a library to understand it. It’s a sealed type with two cases and a handful of helper methods (map, flatMap, fold, getOrElse). If you’ve used Optional in Java or nullable types in Kotlin, you already know how it feels to work with. An Optional is roughly an Either whose left side carries no information, just Unit.

The payoff is that the failure set moves into the public type:

fun signDocument(
    documentId: UUID,
    code: String,
): Either<DocumentSignError, Unit>

Failures are no longer hidden in the function body; they are part of what the function tells you upfront.

Two unions people get wrong

Unfortunately, two anti-patterns show up constantly once teams adopt this, and both undo most of the benefit.

fun signDocument(documentId: UUID, code: String): 
Either<Throwable, Unit>

While this looks typed, the type says only “something can fail.” It does not say which expected failures the caller must handle, because Throwable is open, so a when over it always needs an else. You’re back to not knowing. 

This is essentially the same as throwing an error, and it’s why Kotlin’s own Result<T> type didn’t work out and isn’t recommended for domain modeling. If the left side is open, you’ve gained nothing.

The second is one broad union shared across a whole class, in the name of not repeating yourself:

sealed interface DocumentError {
    data object SignatureRejected   : DocumentError
    data object SigningWindowClosed : DocumentError
    data object AlreadySigned       : DocumentError
    data object TemplateNotFound    : DocumentError
    data object ExportFailed        : DocumentError
}
 
fun signDocument(...)     : Either<DocumentError, Unit>
fun prepareSigning(...)   : Either<DocumentError, SigningSession>
fun exportDocument(...)   : Either<DocumentError, ExportFile>

The compiler is happy, but now every method appears to return every error. signDocument can never produce TemplateNotFound, yet every caller has to account for it anyway. You get exhaustive handling full of impossible branches, which is just catch-all programming wearing a type.

The fix is to define one narrow union per public method:

sealed interface DocumentSignError { /* the three real failures */ }
sealed interface PrepareSigningError { /* its own set */ }
sealed interface ExportError { /* its own set */ }

Then each when handles only what its method can actually return. No else or impossible cases:

when (error) {
    SignatureRejected   -> showSignatureRejected()
    SigningWindowClosed -> showSigningWindowClosed()
    AlreadySigned       -> showAlreadySigned()
}

A little more typing up front, but worth it every single time you read one of these signatures later.

Composition, without drowning in the plumbing

Real flows chain steps, and each step can fail. Done naively with flatMap, the lambdas nest deeper with every step and the code gets ugly. 

You have a few ways out. Plain Kotlin handles it with early return:

val document = findDocument(documentId)
    .getOrElse { return it.left() }

Flat, typed, and the pattern itself needs no library: if you hand-roll Either, you write these helpers yourself. The syntax above happens to use Arrow’s getOrElse and left, but nothing here depends on the abstraction being fancy. 

If you want it cleaner, Arrow also gives you an either { } block where bind() unwraps a right value and short-circuits on the first left:

either {
    val document = findDocument(documentId).bind()
    validateStatus(document).bind()
    val signature = validateSignature(document, code).bind()
    markSigned(document, signature).bind()
}

This is the same idea Scala has had in the language for years with for-comprehensions. Use Arrow if the ergonomics help your team; it also brings useful types like non-empty lists. (But the contract idea does not depend on Arrow, and I’d rather you adopt the discipline than the dependency.)

The contract should survive the whole trip

A typed failure is only useful if it stays typed across the stack. Here’s the rule I hold to: services and repositories return domain errors, and you map to HTTP at exactly one place, the route boundary.

service.signDocument(request)
    .mapLeft { error -> error.toHttpResponse() }

Expected domain failures become an Either.Left. API-client misuse collapses to a coarse 4xx. Unexpected infrastructure failures and bugs stay as exceptions and become a 500. The controller is the only layer that knows about HTTP, and the layers beneath it speak in business outcomes.

There’s also a bonus most teams don’t realize here: If you publish your API client alongside the service, publish the error types with it. If you do this, the client handles failures with the same sealed union the server produces, and the two stay consistent for free.

How does this impact code review, and AI-generated code?

The day-to-day return on all of this shows up in review. When failures live in the signature, a reviewer can start from the contract instead of doing implementation archaeology. Did the error union change? Is this API-client misuse dressed up as a domain error? Does the new failure map to HTTP? You can answer those by reading the interface, before you ever open the body.

At Salmon and elsewhere, this agility matters more now that a large share of code is drafted by agents. 

When a model writes the implementation, an explicit contract is the cheapest way to check whether it did the right thing: you read the types, not the 200 lines underneath. You can put the rule in an agent instructions file, “return a typed error union, don’t throw for expected failures,” and the model will mostly follow it. But the way you verify is by reading the contract, not by trusting the prose. 

In fact, on our team at Salmon this is less a personal preference than a shared default: the contract is the unit of review, and a generated implementation doesn’t lower that bar. Deciding which failures an operation can actually produce is a judgment call, and the signature is where that judgment gets written down so the next person, or the next agent, has to respect it. Essentially, the signature is where ownership lives.

The honest tradeoff

This costs you something. More types, more mapping code, more verbose signatures. I won’t pretend otherwise. 

But the complexity was already there. The signing window could always close. The code could always be wrong. All this approach does is take that complexity out of the implementation, where it was hiding, and put it in the type, where it’s named, tested, and visible.

You are simply moving the work to where the compiler can help. It surfaces risk to the next caller instead of hiding it, makes clear what the code really does and stops broken paths from compiling. Making failures part of the signature is how those values show up at the smallest scale: one function telling the truth about what it can do. It is also how we work in practice at Salmon: we share these typed contracts across services and their clients, and in review we read the contract before the implementation.

A signature that returns Unit and throws in secret is lying to you about what it does. Make your signatures tell the truth!

show more
Jellyfish mesmerise in their own museum in Florida
Published: 2026-08-19 15:39:08 | Created: 2026-08-19 15:55:57
The Jellyfish Museum in Pompano Beach is believed to be the first in the US dedicated entirely to the floating predators.
show more
OpenAI slows down training after its AI carried out hack
Published: 2026-08-19 11:19:12 | Created: 2026-08-19 15:55:56
The ChatGPT-maker said training will be slowed for two weeks while it puts the upgrades in place.
show more
Tenders open for highly-sensitive West Bank settlement project, Israel announces
Published: 2026-08-20 00:53:20 | Created: 2026-08-19 15:55:55
The UK's foreign secretary condemned the move as "an unacceptable and destructive act".
show more
H.R. McMaster reacts to Trump apparently pushing for meeting with North Korea's Kim Jong Un
Published: 2026-08-19 15:41:05 | Created: 2026-08-19 15:55:55
The U.S. and South Korea will cut short their annual joint military exercises at the behest of President Trump, who is apparently seeking a meeting with North Korean dictator Kim Jong Un, according to a report from The Wall Street Journal. Retired Lt. Gen. H.R. McMaster joins CBS News with his reaction.
show more
Vaccine exemptions hit a record last year, the CDC says. Here's what that means for parents.
Published: 2026-08-19 15:44:59 | Created: 2026-08-19 15:55:54
Kindergarten vaccine exemptions hit a record high last year in the U.S., according to Centers for Disease Control and Prevention data. Dr. Celine Gounder breaks it down.
show more
French civil servant drugged us to make us urinate on ourselves, say accusers
Published: 2026-08-19 05:00:39 | Created: 2026-08-19 15:52:57
More than 200 women accuse Christian Nègre of drugging them to make them urinate - two share their stories.
show more
Salmonella outbreak: What we know so far
Published: 2026-08-19 16:43:56 | Created: 2026-08-19 15:52:56
Hundreds have fallen ill with salmonella infections in an outbreak linked to imported eggs.
show more
Epstein client Leon Black threatened with contempt by House panel chair
Feed: World news | The Guardian (https://www.theguardian.com/world/rss)
Published: 2026-08-19 15:45:57 | Created: 2026-08-19 15:51:59

Republican James Comer writes to private equity investor demanding full cooperation with investigation

The Republican chairman of the House oversight committee has threatened to hold the private equity investor Leon Black in contempt if he does not fully cooperate with the panel’s ongoing investigation into Jeffrey Epstein, amid accusations that the billionaire is purposely delaying and disrupting the panel’s inquiry.

A letter released by Representative James Comer’s office on Tuesday, which was addressed to Black’s lawyer, revealed new details about the high-stakes clash between the powerful Kentucky congressman and Black, the co-founder of Apollo Asset Management who was Epstein’s friend and former client and paid Epstein tens of millions of dollars in fees.

Continue reading...
show more
'I was born in South Africa', says beauty queen facing legal bid to deport her
Published: 2026-08-19 15:12:41 | Created: 2026-08-19 15:50:57
Chidimma Adetshina is challenging efforts to have her deported from South Africa, which she says is her home.
show more
Why positive cocaine test could mean end of Kyrgios' career
Published: 2026-08-19 15:21:21 | Created: 2026-08-19 15:49:56
Nick Kyrgios once said he did not want to play tennis into his 30s. A positive cocaine test could have brought an end to his career aged 31.
show more
'Incredible': SpaceX rocket spotted off Christmas Island coast
Published: 2026-08-19 15:01:57 | Created: 2026-08-19 15:49:55
A SpaceX rocket that blasted off from Texas in July, and crashed into the Indian Ocean, made an unexpected appearance off Christmas Island.
show more
WATCH: Milwaukee Brewers tie MLB record
Feed: ABC News: Top Stories (https://abcnews.go.com/abcnews/topstories)
Published: 2026-08-19 14:51:45 | Created: 2026-08-19 15:48:57
Only two other teams have tied this record: Cleveland against the Yankees in 2004 and Pittsburgh against the Cubs in 1975.
show more
WATCH: Big news for Big Bear’s famous bald eagle
Feed: ABC News: Top Stories (https://abcnews.go.com/abcnews/topstories)
Published: 2026-08-19 15:37:33 | Created: 2026-08-19 15:48:57
An apparent new mate for the internet’s favorite bald eagle is giving hope to the millions of people who watch Shadow on a webcam.
show more
«Начался настоящий ад». Что рассказали свидетели в первый день процесса по делу об убийстве Тупака Шакура
Published: 2026-08-18 09:54:29 | Created: 2026-08-19 15:48:56
Во вступительной речи обвинение представило подозреваемого Дуэйна Дэвиса как главаря группы, ответственной за стрельбу, и сослалось на мемуары, соавтором которых он является и в которых он подробно описал ночь убийства.
show more
Военная прокуратура Израиля распорядилась начать уголовное расследование гибели палестинской девочки Хинд Раджаб в секторе Газа
Published: 2026-08-19 15:46:27 | Created: 2026-08-19 15:48:56
Командование Армии обороны Израиля (ЦАХАЛ) распорядилось начать уголовное расследование гибели в Газе шестилетней Хинд Раджаб и ее семьи. Ее смерть вызвала международное осуждение после того, как запись разговора девочки с сотрудниками скорой помощи разошлась по всему миру.
show more
Christian metal band sues Netflix over KPop Demon Hunters name
Published: 2026-08-19 15:31:55 | Created: 2026-08-19 15:46:55

25-year-old band Demon Hunter says name of streamer’s hit movie creates ‘substantial confusion’ among consumers

Christian metal band Demon Hunter is suing Netflix, accusing the entertainment giant of trademark infringement and unfair competition tied to the blockbuster “KPop Demon Hunters” name.

The lawsuit was filed on Tuesday by Hyde Lane, the company behind Demon Hunter, and alleges that Netflix Studios and concert promoter AEG Presents have created “substantial confusion” among consumers.

Continue reading...
show more
Zuckerberg lied about concern for child safety, Meta whistleblower testifies at landmark trial
Published: 2026-08-19 21:30:11 | Created: 2026-08-19 15:46:55

Arturo Béjar, former Meta safety engineer, tells jury tech company was aware of products’ potential harm to children

Meta has taken a “don’t ask, don’t tell” strategy when it comes to the safety of children on its social media platforms, according to a whistleblower who testified during a landmark trial against the company on Tuesday and Wednesday.

Arturo Béjar, a former Meta safety engineer, told the jury that the company was aware of the harm its products caused children, which included its recommendations pushing content from sexual predators and violent and graphic images. He said he repeatedly raised the issue to various Facebook and Instagram executives but that they did little to resolve it.

Continue reading...
show more
TerraPower’s nuclear reactor has a secret weapon for powering AI data centers
Published: 2026-08-19 15:44:53 | Created: 2026-08-19 15:45:54
TerraPower's nuclear power plant possesses a strategic advantage over competitors, especially when chasing after data center deals.
show more
Markets Rally After U.S. Treasury Eases Bond Investor Stress
Published: 2026-08-19 20:50:56 | Created: 2026-08-19 15:42:55
Government bond yields fell and stocks rose on a move by the Treasury Department to double the amount of debt that it can buy back from investors.
show more
This high-speed star is whipping around the black hole in the middle of our galaxy
Feed: NPR Topics: News (https://feeds.npr.org/1001/rss.xml)
Published: 2026-08-19 15:38:57 | Created: 2026-08-19 15:41:57
This image traces the orbital paths of all known stars orbiting the massive black hole at the center of the Milky Way galaxy. One of the stars, S301, approaches the black hole very closely. At its closest approach, the star travels over 15,000 miles per second.

Researchers have identified a speed demon at the heart of the Milky Way. This fast-moving star may yield insights into the black hole parked at the center of our galaxy.

(Image credit: Max Planck Institute for Extraterrestrial Physics)

show more
Kennedy Center tells court it won't try to restore Trump's name to the building before Sept. 8
Feed: PBS News Hour - The Latest (https://www.pbs.org/newshour/feeds/rss/headlines)
Published: 2026-08-19 15:40:04 | Created: 2026-08-19 15:41:55
In a status report filed late Tuesday, opponents of the move said members of the Kennedy Center's Trump-aligned board "seem intent" on defying an earlier court order requiring the president's name to be removed from the building.
show more
Rivian spinout Also raises another $150M
Published: 2026-08-19 15:39:47 | Created: 2026-08-19 15:39:55
The round, led by Prysm Capital, will fund the company's expansion beyond pedal-assist electric bikes and commercial cargo quads to autonomous delivery vehicles.
show more
Two collapses in four days - what's happening to Musiala?
Published: 2026-08-19 15:34:38 | Created: 2026-08-19 15:38:58
Jamal Musiala is being treated for a "neurological dysfunction" after collapsing twice in four days during Bayern Munich's pre-season friendlies.
show more
OpenAI has teen-friendly ChatGPT responding to instances of self-harm and suicide linked to chatbots
Published: 2026-08-19 15:27:50 | Created: 2026-08-19 15:37:54
OpenAI is launching a newer version of its teen-friendly ChatGPT platform. Rebecca Bellan, a senior reporter for TechCrunch, joins with more details on its tools.
show more
Reform UK are such a joke, they deserve a slot on the Edinburgh fringe | John Crace
Feed: World news | The Guardian (https://www.theguardian.com/world/rss)
Published: 2026-08-19 15:28:33 | Created: 2026-08-19 15:36:58

Nige’s dodgy donations, Dicky’s love of global heating and so much more – what fun it is watching the party implode

You would need to have a heart of stone not to fall about laughing. There was a time not so long ago when Reform could give a passable impression of a vaguely functional political party. One that knew its audience and had learned how to get its message across through the media. Admittedly this was largely because the party was a one-man band with all its MPs accepting that they owed their entire existence to Nige. They were satellites to his sun. Nigel Farage was Reform, and Reform was Nige.

In recent months though, things have been falling apart and Reform now resemble an anarchic end–of-the-pier clown show. And chaos has seldom been this entertaining. The fun started when Nige had an uncharacteristic fit of humility and tried to pretend he was only a first among equals with the grandiose announcement of a “shadow cabinet” of four people. Largely because that’s about as many serious politicians as he had at his disposal.

Continue reading...
show more
Money market vs. high-yield savings account: Which will be better if the Fed raises interest rates?
Published: 2026-08-19 15:29:05 | Created: 2026-08-19 15:32:54
Savings rates could climb if the Fed hikes rates. Here's how to position your cash before that happens.
show more
Trump says U.S. and Canada reached last-minute deal to delay 50% US tariffs on Canadian imports
Feed: PBS News Hour - The Latest (https://www.pbs.org/newshour/feeds/rss/headlines)
Published: 2026-08-19 15:27:20 | Created: 2026-08-19 15:31:55
The announcement, which Trump made on his social media platform, buys time for more negotiations and avoids, for now, another strain in already tense relations between the historic allies.
show more
Why positive cocaine test could mean end of Kyrgios' career
Published: 2026-08-19 15:21:21 | Created: 2026-08-19 15:28:57
Nick Kyrgios once said he did not want to play tennis into his 30s. A positive cocaine test could have brought an end to his career aged 31.
show more
Page 243 of 989 (49442 total items)