Authors: Nilesh Mishra and Ajit Koti
This is the third entry of a multi-part blog series describing how we built a Real-Time Distributed Graph (RDG). In Part 1, we discussed the motivation for creating the RDG and the architecture of the data processing pipeline that populates it. In Part 2, we discussed how we designed the storage layer to handle billions of nodes and edges while maintaining single-digit-millisecond latency. In Part 3, we will explore how we designed a fast, flexible serving layer to efficiently query the graph.
In Part 1 of this series, we described why Netflix needed a Real-Time Distributed Graph (RDG) and how we used Apache Flink to build an ingestion and processing pipeline that turns streaming events into graph primitives. In Part 2, we explored how we designed a storage layer capable of handling billions of nodes and edges while still delivering single-digit-millisecond latency.
In this post, we focus on the next challenge: querying the graph efficiently to power real-time insights for our internal partners. All of the work on ingestion and storage only matters if we can actually ask complex questions and get answers back quickly. As we optimized for lower latency, we found that the serving layer posed its own set of challenges, distinct from those of ingestion and storage. How do we turn a constantly evolving, billion-edge graph into sub-100ms responses across a wide variety of workloads? This is the problem we tackle in this post.
As we integrated the RDG into Netflix’s ecosystem, we realized that “querying the graph” is not a one-size-fits-all operation. We needed to handle a wide range of access patterns: from high-volume security lookups to deep, exploratory personalization traces.
Let’s revisit our example from Part 1 and expand on it slightly. In the earlier posts, we focused on accounts, devices and content. In practice, the graph is richer: each account has multiple profiles.

A member journey often looks like this:
In the RDG, this journey creates the following graph structure:

Graph queries vary along two axes: how wide they fan out at each hop, and how deep they chain across hops. To see this range, let’s look at two scenarios from opposite ends:
Consider a “shallow, wide” query: “Which devices has this account used to stream in the last 30 days?”
Using the graph structure above, this translates to:
While this is only a “single hop,” it presents a significant scaling challenge. For a highly active account, the fan-out can be massive. The query layer must fetch hundreds of streamed_from edges, apply temporal filters on each edge’s last_watch_timestamp property to capture only those within the last 30 days, and aggregate the results, all while maintaining sub-100ms latency.
Consider a scenario where personalization teams need to understand a member’s viewing journey. They might ask: “For Account X, show me the Stranger Things viewing history across all profiles: which profiles watched it, what they watched, and when”.
This path unfolds as follows:
The core challenge in this scenario is sequential dependency: we cannot fetch a profile’s viewing history until Hop 1 has identified which profiles exist. In a distributed environment, the client has to wait for Hop 1 to finish before sending Hop 2. If each hop takes 10ms of network time, that’s 20ms of overhead before we’ve processed a single byte. To hit our sub-100ms goal, we needed a way to package this multi-step logic into a single request.
This example is a 2-hop traversal, but queries can chain 3–4 hops across different entity types, and the latency penalty of sequential execution only grows with depth.
These two scenarios pull the system in opposite directions. Shallow-wide queries stress I/O throughput: can we handle massive fan-out without slowing down? Deep-narrow queries stress execution efficiency: can we chain multiple hops without the network overhead adding up? Supporting both on the same system is what shaped the design that follows.
The two scenarios above sit at opposite ends of the spectrum, but they are not unusual. In practice, the RDG serves tens of thousands of queries per second, each potentially different, all needing sub-100ms responses while the underlying graph continues to grow. Scale, latency, query diversity, and the need for extensibility pulled the design in different directions at once, and every choice came with a trade-off we had to live with.
Why breadth-first, not depth-first? The most intuitive way to traverse a graph is depth-first: pick a path, follow it to the end, backtrack, try another path. But in a distributed system where every hop is a network call, depth-first can lead to high latency. If Account X has 5 profiles and each profile has watched hundreds of titles, depth-first would trace all of one profile’s watched titles before moving to the next, missing the opportunity to batch lookups across profiles. Breadth-first flips this by working one level at a time across all nodes, rather than one path at a time through each node. We fetch all profiles for the account at once, then fetch the started_watching edges for all profiles, and finally fetch content details for all matching titles. Three rounds of parallel calls instead of sequential chains. With breadth-first, there is a clear trade-off in memory, because we hold each level of the graph in memory at once, so the cost scales with how wide a level fans out rather than how deep the query goes. We keep this comfortable by bounding each hop with the per-edge-type limits described in Step 5 below, so even a high fan-out level stays a manageable frontier. We’ll walk through how this works, level by level, in Step 3 below.
Why async-first, not thread-per-request? Latency in the RDG is dominated by I/O, reading from the storage layer, calling enrichment services, and waiting on caches. A traditional thread-per-request model would pin a thread to each in-flight query, and most of the time, the thread would be idle, waiting for a network response. With thousands of concurrent queries, we’d need thousands of threads, most of which would be doing nothing. Instead, we decided to build the entire execution pipeline around asynchronous composition. A small set of dedicated thread pools (16–24 threads total) handles thousands of concurrent requests because no thread ever blocks on I/O. While a storage call is in flight, the thread continues with other work and picks up the result when it arrives. This is the foundational design decision on which everything else rests. We’ll see this in action in Step 4 below, where we cover parallel execution.
Why cache selectively, not everything? Not all data in the graph changes at the same rate. Some properties, such as account plan type and content metadata, are relatively stable: they change on the order of hours or days. Edges like who watched what and when change constantly. For stable data that many queries touch, we use a distributed cache (EVCache) with TTLs tuned to data volatility. Getting the caching strategy right took iteration. We started by caching aggressively and measured the impact: tracking hit rates, monitoring stale-data incidents, and adjusting TTLs based on how quickly different node types actually changed in production. The result: 70–80% hit rates on node lookups, achieved by narrowing the cache to nodes that are both frequently accessed and slow to change, while skipping data that would expire before the TTL ran out. Step 6 below covers how this works in practice.
Why opt-in enrichments, not automatic? Clients know what they need. A query checking account relationships doesn’t care about title artwork; a personalization service building a viewing timeline does. Rather than fetching metadata from external services by default and penalizing every query, we make enrichments opt-in: clients specify exactly which external data they want per request. Also, enrichment is fail-open: if a service is slow or unavailable, we return the graph data without it.
Why eventual consistency, not strong? Most of our queries ask “What has this member done recently?”, not “What happened in the last millisecond?” By defaulting to eventual consistency, we read from the nearest replica and avoid coordination overhead. While the RDG is used to power in-the-moment experiences, it is not set up as the source of truth for the data it holds.
The above choices lead to the following three-layer architecture:

The Graph Query Service is the entry point. It accepts gRPC requests, validates the traversal specification, and hands it to the query execution engine. The execution engine orchestrates breadth-first traversal: expanding one level at a time, applying filters and limits at each hop, and composing all I/O asynchronously.
The Storage Abstraction Layer sits between the execution engine and the underlying KVDAL storage. It provides a clean interface for node lookups and edge retrieval, handles streaming for large adjacency lists, and manages node caching (EVCache).
The Enrichment Layer fetches additional metadata from external Netflix services on demand. It batches requests, runs them in parallel with graph data assembly, and degrades gracefully when an enrichment source is unavailable.
When a client sends a query, the request flows through these layers in sequence: the Query Service parses the request into an execution plan, the execution engine walks the graph level by level through the Storage Abstraction Layer, and if enrichments are requested, the Enrichment Layer fetches and merges external data before the response is serialized back to the client.
Now, with that mental model in place, let’s follow a query through this system and see how these choices play out in practice.
To see how the RDG query layer works in practice, let’s follow a single query end-to-end and focus on one question: how do we make every step fast?
We’ll reuse the deep-narrow example from above:
For Account X, show me the Stranger Things viewing history across all profiles: which profiles watched it, what they watched, and when.
In graph terms, this becomes a 2‑hop traversal:
We’ll walk through how this query moves through the layers we described above:
By the end, we’ll see how a 2-hop query like our Stranger Things example, with streaming, filtering, and parallel execution, can complete in under 100ms.
Every query starts as a gRPC request. Before we touch storage or walk a single edge, the engine needs to understand what the caller actually wants.
For our running example below:
For Account X, show me the Stranger Things viewing history across all profiles
The engine creates a traversal plan with a set of levers: how many hops, how many edges per hop, how much history to consider, and whether to favor recent activity.
We resolve these upfront by merging a hierarchy of filters and limits, from application-level defaults down to per-edge-type overrides, into a concrete execution plan. By the time we read from storage, every hop has clear rules. We’ll see how this hierarchy works in detail in Step 5, but the key insight is simple: interpreting the request up front prevents over-fetching from the downstream storage layer.
Once we’ve parsed the request and decided what the query should do, the next step is to actually touch the graph. For our running example:
For Account X, show me the Stranger Things viewing history across all profiles…
The first concrete question the engine has to answer is very simple:
Which profiles does Account X have?
Under the covers, that really means: how do we find all relevant edges for Account X without scanning the entire graph every time?
If we stored every edge in one massive table, the naive approach would be to scan for rows where source = Account X. Even with indexing, doing that across billions of edges for every request would be slow.
Instead, we organize edges as adjacency lists. For each node, we keep a compact list of “who it’s connected to” by edge type. For Account X, a simplified view might look like:
Account_X: has_profile → [Profile_Alex, Profile_Kids, …,]
Now “get all profiles for Account X” is no longer a global search; it’s a direct lookup into Account X’s stored adjacency. The storage layer can usually pull that list back in a few milliseconds because it’s reading a small, well‑indexed slice of data instead of hunting through everything.
For our query, the first hop is quick: Account X has just two profiles. The engine fetches those edges with has_profile and moves on. For more information on Storage, refer to our previous post.
The first hop was small, but the second is where things get interesting. Each profile can have a large number of started_watchingedges. Loading the entire adjacency list at once would spike latency and memory usage.
To avoid this, we treat adjacency lists as streams rather than blobs.
When the engine requests Profile_Alex’s started_watching edges, the storage layer streams them in batches of 100. As each batch arrives, we apply filters (e.g., “last 30 days”) and decide whether to continue.
If we’ve collected enough edges to satisfy the query’s limits ( max_edge_cnt, lookback window, etc.), we stop reading. Otherwise, we pull the next batch.
In our Stranger Things example:
These two choices, the adjacency‑list lookups and streaming fan‑out, enable everything that follows:
By Step 3, we’re working with concise frontiers like “Profile_Alex and Profile_Kids,” ready for the next hop into their viewing histories.
We’ve completed the first hop. From Account X, we pulled the has_profile edges and found two profiles: Profile_Alex and Profile_Kids.
But we’re not done. The query was:
For Account X, show me the Stranger Things viewing history across all profiles: which profiles watched it, what they watched, and when
So we still need to fetch each profile’s history and filter it down to Stranger Things sessions. As we covered in our design choices, we use breadth-first traversal: expanding all nodes at the current level in parallel before moving to the next.
Let’s walk through the Stranger Things query level by level.

Level 1: Account → Profiles
Starting at Account X, the engine pulls has_profile edges, discovering two profiles:
These become the frontier for Level 2, a single small lookup that takes a few milliseconds.
Level 2: Profiles → Content (Stranger Things)
From those two profiles, we fetch started_watchingedges and filter for Stranger Things. Instead of exhausting Profile_Alex’s entire viewing history before touching Profile_Kids, we treat this as one logical step:
We discover that Profile_Alex watched Season 1 and Season 2, while Profile_Kids watched Season 4. Level 2 turns “2 profiles” into “a handful of Stranger Things sessions” in roughly one storage round trip.
The traversal completes: two levels, two frontiers.
We parallelize within each phase, then regroup. This provides:
For a 2-hop query: two rounds of parallel lookups instead of hundreds of sequential ones. That’s why our Stranger Things query completes in under 100ms.
Breadth-first traversal enables parallel work at each level, which is the key to low latency.
At Level 2 of our Stranger Things query, we fetch started_watching edges for each profile. With two profiles, this is trivial, but in production queries fan out across many profiles, each with hundreds of edges to stream and filter. So do we process them sequentially or in parallel? Sequential means waiting for each profile before starting the next, and the delays stack up. Parallel finishes in the time of the single slowest profile, but hundreds of queries doing this at once could overwhelm storage with unbounded concurrency.
The goal: parallel speed without unbounded chaos.
We structured the query engine like a professional kitchen, with specialized stations for appetizers, mains, and desserts, each with its own capacity. If one station is slammed, the others keep flowing. In practice, that means dedicated thread pools for different work types: fetching nodes, reading adjacency lists, and performing enrichments. When the Stranger Things query reaches Level 2, calls route to the adjacency-list pool, where 8 workers stream and filter each profile’s edges in parallel.
Thread pools give us local control, but we also need a global view of total capacity, so we use adaptive concurrency limiting. When things are healthy, we raise the limit gradually (100 in-flight, then 101, 102, and so on); when timeouts or errors spike, we back off by a larger step (say, 100 down to 70). Combined with per-pool limits, the engine constantly tunes parallelism, fanning out within each level while staying inside safe storage and network limits.
If the client opted into enrichments (say, maturity ratings for the matched content), the Enrichment Layer fetches them in parallel on its own thread pool and merges them into the response. Enrichment is fail-open: a slow or unavailable source never blocks the query, and we just return the graph data without it.
We’ve traversed from Account X to profiles, then to their viewing histories. But raw edges aren’t what our partners need. They care about recent, relevant activity, not every started_watching edge accumulated over the years. This is where filtering decides which parts of the story make the final cut.
Go back to the original question:
For Account X, show me the Stranger Things viewing history across all profiles: which profiles watched it, what they watched, and when.
The phrase “viewing history” is deceptively simple. Under the hood, it means we need to:

We handle this with a filtering hierarchy. The system starts with conservative defaults (e.g., 100-day lookback, 300 edges per hop), and requests can override them globally, per-hop, or down to specific edge types. In our query, the 100-day default applies broadly, but the caller sets 30 days for started_watching edges, and the narrower rule wins. Older sessions are discarded. The same engine can just as easily provide a tight recent window on one edge type and full history on another, all in a single query.
Sometimes there are still more edges than we want to return after time filtering. If Profile_Alex watched the same episode several times last month, pausing and resuming, we don’t want to send all those edges back. So we offer two selection modes.
LATEST sorts edges by timestamp and keeps the newest ones up to the limit, ideal for “what has this profile watched recently?” where teams want the current state, not every play event. ANY grabs whichever edges it encounters first, no sorting, which is faster and fine for “has this profile ever watched Stranger Things?” where timing doesn’t matter. Teams default to LATEST and switch specific edge types to ANY when “any proof” is enough.
So what happens for our running query?
We start with all the started_watching edges for each profile. The time filter narrows this to 30 days. Edge-count limits prevent response flooding. LATEST mode selects the most recent viewing session per title. The result: a concise answer distilled from a verbose history:
This filtering turns raw history into a focused answer.
By now, we’ve walked the full path of our query: we’ve traversed from account to profiles, filtered viewing history by time, and focused on Stranger Things sessions.
Despite our optimizations, each storage call still costs a network round-trip. When the same nodes appear across thousands of queries per minute, those redundant calls add up: both in infrastructure cost and in tail latency at scale.
The key question: what can we avoid repeating?
Look back at the entities in our Stranger Things journey:
These rarely change. Profiles don’t flip between “kids” and “non-kids” every minute. Title metadata is stable.
To improve efficiency, we keep a distributed cache of hot nodes (accounts, profiles, content) that are likely to reappear. When the same entity appears again, we answer “What is this node?” from memory, skipping storage.
Result: for high-traffic entities, we eliminate storage calls and noticeably reduce infrastructure cost and tail latency at scale.
The first time the Stranger Things query runs for Account X, the cache is cold, so we pay the full cost: we fetch the account and its profiles, then the started_watching edges and matching content nodes, caching each node as we go. Minutes later, a different query arrives:
Show me everything Account X’s profiles have watched in the last 7 days, and flag anything rated TV-MA on the kids profile.
This time, many of those nodes are already in the distributed cache. Storage still handles the adjacency lists and edges, but node lookups are lighter and latency drops. At scale, that reuse gives us comfortable headroom for traffic spikes.
We can’t cache everything. The RDG prunes old activity after a set retention window, so caching a node that’s about to be deleted is wasteful.
To avoid polluting the cache, we consider:
If a node was last active 99 days ago, it expires from the graph in a day, so a 30-day TTL makes no sense, and we skip it. We reserve cache space for active nodes like Account X. This “smart TTL” policy keeps the cache focused on live stories rather than archival ones, so repeat queries for the same part of the graph return faster.
Caching is integrated into the journey, not an afterthought. The engine reuses knowledge from previous queries, so repeated traversals over the same part of the graph keep getting cheaper
The serving layer sits in front of 8 billion nodes and 150 billion edges, serving mixed workloads, all of which need to feel interactive. Single-hop queries return at a P50 of 15–30ms with P99 under 100ms. Even 3-hop traversals, the kind that chain across accounts, profiles, and content, come back at P99 between 100–150ms. Breadth-first execution and parallelism within each level keep these numbers stable even as fan-out grows.
The async-first design is what enables the throughput. Thousands of concurrent requests flow through just 16–24 threads spread across dedicated pools because no thread ever blocks on I/O. When load spikes, our concurrency limiter lets work queue briefly: slowly increasing capacity when things are healthy, backing off aggressively when they’re not
Caching has the most visible impact on day-to-day efficiency. Popular entities like accounts, profiles, and content achieve 70–80% cache hit rates, resulting in roughly 3–4x fewer storage calls on common query paths. Smart TTLs keep the cache focused on active data, avoiding wasted memory on nodes that are near the end of their graph retention window.
These properties, together, make multi-hop graph queries over billions of entities feel, at query time, much closer to in-memory lookups than to remote calls.
The biggest surprise wasn’t any single optimization: it was how much async composition changed the economics of our system. We expected it to help latency; we didn’t expect it to slash infrastructure cost. A serving layer that would have needed hundreds of threads per instance runs comfortably on 16–24, because no thread ever blocks on I/O. The tradeoff is debuggability: async stack traces are hard to read, and exceptions can get lost in future chains. We compensated with per-stage metrics, measuring each request at validation, storage, enrichment, and end-to-end, so when something is slow, we know exactly which stage to blame.
Caching took longer to get right than expected. Our first instinct was to cache everything in EVCache and let TTLs handle freshness, but that wastes memory on nodes about to expire from the graph anyway. The breakthrough was matching TTLs to data volatility: stable node properties get long TTLs, while nodes near the end of their retention window aren’t cached at all. The 70–80% hit rate we see today came from being selective, not aggressive.
The filtering hierarchy was born out of frustration. Early on, every new use case meant a code change: one team wanted a 7-day lookback, another 90 days, a third different limits at different depths. Instead of bespoke logic per team, we built a layered override system: application defaults, global overrides, per-depth limits, and per-edge-type limits. It took real effort, but it eliminated an entire class of feature requests and teams now tune their own queries without touching our code.
The lessons above are specific to the RDG, but the underlying principles apply to any distributed system built around I/O-heavy, fan-out workloads.
—
Thanks for reading Part 3 of the RDG blog series. For us, getting these details right is what turns a constantly changing, billion-edge graph into something that, at query time, feels like a responsive, in-memory data structure.
How and Why Netflix Built a Real-Time Distributed Graph: Part 3 — Querying the graph with gRPC… was originally published in Netflix TechBlog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Изначально я пилил инструмент совершенно под другие задачи - закрывать админки и внутренние сервисы от ботов и посторонних глаз. Но в процессе работы над архитектурой меня осенило: встроенный механизм переопределения DNS (DNS Override) можно применить для тестирования миграции сайтов. И главное - это закрывает постоянную головную боль: как дать протестировать новый сервер нетехническим людям (клиентам, маркетологам, контент-менеджерам) без танцев с бубном вокруг их компьютеров.
Читать далееDirector Eric Goode has found two enemies to rival Joe Exotic and Carole Baskin in his new documentary about the animal trade’s underworld
Through the fear and general miasma of the Covid pandemic, TV brought people together like never before. Among the most-watched series of 2020 was of course Tiger King, Netflix’s hit about an improbably twisty feud between a gay, polyamorous big-cat breeder and convicted felon, and the conservationist rival whom he accused of murder (more specifically, of feeding her missing husband to the tigers in her sanctuary – which she denies). It was the perfect hit for quarantine: bold and ridiculous enough to get everyone talking, and with precisely no bearing on the grief and awfulness that was all around.
Producer and co-director Eric Goode has made a smattering of Tiger King follow-ups since then, as well as another series, Chimp Crazy, about the self-described Dolly Parton of the primate world. His latest project – a co-production between his own outfit, Goode Films, HBO, and A24 – continues the theme, focusing this time on the reptile trade and taking its lead from the 2008 book The Lizard King by journalist Bryan Christy. It’s stuffed full of wild stories and even wilder characters: there are canny smugglers, underworld crime gangs, and even legitimate zoos that are said to have turned a blind eye to the provenance of their big, scaly friends. The series is centred on the US – although clearly the supply chain is global – and the two men who kickstarted the illegal trade: Hank Molt and copycat trader Tommy Crutchfield. Like Joe Exotic and Carole Baskin before them, there is no love lost between Crutchfield and Molt, and no odd biographical detail too trivial to skip over. Hank, says Tommy, “will turn anything good into bad”, while Hank reckons that Tommy is “one of the angriest and most bitter people I’ve ever met”. Along the way we learn that Hank used to be a mayonnaise salesman, and that Tommy worked at an extremely on-the-nose Florida establishment named Snake-a-Torium as a teenager, where he would later have his wedding reception.
What follows is the story not only of their enduring beef and betrayals, but of other adjacent vendettas in the illicit reptilian market. Despite environmental concerns becoming increasingly en vogue in the late 60s, a “don’t ask, don’t tell” attitude still pervaded the world of wildlife trading, with many zoos happy to acquire what they needed from whoever happened to have it. There were, however, serious consequences for some of the creatures involved. With the police on his back, Molt once buried a stash of animals alive in New Jersey’s Pine Barrens, a location which would later become infamous via The Sopranos. When he was eventually arrested, Crutchfield would become the go-to guy. He supplied cobras to the makers of a Hollywood blockbuster, he says, and sold tortoises to Michael Jackson. He even bred distinctive white albino alligators, which he sold for £175,000 a pop.
The gruesome, revenge-fuelled culmination of the men’s feud at the end of the first episode is the high point of Monsters of God, which then limps through four more instalments. The illegal animal trade gets entangled with the (less interesting) drug trade in the 80s, and – somewhere along the way – the story becomes less punchy and more of an attempt to shoehorn in every strange character and weird/shocking/grim (delete as appropriate) anecdote that the producers had access to. A tangent about a federal agent who wore a gorilla costume in a sting operation is rather funny but, er, isn’t this a series about snakes and stuff? It does feel like Monsters of God could have been a two-parter, but then maybe it’s simply too hard to kill your darlings when you have so many of them. The story of a German man who collaborated with Crutchfield (and who attempted to escape the feds by running across eight lanes of traffic, in handcuffs, and wearing Birkenstocks) is hardly essential. But it is clearly entertaining.
Monsters of God may lack that tight narrative thread that makes you want to recreate lockdown and spend five hours parked in front of the TV. But Goode is a conservationist as well as a film-maker, and it’s clear that he is interested in what became of the species whose existence was endangered by men like these. Much of the final episode is dedicated to notorious dealer Anson Wong from Malaysia, and the smuggling that meant that the ploughshare tortoise became all-but extinct in the wild. There is one final bit of good news, though, and a sense that nature – perhaps – is healing. It might not be a conclusion ripped from the bizarre world of Joe Exotic, but it’s the perfect ending to a wildlife documentary.
Suggestions for improving your wellbeing are more plentiful than ever – and some may even be on to something
Every year, the wellness industry churns out new products and practices that it claims are finally – finally! – the real secret to being well. Sometimes, these trends are legitimate. Sometimes they’re utter nonsense. Often they’re somewhere in between.
These are the wellness trends that have provoked controversy and interest in 2026.
Continue reading...
Мы выпустили NEOMSA APIM 4.6.0. Основной фокус этого релиза — повышение безопасности состава поставки платформы.
В рамках процессов безопасной разработки (SSDLC) мы сформировали SBOM, проверили компоненты и их зависимости на известные уязвимости (SCA), сопоставили результаты с БДУ ФСТЭК России и обновили проблемные библиотеки. По итогам повторной проверки количество зарегистрированных находок сократилось с 57 до 7. Уязвимостей уровней Critical и High в финальной сборке не осталось.
В статье рассказываем, как устроена проверка NEOMSA APIM перед выпуском и какой критерий безопасности мы используем для принятия решения о готовности релиза.
Читать далееWarning: This post contains spoilers for I Will Find You
The Netflix thriller series I Will Find You, based on Harlan Coben’s 2023 novel, opens with a case that appears to be closed: David Burroughs (Sam Worthington) is serving a life sentence for the murder of his son, Matthew Burroughs—who was found dead in his own bed.
Everything changes when David gets a visitor in prison one day. Journalist Rachel Mills (Britt Lower)—who happens to be the sister of David’s ex-wife Cheryl (Erin Richards)—shows up with a photo taken at Six Flags. In the background of the image is a boy who looks exactly like Matthew, even bearing the same birthmark he had on his cheek.
“She's a character who just can't ignore an uneasy feeling. She has this spidey sense that this might be her nephew,” Lower says. “She goes from being a journalist writing about other people to being directly inside the story.”
The photo pushes David—who has maintained his innocence all along—to escape from prison with the help of Philip Mackenzie (Peter Outerbridge), the prison warden and a longtime friend of his father who believes him, and Mackenzie’s son Adam (Jonathan Tucker), a police sargeant.
“A father’s job is to protect his child… and so he failed at that. It’s all about trying to find that redemption,” says Coben, who also served as an executive producer on the show. “It was the chance to rescue his son and recover from the worst moment of his life.”
According to creator and showrunner Robert Hull, there were no essential changes in adapting the novel for the screen. “It was just finding new ways to tell the story,” he says. “Harlan, early on, gave us a roadmap so we know where we’re going and what the heart of the show is, so we never lose sight of that. If you’re a fan of the book, everything you love is there, plus a lot.”
Let’s break down the biggest twists in I Will Find You.
David and Rachel trace Matthew’s disappearance to Berg Reproductive, a Boston fertility clinic tied to the wealthy Payne family, headed by Gertrude Payne (Madeleine Stowe) and her son Hayden Payne (Milo Ventimiglia), and learn that Cheryl had been a patient there. She used Rachel’s name during treatment to keep it secret. Cheryl later reveals she discovered she was pregnant the next day after the procedure, confirming Matthew is David’s biological son.
The discovery leads David to believe Rachel, not Cheryl, was the intended target of the scheme that ultimately led to Matthew’s disappearance, and that Berg is tied to the conspiracy.
FBI agent Sarah Greer (Logan Browning) begins to question David’s sentencing. She works alongside her father, FBI agent Max Williams (Chi McBride), as part of Boston’s fugitive task force, and although they were not particularly close before, their partnership on the job has brought them closer.
Browning says that doubt comes from instinct. “She sees a father in his desperation. And she's familiar with her dad's desperation to be in her life again in whatever way that is.” Max, however, remains focused on bringing David back into custody. “For Max, this case doesn't change his life in any way,” McBride says. “In the end, he can now prioritize his relationship with his daughter.”
Meanwhile, Swiss investigator Müller arrives in Boston with a theory that the body found at Matthew’s bed may belong to a missing child from a Payne-run orphanage. Hayden—heir to the Payne family and Rachel’s former boyfriend—positions himself as an ally. But Rachel later uncovers Six Flags photos showing him holding Matthew’s hand, linking him directly to the disappearance. David, Rachel, and agent Greer move in on the Payne estate as the case unravels.
“They've been played for suckers all the way through,” Worthington says. “That character's trying to help our characters. It's a big betrayal in that respect. And then an even bigger emotional betrayal for Rachel.”
The boy found in David’s home was Martin Bischoff, a Swiss child taken years earlier from a murder scene in Geneva after the deaths of his guardians.
He later lived in a Payne-run orphanage, where he disappeared shortly before Matthew’s alleged death. He matched Matthew in age and appearance but suffered from metachromatic leukodystrophy (MLD). A later blood test confirmed the body was Martin, not Matthew.
For years, the official version stated that 3-year-old Matthew Burroughs was murdered in his bed, and David was convicted based on evidence including a bloodied baseball bat, a neighbor’s testimony claiming she saw him bury the bat in a forest, and his history of sleep terrors.
It is later revealed that the neighbor lied at the request of Nicky Fisher, a Boston mobster seeking revenge against Lenny, David’s retired police officer father, after the death of his own son in prison.
Hayden Payne killed Martin Bischoff, placed his body in Matthew’s place, and manipulated DNA evidence through the Payne family to confirm the victim as Matthew. He then took the real Matthew and raised him as Theo for five years.

Hayden believed he was Matthew’s biological father. When Cheryl used Rachel’s name at Berg Reproductive clinic, he assumed Rachel was the patient and provided his genetic material for the procedure.
Years later, after seeing Matthew at a barbecue with Rachel’s family, he realized the child was Cheryl’s, but still believed the boy was his son. At the Payne mansion, Rachel reveals that Cheryl was already pregnant at the time of the procedure. Gertrude confirms a paternity test was conducted, though she never told Hayden the truth about its results.
As David and Agent Greer leave with Matthew, Hayden shoots his mother and flees with Rachel.
Hayden pushes Rachel and tries to escape with Matthew, but David catches him. In the struggle, Hayden shoots David. Agent Greer orders him to drop the weapon. Hayden breaks down, saying Matthew was the best thing in his life. Rachel tries to talk him down, but he turns the gun on her. Greer shoots and kills him. David, gravely injured, looks at Matthew and says: “I found you,” before losing consciousness.
For Hull, the emotional weight of that scene comes less from the act itself than from everything that leads into it. “I think for a successful ending, it’s not about the ending, it’s about everything that came before. It’s about everything that he had to go through to get to that moment,” he says. “That’s what makes a Harlan Coben show successful—because of the journey you’ve taken with David and Rachel over this time, you get to feel what he feels in the end.”
Eight months later, David’s conviction is overturned and the truth about Matthew’s case begins to spread in the media. Rachel publishes her account as a book. Cheryl has a daughter with her current husband, and the family gathers at the funeral for Lenny, David’s father, who died of colon cancer. Matthew still struggles to recover his memories but is trying. In the final moment, David says he will always find his son again while holding Rachel’s hand.
“I was glad it didn’t end in this big romantic gesture. There’s a gentleness and a simplicity. Sometimes a power comes through a gentle and simple gesture. It’s OK to be open ended. That’s hope. We leave that in the audience’s hands,” Worthington says.
Lower agrees. "They’re just observing their family finally together. They’ve earned that moment, to have each other’s back. Who knows what the future will bring, but it’s a good foundation. They’ve been through hell together."

When the soul of Joseon-era royal concubine Kang Dan-shim (The Glory’s Lim Ji-yeon) is magically transported to modern-day Seoul in Netflix’s My Royal Nemesis, Dan-shim takes the time-slip in stride. Waking up in the body of struggling actress Shin Seo-ri (also played by Lim), she soon finds herself landing bigger roles in the K-drama industry and winning over neighbors at her goshiwon with her bold, no-nonsense personality.
As she learns the ropes of modern life, Dan-shim catches the eye of Cha Se-gye (When the Phone Rings’ Heo Nam-jun), a lonely chaebol heir with a reputation for cutting corners and screwing over the little guy. But, as Dan-shim gets to know Se-gye, it becomes clear that those rumors are false, the result of an ongoing smear campaign masterminded by Choi Mun-do (Jang Seung-jo), Se-gye’s cousin, who will stop at nothing to be named the next CEO of The Chail Group.
The 14-episode reincarnation rom-com ups its stakes by not only tying the souls of Dan-shim and Seo-ri together, but also the souls of Se-gye and Yi Heon (a.k.a. Grand Prince Cheongheon) and Mun-do and Yi Jae (a.k.a. King Anjong). Like Dan-shim does with Seo-ri, Se-gye and Mun-do share faces and fates with these men from Joseon.
In present-day Seoul, Se-gye and Dan-shim fall in love, and plan to stay together forever. But forever may not be very long. The red comet that appeared in the sky of Dan-shim’s Joseon and in the sky of modern-day Seoul is about to move on, and Dan-shim fears her soul will be pulled back into her original body just as mysteriously as it was brought to Se-gye’s time. Will the two be granted a happy ending?

For most of My Royal Nemesis, our protagonist operates under the assumption that she was born Kang Dan-shim, a Joseon-era peasant who would become a royal concubine. However, when she starts to remember a painful memory from Seo-ri’s past, she realizes that she was born Shin Seo-ri in modern-day Korea. Dan-shim and Seo-ri swapped souls when they were both children, following near-death drownings. They grew up in each other’s times and bodies before switching again as adults when Seo-ri (living as royal concubine Dan-shim) is forced to drink poison by order of King Anjong.
At first, this major revelation seems to spell a happy ending for Seo-ri and Se-gye. Seo-ri can stay in the body (and time) she was born into without feeling like an imposter. Then, Se-gye is stabbed by one of Mun-do’s hired hands and his life hangs in the balance. Seo-ri’s shaman friend tells Seo-ri that she must go back to the Joseon era if she wants her love to live. For Se-gye to survive in modern-day Seoul, Yi Heon must survive his brother’s murder attempt in the Joseon era.
Seo-ri does it, willing her soul back to the Joseon era without knowing if she will ever be able to return. She finds Yi Heon, with whom she shared a companionship before traveling to modern times, and helps him escape his brother’s clutches. Seo-ri takes an arrow for Yi Heon, and the two fall from a cliff into a river below. While we don’t see their fate, Se-gye wakes up in the hospital, implying that Yi Heon at least survived and Seo-ri successfully broke one part of the tragic cycle of fate. Se-gye’s relief is short-lived when he realizes that Seo-ri has fallen into a mysterious coma.

Yes, My Royal Nemesis has a happy ending. At first, Seo-ri’s soul does not return to either body it has inhabited. It is instead stuck in a painless purgatory somewhere between life and death. This liminal space is so painless that Seo-ri cannot remember her love for Se-gye.
But Se-gye does not give up on her. He visits The Seoul Museum of History, where the Joseon-era portrait Yi Heon once painted of Dan-shim/Seo-ri hangs on display. After seeing the artwork and Yi Heon’s journal, recently returned to Korea by the British Museum, Se-gye remembers Yi Heon’s love for Dan-shim. Though Se-gye had previously only seen Yi Heon’s life through reincarnation dreams, their souls are connected.
The power of the moment allows Se-gye to reach Seo-ri. She hears his voice, asking her to “please come back,” and she remembers her love. Seo-ri chooses to leave the purgatory for a life with Se-gye; even if it will come with its fair share of pain, it will come with joy too. The two reunite and fall into one another’s arms as a summer snow falls from the sky.
Mun-do’s karma comes around too. Se-gye and Seo-ri work with the police to prove Mun-do’s role in the death of a nurse he paid off to poison Se-gye. He ends the series in jail, away from his beloved son and his beloved corporation. Seo-ri visits him to explain that he lost his one chance to redeem himself, implying that he should have prioritized taking care of his son over vying for money and power.
In the Joseon era, we see that both Yi Heon and Dan-shim survived their fall from a great height. They are now in disguise, but free to live their lives together as nobodies. It’s a bit of a sloppy ending for the two, given that Dan-shim was in Se-ri’s body when Yi Heon met Dan-shim. Presumably, Dan-shim did not meet Yi Heon until she woke up, wet with an arrow wound. However, if we’ve learned anything from My Royal Nemesis, it is that a soul connection can supercede reason.
In Seoul, Seo-ri and Se-gye live happily ever after. With Mun-do in jail, Se-gye is in line to become the next CEO of Chail Group. And Seo-ri is already studying her lines for her next K-drama. Most importantly, the two have promised to stay by one another’s side.

Ever since executive chef Carmen Berzatto attempted to transform the Original Beef of Chicagoland into a Michelin-starred restaurant, the Bear (and, to an extent, The Bear) survived as a chaotic, quixotic idea—a fine-dining mirage built on dysfunction in an arid restaurant landscape. But in the show’s fifth and final season, Carmy, Sydney, Richie, and the rest of their bruised-but-breathing kitchen staff get one last shot at keeping their aspirational vision alive. Which is to say: They bicker, they cook, and they try not to drown during a torrential downpour for a final dinner service that might determine everything.
This time, though, Carmy isn’t in charge. Season 5 picks up the morning after the Season 4 finale, when Sydney has taken reluctant control alongside Richie and Natalie, attempting to orchestrate an impeccable multi-course meal for the Michelin inspector they’re convinced is arriving that night. All they have is a dwindling supply of ingredients, a flooded building, and staff aware that their jobs are in jeopardy. And yet, in their quest for culinary perfection, and as Carmy evaluates his decision to retire, the group pulls together without resorting to the profane, deafening chaos that characterized their previous work, almost entirely thanks to Sydney’s opposite-in-every-way leadership style. Every dish gets out, every table leaves happy, and the math finally works, even if just barely.
So, what does that mean for the Bear going forward? In the Season 5 finale, titled “The Original Beef of Chicagoland,” the restaurant’s fate shines brighter than expected. The next morning, Carmy discovers that the Michelin “Star Man” never showed up the previous night. Instead, during a call, he learns the real inspector, Peter Clark, had quietly visited months earlier. His verdict: the food was “exceptional and creative,” the “talent was undeniable,” and the dining room “felt alive without being precious or tryhard.” When Carmy relays the news to Sydney, she can’t help but ask: “Did we get a star?”
Carmy slowly shakes his head, before breaking into a soft smile.
“We got two.”
After processing this enormous badge of honor, Sydney and Carmen eventually share an intimate, meaningful embrace in the dining room (sorry Reddit theorists, no kiss), bathing in the morning sunlight and realizing a dream that sometimes never seemed possible between them. “You did it,” Carmy tells her.
Over the next week, the rest of the staff sinks into stability, making good on all the sweat, ambition, and belief it took to get there. The restaurant has a real foundation now—it has leadership, vision, a seal of excellence that will guarantee an endless flood of reservations, and a franchised sandwich shop. And, as Luca (Will Poulter) notes, the Bear has something even more difficult to find in a fine dining establishment: family. It’s a sweet, satisfying ending that makes it hard to say goodbye to this tight-knit, trauma-bonded kitchen staff. Here’s where each “family” member stands now that series creator Christopher Storer has closed up shop.

Carmy leaving the Bear right as the restaurant earns its Michelin stars feels like a bittersweet personal decision—and risky considering that he’s never worked a “real job” in his life. “Do you have any skills outside of this?” Sydney asks him, slightly concerned. “Have you ever had to write down a real resume?” The standout chef has his reasons for quitting. He also hopes to become an architect, or at least, for now, an intern at an architecture firm, where he lands a job interview thanks to an assist from Stevie (John Mulaney).
During the interview, he shares a moving monologue about his entire existence as a chef. “I didn't want to know my coworkers. I didn’t care to care for them,” he says. “I saw them as tools to help me survive in the kitchen.” The previous night’s service, in which the entire kitchen pulls together under Sydney’s leadership, crystallized his need to move on. As Carmy shares with Jimmy (Oliver Platt) earlier, leaving the Bear is the only way he can end the vicious traumatic cycle that threatened to devour everyone in his life. “Lee was right,” Carmy says of his belligerent uncle. “To break patterns you have to break patterns.” Who knows? Maybe he’ll design the next great restaurant.
And yes, for those wondering about his love life: Claire Bear shows up to Richie’s daughter’s birthday party in the final scene, offering hope that their relationship is on the road to repair.

It was always clear that Sydney was the brains behind the Bear, thanks to her dexterity and creativity in the kitchen. But even she can’t believe the Michelin stars bestowed upon the restaurant. Never one to take credit, she enjoys a few quiet moments taking in the individual praise and team’s achievements—further validation that staying at the Bear instead of jumping to Adam Shapiro’s new venture last season was the right choice. As revealed by her uber-proud father over breakfast, Sydney’s photo graces a front section of a Chicago newspaper celebrating the Bear’s turnaround. After doubt about her future caused strain in their relationship, it appears Sydney has finally found the place she belongs with the dad she always wanted.

This season started out poorly for Richie when his car got T-boned on the way to work in a surprise pre-season episode. Luckily, it ended much better for him—and in an upgraded mode of transportation. Earlier in the day, Natalie informs him that he’s been invited to an international hospitality seminar in Japan, which initially causes a panic attack. Richie has never left the country, let alone flown in a plane. Thanks to some rocky reassurance from Carmy, and full clearance from Sydney to miss a week of work as long as he brings her back stickers and weird snacks, Richie ultimately relents and takes the next big step in his career.
Luckily, Jess (Sarah Ramos) eases his fear of flying and journeys with him, with a few subtle hand touches all but confirming a budding romance that most of the kitchen had already sussed out. Before they go, Richie, now a master of hospitality, throws a surprise birthday party for his daughter Eva (Anabelle Toomey), convening the whole family—including Lee (Bob Odenkirk), Donna (Jamie Lee Curtis), Tiffany (Gillian Jacobs ), her husband Frank (Josh Hartnett), and even Claire Bear (Molly Gordon)—in celebratory harmony.

While everyone has been fussing in the kitchen and dining room, Natalie a.k.a. Sugar has been quietly managing the books in the back, making sure the lights stay on. That was a near-impossible task with Carmen in charge, especially when her brother demanded that the restaurant’s menu change every night (a mandate that required new, expensive ingredients and made profitability impossible). As she notes in the finale, the rain-soaked dinner service didn’t net them any extra revenue. Still, with Sydney in charge, she seems more optimistic about the restaurant’s future. “Usually, I’m filled with dread with numbers, but today I’m not worried, because we have a captain,” she tells Sydney. And with a healthy baby, a loving husband and doting father (Chris Witaske), and a reformed mother trying to finally be of service, Natalie looks like she’s forging the family and business she’s always wanted.

Throughout the previous night’s dinner service, Marcus was in a bad headspace spurred on by his estranged father’s solo visit to the Bear. It impacted his mood, his work, and his relationship with Luca, turning a typically even-keeled, good-natured pastry chef into an anxious, defensive liability. But after sharing some meaningful time with his father (which included a special candle-poured dessert) and Sydney (who commiserates with him about losing their respective mothers), Marcus finds some catharsis and begins to make inroads with his dad. As he drops Luca off at the airport for his return to Copenhagen, he admits he plans to spend his off day in the lab, attempting to create another otherworldly confection. It’s the kind of grind that's made him one of the most exciting new chefs in the city.

Tina came dangerously close to jumping ship and pursuing another, more secure chef job, but Sydney convinced her that she’d be her right-hand woman in the kitchen should they make their restaurant a profitable endeavor. It’s a fitting end to Tina’s evolution—from someone who joined the Beef with hardly any skills to middle-aged culinary craftswoman. In the weeks after learning about their Michelin status, Tina fantasizes about her new life as the Chef de cuisine with her husband beside her (played by the actor’s real-life husband David Zayas). “You think I can do it?” she asks him. “I know you can,” he replies.

Ebraheim stayed in the margins of the show this season, but it’s clear his prospectus on the sandwich business and its franchising plan will be key to keeping the Bear alive. Despite the fact that Ebra anxiously rehearsed his pitch for hours, Carmy cuts him off and tells him that his plan to franchise the Beef side window into a few suburban locations is a perfect idea, having been tipped off by his Uncle Jimmy. “I want you to do it,” Carmy tells him and the Beef staff. “You guys are the reason this place is what it is.” The next step will be furnishing their “ghost kitchens” and bringing their signature sandwiches to the greater Chicago area.

In what turns out to be the biggest moment in Neil’s young serving career, the handyman and Berzatto family friend keeps his composure and colorfully chats up the diner everyone believed was the Michelin-star inspector. The superb, improvisational interaction only bolstered Neil’s confidence as a server, setting him down a hospitality path he never realized could bring him so much joy. As for his brother Theodore (Ricky Staffieri) and the rest of the extended clan, there’s easy reason to believe that they'll continue to shadow the Berzattos wherever they go.

It’s hard to count how many times Uncle Jimmy and Computer uttered the words “air rights” this season, but the repetitive phrase should seemingly be useful now that the Bear is a Michelin-certified restaurant. The financial investment into the restaurant has sunk Jimmy’s bank account, but Ebra’s franchise projections give him reason to hope there’s light at the end of this dark, clogged tunnel. (He also has his sights set, romantically, on Deedee, with whom he interacts affectionately at Eva’s shindig.) Then again, the Bear might still work out, too. “This place is going to be OK. She’s the real deal,” Carmen says of Sydney. “How do you know?” Jimmy asks him. Carmy replies matter of factly: “I’ve been in a few of them.”

Agent Kim Reactivated, a Korean drama broadcast on SBS TV domestically and streamed on Netflix globally, has become one of the summer’s biggest hits. The thrilling action series follows an unassuming bank manager and single dad named Kim (So Ji-sub). When his teen daughter, Min-ji (Seo Su-min), disappears after a fight at school, Kim’s background and skillset as a secret agent is revealed as he stops at nothing to find her.
Agent Kim is aided by his two friends: taekwondo instructor Sung Han-soo (Choi Dae-hoon) and boisterous military man Park Jin-cheol (Yoon Kyung-ho). Like Agent Kim, Han-soo and Jin-cheol are former spies and current parents. In an effort to rescue Min-ji, the three middle-aged, bespectacled dads face off against criminal organizations and state intelligence entities as what starts as a clash between two teenagers disturbs a decade-long lull in intergovernmental espionage. The 10-episode drama about paternal anxiety and devotion wrapped up over the weekend. Here’s everything that happened in the final episodes of Agent Kim Reactivated.
The first few episodes of Agent Kim Reactivated imply that Kim’s beloved daughter Min-ji has died. At the end of Episode 1, Hye-ri (Yoo Ji-an), Min-ji’s classmate and the daughter of Juhak Construction group chairman Ju Gang-chan (Joo Sang-wook), hits Min-ji over the head with a brick. Min-ji loses consciousness, leading Hye-ri and Min-ji’s other bullies to assume she is dead. A panicked Hye-ri convinces local thug Golden Teeth (Jo Bok-rae) to take care of the body.
However, unbeknownst to both Hye-ri and Golden Teeth, Min-ji has survived the attack. She later wakes up in the cold storage warehouse where Golden Teeth has temporarily stashed her “body”, and escapes. This is just the beginning of Min-ji’s many efforts to get back to her father. Next, she is picked up by Ju Gang-chan while trying to hitchhike. Then, she is “rescued” by South Korea’s Special Missions Directorate (SMD), where director Kang Guk-cheol (Won Hyun-joon) ties her up and questions her for information about her father. It’s a foolish strategy. Agent Kim has kept his daughter in the dark about his dark past.

Agent Kim was born in North Korea, and was trained from a young age to be a special operative for his native government. However, when Kim is captured during a failed mission in South Korea, he has a choice to make: be disappeared by the SMD, or agree to work for them. He chooses the latter, and becomes friends with operatives Han-soo and Jin-cheol through their missions together.
Kim also meets and falls in love with a South Korean woman. When she dies in childbirth, he forces his retirement from the SMD in order to raise his baby. The SMD allows his freedom on one condition: he must lay low. If the North Korean government realizes their former operative is alive in South Korea, it will cause an international incident.
Kim gladly devotes himself to a quiet life as a father and office worker, and the SMD leaves him alone. But when Min-ji goes missing and Kim starts wreaking havoc across the city looking for her, North Korean Intelligence learns of his continued existence. The SMD and North Korean Intelligence both set out to capture Agent Kim.
The pseudonym “Agent 66” is first used by Park Yeong-gwang (TaecYeon), a North Korean spy who trained alongside Agent Kim. When Yeong-gwang dies during his and Agent Kim’s first mission to South Korea, betrayed by the North Korean agency that sent them, Agent Kim takes on the moniker.
When Agent Kim reappears on the North Korean government’s radar after years of being presumed dead, Park Yeong-gwang’s little brother, Gang Seong (Kim Sung-kyu), is sent to kill him. He too uses the name “Agent 66” as his codename. Though killing Kim may be Gang Seong’s orders, the mission is also personal for the new Agent 66, who has been told that Kim is responsible for the death of his big brother. When Kim dispels this lie, revealing that it was North Korean intelligence director Ri Eung-ryeong who betrayed them all, Gang Seong abandons his mission to kill Kim.
Later, after Ri Eung-ryeong spills his secrets to the South Korean government in exchange for asylum, Agent Kim kidnaps and hands Ri Eung-ryeong over to Gang Seong. Gang Seong brings Ri Eung-ryeong back to North Korea, where he is presumably punished for his defection.

Heading into the season finale, Agent Kim has managed to evade SMD capture by protecting defector Ri Eung-ryeong during the intergovernmental talks between North Korea and South Korea. With the completion of one final mission for the SMD, Kim has earned his freedom (again) and the promise of a normal life with Min-ji. He just has to stay alive to claim it. And, unfortunately, Ju Gang-chan—the former thug turned Juhak Construction chairman—is still gunning for him. He wants to see Agent Kim, Han-soo, and Jin-cheol suffer for besting him. To do so, Ju Gang-chan kidnaps Han-soo and Jin-cheol’s children. He holds the teens at gunpoint and forces Han-soo and Jin-cheol to fight Agent Kim.
The three friends initially go along with Ju Gang-chan’s orders to kill Agent Kim, but use their years of experience working together to come up with an out. They lure a boasting Ju Gang-chan closer to the fence of the cage in which they are fighting, and manage to knock it down onto the villain. They rescue their children, and hand Ju Gang-chan over to the authorities. Later, he is stabbed multiple times by Golden Teeth while being transported out of the hospital. Hye-ri, the spoiled daughter whose bullying acted as a catalyst for this entire sequence of events, has been sent abroad following the public humiliation of her family.

The father-daughter relationship between Agent Kim and Min-ji is at the heart of Agent Kim Reactivated, and it’s at the heart of the finale, too. Following the action of the series, the two have grown closer after being forced apart. Min-ji now understands more about her father’s past and motivations, and no longer sees him as a timid man who would rather bow than fight.
In the final episode, they are reunited after Agent Kim fakes his death to escape international accountability for his past acts of espionage. The father and daughter start a new life together under new identities, with the help of the SMD. While they leave the identities of Bank Manager Kim and Kim Min-ji behind, they are somehow still in contact with Han-soo and Jin-cheol, who help the Kims move into their new home.
It’s likely—the series has been one of the most successful Korean dramas of the year so far on Netflix and on broadcast television in Korea. According to The Chosun Daily, the production team is currently discussing the possibility of a second season.
If Agent Kim Reactivated does get more episodes, the story will most likely revolve around Agent Kim’s new job at Baekho Employment Agency. In the first season finale, Kim makes a deal with Lee Dong-kyu, a new and enigmatic character who agrees to take down Juhak Construction for our protagonist. The cost is implied to be Agent Kim’s employment at Lee’s mysterious company.
While we don’t learn much about Lee Dong-kyu in the Netflix series, the character is an important element of the webtoon on which Agent Kim Reactivated is based. In the webtoon, the Baekho Employment Agency, aka the White Tiger Job Center, is a mercenary organization founded and led by Tom Lee. The private company takes on high-risk, high-reward jobs--for the right price. If Agent Kim Reactivated continues for a second season, Agent Kim may find himself in even more dangerous scenarios due to his deal with Lee Dong-kyu.

In July 2025, a judge sentenced criminology graduate student Bryan Kohberger to life in prison after he pleaded guilty to stabbing four college students to death on Nov. 13, 2022, at a house near the University of Idaho’s Moscow, Id., campus. The students were Ethan Chapin, 20, Kaylee Goncalves, 21, Xana Kernodle, 20, and Madison Mogen, 21.
A year later, Kohberger told the New York Times in a phone call from prison that he’s filed a petition challenging his conviction, arguing that he is innocent and did not mean to confess to the killings. “A lot went wrong in those plea discussions,” he told the Times from a maximum security prison south of Boise. “I really do want that to be heard.”
The comments from Kohberger came days before a new documentary about the case premiered on Netflix. The Idaho Murders: College Nightmare, out July 29, traces how police found Kohberger’s DNA on a knife sheath left behind at the crime scene, identified his getaway car, and figured out that his cell phone went off-grid around the time he committed the crime. The three-part series features interviews with families and friends of the victims, people who knew Kohberger, and law enforcement officials to examine what we know about the case.
Because Kohberger pleaded guilty a month before he was scheduled to stand trial, it remains unclear why he targeted these four college students.
“Ultimately we never have been able to answer that question that everybody wants answered: ‘Why?’” says Moscow Police Chief Anthony Dahlinger. “We don’t know, ‘Why these four?’ We don’t know, ‘Why this house?’ I don’t think we’ll ever know.”
The documentary's participants suggest that Kohberger may have been studying criminology so he could carry out the perfect crime. The series features Lilly Karaban, who sat next to Kohberger in an undergraduate criminology class on serial killers at DeSales University and said he dominated class discussions and wouldn’t let her get a word in on a group project. She says she didn’t see him socializing outside of class, describing him as being “in his own world.”
Kohberger was doing a PhD in criminology at Washington State University, a 10-minute drive from the University of Idaho, and several female students told authorities that he was unpleasant to be around. In one instance, a female student said he followed her to her car and spoke to her in an aggressive manner, making her feel uncomfortable. The series also highlights a questionnaire that Kohberger posted on Reddit as part of a supposed research project, asking people who had been incarcerated how they chose and approached victims.
In the aftermath of the murders, Karaban says she believes Kohberger “has a thing against women, based on the description of what he did to those three poor girls. People who brutalize women the way Kohberger did dislike them, find them threatening. So they take all that anger out on them.”

Families interviewed in the documentary have mixed feelings about the plea deal and had been anticipating a trial.
As director Skye Borgman says, “If there had been some ask of the perpetrator to—in exchange for this plea deal—give some information as to the why, I think it would have helped the families a lot. They’re angry.”
Some of the victims’ families are disappointed that he didn’t receive the death penalty, feeling like he got off easy. Kaylee Goncalves’ dad Steve dismissed prison as “daycare.” His daughter Alivea says she felt “hurt” by the plea deal and didn’t think it should have been an option for Kohberger, arguing, “Monsters like that should never-ever ever have options ever again.”
Moscow Police’s Dahlinger maintains that, in a way, Kohberger received a form of the death penalty: “He is sentenced to die in prison.”
Xana’s dad Jeff Kernodle says the victims’ families were hoping to hear more from Kohberger, arguing, “He should have to tell them why he did it, tell all of us parents why he did it.”
On the other hand, Xana’s sister Jazzmin Kernodle says in the series she was dreading a trial that could last months. “I think the plea deal did save us a lot of emotional trauma that we would have dealt with going through a trial,” she says. “I am grateful to get it over with and slowly start to heal.”
Some in party are delighted by leader’s tack rightwards but opponents have savoured latest Conservative controversy
There was a moment in the middle of this week when a news alert raised eyebrows among the politically committed. It read: “Kemi Badenoch: Former neo-Nazi candidate would just be sorting out bins.” It was a collection of words that might prompt palpitations in the most sanguine of communications professionals, followed by panicked advice that retreat was necessary. But as a deeply weird week for the Conservative party came to a close on Friday, its leader appeared adamant she would hold the line.
With Badenoch accused of aping Reform UK on policy and purging centrists from her party in recent weeks, her decision to stand by a man who was jailed after creating sexualised images of a Jewish MP and calling her a “rodent” has prompted concerns about the leader of the opposition’s political antennae and the Tories’ wider strategy.
Continue reading...Some in party are delighted by leader’s tack rightwards but opponents have savoured latest Conservative controversy
There was a moment in the middle of this week when a news alert raised eyebrows among the politically committed. It read: “Kemi Badenoch: Former neo-Nazi candidate would just be sorting out bins.” It was a collection of words that might prompt palpitations in the most sanguine of communications professionals, followed by panicked advice that retreat was necessary. But as a deeply weird week for the Conservative party came to a close on Friday, its leader appeared adamant she would hold the line.
With Badenoch accused of aping Reform UK on policy and purging centrists from her party in recent weeks, her decision to stand by a man who was jailed after creating sexualised images of a Jewish MP and calling her a “rodent” has prompted concerns about the leader of the opposition’s political antennae and the Tories’ wider strategy.
Continue reading...The late producer’s gift for bringing in elements from dance music’s cutting edge drew all manner of music royalty – and he often made them sound better than ever before
• William Orbit, pop producer for Madonna, All Saints and more, dies aged 69
William Orbit’s first band were a curious business. Torch Song had one foot in the pop mainstream – their biggest success came about when one of their tracks was featured on the soundtrack of the Tom Hanks-starring sex comedy Bachelor Party – and one in the left field: they recorded at London’s anarchist hub Centro Iberico, famed for staging gigs by Crass and Throbbing Gristle; they covered the Velvet Underground’s Venus in Furs. Mothdoom Ecstasy is very much of its time – stuttering samples, booming drums – but in its hazy synth textures and ethereal female vocals, you can definitely hear intimations of Orbit’s future approach.
Continue reading...
A new political era for Colombia: a hard-right president promises order, growth and confrontation.
(Image credit: John Vizcaino)

Вторая статья из трёх об исследовании MiroFish, открытого стека мультиагентной симуляции общества. В первой части изложены методология исследования и находка Silent Failure. В этой части: досье вымышленной страны с восемью классами заложенного абсурда, четыре байт-идентичных прогона с разными результатами и пре-регистрированный эксперимент, который локализовал причину.
Читать далее
Every generation seems to find a new approach to fix American education. Today, it's artificial intelligence.
Microsoft CEO Satya Nadella, investor Marc Andreessen, and a growing number of policymakers argue that generative AI will democratize education by giving every student a personalized tutor, writing coach, research assistant, and study partner available around the clock. If every child has access to individualized instruction, they suggest, longstanding achievement gaps will begin to narrow.
It's an appealing vision. It is also a familiar one.
As a historian of education and former public school teacher, I have spent more than 35 years watching education reforms arrive with extraordinary fanfare and confidence. Each was promised to transform opportunities for disadvantaged students. Each produced some genuine benefits. Yet none fundamentally changed the inequalities that shape educational achievement in the U.S.
That is because Americans have long asked schools to solve problems that originate far beyond the classroom.
The belief itself is almost as old as public education. In 1848, Horace Mann, the first secretary of the Massachusetts Board of Education, called schools "the great equalizer of the conditions of men." He believed education could prepare informed citizens while expanding opportunity for all. Nearly two centuries later, that ideal still shapes how Americans think about solving inequality.
When gaps in achievement persist, we rarely ask whether schools alone can overcome them. Instead, we look for the next educational breakthrough.
During the 1990s and 2000s, that breakthrough was charter schools. Advocates argued that competition and innovation would dramatically improve outcomes for students in poor and underserved communities. Some charter schools did. Many did not. A 2023 Stanford University study found modest academic gains overall, but nothing approaching the transformation supporters had promised.
Around the same time, Teach For America offered another solution. By recruiting graduates from elite universities to teach in under-resourced schools, it hoped elite, young teachers could overcome educational disadvantage. Many participants became talented educators. But high turnover limited the program's reach, and no teaching corps—however committed—could erase the effects of poverty, housing instability, or unequal access to opportunity.
Then came No Child Left Behind. Signed into law in 2002, it promised that standards, testing, and accountability would finally close gaps in student achievement across race and class. The law succeeded in exposing disparities, but it also encouraged teaching to the test and narrowed what many schools taught. The gaps it sought to eliminate largely remained.
Now AI has become the latest reform wrapped in transformational promises. Its advocates are right about some of its potential in education. Generative AI can help explain difficult concepts, provide immediate feedback, translate instructional materials, and make individualized support more accessible than ever before. Teachers can use it to differentiate instruction and reduce routine administrative work. Used well, AI will almost certainly improve teaching and learning in many classrooms.
But what occurs in classrooms has never been the primary obstacle to educational equality. Students do not arrive at school with equal access to stable housing, nutritious food, quality health care, reliable internet, experienced teachers, safe neighborhoods, or family resources. These inequalities accumulate long before a child enters kindergarten and continue long after the school day ends. Chatbots, no matter how well-designed, will not erase them.
This is not an argument against AI, though we must pay close attention to both its real benefits and its real drawbacks, such as interfering with students' ability to think critically, which is no small thing. Schools should experiment with new technologies that genuinely help students learn. As teachers have always adapted to new tools, from calculators to the internet, AI will almost certainly become another part of that evolution.
The problem arises when technological innovation is mistaken for social policy.
History suggests that educational reforms often aim to improve instruction without transforming the conditions that produce educational inequality in the first place. These reforms can make some schools better, some teachers more effective, and some students more successful. What they can’t do is eliminate the economic and social disparities that shape children's lives before they ever enter a classroom. Generative AI is unlikely to be different.
Americans continue to embrace Horace Mann's vision that public education expands opportunity. It goes without saying that schools matter enormously. They can ignite curiosity, inspire life goals, support critical relationships, and open doors to opportunities that might otherwise remain closed.
But schools have never been able to overcome inequality by themselves.
If we really want to narrow opportunity gaps, we must stop expecting educational innovations—whether charter schools, standardized testing, or artificial intelligence—to accomplish what only broader economic and social reforms can achieve.
AI may transform how students learn.
It will not, by itself, transform the unequal society that shapes students' lives and in which they learn.

Вызов инструмента ИИ-агентом легко теряется между моделью, MCP-клиентом, сервером и внешним API. В конце июля сразу два события показали, каким способом индустрия собирается решать эту проблему. Новая спецификация MCP закрепила передачу W3C Trace Context и начала выводить собственный механизм логирования из протокола в пользу OpenTelemetry. Одновременно сообщество OpenTelemetry назвало наблюдаемость ИИ-агентов одним из следующих направлений развития проекта. Разбираемся, что уже стало частью стандартов, что пока остаётся дорожной картой и почему эти события стоит рассматривать вместе.
Читать далее
Онкологические заболевания являются одними из лидеров в списке самых смертоносных и трудноизлечимых для человека, особенно при их позднем выявлении. Первопричиной возникновения рака может быть как внутренний фактор (генетика, гормональные изменения и т. д.), так и внешний (вредные привычки, излучение, микроорганизмы и т. д.). Одним из самых агрессивных типов рака является HNSCC (плоскоклеточный рак головы и шеи), который начинается в тканях полости рта и горла. Ученые из Пенсильванского университета (Филадельфия, США) разработали жевательную резинку, способную эффективно бороться с микроорганизмами, которые тесно связаны с HNSCC. Из чего состоит эта чудо-жвачка и как она работает? Ответы на эти вопросы мы найдем в докладе ученых.
Читать далее